summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.depend64
-rw-r--r--.globfile75292
-rw-r--r--Makefile75
-rw-r--r--backend/AST.v216
-rw-r--r--backend/Allocation.v418
-rw-r--r--backend/Allocproof.v1827
-rw-r--r--backend/Allocproof_aux.v850
-rw-r--r--backend/Alloctyping.v509
-rw-r--r--backend/Alloctyping_aux.v895
-rw-r--r--backend/CSE.v420
-rw-r--r--backend/CSEproof.v845
-rw-r--r--backend/Cmconstr.v911
-rw-r--r--backend/Cmconstrproof.v1154
-rw-r--r--backend/Cminor.v348
-rw-r--r--backend/Cminorgen.v398
-rw-r--r--backend/Cminorgenproof.v2409
-rw-r--r--backend/Coloring.v267
-rw-r--r--backend/Coloringproof.v845
-rw-r--r--backend/Constprop.v1032
-rw-r--r--backend/Constpropproof.v883
-rw-r--r--backend/Conventions.v690
-rw-r--r--backend/Csharpminor.v511
-rw-r--r--backend/Globalenvs.v587
-rw-r--r--backend/InterfGraph.v310
-rw-r--r--backend/Kildall.v1231
-rw-r--r--backend/LTL.v357
-rw-r--r--backend/LTLtyping.v93
-rw-r--r--backend/Linear.v203
-rw-r--r--backend/Linearize.v212
-rw-r--r--backend/Linearizeproof.v711
-rw-r--r--backend/Linearizetyping.v340
-rw-r--r--backend/Lineartyping.v254
-rw-r--r--backend/Locations.v476
-rw-r--r--backend/Mach.v295
-rw-r--r--backend/Machabstr.v371
-rw-r--r--backend/Machabstr2mach.v1120
-rw-r--r--backend/Machtyping.v367
-rw-r--r--backend/Main.v307
-rw-r--r--backend/Mem.v2253
-rw-r--r--backend/Op.v691
-rw-r--r--backend/PPC.v775
-rw-r--r--backend/PPCgen.v514
-rw-r--r--backend/PPCgenproof.v1242
-rw-r--r--backend/PPCgenproof1.v1566
-rw-r--r--backend/Parallelmove.v2529
-rw-r--r--backend/RTL.v349
-rw-r--r--backend/RTLgen.v473
-rw-r--r--backend/RTLgenproof.v1302
-rw-r--r--backend/RTLgenproof1.v1463
-rw-r--r--backend/RTLtyping.v1277
-rw-r--r--backend/Registers.v49
-rw-r--r--backend/Stacking.v226
-rw-r--r--backend/Stackingproof.v1610
-rw-r--r--backend/Stackingtyping.v222
-rw-r--r--backend/Tunneling.v131
-rw-r--r--backend/Tunnelingproof.v311
-rw-r--r--backend/Tunnelingtyping.v44
-rw-r--r--backend/Values.v888
-rw-r--r--caml/Allocationaux.ml39
-rw-r--r--caml/Allocationaux.mli5
-rw-r--r--caml/CMlexer.mli4
-rw-r--r--caml/CMlexer.mll112
-rw-r--r--caml/CMparser.mly327
-rw-r--r--caml/Camlcoq.ml98
-rw-r--r--caml/Coloringaux.ml615
-rw-r--r--caml/Coloringaux.mli8
-rw-r--r--caml/Floataux.ml23
-rw-r--r--caml/Main2.ml34
-rw-r--r--caml/PrintPPC.ml336
-rw-r--r--caml/PrintPPC.mli1
-rw-r--r--caml/RTLgenaux.ml3
-rwxr-xr-xccompbin0 -> 2961610 bytes
-rw-r--r--doc/compcert.html250
-rw-r--r--doc/index.html8295
-rwxr-xr-xdoc/removeproofs8
-rw-r--r--doc/style.css32
-rw-r--r--extraction/.depend395
-rw-r--r--extraction/Kildall.ml.patch22
-rw-r--r--extraction/Linearize.ml.patch22
-rw-r--r--extraction/Makefile91
-rw-r--r--extraction/extraction.v53
-rwxr-xr-xextraction/uncapitalize6
-rw-r--r--lib/Coqlib.v709
-rw-r--r--lib/Floats.v55
-rw-r--r--lib/Inclusion.v367
-rw-r--r--lib/Integers.v2184
-rw-r--r--lib/Lattice.v331
-rw-r--r--lib/Maps.v1034
-rw-r--r--lib/Ordered.v156
-rw-r--r--lib/Sets.v190
-rw-r--r--lib/union_find.v537
-rw-r--r--test/cminor/Makefile76
-rw-r--r--test/cminor/aes.cmp364
-rw-r--r--test/cminor/almabench.cmp159
-rw-r--r--test/cminor/fft.cm149
-rw-r--r--test/cminor/fib.cm7
-rw-r--r--test/cminor/integr.cm25
-rw-r--r--test/cminor/manyargs.cm53
-rw-r--r--test/cminor/qsort.cm30
-rw-r--r--test/cminor/sha1.cmp189
-rw-r--r--test/harness/mainaes.c739
-rw-r--r--test/harness/mainalmabench.c185
-rw-r--r--test/harness/mainfft.c72
-rw-r--r--test/harness/mainfib.c13
-rw-r--r--test/harness/mainintegr.c13
-rw-r--r--test/harness/mainmanyargs.c13
-rw-r--r--test/harness/mainqsort.c36
-rw-r--r--test/harness/mainsha1.c75
-rw-r--r--test/lib/staticlib.S26
109 files changed, 134574 insertions, 0 deletions
diff --git a/.depend b/.depend
new file mode 100644
index 0000000..dc2aa64
--- /dev/null
+++ b/.depend
@@ -0,0 +1,64 @@
+lib/Coqlib.vo: lib/Coqlib.v
+lib/Maps.vo: lib/Maps.v lib/Coqlib.vo
+lib/Sets.vo: lib/Sets.v lib/Coqlib.vo lib/Maps.vo lib/Lattice.vo
+lib/union_find.vo: lib/union_find.v
+lib/Inclusion.vo: lib/Inclusion.v
+lib/Lattice.vo: lib/Lattice.v lib/Coqlib.vo lib/Maps.vo
+lib/Ordered.vo: lib/Ordered.v lib/Coqlib.vo lib/Maps.vo
+lib/Integers.vo: lib/Integers.v lib/Coqlib.vo backend/AST.vo
+lib/Floats.vo: lib/Floats.v backend/AST.vo lib/Integers.vo
+backend/AST.vo: backend/AST.v lib/Coqlib.vo
+backend/Values.vo: backend/Values.v lib/Coqlib.vo backend/AST.vo lib/Integers.vo lib/Floats.vo
+backend/Mem.vo: backend/Mem.v lib/Coqlib.vo lib/Maps.vo backend/AST.vo lib/Integers.vo lib/Floats.vo backend/Values.vo
+backend/Globalenvs.vo: backend/Globalenvs.v lib/Coqlib.vo lib/Maps.vo backend/AST.vo lib/Integers.vo backend/Values.vo backend/Mem.vo
+backend/Op.vo: backend/Op.v lib/Coqlib.vo backend/AST.vo lib/Integers.vo lib/Floats.vo backend/Values.vo backend/Mem.vo backend/Globalenvs.vo
+backend/Cminor.vo: backend/Cminor.v lib/Coqlib.vo lib/Maps.vo backend/AST.vo lib/Integers.vo lib/Floats.vo backend/Values.vo backend/Mem.vo backend/Op.vo backend/Globalenvs.vo
+backend/Cmconstr.vo: backend/Cmconstr.v lib/Coqlib.vo lib/Maps.vo backend/AST.vo lib/Integers.vo lib/Floats.vo backend/Values.vo backend/Mem.vo backend/Op.vo backend/Globalenvs.vo backend/Cminor.vo
+backend/Cmconstrproof.vo: backend/Cmconstrproof.v lib/Coqlib.vo lib/Maps.vo backend/AST.vo lib/Integers.vo lib/Floats.vo backend/Values.vo backend/Mem.vo backend/Op.vo backend/Globalenvs.vo backend/Cminor.vo backend/Cmconstr.vo
+backend/Csharpminor.vo: backend/Csharpminor.v lib/Coqlib.vo lib/Maps.vo backend/AST.vo lib/Integers.vo lib/Floats.vo backend/Values.vo backend/Mem.vo backend/Globalenvs.vo
+backend/Cminorgen.vo: backend/Cminorgen.v lib/Coqlib.vo lib/Maps.vo lib/Sets.vo backend/AST.vo lib/Integers.vo backend/Mem.vo backend/Csharpminor.vo backend/Op.vo backend/Cminor.vo backend/Cmconstr.vo
+backend/Cminorgenproof.vo: backend/Cminorgenproof.v lib/Coqlib.vo lib/Maps.vo lib/Sets.vo backend/AST.vo lib/Integers.vo lib/Floats.vo backend/Values.vo backend/Mem.vo backend/Globalenvs.vo backend/Csharpminor.vo backend/Op.vo backend/Cminor.vo backend/Cmconstr.vo backend/Cminorgen.vo backend/Cmconstrproof.vo
+backend/Registers.vo: backend/Registers.v lib/Coqlib.vo backend/AST.vo lib/Maps.vo lib/Sets.vo
+backend/RTL.vo: backend/RTL.v lib/Coqlib.vo lib/Maps.vo backend/AST.vo lib/Integers.vo backend/Values.vo backend/Mem.vo backend/Globalenvs.vo backend/Op.vo backend/Registers.vo
+backend/RTLgen.vo: backend/RTLgen.v lib/Coqlib.vo lib/Maps.vo backend/AST.vo lib/Integers.vo backend/Values.vo backend/Op.vo backend/Registers.vo backend/Cminor.vo backend/RTL.vo
+backend/RTLgenproof1.vo: backend/RTLgenproof1.v lib/Coqlib.vo lib/Maps.vo backend/AST.vo lib/Integers.vo backend/Values.vo backend/Mem.vo backend/Globalenvs.vo backend/Op.vo backend/Registers.vo backend/Cminor.vo backend/RTL.vo backend/RTLgen.vo
+backend/RTLgenproof.vo: backend/RTLgenproof.v lib/Coqlib.vo lib/Maps.vo backend/AST.vo lib/Integers.vo backend/Values.vo backend/Mem.vo backend/Globalenvs.vo backend/Op.vo backend/Registers.vo backend/Cminor.vo backend/RTL.vo backend/RTLgen.vo backend/RTLgenproof1.vo
+backend/RTLtyping.vo: backend/RTLtyping.v lib/Coqlib.vo lib/Maps.vo backend/AST.vo backend/Op.vo backend/Registers.vo backend/RTL.vo lib/union_find.vo backend/Globalenvs.vo backend/Values.vo backend/Mem.vo lib/Integers.vo
+backend/Kildall.vo: backend/Kildall.v lib/Coqlib.vo lib/Maps.vo lib/Lattice.vo
+backend/Constprop.vo: backend/Constprop.v lib/Coqlib.vo lib/Maps.vo backend/AST.vo lib/Integers.vo lib/Floats.vo backend/Values.vo backend/Globalenvs.vo backend/Op.vo backend/Registers.vo backend/RTL.vo lib/Lattice.vo backend/Kildall.vo
+backend/Constpropproof.vo: backend/Constpropproof.v lib/Coqlib.vo lib/Maps.vo backend/AST.vo lib/Integers.vo lib/Floats.vo backend/Values.vo backend/Mem.vo backend/Globalenvs.vo backend/Op.vo backend/Registers.vo backend/RTL.vo lib/Lattice.vo backend/Kildall.vo backend/Constprop.vo
+backend/CSE.vo: backend/CSE.v lib/Coqlib.vo lib/Maps.vo backend/AST.vo lib/Integers.vo lib/Floats.vo backend/Values.vo backend/Mem.vo backend/Globalenvs.vo backend/Op.vo backend/Registers.vo backend/RTL.vo backend/Kildall.vo
+backend/CSEproof.vo: backend/CSEproof.v lib/Coqlib.vo lib/Maps.vo backend/AST.vo lib/Integers.vo lib/Floats.vo backend/Values.vo backend/Mem.vo backend/Globalenvs.vo backend/Op.vo backend/Registers.vo backend/RTL.vo backend/Kildall.vo backend/CSE.vo
+backend/Locations.vo: backend/Locations.v lib/Coqlib.vo lib/Maps.vo backend/AST.vo backend/Values.vo
+backend/Conventions.vo: backend/Conventions.v lib/Coqlib.vo backend/AST.vo backend/Locations.vo
+backend/LTL.vo: backend/LTL.v lib/Coqlib.vo lib/Maps.vo backend/AST.vo lib/Integers.vo backend/Values.vo backend/Mem.vo backend/Globalenvs.vo backend/Op.vo backend/Locations.vo backend/Conventions.vo
+backend/LTLtyping.vo: backend/LTLtyping.v lib/Coqlib.vo lib/Maps.vo backend/AST.vo backend/Op.vo backend/RTL.vo backend/Locations.vo backend/LTL.vo backend/Conventions.vo
+backend/InterfGraph.vo: backend/InterfGraph.v lib/Coqlib.vo lib/Maps.vo lib/Ordered.vo backend/Registers.vo backend/Locations.vo
+backend/Coloring.vo: backend/Coloring.v lib/Coqlib.vo lib/Maps.vo backend/AST.vo backend/Op.vo backend/Registers.vo backend/RTL.vo backend/RTLtyping.vo backend/Locations.vo backend/Conventions.vo backend/InterfGraph.vo
+backend/Coloringproof.vo: backend/Coloringproof.v lib/Coqlib.vo lib/Maps.vo backend/AST.vo backend/Op.vo backend/Registers.vo backend/RTL.vo backend/RTLtyping.vo backend/Locations.vo backend/Conventions.vo backend/InterfGraph.vo backend/Coloring.vo
+backend/Parallelmove.vo: backend/Parallelmove.v backend/Conventions.vo lib/Coqlib.vo backend/Values.vo backend/LTL.vo backend/Locations.vo backend/AST.vo
+backend/Allocation.vo: backend/Allocation.v lib/Coqlib.vo lib/Maps.vo backend/AST.vo lib/Integers.vo backend/Values.vo backend/Globalenvs.vo backend/Op.vo backend/Registers.vo backend/RTL.vo backend/RTLtyping.vo backend/Kildall.vo backend/Locations.vo backend/Conventions.vo backend/Coloring.vo backend/Parallelmove.vo backend/LTL.vo
+backend/Allocproof_aux.vo: backend/Allocproof_aux.v lib/Coqlib.vo backend/Values.vo backend/Parallelmove.vo backend/Allocation.vo backend/LTL.vo backend/Locations.vo backend/Conventions.vo
+backend/Allocproof.vo: backend/Allocproof.v lib/Coqlib.vo lib/Maps.vo backend/AST.vo lib/Integers.vo backend/Values.vo backend/Mem.vo backend/Globalenvs.vo backend/Op.vo backend/Registers.vo backend/RTL.vo backend/RTLtyping.vo backend/Locations.vo backend/Conventions.vo backend/Coloring.vo backend/Coloringproof.vo backend/Allocation.vo backend/Allocproof_aux.vo backend/LTL.vo
+backend/Alloctyping_aux.vo: backend/Alloctyping_aux.v lib/Coqlib.vo backend/Locations.vo backend/LTL.vo backend/Allocation.vo backend/LTLtyping.vo backend/Allocproof_aux.vo backend/Parallelmove.vo lib/Inclusion.vo
+backend/Alloctyping.vo: backend/Alloctyping.v lib/Coqlib.vo lib/Maps.vo backend/AST.vo backend/Op.vo backend/Registers.vo backend/RTL.vo backend/Locations.vo backend/LTL.vo backend/Coloring.vo backend/Coloringproof.vo backend/Allocation.vo backend/Allocproof.vo backend/RTLtyping.vo backend/LTLtyping.vo backend/Conventions.vo backend/Alloctyping_aux.vo
+backend/Tunneling.vo: backend/Tunneling.v lib/Coqlib.vo lib/Maps.vo backend/AST.vo backend/Values.vo backend/Globalenvs.vo backend/Op.vo backend/Locations.vo backend/LTL.vo
+backend/Tunnelingproof.vo: backend/Tunnelingproof.v lib/Coqlib.vo lib/Maps.vo backend/AST.vo backend/Values.vo backend/Mem.vo backend/Globalenvs.vo backend/Op.vo backend/Locations.vo backend/LTL.vo backend/Tunneling.vo
+backend/Tunnelingtyping.vo: backend/Tunnelingtyping.v lib/Coqlib.vo lib/Maps.vo backend/AST.vo backend/Values.vo backend/Mem.vo backend/Globalenvs.vo backend/Op.vo backend/Locations.vo backend/LTL.vo backend/LTLtyping.vo backend/Tunneling.vo
+backend/Linear.vo: backend/Linear.v lib/Coqlib.vo lib/Maps.vo backend/AST.vo lib/Integers.vo backend/Values.vo backend/Mem.vo backend/Globalenvs.vo backend/Op.vo backend/Locations.vo backend/LTL.vo backend/Conventions.vo
+backend/Lineartyping.vo: backend/Lineartyping.v lib/Coqlib.vo lib/Maps.vo backend/AST.vo backend/Op.vo backend/RTL.vo backend/Locations.vo backend/Linear.vo backend/Conventions.vo
+backend/Linearize.vo: backend/Linearize.v lib/Coqlib.vo lib/Maps.vo lib/Sets.vo backend/AST.vo backend/Values.vo backend/Globalenvs.vo backend/Op.vo backend/Locations.vo backend/LTL.vo backend/Linear.vo backend/Kildall.vo lib/Lattice.vo
+backend/Linearizeproof.vo: backend/Linearizeproof.v lib/Coqlib.vo lib/Maps.vo backend/AST.vo lib/Integers.vo backend/Values.vo backend/Mem.vo backend/Globalenvs.vo backend/Op.vo backend/Locations.vo backend/LTL.vo backend/Linear.vo backend/Linearize.vo lib/Lattice.vo
+backend/Linearizetyping.vo: backend/Linearizetyping.v lib/Coqlib.vo lib/Maps.vo backend/AST.vo backend/Op.vo backend/Locations.vo backend/LTL.vo backend/Linear.vo backend/Linearize.vo backend/LTLtyping.vo backend/Lineartyping.vo backend/Conventions.vo
+backend/Mach.vo: backend/Mach.v lib/Coqlib.vo lib/Maps.vo backend/AST.vo lib/Integers.vo backend/Values.vo backend/Mem.vo backend/Globalenvs.vo backend/Op.vo backend/Locations.vo
+backend/Machabstr.vo: backend/Machabstr.v lib/Coqlib.vo lib/Maps.vo backend/AST.vo backend/Mem.vo lib/Integers.vo backend/Values.vo backend/Globalenvs.vo backend/Op.vo backend/Locations.vo backend/Conventions.vo backend/Mach.vo
+backend/Machtyping.vo: backend/Machtyping.v lib/Coqlib.vo lib/Maps.vo backend/AST.vo backend/Mem.vo lib/Integers.vo backend/Values.vo backend/Globalenvs.vo backend/Op.vo backend/Locations.vo backend/Conventions.vo backend/Mach.vo backend/Machabstr.vo
+backend/Stacking.vo: backend/Stacking.v lib/Coqlib.vo lib/Maps.vo backend/AST.vo lib/Integers.vo backend/Op.vo backend/RTL.vo backend/Locations.vo backend/Linear.vo backend/Lineartyping.vo backend/Mach.vo backend/Conventions.vo
+backend/Stackingproof.vo: backend/Stackingproof.v lib/Coqlib.vo lib/Maps.vo backend/AST.vo lib/Integers.vo backend/Values.vo backend/Op.vo backend/Mem.vo backend/Globalenvs.vo backend/Locations.vo backend/Mach.vo backend/Machabstr.vo backend/Linear.vo backend/Lineartyping.vo backend/Conventions.vo backend/Stacking.vo
+backend/Stackingtyping.vo: backend/Stackingtyping.v lib/Coqlib.vo lib/Maps.vo lib/Integers.vo backend/AST.vo backend/Op.vo backend/Locations.vo backend/Conventions.vo backend/Linear.vo backend/Lineartyping.vo backend/Mach.vo backend/Machtyping.vo backend/Stacking.vo backend/Stackingproof.vo
+backend/Machabstr2mach.vo: backend/Machabstr2mach.v lib/Coqlib.vo lib/Maps.vo backend/AST.vo lib/Integers.vo backend/Values.vo backend/Mem.vo backend/Globalenvs.vo backend/Op.vo backend/Locations.vo backend/Machabstr.vo backend/Mach.vo backend/Machtyping.vo backend/Stackingproof.vo
+backend/PPC.vo: backend/PPC.v lib/Coqlib.vo lib/Maps.vo backend/AST.vo lib/Integers.vo lib/Floats.vo backend/Values.vo backend/Mem.vo backend/Globalenvs.vo
+backend/PPCgen.vo: backend/PPCgen.v lib/Coqlib.vo lib/Maps.vo backend/AST.vo lib/Integers.vo lib/Floats.vo backend/Values.vo backend/Mem.vo backend/Globalenvs.vo backend/Op.vo backend/Locations.vo backend/Mach.vo backend/PPC.vo
+backend/PPCgenproof1.vo: backend/PPCgenproof1.v lib/Coqlib.vo lib/Maps.vo backend/AST.vo lib/Integers.vo lib/Floats.vo backend/Values.vo backend/Mem.vo backend/Globalenvs.vo backend/Op.vo backend/Locations.vo backend/Mach.vo backend/Machtyping.vo backend/PPC.vo backend/PPCgen.vo
+backend/PPCgenproof.vo: backend/PPCgenproof.v lib/Coqlib.vo lib/Maps.vo backend/AST.vo lib/Integers.vo lib/Floats.vo backend/Values.vo backend/Mem.vo backend/Globalenvs.vo backend/Op.vo backend/Locations.vo backend/Mach.vo backend/Machtyping.vo backend/PPC.vo backend/PPCgen.vo backend/PPCgenproof1.vo
+backend/Main.vo: backend/Main.v lib/Coqlib.vo lib/Maps.vo backend/AST.vo backend/Values.vo backend/Csharpminor.vo backend/Cminor.vo backend/RTL.vo backend/LTL.vo backend/Linear.vo backend/Mach.vo backend/PPC.vo backend/Cminorgen.vo backend/RTLgen.vo backend/Constprop.vo backend/CSE.vo backend/Allocation.vo backend/Tunneling.vo backend/Linearize.vo backend/Stacking.vo backend/PPCgen.vo backend/RTLtyping.vo backend/LTLtyping.vo backend/Lineartyping.vo backend/Machtyping.vo backend/Cminorgenproof.vo backend/RTLgenproof.vo backend/Constpropproof.vo backend/CSEproof.vo backend/Allocproof.vo backend/Alloctyping.vo backend/Tunnelingproof.vo backend/Tunnelingtyping.vo backend/Linearizeproof.vo backend/Linearizetyping.vo backend/Stackingproof.vo backend/Stackingtyping.vo backend/Machabstr2mach.vo backend/PPCgenproof.vo
diff --git a/.globfile b/.globfile
new file mode 100644
index 0000000..b941c5d
--- /dev/null
+++ b/.globfile
@@ -0,0 +1,75292 @@
+FCoqlib
+R177 Coq.Init.Logic "x = y" type_scope
+R165 Coq.Init.Logic "x = y" type_scope
+R242 Coq.Init.Logic "x = y" type_scope
+R394 Coq.Init.Logic.refl_equal
+R490 Coq.Init.Logic.refl_equal
+R607 Coq.Init.Logic "x = y" type_scope
+R600 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R609 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R709 Coq.Init.Logic "x = y" type_scope
+R699 Coq.Init.Datatypes.Some
+R712 Coq.Init.Datatypes.Some
+R800 Coq.Init.Logic "x = y" type_scope
+R884 Coq.Init.Logic "x = y" type_scope
+R964 Coq.Init.Logic "x = y" type_scope
+R1040 Coq.Init.Logic "x = y" type_scope
+R1112 Coq.Init.Logic "x = y" type_scope
+R1182 Coq.Init.Logic "x <> y" type_scope
+R1210 Coq.Init.Logic "x <> y" type_scope
+R1138 Coq.Init.Logic.f_equal
+R1068 Coq.Init.Logic.f_equal2
+R994 Coq.Init.Logic.f_equal3
+R916 Coq.Init.Logic.f_equal4
+R834 Coq.Init.Logic.f_equal5
+R741 Coq.Init.Logic.f_equal
+R751 Coq.Init.Datatypes.Some
+R633 Coq.Init.Datatypes.injective_projections
+R1294 Coq.Init.Logic.False
+R1358 Coq.Init.Logic.False
+R1443 Coq.Init.Specif "{ A } + { B }" type_scope
+R1446 Coq.Init.Logic "x = y" type_scope
+R1456 Coq.Init.Logic "x <> y" type_scope
+R1432 Coq.NArith.BinPos.positive
+R1432 Coq.NArith.BinPos.positive
+R1488 Coq.NArith.BinPos.Pcompare
+R1501 Coq.Init.Datatypes.Eq
+R1488 Coq.NArith.BinPos.Pcompare
+R1501 Coq.Init.Datatypes.Eq
+R1527 Coq.NArith.BinPos.Pcompare_Eq_eq
+R1527 Coq.NArith.BinPos.Pcompare_Eq_eq
+R1595 Coq.NArith.BinPos.Pcompare_refl
+R1595 Coq.NArith.BinPos.Pcompare_refl
+R1678 Coq.NArith.BinPos.Pcompare_refl
+R1678 Coq.NArith.BinPos.Pcompare_refl
+R1804 Coq.Init.Logic "x = y" type_scope
+R1783 Coqlib.peq
+R1759 Coq.NArith.BinPos.positive
+R1834 Coqlib.peq
+R1834 Coqlib.peq
+R1978 Coq.Init.Logic "x = y" type_scope
+R1957 Coqlib.peq
+R1945 Coq.Init.Logic "x <> y" type_scope
+R1923 Coq.NArith.BinPos.positive
+R1923 Coq.NArith.BinPos.positive
+R2008 Coqlib.peq
+R2008 Coqlib.peq
+R2098 Coq.ZArith.BinInt.Zlt
+R2112 Coq.ZArith.BinInt.Zpos
+R2103 Coq.ZArith.BinInt.Zpos
+R2079 Coq.NArith.BinPos.positive
+R2079 Coq.NArith.BinPos.positive
+R2175 Coq.Init.Logic "x <> y" type_scope
+R2162 Coqlib.Plt
+R2151 Coq.NArith.BinPos.positive
+R2151 Coq.NArith.BinPos.positive
+R2256 Coqlib.Plt_ne
+R2340 Coqlib.Plt
+R2329 Coqlib.Plt
+R2318 Coqlib.Plt
+R2307 Coq.NArith.BinPos.positive
+R2307 Coq.NArith.BinPos.positive
+R2307 Coq.NArith.BinPos.positive
+R2450 Coq.Init.Logic "x = y" type_scope
+R2435 Coq.ZArith.BinInt.Zpos
+R2441 Coq.NArith.BinPos.Psucc
+R2452 Coq.ZArith.BinInt.Zsucc
+R2459 Coq.ZArith.BinInt.Zpos
+R2424 Coq.NArith.BinPos.positive
+R2493 Coq.NArith.BinPos.Pplus_one_succ_r
+R2493 Coq.NArith.BinPos.Pplus_one_succ_r
+R2573 Coqlib.Plt
+R2580 Coq.NArith.BinPos.Psucc
+R2562 Coq.NArith.BinPos.positive
+R2626 Coqlib.Psucc_Zsucc
+R2626 Coqlib.Psucc_Zsucc
+R2664 Coqlib.Plt_succ
+R2742 Coqlib.Plt
+R2749 Coq.NArith.BinPos.Psucc
+R2731 Coqlib.Plt
+R2720 Coq.NArith.BinPos.positive
+R2720 Coq.NArith.BinPos.positive
+R2782 Coqlib.Plt_trans
+R2782 Coqlib.Plt_trans
+R2818 Coqlib.Plt_succ
+R2818 Coqlib.Plt_succ
+R2846 Coqlib.Plt_succ
+R2938 Coq.Init.Logic "A \/ B" type_scope
+R2930 Coqlib.Plt
+R2943 Coq.Init.Logic "x = y" type_scope
+R2911 Coqlib.Plt
+R2918 Coq.NArith.BinPos.Psucc
+R2900 Coq.NArith.BinPos.positive
+R2900 Coq.NArith.BinPos.positive
+R2989 Coqlib.Psucc_Zsucc
+R2989 Coqlib.Psucc_Zsucc
+R3043 Coq.Init.Logic "A \/ B" type_scope
+R3031 Coq.ZArith.BinInt "x < y" Z_scope
+R3024 Coq.ZArith.BinInt.Zpos
+R3033 Coq.ZArith.BinInt.Zpos
+R3053 Coq.Init.Logic "x = y" type_scope
+R3046 Coq.ZArith.BinInt.Zpos
+R3055 Coq.ZArith.BinInt.Zpos
+R3043 Coq.Init.Logic "A \/ B" type_scope
+R3031 Coq.ZArith.BinInt "x < y" Z_scope
+R3024 Coq.ZArith.BinInt.Zpos
+R3033 Coq.ZArith.BinInt.Zpos
+R3053 Coq.Init.Logic "x = y" type_scope
+R3046 Coq.ZArith.BinInt.Zpos
+R3055 Coq.ZArith.BinInt.Zpos
+R3166 Coq.Init.Specif "{ A } + { B }" type_scope
+R3167 Coqlib.Plt
+R3179 Coq.Init.Logic "~ x" type_scope
+R3181 Coqlib.Plt
+R3154 Coq.NArith.BinPos.positive
+R3154 Coq.NArith.BinPos.positive
+R3225 Coq.ZArith.ZArith_dec.Z_lt_dec
+R3225 Coq.ZArith.ZArith_dec.Z_lt_dec
+R3275 Coq.ZArith.BinInt.Zle
+R3289 Coq.ZArith.BinInt.Zpos
+R3280 Coq.ZArith.BinInt.Zpos
+R3262 Coq.NArith.BinPos.positive
+R3262 Coq.NArith.BinPos.positive
+R3337 Coqlib.Ple
+R3326 Coq.NArith.BinPos.positive
+R3453 Coqlib.Ple
+R3442 Coqlib.Ple
+R3431 Coqlib.Ple
+R3420 Coq.NArith.BinPos.positive
+R3420 Coq.NArith.BinPos.positive
+R3420 Coq.NArith.BinPos.positive
+R3554 Coqlib.Ple
+R3543 Coqlib.Plt
+R3532 Coq.NArith.BinPos.positive
+R3532 Coq.NArith.BinPos.positive
+R3648 Coqlib.Ple
+R3655 Coq.NArith.BinPos.Psucc
+R3637 Coq.NArith.BinPos.positive
+R3688 Coqlib.Plt_Ple
+R3688 Coqlib.Plt_Ple
+R3703 Coqlib.Plt_succ
+R3703 Coqlib.Plt_succ
+R3790 Coqlib.Plt
+R3779 Coqlib.Ple
+R3768 Coqlib.Plt
+R3757 Coq.NArith.BinPos.positive
+R3757 Coq.NArith.BinPos.positive
+R3757 Coq.NArith.BinPos.positive
+R3874 Coq.Init.Logic "~ x" type_scope
+R3876 Coqlib.Plt
+R3940 Coqlib.Ple_refl
+R3949 Coqlib.Plt_Ple
+R3957 Coqlib.Ple_succ
+R3966 Coqlib.Plt_strict
+R4067 Coq.Init.Wf.well_founded
+R4080 Coqlib.Plt
+R4128 Coq.NArith.BinPos.nat_of_P
+R4100 Coq.Arith.Wf_nat.well_founded_lt_compat
+R4128 Coq.NArith.BinPos.nat_of_P
+R4100 Coq.Arith.Wf_nat.well_founded_lt_compat
+R4154 Coq.NArith.Pnat.nat_of_P_lt_Lt_compare_morphism
+R4154 Coq.NArith.Pnat.nat_of_P_lt_Lt_compare_morphism
+R4247 Coq.NArith.BinPos.positive
+R4308 Coqlib.Plt
+R4313 Coq.NArith.BinPos.Ppred
+R4299 Coq.Init.Logic "x <> y" type_scope
+R4302 Coq.NArith.BinPos.xH
+R4348 Coq.NArith.BinPos.Psucc_pred
+R4348 Coq.NArith.BinPos.Psucc_pred
+R4397 Coq.NArith.BinPos.Ppred
+R4397 Coq.NArith.BinPos.Ppred
+R4433 Coqlib.Plt_succ
+R4433 Coqlib.Plt_succ
+R4515 Coqlib.peq
+R4521 Coq.NArith.BinPos.xH
+R4533 Coq.Init.Specif.left
+R4551 Coq.Init.Specif.right
+R4592 Coqlib.Ppred_Plt
+R4582 Coq.NArith.BinPos.Ppred
+R4569 Coq.NArith.BinPos.Ppred
+R4486 Coqlib.Plt
+R4462 Coq.NArith.BinPos.positive
+R4646 Coq.NArith.BinPos.positive
+R4665 Coq.Init.Wf.Fix
+R4669 Coqlib.Plt_wf
+R4752 Coq.Init.Logic "x = y" type_scope
+R4737 Coqlib.positive_rec
+R4773 Coqlib.positive_rec
+R4827 Coq.Init.Wf.Fix_eq
+R4834 Coqlib.Plt_wf
+R4827 Coq.Init.Wf.Fix_eq
+R4834 Coqlib.Plt_wf
+R4890 Coqlib.peq
+R4890 Coqlib.peq
+R4986 Coq.Init.Logic "x = y" type_scope
+R4962 Coqlib.positive_rec
+R5009 Coqlib.unroll_positive_rec
+R5009 Coqlib.unroll_positive_rec
+R5049 Coqlib.peq
+R5049 Coqlib.peq
+R5154 Coq.Init.Logic "x = y" type_scope
+R5131 Coqlib.positive_rec
+R5145 Coq.NArith.BinPos.Psucc
+R5161 Coqlib.positive_rec
+R5202 Coqlib.unroll_positive_rec
+R5202 Coqlib.unroll_positive_rec
+R5244 Coqlib.peq
+R5249 Coq.NArith.BinPos.Psucc
+R5244 Coqlib.peq
+R5249 Coq.NArith.BinPos.Psucc
+R5319 Coq.NArith.BinPos.Ppred_succ
+R5319 Coq.NArith.BinPos.Ppred_succ
+R5434 Coq.NArith.BinPos.Psucc
+R5405 Coq.NArith.BinPos.xH
+R5382 Coq.NArith.BinPos.positive
+R5490 Coq.Init.Wf.well_founded_ind
+R5507 Coqlib.Plt_wf
+R5490 Coq.Init.Wf.well_founded_ind
+R5507 Coqlib.Plt_wf
+R5537 Coqlib.peq
+R5544 Coq.NArith.BinPos.xH
+R5537 Coqlib.peq
+R5544 Coq.NArith.BinPos.xH
+R5582 Coq.NArith.BinPos.Psucc_pred
+R5582 Coq.NArith.BinPos.Psucc_pred
+R5663 Coqlib.Ppred_Plt
+R5663 Coqlib.Ppred_Plt
+R5760 Coq.Init.Specif "{ A } + { B }" type_scope
+R5763 Coq.Init.Logic "x = y" type_scope
+R5773 Coq.Init.Logic "x <> y" type_scope
+R5756 Coq.ZArith.BinInt.Z
+R5756 Coq.ZArith.BinInt.Z
+R5782 Coq.ZArith.ZArith_dec.Z_eq_dec
+R5869 Coq.Init.Logic "x = y" type_scope
+R5848 Coqlib.zeq
+R5831 Coq.ZArith.BinInt.Z
+R5899 Coqlib.zeq
+R5899 Coqlib.zeq
+R6036 Coq.Init.Logic "x = y" type_scope
+R6015 Coqlib.zeq
+R6003 Coq.Init.Logic "x <> y" type_scope
+R5988 Coq.ZArith.BinInt.Z
+R5988 Coq.ZArith.BinInt.Z
+R6066 Coqlib.zeq
+R6066 Coqlib.zeq
+R6170 Coq.Init.Specif "{ A } + { B }" type_scope
+R6173 Coq.ZArith.BinInt "x < y" Z_scope
+R6183 Coq.ZArith.BinInt "x >= y" Z_scope
+R6166 Coq.ZArith.BinInt.Z
+R6166 Coq.ZArith.BinInt.Z
+R6192 Coq.ZArith.ZArith_dec.Z_lt_ge_dec
+R6296 Coq.Init.Logic "x = y" type_scope
+R6275 Coqlib.zlt
+R6264 Coq.ZArith.BinInt "x < y" Z_scope
+R6246 Coq.ZArith.BinInt.Z
+R6246 Coq.ZArith.BinInt.Z
+R6326 Coqlib.zlt
+R6326 Coqlib.zlt
+R6472 Coq.Init.Logic "x = y" type_scope
+R6451 Coqlib.zlt
+R6439 Coq.ZArith.BinInt "x >= y" Z_scope
+R6421 Coq.ZArith.BinInt.Z
+R6421 Coq.ZArith.BinInt.Z
+R6502 Coqlib.zlt
+R6502 Coqlib.zlt
+R6589 Coq.Init.Specif "{ A } + { B }" type_scope
+R6592 Coq.ZArith.BinInt "x <= y" Z_scope
+R6603 Coq.ZArith.BinInt "x > y" Z_scope
+R6585 Coq.ZArith.BinInt.Z
+R6585 Coq.ZArith.BinInt.Z
+R6611 Coq.ZArith.ZArith_dec.Z_le_gt_dec
+R6716 Coq.Init.Logic "x = y" type_scope
+R6695 Coqlib.zle
+R6683 Coq.ZArith.BinInt "x <= y" Z_scope
+R6665 Coq.ZArith.BinInt.Z
+R6665 Coq.ZArith.BinInt.Z
+R6746 Coqlib.zle
+R6746 Coqlib.zle
+R6891 Coq.Init.Logic "x = y" type_scope
+R6870 Coqlib.zle
+R6859 Coq.ZArith.BinInt "x > y" Z_scope
+R6841 Coq.ZArith.BinInt.Z
+R6841 Coq.ZArith.BinInt.Z
+R6921 Coqlib.zle
+R6921 Coqlib.zle
+R7036 Coq.Init.Logic "x = y" type_scope
+R7020 Coq.ZArith.Zpower.two_power_nat
+R7034 Coq.Init.Datatypes.O
+R7125 Coq.ZArith.BinInt "x > y" Z_scope
+R7109 Coq.ZArith.Zpower.two_power_nat
+R7104 Coq.Init.Datatypes.nat
+R7160 Coqlib.two_power_nat_O
+R7160 Coqlib.two_power_nat_O
+R7194 Coq.ZArith.Zpower.two_power_nat_S
+R7194 Coq.ZArith.Zpower.two_power_nat_S
+R7280 Coq.Init.Logic "x = y" type_scope
+R7271 Coq.ZArith.Zmin.Zmin
+R7285 Coqlib.zlt
+R7331 Coqlib.zlt
+R7331 Coqlib.zlt
+R7423 Coq.ZArith.BinInt "x ?= y" Z_scope
+R7423 Coq.ZArith.BinInt "x ?= y" Z_scope
+R7446 Coq.ZArith.Zcompare.Zcompare_Eq_eq
+R7446 Coq.ZArith.Zcompare.Zcompare_Eq_eq
+R7546 Coq.Init.Logic "x = y" type_scope
+R7537 Coq.ZArith.Zmin.Zmax
+R7551 Coqlib.zlt
+R7597 Coqlib.zlt
+R7597 Coqlib.zlt
+R7659 Coq.ZArith.Zcompare.Zcompare_antisym
+R7659 Coq.ZArith.Zcompare.Zcompare_antisym
+R7735 Coq.ZArith.Zcompare.Zcompare_antisym
+R7735 Coq.ZArith.Zcompare.Zcompare_antisym
+R7770 Coq.ZArith.BinInt "x ?= y" Z_scope
+R7770 Coq.ZArith.BinInt "x ?= y" Z_scope
+R7809 Coq.ZArith.Zcompare.Zcompare_Eq_eq
+R7809 Coq.ZArith.Zcompare.Zcompare_Eq_eq
+R7915 Coq.ZArith.BinInt "x <= y" Z_scope
+R7918 Coq.ZArith.Zmin.Zmax
+R7905 Coq.ZArith.BinInt "x <= y" Z_scope
+R7957 Coq.ZArith.Zmin.Zmax1
+R7957 Coq.ZArith.Zmin.Zmax1
+R8029 Coq.ZArith.BinInt "x <= y" Z_scope
+R8032 Coq.ZArith.Zmin.Zmax
+R8019 Coq.ZArith.BinInt "x <= y" Z_scope
+R8071 Coq.ZArith.Zmin.Zmax2
+R8071 Coq.ZArith.Zmin.Zmax2
+R8163 Coq.Init.Logic "x = y" type_scope
+R8159 Coq.ZArith.Zdiv "x / y" Z_scope
+R8145 Coq.ZArith.BinInt "x <= y < z" Z_scope
+R8195 Coq.ZArith.BinInt "x > y" Z_scope
+R8195 Coq.ZArith.BinInt "x > y" Z_scope
+R8281 Coq.Init.Logic "x = y" type_scope
+R8255 Coq.ZArith.BinInt "x <= y < z" Z_scope
+R8264 Coq.ZArith.BinInt "x + y" Z_scope
+R8260 Coq.ZArith.BinInt "x * y" Z_scope
+R8264 Coq.ZArith.BinInt "x + y" Z_scope
+R8260 Coq.ZArith.BinInt "x * y" Z_scope
+R8237 Coq.ZArith.BinInt "x <= y < z" Z_scope
+R8281 Coq.Init.Logic "x = y" type_scope
+R8255 Coq.ZArith.BinInt "x <= y < z" Z_scope
+R8264 Coq.ZArith.BinInt "x + y" Z_scope
+R8260 Coq.ZArith.BinInt "x * y" Z_scope
+R8264 Coq.ZArith.BinInt "x + y" Z_scope
+R8260 Coq.ZArith.BinInt "x * y" Z_scope
+R8237 Coq.ZArith.BinInt "x <= y < z" Z_scope
+R8314 Coq.Init.Logic "A \/ B" type_scope
+R8310 Coq.Init.Logic "x = y" type_scope
+R8323 Coq.Init.Logic "A \/ B" type_scope
+R8319 Coq.ZArith.BinInt "x > y" Z_scope
+R8329 Coq.ZArith.BinInt "x > y" Z_scope
+R8327 Coq.ZArith.BinInt "- x" Z_scope
+R8314 Coq.Init.Logic "A \/ B" type_scope
+R8310 Coq.Init.Logic "x = y" type_scope
+R8323 Coq.Init.Logic "A \/ B" type_scope
+R8319 Coq.ZArith.BinInt "x > y" Z_scope
+R8329 Coq.ZArith.BinInt "x > y" Z_scope
+R8327 Coq.ZArith.BinInt "- x" Z_scope
+R8404 Coq.ZArith.BinInt "x >= y" Z_scope
+R8400 Coq.ZArith.BinInt "x * y" Z_scope
+R8409 Coq.ZArith.BinInt "x * y" Z_scope
+R8404 Coq.ZArith.BinInt "x >= y" Z_scope
+R8400 Coq.ZArith.BinInt "x * y" Z_scope
+R8409 Coq.ZArith.BinInt "x * y" Z_scope
+R8421 Coq.ZArith.Zorder.Zmult_ge_compat_l
+R8421 Coq.ZArith.Zorder.Zmult_ge_compat_l
+R8497 Coq.ZArith.BinInt "x >= y" Z_scope
+R8490 Coq.ZArith.BinInt "x * y" Z_scope
+R8493 Coq.ZArith.BinInt "- x" Z_scope
+R8502 Coq.ZArith.BinInt "x * y" Z_scope
+R8497 Coq.ZArith.BinInt "x >= y" Z_scope
+R8490 Coq.ZArith.BinInt "x * y" Z_scope
+R8493 Coq.ZArith.BinInt "- x" Z_scope
+R8502 Coq.ZArith.BinInt "x * y" Z_scope
+R8514 Coq.ZArith.Zorder.Zmult_ge_compat_l
+R8514 Coq.ZArith.Zorder.Zmult_ge_compat_l
+R8560 Coq.ZArith.BinInt.Zopp_mult_distr_r
+R8560 Coq.ZArith.BinInt.Zopp_mult_distr_r
+R8624 Coq.ZArith.Zdiv "x 'mod' y" Z_scope
+R8624 Coq.ZArith.Zdiv "x 'mod' y" Z_scope
+R8641 Coq.ZArith.Zdiv.Z_mod_lt
+R8641 Coq.ZArith.Zdiv.Z_mod_lt
+R8670 Coq.ZArith.Zdiv.Z_div_mod_eq
+R8670 Coq.ZArith.Zdiv.Z_div_mod_eq
+R8756 Coq.Init.Logic "x = y" type_scope
+R8750 Coq.ZArith.Zdiv "x 'mod' y" Z_scope
+R8736 Coq.ZArith.BinInt "x <= y < z" Z_scope
+R8788 Coq.ZArith.BinInt "x > y" Z_scope
+R8788 Coq.ZArith.BinInt "x > y" Z_scope
+R8815 Coq.ZArith.Zdiv.Z_div_mod_eq
+R8815 Coq.ZArith.Zdiv.Z_div_mod_eq
+R8849 Coqlib.Zdiv_small
+R8849 Coqlib.Zdiv_small
+R8959 Coq.Init.Logic "x = y" type_scope
+R8953 Coq.ZArith.Zdiv "x 'mod' y" Z_scope
+R8939 Coq.ZArith.BinInt "x <= y < z" Z_scope
+R8922 Coq.Init.Logic "x = y" type_scope
+R8930 Coq.ZArith.BinInt "x + y" Z_scope
+R8926 Coq.ZArith.BinInt "x * y" Z_scope
+R8998 Coq.ZArith.BinInt.Zplus_comm
+R8998 Coq.ZArith.BinInt.Zplus_comm
+R9021 Coq.ZArith.Zdiv.Z_mod_plus
+R9021 Coq.ZArith.Zdiv.Z_mod_plus
+R9039 Coqlib.Zmod_small
+R9039 Coqlib.Zmod_small
+R9146 Coq.Init.Logic "x = y" type_scope
+R9142 Coq.ZArith.Zdiv "x / y" Z_scope
+R9128 Coq.ZArith.BinInt "x <= y < z" Z_scope
+R9111 Coq.Init.Logic "x = y" type_scope
+R9119 Coq.ZArith.BinInt "x + y" Z_scope
+R9115 Coq.ZArith.BinInt "x * y" Z_scope
+R9185 Coq.ZArith.BinInt.Zplus_comm
+R9185 Coq.ZArith.BinInt.Zplus_comm
+R9207 Coq.ZArith.Zdiv.Z_div_plus
+R9207 Coq.ZArith.Zdiv.Z_div_plus
+R9228 Coqlib.Zdiv_small
+R9228 Coqlib.Zdiv_small
+R9374 Coq.Init.Datatypes.option
+R9405 Coq.Init.Datatypes.None
+R9413 Coq.Init.Datatypes.None
+R9422 Coq.Init.Datatypes.Some
+R9432 Coq.Init.Datatypes.Some
+R9362 Coq.Init.Datatypes.option
+R9532 Coq.Init.Datatypes "x + y" type_scope
+R9558 Coq.Init.Datatypes.inl
+R9567 Coq.Init.Datatypes.inl
+R9583 Coq.Init.Datatypes.inr
+R9592 Coq.Init.Datatypes.inr
+R9523 Coq.Init.Datatypes "x + y" type_scope
+R9639 Coq.Lists.List.in_eq
+R9645 Coq.Lists.List.in_cons
+R9763 Coq.Lists.List.In
+R9751 Coq.Init.Logic "x = y" type_scope
+R9732 Coq.Lists.List.nth_error
+R9753 Coq.Init.Datatypes.Some
+R9714 Coq.Lists.List.list
+R9705 Coq.Init.Datatypes.nat
+R9880 Coq.Lists.List.in_eq
+R9880 Coq.Lists.List.in_eq
+R9938 Coq.Lists.List.in_cons
+R9938 Coq.Lists.List.in_cons
+R9971 Coqlib.nth_error_in
+R10068 Coq.Init.Logic "x = y" type_scope
+R10045 Coq.Lists.List.nth_error
+R10057 Coq.Lists.List.nil
+R10070 Coq.Init.Datatypes.None
+R10039 Coq.Init.Datatypes.nat
+R10146 Coqlib.nth_error_nil
+R10252 Coq.Lists.List.incl
+R10233 Coq.Lists.List.incl
+R10241 Coq.Lists.List "x :: y" list_scope
+R10222 Coq.Lists.List.list
+R10222 Coq.Lists.List.list
+R10307 Coq.Lists.List.in_cons
+R10307 Coq.Lists.List.in_cons
+R10340 Coqlib.incl_cons_inv
+R10446 Coq.Lists.List.incl
+R10425 Coq.Lists.List.incl
+R10434 Coq.Lists.List "x ++ y" list_scope
+R10414 Coq.Lists.List.list
+R10414 Coq.Lists.List.list
+R10414 Coq.Lists.List.list
+R10502 Coq.Lists.List.in_or_app
+R10502 Coq.Lists.List.in_or_app
+R10619 Coq.Lists.List.incl
+R10598 Coq.Lists.List.incl
+R10607 Coq.Lists.List "x ++ y" list_scope
+R10587 Coq.Lists.List.list
+R10587 Coq.Lists.List.list
+R10587 Coq.Lists.List.list
+R10675 Coq.Lists.List.in_or_app
+R10675 Coq.Lists.List.in_or_app
+R10724 Coqlib.incl_app_inv_l
+R10739 Coqlib.incl_app_inv_r
+R10798 Coq.Lists.List.list
+R10857 Coq.Lists.List.nil
+R10961 Coq.Lists.List "x :: y" list_scope
+R10910 Coq.Init.Logic "~ x" type_scope
+R10912 Coq.Lists.List.In
+R11073 Coq.Init.Logic "x <> y" type_scope
+R11060 Coq.Lists.List.In
+R11049 Coq.Lists.List.In
+R11012 Coq.Lists.List.list
+R11012 Coq.Lists.List.list
+R11184 Coqlib.list_disjoint
+R11154 Coqlib.list_disjoint
+R11171 Coq.Lists.List "x :: y" list_scope
+R11143 Coq.Lists.List.list
+R11143 Coq.Lists.List.list
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R11379 Coqlib.list_disjoint
+R11349 Coqlib.list_disjoint
+R11369 Coq.Lists.List "x :: y" list_scope
+R11338 Coq.Lists.List.list
+R11338 Coq.Lists.List.list
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R11573 Coq.Init.Logic "~ x" type_scope
+R11575 Coq.Lists.List.In
+R11562 Coq.Lists.List.In
+R11539 Coqlib.list_disjoint
+R11521 Coq.Lists.List.list
+R11521 Coq.Lists.List.list
+R11754 Coqlib.list_disjoint
+R11731 Coqlib.list_disjoint
+R11720 Coq.Lists.List.list
+R11720 Coq.Lists.List.list
+R11823 Coq.Init.Logic.sym_not_equal
+R11823 Coq.Init.Logic.sym_not_equal
+R11983 Coq.Init.Logic "x = y" type_scope
+R11969 Coq.Lists.List.map
+R11985 Coq.Lists.List.map
+R11956 Coq.Init.Logic "x = y" type_scope
+R11942 Coq.Lists.List.In
+R11920 Coq.Lists.List.list
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R12245 Coq.Init.Logic "x = y" type_scope
+R12219 Coq.Lists.List.map
+R12231 Coq.Lists.List.map
+R12247 Coq.Lists.List.map
+R12208 Coq.Lists.List.list
+R12454 Coq.Init.Logic "x = y" type_scope
+R12427 Coq.Lists.List.nth_error
+R12438 Coq.Lists.List.map
+R12456 Coqlib.option_map
+R12470 Coq.Lists.List.nth_error
+R12419 Coq.Init.Datatypes.nat
+R12407 Coq.Lists.List.list
+R12540 Coqlib.nth_error_nil
+R12540 Coqlib.nth_error_nil
+R12540 Coqlib.nth_error_nil
+R12540 Coqlib.nth_error_nil
+R12711 Coq.Init.Logic "x = y" type_scope
+R12684 Coq.Lists.List.length
+R12697 Coq.Lists.List.map
+R12713 Coq.Lists.List.length
+R12673 Coq.Lists.List.list
+R12875 Coq.Init.Logic "'exists' x : t , p" type_scope
+R12895 Coq.Init.Logic "A /\ B" type_scope
+R12889 Coq.Init.Logic "x = y" type_scope
+R12898 Coq.Lists.List.In
+R12852 Coq.Lists.List.In
+R12858 Coq.Lists.List.map
+R12834 Coq.Lists.List.list
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R13228 Coqlib.list_norepet
+R13242 Coq.Lists.List.map
+R13215 Coq.Init.Logic "x <> y" type_scope
+R13203 Coq.Init.Logic "x <> y" type_scope
+R13191 Coq.Lists.List.In
+R13181 Coq.Lists.List.In
+R13148 Coqlib.list_norepet
+R13137 Coq.Lists.List.list
+R13350 Coqlib.list_in_map_inv
+R13350 Coqlib.list_in_map_inv
+R13427 Coq.Init.Logic "x <> y" type_scope
+R13427 Coq.Init.Logic "x <> y" type_scope
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R13665 Coq.Init.Logic "x = y" type_scope
+R13643 Coq.Lists.List.map
+R13658 Coq.Lists.List "x ++ y" list_scope
+R13681 Coq.Lists.List "x ++ y" list_scope
+R13667 Coq.Lists.List.map
+R13684 Coq.Lists.List.map
+R13632 Coq.Lists.List.list
+R13632 Coq.Lists.List.list
+R13866 Coqlib.list_norepet
+R13882 Coq.Lists.List "x ++ y" list_scope
+R13841 Coqlib.list_norepet
+R13857 Coq.Lists.List "x ++ y" list_scope
+R13830 Coq.Lists.List.list
+R13830 Coq.Lists.List.list
+R14031 Coqlib.list_norepet
+R14047 Coq.Lists.List "x ++ y" list_scope
+R14052 Coq.Lists.List "x :: y" list_scope
+R14006 Coq.Init.Logic "~ x" type_scope
+R14008 Coq.Lists.List.In
+R13993 Coq.Init.Logic "~ x" type_scope
+R13995 Coq.Lists.List.In
+R13968 Coqlib.list_norepet
+R13984 Coq.Lists.List "x ++ y" list_scope
+R13947 Coq.Lists.List.list
+R13935 Coq.Lists.List.list
+R14031 Coqlib.list_norepet
+R14047 Coq.Lists.List "x ++ y" list_scope
+R14052 Coq.Lists.List "x :: y" list_scope
+R14006 Coq.Init.Logic "~ x" type_scope
+R14008 Coq.Lists.List.In
+R13993 Coq.Init.Logic "~ x" type_scope
+R13995 Coq.Lists.List.In
+R13968 Coqlib.list_norepet
+R13984 Coq.Lists.List "x ++ y" list_scope
+R13947 Coq.Lists.List.list
+R13935 Coq.Lists.List.list
+R14167 Coq.Lists.List.in_app_or
+R14167 Coq.Lists.List.in_app_or
+R14214 Coq.Lists.List.in_or_app
+R14214 Coq.Lists.List.in_or_app
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R14302 Coq.Lists.List.in_or_app
+R14302 Coq.Lists.List.in_or_app
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R14373 Coq.Lists.List.app_nil_end
+R14373 Coq.Lists.List.app_nil_end
+R14453 Coq.Lists.List.in_or_app
+R14453 Coq.Lists.List.in_or_app
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R14500 Coq.Lists.List.in_or_app
+R14500 Coq.Lists.List.in_or_app
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R14621 Coqlib.list_norepet
+R14594 Coqlib.list_norepet
+R14611 Coq.Lists.List "x ++ y" list_scope
+R14583 Coq.Lists.List.list
+R14583 Coq.Lists.List.list
+R14820 Coqlib.list_norepet
+R14793 Coqlib.list_norepet
+R14810 Coq.Lists.List "x ++ y" list_scope
+R14782 Coq.Lists.List.list
+R14782 Coq.Lists.List.list
+R14860 Coqlib.list_norepet_append_right
+R14860 Coqlib.list_norepet_append_right
+R14904 Coqlib.list_norepet_append_commut
+R14904 Coqlib.list_norepet_append_commut
+R15059 Coq.Lists.List.list
+R15049 Coq.Lists.List.list
+R15122 Coq.Lists.List.nil
+R15118 Coq.Lists.List.nil
+R15254 Coq.Lists.List "x :: y" list_scope
+R15243 Coq.Lists.List "x :: y" list_scope
+R15497 Coqlib.list_forall2
+R15458 Coq.Lists.List.In
+R15446 Coq.Lists.List.In
+R15373 Coqlib.list_forall2
+R15362 Coq.Lists.List.list
+R15349 Coq.Lists.List.list
+FMaps
+R199 Coq.Init.Specif "{ A } + { B }" type_scope
+R202 Coq.Init.Logic "x = y" type_scope
+R212 Coq.Init.Logic "x <> y" type_scope
+R193 Maps.elt
+R193 Maps.elt
+R349 Coq.Init.Specif "{ A } + { B }" type_scope
+R352 Coq.Init.Logic "x = y" type_scope
+R362 Coq.Init.Logic "x <> y" type_scope
+R343 Maps.t
+R343 Maps.t
+R295 Coq.Init.Specif "{ A } + { B }" type_scope
+R297 Coq.Init.Logic "x = y" type_scope
+R305 Coq.Init.Logic "x <> y" type_scope
+R404 Maps.t
+R456 Coq.Init.Datatypes.option
+R449 Maps.t
+R442 Maps.elt
+R518 Maps.t
+R511 Maps.t
+R499 Maps.elt
+R573 Maps.t
+R566 Maps.t
+R559 Maps.elt
+R645 Coq.Init.Logic "x = y" type_scope
+R629 Maps.get
+R636 Maps.empty
+R647 Coq.Init.Datatypes.None
+R623 Maps.elt
+R735 Coq.Init.Logic "x = y" type_scope
+R717 Maps.get
+R724 Maps.set
+R737 Coq.Init.Datatypes.Some
+R711 Maps.t
+R695 Maps.elt
+R843 Coq.Init.Logic "x = y" type_scope
+R825 Maps.get
+R832 Maps.set
+R845 Maps.get
+R817 Coq.Init.Logic "x <> y" type_scope
+R805 Maps.t
+R789 Maps.elt
+R789 Maps.elt
+R945 Coq.Init.Logic "x = y" type_scope
+R927 Maps.get
+R934 Maps.set
+R950 Maps.elt_eq
+R978 Maps.get
+R966 Coq.Init.Datatypes.Some
+R917 Maps.t
+R901 Maps.elt
+R901 Maps.elt
+R1089 Coq.Init.Logic "x = y" type_scope
+R1079 Maps.set
+R1067 Coq.Init.Logic "x = y" type_scope
+R1059 Maps.get
+R1069 Coq.Init.Datatypes.Some
+R1042 Maps.t
+R1033 Maps.elt
+R1362 Coq.Init.Logic "x = y" type_scope
+R1343 Maps.get
+R1350 Maps.remove
+R1364 Coq.Init.Datatypes.None
+R1337 Maps.t
+R1328 Maps.elt
+R1462 Coq.Init.Logic "x = y" type_scope
+R1443 Maps.get
+R1450 Maps.remove
+R1464 Maps.get
+R1435 Coq.Init.Logic "x <> y" type_scope
+R1423 Maps.t
+R1414 Maps.elt
+R1414 Maps.elt
+R1538 Maps.t
+R1531 Maps.t
+R1513 Maps.elt
+R1642 Coq.Init.Logic "x = y" type_scope
+R1626 Maps.get
+R1633 Maps.map
+R1644 Coqlib.option_map
+R1662 Maps.get
+R1616 Maps.t
+R1607 Maps.elt
+R1588 Maps.elt
+R1765 Maps.t
+R1758 Maps.t
+R1751 Maps.t
+R1738 Coq.Init.Datatypes.option
+R1726 Coq.Init.Datatypes.option
+R1714 Coq.Init.Datatypes.option
+R1939 Coq.Init.Logic "x = y" type_scope
+R1915 Maps.get
+R1922 Maps.combine
+R1955 Maps.get
+R1944 Maps.get
+R1901 Coq.Init.Logic "x = y" type_scope
+R1896 Coq.Init.Datatypes.None
+R1891 Coq.Init.Datatypes.None
+R1903 Coq.Init.Datatypes.None
+R1879 Maps.elt
+R1870 Maps.t
+R1870 Maps.t
+R1841 Coq.Init.Datatypes.option
+R1829 Coq.Init.Datatypes.option
+R1817 Coq.Init.Datatypes.option
+R2148 Coq.Init.Logic "x = y" type_scope
+R2132 Maps.combine
+R2150 Maps.combine
+R2122 Maps.t
+R2122 Maps.t
+R2091 Coq.Init.Logic "x = y" type_scope
+R2074 Coq.Init.Datatypes.option
+R2074 Coq.Init.Datatypes.option
+R2045 Coq.Init.Datatypes.option
+R2033 Coq.Init.Datatypes.option
+R2021 Coq.Init.Datatypes.option
+R2045 Coq.Init.Datatypes.option
+R2033 Coq.Init.Datatypes.option
+R2021 Coq.Init.Datatypes.option
+R2216 Coq.Lists.List.list
+R2226 Coq.Init.Datatypes "x * y" type_scope
+R2222 Maps.elt
+R2209 Maps.t
+R2333 Coq.Lists.List.In
+R2344 Maps.elements
+R2336 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R2321 Coq.Init.Logic "x = y" type_scope
+R2313 Maps.get
+R2323 Coq.Init.Datatypes.Some
+R2296 Maps.elt
+R2287 Maps.t
+R2473 Coq.Init.Logic "x = y" type_scope
+R2465 Maps.get
+R2475 Coq.Init.Datatypes.Some
+R2439 Coq.Lists.List.In
+R2450 Maps.elements
+R2442 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R2422 Maps.elt
+R2413 Maps.t
+R2547 Maps.t
+R2529 Maps.elt
+R2664 Coq.Init.Logic "x = y" type_scope
+R2653 Maps.fold
+R2670 Coq.Lists.List.fold_left
+R2719 Maps.elements
+R2710 Coq.Init.Datatypes.snd
+R2702 Coq.Init.Datatypes.fst
+R2643 Maps.t
+R2617 Maps.elt
+R2821 Coq.Init.Specif "{ A } + { B }" type_scope
+R2824 Coq.Init.Logic "x = y" type_scope
+R2834 Coq.Init.Logic "x <> y" type_scope
+R2815 Maps.elt
+R2815 Maps.elt
+R2906 Maps.t
+R2951 Maps.t
+R2944 Maps.elt
+R3013 Maps.t
+R3006 Maps.t
+R2994 Maps.elt
+R3087 Coq.Init.Logic "x = y" type_scope
+R3072 Maps.get
+R3079 Maps.init
+R3059 Maps.elt
+R3174 Coq.Init.Logic "x = y" type_scope
+R3156 Maps.get
+R3163 Maps.set
+R3150 Maps.t
+R3134 Maps.elt
+R3277 Coq.Init.Logic "x = y" type_scope
+R3259 Maps.get
+R3266 Maps.set
+R3279 Maps.get
+R3251 Coq.Init.Logic "x <> y" type_scope
+R3239 Maps.t
+R3223 Maps.elt
+R3223 Maps.elt
+R3379 Coq.Init.Logic "x = y" type_scope
+R3361 Maps.get
+R3368 Maps.set
+R3384 Maps.elt_eq
+R3407 Maps.get
+R3351 Maps.t
+R3335 Maps.elt
+R3335 Maps.elt
+R3505 Coq.Init.Logic "x = y" type_scope
+R3479 Maps.get
+R3486 Maps.set
+R3493 Maps.get
+R3507 Maps.get
+R3473 Maps.t
+R3464 Maps.elt
+R3464 Maps.elt
+R3570 Maps.t
+R3563 Maps.t
+R3667 Coq.Init.Logic "x = y" type_scope
+R3651 Maps.get
+R3658 Maps.map
+R3671 Maps.get
+R3641 Maps.t
+R3632 Maps.elt
+R3733 Coq.NArith.BinPos.positive
+R3766 Coqlib.peq
+R3851 Coq.Init.Datatypes.option
+R3965 Maps.tree
+R4070 Coq.Init.Specif "{ A } + { B }" type_scope
+R4073 Coq.Init.Logic "x = y" type_scope
+R4083 Coq.Init.Logic "x <> y" type_scope
+R4064 Maps.t
+R4064 Maps.t
+R4027 Coq.Init.Specif "{ A } + { B }" type_scope
+R4029 Coq.Init.Logic "x = y" type_scope
+R4037 Coq.Init.Logic "x <> y" type_scope
+R4224 Maps.t
+R4217 Maps.Leaf
+R4294 Coq.Init.Datatypes.option
+R4276 Maps.t
+R4261 Coq.NArith.BinPos.positive
+R4329 Maps.Leaf
+R4337 Coq.Init.Datatypes.None
+R4348 Maps.Node
+R4393 Coq.NArith.BinPos.xH
+R4411 Coq.NArith.BinPos.xO
+R4439 Coq.NArith.BinPos.xI
+R4276 Maps.t
+R4261 Coq.NArith.BinPos.positive
+R4550 Maps.t
+R4532 Maps.t
+R4509 Coq.NArith.BinPos.positive
+R4580 Maps.Leaf
+R4619 Coq.NArith.BinPos.xH
+R4625 Maps.Node
+R4644 Maps.Leaf
+R4636 Coq.Init.Datatypes.Some
+R4630 Maps.Leaf
+R4659 Coq.NArith.BinPos.xO
+R4668 Maps.Node
+R4694 Maps.Leaf
+R4689 Coq.Init.Datatypes.None
+R4683 Maps.Leaf
+R4709 Coq.NArith.BinPos.xI
+R4718 Maps.Node
+R4743 Maps.Leaf
+R4728 Coq.Init.Datatypes.None
+R4723 Maps.Leaf
+R4767 Maps.Node
+R4812 Coq.NArith.BinPos.xH
+R4818 Maps.Node
+R4826 Coq.Init.Datatypes.Some
+R4846 Coq.NArith.BinPos.xO
+R4855 Maps.Node
+R4887 Coq.NArith.BinPos.xI
+R4896 Maps.Node
+R4532 Maps.t
+R4509 Coq.NArith.BinPos.positive
+R5006 Maps.t
+R4988 Maps.t
+R4973 Coq.NArith.BinPos.positive
+R5036 Coq.NArith.BinPos.xH
+R5073 Maps.Leaf
+R5081 Maps.Leaf
+R5096 Maps.Node
+R5101 Maps.Leaf
+R5108 Maps.Leaf
+R5116 Maps.Leaf
+R5131 Maps.Node
+R5145 Maps.Node
+R5152 Coq.Init.Datatypes.None
+R5177 Coq.NArith.BinPos.xO
+R5217 Maps.Leaf
+R5225 Maps.Leaf
+R5240 Maps.Node
+R5247 Coq.Init.Datatypes.None
+R5252 Maps.Leaf
+R5309 Maps.Leaf
+R5317 Maps.Leaf
+R5342 Maps.Node
+R5355 Maps.Leaf
+R5350 Coq.Init.Datatypes.None
+R5386 Maps.Node
+R5400 Maps.Node
+R5441 Coq.NArith.BinPos.xI
+R5481 Maps.Leaf
+R5489 Maps.Leaf
+R5504 Maps.Node
+R5509 Maps.Leaf
+R5514 Coq.Init.Datatypes.None
+R5573 Maps.Leaf
+R5581 Maps.Leaf
+R5606 Maps.Node
+R5616 Coq.Init.Datatypes.None
+R5611 Maps.Leaf
+R5650 Maps.Node
+R5664 Maps.Node
+R4988 Maps.t
+R4973 Coq.NArith.BinPos.positive
+R5778 Coq.Init.Logic "x = y" type_scope
+R5762 Maps.get
+R5769 Maps.empty
+R5780 Coq.Init.Datatypes.None
+R5751 Coq.NArith.BinPos.positive
+R5917 Coq.Init.Logic "x = y" type_scope
+R5899 Maps.get
+R5906 Maps.set
+R5919 Coq.Init.Datatypes.Some
+R5893 Maps.t
+R5872 Coq.NArith.BinPos.positive
+R6056 Coq.Init.Logic "x = y" type_scope
+R6037 Maps.get
+R6051 Maps.t
+R6044 Maps.Leaf
+R6058 Coq.Init.Datatypes.None
+R6026 Coq.NArith.BinPos.positive
+R6081 Maps.gempty
+R6081 Maps.gempty
+R6195 Coq.Init.Logic "x = y" type_scope
+R6177 Maps.get
+R6184 Maps.set
+R6197 Maps.get
+R6169 Coq.Init.Logic "x <> y" type_scope
+R6157 Maps.t
+R6136 Coq.NArith.BinPos.positive
+R6136 Coq.NArith.BinPos.positive
+R6294 Maps.gleaf
+R6294 Maps.gleaf
+R6294 Maps.gleaf
+R6294 Maps.gleaf
+R6294 Maps.gleaf
+R6294 Maps.gleaf
+R6294 Maps.gleaf
+R6294 Maps.gleaf
+R6294 Maps.gleaf
+R6294 Maps.gleaf
+R6294 Maps.gleaf
+R6294 Maps.gleaf
+R6294 Maps.gleaf
+R6294 Maps.gleaf
+R6294 Maps.gleaf
+R6294 Maps.gleaf
+R6294 Maps.gleaf
+R6294 Maps.gleaf
+R6294 Maps.gleaf
+R6440 Coq.Init.Logic "x = y" type_scope
+R6422 Maps.get
+R6429 Maps.set
+R6445 Coqlib.peq
+R6470 Maps.get
+R6458 Coq.Init.Datatypes.Some
+R6412 Maps.t
+R6391 Coq.NArith.BinPos.positive
+R6391 Coq.NArith.BinPos.positive
+R6514 Coqlib.peq
+R6543 Maps.gss
+R6555 Maps.gso
+R6514 Coqlib.peq
+R6543 Maps.gss
+R6555 Maps.gso
+R6680 Coq.Init.Logic "x = y" type_scope
+R6670 Maps.set
+R6658 Coq.Init.Logic "x = y" type_scope
+R6650 Maps.get
+R6660 Coq.Init.Datatypes.Some
+R6633 Maps.t
+R6619 Coq.NArith.BinPos.positive
+R6925 Coq.Init.Logic "x = y" type_scope
+R6903 Maps.remove
+R6920 Maps.t
+R6913 Maps.Leaf
+R6927 Maps.Leaf
+R6892 Coq.NArith.BinPos.positive
+R7053 Coq.Init.Logic "x = y" type_scope
+R7034 Maps.get
+R7041 Maps.remove
+R7055 Coq.Init.Datatypes.None
+R7028 Maps.t
+R7014 Coq.NArith.BinPos.positive
+R7205 Maps.rleaf
+R7205 Maps.rleaf
+R7267 Coq.Init.Logic "x = y" type_scope
+R7234 Maps.get
+R7241 Maps.remove
+R7251 Maps.Node
+R7269 Coq.Init.Datatypes.None
+R7267 Coq.Init.Logic "x = y" type_scope
+R7234 Maps.get
+R7241 Maps.remove
+R7251 Maps.Node
+R7269 Coq.Init.Datatypes.None
+R7294 Maps.remove
+R7304 Maps.Node
+R7294 Maps.remove
+R7304 Maps.Node
+R7463 Maps.rleaf
+R7463 Maps.rleaf
+R7525 Coq.Init.Logic "x = y" type_scope
+R7492 Maps.get
+R7499 Maps.remove
+R7509 Maps.Node
+R7527 Coq.Init.Datatypes.None
+R7525 Coq.Init.Logic "x = y" type_scope
+R7492 Maps.get
+R7499 Maps.remove
+R7509 Maps.Node
+R7527 Coq.Init.Datatypes.None
+R7552 Maps.remove
+R7562 Maps.Node
+R7552 Maps.remove
+R7562 Maps.Node
+R7779 Coq.Init.Logic "x = y" type_scope
+R7760 Maps.get
+R7767 Maps.remove
+R7781 Maps.get
+R7752 Coq.Init.Logic "x <> y" type_scope
+R7740 Maps.t
+R7726 Coq.NArith.BinPos.positive
+R7726 Coq.NArith.BinPos.positive
+R7869 Maps.rleaf
+R7878 Coq.NArith.BinPos.xI
+R7907 Maps.rleaf
+R7916 Coq.NArith.BinPos.xO
+R7945 Maps.rleaf
+R8084 Maps.rleaf
+R8123 Maps.gleaf
+R7869 Maps.rleaf
+R7878 Coq.NArith.BinPos.xI
+R7869 Maps.rleaf
+R7878 Coq.NArith.BinPos.xI
+R7869 Maps.rleaf
+R7878 Coq.NArith.BinPos.xI
+R7869 Maps.rleaf
+R7878 Coq.NArith.BinPos.xI
+R7869 Maps.rleaf
+R7878 Coq.NArith.BinPos.xI
+R7869 Maps.rleaf
+R7878 Coq.NArith.BinPos.xI
+R7869 Maps.rleaf
+R7878 Coq.NArith.BinPos.xI
+R7869 Maps.rleaf
+R7878 Coq.NArith.BinPos.xI
+R7869 Maps.rleaf
+R7878 Coq.NArith.BinPos.xI
+R7869 Maps.rleaf
+R7878 Coq.NArith.BinPos.xI
+R7869 Maps.rleaf
+R7878 Coq.NArith.BinPos.xI
+R7869 Maps.rleaf
+R7878 Coq.NArith.BinPos.xI
+R7869 Maps.rleaf
+R7878 Coq.NArith.BinPos.xI
+R7869 Maps.rleaf
+R7878 Coq.NArith.BinPos.xI
+R7869 Maps.rleaf
+R7878 Coq.NArith.BinPos.xI
+R7869 Maps.rleaf
+R7878 Coq.NArith.BinPos.xI
+R7869 Maps.rleaf
+R7878 Coq.NArith.BinPos.xI
+R7869 Maps.rleaf
+R7878 Coq.NArith.BinPos.xI
+R7907 Maps.rleaf
+R7916 Coq.NArith.BinPos.xO
+R7907 Maps.rleaf
+R7916 Coq.NArith.BinPos.xO
+R7907 Maps.rleaf
+R7916 Coq.NArith.BinPos.xO
+R7907 Maps.rleaf
+R7916 Coq.NArith.BinPos.xO
+R7907 Maps.rleaf
+R7916 Coq.NArith.BinPos.xO
+R7907 Maps.rleaf
+R7916 Coq.NArith.BinPos.xO
+R7907 Maps.rleaf
+R7916 Coq.NArith.BinPos.xO
+R7907 Maps.rleaf
+R7916 Coq.NArith.BinPos.xO
+R7907 Maps.rleaf
+R7916 Coq.NArith.BinPos.xO
+R7907 Maps.rleaf
+R7916 Coq.NArith.BinPos.xO
+R7907 Maps.rleaf
+R7916 Coq.NArith.BinPos.xO
+R7907 Maps.rleaf
+R7916 Coq.NArith.BinPos.xO
+R7907 Maps.rleaf
+R7916 Coq.NArith.BinPos.xO
+R7907 Maps.rleaf
+R7916 Coq.NArith.BinPos.xO
+R7907 Maps.rleaf
+R7916 Coq.NArith.BinPos.xO
+R7907 Maps.rleaf
+R7916 Coq.NArith.BinPos.xO
+R7907 Maps.rleaf
+R7916 Coq.NArith.BinPos.xO
+R7907 Maps.rleaf
+R7916 Coq.NArith.BinPos.xO
+R7945 Maps.rleaf
+R7945 Maps.rleaf
+R7945 Maps.rleaf
+R7945 Maps.rleaf
+R7945 Maps.rleaf
+R7945 Maps.rleaf
+R7945 Maps.rleaf
+R7945 Maps.rleaf
+R7945 Maps.rleaf
+R7945 Maps.rleaf
+R7945 Maps.rleaf
+R7945 Maps.rleaf
+R7945 Maps.rleaf
+R7945 Maps.rleaf
+R7945 Maps.rleaf
+R7945 Maps.rleaf
+R7945 Maps.rleaf
+R7945 Maps.rleaf
+R8084 Maps.rleaf
+R8084 Maps.rleaf
+R8084 Maps.rleaf
+R8084 Maps.rleaf
+R8084 Maps.rleaf
+R8084 Maps.rleaf
+R8084 Maps.rleaf
+R8084 Maps.rleaf
+R8084 Maps.rleaf
+R8084 Maps.rleaf
+R8084 Maps.rleaf
+R8084 Maps.rleaf
+R8084 Maps.rleaf
+R8084 Maps.rleaf
+R8084 Maps.rleaf
+R8084 Maps.rleaf
+R8123 Maps.gleaf
+R8123 Maps.gleaf
+R8123 Maps.gleaf
+R8123 Maps.gleaf
+R8123 Maps.gleaf
+R8123 Maps.gleaf
+R8123 Maps.gleaf
+R8123 Maps.gleaf
+R8123 Maps.gleaf
+R8123 Maps.gleaf
+R8123 Maps.gleaf
+R8123 Maps.gleaf
+R8123 Maps.gleaf
+R8123 Maps.gleaf
+R8187 Coq.Init.Logic "x = y" type_scope
+R8151 Maps.get
+R8158 Maps.remove
+R8168 Maps.Node
+R8189 Maps.get
+R8196 Maps.Node
+R8236 Maps.remove
+R8246 Maps.Node
+R8279 Maps.gleaf
+R8187 Coq.Init.Logic "x = y" type_scope
+R8151 Maps.get
+R8158 Maps.remove
+R8168 Maps.Node
+R8189 Maps.get
+R8196 Maps.Node
+R8236 Maps.remove
+R8246 Maps.Node
+R8279 Maps.gleaf
+R8279 Maps.gleaf
+R8346 Maps.remove
+R8356 Maps.Node
+R8397 Maps.gleaf
+R8346 Maps.remove
+R8356 Maps.Node
+R8397 Maps.gleaf
+R8397 Maps.gleaf
+R8438 Maps.remove
+R8448 Maps.Node
+R8488 Maps.gleaf
+R8438 Maps.remove
+R8448 Maps.Node
+R8488 Maps.gleaf
+R8488 Maps.gleaf
+R8561 Coq.Init.Logic "x = y" type_scope
+R8524 Maps.get
+R8531 Maps.remove
+R8541 Maps.Node
+R8563 Maps.get
+R8570 Maps.Node
+R8611 Maps.remove
+R8621 Maps.Node
+R8655 Maps.gleaf
+R8561 Coq.Init.Logic "x = y" type_scope
+R8524 Maps.get
+R8531 Maps.remove
+R8541 Maps.Node
+R8563 Maps.get
+R8570 Maps.Node
+R8611 Maps.remove
+R8621 Maps.Node
+R8655 Maps.gleaf
+R8655 Maps.gleaf
+R8722 Maps.remove
+R8732 Maps.Node
+R8772 Maps.gleaf
+R8722 Maps.remove
+R8732 Maps.Node
+R8772 Maps.gleaf
+R8772 Maps.gleaf
+R8813 Maps.remove
+R8823 Maps.Node
+R8864 Maps.gleaf
+R8813 Maps.remove
+R8823 Maps.Node
+R8864 Maps.gleaf
+R8864 Maps.gleaf
+R8948 Coq.NArith.BinPos.positive
+R8925 Coq.NArith.BinPos.positive
+R8925 Coq.NArith.BinPos.positive
+R8987 Coq.NArith.BinPos.xH
+R9003 Coq.NArith.BinPos.xI
+R9012 Coq.NArith.BinPos.xI
+R9037 Coq.NArith.BinPos.xO
+R9046 Coq.NArith.BinPos.xO
+R8925 Coq.NArith.BinPos.positive
+R8925 Coq.NArith.BinPos.positive
+R9170 Coq.Init.Logic "x = y" type_scope
+R9154 Maps.append
+R9164 Coq.NArith.BinPos.xO
+R9172 Maps.append
+R9180 Maps.append
+R9190 Coq.NArith.BinPos.xO
+R9193 Coq.NArith.BinPos.xH
+R9116 Coq.NArith.BinPos.positive
+R9116 Coq.NArith.BinPos.positive
+R9282 Coq.NArith.BinPos.xI
+R9314 Coq.NArith.BinPos.xO
+R9348 Coq.NArith.BinPos.xH
+R9282 Coq.NArith.BinPos.xI
+R9282 Coq.NArith.BinPos.xI
+R9282 Coq.NArith.BinPos.xI
+R9282 Coq.NArith.BinPos.xI
+R9282 Coq.NArith.BinPos.xI
+R9282 Coq.NArith.BinPos.xI
+R9314 Coq.NArith.BinPos.xO
+R9314 Coq.NArith.BinPos.xO
+R9314 Coq.NArith.BinPos.xO
+R9314 Coq.NArith.BinPos.xO
+R9314 Coq.NArith.BinPos.xO
+R9314 Coq.NArith.BinPos.xO
+R9348 Coq.NArith.BinPos.xH
+R9348 Coq.NArith.BinPos.xH
+R9348 Coq.NArith.BinPos.xH
+R9348 Coq.NArith.BinPos.xH
+R9348 Coq.NArith.BinPos.xH
+R9348 Coq.NArith.BinPos.xH
+R9470 Coq.Init.Logic "x = y" type_scope
+R9454 Maps.append
+R9464 Coq.NArith.BinPos.xI
+R9472 Maps.append
+R9480 Maps.append
+R9490 Coq.NArith.BinPos.xI
+R9493 Coq.NArith.BinPos.xH
+R9416 Coq.NArith.BinPos.positive
+R9416 Coq.NArith.BinPos.positive
+R9582 Coq.NArith.BinPos.xI
+R9614 Coq.NArith.BinPos.xO
+R9648 Coq.NArith.BinPos.xH
+R9582 Coq.NArith.BinPos.xI
+R9582 Coq.NArith.BinPos.xI
+R9582 Coq.NArith.BinPos.xI
+R9582 Coq.NArith.BinPos.xI
+R9582 Coq.NArith.BinPos.xI
+R9582 Coq.NArith.BinPos.xI
+R9614 Coq.NArith.BinPos.xO
+R9614 Coq.NArith.BinPos.xO
+R9614 Coq.NArith.BinPos.xO
+R9614 Coq.NArith.BinPos.xO
+R9614 Coq.NArith.BinPos.xO
+R9614 Coq.NArith.BinPos.xO
+R9648 Coq.NArith.BinPos.xH
+R9648 Coq.NArith.BinPos.xH
+R9648 Coq.NArith.BinPos.xH
+R9648 Coq.NArith.BinPos.xH
+R9648 Coq.NArith.BinPos.xH
+R9648 Coq.NArith.BinPos.xH
+R9739 Coq.Init.Logic "x = y" type_scope
+R9727 Maps.append
+R9736 Coq.NArith.BinPos.xH
+R9716 Coq.NArith.BinPos.positive
+R9867 Coq.Init.Logic "x = y" type_scope
+R9855 Maps.append
+R9862 Coq.NArith.BinPos.xH
+R9844 Coq.NArith.BinPos.positive
+R10018 Maps.t
+R9982 Coq.NArith.BinPos.positive
+R9972 Maps.t
+R9947 Coq.NArith.BinPos.positive
+R10052 Maps.Leaf
+R10060 Maps.Leaf
+R10073 Maps.Node
+R10087 Maps.Node
+R10208 Maps.append
+R10218 Coq.NArith.BinPos.xI
+R10221 Coq.NArith.BinPos.xH
+R10150 Coqlib.option_map
+R10103 Maps.append
+R10113 Coq.NArith.BinPos.xO
+R10116 Coq.NArith.BinPos.xH
+R9982 Coq.NArith.BinPos.positive
+R9972 Maps.t
+R9947 Coq.NArith.BinPos.positive
+R10298 Maps.xmap
+R10307 Coq.NArith.BinPos.xH
+R10273 Coq.NArith.BinPos.positive
+R10429 Coq.Init.Logic "x = y" type_scope
+R10410 Maps.get
+R10417 Maps.xmap
+R10431 Coqlib.option_map
+R10460 Maps.get
+R10446 Maps.append
+R10398 Maps.t
+R10384 Coq.NArith.BinPos.positive
+R10384 Coq.NArith.BinPos.positive
+R10357 Coq.NArith.BinPos.positive
+R10548 Maps.append_assoc_1
+R10548 Maps.append_assoc_1
+R10595 Maps.append_assoc_0
+R10595 Maps.append_assoc_0
+R10642 Maps.append_neutral_r
+R10642 Maps.append_neutral_r
+R10785 Coq.Init.Logic "x = y" type_scope
+R10769 Maps.get
+R10776 Maps.map
+R10787 Coqlib.option_map
+R10805 Maps.get
+R10759 Maps.t
+R10745 Coq.NArith.BinPos.positive
+R10721 Coq.NArith.BinPos.positive
+R10879 Maps.append
+R10886 Coq.NArith.BinPos.xH
+R10879 Maps.append
+R10886 Coq.NArith.BinPos.xH
+R10904 Maps.xgmap
+R10904 Maps.xgmap
+R10923 Maps.append_neutral_l
+R10923 Maps.append_neutral_l
+R11074 Maps.t
+R11056 Maps.t
+R11018 Coq.Init.Datatypes.option
+R11006 Coq.Init.Datatypes.option
+R10994 Coq.Init.Datatypes.option
+R11108 Maps.Leaf
+R11116 Maps.Leaf
+R11129 Maps.Node
+R11143 Maps.Node
+R11170 Coq.Init.Datatypes.None
+R11056 Maps.t
+R11018 Coq.Init.Datatypes.option
+R11006 Coq.Init.Datatypes.option
+R10994 Coq.Init.Datatypes.option
+R11393 Coq.Init.Logic "x = y" type_scope
+R11370 Maps.get
+R11377 Maps.xcombine_l
+R11407 Coq.Init.Datatypes.None
+R11398 Maps.get
+R11360 Coq.Init.Logic "x = y" type_scope
+R11355 Coq.Init.Datatypes.None
+R11350 Coq.Init.Datatypes.None
+R11362 Coq.Init.Datatypes.None
+R11332 Maps.t
+R11317 Coq.NArith.BinPos.positive
+R11285 Coq.Init.Datatypes.option
+R11273 Coq.Init.Datatypes.option
+R11261 Coq.Init.Datatypes.option
+R11605 Maps.t
+R11587 Maps.t
+R11549 Coq.Init.Datatypes.option
+R11537 Coq.Init.Datatypes.option
+R11525 Coq.Init.Datatypes.option
+R11639 Maps.Leaf
+R11647 Maps.Leaf
+R11660 Maps.Node
+R11674 Maps.Node
+R11699 Coq.Init.Datatypes.None
+R11587 Maps.t
+R11549 Coq.Init.Datatypes.option
+R11537 Coq.Init.Datatypes.option
+R11525 Coq.Init.Datatypes.option
+R11924 Coq.Init.Logic "x = y" type_scope
+R11901 Maps.get
+R11908 Maps.xcombine_r
+R11934 Maps.get
+R11928 Coq.Init.Datatypes.None
+R11891 Coq.Init.Logic "x = y" type_scope
+R11886 Coq.Init.Datatypes.None
+R11881 Coq.Init.Datatypes.None
+R11893 Coq.Init.Datatypes.None
+R11863 Maps.t
+R11848 Coq.NArith.BinPos.positive
+R11816 Coq.Init.Datatypes.option
+R11804 Coq.Init.Datatypes.option
+R11792 Coq.Init.Datatypes.option
+R12132 Maps.t
+R12113 Maps.t
+R12113 Maps.t
+R12075 Coq.Init.Datatypes.option
+R12063 Coq.Init.Datatypes.option
+R12051 Coq.Init.Datatypes.option
+R12163 Maps.Leaf
+R12171 Maps.xcombine_r
+R12193 Maps.Node
+R12242 Maps.Leaf
+R12250 Maps.xcombine_l
+R12276 Maps.Node
+R12293 Maps.Node
+R12113 Maps.t
+R12113 Maps.t
+R12075 Coq.Init.Datatypes.option
+R12063 Coq.Init.Datatypes.option
+R12051 Coq.Init.Datatypes.option
+R12546 Coq.Init.Logic "x = y" type_scope
+R12522 Maps.get
+R12529 Maps.combine
+R12562 Maps.get
+R12551 Maps.get
+R12506 Coq.Init.Logic "x = y" type_scope
+R12501 Coq.Init.Datatypes.None
+R12496 Coq.Init.Datatypes.None
+R12508 Coq.Init.Datatypes.None
+R12482 Maps.t
+R12482 Maps.t
+R12451 Coq.NArith.BinPos.positive
+R12437 Coq.Init.Datatypes.option
+R12425 Coq.Init.Datatypes.option
+R12413 Coq.Init.Datatypes.option
+R12666 Maps.xgcombine_r
+R12689 Maps.xgcombine_l
+R12666 Maps.xgcombine_r
+R12666 Maps.xgcombine_r
+R12666 Maps.xgcombine_r
+R12666 Maps.xgcombine_r
+R12689 Maps.xgcombine_l
+R12689 Maps.xgcombine_l
+R12689 Maps.xgcombine_l
+R12689 Maps.xgcombine_l
+R12889 Coq.Init.Logic "x = y" type_scope
+R12865 Maps.get
+R12872 Maps.combine
+R12905 Maps.get
+R12894 Maps.get
+R12851 Coq.Init.Logic "x = y" type_scope
+R12846 Coq.Init.Datatypes.None
+R12841 Coq.Init.Datatypes.None
+R12853 Coq.Init.Datatypes.None
+R12824 Coq.NArith.BinPos.positive
+R12815 Maps.t
+R12815 Maps.t
+R12786 Coq.Init.Datatypes.option
+R12774 Coq.Init.Datatypes.option
+R12762 Coq.Init.Datatypes.option
+R12958 Maps.xgcombine
+R12958 Maps.xgcombine
+R13160 Coq.Init.Logic "x = y" type_scope
+R13145 Maps.xcombine_l
+R13162 Maps.xcombine_r
+R13127 Coq.Init.Logic "x = y" type_scope
+R13110 Coq.Init.Datatypes.option
+R13110 Coq.Init.Datatypes.option
+R13083 Maps.t
+R13068 Coq.Init.Datatypes.option
+R13056 Coq.Init.Datatypes.option
+R13044 Coq.Init.Datatypes.option
+R13068 Coq.Init.Datatypes.option
+R13056 Coq.Init.Datatypes.option
+R13044 Coq.Init.Datatypes.option
+R13493 Coq.Init.Logic "x = y" type_scope
+R13477 Maps.combine
+R13495 Maps.combine
+R13467 Maps.t
+R13467 Maps.t
+R13436 Coq.Init.Logic "x = y" type_scope
+R13419 Coq.Init.Datatypes.option
+R13419 Coq.Init.Datatypes.option
+R13390 Coq.Init.Datatypes.option
+R13378 Coq.Init.Datatypes.option
+R13366 Coq.Init.Datatypes.option
+R13390 Coq.Init.Datatypes.option
+R13378 Coq.Init.Datatypes.option
+R13366 Coq.Init.Datatypes.option
+R13590 Coq.Init.Logic "x = y" type_scope
+R13573 Coq.Init.Datatypes.option
+R13573 Coq.Init.Datatypes.option
+R13590 Coq.Init.Logic "x = y" type_scope
+R13573 Coq.Init.Datatypes.option
+R13573 Coq.Init.Datatypes.option
+R13711 Maps.xcombine_lr
+R13751 Maps.xcombine_lr
+R13711 Maps.xcombine_lr
+R13711 Maps.xcombine_lr
+R13711 Maps.xcombine_lr
+R13711 Maps.xcombine_lr
+R13711 Maps.xcombine_lr
+R13711 Maps.xcombine_lr
+R13711 Maps.xcombine_lr
+R13711 Maps.xcombine_lr
+R13751 Maps.xcombine_lr
+R13751 Maps.xcombine_lr
+R13751 Maps.xcombine_lr
+R13751 Maps.xcombine_lr
+R13751 Maps.xcombine_lr
+R13751 Maps.xcombine_lr
+R13751 Maps.xcombine_lr
+R13751 Maps.xcombine_lr
+R13751 Maps.xcombine_lr
+R13751 Maps.xcombine_lr
+R13927 Coq.Lists.List.list
+R13942 Coq.Init.Datatypes "x * y" type_scope
+R13933 Coq.NArith.BinPos.positive
+R13891 Coq.NArith.BinPos.positive
+R13881 Maps.t
+R13977 Maps.Leaf
+R13985 Coq.Lists.List.nil
+R13997 Maps.Node
+R14004 Coq.Init.Datatypes.None
+R14055 Coq.Lists.List "x ++ y" list_scope
+R14038 Maps.append
+R14048 Coq.NArith.BinPos.xO
+R14051 Coq.NArith.BinPos.xH
+R14074 Maps.append
+R14084 Coq.NArith.BinPos.xI
+R14087 Coq.NArith.BinPos.xH
+R14101 Maps.Node
+R14109 Coq.Init.Datatypes.Some
+R14163 Coq.Lists.List "x ++ y" list_scope
+R14146 Maps.append
+R14156 Coq.NArith.BinPos.xO
+R14159 Coq.NArith.BinPos.xH
+R14186 Coq.Lists.List "x :: y" list_scope
+R14179 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R14202 Maps.append
+R14212 Coq.NArith.BinPos.xI
+R14215 Coq.NArith.BinPos.xH
+R13891 Coq.NArith.BinPos.positive
+R13881 Maps.t
+R14410 Maps.xelements
+R14422 Coq.NArith.BinPos.xH
+R14402 Maps.t
+R14538 Coq.Lists.List.In
+R14558 Maps.xelements
+R14541 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R14542 Maps.append
+R14526 Coq.Init.Logic "x = y" type_scope
+R14518 Maps.get
+R14528 Coq.Init.Datatypes.Some
+R14494 Coq.NArith.BinPos.positive
+R14494 Coq.NArith.BinPos.positive
+R14482 Maps.t
+R14628 Maps.gleaf
+R14628 Maps.gleaf
+R14723 Maps.append_assoc_1
+R14745 Coq.Lists.List.in_or_app
+R14769 Coq.Lists.List.in_cons
+R14723 Maps.append_assoc_1
+R14745 Coq.Lists.List.in_or_app
+R14769 Coq.Lists.List.in_cons
+R14822 Maps.append_assoc_0
+R14844 Coq.Lists.List.in_or_app
+R14822 Maps.append_assoc_0
+R14844 Coq.Lists.List.in_or_app
+R14895 Maps.append_neutral_r
+R14919 Coq.Lists.List.in_or_app
+R14988 Coq.Lists.List.in_eq
+R14895 Maps.append_neutral_r
+R14919 Coq.Lists.List.in_or_app
+R14988 Coq.Lists.List.in_eq
+R15011 Maps.append_assoc_1
+R15033 Coq.Lists.List.in_or_app
+R15011 Maps.append_assoc_1
+R15033 Coq.Lists.List.in_or_app
+R15085 Maps.append_assoc_0
+R15107 Coq.Lists.List.in_or_app
+R15085 Maps.append_assoc_0
+R15107 Coq.Lists.List.in_or_app
+R15275 Coq.Lists.List.In
+R15286 Maps.elements
+R15278 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R15263 Coq.Init.Logic "x = y" type_scope
+R15255 Maps.get
+R15265 Coq.Init.Datatypes.Some
+R15233 Coq.NArith.BinPos.positive
+R15224 Maps.t
+R15341 Maps.xelements_correct
+R15363 Coq.NArith.BinPos.xH
+R15341 Maps.xelements_correct
+R15363 Coq.NArith.BinPos.xH
+R15446 Coq.Init.Datatypes.option
+R15428 Maps.t
+R15413 Coq.NArith.BinPos.positive
+R15413 Coq.NArith.BinPos.positive
+R15491 Coq.NArith.BinPos.xH
+R15497 Maps.get
+R15513 Coq.NArith.BinPos.xO
+R15520 Coq.NArith.BinPos.xO
+R15550 Coq.NArith.BinPos.xI
+R15557 Coq.NArith.BinPos.xI
+R15595 Coq.Init.Datatypes.None
+R15428 Maps.t
+R15413 Coq.NArith.BinPos.positive
+R15413 Coq.NArith.BinPos.positive
+R15783 Coq.Init.Logic "x = y" type_scope
+R15759 Maps.xget
+R15769 Maps.Node
+R15785 Coq.Init.Datatypes.Some
+R15747 Coq.Init.Logic "x = y" type_scope
+R15718 Maps.xget
+R15726 Maps.append
+R15736 Coq.NArith.BinPos.xO
+R15739 Coq.NArith.BinPos.xH
+R15749 Coq.Init.Datatypes.Some
+R15693 Coq.Init.Datatypes.option
+R15683 Maps.t
+R15683 Maps.t
+R15664 Coq.NArith.BinPos.positive
+R15664 Coq.NArith.BinPos.positive
+R16048 Coq.Lists.List.In
+R16059 Maps.xelements
+R16051 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R16011 Coq.Lists.List.In
+R16025 Maps.xelements
+R16038 Coq.NArith.BinPos.xI
+R16014 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R16015 Coq.NArith.BinPos.xI
+R15987 Coq.NArith.BinPos.positive
+R15987 Coq.NArith.BinPos.positive
+R15975 Maps.t
+R16181 Coq.Lists.List.in_app_or
+R16216 Coq.Lists.List.in_or_app
+R16181 Coq.Lists.List.in_app_or
+R16181 Coq.Lists.List.in_app_or
+R16216 Coq.Lists.List.in_or_app
+R16216 Coq.Lists.List.in_or_app
+R16216 Coq.Lists.List.in_or_app
+R16216 Coq.Lists.List.in_or_app
+R16284 Coq.Lists.List.in_inv
+R16284 Coq.Lists.List.in_inv
+R16367 Coq.Lists.List.in_eq
+R16367 Coq.Lists.List.in_eq
+R16389 Coq.Lists.List.in_cons
+R16389 Coq.Lists.List.in_cons
+R16578 Coq.Init.Logic "~ x" type_scope
+R16579 Coq.Lists.List.In
+R16593 Maps.xelements
+R16606 Coq.NArith.BinPos.xO
+R16582 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R16583 Coq.NArith.BinPos.xI
+R16554 Coq.NArith.BinPos.positive
+R16554 Coq.NArith.BinPos.positive
+R16542 Maps.t
+R16717 Coq.Lists.List.in_app_or
+R16717 Coq.Lists.List.in_app_or
+R16717 Coq.Lists.List.in_app_or
+R16786 Coq.Lists.List.in_inv
+R16786 Coq.Lists.List.in_inv
+R17047 Coq.Lists.List.In
+R17058 Maps.xelements
+R17050 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R17010 Coq.Lists.List.In
+R17024 Maps.xelements
+R17037 Coq.NArith.BinPos.xO
+R17013 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R17014 Coq.NArith.BinPos.xO
+R16986 Coq.NArith.BinPos.positive
+R16986 Coq.NArith.BinPos.positive
+R16974 Maps.t
+R17180 Coq.Lists.List.in_app_or
+R17215 Coq.Lists.List.in_or_app
+R17180 Coq.Lists.List.in_app_or
+R17180 Coq.Lists.List.in_app_or
+R17215 Coq.Lists.List.in_or_app
+R17215 Coq.Lists.List.in_or_app
+R17215 Coq.Lists.List.in_or_app
+R17215 Coq.Lists.List.in_or_app
+R17283 Coq.Lists.List.in_inv
+R17283 Coq.Lists.List.in_inv
+R17366 Coq.Lists.List.in_eq
+R17366 Coq.Lists.List.in_eq
+R17388 Coq.Lists.List.in_cons
+R17388 Coq.Lists.List.in_cons
+R17577 Coq.Init.Logic "~ x" type_scope
+R17578 Coq.Lists.List.In
+R17592 Maps.xelements
+R17605 Coq.NArith.BinPos.xI
+R17581 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R17582 Coq.NArith.BinPos.xO
+R17553 Coq.NArith.BinPos.positive
+R17553 Coq.NArith.BinPos.positive
+R17541 Maps.t
+R17716 Coq.Lists.List.in_app_or
+R17716 Coq.Lists.List.in_app_or
+R17716 Coq.Lists.List.in_app_or
+R17785 Coq.Lists.List.in_inv
+R17785 Coq.Lists.List.in_inv
+R18071 Coq.Lists.List.In
+R18082 Maps.xelements
+R18095 Coq.NArith.BinPos.xH
+R18074 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R18025 Coq.Lists.List.In
+R18039 Maps.xelements
+R18064 Coq.NArith.BinPos.xH
+R18050 Maps.Node
+R18028 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R18029 Coq.NArith.BinPos.xI
+R18001 Coq.NArith.BinPos.positive
+R17986 Coq.Init.Datatypes.option
+R17977 Maps.t
+R17977 Maps.t
+R18154 Coq.Lists.List.in_app_or
+R18154 Coq.Lists.List.in_app_or
+R18154 Coq.Lists.List.in_app_or
+R18190 Coq.Lists.List.In
+R18204 Maps.xelements
+R18193 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R18194 Coq.NArith.BinPos.xI
+R18234 Maps.xelements_io
+R18190 Coq.Lists.List.In
+R18204 Maps.xelements
+R18193 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R18194 Coq.NArith.BinPos.xI
+R18234 Maps.xelements_io
+R18272 Coq.Lists.List.in_inv
+R18272 Coq.Lists.List.in_inv
+R18320 Maps.xelements_ii
+R18320 Maps.xelements_ii
+R18356 Coq.Lists.List.In
+R18370 Maps.xelements
+R18359 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R18360 Coq.NArith.BinPos.xI
+R18400 Maps.xelements_io
+R18356 Coq.Lists.List.In
+R18370 Maps.xelements
+R18359 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R18360 Coq.NArith.BinPos.xI
+R18400 Maps.xelements_io
+R18434 Maps.xelements_ii
+R18434 Maps.xelements_ii
+R18613 Coq.Lists.List.In
+R18624 Maps.xelements
+R18637 Coq.NArith.BinPos.xH
+R18616 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R18567 Coq.Lists.List.In
+R18581 Maps.xelements
+R18606 Coq.NArith.BinPos.xH
+R18592 Maps.Node
+R18570 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R18571 Coq.NArith.BinPos.xO
+R18543 Coq.NArith.BinPos.positive
+R18528 Coq.Init.Datatypes.option
+R18519 Maps.t
+R18519 Maps.t
+R18696 Coq.Lists.List.in_app_or
+R18696 Coq.Lists.List.in_app_or
+R18696 Coq.Lists.List.in_app_or
+R18730 Maps.xelements_oo
+R18730 Maps.xelements_oo
+R18768 Coq.Lists.List.in_inv
+R18768 Coq.Lists.List.in_inv
+R18818 Coq.Lists.List.In
+R18832 Maps.xelements
+R18821 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R18822 Coq.NArith.BinPos.xO
+R18862 Maps.xelements_oi
+R18818 Coq.Lists.List.In
+R18832 Maps.xelements
+R18821 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R18822 Coq.NArith.BinPos.xO
+R18862 Maps.xelements_oi
+R18896 Maps.xelements_oo
+R18896 Maps.xelements_oo
+R18932 Coq.Lists.List.In
+R18946 Maps.xelements
+R18935 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R18936 Coq.NArith.BinPos.xO
+R18976 Maps.xelements_oi
+R18932 Coq.Lists.List.In
+R18946 Maps.xelements
+R18935 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R18936 Coq.NArith.BinPos.xO
+R18976 Maps.xelements_oi
+R19091 Coq.Init.Logic "~ x" type_scope
+R19092 Coq.Lists.List.In
+R19104 Maps.xelements
+R19117 Coq.NArith.BinPos.xI
+R19095 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R19096 Coq.NArith.BinPos.xH
+R19067 Coq.NArith.BinPos.positive
+R19057 Maps.t
+R19228 Coq.Lists.List.in_app_or
+R19228 Coq.Lists.List.in_app_or
+R19228 Coq.Lists.List.in_app_or
+R19307 Coq.Lists.List.in_inv
+R19307 Coq.Lists.List.in_inv
+R19559 Coq.Init.Logic "~ x" type_scope
+R19560 Coq.Lists.List.In
+R19572 Maps.xelements
+R19585 Coq.NArith.BinPos.xO
+R19563 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R19564 Coq.NArith.BinPos.xH
+R19535 Coq.NArith.BinPos.positive
+R19525 Maps.t
+R19696 Coq.Lists.List.in_app_or
+R19696 Coq.Lists.List.in_app_or
+R19696 Coq.Lists.List.in_app_or
+R19775 Coq.Lists.List.in_inv
+R19775 Coq.Lists.List.in_inv
+R20019 Coq.Init.Logic "x = y" type_scope
+R20011 Maps.get
+R20021 Maps.xget
+R20028 Coq.NArith.BinPos.xH
+R20000 Coq.NArith.BinPos.positive
+R19991 Maps.t
+R20218 Coq.Init.Logic "x = y" type_scope
+R20207 Maps.xget
+R20220 Coq.Init.Datatypes.Some
+R20178 Coq.Lists.List.In
+R20189 Maps.xelements
+R20181 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R20159 Maps.t
+R20145 Coq.NArith.BinPos.positive
+R20145 Coq.NArith.BinPos.positive
+R20316 Maps.xelements_ii
+R20316 Maps.xelements_ii
+R20351 Coq.Lists.List.In
+R20365 Maps.xelements
+R20378 Coq.NArith.BinPos.xO
+R20354 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R20355 Coq.NArith.BinPos.xI
+R20399 Maps.xelements_io
+R20351 Coq.Lists.List.In
+R20365 Maps.xelements
+R20378 Coq.NArith.BinPos.xO
+R20354 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R20355 Coq.NArith.BinPos.xI
+R20399 Maps.xelements_io
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R20475 Maps.get_xget_h
+R20475 Maps.get_xget_h
+R20505 Maps.xelements_ih
+R20505 Maps.xelements_ih
+R20547 Coq.Lists.List.In
+R20561 Maps.xelements
+R20574 Coq.NArith.BinPos.xI
+R20550 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R20551 Coq.NArith.BinPos.xO
+R20595 Maps.xelements_oi
+R20547 Coq.Lists.List.In
+R20561 Maps.xelements
+R20574 Coq.NArith.BinPos.xI
+R20550 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R20551 Coq.NArith.BinPos.xO
+R20595 Maps.xelements_oi
+R20633 Maps.xelements_oo
+R20633 Maps.xelements_oo
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R20715 Maps.get_xget_h
+R20715 Maps.get_xget_h
+R20745 Maps.xelements_oh
+R20745 Maps.xelements_oh
+R20787 Coq.Lists.List.In
+R20799 Maps.xelements
+R20812 Coq.NArith.BinPos.xI
+R20790 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R20791 Coq.NArith.BinPos.xH
+R20833 Maps.xelements_hi
+R20787 Coq.Lists.List.In
+R20799 Maps.xelements
+R20812 Coq.NArith.BinPos.xI
+R20790 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R20791 Coq.NArith.BinPos.xH
+R20833 Maps.xelements_hi
+R20862 Coq.Lists.List.In
+R20874 Maps.xelements
+R20887 Coq.NArith.BinPos.xO
+R20865 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R20866 Coq.NArith.BinPos.xH
+R20908 Maps.xelements_ho
+R20862 Coq.Lists.List.In
+R20874 Maps.xelements
+R20887 Coq.NArith.BinPos.xO
+R20865 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R20866 Coq.NArith.BinPos.xH
+R20908 Maps.xelements_ho
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R21010 Coq.Lists.List.in_app_or
+R21010 Coq.Lists.List.in_app_or
+R21010 Coq.Lists.List.in_app_or
+R21047 Coq.Lists.List.In
+R21059 Maps.xelements
+R21073 Coq.NArith.BinPos.xO
+R21076 Coq.NArith.BinPos.xH
+R21050 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R21051 Coq.NArith.BinPos.xH
+R21095 Maps.xelements_ho
+R21047 Coq.Lists.List.In
+R21059 Maps.xelements
+R21073 Coq.NArith.BinPos.xO
+R21076 Coq.NArith.BinPos.xH
+R21050 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R21051 Coq.NArith.BinPos.xH
+R21095 Maps.xelements_ho
+R21128 Coq.Lists.List.in_inv
+R21128 Coq.Lists.List.in_inv
+R21180 Coq.Lists.List.In
+R21192 Maps.xelements
+R21206 Coq.NArith.BinPos.xI
+R21209 Coq.NArith.BinPos.xH
+R21183 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R21184 Coq.NArith.BinPos.xH
+R21228 Maps.xelements_hi
+R21180 Coq.Lists.List.In
+R21192 Maps.xelements
+R21206 Coq.NArith.BinPos.xI
+R21209 Coq.NArith.BinPos.xH
+R21183 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R21184 Coq.NArith.BinPos.xH
+R21228 Maps.xelements_hi
+R21259 Coq.Lists.List.In
+R21271 Maps.xelements
+R21285 Coq.NArith.BinPos.xO
+R21288 Coq.NArith.BinPos.xH
+R21262 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R21263 Coq.NArith.BinPos.xH
+R21307 Maps.xelements_ho
+R21259 Coq.Lists.List.In
+R21271 Maps.xelements
+R21285 Coq.NArith.BinPos.xO
+R21288 Coq.NArith.BinPos.xH
+R21262 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R21263 Coq.NArith.BinPos.xH
+R21307 Maps.xelements_ho
+R21338 Coq.Lists.List.In
+R21350 Maps.xelements
+R21364 Coq.NArith.BinPos.xI
+R21367 Coq.NArith.BinPos.xH
+R21341 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R21342 Coq.NArith.BinPos.xH
+R21386 Maps.xelements_hi
+R21338 Coq.Lists.List.In
+R21350 Maps.xelements
+R21364 Coq.NArith.BinPos.xI
+R21367 Coq.NArith.BinPos.xH
+R21341 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R21342 Coq.NArith.BinPos.xH
+R21386 Maps.xelements_hi
+R21528 Coq.Init.Logic "x = y" type_scope
+R21520 Maps.get
+R21530 Coq.Init.Datatypes.Some
+R21494 Coq.Lists.List.In
+R21505 Maps.elements
+R21497 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R21472 Coq.NArith.BinPos.positive
+R21463 Maps.t
+R21607 Maps.get_xget_h
+R21607 Maps.get_xget_h
+R21630 Maps.xelements_complete
+R21651 Coq.NArith.BinPos.xH
+R21630 Maps.xelements_complete
+R21651 Coq.NArith.BinPos.xH
+R21754 Coq.Lists.List.fold_left
+R21803 Maps.elements
+R21794 Coq.Init.Datatypes.snd
+R21786 Coq.Init.Datatypes.fst
+R21734 Maps.t
+R21709 Coq.NArith.BinPos.positive
+R21924 Coq.Init.Logic "x = y" type_scope
+R21913 Maps.fold
+R21930 Coq.Lists.List.fold_left
+R21979 Maps.elements
+R21970 Coq.Init.Datatypes.snd
+R21962 Coq.Init.Datatypes.fst
+R21903 Maps.t
+R21872 Coq.NArith.BinPos.positive
+R22094 Coq.NArith.BinPos.positive
+R22127 Coqlib.peq
+R22170 Coq.Init.Datatypes "x * y" type_scope
+R22172 Maps.t
+R22233 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R22237 Maps.empty
+R22319 Maps.get
+R22332 Coq.Init.Datatypes.snd
+R22350 Coq.Init.Datatypes.Some
+R22368 Coq.Init.Datatypes.None
+R22376 Coq.Init.Datatypes.fst
+R22301 Maps.t
+R22286 Coq.NArith.BinPos.positive
+R22459 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R22460 Coq.Init.Datatypes.fst
+R22467 Maps.set
+R22482 Coq.Init.Datatypes.snd
+R22447 Maps.t
+R22424 Coq.NArith.BinPos.positive
+R22563 Coq.Init.Logic "x = y" type_scope
+R22548 Maps.get
+R22555 Maps.init
+R22530 Coq.NArith.BinPos.positive
+R22629 Maps.gempty
+R22629 Maps.gempty
+R22741 Coq.Init.Logic "x = y" type_scope
+R22723 Maps.get
+R22730 Maps.set
+R22717 Maps.t
+R22696 Coq.NArith.BinPos.positive
+R22806 Maps.gss
+R22806 Maps.gss
+R22931 Coq.Init.Logic "x = y" type_scope
+R22913 Maps.get
+R22920 Maps.set
+R22933 Maps.get
+R22905 Coq.Init.Logic "x <> y" type_scope
+R22893 Maps.t
+R22872 Coq.NArith.BinPos.positive
+R22872 Coq.NArith.BinPos.positive
+R23002 Maps.gso
+R23002 Maps.gso
+R23120 Coq.Init.Logic "x = y" type_scope
+R23102 Maps.get
+R23109 Maps.set
+R23125 Coqlib.peq
+R23145 Maps.get
+R23092 Maps.t
+R23071 Coq.NArith.BinPos.positive
+R23071 Coq.NArith.BinPos.positive
+R23185 Coqlib.peq
+R23185 Coqlib.peq
+R23217 Maps.gss
+R23217 Maps.gss
+R23239 Maps.gso
+R23239 Maps.gso
+R23353 Coq.Init.Logic "x = y" type_scope
+R23327 Maps.get
+R23334 Maps.set
+R23341 Maps.get
+R23355 Maps.get
+R23317 Maps.t
+R23303 Coq.NArith.BinPos.positive
+R23303 Coq.NArith.BinPos.positive
+R23395 Coqlib.peq
+R23395 Coqlib.peq
+R23429 Maps.gss
+R23429 Maps.gss
+R23453 Maps.gso
+R23453 Maps.gso
+R23526 Maps.t
+R23537 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R23541 Coq.Init.Datatypes.fst
+R23549 Maps.map
+R23573 Coq.Init.Datatypes.snd
+R23519 Maps.t
+R23677 Coq.Init.Logic "x = y" type_scope
+R23661 Maps.get
+R23668 Maps.map
+R23681 Maps.get
+R23651 Maps.t
+R23637 Coq.NArith.BinPos.positive
+R23751 Maps.gmap
+R23751 Maps.gmap
+R23796 Maps.get
+R23809 Coq.Init.Datatypes.snd
+R23796 Maps.get
+R23809 Coq.Init.Datatypes.snd
+R23911 Coq.NArith.BinPos.positive
+R23906 Maps.t
+R23985 Coq.Init.Logic "x = y" type_scope
+R23970 Coq.Init.Logic "x = y" type_scope
+R23962 Maps.index
+R23972 Maps.index
+R23958 Maps.t
+R23958 Maps.t
+R24022 Coq.Init.Specif "{ A } + { B }" type_scope
+R24025 Coq.Init.Logic "x = y" type_scope
+R24035 Coq.Init.Logic "x <> y" type_scope
+R24018 Maps.t
+R24018 Maps.t
+R24177 Maps.t
+R24222 Maps.init
+R24282 Maps.get
+R24274 Maps.t
+R24360 Maps.set
+R24352 Maps.t
+R24437 Maps.t
+R24444 Maps.map
+R24430 Maps.t
+R24523 Coq.Init.Logic "x = y" type_scope
+R24508 Maps.get
+R24515 Maps.init
+R24573 Maps.gi
+R24573 Maps.gi
+R24668 Coq.Init.Logic "x = y" type_scope
+R24650 Maps.get
+R24657 Maps.set
+R24644 Maps.t
+R24717 Maps.gss
+R24717 Maps.gss
+R24828 Coq.Init.Logic "x = y" type_scope
+R24810 Maps.get
+R24817 Maps.set
+R24830 Maps.get
+R24802 Coq.Init.Logic "x <> y" type_scope
+R24790 Maps.t
+R24883 Maps.gso
+R24883 Maps.gso
+R25039 Coq.Init.Logic "x = y" type_scope
+R25021 Maps.get
+R25028 Maps.set
+R25065 Maps.get
+R25011 Maps.t
+R25125 Maps.gsspec
+R25125 Maps.gsspec
+R25187 Coqlib.peq_true
+R25187 Coqlib.peq_true
+R25222 Coqlib.peq_false
+R25222 Coqlib.peq_false
+R25391 Coq.Init.Logic "x = y" type_scope
+R25375 Maps.get
+R25382 Maps.map
+R25395 Maps.get
+R25365 Maps.t
+R25449 Maps.gmap
+R25449 Maps.gmap
+R25515 Coq.ZArith.BinInt.Z
+R25545 Coq.NArith.BinPos.positive
+R25580 Coq.ZArith.BinInt.Z0
+R25586 Coq.NArith.BinPos.xH
+R25595 Coq.ZArith.BinInt.Zpos
+R25605 Coq.NArith.BinPos.xO
+R25616 Coq.ZArith.BinInt.Zneg
+R25626 Coq.NArith.BinPos.xI
+R25541 Coq.ZArith.BinInt.Z
+R25699 Coq.Init.Logic "x = y" type_scope
+R25684 Coq.Init.Logic "x = y" type_scope
+R25676 Maps.index
+R25686 Maps.index
+R25672 Coq.ZArith.BinInt.Z
+R25672 Coq.ZArith.BinInt.Z
+R25860 Coqlib.zeq
+R25947 Coq.NArith.BinNat.N
+R25977 Coq.NArith.BinPos.positive
+R26012 Coq.NArith.BinNat.N0
+R26018 Coq.NArith.BinPos.xH
+R26027 Coq.NArith.BinNat.Npos
+R26037 Coq.NArith.BinPos.xO
+R25973 Coq.NArith.BinNat.N
+R26110 Coq.Init.Logic "x = y" type_scope
+R26095 Coq.Init.Logic "x = y" type_scope
+R26087 Maps.index
+R26097 Maps.index
+R26083 Coq.NArith.BinNat.N
+R26083 Coq.NArith.BinNat.N
+R26265 Coq.Init.Specif "{ A } + { B }" type_scope
+R26268 Coq.Init.Logic "x = y" type_scope
+R26278 Coq.Init.Logic "x <> y" type_scope
+R26261 Coq.NArith.BinNat.N
+R26261 Coq.NArith.BinNat.N
+R26321 Coqlib.peq
+R26321 Coqlib.peq
+R26458 Coq.Init.Specif "{ A } + { B }" type_scope
+R26461 Coq.Init.Logic "x = y" type_scope
+R26471 Coq.Init.Logic "x <> y" type_scope
+R26454 Maps.t
+R26454 Maps.t
+R26723 Maps.t
+R26782 Maps.t
+R26897 Coq.Init.Logic "x = y" type_scope
+R26888 Maps.init
+R26875 Maps.elt
+R27016 Coq.Init.Logic "x = y" type_scope
+R27003 Maps.set
+R26996 Maps.t
+R26980 Maps.elt
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R27198 Coq.Init.Logic "x = y" type_scope
+R27185 Maps.set
+R27176 Coq.Init.Logic "x <> y" type_scope
+R27164 Maps.t
+R27148 Maps.elt
+R27148 Maps.elt
+R27384 Coq.Init.Logic "x = y" type_scope
+R27366 Maps.get
+R27373 Maps.set
+R27389 Maps.elt_eq
+R27412 Maps.get
+R27356 Maps.t
+R27340 Maps.elt
+R27340 Maps.elt
+R27571 Coq.Init.Logic "x = y" type_scope
+R27545 Maps.get
+R27552 Maps.set
+R27559 Maps.get
+R27573 Maps.get
+R27539 Maps.t
+R27530 Maps.elt
+R27530 Maps.elt
+R27724 Maps.t
+R27847 Coq.Init.Logic "x = y" type_scope
+R27831 Maps.get
+R27838 Maps.map
+R27851 Maps.get
+R27821 Maps.t
+R27812 Maps.elt
+R28007 Coq.Init.Logic "x = y" type_scope
+R27993 Coq.Init.Logic "x = y" type_scope
+R27962 Maps.t
+R27962 Maps.t
+R28050 Coqlib.extensionality
+R28050 Coqlib.extensionality
+R28141 Maps.get
+R28192 Maps.get
+FLattice
+R122 Coq.Init.Specif "{ A } + { B }" type_scope
+R124 Coq.Init.Logic "x = y" type_scope
+R132 Coq.Init.Logic "x <> y" type_scope
+R118 Lattice.t
+R118 Lattice.t
+R158 Lattice.t
+R153 Lattice.t
+R201 Lattice.ge
+R266 Lattice.ge
+R256 Lattice.ge
+R246 Lattice.ge
+R290 Lattice.t
+R324 Lattice.ge
+R329 Lattice.bot
+R360 Lattice.t
+R355 Lattice.t
+R350 Lattice.t
+R408 Coq.Init.Logic "x = y" type_scope
+R400 Lattice.lub
+R410 Lattice.lub
+R457 Lattice.ge
+R461 Lattice.lub
+R578 Coq.Init.Specif "{ A } + { B }" type_scope
+R580 Coq.Init.Logic "x = y" type_scope
+R588 Coq.Init.Logic "x <> y" type_scope
+R574 Lattice.t
+R574 Lattice.t
+R614 Lattice.t
+R609 Lattice.t
+R657 Lattice.ge
+R722 Lattice.ge
+R712 Lattice.ge
+R702 Lattice.ge
+R746 Lattice.t
+R780 Lattice.ge
+R785 Lattice.bot
+R806 Lattice.t
+R840 Lattice.ge
+R843 Lattice.top
+R876 Lattice.t
+R871 Lattice.t
+R866 Lattice.t
+R924 Coq.Init.Logic "x = y" type_scope
+R916 Lattice.lub
+R926 Lattice.lub
+R973 Lattice.ge
+R977 Lattice.lub
+R1119 Maps.t
+R1153 Maps.t
+R1194 Lattice.t_
+R1226 Coq.Init.Specif "{ A } + { B }" type_scope
+R1228 Coq.Init.Logic "x = y" type_scope
+R1236 Coq.Init.Logic "x <> y" type_scope
+R1222 Lattice.t
+R1222 Lattice.t
+R1286 Coq.Init.Specif "{ A } + { B }" type_scope
+R1289 Coq.Init.Logic "x = y" type_scope
+R1299 Coq.Init.Logic "x <> y" type_scope
+R1273 Maps.t
+R1273 Maps.t
+R1286 Coq.Init.Specif "{ A } + { B }" type_scope
+R1289 Coq.Init.Logic "x = y" type_scope
+R1299 Coq.Init.Logic "x <> y" type_scope
+R1273 Maps.t
+R1273 Maps.t
+R1315 Maps.eq
+R1315 Maps.eq
+R1426 Lattice.Bot_except
+R1455 Maps "a ! b"
+R1463 Coq.Init.Datatypes.None
+R1479 Coq.Init.Datatypes.Some
+R1499 Lattice.Top_except
+R1528 Maps "a ! b"
+R1536 Coq.Init.Datatypes.None
+R1552 Coq.Init.Datatypes.Some
+R1395 Lattice.t
+R1381 Coq.NArith.BinPos.positive
+R1623 Lattice.t
+R1647 Lattice.Bot_except
+R1669 Lattice.Bot_except
+R1681 Maps.set
+R1702 Lattice.Top_except
+R1724 Lattice.Top_except
+R1736 Maps.set
+R1618 Lattice.t
+R1595 Coq.NArith.BinPos.positive
+R1808 Coq.Init.Logic "x = y" type_scope
+R1790 Lattice.get
+R1797 Lattice.set
+R1857 Maps.gss
+R1857 Maps.gss
+R1857 Maps.gss
+R1939 Coq.Init.Logic "x = y" type_scope
+R1921 Lattice.get
+R1928 Lattice.set
+R1941 Lattice.get
+R1913 Coq.Init.Logic "x <> y" type_scope
+R1994 Maps.gso
+R1994 Maps.gso
+R1994 Maps.gso
+R2078 Lattice.get
+R2068 Lattice.get
+R2037 Lattice.t
+R2037 Lattice.t
+R2114 Lattice.ge
+R2223 Lattice.ge
+R2213 Lattice.ge
+R2203 Lattice.ge
+R2282 Lattice.get
+R2282 Lattice.get
+R2322 Lattice.Bot_except
+R2334 Maps.empty
+R2388 Coq.Init.Logic "x = y" type_scope
+R2378 Lattice.get
+R2384 Lattice.bot
+R2441 Maps.gempty
+R2441 Maps.gempty
+R2491 Lattice.ge
+R2496 Lattice.bot
+R2537 Lattice.get_bot
+R2537 Lattice.get_bot
+R2586 Lattice.Top_except
+R2598 Maps.empty
+R2652 Coq.Init.Logic "x = y" type_scope
+R2642 Lattice.get
+R2648 Lattice.top
+R2705 Maps.gempty
+R2705 Maps.gempty
+R2755 Lattice.ge
+R2758 Lattice.top
+R2801 Lattice.get_top
+R2801 Lattice.get_top
+R2858 Lattice.t
+R2885 Lattice.Bot_except
+R2899 Lattice.Bot_except
+R2921 Lattice.Bot_except
+R2941 Maps.combine
+R3025 Coq.Init.Datatypes.Some
+R3033 Coq.Init.Datatypes.Some
+R3043 Coq.Init.Datatypes.Some
+R3076 Coq.Init.Datatypes.None
+R3108 Coq.Init.Datatypes.None
+R3157 Lattice.Bot_except
+R3171 Lattice.Top_except
+R3193 Lattice.Top_except
+R3213 Maps.combine
+R3296 Coq.Init.Datatypes.Some
+R3304 Coq.Init.Datatypes.Some
+R3314 Coq.Init.Datatypes.Some
+R3347 Coq.Init.Datatypes.None
+R3379 Coq.Init.Datatypes.None
+R3387 Coq.Init.Datatypes.None
+R3441 Lattice.Top_except
+R3455 Lattice.Bot_except
+R3477 Lattice.Top_except
+R3497 Maps.combine
+R3580 Coq.Init.Datatypes.Some
+R3588 Coq.Init.Datatypes.Some
+R3598 Coq.Init.Datatypes.Some
+R3631 Coq.Init.Datatypes.None
+R3642 Coq.Init.Datatypes.None
+R3666 Coq.Init.Datatypes.None
+R3725 Lattice.Top_except
+R3739 Lattice.Top_except
+R3761 Lattice.Top_except
+R3781 Maps.combine
+R3865 Coq.Init.Datatypes.Some
+R3873 Coq.Init.Datatypes.Some
+R3883 Coq.Init.Datatypes.Some
+R3924 Coq.Init.Datatypes.None
+R2853 Lattice.t
+R2853 Lattice.t
+R4012 Coq.Init.Logic "x = y" type_scope
+R4004 Lattice.lub
+R4014 Lattice.lub
+R4084 Maps.combine_commut
+R4084 Maps.combine_commut
+R4084 Maps.combine_commut
+R4084 Maps.combine_commut
+R4084 Maps.combine_commut
+R4214 Lattice.ge
+R4218 Lattice.lub
+R4303 Maps.gcombine
+R4303 Maps.gcombine
+R4333 Maps "a ! b"
+R4333 Maps "a ! b"
+R4348 Maps "a ! b"
+R4348 Maps "a ! b"
+R4403 Maps "a ! b"
+R4403 Maps "a ! b"
+R4459 Maps.gcombine
+R4459 Maps.gcombine
+R4489 Maps "a ! b"
+R4489 Maps "a ! b"
+R4504 Maps "a ! b"
+R4504 Maps "a ! b"
+R4558 Maps "a ! b"
+R4558 Maps "a ! b"
+R4613 Maps.gcombine
+R4613 Maps.gcombine
+R4643 Maps "a ! b"
+R4643 Maps "a ! b"
+R4658 Maps "a ! b"
+R4658 Maps "a ! b"
+R4736 Maps.gcombine
+R4736 Maps.gcombine
+R4766 Maps "a ! b"
+R4766 Maps "a ! b"
+R4781 Maps "a ! b"
+R4781 Maps "a ! b"
+R5013 Lattice.t_
+R5045 Coq.Init.Specif "{ A } + { B }" type_scope
+R5047 Coq.Init.Logic "x = y" type_scope
+R5055 Coq.Init.Logic "x <> y" type_scope
+R5041 Lattice.t
+R5041 Lattice.t
+R5160 Lattice.Top
+R5170 Coq.Init.Logic.True
+R5182 Lattice.Bot
+R5189 Coq.Init.Logic.True
+R5198 Lattice.Inj
+R5205 Lattice.Inj
+R5216 Coq.Init.Logic "x = y" type_scope
+R5232 Coq.Init.Logic.False
+R5125 Lattice.t
+R5125 Lattice.t
+R5271 Lattice.ge
+R5373 Lattice.ge
+R5363 Lattice.ge
+R5353 Lattice.ge
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R5499 Lattice.t
+R5504 Lattice.Bot
+R5534 Lattice.ge
+R5539 Lattice.bot
+R5600 Lattice.t
+R5605 Lattice.Top
+R5635 Lattice.ge
+R5638 Lattice.top
+R5711 Lattice.t
+R5738 Lattice.Bot
+R5757 Lattice.Bot
+R5770 Lattice.Top
+R5780 Lattice.Top
+R5791 Lattice.Top
+R5798 Lattice.Top
+R5806 Lattice.Inj
+R5813 Lattice.Inj
+R5850 Lattice.Top
+R5839 Lattice.Inj
+R5706 Lattice.t
+R5706 Lattice.t
+R5900 Coq.Init.Logic "x = y" type_scope
+R5892 Lattice.lub
+R5902 Lattice.lub
+R6054 Lattice.ge
+R6058 Lattice.lub
+R6228 Coq.Init.Datatypes.bool
+R6262 Coq.Init.Specif "{ A } + { B }" type_scope
+R6264 Coq.Init.Logic "x = y" type_scope
+R6272 Coq.Init.Logic "x <> y" type_scope
+R6258 Lattice.t
+R6258 Lattice.t
+R6347 Coq.Init.Logic "A \/ B" type_scope
+R6343 Coq.Init.Logic "x = y" type_scope
+R6352 Coq.Init.Logic "x = y" type_scope
+R6354 Coq.Init.Datatypes.true
+R6328 Lattice.t
+R6328 Lattice.t
+R6386 Lattice.ge
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R6475 Lattice.ge
+R6465 Lattice.ge
+R6455 Lattice.ge
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R6547 Coq.Init.Datatypes.false
+R6579 Lattice.ge
+R6584 Lattice.bot
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R6648 Coq.Init.Datatypes.true
+R6679 Lattice.ge
+R6682 Lattice.top
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R6754 Coq.Bool.Bool "x || y" bool_scope
+R6746 Lattice.t
+R6746 Lattice.t
+R6799 Coq.Init.Logic "x = y" type_scope
+R6791 Lattice.lub
+R6801 Lattice.lub
+R6843 Coq.Bool.Bool.orb_comm
+R6843 Coq.Bool.Bool.orb_comm
+R6890 Lattice.ge
+R6894 Lattice.lub
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+FSets
+R212 Coq.Init.Datatypes.unit
+R248 Coq.Init.Specif "{ A } + { B }" type_scope
+R250 Coq.Init.Logic "x = y" type_scope
+R258 Coq.Init.Logic "x <> y" type_scope
+R244 Sets.t
+R244 Sets.t
+R394 Coq.Init.Datatypes.unit
+R462 Coq.Init.Datatypes.None
+R470 Coq.Init.Datatypes.false
+R478 Coq.Init.Datatypes.Some
+R488 Coq.Init.Datatypes.true
+R431 Sets.t
+R422 Sets.elt
+R543 Coq.Init.Datatypes.tt
+R529 Sets.t
+R520 Sets.elt
+R583 Sets.t
+R574 Sets.elt
+R707 Coq.Init.Datatypes.None
+R713 Coq.Init.Datatypes.None
+R721 Coq.Init.Datatypes.None
+R744 Coq.Init.Datatypes.Some
+R749 Coq.Init.Datatypes.tt
+R631 Sets.t
+R631 Sets.t
+R824 Coq.Init.Logic "x = y" type_scope
+R812 Sets.mem
+R818 Sets.empty
+R826 Coq.Init.Datatypes.false
+R958 Coq.Init.Logic "x = y" type_scope
+R942 Sets.mem
+R949 Sets.add
+R960 Coq.Init.Datatypes.true
+R1103 Coq.Init.Logic "x = y" type_scope
+R1086 Sets.mem
+R1094 Sets.add
+R1105 Sets.mem
+R1077 Coq.Init.Logic "x <> y" type_scope
+R1242 Coq.Init.Logic "x = y" type_scope
+R1223 Sets.mem
+R1230 Sets.remove
+R1244 Coq.Init.Datatypes.false
+R1397 Coq.Init.Logic "x = y" type_scope
+R1377 Sets.mem
+R1385 Sets.remove
+R1399 Sets.mem
+R1368 Coq.Init.Logic "x <> y" type_scope
+R1538 Coq.Init.Logic "x = y" type_scope
+R1518 Sets.mem
+R1525 Sets.union
+R1550 Coq.Bool.Bool "x || y" bool_scope
+R1541 Sets.mem
+R1553 Sets.mem
+R1727 Coq.Lists.List.map
+R1738 Coq.Init.Datatypes.fst
+R1746 Coq.Init.Datatypes.unit
+R1742 Sets.elt
+R1717 Sets.t
+R1829 Coq.Lists.List.In
+R1835 Sets.elements
+R1819 Coq.Init.Logic "x = y" type_scope
+R1811 Sets.mem
+R1821 Coq.Init.Datatypes.true
+R1946 Coq.Init.Datatypes.fst
+R1950 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R1946 Coq.Init.Datatypes.fst
+R1950 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R1965 Coq.Lists.List.in_map
+R1965 Coq.Lists.List.in_map
+R2120 Coq.Init.Logic "x = y" type_scope
+R2112 Sets.mem
+R2122 Coq.Init.Datatypes.true
+R2091 Coq.Lists.List.In
+R2097 Sets.elements
+R2188 Coqlib.list_in_map_inv
+R2188 Coqlib.list_in_map_inv
+R2433 Coq.Init.Datatypes.unit
+R2424 Sets.elt
+R2384 Sets.t
+R2370 Sets.elt
+R2543 Coq.Init.Logic "x = y" type_scope
+R2532 Sets.fold
+R2545 Coq.Lists.List.fold_left
+R2563 Sets.elements
+R2517 Sets.t
+R2503 Sets.elt
+R2785 Sets.fold
+R2818 Coq.Init.Datatypes.true
+R2802 Coq.Bool.Bool.andb
+R2775 Sets.t
+R2765 Coq.Init.Datatypes.bool
+R2758 Sets.elt
+R2913 Coq.Init.Logic "x = y" type_scope
+R2915 Coq.Init.Datatypes.true
+R2899 Coq.Init.Logic "x = y" type_scope
+R2891 Sets.mem
+R2901 Coq.Init.Datatypes.true
+R2881 Coq.Init.Logic "x = y" type_scope
+R2869 Sets.for_all
+R2883 Coq.Init.Datatypes.true
+R2974 Sets.fold_spec
+R2974 Sets.fold_spec
+R3089 Coq.Init.Logic "x = y" type_scope
+R3091 Coq.Init.Datatypes.true
+R3070 Coq.Init.Logic "x = y" type_scope
+R3016 Coq.Lists.List.fold_left
+R3057 Coq.Bool.Bool "x && y" bool_scope
+R3047 Sets.elt
+R3036 Coq.Init.Datatypes.bool
+R3072 Coq.Init.Datatypes.true
+R3089 Coq.Init.Logic "x = y" type_scope
+R3091 Coq.Init.Datatypes.true
+R3070 Coq.Init.Logic "x = y" type_scope
+R3016 Coq.Lists.List.fold_left
+R3057 Coq.Bool.Bool "x && y" bool_scope
+R3047 Sets.elt
+R3036 Coq.Init.Datatypes.bool
+R3072 Coq.Init.Datatypes.true
+R3183 Coq.Bool.Bool.andb_prop
+R3183 Coq.Bool.Bool.andb_prop
+R3330 Coq.Init.Logic "x = y" type_scope
+R3332 Coq.Init.Datatypes.true
+R3316 Coq.Lists.List.In
+R3300 Coq.Init.Logic "x = y" type_scope
+R3244 Coq.Lists.List.fold_left
+R3295 Coq.Init.Datatypes.true
+R3285 Coq.Bool.Bool "x && y" bool_scope
+R3275 Sets.elt
+R3264 Coq.Init.Datatypes.bool
+R3302 Coq.Init.Datatypes.true
+R3330 Coq.Init.Logic "x = y" type_scope
+R3332 Coq.Init.Datatypes.true
+R3316 Coq.Lists.List.In
+R3300 Coq.Init.Logic "x = y" type_scope
+R3244 Coq.Lists.List.fold_left
+R3295 Coq.Init.Datatypes.true
+R3285 Coq.Bool.Bool "x && y" bool_scope
+R3275 Sets.elt
+R3264 Coq.Init.Datatypes.bool
+R3302 Coq.Init.Datatypes.true
+R3544 Sets.elements_correct
+R3544 Sets.elements_correct
+R3655 Coq.Init.Logic "x = y" type_scope
+R3646 Sets.mem
+R3657 Coq.Init.Datatypes.true
+R3636 Coq.Init.Logic "x = y" type_scope
+R3627 Sets.mem
+R3638 Coq.Init.Datatypes.true
+R3600 Sets.t
+R3600 Sets.t
+R3691 Sets.ge
+R3797 Sets.ge
+R3787 Sets.ge
+R3777 Sets.ge
+R3871 Sets.empty
+R3898 Sets.union
+R3936 Sets.ge
+R3941 Sets.bot
+R3932 Sets.t
+R3986 Sets.mem_empty
+R3986 Sets.mem_empty
+R4069 Coq.Init.Logic "x = y" type_scope
+R4061 Sets.lub
+R4071 Sets.lub
+R4057 Sets.t
+R4057 Sets.t
+R4231 Sets.ge
+R4235 Sets.lub
+R4227 Sets.t
+R4227 Sets.t
+R4297 Sets.mem_union
+R4297 Sets.mem_union
+R4379 Sets.ge
+R4383 Sets.lub
+R4375 Sets.t
+R4375 Sets.t
+R4424 Sets.lub_commut
+R4424 Sets.lub_commut
+R4442 Sets.ge_lub_left
+R4442 Sets.ge_lub_left
+Funion_find
+R82 Coq.Init.Logic.refl_equal
+R197 Coq.Init.Logic "'exists' x : t , p" type_scope
+R288 Coq.Init.Logic "A /\ B" type_scope
+R362 Coq.Init.Logic "A \/ B" type_scope
+R626 Coq.Init.Specif "{ A } + { B }" type_scope
+R629 Coq.Init.Logic "x = y" type_scope
+R639 Coq.Init.Logic "x <> y" type_scope
+R622 union_find.T
+R622 union_find.T
+R775 union_find.T
+R806 Coq.Init.Datatypes.option
+R813 union_find.elt
+R801 union_find.T
+R794 union_find.elt
+R853 union_find.T
+R848 union_find.T
+R841 union_find.elt
+R834 union_find.elt
+R910 Coq.Init.Logic "x = y" type_scope
+R898 union_find.get
+R904 union_find.empty
+R912 Coq.Init.Datatypes.None
+R892 union_find.elt
+R989 Coq.Init.Logic "x = y" type_scope
+R971 union_find.get
+R978 union_find.add
+R991 Coq.Init.Datatypes.Some
+R967 union_find.T
+R958 union_find.elt
+R958 union_find.elt
+R1082 Coq.Init.Logic "x = y" type_scope
+R1064 union_find.get
+R1071 union_find.add
+R1084 union_find.get
+R1056 Coq.Init.Logic "x <> y" type_scope
+R1050 union_find.T
+R1041 union_find.elt
+R1041 union_find.elt
+R1041 union_find.elt
+R1226 union_find.T
+R1258 union_find.elt
+R1251 union_find.elt
+R1246 union_find.T
+R1303 union_find.T
+R1296 union_find.elt
+R1289 union_find.elt
+R1284 union_find.T
+R1367 Coq.Init.Logic "x = y" type_scope
+R1358 union_find.repr
+R1369 union_find.repr
+R1343 union_find.elt
+R1343 union_find.elt
+R1334 union_find.T
+R1482 union_find.sameclass
+R1476 union_find.elt
+R1469 union_find.T
+R1576 union_find.sameclass
+R1557 union_find.sameclass
+R1551 union_find.elt
+R1551 union_find.elt
+R1542 union_find.T
+R1697 union_find.sameclass
+R1678 union_find.sameclass
+R1659 union_find.sameclass
+R1649 union_find.elt
+R1649 union_find.elt
+R1649 union_find.elt
+R1638 union_find.T
+R1852 Coq.Init.Logic "x = y" type_scope
+R1834 union_find.repr
+R1842 union_find.repr
+R1854 union_find.repr
+R1828 union_find.elt
+R1821 union_find.T
+R1921 union_find.sameclass
+R1936 union_find.repr
+R1915 union_find.elt
+R1908 union_find.T
+R2044 Coq.Init.Logic "x = y" type_scope
+R2031 union_find.repr
+R2036 union_find.empty
+R2025 union_find.elt
+R2127 Coq.Init.Logic "x = y" type_scope
+R2102 union_find.sameclass
+R2112 union_find.empty
+R2096 union_find.elt
+R2096 union_find.elt
+R2310 union_find.sameclass
+R2321 union_find.identify
+R2304 union_find.elt
+R2304 union_find.elt
+R2295 union_find.T
+R2434 union_find.sameclass
+R2445 union_find.identify
+R2415 union_find.sameclass
+R2405 union_find.elt
+R2405 union_find.elt
+R2405 union_find.elt
+R2405 union_find.elt
+R2392 union_find.T
+R3110 Coq.Init.Logic "x = y" type_scope
+R3112 Coq.Init.Datatypes.Some
+R3082 union_find.elt
+R3082 union_find.elt
+R3237 Coq.Init.Specif "A + { B }" type_scope
+R3215 Coq.Init.Specif "{ x : A | P }" type_scope
+R3227 Coq.Init.Logic "x = y" type_scope
+R3229 Coq.Init.Datatypes.Some
+R3219 union_find.elt
+R3242 Coq.Init.Logic "x = y" type_scope
+R3244 Coq.Init.Datatypes.None
+R3202 Coq.Init.Datatypes.option
+R3209 union_find.elt
+R3422 union_find.option_sum
+R3457 Coq.Init.Specif.inleft
+R3465 Coq.Init.Specif.exist
+R3494 Coq.Init.Specif.inright
+R3403 union_find.elt
+R3383 union_find.repr_order
+R3378 union_find.elt
+R3357 union_find.elt
+R3598 union_find.elt
+R3607 Coq.Init.Wf.Fix
+R3637 union_find.repr_rec
+R3631 union_find.elt
+R3623 union_find.elt
+R3591 union_find.elt
+R3558 Coq.Init.Wf.well_founded
+R3572 union_find.repr_order
+R3823 Coq.Init.Logic "x = y" type_scope
+R3808 union_find.repr_rec
+R3825 union_find.repr_rec
+R3794 Coq.Init.Logic "x = y" type_scope
+R3769 union_find.repr_order
+R3760 union_find.elt
+R3740 union_find.elt
+R3720 union_find.repr_order
+R3715 union_find.elt
+R3740 union_find.elt
+R3720 union_find.repr_order
+R3715 union_find.elt
+R3695 union_find.elt
+R3884 union_find.option_sum
+R3884 union_find.option_sum
+R4089 Coq.Init.Logic "x = y" type_scope
+R4073 union_find.repr_aux
+R4061 Coq.Init.Logic "x = y" type_scope
+R4063 Coq.Init.Datatypes.None
+R4043 union_find.elt
+R4010 Coq.Init.Wf.well_founded
+R4024 union_find.repr_order
+R4126 Coq.Init.Wf.Fix_eq
+R4171 union_find.repr_rec_ext
+R4158 union_find.repr_rec
+R4152 union_find.elt
+R4144 union_find.elt
+R4126 Coq.Init.Wf.Fix_eq
+R4171 union_find.repr_rec_ext
+R4158 union_find.repr_rec
+R4152 union_find.elt
+R4144 union_find.elt
+R4259 union_find.option_sum
+R4259 union_find.option_sum
+R4494 Coq.Init.Logic "x = y" type_scope
+R4478 union_find.repr_aux
+R4496 union_find.repr_aux
+R4463 Coq.Init.Logic "x = y" type_scope
+R4465 Coq.Init.Datatypes.Some
+R4445 union_find.elt
+R4445 union_find.elt
+R4409 Coq.Init.Wf.well_founded
+R4423 union_find.repr_order
+R4546 Coq.Init.Wf.Fix_eq
+R4591 union_find.repr_rec_ext
+R4578 union_find.repr_rec
+R4572 union_find.elt
+R4564 union_find.elt
+R4546 Coq.Init.Wf.Fix_eq
+R4591 union_find.repr_rec_ext
+R4578 union_find.repr_rec
+R4572 union_find.elt
+R4564 union_find.elt
+R4675 union_find.option_sum
+R4675 union_find.option_sum
+R4943 Coq.Init.Logic "x = y" type_scope
+R4924 union_find.repr_aux
+R4945 Coq.Init.Datatypes.None
+R4909 union_find.elt
+R4876 Coq.Init.Wf.well_founded
+R4890 union_find.repr_order
+R4977 Coq.Init.Wf.well_founded_ind
+R5040 Coq.Init.Logic "x = y" type_scope
+R5021 union_find.repr_aux
+R5042 Coq.Init.Datatypes.None
+R5006 union_find.elt
+R4977 Coq.Init.Wf.well_founded_ind
+R5040 Coq.Init.Logic "x = y" type_scope
+R5021 union_find.repr_aux
+R5042 Coq.Init.Datatypes.None
+R5006 union_find.elt
+R5074 Coq.Init.Wf.Fix_eq
+R5119 union_find.repr_rec_ext
+R5106 union_find.repr_rec
+R5100 union_find.elt
+R5092 union_find.elt
+R5074 Coq.Init.Wf.Fix_eq
+R5119 union_find.repr_rec_ext
+R5106 union_find.repr_rec
+R5100 union_find.elt
+R5092 union_find.elt
+R5206 union_find.option_sum
+R5206 union_find.option_sum
+R5427 Coq.Init.Wf.well_founded
+R5441 union_find.repr_order
+R5489 Coq.Init.Wf.Acc_intro
+R5489 Coq.Init.Wf.Acc_intro
+R5670 Coq.Init.Wf.well_founded
+R5684 union_find.repr_order
+R5713 union_find.elt
+R5741 Coq.Init.Logic "x <> y" type_scope
+R5777 Coq.Init.Logic "x = y" type_scope
+R5779 Coq.Init.Datatypes.None
+R5815 Coq.Init.Logic "x = y" type_scope
+R5817 Coq.Init.Datatypes.None
+R5923 Coq.Init.Logic "x = y" type_scope
+R5909 union_find.identify_base
+R5925 Coq.Init.Datatypes.None
+R6001 Coq.Init.Logic.sym_not_eq
+R6001 Coq.Init.Logic.sym_not_eq
+R6082 Coq.Init.Logic "x = y" type_scope
+R6068 union_find.identify_base
+R6084 Coq.Init.Datatypes.Some
+R6262 Coq.Init.Logic "A \/ B" type_scope
+R6245 union_find.repr_order
+R6272 Coq.Init.Logic "A /\ B" type_scope
+R6268 Coq.Init.Logic "x = y" type_scope
+R6277 Coq.Init.Logic "x = y" type_scope
+R6211 union_find.repr_order
+R6222 union_find.identify_base
+R6203 union_find.elt
+R6203 union_find.elt
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R6522 Coq.Init.Wf.well_founded
+R6536 union_find.repr_order
+R6547 union_find.identify_base
+R6626 Coq.Init.Wf.Acc
+R6631 union_find.repr_order
+R6642 union_find.identify_base
+R6602 Coq.Init.Wf.Acc
+R6607 union_find.repr_order
+R6596 union_find.elt
+R6626 Coq.Init.Wf.Acc
+R6631 union_find.repr_order
+R6642 union_find.identify_base
+R6602 Coq.Init.Wf.Acc
+R6607 union_find.repr_order
+R6596 union_find.elt
+R6729 Coq.Init.Wf.Acc_intro
+R6729 Coq.Init.Wf.Acc_intro
+R6758 union_find.identify_base_repr_order
+R6758 union_find.identify_base_repr_order
+R6832 Coq.Init.Wf.Acc_intro
+R6832 Coq.Init.Wf.Acc_intro
+R6879 union_find.identify_base_b_canon
+R6879 union_find.identify_base_b_canon
+R7028 Coq.Init.Logic "A \/ B" type_scope
+R6997 Coq.Init.Logic "A /\ B" type_scope
+R6990 Coq.Init.Logic "x = y" type_scope
+R6992 Coq.Init.Datatypes.None
+R7022 Coq.Init.Logic "x = y" type_scope
+R7008 union_find.identify_base
+R7024 Coq.Init.Datatypes.None
+R7095 Coq.Init.Logic "A \/ B" type_scope
+R7042 Coq.Init.Logic "A /\ B" type_scope
+R7038 Coq.Init.Logic "x = y" type_scope
+R7062 Coq.Init.Logic "A /\ B" type_scope
+R7055 Coq.Init.Logic "x = y" type_scope
+R7057 Coq.Init.Datatypes.None
+R7087 Coq.Init.Logic "x = y" type_scope
+R7073 union_find.identify_base
+R7089 Coq.Init.Datatypes.Some
+R7103 Coq.Init.Logic "'exists' x , p" type_scope
+R7132 Coq.Init.Logic "A /\ B" type_scope
+R7123 Coq.Init.Logic "x = y" type_scope
+R7125 Coq.Init.Datatypes.Some
+R7157 Coq.Init.Logic "x = y" type_scope
+R7143 union_find.identify_base
+R7159 Coq.Init.Datatypes.Some
+R6968 union_find.elt
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R7482 Coq.Init.Logic "x = y" type_scope
+R7434 union_find.repr_aux
+R7457 union_find.identify_base_order_wf
+R7443 union_find.identify_base
+R7496 union_find.repr_aux
+R7528 union_find.repr_aux
+R7426 union_find.elt
+R7575 Coq.Init.Wf.well_founded_ind
+R7671 Coq.Init.Logic "x = y" type_scope
+R7623 union_find.repr_aux
+R7646 union_find.identify_base_order_wf
+R7632 union_find.identify_base
+R7689 union_find.repr_aux
+R7721 union_find.repr_aux
+R7609 union_find.elt
+R7575 Coq.Init.Wf.well_founded_ind
+R7671 Coq.Init.Logic "x = y" type_scope
+R7623 union_find.repr_aux
+R7646 union_find.identify_base_order_wf
+R7632 union_find.identify_base
+R7689 union_find.repr_aux
+R7721 union_find.repr_aux
+R7609 union_find.elt
+R7762 union_find.identify_aux_decomp
+R7762 union_find.identify_aux_decomp
+R7798 union_find.repr_aux_none
+R7812 union_find.identify_base
+R7798 union_find.repr_aux_none
+R7812 union_find.identify_base
+R7839 union_find.repr_aux_none
+R7839 union_find.repr_aux_none
+R7910 union_find.identify_base_a_maps_to_b
+R7910 union_find.identify_base_a_maps_to_b
+R8000 union_find.repr_aux_none
+R8000 union_find.repr_aux_none
+R8067 union_find.repr_aux_some
+R8095 union_find.identify_base_order_wf
+R8081 union_find.identify_base
+R8067 union_find.repr_aux_some
+R8095 union_find.identify_base_order_wf
+R8081 union_find.identify_base
+R8135 union_find.repr_aux_none
+R8163 union_find.identify_base_order_wf
+R8149 union_find.identify_base
+R8135 union_find.repr_aux_none
+R8163 union_find.identify_base_order_wf
+R8149 union_find.identify_base
+R8204 union_find.identify_base_b_canon
+R8204 union_find.identify_base_b_canon
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R8255 union_find.repr_aux_some
+R8283 union_find.identify_base_order_wf
+R8269 union_find.identify_base
+R8255 union_find.repr_aux_some
+R8283 union_find.identify_base_order_wf
+R8269 union_find.identify_base
+R8330 union_find.repr_aux_some
+R8330 union_find.repr_aux_some
+R8514 Coq.Init.Logic "x = y" type_scope
+R8466 union_find.repr_aux
+R8489 union_find.identify_base_order_wf
+R8475 union_find.identify_base
+R8520 union_find.repr_aux
+R8543 union_find.identify_base_order_wf
+R8529 union_find.identify_base
+R8442 Coq.Init.Logic "x = y" type_scope
+R8425 union_find.repr_aux
+R8444 union_find.repr_aux
+R8417 union_find.elt
+R8417 union_find.elt
+R8596 union_find.identify_base_repr
+R8596 union_find.identify_base_repr
+R8626 union_find.identify_base_repr
+R8626 union_find.identify_base_repr
+R8829 Coq.Init.Logic "x = y" type_scope
+R8781 union_find.repr_aux
+R8804 union_find.identify_base_order_wf
+R8790 union_find.identify_base
+R8833 union_find.repr_aux
+R8856 union_find.identify_base_order_wf
+R8842 union_find.identify_base
+R8772 Coq.Init.Logic "x = y" type_scope
+R8755 union_find.repr_aux
+R8746 Coq.Init.Logic "x = y" type_scope
+R8729 union_find.repr_aux
+R8721 union_find.elt
+R8721 union_find.elt
+R8909 union_find.identify_base_repr
+R8909 union_find.identify_base_repr
+R8939 union_find.identify_base_repr
+R8939 union_find.identify_base_repr
+R9013 union_find.repr_aux
+R9013 union_find.repr_aux
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R9174 Coq.Init.Wf.well_founded
+R9188 union_find.repr_order
+R9224 union_find.unionfind
+R9279 union_find.elt
+R9288 union_find.repr_aux
+R9307 union_find.wf
+R9298 union_find.map
+R9272 union_find.elt
+R9257 union_find.unionfind
+R9390 Coq.Init.Logic "x = y" type_scope
+R9370 union_find.repr
+R9379 union_find.repr
+R9392 union_find.repr
+R9364 union_find.elt
+R9349 union_find.unionfind
+R9446 union_find.repr_aux_none
+R9478 union_find.repr_aux
+R9497 union_find.wf
+R9488 union_find.map
+R9470 union_find.wf
+R9461 union_find.map
+R9446 union_find.repr_aux_none
+R9478 union_find.repr_aux
+R9497 union_find.wf
+R9488 union_find.map
+R9470 union_find.wf
+R9461 union_find.map
+R9525 union_find.repr_aux_canon
+R9525 union_find.repr_aux_canon
+R9568 union_find.mkunionfind
+R9588 union_find.wf_empty
+R9648 union_find.unionfind
+R9687 union_find.repr
+R9675 union_find.repr
+R9707 Coq.Init.Specif.left
+R9731 Coq.Init.Specif.right
+R9752 union_find.mkunionfind
+R9830 union_find.identify_base_order_wf
+R9937 union_find.repr_aux_canon
+R9962 union_find.wf
+R9953 union_find.map
+R9895 union_find.repr
+R9883 union_find.repr
+R9863 union_find.wf
+R9854 union_find.map
+R9773 union_find.identify_base
+R9809 union_find.repr
+R9797 union_find.repr
+R9788 union_find.map
+R9641 union_find.elt
+R9641 union_find.elt
+R9624 union_find.unionfind
+R10051 Coq.Init.Logic "x = y" type_scope
+R10041 union_find.repr
+R10053 union_find.repr
+R10024 union_find.elt
+R10024 union_find.elt
+R10007 union_find.unionfind
+R10122 union_find.sameclass
+R10116 union_find.elt
+R10101 union_find.unionfind
+R10252 union_find.sameclass
+R10232 union_find.sameclass
+R10226 union_find.elt
+R10226 union_find.elt
+R10209 union_find.unionfind
+R10421 union_find.sameclass
+R10401 union_find.sameclass
+R10381 union_find.sameclass
+R10373 union_find.elt
+R10373 union_find.elt
+R10373 union_find.elt
+R10354 union_find.unionfind
+R10475 union_find.repr
+R10475 union_find.repr
+R10569 union_find.sameclass
+R10585 union_find.repr
+R10563 union_find.elt
+R10548 union_find.unionfind
+R10637 union_find.repr_repr
+R10637 union_find.repr_repr
+R10710 Coq.Init.Logic "x = y" type_scope
+R10697 union_find.repr
+R10702 union_find.empty
+R10691 union_find.elt
+R10777 union_find.repr_aux_none
+R10777 union_find.repr_aux_none
+R10888 Coq.Init.Logic "x = y" type_scope
+R10863 union_find.sameclass
+R10873 union_find.empty
+R10857 union_find.elt
+R10857 union_find.elt
+R10928 union_find.repr_empty
+R10928 union_find.repr_empty
+R10955 union_find.repr_empty
+R10955 union_find.repr_empty
+R11075 union_find.sameclass
+R11086 union_find.identify
+R11055 union_find.sameclass
+R11047 union_find.elt
+R11047 union_find.elt
+R11047 union_find.elt
+R11047 union_find.elt
+R11026 union_find.unionfind
+R11170 union_find.repr
+R11158 union_find.repr
+R11170 union_find.repr
+R11158 union_find.repr
+R11241 union_find.identify_base_sameclass_1
+R11241 union_find.identify_base_sameclass_1
+R11276 union_find.repr_aux_canon
+R11276 union_find.repr_aux_canon
+R11376 union_find.sameclass
+R11387 union_find.identify
+R11368 union_find.elt
+R11368 union_find.elt
+R11351 union_find.unionfind
+R11471 union_find.repr
+R11459 union_find.repr
+R11471 union_find.repr
+R11459 union_find.repr
+R11544 union_find.identify_base_sameclass_2
+R11544 union_find.identify_base_sameclass_2
+R11579 union_find.repr_aux_canon
+R11579 union_find.repr_aux_canon
+FInclusion
+R573 Coq.Lists.List.cons
+R581 Coq.Lists.List.nil
+R612 Coq.Lists.List.cons
+R689 Coq.Lists.List.app
+R766 Coq.Lists.List.app
+R665 Coq.Lists.List.app
+R670 Coq.Lists.List.cons
+R677 Coq.Lists.List.nil
+R596 Coq.Lists.List.cons
+R603 Coq.Lists.List.nil
+R964 Coq.Init.Datatypes.nat
+R1020 Inclusion.bin
+R1003 Inclusion.bin
+R1003 Inclusion.bin
+R1046 Inclusion.node
+R1105 Inclusion.node
+R1003 Inclusion.bin
+R1003 Inclusion.bin
+R1151 Inclusion.bin
+R1144 Inclusion.bin
+R1177 Inclusion.node
+R1191 Inclusion.flatten_aux
+R1144 Inclusion.bin
+R1281 Coq.Init.Datatypes.bool
+R1264 Coq.Init.Datatypes.nat
+R1264 Coq.Init.Datatypes.nat
+R1311 Coq.Init.Datatypes.O
+R1319 Coq.Init.Datatypes.true
+R1328 Coq.Init.Datatypes.S
+R1333 Coq.Init.Datatypes.O
+R1338 Coq.Init.Datatypes.false
+R1348 Coq.Init.Datatypes.S
+R1353 Coq.Init.Datatypes.S
+R1264 Coq.Init.Datatypes.nat
+R1264 Coq.Init.Datatypes.nat
+R1431 Inclusion.bin
+R1414 Inclusion.bin
+R1407 Coq.Init.Datatypes.nat
+R1457 Inclusion.leaf
+R1475 Inclusion.nat_le_bool
+R1541 Inclusion.node
+R1555 Inclusion.leaf
+R1547 Inclusion.leaf
+R1503 Inclusion.node
+R1517 Inclusion.leaf
+R1509 Inclusion.leaf
+R1567 Inclusion.node
+R1573 Inclusion.leaf
+R1594 Inclusion.nat_le_bool
+R1636 Inclusion.node
+R1642 Inclusion.leaf
+R1615 Inclusion.node
+R1621 Inclusion.leaf
+R1676 Inclusion.node
+R1682 Inclusion.leaf
+R1414 Inclusion.bin
+R1407 Coq.Init.Datatypes.nat
+R1728 Inclusion.bin
+R1721 Inclusion.bin
+R1754 Inclusion.node
+R1760 Inclusion.leaf
+R1774 Inclusion.insert_bin
+R1721 Inclusion.bin
+R1921 Coq.Init.Logic "x = y" type_scope
+R1973 Inclusion.bin
+R1956 Coq.Lists.List.list
+R2016 Inclusion.node
+R2070 Inclusion.leaf
+R2080 Coq.Lists.List.nth
+R1973 Inclusion.bin
+R1956 Coq.Lists.List.list
+R2207 Coq.Init.Logic "x = y" type_scope
+R2191 Inclusion.bin_A
+R2176 Inclusion.bin_A
+R2209 Inclusion.bin_A
+R2222 Inclusion.flatten_aux
+R2164 Inclusion.bin
+R2164 Inclusion.bin
+R2144 Coq.Lists.List.list
+R2464 Coq.Init.Logic "x = y" type_scope
+R2450 Inclusion.bin_A
+R2466 Inclusion.bin_A
+R2479 Inclusion.flatten
+R2440 Inclusion.bin
+R2423 Coq.Lists.List.list
+R2578 Inclusion.flatten_aux_valid_A
+R2578 Inclusion.flatten_aux_valid_A
+R2696 Coq.Lists.List.cons
+R2782 Coq.Init.Logic "x = y" type_scope
+R2822 Coq.Init.Datatypes.S
+R2761 Coq.Init.Logic "x = y" type_scope
+R2891 Coq.Lists.List.app
+R2982 Coq.Lists.List.cons
+R3047 Coq.Lists.List.app
+R3231 Inclusion.leaf
+R3206 Inclusion.leaf
+R3143 Inclusion.node
+R3347 Coq.Lists.List.In
+R3354 Coq.Lists.List "x ++ y" list_scope
+R3357 Coq.Lists.List "x ++ y" list_scope
+R3329 Coq.Lists.List.In
+R3336 Coq.Lists.List "x ++ y" list_scope
+R3339 Coq.Lists.List "x ++ y" list_scope
+R3318 Coq.Lists.List.list
+R3318 Coq.Lists.List.list
+R3318 Coq.Lists.List.list
+R3403 Coq.Lists.List.incl
+R3419 Coq.Lists.List "x ++ y" list_scope
+R3422 Coq.Lists.List "x ++ y" list_scope
+R3410 Coq.Lists.List "x ++ y" list_scope
+R3413 Coq.Lists.List "x ++ y" list_scope
+R3403 Coq.Lists.List.incl
+R3419 Coq.Lists.List "x ++ y" list_scope
+R3422 Coq.Lists.List "x ++ y" list_scope
+R3410 Coq.Lists.List "x ++ y" list_scope
+R3413 Coq.Lists.List "x ++ y" list_scope
+R3444 Coq.Lists.List.ass_app
+R3444 Coq.Lists.List.ass_app
+R3444 Coq.Lists.List.ass_app
+R3444 Coq.Lists.List.ass_app
+R3669 Coq.Lists.List.In
+R3675 Inclusion.bin_A
+R3710 Inclusion.node
+R3716 Inclusion.leaf
+R3691 Coq.Lists.List.app
+R3682 Coq.Lists.List.list
+R3602 Coq.Lists.List.In
+R3608 Inclusion.bin_A
+R3643 Inclusion.insert_bin
+R3624 Coq.Lists.List.app
+R3615 Coq.Lists.List.list
+R3587 Coq.Lists.List.list
+R3568 Coq.Lists.List.list
+R3574 Coq.Lists.List.list
+R3537 Inclusion.bin
+R3522 Coq.Init.Datatypes.nat
+R3831 Coq.Lists.List.app_ass
+R3831 Coq.Lists.List.app_ass
+R3831 Coq.Lists.List.app_ass
+R3868 Coq.Lists.List.app_ass
+R3868 Coq.Lists.List.app_ass
+R3890 Inclusion.nat_le_bool
+R3890 Inclusion.nat_le_bool
+R3937 Inclusion.In_permute_app_head
+R3937 Inclusion.In_permute_app_head
+R3963 Coq.Lists.List.in_app_or
+R3963 Coq.Lists.List.in_app_or
+R4012 Coq.Lists.List.in_or_app
+R4012 Coq.Lists.List.in_or_app
+R4047 Coq.Lists.List.in_or_app
+R4047 Coq.Lists.List.in_or_app
+R4128 Inclusion.nat_le_bool
+R4128 Inclusion.nat_le_bool
+R4178 Coq.Lists.List.app_nil_end
+R4191 Coq.Lists.List.nth
+R4178 Coq.Lists.List.app_nil_end
+R4191 Coq.Lists.List.nth
+R4220 Coq.Lists.List.app_nil_end
+R4233 Coq.Lists.List.nth
+R4220 Coq.Lists.List.app_nil_end
+R4233 Coq.Lists.List.nth
+R4254 Inclusion.In_permute_app_head
+R4254 Inclusion.In_permute_app_head
+R4462 Coq.Lists.List.In
+R4468 Inclusion.bin_A
+R4502 Inclusion.insert_bin
+R4483 Coq.Lists.List.app
+R4475 Coq.Lists.List.list
+R4411 Coq.Init.Logic "A \/ B" type_scope
+R4392 Coq.Lists.List.In
+R4398 Coq.Lists.List.nth
+R4414 Coq.Lists.List.In
+R4420 Inclusion.bin_A
+R4435 Coq.Lists.List.app
+R4427 Coq.Lists.List.list
+R4381 Coq.Lists.List.list
+R4361 Coq.Lists.List.list
+R4367 Coq.Lists.List.list
+R4341 Inclusion.bin
+R4332 Coq.Init.Datatypes.nat
+R4606 Coq.Lists.List.in_or_app
+R4606 Coq.Lists.List.in_or_app
+R4630 Inclusion.nat_le_bool
+R4630 Inclusion.nat_le_bool
+R4671 Coq.Lists.List.in_or_app
+R4671 Coq.Lists.List.in_or_app
+R4711 Coq.Lists.List.in_or_app
+R4711 Coq.Lists.List.in_or_app
+R4754 Coq.Lists.List.in_app_or
+R4802 Coq.Lists.List.in_or_app
+R4754 Coq.Lists.List.in_app_or
+R4802 Coq.Lists.List.in_or_app
+R4802 Coq.Lists.List.in_or_app
+R4846 Inclusion.nat_le_bool
+R4878 Coq.Lists.List.in_or_app
+R4846 Inclusion.nat_le_bool
+R4846 Inclusion.nat_le_bool
+R4878 Coq.Lists.List.in_or_app
+R4878 Coq.Lists.List.in_or_app
+R4878 Coq.Lists.List.in_or_app
+R4878 Coq.Lists.List.in_or_app
+R5055 Coq.Lists.List.In
+R5061 Inclusion.bin_A
+R5077 Coq.Lists.List.app
+R5068 Coq.Lists.List.list
+R4994 Coq.Lists.List.In
+R5000 Inclusion.bin_A
+R5035 Inclusion.sort_bin
+R5016 Coq.Lists.List.app
+R5007 Coq.Lists.List.list
+R4981 Coq.Lists.List.list
+R4963 Coq.Lists.List.list
+R4968 Coq.Lists.List.list
+R4936 Inclusion.bin
+R5189 Inclusion.insert_bin_included
+R5189 Inclusion.insert_bin_included
+R5222 Inclusion.insert_bin_included
+R5222 Inclusion.insert_bin_included
+R5294 Coq.Lists.List.in_app_or
+R5343 Inclusion.in_or_insert_bin
+R5294 Coq.Lists.List.in_app_or
+R5343 Inclusion.in_or_insert_bin
+R5343 Inclusion.in_or_insert_bin
+R5542 Coq.Lists.List.In
+R5548 Inclusion.bin_A
+R5583 Inclusion.sort_bin
+R5564 Coq.Lists.List.app
+R5555 Coq.Lists.List.list
+R5492 Coq.Lists.List.In
+R5498 Inclusion.bin_A
+R5514 Coq.Lists.List.app
+R5505 Coq.Lists.List.list
+R5479 Coq.Lists.List.list
+R5461 Coq.Lists.List.list
+R5466 Coq.Lists.List.list
+R5434 Inclusion.bin
+R5695 Inclusion.in_or_insert_bin
+R5695 Inclusion.in_or_insert_bin
+R5718 Coq.Lists.List.in_app_or
+R5718 Coq.Lists.List.in_app_or
+R5875 Coq.Lists.List.In
+R5883 Coq.Lists.List "x ++ y" list_scope
+R5863 Coq.Lists.List.In
+R5852 Coq.Lists.List.In
+R5834 Coq.Lists.List.In
+R5842 Coq.Lists.List "x ++ y" list_scope
+R5823 Coq.Lists.List.list
+R5823 Coq.Lists.List.list
+R5823 Coq.Lists.List.list
+R5921 Coq.Lists.List.in_app_or
+R5969 Coq.Lists.List.in_or_app
+R5921 Coq.Lists.List.in_app_or
+R5969 Coq.Lists.List.in_or_app
+R5969 Coq.Lists.List.in_or_app
+R6046 Coq.Init.Datatypes.bool
+R6028 Inclusion.bin
+R6021 Coq.Init.Datatypes.nat
+R6073 Inclusion.leaf
+R6084 Coq.ring.ArithRing.nateq
+R6099 Inclusion.node
+R6113 Coq.Bool.Bool.andb
+R6028 Inclusion.bin
+R6021 Coq.Init.Datatypes.nat
+R6227 Inclusion.bin
+R6210 Inclusion.bin
+R6203 Coq.Init.Datatypes.nat
+R6253 Inclusion.leaf
+R6263 Inclusion.leaf
+R6274 Inclusion.node
+R6280 Inclusion.leaf
+R6302 Coq.ring.ArithRing.nateq
+R6210 Inclusion.bin
+R6203 Coq.Init.Datatypes.nat
+R6417 Coq.Init.Datatypes.bool
+R6398 Inclusion.bin
+R6398 Inclusion.bin
+R6445 Inclusion.leaf
+R6455 Inclusion.check_all_leaves
+R6481 Inclusion.node
+R6487 Inclusion.leaf
+R6531 Coq.Bool.Bool "x || y" bool_scope
+R6508 Inclusion.check_all_leaves
+R6554 Inclusion.remove_all_leaves
+R6588 Coq.Init.Datatypes.false
+R6398 Inclusion.bin
+R6398 Inclusion.bin
+R6794 Coq.Lists.List.In
+R6800 Coq.Lists.List.nth
+R6743 Coq.Lists.List.In
+R6749 Inclusion.bin_A
+R6765 Coq.Lists.List.app
+R6756 Coq.Lists.List.list
+R6730 Coq.Lists.List.list
+R6712 Coq.Lists.List.list
+R6717 Coq.Lists.List.list
+R6676 Coq.Init.Logic "x = y" type_scope
+R6654 Inclusion.check_all_leaves
+R6678 Coq.Init.Datatypes.true
+R6858 Inclusion.check_all_leaves
+R6894 Inclusion.check_all_leaves
+R6858 Inclusion.check_all_leaves
+R6894 Inclusion.check_all_leaves
+R6894 Inclusion.check_all_leaves
+R6982 Coq.Lists.List.in_app_or
+R6982 Coq.Lists.List.in_app_or
+R7062 Coq.ring.ArithRing.nateq_prop
+R7062 Coq.ring.ArithRing.nateq_prop
+R7341 Coq.Init.Logic "A \/ B" type_scope
+R7276 Coq.Lists.List.In
+R7282 Inclusion.bin_A
+R7316 Inclusion.remove_all_leaves
+R7298 Coq.Lists.List.app
+R7289 Coq.Lists.List.list
+R7346 Coq.Lists.List.In
+R7352 Coq.Lists.List.nth
+R7228 Coq.Lists.List.In
+R7234 Inclusion.bin_A
+R7250 Coq.Lists.List.app
+R7241 Coq.Lists.List.list
+R7217 Coq.Lists.List.list
+R7199 Coq.Lists.List.list
+R7204 Coq.Lists.List.list
+R7458 Coq.Init.Logic.refl_equal
+R7470 Coq.ring.ArithRing.nateq
+R7492 Coq.ring.ArithRing.nateq
+R7517 Coq.ring.ArithRing.nateq
+R7458 Coq.Init.Logic.refl_equal
+R7470 Coq.ring.ArithRing.nateq
+R7492 Coq.ring.ArithRing.nateq
+R7517 Coq.ring.ArithRing.nateq
+R7578 Coq.Init.Logic "x = y" type_scope
+R7578 Coq.Init.Logic "x = y" type_scope
+R7589 Coq.ring.ArithRing.nateq_prop
+R7589 Coq.ring.ArithRing.nateq_prop
+R7671 Coq.Lists.List.in_app_or
+R7671 Coq.Lists.List.in_app_or
+R7948 Coq.Lists.List.In
+R7954 Inclusion.bin_A
+R7969 Coq.Lists.List.app
+R7961 Coq.Lists.List.list
+R7901 Coq.Lists.List.In
+R7907 Inclusion.bin_A
+R7922 Coq.Lists.List.app
+R7914 Coq.Lists.List.list
+R7890 Coq.Lists.List.list
+R7872 Coq.Lists.List.list
+R7877 Coq.Lists.List.list
+R7838 Coq.Init.Logic "x = y" type_scope
+R7817 Inclusion.test_inclusion
+R7840 Coq.Init.Datatypes.true
+R7810 Inclusion.bin
+R7810 Inclusion.bin
+R8152 Coq.Init.Logic "A \/ B" type_scope
+R8145 Coq.Init.Logic "x = y" type_scope
+R8123 Inclusion.check_all_leaves
+R8147 Coq.Init.Datatypes.true
+R8203 Coq.Init.Logic "x = y" type_scope
+R8158 Inclusion.test_inclusion
+R8179 Inclusion.remove_all_leaves
+R8205 Coq.Init.Datatypes.true
+R8152 Coq.Init.Logic "A \/ B" type_scope
+R8145 Coq.Init.Logic "x = y" type_scope
+R8123 Inclusion.check_all_leaves
+R8147 Coq.Init.Datatypes.true
+R8203 Coq.Init.Logic "x = y" type_scope
+R8158 Inclusion.test_inclusion
+R8179 Inclusion.remove_all_leaves
+R8205 Coq.Init.Datatypes.true
+R8222 Inclusion.check_all_leaves
+R8256 Inclusion.test_inclusion
+R8277 Inclusion.remove_all_leaves
+R8222 Inclusion.check_all_leaves
+R8256 Inclusion.test_inclusion
+R8277 Inclusion.remove_all_leaves
+R8256 Inclusion.test_inclusion
+R8277 Inclusion.remove_all_leaves
+R8381 Coq.Lists.List.in_or_app
+R8404 Inclusion.check_all_leaves_sound
+R8381 Coq.Lists.List.in_or_app
+R8404 Inclusion.check_all_leaves_sound
+R8453 Inclusion.remove_all_leaves_sound
+R8453 Inclusion.remove_all_leaves_sound
+R8514 Coq.Lists.List.in_or_app
+R8514 Coq.Lists.List.in_or_app
+R8572 Coq.Lists.List.in_or_app
+R8572 Coq.Lists.List.in_or_app
+R8602 Inclusion.check_all_leaves_sound
+R8602 Inclusion.check_all_leaves_sound
+R8866 Coq.Lists.List.In
+R8872 Inclusion.bin_A
+R8888 Coq.Lists.List.app
+R8879 Coq.Lists.List.list
+R8816 Coq.Lists.List.In
+R8822 Inclusion.bin_A
+R8838 Coq.Lists.List.app
+R8829 Coq.Lists.List.list
+R8803 Coq.Lists.List.list
+R8785 Coq.Lists.List.list
+R8790 Coq.Lists.List.list
+R8749 Coq.Init.Logic "x = y" type_scope
+R8686 Inclusion.test_inclusion
+R8726 Inclusion.sort_bin
+R8736 Inclusion.flatten
+R8702 Inclusion.sort_bin
+R8712 Inclusion.flatten
+R8751 Coq.Init.Datatypes.true
+R8677 Inclusion.bin
+R8677 Inclusion.bin
+R8983 Coq.Lists.List.ass_app
+R8948 Inclusion.flatten_valid_A
+R8983 Coq.Lists.List.ass_app
+R8948 Inclusion.flatten_valid_A
+R9008 Inclusion.sort_included
+R9008 Inclusion.sort_included
+R9062 Inclusion.sort_bin
+R9072 Inclusion.flatten
+R9029 Inclusion.test_inclusion_sound
+R9062 Inclusion.sort_bin
+R9072 Inclusion.flatten
+R9029 Inclusion.test_inclusion_sound
+R9104 Inclusion.sort_included2
+R9104 Inclusion.sort_included2
+R9158 Coq.Lists.List.ass_app
+R9131 Inclusion.flatten_valid_A
+R9158 Coq.Lists.List.ass_app
+R9131 Inclusion.flatten_valid_A
+R9237 Coq.Lists.List.In
+R9243 Coq.Lists.List.nil
+R9272 Coq.Lists.List.In
+R9285 Coq.Lists.List.In
+R9409 Coq.Lists.List.nil
+R9417 Coq.Lists.List.list
+R9531 Coq.Lists.List.In
+R9537 Inclusion.bin_A
+R9567 Coq.Lists.List.nil
+R9553 Coq.Lists.List.app
+R9544 Coq.Lists.List.list
+R9601 Inclusion.inclusion_theorem
+R9644 Coq.Init.Logic.refl_equal
+R9715 Coq.Lists.List.incl
+FAST
+R69 Coq.NArith.BinPos.positive
+R103 Coqlib.peq
+R198 Coq.ZArith.BinInt.Z
+R219 AST.Tint
+R231 AST.Tfloat
+R191 AST.typ
+R699 AST.comparison
+R732 AST.Ceq
+R739 AST.Cne
+R747 AST.Cne
+R754 AST.Ceq
+R762 AST.Clt
+R769 AST.Cge
+R777 AST.Cle
+R784 AST.Cgt
+R792 AST.Cgt
+R799 AST.Cle
+R807 AST.Cge
+R814 AST.Clt
+R686 AST.comparison
+R870 AST.comparison
+R903 AST.Ceq
+R910 AST.Ceq
+R918 AST.Cne
+R925 AST.Cne
+R933 AST.Clt
+R940 AST.Cgt
+R948 AST.Cle
+R955 AST.Cge
+R963 AST.Cgt
+R970 AST.Clt
+R978 AST.Cge
+R985 AST.Cle
+R857 AST.comparison
+R1049 Coq.Lists.List.list
+R1054 AST.typ
+R1070 Coq.Init.Datatypes.option
+R1077 AST.typ
+R1148 Coq.Lists.List.list
+R1160 Coq.Init.Datatypes "x * y" type_scope
+R1154 AST.ident
+R1183 AST.ident
+R1203 Coq.Lists.List.list
+R1215 Coq.Init.Datatypes "x * y" type_scope
+R1209 AST.ident
+R1217 Coq.ZArith.BinInt.Z
+R1342 Coq.Lists.List.list
+R1354 Coq.Init.Datatypes "x * y" type_scope
+R1348 AST.ident
+R1322 Coq.Lists.List.list
+R1334 Coq.Init.Datatypes "x * y" type_scope
+R1328 AST.ident
+R1381 Coq.Lists.List.nil
+R1388 Coq.Lists.List.nil
+R1405 Coq.Lists.List "x :: y" list_scope
+R1396 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R1431 Coq.Lists.List "x :: y" list_scope
+R1415 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R1322 Coq.Lists.List.list
+R1334 Coq.Init.Datatypes "x * y" type_scope
+R1328 AST.ident
+R1507 AST.program
+R1522 AST.mkprogram
+R1593 AST.prog_vars
+R1575 AST.prog_main
+R1537 AST.transf_program
+R1555 AST.prog_funct
+R1494 AST.program
+R1695 Coq.Init.Logic "'exists' x , p" type_scope
+R1718 Coq.Init.Logic "A /\ B" type_scope
+R1705 Coq.Lists.List.In
+R1708 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R1730 Coq.Init.Logic "x = y" type_scope
+R1659 Coq.Lists.List.In
+R1671 AST.transf_program
+R1662 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R2064 Coq.Init.Logic "'exists' x , p" type_scope
+R2099 Coq.Init.Logic "A /\ B" type_scope
+R2074 Coq.Lists.List.In
+R2087 AST.prog_funct
+R2077 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R2111 Coq.Init.Logic "x = y" type_scope
+R2013 Coq.Lists.List.In
+R2047 AST.prog_funct
+R2025 AST.transform_program
+R2016 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R2148 AST.transf_program_functions
+R2148 AST.transf_program_functions
+R2290 Coq.Init.Datatypes.option
+R2369 Coq.Init.Datatypes.option
+R2377 Coq.Lists.List.list
+R2389 Coq.Init.Datatypes "x * y" type_scope
+R2383 AST.ident
+R2349 Coq.Lists.List.list
+R2361 Coq.Init.Datatypes "x * y" type_scope
+R2355 AST.ident
+R2417 Coq.Lists.List.nil
+R2424 Coq.Init.Datatypes.Some
+R2429 Coq.Lists.List.nil
+R2446 Coq.Lists.List "x :: y" list_scope
+R2437 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R2499 Coq.Init.Datatypes.None
+R2507 Coq.Init.Datatypes.None
+R2520 Coq.Init.Datatypes.Some
+R2592 Coq.Init.Datatypes.None
+R2600 Coq.Init.Datatypes.None
+R2617 Coq.Init.Datatypes.Some
+R2629 Coq.Init.Datatypes.Some
+R2645 Coq.Lists.List "x :: y" list_scope
+R2635 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R2349 Coq.Lists.List.list
+R2361 Coq.Init.Datatypes "x * y" type_scope
+R2355 AST.ident
+R2739 Coq.Init.Datatypes.option
+R2747 AST.program
+R2769 AST.transf_partial_program
+R2795 AST.prog_funct
+R2816 Coq.Init.Datatypes.None
+R2824 Coq.Init.Datatypes.None
+R2833 Coq.Init.Datatypes.Some
+R2844 Coq.Init.Datatypes.Some
+R2850 AST.mkprogram
+R2880 AST.prog_vars
+R2866 AST.prog_main
+R2726 AST.program
+R3027 Coq.Init.Logic "'exists' x , p" type_scope
+R3050 Coq.Init.Logic "A /\ B" type_scope
+R3037 Coq.Lists.List.In
+R3040 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R3070 Coq.Init.Logic "x = y" type_scope
+R3072 Coq.Init.Datatypes.Some
+R3007 Coq.Lists.List.In
+R3010 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R2991 Coq.Init.Logic "x = y" type_scope
+R2965 AST.transf_partial_program
+R2993 Coq.Init.Datatypes.Some
+R3266 AST.transf_partial_program
+R3266 AST.transf_partial_program
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R3705 Coq.Init.Logic "'exists' x , p" type_scope
+R3740 Coq.Init.Logic "A /\ B" type_scope
+R3715 Coq.Lists.List.In
+R3728 AST.prog_funct
+R3718 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R3760 Coq.Init.Logic "x = y" type_scope
+R3762 Coq.Init.Datatypes.Some
+R3673 Coq.Lists.List.In
+R3688 AST.prog_funct
+R3676 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R3658 Coq.Init.Logic "x = y" type_scope
+R3630 AST.transform_partial_program
+R3660 Coq.Init.Datatypes.Some
+R3843 AST.transf_partial_program
+R3867 AST.prog_funct
+R3843 AST.transf_partial_program
+R3867 AST.prog_funct
+R3899 AST.transf_partial_program_functions
+R3899 AST.transf_partial_program_functions
+R4133 Coq.Init.Logic "x = y" type_scope
+R4122 AST.prog_main
+R4138 AST.prog_main
+R4103 Coq.Init.Logic "x = y" type_scope
+R4075 AST.transform_partial_program
+R4105 Coq.Init.Datatypes.Some
+R4218 AST.transf_partial_program
+R4242 AST.prog_funct
+R4218 AST.transf_partial_program
+R4242 AST.prog_funct
+FIntegers
+R66 Coq.Init.Datatypes.nat
+R102 Coq.ZArith.BinInt.Z
+R107 Coq.ZArith.Zpower.two_power_nat
+R121 Integers.wordsize
+R157 Coq.ZArith.BinInt.Z
+R170 Coq.ZArith.Zdiv "x / y" Z_scope
+R162 Integers.modulus
+R216 Coq.ZArith.BinInt "x ?= y" Z_scope
+R230 Coq.Init.Datatypes.Lt
+R236 Coq.Init.Logic.False
+R264 Coq.ZArith.BinInt "x ?= y" Z_scope
+R267 Integers.modulus
+R286 Coq.Init.Datatypes.Lt
+R292 Coq.Init.Logic.True
+R309 Coq.Init.Logic.False
+R200 Coq.ZArith.BinInt.Z
+R366 Coq.ZArith.BinInt.Z
+R379 Integers.in_range
+R438 Coq.ZArith.BinInt.Z
+R451 Coq.ZArith.BinInt "x - y" Z_scope
+R443 Integers.modulus
+R480 Coq.ZArith.BinInt.Z
+R498 Coq.ZArith.BinInt "x - y" Z_scope
+R485 Integers.half_modulus
+R527 Coq.ZArith.BinInt.Z
+R532 Coq.ZArith.BinInt "- x" Z_scope
+R534 Integers.half_modulus
+R580 Coq.ZArith.BinInt.Z
+R585 Integers.intval
+R573 Integers.int
+R625 Coq.ZArith.BinInt.Z
+R635 Coqlib.zlt
+R652 Integers.half_modulus
+R640 Integers.unsigned
+R701 Coq.ZArith.BinInt "x - y" Z_scope
+R690 Integers.unsigned
+R703 Integers.modulus
+R672 Integers.unsigned
+R618 Integers.int
+R745 Integers.in_range
+R755 Coq.ZArith.Zdiv.Zmod
+R762 Integers.modulus
+R802 Coq.ZArith.Zdiv.Z_mod_lt
+R822 Coqlib.two_power_nat_pos
+R840 Integers.wordsize
+R813 Integers.modulus
+R802 Coq.ZArith.Zdiv.Z_mod_lt
+R822 Coqlib.two_power_nat_pos
+R840 Integers.wordsize
+R813 Integers.modulus
+R895 Coq.ZArith.BinInt "x >= y" Z_scope
+R883 Coq.ZArith.Zdiv "x 'mod' y" Z_scope
+R887 Integers.modulus
+R895 Coq.ZArith.BinInt "x >= y" Z_scope
+R883 Coq.ZArith.Zdiv "x 'mod' y" Z_scope
+R887 Integers.modulus
+R974 Coq.ZArith.BinInt "x ?= y" Z_scope
+R962 Coq.ZArith.Zdiv "x 'mod' y" Z_scope
+R966 Integers.modulus
+R974 Coq.ZArith.BinInt "x ?= y" Z_scope
+R962 Coq.ZArith.Zdiv "x 'mod' y" Z_scope
+R966 Integers.modulus
+R1019 Integers.int
+R1029 Integers.mkint
+R1053 Integers.mod_in_range
+R1036 Coq.ZArith.Zdiv.Zmod
+R1043 Integers.modulus
+R1014 Coq.ZArith.BinInt.Z
+R1090 Integers.repr
+R1117 Integers.repr
+R1144 Integers.repr
+R1230 Coq.Init.Logic "x = y" type_scope
+R1214 Integers.in_range
+R1214 Integers.in_range
+R1203 Coq.ZArith.BinInt.Z
+R1369 Coq.Init.Logic "x = y" type_scope
+R1316 Coq.ZArith.BinInt "x ?= y" Z_scope
+R1319 Integers.modulus
+R1332 Coq.Init.Datatypes.Lt
+R1338 Coq.Init.Logic.True
+R1350 Coq.Init.Logic.False
+R1316 Coq.ZArith.BinInt "x ?= y" Z_scope
+R1319 Integers.modulus
+R1332 Coq.Init.Datatypes.Lt
+R1338 Coq.Init.Logic.True
+R1350 Coq.Init.Logic.False
+R1369 Coq.Init.Logic "x = y" type_scope
+R1316 Coq.ZArith.BinInt "x ?= y" Z_scope
+R1319 Integers.modulus
+R1332 Coq.Init.Datatypes.Lt
+R1338 Coq.Init.Logic.True
+R1350 Coq.Init.Logic.False
+R1316 Coq.ZArith.BinInt "x ?= y" Z_scope
+R1319 Integers.modulus
+R1332 Coq.Init.Datatypes.Lt
+R1338 Coq.Init.Logic.True
+R1350 Coq.Init.Logic.False
+R1390 Coq.ZArith.BinInt "x ?= y" Z_scope
+R1393 Integers.modulus
+R1390 Coq.ZArith.BinInt "x ?= y" Z_scope
+R1393 Integers.modulus
+R1508 Coq.ZArith.BinInt "x ?= y" Z_scope
+R1508 Coq.ZArith.BinInt "x ?= y" Z_scope
+R1606 Coq.Init.Logic "x = y" type_scope
+R1595 Integers.mkint
+R1608 Integers.mkint
+R1588 Coq.Init.Logic "x = y" type_scope
+R1661 Integers.in_range_proof_irrelevance
+R1661 Integers.in_range_proof_irrelevance
+R1769 Coq.Init.Specif "{ A } + { B }" type_scope
+R1772 Coq.Init.Logic "x = y" type_scope
+R1782 Coq.Init.Logic "x <> y" type_scope
+R1763 Integers.int
+R1763 Integers.int
+R1836 Coqlib.zeq
+R1836 Coqlib.zeq
+R1879 Integers.mkint_eq
+R1879 Integers.mkint_eq
+R1971 Coq.Init.Datatypes.bool
+R1985 Coqlib.zeq
+R2003 Integers.unsigned
+R1990 Integers.unsigned
+R2030 Coq.Init.Datatypes.false
+R2020 Coq.Init.Datatypes.true
+R1964 Integers.int
+R1964 Integers.int
+R2064 Coq.Init.Datatypes.bool
+R2077 Coqlib.zlt
+R2093 Integers.signed
+R2082 Integers.signed
+R2118 Coq.Init.Datatypes.false
+R2108 Coq.Init.Datatypes.true
+R2057 Integers.int
+R2057 Integers.int
+R2153 Coq.Init.Datatypes.bool
+R2166 Coqlib.zlt
+R2184 Integers.unsigned
+R2171 Integers.unsigned
+R2211 Coq.Init.Datatypes.false
+R2201 Coq.Init.Datatypes.true
+R2146 Integers.int
+R2146 Integers.int
+R2245 Integers.int
+R2252 Integers.repr
+R2258 Coq.ZArith.BinInt "- x" Z_scope
+R2260 Integers.unsigned
+R2238 Integers.int
+R2307 Integers.int
+R2355 Coqlib.zlt
+R2382 Integers.repr
+R2390 Coq.ZArith.BinInt "x - y" Z_scope
+R2370 Integers.repr
+R2325 Coq.ZArith.Zdiv.Zmod
+R2331 Integers.unsigned
+R2300 Integers.int
+R2434 Integers.int
+R2443 Integers.repr
+R2449 Coq.ZArith.Zdiv.Zmod
+R2455 Integers.unsigned
+R2427 Integers.int
+R2508 Integers.int
+R2558 Coqlib.zlt
+R2587 Integers.repr
+R2595 Coq.ZArith.BinInt "x - y" Z_scope
+R2575 Integers.repr
+R2526 Coq.ZArith.Zdiv.Zmod
+R2532 Integers.unsigned
+R2501 Integers.int
+R2642 Integers.int
+R2651 Integers.repr
+R2657 Coq.ZArith.Zdiv.Zmod
+R2663 Integers.unsigned
+R2635 Integers.int
+R2712 Integers.int
+R2721 Integers.repr
+R2738 Coq.ZArith.BinInt "x + y" Z_scope
+R2727 Integers.unsigned
+R2740 Integers.unsigned
+R2705 Integers.int
+R2705 Integers.int
+R2781 Integers.int
+R2790 Integers.repr
+R2807 Coq.ZArith.BinInt "x - y" Z_scope
+R2796 Integers.unsigned
+R2809 Integers.unsigned
+R2774 Integers.int
+R2774 Integers.int
+R2850 Integers.int
+R2859 Integers.repr
+R2876 Coq.ZArith.BinInt "x * y" Z_scope
+R2865 Integers.unsigned
+R2878 Integers.unsigned
+R2843 Integers.int
+R2843 Integers.int
+R2925 Coq.ZArith.BinInt.Z
+R2935 Coqlib.zlt
+R3012 Coqlib.zlt
+R3044 Coq.ZArith.Zdiv "x / y" Z_scope
+R3025 Coq.ZArith.BinInt "- x" Z_scope
+R3029 Coq.ZArith.Zdiv "x / y" Z_scope
+R3032 Coq.ZArith.BinInt "- x" Z_scope
+R2955 Coqlib.zlt
+R2985 Coq.ZArith.BinInt "- x" Z_scope
+R2991 Coq.ZArith.Zdiv "x / y" Z_scope
+R2989 Coq.ZArith.BinInt "- x" Z_scope
+R2971 Coq.ZArith.Zdiv "x / y" Z_scope
+R2969 Coq.ZArith.BinInt "- x" Z_scope
+R2976 Coq.ZArith.BinInt "- x" Z_scope
+R2920 Coq.ZArith.BinInt.Z
+R2920 Coq.ZArith.BinInt.Z
+R3083 Coq.ZArith.BinInt.Z
+R3092 Coq.ZArith.BinInt "x - y" Z_scope
+R3109 Coq.ZArith.BinInt "x * y" Z_scope
+R3095 Integers.Zdiv_round
+R3078 Coq.ZArith.BinInt.Z
+R3078 Coq.ZArith.BinInt.Z
+R3146 Integers.int
+R3155 Integers.repr
+R3161 Integers.Zdiv_round
+R3184 Integers.signed
+R3173 Integers.signed
+R3139 Integers.int
+R3139 Integers.int
+R3225 Integers.int
+R3234 Integers.repr
+R3240 Integers.Zmod_round
+R3263 Integers.signed
+R3252 Integers.signed
+R3218 Integers.int
+R3218 Integers.int
+R3304 Integers.int
+R3313 Integers.repr
+R3330 Coq.ZArith.Zdiv "x / y" Z_scope
+R3319 Integers.unsigned
+R3332 Integers.unsigned
+R3297 Integers.int
+R3297 Integers.int
+R3374 Integers.int
+R3383 Integers.repr
+R3389 Coq.ZArith.Zdiv.Zmod
+R3408 Integers.unsigned
+R3395 Integers.unsigned
+R3367 Integers.int
+R3367 Integers.int
+R3495 Coq.ZArith.BinInt "x * y" Z_scope
+R3484 Coq.ZArith.BinInt "x + y" Z_scope
+R3480 Coq.ZArith.BinInt "x * y" Z_scope
+R3460 Coq.ZArith.BinInt.Z
+R3450 Coq.Init.Datatypes.bool
+R3539 Coq.Init.Datatypes "x * y" type_scope
+R3534 Coq.Init.Datatypes.bool
+R3541 Coq.ZArith.BinInt.Z
+R3565 Coq.ZArith.BinInt.Z0
+R3571 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R3572 Coq.Init.Datatypes.false
+R3586 Coq.ZArith.BinInt.Zpos
+R3623 Coq.NArith.BinPos.xI
+R3631 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R3632 Coq.Init.Datatypes.true
+R3638 Coq.ZArith.BinInt.Zpos
+R3654 Coq.NArith.BinPos.xO
+R3662 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R3663 Coq.Init.Datatypes.false
+R3670 Coq.ZArith.BinInt.Zpos
+R3686 Coq.NArith.BinPos.xH
+R3692 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R3693 Coq.Init.Datatypes.true
+R3716 Coq.ZArith.BinInt.Zneg
+R3753 Coq.NArith.BinPos.xI
+R3761 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R3762 Coq.Init.Datatypes.true
+R3775 Coq.ZArith.BinInt "x - y" Z_scope
+R3768 Coq.ZArith.BinInt.Zneg
+R3788 Coq.NArith.BinPos.xO
+R3796 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R3797 Coq.Init.Datatypes.false
+R3804 Coq.ZArith.BinInt.Zneg
+R3820 Coq.NArith.BinPos.xH
+R3826 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R3827 Coq.Init.Datatypes.true
+R3529 Coq.ZArith.BinInt.Z
+R3907 Coq.Init.Datatypes.bool
+R3902 Coq.ZArith.BinInt.Z
+R3887 Coq.ZArith.BinInt.Z
+R3878 Coq.Init.Datatypes.nat
+R3934 Coq.Init.Datatypes.O
+R3958 Coq.Init.Datatypes.false
+R3953 Coq.ZArith.BinInt.Z
+R3969 Coq.Init.Datatypes.S
+R3996 Integers.Z_bin_decomp
+R4068 Coqlib.zeq
+R4093 Coq.ZArith.BinInt "x - y" Z_scope
+R4060 Coq.ZArith.BinInt.Z
+R3887 Coq.ZArith.BinInt.Z
+R3878 Coq.Init.Datatypes.nat
+R4162 Coq.ZArith.BinInt.Z
+R4144 Coq.Init.Datatypes.bool
+R4139 Coq.ZArith.BinInt.Z
+R4130 Coq.Init.Datatypes.nat
+R4186 Coq.Init.Datatypes.O
+R4197 Coq.Init.Datatypes.S
+R4204 Integers.Z_shift_add
+R4250 Coq.ZArith.BinInt "x + y" Z_scope
+R4144 Coq.Init.Datatypes.bool
+R4139 Coq.ZArith.BinInt.Z
+R4130 Coq.Init.Datatypes.nat
+R4426 Integers.repr
+R4432 Integers.Z_of_bits
+R4442 Integers.wordsize
+R4389 Integers.bits_of_Z
+R4409 Integers.unsigned
+R4399 Integers.wordsize
+R4342 Integers.bits_of_Z
+R4362 Integers.unsigned
+R4352 Integers.wordsize
+R4322 Integers.int
+R4322 Integers.int
+R4310 Coq.Init.Datatypes.bool
+R4302 Coq.Init.Datatypes.bool
+R4294 Coq.Init.Datatypes.bool
+R4508 Integers.int
+R4515 Integers.bitwise_binop
+R4529 Coq.Bool.Bool.andb
+R4502 Integers.int
+R4502 Integers.int
+R4565 Integers.int
+R4572 Integers.bitwise_binop
+R4586 Coq.Bool.Bool.orb
+R4559 Integers.int
+R4559 Integers.int
+R4623 Integers.int
+R4630 Integers.bitwise_binop
+R4644 Coq.Bool.Bool.xorb
+R4616 Integers.int
+R4616 Integers.int
+R4681 Integers.int
+R4688 Integers.xor
+R4694 Integers.mone
+R4674 Integers.int
+R4728 Integers.int
+R4810 Integers.repr
+R4816 Integers.Z_of_bits
+R4851 Coq.ZArith.BinInt "x - y" Z_scope
+R4826 Integers.wordsize
+R4794 Integers.unsigned
+R4747 Integers.bits_of_Z
+R4767 Integers.unsigned
+R4757 Integers.wordsize
+R4722 Integers.int
+R4722 Integers.int
+R4889 Integers.int
+R4971 Integers.repr
+R4977 Integers.Z_of_bits
+R5012 Coq.ZArith.BinInt "x + y" Z_scope
+R4987 Integers.wordsize
+R4955 Integers.unsigned
+R4908 Integers.bits_of_Z
+R4928 Integers.unsigned
+R4918 Integers.wordsize
+R4883 Integers.int
+R4883 Integers.int
+R5049 Integers.int
+R5058 Integers.repr
+R5073 Coq.ZArith.Zdiv "x / y" Z_scope
+R5064 Integers.signed
+R5075 Coq.ZArith.Zpower.two_p
+R5082 Integers.unsigned
+R5043 Integers.int
+R5043 Integers.int
+R5124 Integers.int
+R5133 Integers.divs
+R5141 Integers.shl
+R5145 Integers.one
+R5118 Integers.int
+R5118 Integers.int
+R5191 Integers.sub
+R5207 Integers.shr
+R5196 Integers.shrx
+R5181 Integers.int
+R5181 Integers.int
+R5246 Integers.int
+R5328 Integers.repr
+R5334 Integers.Z_of_bits
+R5376 Coq.ZArith.Zdiv.Zmod
+R5391 Coq.ZArith.BinInt.Z_of_nat
+R5400 Integers.wordsize
+R5384 Coq.ZArith.BinInt "x - y" Z_scope
+R5344 Integers.wordsize
+R5312 Integers.unsigned
+R5265 Integers.bits_of_Z
+R5285 Integers.unsigned
+R5275 Integers.wordsize
+R5239 Integers.int
+R5239 Integers.int
+R5445 Integers.int
+R5452 Integers.and
+R5457 Integers.rol
+R5439 Integers.int
+R5439 Integers.int
+R5439 Integers.int
+R5525 Coq.Lists.List.list
+R5530 Coq.ZArith.BinInt.Z
+R5510 Coq.ZArith.BinInt.Z
+R5503 Coq.ZArith.BinInt.Z
+R5494 Coq.Init.Datatypes.nat
+R5554 Coq.Init.Datatypes.O
+R5559 Coq.Lists.List.nil
+R5567 Coq.Init.Datatypes.S
+R5594 Integers.Z_bin_decomp
+R5676 Coq.ZArith.BinInt "x + y" Z_scope
+R5630 Coq.Lists.List "x :: y" list_scope
+R5650 Coq.ZArith.BinInt "x + y" Z_scope
+R5510 Coq.ZArith.BinInt.Z
+R5503 Coq.ZArith.BinInt.Z
+R5494 Coq.Init.Datatypes.nat
+R5720 Coq.Init.Datatypes.option
+R5727 Integers.int
+R5742 Integers.Z_one_bits
+R5763 Integers.unsigned
+R5753 Integers.wordsize
+R5788 Coq.Lists.List "x :: y" list_scope
+R5791 Coq.Lists.List.nil
+R5798 Coq.Init.Datatypes.Some
+R5804 Integers.repr
+R5821 Coq.Init.Datatypes.None
+R5713 Integers.int
+R5865 Coq.Lists.List.list
+R5870 Integers.int
+R5879 Coq.Lists.List.map
+R5894 Integers.Z_one_bits
+R5915 Integers.unsigned
+R5905 Integers.wordsize
+R5888 Integers.repr
+R5858 Integers.int
+R6573 Integers.rlw_state
+R6608 Integers.RLW_S0
+R6616 Coq.Init.Datatypes.false
+R6625 Integers.RLW_S1
+R6636 Integers.RLW_S0
+R6644 Coq.Init.Datatypes.true
+R6653 Integers.RLW_S4
+R6664 Integers.RLW_S1
+R6672 Coq.Init.Datatypes.false
+R6681 Integers.RLW_S1
+R6692 Integers.RLW_S1
+R6700 Coq.Init.Datatypes.true
+R6709 Integers.RLW_S2
+R6720 Integers.RLW_S2
+R6728 Coq.Init.Datatypes.false
+R6737 Integers.RLW_S3
+R6748 Integers.RLW_S2
+R6756 Coq.Init.Datatypes.true
+R6765 Integers.RLW_S2
+R6776 Integers.RLW_S3
+R6784 Coq.Init.Datatypes.false
+R6793 Integers.RLW_S3
+R6804 Integers.RLW_S3
+R6812 Coq.Init.Datatypes.true
+R6821 Integers.RLW_Sbad
+R6834 Integers.RLW_S4
+R6842 Coq.Init.Datatypes.false
+R6851 Integers.RLW_S5
+R6862 Integers.RLW_S4
+R6870 Coq.Init.Datatypes.true
+R6879 Integers.RLW_S4
+R6890 Integers.RLW_S5
+R6898 Coq.Init.Datatypes.false
+R6907 Integers.RLW_S5
+R6918 Integers.RLW_S5
+R6926 Coq.Init.Datatypes.true
+R6935 Integers.RLW_S6
+R6946 Integers.RLW_S6
+R6954 Coq.Init.Datatypes.false
+R6963 Integers.RLW_Sbad
+R6976 Integers.RLW_S6
+R6984 Coq.Init.Datatypes.true
+R6993 Integers.RLW_S6
+R7004 Integers.RLW_Sbad
+R7019 Integers.RLW_Sbad
+R6565 Coq.Init.Datatypes.bool
+R6550 Integers.rlw_state
+R7078 Coq.Init.Datatypes.bool
+R7105 Integers.RLW_S0
+R7115 Coq.Init.Datatypes.false
+R7125 Integers.RLW_S1
+R7135 Coq.Init.Datatypes.false
+R7145 Integers.RLW_S2
+R7155 Coq.Init.Datatypes.true
+R7164 Integers.RLW_S3
+R7174 Coq.Init.Datatypes.true
+R7183 Integers.RLW_S4
+R7193 Coq.Init.Datatypes.true
+R7202 Integers.RLW_S5
+R7212 Coq.Init.Datatypes.true
+R7221 Integers.RLW_S6
+R7231 Coq.Init.Datatypes.true
+R7240 Integers.RLW_Sbad
+R7252 Coq.Init.Datatypes.false
+R7065 Integers.rlw_state
+R7335 Coq.Init.Datatypes.bool
+R7319 Coq.ZArith.BinInt.Z
+R7304 Integers.rlw_state
+R7295 Coq.Init.Datatypes.nat
+R7362 Coq.Init.Datatypes.O
+R7373 Integers.rlw_accepting
+R7393 Coq.Init.Datatypes.S
+R7420 Integers.Z_bin_decomp
+R7463 Integers.rlw_transition
+R7319 Coq.ZArith.BinInt.Z
+R7304 Integers.rlw_state
+R7295 Coq.Init.Datatypes.nat
+R7527 Coq.Init.Datatypes.bool
+R7537 Integers.is_rlw_mask_rec
+R7570 Integers.unsigned
+R7562 Integers.RLW_S0
+R7553 Integers.wordsize
+R7520 Integers.int
+R7628 Coq.Init.Datatypes.bool
+R7655 AST.Ceq
+R7662 Integers.eq
+R7673 AST.Cne
+R7680 Coq.Bool.Bool.negb
+R7686 Integers.eq
+R7698 AST.Clt
+R7705 Integers.lt
+R7716 AST.Cle
+R7723 Coq.Bool.Bool.negb
+R7729 Integers.lt
+R7741 AST.Cgt
+R7748 Integers.lt
+R7759 AST.Cge
+R7766 Coq.Bool.Bool.negb
+R7772 Integers.lt
+R7621 Integers.int
+R7621 Integers.int
+R7603 AST.comparison
+R7833 Coq.Init.Datatypes.bool
+R7860 AST.Ceq
+R7867 Integers.eq
+R7878 AST.Cne
+R7885 Coq.Bool.Bool.negb
+R7891 Integers.eq
+R7903 AST.Clt
+R7910 Integers.ltu
+R7922 AST.Cle
+R7929 Coq.Bool.Bool.negb
+R7935 Integers.ltu
+R7948 AST.Cgt
+R7955 Integers.ltu
+R7967 AST.Cge
+R7974 Coq.Bool.Bool.negb
+R7980 Integers.ltu
+R7826 Integers.int
+R7826 Integers.int
+R7808 AST.comparison
+R8038 Coq.Init.Logic "x = y" type_scope
+R8040 Integers.zero
+R8021 Integers.int
+R8087 Coq.Init.Logic "x <> y" type_scope
+R8090 Integers.zero
+R8070 Integers.int
+R8127 Integers.int
+R8138 Integers.eq
+R8143 Integers.zero
+R8162 Integers.zero
+R8153 Integers.one
+R8120 Integers.int
+R8239 Coq.Init.Logic "x <> y" type_scope
+R8231 Integers.one
+R8242 Integers.zero
+R8326 Coq.Init.Logic "x = y" type_scope
+R8319 Integers.eq
+R8328 Integers.eq
+R8370 Coqlib.zeq
+R8388 Integers.unsigned
+R8375 Integers.unsigned
+R8370 Coqlib.zeq
+R8388 Integers.unsigned
+R8375 Integers.unsigned
+R8430 Coqlib.zeq_true
+R8430 Coqlib.zeq_true
+R8456 Coqlib.zeq_false
+R8456 Coqlib.zeq_false
+R8524 Integers.eq
+R8549 Coq.Init.Logic "x <> y" type_scope
+R8538 Coq.Init.Logic "x = y" type_scope
+R8515 Integers.int
+R8515 Integers.int
+R8589 Integers.eq_dec
+R8589 Integers.eq_dec
+R8628 Coqlib.zeq_true
+R8628 Coqlib.zeq_true
+R8654 Coqlib.zeq_false
+R8654 Coqlib.zeq_false
+R8733 Integers.mkint_eq
+R8733 Integers.mkint_eq
+R8789 Coq.Init.Logic "x = y" type_scope
+R8782 Integers.eq
+R8791 Coq.Init.Datatypes.true
+R8826 Integers.eq_spec
+R8846 Integers.eq
+R8826 Integers.eq_spec
+R8846 Integers.eq
+R8928 Coq.Init.Logic "x = y" type_scope
+R8921 Integers.eq
+R8930 Coq.Init.Datatypes.false
+R8913 Coq.Init.Logic "x <> y" type_scope
+R8966 Integers.eq_spec
+R8986 Integers.eq
+R8966 Integers.eq_spec
+R8986 Integers.eq
+R9050 Coq.ZArith.BinInt "x > y" Z_scope
+R9042 Integers.modulus
+R9086 Coqlib.two_power_nat_pos
+R9086 Coqlib.two_power_nat_pos
+R9124 Integers.modulus_pos
+R9222 Coq.ZArith.BinInt.Z
+R9253 Coq.ZArith.BinInt "x > y" Z_scope
+R9295 Coq.Init.Logic "'exists' x , p" type_scope
+R9307 Coq.Init.Logic "x = y" type_scope
+R9319 Coq.ZArith.BinInt "x + y" Z_scope
+R9311 Coq.ZArith.BinInt "x * y" Z_scope
+R9282 Coq.ZArith.BinInt.Z
+R9282 Coq.ZArith.BinInt.Z
+R9353 Integers.eqmod
+R9449 Integers.eqmod
+R9442 Coq.Init.Logic "x = y" type_scope
+R9492 Integers.eqmod_refl
+R9492 Integers.eqmod_refl
+R9552 Integers.eqmod
+R9539 Integers.eqmod
+R9604 Coq.ZArith.BinInt "- x" Z_scope
+R9604 Coq.ZArith.BinInt "- x" Z_scope
+R9689 Integers.eqmod
+R9676 Integers.eqmod
+R9663 Integers.eqmod
+R9759 Coq.ZArith.BinInt "x + y" Z_scope
+R9759 Coq.ZArith.BinInt "x + y" Z_scope
+R9883 Coq.Init.Logic "x = y" type_scope
+R9865 Coq.ZArith.BinInt "x <= y < z" Z_scope
+R9847 Coq.ZArith.BinInt "x <= y < z" Z_scope
+R9832 Integers.eqmod
+R9936 Coqlib.Zdiv_unique
+R9936 Coqlib.Zdiv_unique
+R9982 Coqlib.Zdiv_small
+R9982 Coqlib.Zdiv_small
+R10092 Coq.Init.Logic "x = y" type_scope
+R10082 Coq.ZArith.Zdiv "x 'mod' y" Z_scope
+R10096 Coq.ZArith.Zdiv "x 'mod' y" Z_scope
+R10067 Integers.eqmod
+R10155 Coq.ZArith.BinInt.Zplus_comm
+R10155 Coq.ZArith.BinInt.Zplus_comm
+R10173 Coq.ZArith.Zdiv.Z_mod_plus
+R10173 Coq.ZArith.Zdiv.Z_mod_plus
+R10226 Integers.eqmod
+R10237 Coq.ZArith.Zdiv "x 'mod' y" Z_scope
+R10281 Coq.ZArith.Zdiv "x / y" Z_scope
+R10281 Coq.ZArith.Zdiv "x / y" Z_scope
+R10302 Coq.ZArith.BinInt.Zmult_comm
+R10302 Coq.ZArith.BinInt.Zmult_comm
+R10320 Coq.ZArith.Zdiv.Z_div_mod_eq
+R10320 Coq.ZArith.Zdiv.Z_div_mod_eq
+R10407 Integers.eqmod
+R10424 Coq.ZArith.BinInt "x + y" Z_scope
+R10416 Coq.ZArith.BinInt "x + y" Z_scope
+R10394 Integers.eqmod
+R10381 Integers.eqmod
+R10509 Coq.ZArith.BinInt "x + y" Z_scope
+R10509 Coq.ZArith.BinInt "x + y" Z_scope
+R10572 Integers.eqmod
+R10584 Coq.ZArith.BinInt "- x" Z_scope
+R10579 Coq.ZArith.BinInt "- x" Z_scope
+R10559 Integers.eqmod
+R10630 Coq.ZArith.BinInt "- x" Z_scope
+R10630 Coq.ZArith.BinInt "- x" Z_scope
+R10721 Integers.eqmod
+R10738 Coq.ZArith.BinInt "x - y" Z_scope
+R10730 Coq.ZArith.BinInt "x - y" Z_scope
+R10708 Integers.eqmod
+R10695 Integers.eqmod
+R10823 Coq.ZArith.BinInt "x - y" Z_scope
+R10823 Coq.ZArith.BinInt "x - y" Z_scope
+R10904 Integers.eqmod
+R10921 Coq.ZArith.BinInt "x * y" Z_scope
+R10913 Coq.ZArith.BinInt "x * y" Z_scope
+R10891 Integers.eqmod
+R10878 Integers.eqmod
+R11030 Coq.ZArith.BinInt "x + y" Z_scope
+R11021 Coq.ZArith.BinInt "x + y" Z_scope
+R11013 Coq.ZArith.BinInt "x * y" Z_scope
+R11008 Coq.ZArith.BinInt "x * y" Z_scope
+R11025 Coq.ZArith.BinInt "x * y" Z_scope
+R11035 Coq.ZArith.BinInt "x * y" Z_scope
+R11030 Coq.ZArith.BinInt "x + y" Z_scope
+R11021 Coq.ZArith.BinInt "x + y" Z_scope
+R11013 Coq.ZArith.BinInt "x * y" Z_scope
+R11008 Coq.ZArith.BinInt "x * y" Z_scope
+R11025 Coq.ZArith.BinInt "x * y" Z_scope
+R11035 Coq.ZArith.BinInt "x * y" Z_scope
+R11123 Integers.eqmod
+R11129 Integers.modulus
+R11165 Integers.eqm
+R11181 Integers.eqmod_refl
+R11192 Integers.modulus
+R11215 Integers.eqm_refl
+R11272 Integers.eqm
+R11265 Coq.Init.Logic "x = y" type_scope
+R11288 Integers.eqmod_refl2
+R11300 Integers.modulus
+R11323 Integers.eqm_refl2
+R11379 Integers.eqm
+R11368 Integers.eqm
+R11395 Integers.eqmod_sym
+R11405 Integers.modulus
+R11428 Integers.eqm_sym
+R11497 Integers.eqm
+R11486 Integers.eqm
+R11475 Integers.eqm
+R11513 Integers.eqmod_trans
+R11525 Integers.modulus
+R11548 Integers.eqm_trans
+R11616 Coq.Init.Logic "x = y" type_scope
+R11609 Integers.repr
+R11618 Integers.repr
+R11598 Integers.eqm
+R11662 Integers.mkint_eq
+R11662 Integers.mkint_eq
+R11681 Integers.eqmod_mod_eq
+R11681 Integers.eqmod_mod_eq
+R11763 Integers.eqm
+R11770 Integers.unsigned
+R11780 Integers.repr
+R11850 Integers.eqmod_mod
+R11850 Integers.eqmod_mod
+R11895 Integers.eqm_unsigned_repr
+R11973 Integers.eqm
+R11978 Integers.unsigned
+R11988 Integers.repr
+R11962 Integers.eqm
+R12023 Integers.eqm_trans
+R12023 Integers.eqm_trans
+R12050 Integers.eqm_sym
+R12050 Integers.eqm_sym
+R12065 Integers.eqm_unsigned_repr
+R12065 Integers.eqm_unsigned_repr
+R12108 Integers.eqm_unsigned_repr_l
+R12188 Integers.eqm
+R12195 Integers.unsigned
+R12205 Integers.repr
+R12177 Integers.eqm
+R12238 Integers.eqm_trans
+R12238 Integers.eqm_trans
+R12270 Integers.eqm_unsigned_repr
+R12270 Integers.eqm_unsigned_repr
+R12308 Integers.eqm_unsigned_repr_r
+R12375 Integers.eqm
+R12391 Integers.unsigned
+R12380 Integers.signed
+R12450 Integers.unsigned
+R12450 Integers.unsigned
+R12471 Coqlib.zlt
+R12477 Integers.half_modulus
+R12471 Coqlib.zlt
+R12477 Integers.half_modulus
+R12507 Integers.eqmod_refl
+R12507 Integers.eqmod_refl
+R12637 Coq.Init.Logic "x = y" type_scope
+R12617 Coq.ZArith.BinInt "x <= y < z" Z_scope
+R12624 Integers.modulus
+R12597 Coq.ZArith.BinInt "x <= y < z" Z_scope
+R12604 Integers.modulus
+R12584 Integers.eqm
+R12649 Integers.eqmod_small_eq
+R12664 Integers.modulus
+R12687 Integers.eqm_small_eq
+R12763 Integers.eqm
+R12778 Coq.ZArith.BinInt "x + y" Z_scope
+R12770 Coq.ZArith.BinInt "x + y" Z_scope
+R12752 Integers.eqm
+R12741 Integers.eqm
+R12791 Integers.eqmod_add
+R12801 Integers.modulus
+R12824 Integers.eqm_add
+R12880 Integers.eqm
+R12890 Coq.ZArith.BinInt "- x" Z_scope
+R12885 Coq.ZArith.BinInt "- x" Z_scope
+R12869 Integers.eqm
+R12902 Integers.eqmod_neg
+R12912 Integers.modulus
+R12935 Integers.eqm_neg
+R13006 Integers.eqm
+R13021 Coq.ZArith.BinInt "x - y" Z_scope
+R13013 Coq.ZArith.BinInt "x - y" Z_scope
+R12995 Integers.eqm
+R12984 Integers.eqm
+R13034 Integers.eqmod_sub
+R13044 Integers.modulus
+R13067 Integers.eqm_sub
+R13139 Integers.eqm
+R13154 Coq.ZArith.BinInt "x * y" Z_scope
+R13146 Coq.ZArith.BinInt "x * y" Z_scope
+R13128 Integers.eqm
+R13117 Integers.eqm
+R13167 Integers.eqmod_mult
+R13178 Integers.modulus
+R13201 Integers.eqm_mult
+R13268 Coq.ZArith.BinInt "x <= y < z" Z_scope
+R13275 Integers.modulus
+R13252 Integers.in_range
+R13319 Coq.Init.Logic "A /\ B" type_scope
+R13314 Coq.ZArith.BinInt "x >= y" Z_scope
+R13324 Coq.ZArith.BinInt "x < y" Z_scope
+R13326 Integers.modulus
+R13319 Coq.Init.Logic "A /\ B" type_scope
+R13314 Coq.ZArith.BinInt "x >= y" Z_scope
+R13324 Coq.ZArith.BinInt "x < y" Z_scope
+R13326 Integers.modulus
+R13393 Coq.ZArith.BinInt "x ?= y" Z_scope
+R13393 Coq.ZArith.BinInt "x ?= y" Z_scope
+R13414 Coq.ZArith.BinInt "x ?= y" Z_scope
+R13417 Integers.modulus
+R13414 Coq.ZArith.BinInt "x ?= y" Z_scope
+R13417 Integers.modulus
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R13501 Coq.ZArith.BinInt "x ?= y" Z_scope
+R13504 Integers.modulus
+R13501 Coq.ZArith.BinInt "x ?= y" Z_scope
+R13504 Integers.modulus
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R13610 Coq.ZArith.BinInt "x <= y < z" Z_scope
+R13613 Integers.unsigned
+R13613 Integers.unsigned
+R13626 Integers.modulus
+R13672 Integers.in_range_range
+R13672 Integers.in_range_range
+R13712 Integers.unsigned_range
+R13775 Coq.ZArith.BinInt "x <= y <= z" Z_scope
+R13778 Integers.unsigned
+R13778 Integers.unsigned
+R13792 Integers.max_unsigned
+R13858 Integers.unsigned_range
+R13858 Integers.unsigned_range
+R13902 Integers.unsigned_range_2
+R13972 Coq.ZArith.BinInt "x <= y <= z" Z_scope
+R13961 Integers.min_signed
+R13975 Integers.signed
+R13975 Integers.signed
+R13987 Integers.max_signed
+R14046 Integers.unsigned_range
+R14046 Integers.unsigned_range
+R14075 Integers.unsigned
+R14075 Integers.unsigned
+R14104 Coqlib.zlt
+R14110 Integers.half_modulus
+R14104 Coqlib.zlt
+R14110 Integers.half_modulus
+R14172 Coq.ZArith.BinInt "x < y" Z_scope
+R14161 Integers.min_signed
+R14172 Coq.ZArith.BinInt "x < y" Z_scope
+R14161 Integers.min_signed
+R14259 Coq.ZArith.BinInt "x * y" Z_scope
+R14261 Integers.half_modulus
+R14243 Integers.modulus
+R14259 Coq.ZArith.BinInt "x * y" Z_scope
+R14261 Integers.half_modulus
+R14243 Integers.modulus
+R14301 Coq.ZArith.BinInt "x * y" Z_scope
+R14303 Integers.half_modulus
+R14285 Integers.modulus
+R14301 Coq.ZArith.BinInt "x * y" Z_scope
+R14303 Integers.half_modulus
+R14285 Integers.modulus
+R14391 Coq.Init.Logic "x = y" type_scope
+R14373 Integers.repr
+R14379 Integers.unsigned
+R14443 Integers.mkint_eq
+R14443 Integers.mkint_eq
+R14461 Coqlib.Zmod_small
+R14461 Coqlib.Zmod_small
+R14479 Integers.in_range_range
+R14479 Integers.in_range_range
+R14519 Integers.repr_unsigned
+R14588 Coq.Init.Logic "x = y" type_scope
+R14572 Integers.repr
+R14578 Integers.signed
+R14624 Integers.repr
+R14630 Integers.unsigned
+R14624 Integers.repr
+R14630 Integers.unsigned
+R14653 Integers.eqm_samerepr
+R14653 Integers.eqm_samerepr
+R14673 Integers.eqm_signed_unsigned
+R14673 Integers.eqm_signed_unsigned
+R14728 Integers.repr_unsigned
+R14829 Coq.Init.Logic "x = y" type_scope
+R14811 Integers.unsigned
+R14821 Integers.repr
+R14787 Coq.ZArith.BinInt "x <= y <= z" Z_scope
+R14795 Integers.max_unsigned
+R14890 Coqlib.Zmod_small
+R14890 Coqlib.Zmod_small
+R14953 Integers.unsigned_repr
+R15057 Coq.Init.Logic "x = y" type_scope
+R15041 Integers.signed
+R15049 Integers.repr
+R15019 Coq.ZArith.BinInt "x <= y <= z" Z_scope
+R15008 Integers.min_signed
+R15027 Integers.max_signed
+R15100 Coqlib.zle
+R15100 Coqlib.zle
+R15128 Integers.unsigned
+R15138 Integers.repr
+R15128 Integers.unsigned
+R15138 Integers.repr
+R15165 Coqlib.zlt_true
+R15165 Coqlib.zlt_true
+R15230 Integers.unsigned_repr
+R15230 Integers.unsigned_repr
+R15282 Integers.max_signed
+R15267 Coq.ZArith.Zorder.Zle_trans
+R15282 Integers.max_signed
+R15267 Coq.ZArith.Zorder.Zle_trans
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R15349 Coq.ZArith.BinInt "x + y" Z_scope
+R15351 Integers.modulus
+R15349 Coq.ZArith.BinInt "x + y" Z_scope
+R15351 Integers.modulus
+R15372 Integers.repr
+R15386 Integers.repr
+R15372 Integers.repr
+R15386 Integers.repr
+R15407 Integers.unsigned
+R15417 Integers.repr
+R15407 Integers.unsigned
+R15417 Integers.repr
+R15446 Coqlib.zlt_false
+R15446 Coqlib.zlt_false
+R15549 Coq.ZArith.BinInt "x + y" Z_scope
+R15536 Integers.half_modulus
+R15551 Integers.half_modulus
+R15522 Integers.modulus
+R15549 Coq.ZArith.BinInt "x + y" Z_scope
+R15536 Integers.half_modulus
+R15551 Integers.half_modulus
+R15522 Integers.modulus
+R15591 Integers.unsigned_repr
+R15591 Integers.unsigned_repr
+R15705 Coq.ZArith.BinInt "x + y" Z_scope
+R15692 Integers.half_modulus
+R15707 Integers.half_modulus
+R15678 Integers.modulus
+R15705 Coq.ZArith.BinInt "x + y" Z_scope
+R15692 Integers.half_modulus
+R15707 Integers.half_modulus
+R15678 Integers.modulus
+R15740 Integers.eqm_samerepr
+R15740 Integers.eqm_samerepr
+R15865 Coq.Init.Logic "x = y" type_scope
+R15857 Integers.add
+R15867 Integers.repr
+R15884 Coq.ZArith.BinInt "x + y" Z_scope
+R15873 Integers.unsigned
+R15886 Integers.unsigned
+R15973 Coq.Init.Logic "x = y" type_scope
+R15965 Integers.add
+R15975 Integers.repr
+R15990 Coq.ZArith.BinInt "x + y" Z_scope
+R15981 Integers.signed
+R15992 Integers.signed
+R16029 Integers.add_unsigned
+R16029 Integers.add_unsigned
+R16049 Integers.eqm_samerepr
+R16049 Integers.eqm_samerepr
+R16071 Integers.eqm_add
+R16086 Integers.eqm_sym
+R16101 Integers.eqm_signed_unsigned
+R16071 Integers.eqm_add
+R16086 Integers.eqm_sym
+R16086 Integers.eqm_sym
+R16101 Integers.eqm_signed_unsigned
+R16101 Integers.eqm_signed_unsigned
+R16168 Coq.Init.Logic "x = y" type_scope
+R16160 Integers.add
+R16170 Integers.add
+R16265 Coq.Init.Logic "x = y" type_scope
+R16254 Integers.add
+R16260 Integers.zero
+R16314 Integers.unsigned
+R16324 Integers.repr
+R16314 Integers.unsigned
+R16324 Integers.repr
+R16351 Coq.ZArith.BinInt.Zplus_0_r
+R16351 Coq.ZArith.BinInt.Zplus_0_r
+R16368 Integers.repr_unsigned
+R16368 Integers.repr_unsigned
+R16438 Coq.Init.Logic "x = y" type_scope
+R16422 Integers.add
+R16427 Integers.add
+R16440 Integers.add
+R16447 Integers.add
+R16499 Integers.unsigned
+R16499 Integers.unsigned
+R16525 Integers.unsigned
+R16525 Integers.unsigned
+R16551 Integers.unsigned
+R16551 Integers.unsigned
+R16572 Integers.eqm_samerepr
+R16572 Integers.eqm_samerepr
+R16619 Coq.ZArith.BinInt "x + y" Z_scope
+R16615 Coq.ZArith.BinInt "x + y" Z_scope
+R16595 Integers.eqm_trans
+R16619 Coq.ZArith.BinInt "x + y" Z_scope
+R16615 Coq.ZArith.BinInt "x + y" Z_scope
+R16595 Integers.eqm_trans
+R16659 Coq.ZArith.BinInt.Zplus_assoc
+R16659 Coq.ZArith.BinInt.Zplus_assoc
+R16744 Coq.Init.Logic "x = y" type_scope
+R16728 Integers.add
+R16735 Integers.add
+R16746 Integers.add
+R16753 Integers.add
+R16789 Integers.add_commut
+R16789 Integers.add_commut
+R16817 Integers.add_assoc
+R16817 Integers.add_assoc
+R16834 Integers.add_commut
+R16834 Integers.add_commut
+R16899 Coq.Init.Logic "x = y" type_scope
+R16885 Integers.add
+R16892 Integers.neg
+R16901 Integers.zero
+R16953 Integers.eqm_samerepr
+R16953 Integers.eqm_samerepr
+R16996 Coq.ZArith.BinInt "x + y" Z_scope
+R16985 Integers.unsigned
+R16999 Coq.ZArith.BinInt "- x" Z_scope
+R17002 Integers.unsigned
+R16996 Coq.ZArith.BinInt "x + y" Z_scope
+R16985 Integers.unsigned
+R16999 Coq.ZArith.BinInt "- x" Z_scope
+R17002 Integers.unsigned
+R17119 Coq.Init.Logic "x = y" type_scope
+R17106 Integers.neg
+R17111 Integers.repr
+R17121 Integers.repr
+R17127 Coq.ZArith.BinInt "- x" Z_scope
+R17167 Integers.eqm_samerepr
+R17167 Integers.eqm_samerepr
+R17230 Coq.Init.Logic "x = y" type_scope
+R17221 Integers.neg
+R17225 Integers.zero
+R17232 Integers.zero
+R17280 Integers.mkint_eq
+R17280 Integers.mkint_eq
+R17350 Coq.Init.Logic "x = y" type_scope
+R17337 Integers.neg
+R17341 Integers.add
+R17352 Integers.add
+R17365 Integers.neg
+R17357 Integers.neg
+R17413 Integers.eqm_samerepr
+R17413 Integers.eqm_samerepr
+R17451 Coq.ZArith.BinInt "- x" Z_scope
+R17465 Coq.ZArith.BinInt "x + y" Z_scope
+R17454 Integers.unsigned
+R17467 Integers.unsigned
+R17435 Integers.eqm_trans
+R17451 Coq.ZArith.BinInt "- x" Z_scope
+R17465 Coq.ZArith.BinInt "x + y" Z_scope
+R17454 Integers.unsigned
+R17467 Integers.unsigned
+R17435 Integers.eqm_trans
+R17510 Coq.ZArith.BinInt "- x" Z_scope
+R17524 Coq.ZArith.BinInt "x + y" Z_scope
+R17513 Integers.unsigned
+R17526 Integers.unsigned
+R17563 Coq.ZArith.BinInt "x + y" Z_scope
+R17551 Coq.ZArith.BinInt "- x" Z_scope
+R17553 Integers.unsigned
+R17568 Coq.ZArith.BinInt "- x" Z_scope
+R17570 Integers.unsigned
+R17510 Coq.ZArith.BinInt "- x" Z_scope
+R17524 Coq.ZArith.BinInt "x + y" Z_scope
+R17513 Integers.unsigned
+R17526 Integers.unsigned
+R17563 Coq.ZArith.BinInt "x + y" Z_scope
+R17551 Coq.ZArith.BinInt "- x" Z_scope
+R17553 Integers.unsigned
+R17568 Coq.ZArith.BinInt "- x" Z_scope
+R17570 Integers.unsigned
+R17689 Coq.Init.Logic "x = y" type_scope
+R17678 Integers.sub
+R17684 Integers.zero
+R17731 Integers.unsigned
+R17740 Integers.zero
+R17731 Integers.unsigned
+R17740 Integers.zero
+R17776 Coq.ZArith.BinInt "x - y" Z_scope
+R17765 Integers.unsigned
+R17787 Integers.unsigned
+R17776 Coq.ZArith.BinInt "x - y" Z_scope
+R17765 Integers.unsigned
+R17787 Integers.unsigned
+R17806 Integers.repr_unsigned
+R17806 Integers.repr_unsigned
+R17877 Coq.Init.Logic "x = y" type_scope
+R17866 Integers.sub
+R17870 Integers.zero
+R17879 Integers.neg
+R17928 Integers.unsigned
+R17937 Integers.zero
+R17928 Integers.unsigned
+R17937 Integers.zero
+R17964 Coq.ZArith.BinInt "x - y" Z_scope
+R17966 Integers.unsigned
+R17984 Coq.ZArith.BinInt "- x" Z_scope
+R17986 Integers.unsigned
+R17964 Coq.ZArith.BinInt "x - y" Z_scope
+R17966 Integers.unsigned
+R17984 Coq.ZArith.BinInt "- x" Z_scope
+R17986 Integers.unsigned
+R18061 Coq.Init.Logic "x = y" type_scope
+R18053 Integers.sub
+R18063 Integers.add
+R18070 Integers.neg
+R18139 Coq.ZArith.BinInt "x - y" Z_scope
+R18128 Integers.unsigned
+R18141 Integers.unsigned
+R18175 Coq.ZArith.BinInt "x + y" Z_scope
+R18164 Integers.unsigned
+R18178 Coq.ZArith.BinInt "- x" Z_scope
+R18180 Integers.unsigned
+R18139 Coq.ZArith.BinInt "x - y" Z_scope
+R18128 Integers.unsigned
+R18141 Integers.unsigned
+R18175 Coq.ZArith.BinInt "x + y" Z_scope
+R18164 Integers.unsigned
+R18178 Coq.ZArith.BinInt "- x" Z_scope
+R18180 Integers.unsigned
+R18202 Integers.eqm_samerepr
+R18202 Integers.eqm_samerepr
+R18281 Coq.Init.Logic "x = y" type_scope
+R18273 Integers.sub
+R18283 Integers.zero
+R18338 Coq.ZArith.BinInt "x - y" Z_scope
+R18327 Integers.unsigned
+R18340 Integers.unsigned
+R18338 Coq.ZArith.BinInt "x - y" Z_scope
+R18327 Integers.unsigned
+R18340 Integers.unsigned
+R18437 Coq.Init.Logic "x = y" type_scope
+R18421 Integers.sub
+R18426 Integers.add
+R18439 Integers.add
+R18444 Integers.sub
+R18488 Integers.sub_add_opp
+R18488 Integers.sub_add_opp
+R18488 Integers.sub_add_opp
+R18488 Integers.sub_add_opp
+R18519 Integers.add_assoc
+R18519 Integers.add_assoc
+R18519 Integers.add_assoc
+R18519 Integers.add_assoc
+R18543 Integers.add_commut
+R18543 Integers.add_commut
+R18610 Coq.Init.Logic "x = y" type_scope
+R18594 Integers.sub
+R18601 Integers.add
+R18612 Integers.add
+R18627 Integers.neg
+R18617 Integers.sub
+R18667 Integers.sub_add_opp
+R18667 Integers.sub_add_opp
+R18667 Integers.sub_add_opp
+R18667 Integers.sub_add_opp
+R18690 Integers.neg_add_distr
+R18690 Integers.neg_add_distr
+R18713 Integers.add_permut
+R18713 Integers.add_permut
+R18731 Integers.add_commut
+R18731 Integers.add_commut
+R18825 Coq.Init.Logic "x = y" type_scope
+R18817 Integers.mul
+R18827 Integers.mul
+R18924 Coq.Init.Logic "x = y" type_scope
+R18913 Integers.mul
+R18919 Integers.zero
+R18926 Integers.zero
+R18969 Integers.unsigned
+R18978 Integers.zero
+R18969 Integers.unsigned
+R18978 Integers.zero
+R19063 Coq.Init.Logic "x = y" type_scope
+R19053 Integers.mul
+R19059 Integers.one
+R19105 Integers.unsigned
+R19114 Integers.one
+R19105 Integers.unsigned
+R19114 Integers.one
+R19143 Integers.repr
+R19149 Integers.unsigned
+R19143 Integers.repr
+R19149 Integers.unsigned
+R19184 Integers.repr_unsigned
+R19184 Integers.repr_unsigned
+R19254 Coq.Init.Logic "x = y" type_scope
+R19238 Integers.mul
+R19243 Integers.mul
+R19256 Integers.mul
+R19263 Integers.mul
+R19315 Integers.unsigned
+R19315 Integers.unsigned
+R19341 Integers.unsigned
+R19341 Integers.unsigned
+R19367 Integers.unsigned
+R19367 Integers.unsigned
+R19388 Integers.eqm_samerepr
+R19388 Integers.eqm_samerepr
+R19432 Coq.ZArith.BinInt "x * y" Z_scope
+R19428 Coq.ZArith.BinInt "x * y" Z_scope
+R19408 Integers.eqm_trans
+R19432 Coq.ZArith.BinInt "x * y" Z_scope
+R19428 Coq.ZArith.BinInt "x * y" Z_scope
+R19408 Integers.eqm_trans
+R19472 Coq.ZArith.BinInt.Zmult_assoc
+R19472 Coq.ZArith.BinInt.Zmult_assoc
+R19564 Coq.Init.Logic "x = y" type_scope
+R19548 Integers.mul
+R19553 Integers.add
+R19566 Integers.add
+R19581 Integers.mul
+R19571 Integers.mul
+R19633 Integers.eqm_samerepr
+R19633 Integers.eqm_samerepr
+R19660 Integers.unsigned
+R19660 Integers.unsigned
+R19686 Integers.unsigned
+R19686 Integers.unsigned
+R19712 Integers.unsigned
+R19712 Integers.unsigned
+R19757 Coq.ZArith.BinInt "x * y" Z_scope
+R19753 Coq.ZArith.BinInt "x + y" Z_scope
+R19733 Integers.eqm_trans
+R19757 Coq.ZArith.BinInt "x * y" Z_scope
+R19753 Coq.ZArith.BinInt "x + y" Z_scope
+R19733 Integers.eqm_trans
+R19803 Coq.ZArith.BinInt "x * y" Z_scope
+R19799 Coq.ZArith.BinInt "x + y" Z_scope
+R19825 Coq.ZArith.BinInt "x + y" Z_scope
+R19820 Coq.ZArith.BinInt "x * y" Z_scope
+R19830 Coq.ZArith.BinInt "x * y" Z_scope
+R19803 Coq.ZArith.BinInt "x * y" Z_scope
+R19799 Coq.ZArith.BinInt "x + y" Z_scope
+R19825 Coq.ZArith.BinInt "x + y" Z_scope
+R19820 Coq.ZArith.BinInt "x * y" Z_scope
+R19830 Coq.ZArith.BinInt "x * y" Z_scope
+R19926 Coq.Init.Logic "x = y" type_scope
+R19910 Integers.mul
+R19917 Integers.add
+R19928 Integers.add
+R19943 Integers.mul
+R19933 Integers.mul
+R19978 Integers.mul_commut
+R19978 Integers.mul_commut
+R19998 Integers.mul_add_distr_l
+R19998 Integers.mul_add_distr_l
+R20031 Integers.mul_commut
+R20031 Integers.mul_commut
+R20031 Integers.mul_commut
+R20098 Coq.Init.Logic "x = y" type_scope
+R20085 Integers.neg
+R20089 Integers.mul
+R20100 Integers.mul
+R20105 Integers.neg
+R20163 Coq.Init.Logic "x = y" type_scope
+R20150 Integers.neg
+R20154 Integers.mul
+R20165 Integers.mul
+R20172 Integers.neg
+R20326 Coq.Init.Logic "x = y" type_scope
+R20268 Integers.Z_shift_add
+R20304 Coq.Init.Datatypes.snd
+R20309 Integers.Z_bin_decomp
+R20281 Coq.Init.Datatypes.fst
+R20286 Integers.Z_bin_decomp
+R20469 Coq.Init.Logic "x = y" type_scope
+R20465 Coq.ZArith.BinInt "x - y" Z_scope
+R20455 Coq.ZArith.BinInt "x * y" Z_scope
+R20460 Coq.ZArith.BinInt "x + y" Z_scope
+R20477 Coq.ZArith.BinInt "x + y" Z_scope
+R20473 Coq.ZArith.BinInt "x * y" Z_scope
+R20469 Coq.Init.Logic "x = y" type_scope
+R20465 Coq.ZArith.BinInt "x - y" Z_scope
+R20455 Coq.ZArith.BinInt "x * y" Z_scope
+R20460 Coq.ZArith.BinInt "x + y" Z_scope
+R20477 Coq.ZArith.BinInt "x + y" Z_scope
+R20473 Coq.ZArith.BinInt "x * y" Z_scope
+R20514 Coq.ZArith.BinInt.Zpos
+R20514 Coq.ZArith.BinInt.Zpos
+R20645 Coq.Init.Logic "A /\ B" type_scope
+R20640 Coq.Init.Logic "x = y" type_scope
+R20651 Coq.Init.Logic "x = y" type_scope
+R20614 Coq.Init.Logic "x = y" type_scope
+R20596 Integers.Z_shift_add
+R20616 Integers.Z_shift_add
+R20913 Coq.Init.Logic "x = y" type_scope
+R20898 Integers.Z_of_bits
+R20915 Integers.Z_of_bits
+R20885 Coq.Init.Logic "x = y" type_scope
+R20859 Coq.ZArith.BinInt "x <= y < z" Z_scope
+R20866 Coq.ZArith.BinInt.Z_of_nat
+R20993 Coq.ZArith.Znat.inj_S
+R20993 Coq.ZArith.Znat.inj_S
+R21121 Integers.eqm
+R21126 Integers.Z_of_bits
+R21146 Integers.bits_of_Z
+R21156 Integers.wordsize
+R21136 Integers.wordsize
+R21201 Coq.Init.Logic "'exists' x , p" type_scope
+R21243 Coq.Init.Logic "x = y" type_scope
+R21215 Integers.Z_of_bits
+R21228 Integers.bits_of_Z
+R21265 Coq.ZArith.BinInt "x + y" Z_scope
+R21247 Coq.ZArith.BinInt "x * y" Z_scope
+R21249 Coq.ZArith.Zpower.two_power_nat
+R21201 Coq.Init.Logic "'exists' x , p" type_scope
+R21243 Coq.Init.Logic "x = y" type_scope
+R21215 Integers.Z_of_bits
+R21228 Integers.bits_of_Z
+R21265 Coq.ZArith.BinInt "x + y" Z_scope
+R21247 Coq.ZArith.BinInt "x * y" Z_scope
+R21249 Coq.ZArith.Zpower.two_power_nat
+R21304 Coqlib.two_power_nat_O
+R21304 Coqlib.two_power_nat_O
+R21336 Coq.ZArith.BinInt "- x" Z_scope
+R21336 Coq.ZArith.BinInt "- x" Z_scope
+R21358 Coq.ZArith.Zpower.two_power_nat_S
+R21358 Coq.ZArith.Zpower.two_power_nat_S
+R21392 Integers.Z_bin_decomp
+R21392 Integers.Z_bin_decomp
+R21444 Integers.Z_of_bits
+R21469 Coqlib.zeq
+R21476 Coq.ZArith.BinInt "x + y" Z_scope
+R21495 Integers.bits_of_Z
+R21516 Coq.ZArith.BinInt "x - y" Z_scope
+R21512 Coq.ZArith.BinInt "x + y" Z_scope
+R21534 Integers.Z_of_bits
+R21547 Integers.bits_of_Z
+R21444 Integers.Z_of_bits
+R21469 Coqlib.zeq
+R21476 Coq.ZArith.BinInt "x + y" Z_scope
+R21495 Integers.bits_of_Z
+R21516 Coq.ZArith.BinInt "x - y" Z_scope
+R21512 Coq.ZArith.BinInt "x + y" Z_scope
+R21534 Integers.Z_of_bits
+R21547 Integers.bits_of_Z
+R21622 Integers.Z_shift_add_bin_decomp
+R21622 Integers.Z_shift_add_bin_decomp
+R21730 Integers.Z_of_bits_exten
+R21730 Integers.Z_of_bits_exten
+R21765 Coqlib.zeq_false
+R21765 Coqlib.zeq_false
+R21816 Integers.wordsize
+R21816 Integers.wordsize
+R21887 Coq.Init.Logic "x = y" type_scope
+R21871 Integers.bits_of_Z
+R21889 Coq.Init.Datatypes.false
+R21949 Coqlib.zeq
+R21949 Coqlib.zeq
+R22047 Coq.Init.Logic "x = y" type_scope
+R22022 Integers.Z_bin_decomp
+R22042 Coq.ZArith.BinInt "x - y" Z_scope
+R22038 Coq.ZArith.BinInt "x * y" Z_scope
+R22049 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R22050 Coq.Init.Datatypes.true
+R22058 Coq.ZArith.BinInt "x - y" Z_scope
+R22089 Integers.Z_bin_decomp
+R22109 Coq.ZArith.BinInt "x - y" Z_scope
+R22105 Coq.ZArith.BinInt "x * y" Z_scope
+R22089 Integers.Z_bin_decomp
+R22109 Coq.ZArith.BinInt "x - y" Z_scope
+R22105 Coq.ZArith.BinInt "x * y" Z_scope
+R22145 Integers.Z_shift_add_bin_decomp
+R22175 Coq.ZArith.BinInt "x - y" Z_scope
+R22171 Coq.ZArith.BinInt "x * y" Z_scope
+R22145 Integers.Z_shift_add_bin_decomp
+R22175 Coq.ZArith.BinInt "x - y" Z_scope
+R22171 Coq.ZArith.BinInt "x * y" Z_scope
+R22220 Coq.ZArith.BinInt "x - y" Z_scope
+R22216 Coq.ZArith.BinInt "x * y" Z_scope
+R22231 Integers.Z_shift_add
+R22251 Coq.ZArith.BinInt "x - y" Z_scope
+R22243 Coq.Init.Datatypes.true
+R22220 Coq.ZArith.BinInt "x - y" Z_scope
+R22216 Coq.ZArith.BinInt "x * y" Z_scope
+R22231 Integers.Z_shift_add
+R22251 Coq.ZArith.BinInt "x - y" Z_scope
+R22243 Coq.Init.Datatypes.true
+R22273 Integers.Z_shift_add_inj
+R22273 Integers.Z_shift_add_inj
+R22456 Coq.Init.Logic "x = y" type_scope
+R22420 Integers.bits_of_Z
+R22449 Coq.ZArith.BinInt "x - y" Z_scope
+R22433 Coq.ZArith.Zpower.two_power_nat
+R22458 Coq.Init.Datatypes.true
+R22396 Coq.ZArith.BinInt "x <= y < z" Z_scope
+R22403 Coq.ZArith.BinInt.Z_of_nat
+R22553 Integers.bits_of_Z
+R22553 Integers.bits_of_Z
+R22574 Coq.ZArith.Zpower.two_power_nat_S
+R22574 Coq.ZArith.Zpower.two_power_nat_S
+R22599 Integers.Z_bin_decomp_2xm1
+R22599 Integers.Z_bin_decomp_2xm1
+R22628 Coq.ZArith.Znat.inj_S
+R22628 Coq.ZArith.Znat.inj_S
+R22646 Coqlib.zeq
+R22646 Coqlib.zeq
+R22771 Coq.Init.Logic "x = y" type_scope
+R22740 Integers.Z_bin_decomp
+R22754 Integers.Z_shift_add
+R22773 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R22806 Integers.Z_bin_decomp
+R22820 Integers.Z_shift_add
+R22806 Integers.Z_bin_decomp
+R22820 Integers.Z_shift_add
+R22870 Integers.Z_shift_add_bin_decomp
+R22894 Integers.Z_shift_add
+R22870 Integers.Z_shift_add_bin_decomp
+R22894 Integers.Z_shift_add
+R22933 Coq.Init.Datatypes.fst
+R22944 Coq.Init.Datatypes.snd
+R22933 Coq.Init.Datatypes.fst
+R22944 Coq.Init.Datatypes.snd
+R22964 Integers.Z_shift_add_inj
+R22964 Integers.Z_shift_add_inj
+R23118 Coq.Init.Logic "x = y" type_scope
+R23088 Integers.bits_of_Z
+R23101 Integers.Z_of_bits
+R23065 Coq.ZArith.BinInt "x <= y < z" Z_scope
+R23072 Coq.ZArith.BinInt.Z_of_nat
+R23206 Integers.Z_bin_decomp_shift_add
+R23206 Integers.Z_bin_decomp_shift_add
+R23238 Coqlib.zeq
+R23238 Coqlib.zeq
+R23306 Coq.ZArith.Znat.inj_S
+R23306 Coq.ZArith.Znat.inj_S
+R23370 Coq.ZArith.BinInt "x <= y < z" Z_scope
+R23373 Integers.Z_of_bits
+R23383 Integers.wordsize
+R23373 Integers.Z_of_bits
+R23383 Integers.wordsize
+R23396 Integers.modulus
+R23457 Integers.wordsize
+R23457 Integers.wordsize
+R23505 Coqlib.two_power_nat_O
+R23505 Coqlib.two_power_nat_O
+R23539 Coq.ZArith.Zpower.two_power_nat_S
+R23539 Coq.ZArith.Zpower.two_power_nat_S
+R23587 Coq.ZArith.BinInt "x + y" Z_scope
+R23587 Coq.ZArith.BinInt "x + y" Z_scope
+R23607 Integers.Z_of_bits
+R23634 Coq.ZArith.BinInt "x + y" Z_scope
+R23607 Integers.Z_of_bits
+R23634 Coq.ZArith.BinInt "x + y" Z_scope
+R23712 Integers.Z_of_bits_range
+R23775 Coq.ZArith.BinInt "x <= y <= z" Z_scope
+R23778 Integers.Z_of_bits
+R23788 Integers.wordsize
+R23778 Integers.Z_of_bits
+R23788 Integers.wordsize
+R23802 Integers.max_unsigned
+R23868 Integers.Z_of_bits_range
+R23868 Integers.Z_of_bits_range
+R23913 Integers.Z_of_bits_range_2
+R24003 Coq.Init.Logic "x = y" type_scope
+R23987 Integers.bits_of_Z
+R24005 Coq.Init.Datatypes.false
+R23980 Coq.ZArith.BinInt "x < y" Z_scope
+R24076 Integers.Z_bin_decomp
+R24076 Integers.Z_bin_decomp
+R24101 Coqlib.zeq_false
+R24101 Coqlib.zeq_false
+R24219 Coq.Init.Logic "x = y" type_scope
+R24203 Integers.bits_of_Z
+R24221 Coq.Init.Datatypes.false
+R24186 Coq.ZArith.BinInt "x >= y" Z_scope
+R24189 Coq.ZArith.BinInt.Z_of_nat
+R24292 Integers.Z_bin_decomp
+R24292 Integers.Z_bin_decomp
+R24317 Coqlib.zeq_false
+R24317 Coqlib.zeq_false
+R24349 Coq.ZArith.Znat.inj_S
+R24349 Coq.ZArith.Znat.inj_S
+R24376 Coq.ZArith.Znat.inj_S
+R24376 Coq.ZArith.Znat.inj_S
+R24604 Coq.Init.Logic "x = y" type_scope
+R24588 Coq.ZArith.BinInt "x + y" Z_scope
+R24574 Integers.Z_of_bits
+R24590 Integers.Z_of_bits
+R24606 Integers.Z_of_bits
+R24562 Coq.Init.Logic "x = y" type_scope
+R24555 Coq.Bool.Bool "x || y" bool_scope
+R24530 Coq.ZArith.BinInt "x <= y < z" Z_scope
+R24537 Coq.ZArith.BinInt.Z_of_nat
+R24503 Coq.Init.Logic "x = y" type_scope
+R24496 Coq.Bool.Bool "x && y" bool_scope
+R24505 Coq.Init.Datatypes.false
+R24471 Coq.ZArith.BinInt "x <= y < z" Z_scope
+R24478 Coq.ZArith.BinInt.Z_of_nat
+R24691 Coq.ZArith.Znat.inj_S
+R24691 Coq.ZArith.Znat.inj_S
+R24711 Coq.ZArith.Znat.inj_S
+R24711 Coq.ZArith.Znat.inj_S
+R24791 Coq.ZArith.BinInt "x + y" Z_scope
+R24773 Coq.ZArith.BinInt "x + y" Z_scope
+R24755 Coq.ZArith.BinInt "x + y" Z_scope
+R24791 Coq.ZArith.BinInt "x + y" Z_scope
+R24773 Coq.ZArith.BinInt "x + y" Z_scope
+R24755 Coq.ZArith.BinInt "x + y" Z_scope
+R24810 Coq.ZArith.BinInt "x <= y < z" Z_scope
+R24817 Coq.ZArith.BinInt.Zsucc
+R24823 Coq.ZArith.BinInt.Z_of_nat
+R24810 Coq.ZArith.BinInt "x <= y < z" Z_scope
+R24817 Coq.ZArith.BinInt.Zsucc
+R24823 Coq.ZArith.BinInt.Z_of_nat
+R24901 Integers.Z_of_bits
+R24927 Coq.ZArith.BinInt "x + y" Z_scope
+R24901 Integers.Z_of_bits
+R24927 Coq.ZArith.BinInt "x + y" Z_scope
+R24947 Integers.Z_of_bits
+R24973 Coq.ZArith.BinInt "x + y" Z_scope
+R24947 Integers.Z_of_bits
+R24973 Coq.ZArith.BinInt "x + y" Z_scope
+R25301 Coq.Init.Logic "x = y" type_scope
+R25281 Integers.bitwise_binop
+R25303 Integers.bitwise_binop
+R25253 Coq.Init.Logic "x = y" type_scope
+R25378 Integers.Z_of_bits_exten
+R25378 Integers.Z_of_bits_exten
+R25559 Coq.Init.Logic "x = y" type_scope
+R25519 Integers.bitwise_binop
+R25536 Integers.bitwise_binop
+R25563 Integers.bitwise_binop
+R25582 Integers.bitwise_binop
+R25483 Coq.Init.Logic "x = y" type_scope
+R25660 Integers.unsigned_repr
+R25660 Integers.unsigned_repr
+R25660 Integers.unsigned_repr
+R25660 Integers.unsigned_repr
+R25660 Integers.unsigned_repr
+R25660 Integers.unsigned_repr
+R25706 Integers.Z_of_bits_exten
+R25706 Integers.Z_of_bits_exten
+R25749 Integers.bits_of_Z_of_bits
+R25749 Integers.bits_of_Z_of_bits
+R25749 Integers.bits_of_Z_of_bits
+R25880 Coq.Init.Logic "x = y" type_scope
+R25860 Integers.bitwise_binop
+R25838 Coq.Init.Logic "x = y" type_scope
+R25940 Integers.repr
+R25946 Integers.Z_of_bits
+R25966 Integers.bits_of_Z
+R25986 Integers.unsigned
+R25976 Integers.wordsize
+R25956 Integers.wordsize
+R25940 Integers.repr
+R25946 Integers.Z_of_bits
+R25966 Integers.bits_of_Z
+R25986 Integers.unsigned
+R25976 Integers.wordsize
+R25956 Integers.wordsize
+R26017 Integers.Z_of_bits_exten
+R26017 Integers.Z_of_bits_exten
+R26064 Integers.repr
+R26070 Integers.unsigned
+R26064 Integers.repr
+R26070 Integers.unsigned
+R26092 Integers.eqm_samerepr
+R26092 Integers.eqm_samerepr
+R26112 Integers.Z_of_bits_of_Z
+R26112 Integers.Z_of_bits_of_Z
+R26134 Integers.repr_unsigned
+R26134 Integers.repr_unsigned
+R26228 Coq.Init.Logic "x = y" type_scope
+R26220 Integers.and
+R26230 Integers.and
+R26246 Integers.bitwise_binop_commut
+R26272 Coq.Bool.Bool.andb_comm
+R26267 Coq.Bool.Bool.andb
+R26334 Coq.Init.Logic "x = y" type_scope
+R26318 Integers.and
+R26323 Integers.and
+R26336 Integers.and
+R26343 Integers.and
+R26360 Integers.bitwise_binop_assoc
+R26385 Coq.Bool.Bool.andb_assoc
+R26380 Coq.Bool.Bool.andb
+R26438 Coq.Init.Logic "x = y" type_scope
+R26427 Integers.and
+R26433 Integers.zero
+R26440 Integers.zero
+R26513 Integers.repr
+R26519 Integers.Z_of_bits
+R26539 Integers.bits_of_Z
+R26549 Integers.wordsize
+R26529 Integers.wordsize
+R26513 Integers.repr
+R26519 Integers.Z_of_bits
+R26539 Integers.bits_of_Z
+R26549 Integers.wordsize
+R26529 Integers.wordsize
+R26579 Integers.Z_of_bits_exten
+R26579 Integers.Z_of_bits_exten
+R26614 Integers.unsigned
+R26624 Integers.repr
+R26614 Integers.unsigned
+R26624 Integers.repr
+R26651 Integers.bits_of_Z_zero
+R26651 Integers.bits_of_Z_zero
+R26673 Coq.Bool.Bool.andb_b_false
+R26673 Coq.Bool.Bool.andb_b_false
+R26743 Coq.Init.Logic "x = y" type_scope
+R26738 Integers.mone
+R26745 Integers.repr
+R26750 Integers.max_unsigned
+R26792 Integers.eqm_samerepr
+R26792 Integers.eqm_samerepr
+R26894 Coq.Init.Logic "x = y" type_scope
+R26883 Integers.and
+R26889 Integers.mone
+R26954 Integers.mone_max_unsigned
+R26954 Integers.mone_max_unsigned
+R27019 Integers.repr
+R27025 Integers.Z_of_bits
+R27045 Integers.bits_of_Z
+R27065 Integers.unsigned
+R27055 Integers.wordsize
+R27035 Integers.wordsize
+R27019 Integers.repr
+R27025 Integers.Z_of_bits
+R27045 Integers.bits_of_Z
+R27065 Integers.unsigned
+R27055 Integers.wordsize
+R27035 Integers.wordsize
+R27096 Integers.Z_of_bits_exten
+R27096 Integers.Z_of_bits_exten
+R27131 Integers.unsigned_repr
+R27131 Integers.unsigned_repr
+R27154 Integers.bits_of_Z_mone
+R27154 Integers.bits_of_Z_mone
+R27179 Coq.Bool.Bool.andb_b_true
+R27179 Coq.Bool.Bool.andb_b_true
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R27246 Integers.repr
+R27252 Integers.unsigned
+R27246 Integers.repr
+R27252 Integers.unsigned
+R27275 Integers.eqm_samerepr
+R27275 Integers.eqm_samerepr
+R27295 Integers.Z_of_bits_of_Z
+R27295 Integers.Z_of_bits_of_Z
+R27319 Integers.repr_unsigned
+R27319 Integers.repr_unsigned
+R27376 Coq.Init.Logic "x = y" type_scope
+R27368 Integers.and
+R27415 Coq.Init.Logic "x = y" type_scope
+R27410 Coq.Bool.Bool "x && y" bool_scope
+R27415 Coq.Init.Logic "x = y" type_scope
+R27410 Coq.Bool.Bool "x && y" bool_scope
+R27459 Integers.bitwise_binop_idem
+R27478 Coq.Bool.Bool.andb
+R27459 Integers.bitwise_binop_idem
+R27478 Coq.Bool.Bool.andb
+R27563 Coq.Init.Logic "x = y" type_scope
+R27556 Integers.or
+R27565 Integers.or
+R27580 Integers.bitwise_binop_commut
+R27605 Coq.Bool.Bool.orb_comm
+R27601 Coq.Bool.Bool.orb
+R27663 Coq.Init.Logic "x = y" type_scope
+R27649 Integers.or
+R27653 Integers.or
+R27665 Integers.or
+R27671 Integers.or
+R27687 Integers.bitwise_binop_assoc
+R27711 Coq.Bool.Bool.orb_assoc
+R27707 Coq.Bool.Bool.orb
+R27761 Coq.Init.Logic "x = y" type_scope
+R27751 Integers.or
+R27756 Integers.zero
+R27832 Integers.repr
+R27838 Integers.Z_of_bits
+R27858 Integers.bits_of_Z
+R27878 Integers.unsigned
+R27868 Integers.wordsize
+R27848 Integers.wordsize
+R27832 Integers.repr
+R27838 Integers.Z_of_bits
+R27858 Integers.bits_of_Z
+R27878 Integers.unsigned
+R27868 Integers.wordsize
+R27848 Integers.wordsize
+R27909 Integers.Z_of_bits_exten
+R27909 Integers.Z_of_bits_exten
+R27944 Integers.unsigned
+R27954 Integers.repr
+R27944 Integers.unsigned
+R27954 Integers.repr
+R27981 Integers.bits_of_Z_zero
+R27981 Integers.bits_of_Z_zero
+R28003 Coq.Bool.Bool.orb_b_false
+R28003 Coq.Bool.Bool.orb_b_false
+R28032 Integers.repr
+R28038 Integers.unsigned
+R28032 Integers.repr
+R28038 Integers.unsigned
+R28076 Integers.eqm_samerepr
+R28076 Integers.eqm_samerepr
+R28096 Integers.Z_of_bits_of_Z
+R28096 Integers.Z_of_bits_of_Z
+R28155 Coq.Init.Logic "x = y" type_scope
+R28145 Integers.or
+R28150 Integers.mone
+R28157 Integers.mone
+R28180 Integers.mone_max_unsigned
+R28180 Integers.mone_max_unsigned
+R28262 Integers.Z_of_bits
+R28282 Integers.bits_of_Z
+R28301 Integers.max_unsigned
+R28292 Integers.wordsize
+R28272 Integers.wordsize
+R28262 Integers.Z_of_bits
+R28282 Integers.bits_of_Z
+R28301 Integers.max_unsigned
+R28292 Integers.wordsize
+R28272 Integers.wordsize
+R28325 Integers.Z_of_bits_exten
+R28325 Integers.Z_of_bits_exten
+R28395 Integers.max_unsigned
+R28360 Integers.unsigned
+R28370 Integers.repr
+R28375 Integers.max_unsigned
+R28395 Integers.max_unsigned
+R28360 Integers.unsigned
+R28370 Integers.repr
+R28375 Integers.max_unsigned
+R28449 Integers.bits_of_Z_mone
+R28449 Integers.bits_of_Z_mone
+R28479 Coq.Bool.Bool.orb_b_true
+R28479 Coq.Bool.Bool.orb_b_true
+R28500 Integers.eqm_small_eq
+R28500 Integers.eqm_small_eq
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R28601 Coq.Init.Logic "x = y" type_scope
+R28594 Integers.or
+R28640 Coq.Init.Logic "x = y" type_scope
+R28635 Coq.Bool.Bool "x || y" bool_scope
+R28640 Coq.Init.Logic "x = y" type_scope
+R28635 Coq.Bool.Bool "x || y" bool_scope
+R28684 Integers.bitwise_binop_idem
+R28703 Coq.Bool.Bool.orb
+R28684 Integers.bitwise_binop_idem
+R28703 Coq.Bool.Bool.orb
+R28774 Coq.Init.Logic "x = y" type_scope
+R28759 Integers.and
+R28766 Integers.or
+R28776 Integers.or
+R28790 Integers.and
+R28780 Integers.and
+R28872 Integers.unsigned_repr
+R28872 Integers.unsigned_repr
+R28872 Integers.unsigned_repr
+R28872 Integers.unsigned_repr
+R28872 Integers.unsigned_repr
+R28872 Integers.unsigned_repr
+R28872 Integers.unsigned_repr
+R28872 Integers.unsigned_repr
+R28911 Integers.Z_of_bits_exten
+R28911 Integers.Z_of_bits_exten
+R28953 Integers.bits_of_Z_of_bits
+R28953 Integers.bits_of_Z_of_bits
+R28953 Integers.bits_of_Z_of_bits
+R28953 Integers.bits_of_Z_of_bits
+R28953 Integers.bits_of_Z_of_bits
+R28953 Integers.bits_of_Z_of_bits
+R28953 Integers.bits_of_Z_of_bits
+R28953 Integers.bits_of_Z_of_bits
+R28986 Coq.Bool.Bool.demorgan1
+R28986 Coq.Bool.Bool.demorgan1
+R29078 Coq.Init.Logic "x = y" type_scope
+R29070 Integers.xor
+R29080 Integers.xor
+R29096 Integers.bitwise_binop_commut
+R29122 Coq.Bool.Bool.xorb_comm
+R29117 Coq.Bool.Bool.xorb
+R29184 Coq.Init.Logic "x = y" type_scope
+R29168 Integers.xor
+R29173 Integers.xor
+R29186 Integers.xor
+R29193 Integers.xor
+R29252 Coq.Init.Logic "x = y" type_scope
+R29234 Coq.Bool.Bool.xorb
+R29242 Coq.Bool.Bool.xorb
+R29254 Coq.Bool.Bool.xorb
+R29260 Coq.Bool.Bool.xorb
+R29252 Coq.Init.Logic "x = y" type_scope
+R29234 Coq.Bool.Bool.xorb
+R29242 Coq.Bool.Bool.xorb
+R29254 Coq.Bool.Bool.xorb
+R29260 Coq.Bool.Bool.xorb
+R29292 Coq.Bool.Bool.xorb_assoc
+R29292 Coq.Bool.Bool.xorb_assoc
+R29313 Integers.bitwise_binop_assoc
+R29333 Coq.Bool.Bool.xorb
+R29313 Integers.bitwise_binop_assoc
+R29333 Coq.Bool.Bool.xorb
+R29387 Coq.Init.Logic "x = y" type_scope
+R29376 Integers.xor
+R29382 Integers.zero
+R29459 Integers.repr
+R29465 Integers.Z_of_bits
+R29485 Integers.bits_of_Z
+R29505 Integers.unsigned
+R29495 Integers.wordsize
+R29475 Integers.wordsize
+R29459 Integers.repr
+R29465 Integers.Z_of_bits
+R29485 Integers.bits_of_Z
+R29505 Integers.unsigned
+R29495 Integers.wordsize
+R29475 Integers.wordsize
+R29536 Integers.Z_of_bits_exten
+R29536 Integers.Z_of_bits_exten
+R29571 Integers.unsigned
+R29581 Integers.repr
+R29571 Integers.unsigned
+R29581 Integers.repr
+R29608 Integers.bits_of_Z_zero
+R29608 Integers.bits_of_Z_zero
+R29630 Coq.Bool.Bool.xorb_false
+R29630 Coq.Bool.Bool.xorb_false
+R29658 Integers.repr
+R29664 Integers.unsigned
+R29658 Integers.repr
+R29664 Integers.unsigned
+R29702 Integers.eqm_samerepr
+R29702 Integers.eqm_samerepr
+R29722 Integers.Z_of_bits_of_Z
+R29722 Integers.Z_of_bits_of_Z
+R29779 Coq.Init.Logic "x = y" type_scope
+R29766 Integers.xor
+R29775 Integers.one
+R29770 Integers.zero
+R29781 Integers.one
+R29845 Coq.Init.Logic "x = y" type_scope
+R29833 Integers.xor
+R29841 Integers.one
+R29837 Integers.one
+R29847 Integers.zero
+R29938 Coq.Init.Logic "x = y" type_scope
+R29922 Integers.and
+R29929 Integers.xor
+R29940 Integers.xor
+R29955 Integers.and
+R29945 Integers.and
+R30038 Integers.unsigned_repr
+R30038 Integers.unsigned_repr
+R30038 Integers.unsigned_repr
+R30038 Integers.unsigned_repr
+R30038 Integers.unsigned_repr
+R30038 Integers.unsigned_repr
+R30038 Integers.unsigned_repr
+R30038 Integers.unsigned_repr
+R30077 Integers.Z_of_bits_exten
+R30077 Integers.Z_of_bits_exten
+R30119 Integers.bits_of_Z_of_bits
+R30119 Integers.bits_of_Z_of_bits
+R30119 Integers.bits_of_Z_of_bits
+R30119 Integers.bits_of_Z_of_bits
+R30119 Integers.bits_of_Z_of_bits
+R30119 Integers.bits_of_Z_of_bits
+R30119 Integers.bits_of_Z_of_bits
+R30119 Integers.bits_of_Z_of_bits
+R30184 Coq.Init.Logic "x = y" type_scope
+R30170 Coq.Bool.Bool "x && y" bool_scope
+R30174 Coq.Bool.Bool.xorb
+R30186 Coq.Bool.Bool.xorb
+R30203 Coq.Bool.Bool "x && y" bool_scope
+R30194 Coq.Bool.Bool "x && y" bool_scope
+R30184 Coq.Init.Logic "x = y" type_scope
+R30170 Coq.Bool.Bool "x && y" bool_scope
+R30174 Coq.Bool.Bool.xorb
+R30186 Coq.Bool.Bool.xorb
+R30203 Coq.Bool.Bool "x && y" bool_scope
+R30194 Coq.Bool.Bool "x && y" bool_scope
+R30359 Coq.Init.Logic "'exists' x , p" type_scope
+R30404 Coq.Init.Logic "x = y" type_scope
+R30371 Integers.Z_of_bits
+R30398 Coq.ZArith.BinInt "x - y" Z_scope
+R30430 Coq.ZArith.BinInt "x + y" Z_scope
+R30412 Coq.ZArith.BinInt "x * y" Z_scope
+R30414 Coq.ZArith.Zpower.two_power_nat
+R30432 Integers.Z_shift_add
+R30454 Integers.Z_of_bits
+R30517 Coqlib.two_power_nat_O
+R30517 Coqlib.two_power_nat_O
+R30631 Coq.ZArith.Zpower.two_power_nat_S
+R30631 Coq.ZArith.Zpower.two_power_nat_S
+R30683 Coq.ZArith.BinInt "x + y" Z_scope
+R30683 Coq.ZArith.BinInt "x + y" Z_scope
+R30716 Integers.Z_of_bits
+R30747 Coq.ZArith.BinInt "x + y" Z_scope
+R30743 Coq.ZArith.BinInt "x - y" Z_scope
+R30765 Integers.Z_of_bits
+R30796 Coq.ZArith.BinInt "x - y" Z_scope
+R30792 Coq.ZArith.BinInt "x + y" Z_scope
+R30716 Integers.Z_of_bits
+R30747 Coq.ZArith.BinInt "x + y" Z_scope
+R30743 Coq.ZArith.BinInt "x - y" Z_scope
+R30765 Integers.Z_of_bits
+R30796 Coq.ZArith.BinInt "x - y" Z_scope
+R30792 Coq.ZArith.BinInt "x + y" Z_scope
+R30837 Coq.ZArith.BinInt "x + y" Z_scope
+R30837 Coq.ZArith.BinInt "x + y" Z_scope
+R30934 Integers.Z_of_bits_exten
+R30934 Integers.Z_of_bits_exten
+R31071 Integers.eqm
+R31132 Coq.ZArith.BinInt "x * y" Z_scope
+R31124 Coq.ZArith.Zpower.two_p
+R31134 Integers.Z_of_bits
+R31144 Integers.wordsize
+R31076 Integers.Z_of_bits
+R31110 Coq.ZArith.BinInt "x - y" Z_scope
+R31086 Integers.wordsize
+R31057 Coq.Init.Logic "x = y" type_scope
+R31059 Coq.Init.Datatypes.false
+R31046 Coq.ZArith.BinInt "x < y" Z_scope
+R31023 Coq.ZArith.BinInt "x <= y" Z_scope
+R31191 Coq.ZArith.Wf_Z.natlike_ind
+R31191 Coq.ZArith.Wf_Z.natlike_ind
+R31212 Integers.eqm_refl2
+R31212 Integers.eqm_refl2
+R31237 Integers.Z_of_bits
+R31247 Integers.wordsize
+R31237 Integers.Z_of_bits
+R31247 Integers.wordsize
+R31268 Integers.Z_of_bits_exten
+R31268 Integers.Z_of_bits_exten
+R31315 Coq.ZArith.Zpower.two_p
+R31315 Coq.ZArith.Zpower.two_p
+R31347 Coq.ZArith.Zpower.two_p_S
+R31347 Coq.ZArith.Zpower.two_p_S
+R31389 Coq.ZArith.BinInt "x - y" Z_scope
+R31389 Coq.ZArith.BinInt "x - y" Z_scope
+R31420 Integers.Z_of_bits
+R31455 Coq.ZArith.BinInt "x - y" Z_scope
+R31430 Integers.wordsize
+R31404 Integers.eqm_trans
+R31420 Integers.Z_of_bits
+R31455 Coq.ZArith.BinInt "x - y" Z_scope
+R31430 Integers.wordsize
+R31404 Integers.eqm_trans
+R31471 Integers.eqm_refl2
+R31471 Integers.eqm_refl2
+R31488 Integers.Z_of_bits_exten
+R31488 Integers.Z_of_bits_exten
+R31564 Integers.Z_shift_add
+R31587 Integers.Z_of_bits
+R31597 Integers.wordsize
+R31548 Integers.eqm_trans
+R31564 Integers.Z_shift_add
+R31587 Integers.Z_of_bits
+R31597 Integers.wordsize
+R31548 Integers.eqm_trans
+R31621 Integers.Z_of_bits_shift
+R31637 Integers.wordsize
+R31621 Integers.Z_of_bits_shift
+R31637 Integers.wordsize
+R31710 Coq.ZArith.BinInt.Zmult_assoc
+R31710 Coq.ZArith.BinInt.Zmult_assoc
+R31729 Integers.eqm_mult
+R31729 Integers.eqm_mult
+R31745 Integers.eqm_refl
+R31745 Integers.eqm_refl
+R31837 Coq.Init.Logic "x = y" type_scope
+R31829 Integers.shl
+R31839 Integers.mul
+R31846 Integers.repr
+R31852 Coq.ZArith.Zpower.two_p
+R31859 Integers.unsigned
+R31917 Integers.eqm_samerepr
+R31917 Integers.eqm_samerepr
+R31941 Integers.eqm_trans
+R31941 Integers.eqm_trans
+R31960 Integers.Z_of_bits_shifts
+R31960 Integers.Z_of_bits_shifts
+R31992 Integers.unsigned_range
+R31992 Integers.unsigned_range
+R32034 Integers.bits_of_Z_below
+R32034 Integers.bits_of_Z_below
+R32067 Coq.ZArith.BinInt.Zmult_comm
+R32067 Coq.ZArith.BinInt.Zmult_comm
+R32085 Integers.eqm_mult
+R32085 Integers.eqm_mult
+R32103 Integers.Z_of_bits_of_Z
+R32103 Integers.Z_of_bits_of_Z
+R32125 Integers.eqm_unsigned_repr
+R32125 Integers.eqm_unsigned_repr
+R32189 Coq.Init.Logic "x = y" type_scope
+R32178 Integers.shl
+R32184 Integers.zero
+R32219 Integers.shl_mul_two_p
+R32219 Integers.shl_mul_two_p
+R32280 Integers.one
+R32245 Integers.repr
+R32251 Coq.ZArith.Zpower.two_p
+R32258 Integers.unsigned
+R32267 Integers.zero
+R32280 Integers.one
+R32245 Integers.repr
+R32251 Coq.ZArith.Zpower.two_p
+R32258 Integers.unsigned
+R32267 Integers.zero
+R32293 Integers.mul_one
+R32293 Integers.mul_one
+R32349 Coq.Init.Logic "x = y" type_scope
+R32341 Integers.shl
+R32351 Integers.mul
+R32358 Integers.shl
+R32362 Integers.one
+R32408 Coq.Init.Logic "x = y" type_scope
+R32398 Integers.shl
+R32402 Integers.one
+R32410 Integers.repr
+R32416 Coq.ZArith.Zpower.two_p
+R32423 Integers.unsigned
+R32408 Coq.Init.Logic "x = y" type_scope
+R32398 Integers.shl
+R32402 Integers.one
+R32410 Integers.repr
+R32416 Coq.ZArith.Zpower.two_p
+R32423 Integers.unsigned
+R32448 Integers.shl_mul_two_p
+R32448 Integers.shl_mul_two_p
+R32471 Integers.mul_commut
+R32471 Integers.mul_commut
+R32491 Integers.mul_one
+R32491 Integers.mul_one
+R32525 Integers.shl_mul_two_p
+R32525 Integers.shl_mul_two_p
+R32633 Coq.Init.Logic "x = y" type_scope
+R32625 Integers.shl
+R32635 Integers.rolm
+R32645 Integers.shl
+R32649 Integers.mone
+R32613 Coq.Init.Logic "x = y" type_scope
+R32580 Integers.ltu
+R32587 Integers.repr
+R32593 Coq.ZArith.BinInt.Z_of_nat
+R32602 Integers.wordsize
+R32615 Coq.Init.Datatypes.true
+R32702 Integers.unsigned_repr
+R32702 Integers.unsigned_repr
+R32723 Coqlib.zlt
+R32741 Coq.ZArith.BinInt.Z_of_nat
+R32750 Integers.wordsize
+R32728 Integers.unsigned
+R32723 Coqlib.zlt
+R32741 Coq.ZArith.BinInt.Z_of_nat
+R32750 Integers.wordsize
+R32728 Integers.unsigned
+R32836 Integers.Z_of_bits_exten
+R32836 Integers.Z_of_bits_exten
+R32878 Integers.unsigned_repr
+R32878 Integers.unsigned_repr
+R32878 Integers.unsigned_repr
+R32878 Integers.unsigned_repr
+R32878 Integers.unsigned_repr
+R32878 Integers.unsigned_repr
+R32926 Integers.bits_of_Z_of_bits
+R32926 Integers.bits_of_Z_of_bits
+R32926 Integers.bits_of_Z_of_bits
+R32926 Integers.bits_of_Z_of_bits
+R32926 Integers.bits_of_Z_of_bits
+R32926 Integers.bits_of_Z_of_bits
+R32960 Coqlib.zlt
+R32967 Integers.unsigned
+R32960 Coqlib.zlt
+R32967 Integers.unsigned
+R33017 Coq.ZArith.BinInt "x < y" Z_scope
+R33004 Coq.ZArith.BinInt "x - y" Z_scope
+R33006 Integers.unsigned
+R33017 Coq.ZArith.BinInt "x < y" Z_scope
+R33004 Coq.ZArith.BinInt "x - y" Z_scope
+R33006 Integers.unsigned
+R33041 Integers.bits_of_Z_below
+R33067 Integers.unsigned
+R33057 Integers.wordsize
+R33041 Integers.bits_of_Z_below
+R33067 Integers.unsigned
+R33057 Integers.wordsize
+R33097 Integers.bits_of_Z_below
+R33123 Integers.unsigned
+R33132 Integers.mone
+R33113 Integers.wordsize
+R33097 Integers.bits_of_Z_below
+R33123 Integers.unsigned
+R33132 Integers.mone
+R33113 Integers.wordsize
+R33163 Coq.Bool.Bool.andb_b_false
+R33163 Coq.Bool.Bool.andb_b_false
+R33203 Coq.ZArith.BinInt "x < y" Z_scope
+R33190 Coq.ZArith.BinInt "x - y" Z_scope
+R33192 Integers.unsigned
+R33205 Coq.ZArith.BinInt.Z_of_nat
+R33214 Integers.wordsize
+R33203 Coq.ZArith.BinInt "x < y" Z_scope
+R33190 Coq.ZArith.BinInt "x - y" Z_scope
+R33192 Integers.unsigned
+R33205 Coq.ZArith.BinInt.Z_of_nat
+R33214 Integers.wordsize
+R33241 Integers.unsigned_range
+R33241 Integers.unsigned_range
+R33279 Integers.unsigned
+R33288 Integers.mone
+R33323 Coq.ZArith.BinInt "x - y" Z_scope
+R33300 Coq.ZArith.Zpower.two_power_nat
+R33314 Integers.wordsize
+R33279 Integers.unsigned
+R33288 Integers.mone
+R33323 Coq.ZArith.BinInt "x - y" Z_scope
+R33300 Coq.ZArith.Zpower.two_power_nat
+R33314 Integers.wordsize
+R33339 Integers.bits_of_Z_mone
+R33339 Integers.bits_of_Z_mone
+R33363 Coq.Bool.Bool.andb_b_true
+R33363 Coq.Bool.Bool.andb_b_true
+R33393 Coqlib.Zmod_small
+R33393 Coqlib.Zmod_small
+R33436 Integers.mone_max_unsigned
+R33436 Integers.mone_max_unsigned
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R33633 Coq.Init.Logic "x = y" type_scope
+R33597 Integers.bitwise_binop
+R33624 Integers.shl
+R33614 Integers.shl
+R33635 Integers.shl
+R33640 Integers.bitwise_binop
+R33584 Coq.Init.Logic "x = y" type_scope
+R33578 Coq.Init.Datatypes.false
+R33572 Coq.Init.Datatypes.false
+R33586 Coq.Init.Datatypes.false
+R33732 Integers.unsigned_repr
+R33732 Integers.unsigned_repr
+R33732 Integers.unsigned_repr
+R33732 Integers.unsigned_repr
+R33732 Integers.unsigned_repr
+R33732 Integers.unsigned_repr
+R33732 Integers.unsigned_repr
+R33732 Integers.unsigned_repr
+R33771 Integers.Z_of_bits_exten
+R33771 Integers.Z_of_bits_exten
+R33804 Coqlib.zlt
+R33811 Coq.ZArith.BinInt "x - y" Z_scope
+R33813 Integers.unsigned
+R33804 Coqlib.zlt
+R33811 Coq.ZArith.BinInt "x - y" Z_scope
+R33813 Integers.unsigned
+R33851 Coq.Init.Datatypes.false
+R33851 Coq.Init.Datatypes.false
+R33873 Integers.bits_of_Z_of_bits
+R33873 Integers.bits_of_Z_of_bits
+R33873 Integers.bits_of_Z_of_bits
+R33873 Integers.bits_of_Z_of_bits
+R33873 Integers.bits_of_Z_of_bits
+R33873 Integers.bits_of_Z_of_bits
+R33915 Integers.bits_of_Z_below
+R33915 Integers.bits_of_Z_below
+R33915 Integers.bits_of_Z_below
+R33915 Integers.bits_of_Z_below
+R33915 Integers.bits_of_Z_below
+R33915 Integers.bits_of_Z_below
+R33948 Integers.bits_of_Z_below
+R33948 Integers.bits_of_Z_below
+R33988 Integers.bits_of_Z_of_bits
+R33988 Integers.bits_of_Z_of_bits
+R33988 Integers.bits_of_Z_of_bits
+R33988 Integers.bits_of_Z_of_bits
+R33988 Integers.bits_of_Z_of_bits
+R33988 Integers.bits_of_Z_of_bits
+R33988 Integers.bits_of_Z_of_bits
+R33988 Integers.bits_of_Z_of_bits
+R34027 Integers.unsigned_range
+R34027 Integers.unsigned_range
+R34116 Coq.Init.Logic "x = y" type_scope
+R34092 Integers.and
+R34107 Integers.shl
+R34097 Integers.shl
+R34118 Integers.shl
+R34123 Integers.and
+R34170 Integers.bitwise_binop_shl
+R34170 Integers.bitwise_binop_shl
+R34297 Coq.Init.Logic "x = y" type_scope
+R34288 Integers.shru
+R34299 Integers.rolm
+R34342 Integers.shru
+R34347 Integers.mone
+R34307 Integers.sub
+R34312 Integers.repr
+R34318 Coq.ZArith.BinInt.Z_of_nat
+R34327 Integers.wordsize
+R34276 Coq.Init.Logic "x = y" type_scope
+R34243 Integers.ltu
+R34250 Integers.repr
+R34256 Coq.ZArith.BinInt.Z_of_nat
+R34265 Integers.wordsize
+R34278 Coq.Init.Datatypes.true
+R34400 Integers.unsigned_repr
+R34400 Integers.unsigned_repr
+R34424 Coqlib.zlt
+R34442 Coq.ZArith.BinInt.Z_of_nat
+R34451 Integers.wordsize
+R34429 Integers.unsigned
+R34424 Coqlib.zlt
+R34442 Coq.ZArith.BinInt.Z_of_nat
+R34451 Integers.wordsize
+R34429 Integers.unsigned
+R34538 Integers.Z_of_bits_exten
+R34538 Integers.Z_of_bits_exten
+R34580 Integers.unsigned_repr
+R34580 Integers.unsigned_repr
+R34580 Integers.unsigned_repr
+R34580 Integers.unsigned_repr
+R34580 Integers.unsigned_repr
+R34580 Integers.unsigned_repr
+R34628 Integers.bits_of_Z_of_bits
+R34628 Integers.bits_of_Z_of_bits
+R34628 Integers.bits_of_Z_of_bits
+R34628 Integers.bits_of_Z_of_bits
+R34628 Integers.bits_of_Z_of_bits
+R34628 Integers.bits_of_Z_of_bits
+R34726 Coq.ZArith.BinInt.Z_of_nat
+R34735 Integers.wordsize
+R34679 Integers.unsigned
+R34689 Integers.repr
+R34695 Coq.ZArith.BinInt.Z_of_nat
+R34704 Integers.wordsize
+R34726 Coq.ZArith.BinInt.Z_of_nat
+R34735 Integers.wordsize
+R34679 Integers.unsigned
+R34689 Integers.repr
+R34695 Coq.ZArith.BinInt.Z_of_nat
+R34704 Integers.wordsize
+R34756 Integers.unsigned_repr
+R34756 Integers.unsigned_repr
+R34780 Coqlib.zlt
+R34802 Coq.ZArith.BinInt.Z_of_nat
+R34811 Integers.wordsize
+R34787 Coq.ZArith.BinInt "x + y" Z_scope
+R34789 Integers.unsigned
+R34780 Coqlib.zlt
+R34802 Coq.ZArith.BinInt.Z_of_nat
+R34811 Integers.wordsize
+R34787 Coq.ZArith.BinInt "x + y" Z_scope
+R34789 Integers.unsigned
+R34845 Integers.unsigned
+R34854 Integers.mone
+R34889 Coq.ZArith.BinInt "x - y" Z_scope
+R34866 Coq.ZArith.Zpower.two_power_nat
+R34880 Integers.wordsize
+R34845 Integers.unsigned
+R34854 Integers.mone
+R34889 Coq.ZArith.BinInt "x - y" Z_scope
+R34866 Coq.ZArith.Zpower.two_power_nat
+R34880 Integers.wordsize
+R34905 Integers.bits_of_Z_mone
+R34905 Integers.bits_of_Z_mone
+R34929 Coq.Bool.Bool.andb_b_true
+R34929 Coq.Bool.Bool.andb_b_true
+R34965 Coq.ZArith.BinInt "x - y" Z_scope
+R34986 Coq.ZArith.BinInt "x - y" Z_scope
+R34968 Coq.ZArith.BinInt.Z_of_nat
+R34977 Integers.wordsize
+R34988 Integers.unsigned
+R35027 Coq.ZArith.BinInt "x + y" Z_scope
+R35015 Coq.ZArith.BinInt "x + y" Z_scope
+R35017 Integers.unsigned
+R35034 Coq.ZArith.BinInt "x * y" Z_scope
+R35038 Coq.ZArith.BinInt.Z_of_nat
+R35047 Integers.wordsize
+R34965 Coq.ZArith.BinInt "x - y" Z_scope
+R34986 Coq.ZArith.BinInt "x - y" Z_scope
+R34968 Coq.ZArith.BinInt.Z_of_nat
+R34977 Integers.wordsize
+R34988 Integers.unsigned
+R35027 Coq.ZArith.BinInt "x + y" Z_scope
+R35015 Coq.ZArith.BinInt "x + y" Z_scope
+R35017 Integers.unsigned
+R35034 Coq.ZArith.BinInt "x * y" Z_scope
+R35038 Coq.ZArith.BinInt.Z_of_nat
+R35047 Integers.wordsize
+R35068 Coq.ZArith.Zdiv.Z_mod_plus
+R35068 Coq.ZArith.Zdiv.Z_mod_plus
+R35096 Coqlib.Zmod_small
+R35096 Coqlib.Zmod_small
+R35122 Integers.unsigned_range
+R35122 Integers.unsigned_range
+R35177 Integers.unsigned_range
+R35177 Integers.unsigned_range
+R35230 Integers.bits_of_Z_above
+R35256 Integers.unsigned
+R35246 Integers.wordsize
+R35230 Integers.bits_of_Z_above
+R35256 Integers.unsigned
+R35246 Integers.wordsize
+R35287 Integers.bits_of_Z_above
+R35313 Integers.unsigned
+R35322 Integers.mone
+R35303 Integers.wordsize
+R35287 Integers.bits_of_Z_above
+R35313 Integers.unsigned
+R35322 Integers.mone
+R35303 Integers.wordsize
+R35354 Coq.Bool.Bool.andb_b_false
+R35354 Coq.Bool.Bool.andb_b_false
+R35406 Coq.ZArith.BinInt.Z_of_nat
+R35415 Integers.wordsize
+R35390 Coq.ZArith.Zorder.Zle_trans
+R35406 Coq.ZArith.BinInt.Z_of_nat
+R35415 Integers.wordsize
+R35390 Coq.ZArith.Zorder.Zle_trans
+R35440 Integers.unsigned_range
+R35440 Integers.unsigned_range
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R35677 Coq.Init.Logic "x = y" type_scope
+R35639 Integers.bitwise_binop
+R35667 Integers.shru
+R35656 Integers.shru
+R35679 Integers.shru
+R35685 Integers.bitwise_binop
+R35626 Coq.Init.Logic "x = y" type_scope
+R35620 Coq.Init.Datatypes.false
+R35614 Coq.Init.Datatypes.false
+R35628 Coq.Init.Datatypes.false
+R35778 Integers.unsigned_repr
+R35778 Integers.unsigned_repr
+R35778 Integers.unsigned_repr
+R35778 Integers.unsigned_repr
+R35778 Integers.unsigned_repr
+R35778 Integers.unsigned_repr
+R35778 Integers.unsigned_repr
+R35778 Integers.unsigned_repr
+R35817 Integers.Z_of_bits_exten
+R35817 Integers.Z_of_bits_exten
+R35850 Coqlib.zlt
+R35872 Coq.ZArith.BinInt.Z_of_nat
+R35881 Integers.wordsize
+R35857 Coq.ZArith.BinInt "x + y" Z_scope
+R35859 Integers.unsigned
+R35850 Coqlib.zlt
+R35872 Coq.ZArith.BinInt.Z_of_nat
+R35881 Integers.wordsize
+R35857 Coq.ZArith.BinInt "x + y" Z_scope
+R35859 Integers.unsigned
+R35917 Integers.bits_of_Z_of_bits
+R35917 Integers.bits_of_Z_of_bits
+R35917 Integers.bits_of_Z_of_bits
+R35917 Integers.bits_of_Z_of_bits
+R35917 Integers.bits_of_Z_of_bits
+R35917 Integers.bits_of_Z_of_bits
+R35917 Integers.bits_of_Z_of_bits
+R35917 Integers.bits_of_Z_of_bits
+R35956 Integers.unsigned_range
+R35956 Integers.unsigned_range
+R35997 Coq.Init.Datatypes.false
+R35997 Coq.Init.Datatypes.false
+R36019 Integers.bits_of_Z_of_bits
+R36019 Integers.bits_of_Z_of_bits
+R36019 Integers.bits_of_Z_of_bits
+R36019 Integers.bits_of_Z_of_bits
+R36019 Integers.bits_of_Z_of_bits
+R36019 Integers.bits_of_Z_of_bits
+R36061 Integers.bits_of_Z_above
+R36061 Integers.bits_of_Z_above
+R36061 Integers.bits_of_Z_above
+R36061 Integers.bits_of_Z_above
+R36061 Integers.bits_of_Z_above
+R36061 Integers.bits_of_Z_above
+R36094 Integers.bits_of_Z_above
+R36094 Integers.bits_of_Z_above
+R36183 Coq.Init.Logic "x = y" type_scope
+R36157 Integers.and
+R36173 Integers.shru
+R36162 Integers.shru
+R36185 Integers.shru
+R36191 Integers.and
+R36238 Integers.bitwise_binop_shru
+R36238 Integers.bitwise_binop_shru
+R36320 Coq.Init.Logic "x = y" type_scope
+R36309 Integers.rol
+R36315 Integers.zero
+R36368 Integers.repr
+R36374 Integers.Z_of_bits
+R36394 Integers.bits_of_Z
+R36414 Integers.unsigned
+R36404 Integers.wordsize
+R36384 Integers.wordsize
+R36368 Integers.repr
+R36374 Integers.Z_of_bits
+R36394 Integers.bits_of_Z
+R36414 Integers.unsigned
+R36404 Integers.wordsize
+R36384 Integers.wordsize
+R36456 Integers.repr
+R36462 Integers.unsigned
+R36456 Integers.repr
+R36462 Integers.unsigned
+R36491 Integers.eqm_small_eq
+R36491 Integers.eqm_small_eq
+R36511 Integers.Z_of_bits_of_Z
+R36511 Integers.Z_of_bits_of_Z
+R36666 Coq.Init.Logic "x = y" type_scope
+R36630 Integers.bitwise_binop
+R36657 Integers.rol
+R36647 Integers.rol
+R36668 Integers.rol
+R36673 Integers.bitwise_binop
+R36766 Integers.unsigned_repr
+R36766 Integers.unsigned_repr
+R36766 Integers.unsigned_repr
+R36766 Integers.unsigned_repr
+R36766 Integers.unsigned_repr
+R36806 Integers.Z_of_bits_exten
+R36806 Integers.Z_of_bits_exten
+R36848 Integers.bits_of_Z_of_bits
+R36848 Integers.bits_of_Z_of_bits
+R36848 Integers.bits_of_Z_of_bits
+R36848 Integers.bits_of_Z_of_bits
+R36848 Integers.bits_of_Z_of_bits
+R36848 Integers.bits_of_Z_of_bits
+R36848 Integers.bits_of_Z_of_bits
+R36848 Integers.bits_of_Z_of_bits
+R36881 Coq.ZArith.Zdiv.Z_mod_lt
+R36881 Coq.ZArith.Zdiv.Z_mod_lt
+R36964 Coq.Init.Logic "x = y" type_scope
+R36948 Integers.rol
+R36953 Integers.and
+R36966 Integers.and
+R36981 Integers.rol
+R36971 Integers.rol
+R37036 Integers.bitwise_binop_rol
+R37036 Integers.bitwise_binop_rol
+R37112 Coq.Init.Logic "x = y" type_scope
+R37096 Integers.rol
+R37101 Integers.rol
+R37114 Integers.rol
+R37121 Integers.modu
+R37137 Integers.repr
+R37143 Coq.ZArith.BinInt.Z_of_nat
+R37152 Integers.wordsize
+R37127 Integers.add
+R37219 Integers.unsigned_repr
+R37219 Integers.unsigned_repr
+R37219 Integers.unsigned_repr
+R37259 Integers.Z_of_bits_exten
+R37259 Integers.Z_of_bits_exten
+R37301 Integers.bits_of_Z_of_bits
+R37301 Integers.bits_of_Z_of_bits
+R37301 Integers.bits_of_Z_of_bits
+R37301 Integers.bits_of_Z_of_bits
+R37366 Coq.ZArith.BinInt.Z_of_nat
+R37375 Integers.wordsize
+R37366 Coq.ZArith.BinInt.Z_of_nat
+R37375 Integers.wordsize
+R37398 Integers.unsigned
+R37421 Integers.unsigned
+R37398 Integers.unsigned
+R37421 Integers.unsigned
+R37446 Coq.ZArith.BinInt "x > y" Z_scope
+R37446 Coq.ZArith.BinInt "x > y" Z_scope
+R37487 Integers.eqmod
+R37498 Integers.unsigned
+R37508 Integers.repr
+R37487 Integers.eqmod
+R37498 Integers.unsigned
+R37508 Integers.repr
+R37536 Integers.eqm_unsigned_repr
+R37536 Integers.eqm_unsigned_repr
+R37590 Coq.ZArith.BinInt "x * y" Z_scope
+R37601 Coq.ZArith.Zdiv "x / y" Z_scope
+R37593 Integers.modulus
+R37590 Coq.ZArith.BinInt "x * y" Z_scope
+R37601 Coq.ZArith.Zdiv "x / y" Z_scope
+R37593 Integers.modulus
+R37640 Coq.ZArith.BinInt "x * y" Z_scope
+R37624 Coq.ZArith.BinInt "x * y" Z_scope
+R37635 Coq.ZArith.Zdiv "x / y" Z_scope
+R37627 Integers.modulus
+R37653 Coq.ZArith.BinInt "x * y" Z_scope
+R37655 Integers.modulus
+R37640 Coq.ZArith.BinInt "x * y" Z_scope
+R37624 Coq.ZArith.BinInt "x * y" Z_scope
+R37635 Coq.ZArith.Zdiv "x / y" Z_scope
+R37627 Integers.modulus
+R37653 Coq.ZArith.BinInt "x * y" Z_scope
+R37655 Integers.modulus
+R37686 Coq.ZArith.BinInt.Zmult_assoc
+R37686 Coq.ZArith.BinInt.Zmult_assoc
+R37720 Integers.eqmod_mod_eq
+R37720 Integers.eqmod_mod_eq
+R37750 Integers.unsigned
+R37760 Integers.repr
+R37750 Integers.unsigned
+R37760 Integers.repr
+R37805 Coq.ZArith.BinInt "x - y" Z_scope
+R37813 Coq.ZArith.Zdiv "x 'mod' y" Z_scope
+R37810 Coq.ZArith.BinInt "x + y" Z_scope
+R37785 Integers.eqmod_trans
+R37805 Coq.ZArith.BinInt "x - y" Z_scope
+R37813 Coq.ZArith.Zdiv "x 'mod' y" Z_scope
+R37810 Coq.ZArith.BinInt "x + y" Z_scope
+R37785 Integers.eqmod_trans
+R37855 Coq.ZArith.BinInt "x - y" Z_scope
+R37852 Coq.ZArith.BinInt "x - y" Z_scope
+R37831 Integers.eqmod_trans
+R37855 Coq.ZArith.BinInt "x - y" Z_scope
+R37852 Coq.ZArith.BinInt "x - y" Z_scope
+R37831 Integers.eqmod_trans
+R37871 Integers.eqmod_sub
+R37871 Integers.eqmod_sub
+R37888 Integers.eqmod_sym
+R37888 Integers.eqmod_sym
+R37905 Integers.eqmod_mod
+R37905 Integers.eqmod_mod
+R37930 Integers.eqmod_refl
+R37930 Integers.eqmod_refl
+R37960 Coq.ZArith.BinInt "x - y" Z_scope
+R37956 Coq.ZArith.BinInt "x - y" Z_scope
+R37973 Coq.ZArith.BinInt "x - y" Z_scope
+R37978 Coq.ZArith.BinInt "x + y" Z_scope
+R37960 Coq.ZArith.BinInt "x - y" Z_scope
+R37956 Coq.ZArith.BinInt "x - y" Z_scope
+R37973 Coq.ZArith.BinInt "x - y" Z_scope
+R37978 Coq.ZArith.BinInt "x + y" Z_scope
+R37993 Integers.eqmod_sub
+R37993 Integers.eqmod_sub
+R38010 Integers.eqmod_refl
+R38010 Integers.eqmod_refl
+R38028 Integers.eqmod_mod
+R38028 Integers.eqmod_mod
+R38062 Integers.eqmod_sub
+R38062 Integers.eqmod_sub
+R38079 Integers.eqmod_refl
+R38079 Integers.eqmod_refl
+R38101 Integers.eqmod_trans
+R38101 Integers.eqmod_trans
+R38141 Integers.eqmod_trans
+R38167 Integers.eqmod_mod
+R38141 Integers.eqmod_trans
+R38167 Integers.eqmod_mod
+R38187 Integers.eqmod_sym
+R38187 Integers.eqmod_sym
+R38205 Integers.eqmod_trans
+R38231 Integers.eqmod_mod
+R38205 Integers.eqmod_trans
+R38231 Integers.eqmod_mod
+R38251 Integers.eqmod_sym
+R38251 Integers.eqmod_sym
+R38293 Coq.ZArith.Zdiv.Z_mod_lt
+R38293 Coq.ZArith.Zdiv.Z_mod_lt
+R38373 Coq.Init.Logic "x = y" type_scope
+R38359 Integers.rolm
+R38366 Integers.zero
+R38375 Integers.and
+R38422 Integers.rol_zero
+R38422 Integers.rol_zero
+R38515 Coq.Init.Logic "x = y" type_scope
+R38489 Integers.rolm
+R38495 Integers.rolm
+R38521 Integers.rolm
+R38586 Integers.and
+R38591 Integers.rol
+R38529 Integers.modu
+R38547 Integers.repr
+R38553 Coq.ZArith.BinInt.Z_of_nat
+R38562 Integers.wordsize
+R38535 Integers.add
+R38647 Integers.rol_and
+R38647 Integers.rol_and
+R38664 Integers.and_assoc
+R38664 Integers.and_assoc
+R38686 Integers.rol_rol
+R38686 Integers.rol_rol
+R38763 Coq.Init.Logic "x = y" type_scope
+R38748 Integers.rol
+R38753 Integers.or
+R38765 Integers.or
+R38779 Integers.rol
+R38769 Integers.rol
+R38833 Integers.bitwise_binop_rol
+R38833 Integers.bitwise_binop_rol
+R38928 Coq.Init.Logic "x = y" type_scope
+R38897 Integers.or
+R38915 Integers.rolm
+R38901 Integers.rolm
+R38930 Integers.rolm
+R38940 Integers.or
+R38997 Integers.and_or_distrib
+R38997 Integers.and_or_distrib
+R39083 Coq.ZArith.BinInt.Z
+R39074 Coq.Lists.List.list
+R39079 Coq.ZArith.BinInt.Z
+R39107 Coq.Lists.List.nil
+R39122 Coq.Lists.List "x :: y" list_scope
+R39139 Coq.ZArith.BinInt "x + y" Z_scope
+R39131 Coq.ZArith.Zpower.two_p
+R39074 Coq.Lists.List.list
+R39079 Coq.ZArith.BinInt.Z
+R39225 Coq.ZArith.BinInt "x <= y < z" Z_scope
+R39228 Coq.Init.Datatypes.snd
+R39233 Integers.Z_bin_decomp
+R39228 Coq.Init.Datatypes.snd
+R39233 Integers.Z_bin_decomp
+R39207 Coq.ZArith.BinInt "x <= y < z" Z_scope
+R39216 Coq.ZArith.BinInt "x * y" Z_scope
+R39283 Integers.Z_shift_add_bin_decomp
+R39283 Integers.Z_shift_add_bin_decomp
+R39352 Coq.Init.Datatypes.fst
+R39357 Integers.Z_bin_decomp
+R39352 Coq.Init.Datatypes.fst
+R39357 Integers.Z_bin_decomp
+R39451 Coq.Init.Logic "x = y" type_scope
+R39453 Integers.powerserie
+R39465 Integers.Z_one_bits
+R39476 Integers.wordsize
+R39431 Coq.ZArith.BinInt "x <= y < z" Z_scope
+R39438 Integers.modulus
+R39585 Coq.Init.Logic "x = y" type_scope
+R39575 Coq.ZArith.BinInt "x * y" Z_scope
+R39577 Coq.ZArith.Zpower.two_p
+R39587 Integers.powerserie
+R39599 Integers.Z_one_bits
+R39543 Coq.ZArith.BinInt "x <= y < z" Z_scope
+R39550 Coq.ZArith.Zpower.two_power_nat
+R39529 Coq.ZArith.BinInt "x <= y" Z_scope
+R39585 Coq.Init.Logic "x = y" type_scope
+R39575 Coq.ZArith.BinInt "x * y" Z_scope
+R39577 Coq.ZArith.Zpower.two_p
+R39587 Integers.powerserie
+R39599 Integers.Z_one_bits
+R39543 Coq.ZArith.BinInt "x <= y < z" Z_scope
+R39550 Coq.ZArith.Zpower.two_power_nat
+R39529 Coq.ZArith.BinInt "x <= y" Z_scope
+R39659 Coqlib.two_power_nat_O
+R39659 Coqlib.two_power_nat_O
+R39695 Coq.Init.Logic "x = y" type_scope
+R39695 Coq.Init.Logic "x = y" type_scope
+R39734 Coq.ZArith.Zpower.two_power_nat_S
+R39734 Coq.ZArith.Zpower.two_power_nat_S
+R39763 Integers.Z_one_bits
+R39763 Integers.Z_one_bits
+R39789 Integers.Z_shift_add_bin_decomp
+R39789 Integers.Z_shift_add_bin_decomp
+R39830 Integers.Z_bin_decomp_range
+R39830 Integers.Z_bin_decomp_range
+R39866 Integers.Z_bin_decomp
+R39866 Integers.Z_bin_decomp
+R39966 Integers.powerserie
+R39966 Integers.powerserie
+R40005 Coq.ZArith.Zpower.two_p_is_exp
+R40005 Coq.ZArith.Zpower.two_p_is_exp
+R40027 Coq.ZArith.Zpower.two_p
+R40027 Coq.ZArith.Zpower.two_p
+R40107 Coq.ZArith.Zpower.two_p_is_exp
+R40107 Coq.ZArith.Zpower.two_p_is_exp
+R40129 Coq.ZArith.Zpower.two_p
+R40129 Coq.ZArith.Zpower.two_p
+R40212 Coq.ZArith.Zpower.two_p
+R40212 Coq.ZArith.Zpower.two_p
+R40335 Coq.ZArith.BinInt "x <= y < z" Z_scope
+R40342 Coq.ZArith.BinInt.Z_of_nat
+R40351 Integers.wordsize
+R40299 Coq.Lists.List.In
+R40305 Integers.Z_one_bits
+R40316 Integers.wordsize
+R40427 Coq.ZArith.BinInt "x <= y < z" Z_scope
+R40436 Coq.ZArith.BinInt "x + y" Z_scope
+R40438 Coq.ZArith.BinInt.Z_of_nat
+R40398 Coq.Lists.List.In
+R40404 Integers.Z_one_bits
+R40427 Coq.ZArith.BinInt "x <= y < z" Z_scope
+R40436 Coq.ZArith.BinInt "x + y" Z_scope
+R40438 Coq.ZArith.BinInt.Z_of_nat
+R40398 Coq.Lists.List.In
+R40404 Integers.Z_one_bits
+R40472 Coq.Lists.List.In
+R40472 Coq.Lists.List.In
+R40472 Coq.Lists.List.In
+R40520 Integers.Z_bin_decomp
+R40520 Integers.Z_bin_decomp
+R40555 Coq.ZArith.Znat.inj_S
+R40555 Coq.ZArith.Znat.inj_S
+R40654 Coq.ZArith.Znat.inj_S
+R40654 Coq.ZArith.Znat.inj_S
+R40718 Integers.wordsize
+R40718 Integers.wordsize
+R40822 Coq.ZArith.BinInt "x <= y < z" Z_scope
+R40825 Integers.unsigned
+R40825 Integers.unsigned
+R40841 Coq.ZArith.BinInt.Z_of_nat
+R40850 Integers.wordsize
+R40803 Coq.Init.Logic "x = y" type_scope
+R40791 Integers.is_power2
+R40805 Coq.Init.Datatypes.Some
+R40916 Integers.Z_one_bits_range
+R40934 Integers.unsigned
+R40916 Integers.Z_one_bits_range
+R40934 Integers.unsigned
+R40960 Integers.Z_one_bits
+R40981 Integers.unsigned
+R40971 Integers.wordsize
+R40960 Integers.Z_one_bits
+R40981 Integers.unsigned
+R40971 Integers.wordsize
+R41100 Coq.ZArith.BinInt "x <= y < z" Z_scope
+R41107 Coq.ZArith.BinInt.Z_of_nat
+R41116 Integers.wordsize
+R41100 Coq.ZArith.BinInt "x <= y < z" Z_scope
+R41107 Coq.ZArith.BinInt.Z_of_nat
+R41116 Integers.wordsize
+R41166 Integers.unsigned_repr
+R41166 Integers.unsigned_repr
+R41215 Coq.ZArith.BinInt "x < y" Z_scope
+R41197 Coq.ZArith.BinInt.Z_of_nat
+R41206 Integers.wordsize
+R41217 Integers.max_unsigned
+R41215 Coq.ZArith.BinInt "x < y" Z_scope
+R41197 Coq.ZArith.BinInt.Z_of_nat
+R41206 Integers.wordsize
+R41217 Integers.max_unsigned
+R41393 Coq.Init.Logic "x = y" type_scope
+R41357 Integers.ltu
+R41367 Integers.repr
+R41373 Coq.ZArith.BinInt.Z_of_nat
+R41382 Integers.wordsize
+R41395 Coq.Init.Datatypes.true
+R41342 Coq.Init.Logic "x = y" type_scope
+R41330 Integers.is_power2
+R41344 Coq.Init.Datatypes.Some
+R41483 Coq.ZArith.BinInt.Z_of_nat
+R41492 Integers.wordsize
+R41440 Integers.unsigned
+R41450 Integers.repr
+R41456 Coq.ZArith.BinInt.Z_of_nat
+R41465 Integers.wordsize
+R41483 Coq.ZArith.BinInt.Z_of_nat
+R41492 Integers.wordsize
+R41440 Integers.unsigned
+R41450 Integers.repr
+R41456 Coq.ZArith.BinInt.Z_of_nat
+R41465 Integers.wordsize
+R41517 Integers.is_power2_rng
+R41517 Integers.is_power2_rng
+R41548 Coqlib.zlt
+R41569 Coq.ZArith.BinInt.Z_of_nat
+R41578 Integers.wordsize
+R41553 Integers.unsigned
+R41548 Coqlib.zlt
+R41569 Coq.ZArith.BinInt.Z_of_nat
+R41578 Integers.wordsize
+R41553 Integers.unsigned
+R41718 Coq.Init.Logic "x = y" type_scope
+R41707 Integers.unsigned
+R41720 Coq.ZArith.Zpower.two_p
+R41727 Integers.unsigned
+R41690 Coq.Init.Logic "x = y" type_scope
+R41678 Integers.is_power2
+R41692 Coq.Init.Datatypes.Some
+R41799 Integers.Z_one_bits_powerserie
+R41835 Integers.unsigned_range
+R41822 Integers.unsigned
+R41799 Integers.Z_one_bits_powerserie
+R41835 Integers.unsigned_range
+R41822 Integers.unsigned
+R41869 Integers.Z_one_bits_range
+R41887 Integers.unsigned
+R41869 Integers.Z_one_bits_range
+R41887 Integers.unsigned
+R41913 Integers.Z_one_bits
+R41934 Integers.unsigned
+R41924 Integers.wordsize
+R41913 Integers.Z_one_bits
+R41934 Integers.unsigned
+R41924 Integers.wordsize
+R42065 Integers.unsigned_repr
+R42065 Integers.unsigned_repr
+R42089 Coq.ZArith.Zpower.two_p
+R42112 Coq.ZArith.BinInt "x + y" Z_scope
+R42104 Coq.ZArith.Zpower.two_p
+R42089 Coq.ZArith.Zpower.two_p
+R42112 Coq.ZArith.BinInt "x + y" Z_scope
+R42104 Coq.ZArith.Zpower.two_p
+R42182 Coq.ZArith.BinInt "x < y" Z_scope
+R42164 Coq.ZArith.BinInt.Z_of_nat
+R42173 Integers.wordsize
+R42184 Integers.max_unsigned
+R42182 Coq.ZArith.BinInt "x < y" Z_scope
+R42164 Coq.ZArith.BinInt.Z_of_nat
+R42173 Integers.wordsize
+R42184 Integers.max_unsigned
+R42348 Coq.Init.Logic "x = y" type_scope
+R42340 Integers.mul
+R42350 Integers.shl
+R42323 Coq.Init.Logic "x = y" type_scope
+R42311 Integers.is_power2
+R42325 Coq.Init.Datatypes.Some
+R42391 Integers.is_power2_correct
+R42391 Integers.is_power2_correct
+R42437 Integers.shl_mul_two_p
+R42437 Integers.shl_mul_two_p
+R42475 Integers.repr_unsigned
+R42475 Integers.repr_unsigned
+R42609 Coq.Init.Logic "x = y" type_scope
+R42595 Integers.Z_of_bits
+R42611 Integers.Z_shift_add
+R42630 Integers.Z_of_bits
+R42656 Coq.ZArith.BinInt "x + y" Z_scope
+R42581 Coq.Init.Logic "x = y" type_scope
+R42583 Coq.Init.Datatypes.false
+R42560 Coq.ZArith.BinInt "x >= y" Z_scope
+R42563 Coq.ZArith.BinInt.Z_of_nat
+R42788 Coq.ZArith.BinInt "x + y" Z_scope
+R42788 Coq.ZArith.BinInt "x + y" Z_scope
+R42839 Coq.ZArith.Znat.inj_S
+R42839 Coq.ZArith.Znat.inj_S
+R42970 Coq.Init.Logic "'exists' x , p" type_scope
+R43060 Coq.Init.Logic "A /\ B" type_scope
+R43003 Coq.Init.Logic "x = y" type_scope
+R42982 Integers.Z_of_bits
+R42992 Integers.wordsize
+R43007 Coq.ZArith.BinInt "x + y" Z_scope
+R43017 Coq.ZArith.BinInt "x * y" Z_scope
+R43009 Coq.ZArith.Zpower.two_p
+R43019 Integers.Z_of_bits
+R43052 Coq.ZArith.BinInt "x + y" Z_scope
+R43029 Integers.wordsize
+R43065 Coq.ZArith.BinInt "x <= y < z" Z_scope
+R43072 Coq.ZArith.Zpower.two_p
+R42956 Coq.Init.Logic "x = y" type_scope
+R42958 Coq.Init.Datatypes.false
+R42928 Coq.ZArith.BinInt "x >= y" Z_scope
+R42931 Coq.ZArith.BinInt.Z_of_nat
+R42940 Integers.wordsize
+R42905 Coq.ZArith.BinInt "x <= y" Z_scope
+R43115 Coq.ZArith.Wf_Z.natlike_ind
+R43115 Coq.ZArith.Wf_Z.natlike_ind
+R43148 Coq.ZArith.Zpower.two_p
+R43148 Coq.ZArith.Zpower.two_p
+R43188 Integers.Z_of_bits
+R43222 Coq.ZArith.BinInt "x + y" Z_scope
+R43198 Integers.wordsize
+R43188 Integers.Z_of_bits
+R43222 Coq.ZArith.BinInt "x + y" Z_scope
+R43198 Integers.wordsize
+R43238 Integers.Z_of_bits_exten
+R43238 Integers.Z_of_bits_exten
+R43354 Coq.ZArith.BinInt "x + y" Z_scope
+R43354 Coq.ZArith.BinInt "x + y" Z_scope
+R43417 Coq.Init.Logic "x = y" type_scope
+R43419 Coq.Init.Datatypes.false
+R43388 Coq.ZArith.BinInt "x >= y" Z_scope
+R43391 Coq.ZArith.BinInt.Z_of_nat
+R43400 Integers.wordsize
+R43417 Coq.Init.Logic "x = y" type_scope
+R43419 Coq.Init.Datatypes.false
+R43388 Coq.ZArith.BinInt "x >= y" Z_scope
+R43391 Coq.ZArith.BinInt.Z_of_nat
+R43400 Integers.wordsize
+R43481 Integers.Z_of_bits_shift_rev
+R43501 Integers.wordsize
+R43481 Integers.Z_of_bits_shift_rev
+R43501 Integers.wordsize
+R43565 Integers.Z_of_bits
+R43599 Coq.ZArith.BinInt "x + y" Z_scope
+R43601 Coq.ZArith.BinInt.Zsucc
+R43575 Integers.wordsize
+R43565 Integers.Z_of_bits
+R43599 Coq.ZArith.BinInt "x + y" Z_scope
+R43601 Coq.ZArith.BinInt.Zsucc
+R43575 Integers.wordsize
+R43624 Integers.Z_of_bits
+R43659 Coq.ZArith.BinInt "x + y" Z_scope
+R43634 Integers.wordsize
+R43624 Integers.Z_of_bits
+R43659 Coq.ZArith.BinInt "x + y" Z_scope
+R43634 Integers.wordsize
+R43684 Coq.ZArith.Zpower.two_p_S
+R43684 Coq.ZArith.Zpower.two_p_S
+R43740 Coq.ZArith.BinInt "x + y" Z_scope
+R43742 Coq.ZArith.Zpower.two_p
+R43740 Coq.ZArith.BinInt "x + y" Z_scope
+R43742 Coq.ZArith.Zpower.two_p
+R43832 Integers.Z_of_bits_exten
+R43832 Integers.Z_of_bits_exten
+R43946 Coq.Init.Logic "x = y" type_scope
+R43937 Integers.shru
+R43948 Integers.repr
+R43965 Coq.ZArith.Zdiv "x / y" Z_scope
+R43954 Integers.unsigned
+R43967 Coq.ZArith.Zpower.two_p
+R43974 Integers.unsigned
+R44032 Integers.unsigned
+R44032 Integers.unsigned
+R44056 Integers.unsigned
+R44056 Integers.unsigned
+R44077 Integers.Z_of_bits_shifts_rev
+R44102 Integers.bits_of_Z
+R44112 Integers.wordsize
+R44077 Integers.Z_of_bits_shifts_rev
+R44102 Integers.bits_of_Z
+R44112 Integers.wordsize
+R44161 Integers.Z_of_bits
+R44181 Integers.bits_of_Z
+R44191 Integers.wordsize
+R44171 Integers.wordsize
+R44161 Integers.Z_of_bits
+R44181 Integers.bits_of_Z
+R44191 Integers.wordsize
+R44171 Integers.wordsize
+R44230 Coq.ZArith.BinInt.Zplus_comm
+R44230 Coq.ZArith.BinInt.Zplus_comm
+R44256 Coq.ZArith.BinInt.Zmult_comm
+R44256 Coq.ZArith.BinInt.Zmult_comm
+R44288 Coqlib.Zdiv_unique
+R44288 Coqlib.Zdiv_unique
+R44354 Integers.eqm_small_eq
+R44354 Integers.eqm_small_eq
+R44374 Integers.eqm_sym
+R44374 Integers.eqm_sym
+R44389 Integers.Z_of_bits_of_Z
+R44389 Integers.Z_of_bits_of_Z
+R44425 Integers.unsigned_range
+R44425 Integers.unsigned_range
+R44474 Integers.unsigned_range
+R44474 Integers.unsigned_range
+R44527 Integers.bits_of_Z_above
+R44527 Integers.bits_of_Z_above
+R44599 Coq.Init.Logic "x = y" type_scope
+R44587 Integers.shru
+R44594 Integers.zero
+R44629 Integers.shru_div_two_p
+R44629 Integers.shru_div_two_p
+R44653 Coq.ZArith.Zpower.two_p
+R44660 Integers.unsigned
+R44669 Integers.zero
+R44653 Coq.ZArith.Zpower.two_p
+R44660 Integers.unsigned
+R44669 Integers.zero
+R44700 Integers.repr
+R44706 Integers.unsigned
+R44700 Integers.repr
+R44706 Integers.unsigned
+R44733 Coqlib.Zdiv_unique
+R44733 Coqlib.Zdiv_unique
+R44832 Coq.Init.Logic "x = y" type_scope
+R44821 Integers.shr
+R44827 Integers.zero
+R44874 Coq.ZArith.Zpower.two_p
+R44881 Integers.unsigned
+R44890 Integers.zero
+R44874 Coq.ZArith.Zpower.two_p
+R44881 Integers.unsigned
+R44890 Integers.zero
+R44925 Coq.ZArith.Zdiv "x / y" Z_scope
+R44916 Integers.signed
+R44936 Integers.signed
+R44925 Coq.ZArith.Zdiv "x / y" Z_scope
+R44916 Integers.signed
+R44936 Integers.signed
+R44955 Integers.repr_signed
+R44955 Integers.repr_signed
+R44986 Coqlib.Zdiv_unique
+R44986 Coqlib.Zdiv_unique
+R45105 Coq.Init.Logic "x = y" type_scope
+R45096 Integers.divu
+R45107 Integers.shru
+R45079 Coq.Init.Logic "x = y" type_scope
+R45067 Integers.is_power2
+R45081 Coq.Init.Datatypes.Some
+R45149 Integers.is_power2_correct
+R45149 Integers.is_power2_correct
+R45228 Integers.shru_div_two_p
+R45228 Integers.shru_div_two_p
+R45303 Coq.Init.Logic "x = y" type_scope
+R45305 Integers.add
+R45329 Integers.modu
+R45310 Integers.mul
+R45315 Integers.divu
+R45290 Coq.Init.Logic "x <> y" type_scope
+R45293 Integers.zero
+R45402 Integers.repr
+R45408 Integers.unsigned
+R45402 Integers.repr
+R45408 Integers.unsigned
+R45447 Integers.eqm_samerepr
+R45447 Integers.eqm_samerepr
+R45475 Integers.unsigned
+R45475 Integers.unsigned
+R45499 Integers.unsigned
+R45499 Integers.unsigned
+R45551 Coq.ZArith.BinInt "x + y" Z_scope
+R45544 Coq.ZArith.BinInt "x * y" Z_scope
+R45540 Coq.ZArith.Zdiv "x / y" Z_scope
+R45556 Coq.ZArith.Zdiv "x 'mod' y" Z_scope
+R45520 Integers.eqm_trans
+R45551 Coq.ZArith.BinInt "x + y" Z_scope
+R45544 Coq.ZArith.BinInt "x * y" Z_scope
+R45540 Coq.ZArith.Zdiv "x / y" Z_scope
+R45556 Coq.ZArith.Zdiv "x 'mod' y" Z_scope
+R45520 Integers.eqm_trans
+R45573 Integers.eqm_refl2
+R45573 Integers.eqm_refl2
+R45592 Coq.ZArith.BinInt.Zmult_comm
+R45592 Coq.ZArith.BinInt.Zmult_comm
+R45610 Coq.ZArith.Zdiv.Z_div_mod_eq
+R45610 Coq.ZArith.Zdiv.Z_div_mod_eq
+R45638 Integers.unsigned_range
+R45638 Integers.unsigned_range
+R45685 Coq.Init.Logic "x <> y" type_scope
+R45674 Integers.unsigned
+R45685 Coq.Init.Logic "x <> y" type_scope
+R45674 Integers.unsigned
+R45727 Integers.repr_unsigned
+R45727 Integers.repr_unsigned
+R45869 Coq.Init.Logic "x = y" type_scope
+R45860 Integers.modu
+R45871 Integers.sub
+R45878 Integers.mul
+R45883 Integers.divu
+R45849 Coq.Init.Logic "x <> y" type_scope
+R45852 Integers.zero
+R45956 Coq.Init.Logic "x = y" type_scope
+R45958 Integers.sub
+R45941 Coq.Init.Logic "x = y" type_scope
+R45943 Integers.add
+R45956 Coq.Init.Logic "x = y" type_scope
+R45958 Integers.sub
+R45941 Coq.Init.Logic "x = y" type_scope
+R45943 Integers.add
+R45995 Integers.sub_add_l
+R45995 Integers.sub_add_l
+R46014 Integers.sub_idem
+R46014 Integers.sub_idem
+R46034 Integers.add_commut
+R46034 Integers.add_commut
+R46054 Integers.add_zero
+R46054 Integers.add_zero
+R46088 Integers.modu_divu_Euclid
+R46088 Integers.modu_divu_Euclid
+R46160 Coq.Init.Logic "x = y" type_scope
+R46151 Integers.mods
+R46162 Integers.sub
+R46169 Integers.mul
+R46174 Integers.divs
+R46242 Integers.eqm_samerepr
+R46242 Integers.eqm_samerepr
+R46285 Integers.eqm_sub
+R46285 Integers.eqm_sub
+R46300 Integers.eqm_signed_unsigned
+R46300 Integers.eqm_signed_unsigned
+R46330 Integers.eqm_unsigned_repr_r
+R46330 Integers.eqm_unsigned_repr_r
+R46360 Integers.eqm_mult
+R46360 Integers.eqm_mult
+R46392 Integers.eqm_signed_unsigned
+R46392 Integers.eqm_signed_unsigned
+R46497 Coq.Init.Logic "x = y" type_scope
+R46488 Integers.divs
+R46499 Integers.shrx
+R46471 Coq.Init.Logic "x = y" type_scope
+R46459 Integers.is_power2
+R46473 Coq.Init.Datatypes.Some
+R46541 Integers.is_power2_correct
+R46541 Integers.is_power2_correct
+R46597 Integers.shl_mul_two_p
+R46597 Integers.shl_mul_two_p
+R46622 Integers.mul_commut
+R46622 Integers.mul_commut
+R46642 Integers.mul_one
+R46642 Integers.mul_one
+R46676 Integers.repr_unsigned
+R46676 Integers.repr_unsigned
+R46769 Coq.Init.Logic "x = y" type_scope
+R46739 Integers.add
+R46754 Integers.shr_carry
+R46744 Integers.shr
+R46771 Integers.shrx
+R46827 Integers.sub_add_opp
+R46827 Integers.sub_add_opp
+R46848 Integers.add_permut
+R46848 Integers.add_permut
+R46871 Integers.add_neg_zero
+R46871 Integers.add_neg_zero
+R46891 Integers.add_zero
+R46891 Integers.add_zero
+R47003 Coq.Init.Logic "x = y" type_scope
+R46979 Integers.add
+R46994 Integers.and
+R46984 Integers.and
+R46967 Coq.Init.Logic "x = y" type_scope
+R46960 Integers.or
+R46969 Integers.mone
+R46948 Coq.Init.Logic "x = y" type_scope
+R46940 Integers.and
+R46950 Integers.zero
+R47051 Integers.repr
+R47057 Integers.unsigned
+R47051 Integers.repr
+R47057 Integers.unsigned
+R47140 Integers.unsigned_repr
+R47140 Integers.unsigned_repr
+R47140 Integers.unsigned_repr
+R47140 Integers.unsigned_repr
+R47140 Integers.unsigned_repr
+R47140 Integers.unsigned_repr
+R47187 Integers.Z_of_bits
+R47207 Integers.bits_of_Z
+R47227 Integers.unsigned
+R47217 Integers.wordsize
+R47197 Integers.wordsize
+R47187 Integers.Z_of_bits
+R47207 Integers.bits_of_Z
+R47227 Integers.unsigned
+R47217 Integers.wordsize
+R47197 Integers.wordsize
+R47250 Integers.Z_of_bits_excl
+R47250 Integers.Z_of_bits_excl
+R47318 Coq.Init.Logic "x = y" type_scope
+R47306 Coq.Bool.Bool "x && y" bool_scope
+R47301 Coq.Bool.Bool "x && y" bool_scope
+R47312 Coq.Bool.Bool "x && y" bool_scope
+R47322 Coq.Bool.Bool "x && y" bool_scope
+R47328 Coq.Bool.Bool "x && y" bool_scope
+R47318 Coq.Init.Logic "x = y" type_scope
+R47306 Coq.Bool.Bool "x && y" bool_scope
+R47301 Coq.Bool.Bool "x && y" bool_scope
+R47312 Coq.Bool.Bool "x && y" bool_scope
+R47322 Coq.Bool.Bool "x && y" bool_scope
+R47328 Coq.Bool.Bool "x && y" bool_scope
+R47449 Coq.Bool.Bool "x && y" bool_scope
+R47415 Integers.bits_of_Z
+R47435 Integers.unsigned
+R47425 Integers.wordsize
+R47463 Integers.bits_of_Z
+R47483 Integers.unsigned
+R47473 Integers.wordsize
+R47509 Integers.bits_of_Z
+R47529 Integers.unsigned
+R47539 Integers.and
+R47519 Integers.wordsize
+R47449 Coq.Bool.Bool "x && y" bool_scope
+R47415 Integers.bits_of_Z
+R47435 Integers.unsigned
+R47425 Integers.wordsize
+R47463 Integers.bits_of_Z
+R47483 Integers.unsigned
+R47473 Integers.wordsize
+R47509 Integers.bits_of_Z
+R47529 Integers.unsigned
+R47539 Integers.and
+R47519 Integers.wordsize
+R47574 Integers.unsigned
+R47583 Integers.zero
+R47574 Integers.unsigned
+R47583 Integers.zero
+R47608 Integers.bits_of_Z_zero
+R47608 Integers.bits_of_Z_zero
+R47630 Coq.Bool.Bool.andb_b_false
+R47630 Coq.Bool.Bool.andb_b_false
+R47684 Integers.unsigned_repr
+R47684 Integers.unsigned_repr
+R47723 Integers.bits_of_Z_of_bits
+R47723 Integers.bits_of_Z_of_bits
+R47786 Coq.Bool.Bool.demorgan1
+R47786 Coq.Bool.Bool.demorgan1
+R47843 Coq.Bool.Bool "x || y" bool_scope
+R47809 Integers.bits_of_Z
+R47829 Integers.unsigned
+R47819 Integers.wordsize
+R47857 Integers.bits_of_Z
+R47877 Integers.unsigned
+R47867 Integers.wordsize
+R47903 Integers.bits_of_Z
+R47923 Integers.unsigned
+R47933 Integers.or
+R47913 Integers.wordsize
+R47843 Coq.Bool.Bool "x || y" bool_scope
+R47809 Integers.bits_of_Z
+R47829 Integers.unsigned
+R47819 Integers.wordsize
+R47857 Integers.bits_of_Z
+R47877 Integers.unsigned
+R47867 Integers.wordsize
+R47903 Integers.bits_of_Z
+R47923 Integers.unsigned
+R47933 Integers.or
+R47913 Integers.wordsize
+R48012 Coq.ZArith.BinInt "x - y" Z_scope
+R47989 Coq.ZArith.Zpower.two_power_nat
+R48003 Integers.wordsize
+R47968 Integers.unsigned
+R47977 Integers.mone
+R48012 Coq.ZArith.BinInt "x - y" Z_scope
+R47989 Coq.ZArith.Zpower.two_power_nat
+R48003 Integers.wordsize
+R47968 Integers.unsigned
+R47977 Integers.mone
+R48028 Integers.bits_of_Z_mone
+R48028 Integers.bits_of_Z_mone
+R48056 Coq.Bool.Bool.andb_b_true
+R48056 Coq.Bool.Bool.andb_b_true
+R48108 Integers.unsigned_repr
+R48108 Integers.unsigned_repr
+R48147 Integers.bits_of_Z_of_bits
+R48147 Integers.bits_of_Z_of_bits
+R48180 Integers.eqm_small_eq
+R48180 Integers.eqm_small_eq
+R48216 Integers.Z_of_bits_of_Z
+R48216 Integers.Z_of_bits_of_Z
+R48310 Integers.int
+R48303 Integers.int
+R48358 Coq.Init.Datatypes.bool
+R48351 Coq.Init.Datatypes.nat
+R48385 Coq.Init.Datatypes.O
+R48390 Coq.Init.Datatypes.true
+R48399 Coq.Init.Datatypes.S
+R48409 Integers.eq
+R48440 Integers.repr
+R48446 Coq.ZArith.BinInt.Z_of_nat
+R48416 Integers.repr
+R48422 Coq.ZArith.BinInt.Z_of_nat
+R48515 Coq.Init.Datatypes.false
+R48351 Coq.Init.Datatypes.nat
+R48659 Coq.Init.Logic "x = y" type_scope
+R48651 Integers.repr
+R48664 Integers.repr
+R48627 Coq.ZArith.BinInt "x <= y < z" Z_scope
+R48634 Coq.ZArith.BinInt.Z_of_nat
+R48603 Coq.Init.Logic "x = y" type_scope
+R48580 Integers.check_equal_on_range
+R48605 Coq.Init.Datatypes.true
+R48741 Integers.check_equal_on_range
+R48741 Integers.check_equal_on_range
+R48779 Integers.repr
+R48785 Coq.ZArith.BinInt.Z_of_nat
+R48779 Integers.repr
+R48785 Coq.ZArith.BinInt.Z_of_nat
+R48816 Integers.repr
+R48822 Coq.ZArith.BinInt.Z_of_nat
+R48816 Integers.repr
+R48822 Coq.ZArith.BinInt.Z_of_nat
+R48851 Integers.eq_spec
+R48851 Integers.eq_spec
+R48875 Integers.eq
+R48875 Integers.eq
+R48904 Coq.ZArith.Znat.inj_S
+R48904 Coq.ZArith.Znat.inj_S
+R48948 Coq.Init.Logic "A \/ B" type_scope
+R48930 Coq.ZArith.BinInt "x <= y < z" Z_scope
+R48937 Coq.ZArith.BinInt.Z_of_nat
+R48953 Coq.Init.Logic "x = y" type_scope
+R48955 Coq.ZArith.BinInt.Z_of_nat
+R48948 Coq.Init.Logic "A \/ B" type_scope
+R48930 Coq.ZArith.BinInt "x <= y < z" Z_scope
+R48937 Coq.ZArith.BinInt.Z_of_nat
+R48953 Coq.Init.Logic "x = y" type_scope
+R48955 Coq.ZArith.BinInt.Z_of_nat
+R49180 Coq.Init.Logic "x = y" type_scope
+R49137 Coq.ZArith.BinInt "x <= y < z" Z_scope
+R49140 Integers.unsigned
+R49140 Integers.unsigned
+R49153 Coq.ZArith.BinInt.Z_of_nat
+R49162 Integers.wordsize
+R49113 Coq.Init.Logic "x = y" type_scope
+R49083 Integers.check_equal_on_range
+R49104 Integers.wordsize
+R49115 Coq.Init.Datatypes.true
+R49220 Integers.repr
+R49226 Integers.unsigned
+R49220 Integers.repr
+R49226 Integers.unsigned
+R49283 Integers.wordsize
+R49249 Integers.check_equal_on_range_correct
+R49283 Integers.wordsize
+R49249 Integers.check_equal_on_range_correct
+R49307 Integers.repr_unsigned
+R49307 Integers.repr_unsigned
+R49455 Coq.Init.Logic "x = y" type_scope
+R49429 Integers.rol
+R49434 Integers.shru
+R49439 Integers.mone
+R49457 Integers.shl
+R49461 Integers.mone
+R49387 Coq.ZArith.BinInt "x <= y < z" Z_scope
+R49390 Integers.unsigned
+R49390 Integers.unsigned
+R49406 Coq.ZArith.BinInt.Z_of_nat
+R49415 Integers.wordsize
+R49479 Integers.equal_on_range
+R49572 Coq.Init.Logic.refl_equal
+R49583 Coq.Init.Datatypes.true
+R49551 Integers.shl
+R49555 Integers.mone
+R49512 Integers.rol
+R49517 Integers.shru
+R49522 Integers.mone
+R49736 Coq.Init.Logic "x = y" type_scope
+R49675 Integers.and
+R49696 Integers.sub
+R49731 Integers.one
+R49701 Integers.repr
+R49707 Coq.ZArith.Zpower.two_p
+R49714 Integers.unsigned
+R49680 Integers.shl
+R49684 Integers.mone
+R49738 Integers.zero
+R49633 Coq.ZArith.BinInt "x <= y < z" Z_scope
+R49636 Integers.unsigned
+R49636 Integers.unsigned
+R49652 Coq.ZArith.BinInt.Z_of_nat
+R49661 Integers.wordsize
+R49751 Integers.equal_on_range
+R49896 Coq.Init.Logic.refl_equal
+R49907 Coq.Init.Datatypes.true
+R49880 Integers.zero
+R49784 Integers.and
+R49824 Integers.sub
+R49856 Integers.one
+R49829 Integers.repr
+R49835 Coq.ZArith.Zpower.two_p
+R49842 Integers.unsigned
+R49789 Integers.shl
+R49793 Integers.mone
+R50059 Coq.Init.Logic "x = y" type_scope
+R49999 Integers.or
+R50019 Integers.sub
+R50054 Integers.one
+R50024 Integers.repr
+R50030 Coq.ZArith.Zpower.two_p
+R50037 Integers.unsigned
+R50003 Integers.shl
+R50007 Integers.mone
+R50061 Integers.mone
+R49957 Coq.ZArith.BinInt "x <= y < z" Z_scope
+R49960 Integers.unsigned
+R49960 Integers.unsigned
+R49976 Coq.ZArith.BinInt.Z_of_nat
+R49985 Integers.wordsize
+R50074 Integers.equal_on_range
+R50217 Coq.Init.Logic.refl_equal
+R50228 Coq.Init.Datatypes.true
+R50202 Integers.mone
+R50107 Integers.or
+R50146 Integers.sub
+R50178 Integers.one
+R50151 Integers.repr
+R50157 Coq.ZArith.Zpower.two_p
+R50164 Integers.unsigned
+R50111 Integers.shl
+R50115 Integers.mone
+R50314 Coq.Init.Logic "x = y" type_scope
+R50305 Integers.modu
+R50316 Integers.and
+R50323 Integers.sub
+R50329 Integers.one
+R50288 Coq.Init.Logic "x = y" type_scope
+R50276 Integers.is_power2
+R50290 Coq.Init.Datatypes.Some
+R50364 Integers.is_power2_correct
+R50364 Integers.is_power2_correct
+R50411 Integers.is_power2_rng
+R50411 Integers.is_power2_rng
+R50452 Coq.Init.Logic "x <> y" type_scope
+R50455 Integers.zero
+R50452 Coq.Init.Logic "x <> y" type_scope
+R50455 Integers.zero
+R50496 Integers.unsigned
+R50505 Integers.zero
+R50496 Integers.unsigned
+R50505 Integers.zero
+R50559 Coq.ZArith.BinInt "x > y" Z_scope
+R50537 Coq.ZArith.Zpower.two_p
+R50544 Integers.unsigned
+R50559 Coq.ZArith.BinInt "x > y" Z_scope
+R50537 Coq.ZArith.Zpower.two_p
+R50544 Integers.unsigned
+R50571 Coq.ZArith.Zpower.two_p_gt_ZERO
+R50571 Coq.ZArith.Zpower.two_p_gt_ZERO
+R50631 Integers.modu_divu_Euclid
+R50631 Integers.modu_divu_Euclid
+R50711 Coq.Init.Logic "x = y" type_scope
+R50696 Coq.Init.Logic "x = y" type_scope
+R50688 Integers.add
+R50698 Integers.add
+R50711 Coq.Init.Logic "x = y" type_scope
+R50696 Coq.Init.Logic "x = y" type_scope
+R50688 Integers.add
+R50698 Integers.add
+R50753 Coq.Init.Logic "x = y" type_scope
+R50737 Integers.sub
+R50742 Integers.add
+R50755 Integers.sub
+R50760 Integers.add
+R50753 Coq.Init.Logic "x = y" type_scope
+R50737 Integers.sub
+R50742 Integers.add
+R50755 Integers.sub
+R50760 Integers.add
+R50804 Integers.sub_add_l
+R50804 Integers.sub_add_l
+R50804 Integers.sub_add_l
+R50804 Integers.sub_add_l
+R50836 Integers.sub_idem
+R50836 Integers.sub_idem
+R50836 Integers.sub_idem
+R50864 Integers.add_commut
+R50890 Integers.add_zero
+R50864 Integers.add_commut
+R50890 Integers.add_zero
+R50918 Integers.add_commut
+R50944 Integers.add_zero
+R50918 Integers.add_commut
+R50944 Integers.add_zero
+R50987 Integers.mul
+R50992 Integers.divu
+R50987 Integers.mul
+R50992 Integers.divu
+R51035 Integers.divu_pow2
+R51035 Integers.divu_pow2
+R51070 Integers.mul_pow2
+R51080 Integers.shru
+R51070 Integers.mul_pow2
+R51080 Integers.shru
+R51115 Integers.shru_rolm
+R51115 Integers.shru_rolm
+R51134 Integers.shl_rolm
+R51134 Integers.shl_rolm
+R51152 Integers.rolm_rolm
+R51152 Integers.rolm_rolm
+R51173 Integers.sub_add_opp
+R51173 Integers.sub_add_opp
+R51194 Integers.add_assoc
+R51194 Integers.add_assoc
+R51217 Integers.add
+R51222 Integers.neg
+R51243 Integers.zero
+R51217 Integers.add
+R51222 Integers.neg
+R51243 Integers.zero
+R51259 Integers.add_zero
+R51259 Integers.add_zero
+R51348 Integers.zero
+R51279 Integers.modu
+R51312 Integers.repr
+R51318 Coq.ZArith.BinInt.Z_of_nat
+R51327 Integers.wordsize
+R51285 Integers.repr
+R51291 Coq.ZArith.BinInt.Z_of_nat
+R51300 Integers.wordsize
+R51348 Integers.zero
+R51279 Integers.modu
+R51312 Integers.repr
+R51318 Coq.ZArith.BinInt.Z_of_nat
+R51327 Integers.wordsize
+R51285 Integers.repr
+R51291 Coq.ZArith.BinInt.Z_of_nat
+R51300 Integers.wordsize
+R51364 Integers.rolm_zero
+R51364 Integers.rolm_zero
+R51406 Integers.repr
+R51412 Coq.ZArith.Zpower.two_p
+R51419 Integers.unsigned
+R51406 Integers.repr
+R51412 Coq.ZArith.Zpower.two_p
+R51419 Integers.unsigned
+R51447 Integers.modu_and_masks_1
+R51447 Integers.modu_and_masks_1
+R51481 Integers.and_idem
+R51481 Integers.and_idem
+R51499 Integers.add_and
+R51499 Integers.add_and
+R51514 Integers.modu_and_masks_2
+R51514 Integers.modu_and_masks_2
+R51544 Integers.modu_and_masks_3
+R51544 Integers.modu_and_masks_3
+R51584 Integers.repr
+R51590 Integers.unsigned
+R51584 Integers.repr
+R51590 Integers.unsigned
+R51643 Integers.add_commut
+R51643 Integers.add_commut
+R51663 Integers.add_neg_zero
+R51663 Integers.add_neg_zero
+R51703 Coqlib.zlt_true
+R51703 Coqlib.zlt_true
+R51767 Coq.ZArith.BinInt.Z_of_nat
+R51776 Integers.wordsize
+R51724 Integers.unsigned
+R51734 Integers.repr
+R51740 Coq.ZArith.BinInt.Z_of_nat
+R51749 Integers.wordsize
+R51767 Coq.ZArith.BinInt.Z_of_nat
+R51776 Integers.wordsize
+R51724 Integers.unsigned
+R51734 Integers.repr
+R51740 Coq.ZArith.BinInt.Z_of_nat
+R51749 Integers.wordsize
+R51816 Coqlib.zlt_true
+R51816 Coqlib.zlt_true
+R51880 Coq.ZArith.BinInt.Z_of_nat
+R51889 Integers.wordsize
+R51837 Integers.unsigned
+R51847 Integers.repr
+R51853 Coq.ZArith.BinInt.Z_of_nat
+R51862 Integers.wordsize
+R51880 Coq.ZArith.BinInt.Z_of_nat
+R51889 Integers.wordsize
+R51837 Integers.unsigned
+R51847 Integers.repr
+R51853 Coq.ZArith.BinInt.Z_of_nat
+R51862 Integers.wordsize
+R51970 Coq.Init.Logic "x = y" type_scope
+R51954 Integers.cast8unsigned
+R51972 Integers.and
+R51979 Integers.repr
+R52073 Integers.modu
+R52081 Integers.repr
+R52040 Integers.repr
+R52057 Coq.ZArith.Zdiv "x 'mod' y" Z_scope
+R52046 Integers.unsigned
+R52073 Integers.modu
+R52081 Integers.repr
+R52040 Integers.repr
+R52057 Coq.ZArith.Zdiv "x 'mod' y" Z_scope
+R52046 Integers.unsigned
+R52119 Integers.sub
+R52134 Integers.one
+R52124 Integers.repr
+R52103 Integers.repr
+R52119 Integers.sub
+R52134 Integers.one
+R52124 Integers.repr
+R52103 Integers.repr
+R52163 Integers.repr
+R52148 Integers.modu_and
+R52163 Integers.repr
+R52148 Integers.modu_and
+R52248 Coq.Init.Logic "x = y" type_scope
+R52231 Integers.cast16unsigned
+R52250 Integers.and
+R52257 Integers.repr
+R52356 Integers.modu
+R52364 Integers.repr
+R52321 Integers.repr
+R52338 Coq.ZArith.Zdiv "x 'mod' y" Z_scope
+R52327 Integers.unsigned
+R52356 Integers.modu
+R52364 Integers.repr
+R52321 Integers.repr
+R52338 Coq.ZArith.Zdiv "x 'mod' y" Z_scope
+R52327 Integers.unsigned
+R52406 Integers.sub
+R52423 Integers.one
+R52411 Integers.repr
+R52388 Integers.repr
+R52406 Integers.sub
+R52423 Integers.one
+R52411 Integers.repr
+R52388 Integers.repr
+R52452 Integers.repr
+R52437 Integers.modu_and
+R52452 Integers.repr
+R52437 Integers.modu_and
+R52524 Integers.eqmod
+R52537 Integers.unsigned
+R52547 Integers.repr
+R52586 Integers.eqm_unsigned_repr
+R52586 Integers.eqm_unsigned_repr
+R52654 Coq.ZArith.BinInt "x * y" Z_scope
+R52665 Coq.ZArith.Zdiv "x / y" Z_scope
+R52657 Integers.modulus
+R52654 Coq.ZArith.BinInt "x * y" Z_scope
+R52665 Coq.ZArith.Zdiv "x / y" Z_scope
+R52657 Integers.modulus
+R52706 Coq.ZArith.BinInt "x * y" Z_scope
+R52688 Coq.ZArith.BinInt "x * y" Z_scope
+R52699 Coq.ZArith.Zdiv "x / y" Z_scope
+R52691 Integers.modulus
+R52728 Coq.ZArith.BinInt "x * y" Z_scope
+R52745 Coq.ZArith.BinInt "x * y" Z_scope
+R52740 Coq.ZArith.Zdiv "x / y" Z_scope
+R52732 Integers.modulus
+R52706 Coq.ZArith.BinInt "x * y" Z_scope
+R52688 Coq.ZArith.BinInt "x * y" Z_scope
+R52699 Coq.ZArith.Zdiv "x / y" Z_scope
+R52691 Integers.modulus
+R52728 Coq.ZArith.BinInt "x * y" Z_scope
+R52745 Coq.ZArith.BinInt "x * y" Z_scope
+R52740 Coq.ZArith.Zdiv "x / y" Z_scope
+R52732 Integers.modulus
+R52826 Integers.eqmod
+R52841 Integers.unsigned
+R52851 Integers.repr
+R52890 Integers.eqm_unsigned_repr
+R52890 Integers.eqm_unsigned_repr
+R52958 Coq.ZArith.BinInt "x * y" Z_scope
+R52969 Coq.ZArith.Zdiv "x / y" Z_scope
+R52961 Integers.modulus
+R52958 Coq.ZArith.BinInt "x * y" Z_scope
+R52969 Coq.ZArith.Zdiv "x / y" Z_scope
+R52961 Integers.modulus
+R53014 Coq.ZArith.BinInt "x * y" Z_scope
+R52994 Coq.ZArith.BinInt "x * y" Z_scope
+R53005 Coq.ZArith.Zdiv "x / y" Z_scope
+R52997 Integers.modulus
+R53038 Coq.ZArith.BinInt "x * y" Z_scope
+R53057 Coq.ZArith.BinInt "x * y" Z_scope
+R53050 Coq.ZArith.Zdiv "x / y" Z_scope
+R53042 Integers.modulus
+R53014 Coq.ZArith.BinInt "x * y" Z_scope
+R52994 Coq.ZArith.BinInt "x * y" Z_scope
+R53005 Coq.ZArith.Zdiv "x / y" Z_scope
+R52997 Integers.modulus
+R53038 Coq.ZArith.BinInt "x * y" Z_scope
+R53057 Coq.ZArith.BinInt "x * y" Z_scope
+R53050 Coq.ZArith.Zdiv "x / y" Z_scope
+R53042 Integers.modulus
+R53168 Coq.Init.Logic "x = y" type_scope
+R53138 Integers.cast8signed
+R53151 Integers.cast8unsigned
+R53170 Integers.cast8signed
+R53249 Integers.unsigned
+R53249 Integers.unsigned
+R53272 Integers.unsigned_repr
+R53272 Integers.unsigned_repr
+R53309 Coq.ZArith.Zdiv "x 'mod' y" Z_scope
+R53302 Coq.ZArith.Zdiv "x 'mod' y" Z_scope
+R53328 Coq.ZArith.Zdiv "x 'mod' y" Z_scope
+R53309 Coq.ZArith.Zdiv "x 'mod' y" Z_scope
+R53302 Coq.ZArith.Zdiv "x 'mod' y" Z_scope
+R53328 Coq.ZArith.Zdiv "x 'mod' y" Z_scope
+R53364 Coqlib.Zmod_small
+R53364 Coqlib.Zmod_small
+R53382 Coq.ZArith.Zdiv.Z_mod_lt
+R53382 Coq.ZArith.Zdiv.Z_mod_lt
+R53411 Coq.ZArith.BinInt "x <= y < z" Z_scope
+R53416 Coq.ZArith.Zdiv "x 'mod' y" Z_scope
+R53416 Coq.ZArith.Zdiv "x 'mod' y" Z_scope
+R53411 Coq.ZArith.BinInt "x <= y < z" Z_scope
+R53416 Coq.ZArith.Zdiv "x 'mod' y" Z_scope
+R53416 Coq.ZArith.Zdiv "x 'mod' y" Z_scope
+R53438 Coq.ZArith.Zdiv.Z_mod_lt
+R53438 Coq.ZArith.Zdiv.Z_mod_lt
+R53469 Coq.ZArith.BinInt "x < y" Z_scope
+R53471 Integers.max_unsigned
+R53469 Coq.ZArith.BinInt "x < y" Z_scope
+R53471 Integers.max_unsigned
+R53589 Coq.Init.Logic "x = y" type_scope
+R53559 Integers.cast8unsigned
+R53574 Integers.cast8signed
+R53591 Integers.cast8unsigned
+R53683 Coq.ZArith.Zdiv "x 'mod' y" Z_scope
+R53672 Integers.unsigned
+R53683 Coq.ZArith.Zdiv "x 'mod' y" Z_scope
+R53672 Integers.unsigned
+R53705 Coq.ZArith.BinInt "x <= y < z" Z_scope
+R53705 Coq.ZArith.BinInt "x <= y < z" Z_scope
+R53734 Coq.ZArith.Zdiv.Z_mod_lt
+R53734 Coq.ZArith.Zdiv.Z_mod_lt
+R53771 Coq.Init.Logic "x = y" type_scope
+R53763 Coq.ZArith.Zdiv "x 'mod' y" Z_scope
+R53771 Coq.Init.Logic "x = y" type_scope
+R53763 Coq.ZArith.Zdiv "x 'mod' y" Z_scope
+R53783 Coqlib.Zmod_small
+R53783 Coqlib.Zmod_small
+R53815 Coq.ZArith.BinInt "x <= y" Z_scope
+R53818 Integers.max_unsigned
+R53815 Coq.ZArith.BinInt "x <= y" Z_scope
+R53818 Integers.max_unsigned
+R53872 Coqlib.zlt
+R53872 Coqlib.zlt
+R53901 Integers.unsigned_repr
+R53901 Integers.unsigned_repr
+R53947 Coq.ZArith.Zdiv "x 'mod' y" Z_scope
+R53947 Coq.ZArith.Zdiv "x 'mod' y" Z_scope
+R53972 Integers.eqmod_mod_eq
+R53972 Integers.eqmod_mod_eq
+R54022 Coq.ZArith.BinInt "x - y" Z_scope
+R54002 Integers.eqmod_trans
+R54022 Coq.ZArith.BinInt "x - y" Z_scope
+R54002 Integers.eqmod_trans
+R54036 Integers.eqmod_sym
+R54036 Integers.eqmod_sym
+R54053 Integers.eqmod_256_unsigned_repr
+R54053 Integers.eqmod_256_unsigned_repr
+R54088 Integers.eqmod
+R54111 Coq.ZArith.BinInt "x - y" Z_scope
+R54101 Coq.ZArith.BinInt "x - y" Z_scope
+R54088 Integers.eqmod
+R54111 Coq.ZArith.BinInt "x - y" Z_scope
+R54101 Coq.ZArith.BinInt "x - y" Z_scope
+R54128 Integers.eqmod_sub
+R54128 Integers.eqmod_sub
+R54145 Integers.eqmod_refl
+R54145 Integers.eqmod_refl
+R54203 Coq.ZArith.BinInt "x - y" Z_scope
+R54203 Coq.ZArith.BinInt "x - y" Z_scope
+R54317 Coq.Init.Logic "x = y" type_scope
+R54285 Integers.cast16unsigned
+R54301 Integers.cast16signed
+R54319 Integers.cast16unsigned
+R54414 Coq.ZArith.Zdiv "x 'mod' y" Z_scope
+R54403 Integers.unsigned
+R54414 Coq.ZArith.Zdiv "x 'mod' y" Z_scope
+R54403 Integers.unsigned
+R54438 Coq.ZArith.BinInt "x <= y < z" Z_scope
+R54438 Coq.ZArith.BinInt "x <= y < z" Z_scope
+R54469 Coq.ZArith.Zdiv.Z_mod_lt
+R54469 Coq.ZArith.Zdiv.Z_mod_lt
+R54508 Coq.Init.Logic "x = y" type_scope
+R54498 Coq.ZArith.Zdiv "x 'mod' y" Z_scope
+R54508 Coq.Init.Logic "x = y" type_scope
+R54498 Coq.ZArith.Zdiv "x 'mod' y" Z_scope
+R54520 Coqlib.Zmod_small
+R54520 Coqlib.Zmod_small
+R54554 Coq.ZArith.BinInt "x <= y" Z_scope
+R54557 Integers.max_unsigned
+R54554 Coq.ZArith.BinInt "x <= y" Z_scope
+R54557 Integers.max_unsigned
+R54611 Coqlib.zlt
+R54611 Coqlib.zlt
+R54642 Integers.unsigned_repr
+R54642 Integers.unsigned_repr
+R54688 Coq.ZArith.Zdiv "x 'mod' y" Z_scope
+R54688 Coq.ZArith.Zdiv "x 'mod' y" Z_scope
+R54715 Integers.eqmod_mod_eq
+R54715 Integers.eqmod_mod_eq
+R54765 Coq.ZArith.BinInt "x - y" Z_scope
+R54745 Integers.eqmod_trans
+R54765 Coq.ZArith.BinInt "x - y" Z_scope
+R54745 Integers.eqmod_trans
+R54781 Integers.eqmod_sym
+R54781 Integers.eqmod_sym
+R54798 Integers.eqmod_65536_unsigned_repr
+R54798 Integers.eqmod_65536_unsigned_repr
+R54835 Integers.eqmod
+R54862 Coq.ZArith.BinInt "x - y" Z_scope
+R54850 Coq.ZArith.BinInt "x - y" Z_scope
+R54835 Integers.eqmod
+R54862 Coq.ZArith.BinInt "x - y" Z_scope
+R54850 Coq.ZArith.BinInt "x - y" Z_scope
+R54879 Integers.eqmod_sub
+R54879 Integers.eqmod_sub
+R54896 Integers.eqmod_refl
+R54896 Integers.eqmod_refl
+R54954 Coq.ZArith.BinInt "x - y" Z_scope
+R54954 Coq.ZArith.BinInt "x - y" Z_scope
+R55065 Coq.Init.Logic "x = y" type_scope
+R55033 Integers.cast8unsigned
+R55048 Integers.cast8unsigned
+R55067 Integers.cast8unsigned
+R55116 Integers.cast8unsigned_and
+R55116 Integers.cast8unsigned_and
+R55116 Integers.cast8unsigned_and
+R55116 Integers.cast8unsigned_and
+R55146 Integers.and_assoc
+R55146 Integers.and_assoc
+R55253 Coq.Init.Logic "x = y" type_scope
+R55219 Integers.cast16unsigned
+R55235 Integers.cast16unsigned
+R55255 Integers.cast16unsigned
+R55305 Integers.cast16unsigned_and
+R55305 Integers.cast16unsigned_and
+R55305 Integers.cast16unsigned_and
+R55305 Integers.cast16unsigned_and
+R55336 Integers.and_assoc
+R55336 Integers.and_assoc
+R55434 Coq.Init.Logic "x = y" type_scope
+R55406 Integers.cast8signed
+R55419 Integers.cast8signed
+R55436 Integers.cast8signed
+R55511 Coq.ZArith.Zdiv "x 'mod' y" Z_scope
+R55500 Integers.unsigned
+R55511 Coq.ZArith.Zdiv "x 'mod' y" Z_scope
+R55500 Integers.unsigned
+R55535 Coq.ZArith.BinInt "x < y" Z_scope
+R55537 Integers.max_unsigned
+R55535 Coq.ZArith.BinInt "x < y" Z_scope
+R55537 Integers.max_unsigned
+R55579 Coq.ZArith.BinInt "x <= y < z" Z_scope
+R55579 Coq.ZArith.BinInt "x <= y < z" Z_scope
+R55608 Coq.ZArith.Zdiv.Z_mod_lt
+R55608 Coq.ZArith.Zdiv.Z_mod_lt
+R55634 Coqlib.zlt
+R55634 Coqlib.zlt
+R55681 Coq.Init.Logic "x = y" type_scope
+R55663 Integers.unsigned
+R55673 Integers.repr
+R55681 Coq.Init.Logic "x = y" type_scope
+R55663 Integers.unsigned
+R55673 Integers.repr
+R55697 Integers.unsigned_repr
+R55697 Integers.unsigned_repr
+R55746 Coq.ZArith.Zdiv "x 'mod' y" Z_scope
+R55746 Coq.ZArith.Zdiv "x 'mod' y" Z_scope
+R55769 Coqlib.zlt_true
+R55769 Coqlib.zlt_true
+R55803 Coqlib.Zmod_small
+R55803 Coqlib.Zmod_small
+R55860 Coq.ZArith.Zdiv "x 'mod' y" Z_scope
+R55834 Integers.unsigned
+R55844 Integers.repr
+R55852 Coq.ZArith.BinInt "x - y" Z_scope
+R55860 Coq.ZArith.Zdiv "x 'mod' y" Z_scope
+R55834 Integers.unsigned
+R55844 Integers.repr
+R55852 Coq.ZArith.BinInt "x - y" Z_scope
+R55883 Coq.Init.Logic "x = y" type_scope
+R55883 Coq.Init.Logic "x = y" type_scope
+R55912 Integers.eqmod_mod_eq
+R55912 Integers.eqmod_mod_eq
+R55981 Coq.ZArith.BinInt "x - y" Z_scope
+R55973 Coq.ZArith.Zdiv "x 'mod' y" Z_scope
+R55962 Integers.unsigned
+R55944 Integers.eqmod_trans
+R55981 Coq.ZArith.BinInt "x - y" Z_scope
+R55973 Coq.ZArith.Zdiv "x 'mod' y" Z_scope
+R55962 Integers.unsigned
+R55944 Integers.eqmod_trans
+R55999 Integers.eqmod_sym
+R55999 Integers.eqmod_sym
+R56016 Integers.eqmod_256_unsigned_repr
+R56016 Integers.eqmod_256_unsigned_repr
+R56081 Coq.ZArith.BinInt "x - y" Z_scope
+R56070 Integers.unsigned
+R56052 Integers.eqmod_trans
+R56081 Coq.ZArith.BinInt "x - y" Z_scope
+R56070 Integers.unsigned
+R56052 Integers.eqmod_trans
+R56097 Integers.eqmod_sub
+R56097 Integers.eqmod_sub
+R56119 Integers.eqmod_sym
+R56119 Integers.eqmod_sym
+R56136 Integers.eqmod_mod
+R56136 Integers.eqmod_mod
+R56199 Integers.eqmod_refl2
+R56199 Integers.eqmod_refl2
+R56241 Coqlib.zlt_false
+R56241 Coqlib.zlt_false
+R56334 Coq.Init.Logic "x = y" type_scope
+R56304 Integers.cast16signed
+R56318 Integers.cast16signed
+R56336 Integers.cast16signed
+R56413 Coq.ZArith.Zdiv "x 'mod' y" Z_scope
+R56402 Integers.unsigned
+R56413 Coq.ZArith.Zdiv "x 'mod' y" Z_scope
+R56402 Integers.unsigned
+R56441 Coq.ZArith.BinInt "x < y" Z_scope
+R56443 Integers.max_unsigned
+R56441 Coq.ZArith.BinInt "x < y" Z_scope
+R56443 Integers.max_unsigned
+R56485 Coq.ZArith.BinInt "x <= y < z" Z_scope
+R56485 Coq.ZArith.BinInt "x <= y < z" Z_scope
+R56516 Coq.ZArith.Zdiv.Z_mod_lt
+R56516 Coq.ZArith.Zdiv.Z_mod_lt
+R56542 Coqlib.zlt
+R56542 Coqlib.zlt
+R56591 Coq.Init.Logic "x = y" type_scope
+R56573 Integers.unsigned
+R56583 Integers.repr
+R56591 Coq.Init.Logic "x = y" type_scope
+R56573 Integers.unsigned
+R56583 Integers.repr
+R56607 Integers.unsigned_repr
+R56607 Integers.unsigned_repr
+R56656 Coq.ZArith.Zdiv "x 'mod' y" Z_scope
+R56656 Coq.ZArith.Zdiv "x 'mod' y" Z_scope
+R56681 Coqlib.zlt_true
+R56681 Coqlib.zlt_true
+R56715 Coqlib.Zmod_small
+R56715 Coqlib.Zmod_small
+R56774 Coq.ZArith.Zdiv "x 'mod' y" Z_scope
+R56746 Integers.unsigned
+R56756 Integers.repr
+R56764 Coq.ZArith.BinInt "x - y" Z_scope
+R56774 Coq.ZArith.Zdiv "x 'mod' y" Z_scope
+R56746 Integers.unsigned
+R56756 Integers.repr
+R56764 Coq.ZArith.BinInt "x - y" Z_scope
+R56799 Coq.Init.Logic "x = y" type_scope
+R56799 Coq.Init.Logic "x = y" type_scope
+R56828 Integers.eqmod_mod_eq
+R56828 Integers.eqmod_mod_eq
+R56899 Coq.ZArith.BinInt "x - y" Z_scope
+R56889 Coq.ZArith.Zdiv "x 'mod' y" Z_scope
+R56878 Integers.unsigned
+R56860 Integers.eqmod_trans
+R56899 Coq.ZArith.BinInt "x - y" Z_scope
+R56889 Coq.ZArith.Zdiv "x 'mod' y" Z_scope
+R56878 Integers.unsigned
+R56860 Integers.eqmod_trans
+R56919 Integers.eqmod_sym
+R56919 Integers.eqmod_sym
+R56936 Integers.eqmod_65536_unsigned_repr
+R56936 Integers.eqmod_65536_unsigned_repr
+R57003 Coq.ZArith.BinInt "x - y" Z_scope
+R56992 Integers.unsigned
+R56974 Integers.eqmod_trans
+R57003 Coq.ZArith.BinInt "x - y" Z_scope
+R56992 Integers.unsigned
+R56974 Integers.eqmod_trans
+R57019 Integers.eqmod_sub
+R57019 Integers.eqmod_sub
+R57041 Integers.eqmod_sym
+R57041 Integers.eqmod_sym
+R57058 Integers.eqmod_mod
+R57058 Integers.eqmod_mod
+R57121 Integers.eqmod_refl2
+R57121 Integers.eqmod_refl2
+R57163 Coqlib.zlt_false
+R57163 Coqlib.zlt_false
+R57302 Coq.Init.Logic "x = y" type_scope
+R57288 Integers.cast8signed
+R57304 Integers.cast8signed
+R57265 Coq.Init.Logic "x = y" type_scope
+R57249 Integers.cast8unsigned
+R57267 Integers.cast8unsigned
+R57403 Coq.ZArith.Zdiv "x 'mod' y" Z_scope
+R57392 Integers.unsigned
+R57403 Coq.ZArith.Zdiv "x 'mod' y" Z_scope
+R57392 Integers.unsigned
+R57437 Coq.ZArith.Zdiv "x 'mod' y" Z_scope
+R57426 Integers.unsigned
+R57437 Coq.ZArith.Zdiv "x 'mod' y" Z_scope
+R57426 Integers.unsigned
+R57467 Integers.eqm
+R57467 Integers.eqm
+R57505 Integers.unsigned
+R57515 Integers.repr
+R57489 Integers.eqm_trans
+R57505 Integers.unsigned
+R57515 Integers.repr
+R57489 Integers.eqm_trans
+R57532 Integers.eqm_unsigned_repr
+R57532 Integers.eqm_unsigned_repr
+R57572 Integers.eqm_sym
+R57572 Integers.eqm_sym
+R57587 Integers.eqm_unsigned_repr
+R57587 Integers.eqm_unsigned_repr
+R57628 Coq.ZArith.BinInt "x <= y < z" Z_scope
+R57633 Coq.ZArith.Zdiv "x 'mod' y" Z_scope
+R57633 Coq.ZArith.Zdiv "x 'mod' y" Z_scope
+R57643 Integers.modulus
+R57628 Coq.ZArith.BinInt "x <= y < z" Z_scope
+R57633 Coq.ZArith.Zdiv "x 'mod' y" Z_scope
+R57633 Coq.ZArith.Zdiv "x 'mod' y" Z_scope
+R57643 Integers.modulus
+R57680 Coq.ZArith.BinInt "x <= y < z" Z_scope
+R57685 Coq.ZArith.Zdiv "x 'mod' y" Z_scope
+R57685 Coq.ZArith.Zdiv "x 'mod' y" Z_scope
+R57680 Coq.ZArith.BinInt "x <= y < z" Z_scope
+R57685 Coq.ZArith.Zdiv "x 'mod' y" Z_scope
+R57685 Coq.ZArith.Zdiv "x 'mod' y" Z_scope
+R57707 Coq.ZArith.Zdiv.Z_mod_lt
+R57707 Coq.ZArith.Zdiv.Z_mod_lt
+R57740 Coq.ZArith.BinInt "x <= y" Z_scope
+R57743 Integers.modulus
+R57740 Coq.ZArith.BinInt "x <= y" Z_scope
+R57743 Integers.modulus
+R57798 Coq.Init.Logic "x = y" type_scope
+R57798 Coq.Init.Logic "x = y" type_scope
+R57815 Integers.eqm_small_eq
+R57815 Integers.eqm_small_eq
+R57997 Coq.Init.Logic "x = y" type_scope
+R57982 Integers.cast16signed
+R57999 Integers.cast16signed
+R57958 Coq.Init.Logic "x = y" type_scope
+R57941 Integers.cast16unsigned
+R57960 Integers.cast16unsigned
+R58101 Coq.ZArith.Zdiv "x 'mod' y" Z_scope
+R58090 Integers.unsigned
+R58101 Coq.ZArith.Zdiv "x 'mod' y" Z_scope
+R58090 Integers.unsigned
+R58137 Coq.ZArith.Zdiv "x 'mod' y" Z_scope
+R58126 Integers.unsigned
+R58137 Coq.ZArith.Zdiv "x 'mod' y" Z_scope
+R58126 Integers.unsigned
+R58169 Integers.eqm
+R58169 Integers.eqm
+R58207 Integers.unsigned
+R58217 Integers.repr
+R58191 Integers.eqm_trans
+R58207 Integers.unsigned
+R58217 Integers.repr
+R58191 Integers.eqm_trans
+R58234 Integers.eqm_unsigned_repr
+R58234 Integers.eqm_unsigned_repr
+R58274 Integers.eqm_sym
+R58274 Integers.eqm_sym
+R58289 Integers.eqm_unsigned_repr
+R58289 Integers.eqm_unsigned_repr
+R58330 Coq.ZArith.BinInt "x <= y < z" Z_scope
+R58335 Coq.ZArith.Zdiv "x 'mod' y" Z_scope
+R58335 Coq.ZArith.Zdiv "x 'mod' y" Z_scope
+R58347 Integers.modulus
+R58330 Coq.ZArith.BinInt "x <= y < z" Z_scope
+R58335 Coq.ZArith.Zdiv "x 'mod' y" Z_scope
+R58335 Coq.ZArith.Zdiv "x 'mod' y" Z_scope
+R58347 Integers.modulus
+R58384 Coq.ZArith.BinInt "x <= y < z" Z_scope
+R58389 Coq.ZArith.Zdiv "x 'mod' y" Z_scope
+R58389 Coq.ZArith.Zdiv "x 'mod' y" Z_scope
+R58384 Coq.ZArith.BinInt "x <= y < z" Z_scope
+R58389 Coq.ZArith.Zdiv "x 'mod' y" Z_scope
+R58389 Coq.ZArith.Zdiv "x 'mod' y" Z_scope
+R58415 Coq.ZArith.Zdiv.Z_mod_lt
+R58415 Coq.ZArith.Zdiv.Z_mod_lt
+R58450 Coq.ZArith.BinInt "x <= y" Z_scope
+R58453 Integers.modulus
+R58450 Coq.ZArith.BinInt "x <= y" Z_scope
+R58453 Integers.modulus
+R58508 Coq.Init.Logic "x = y" type_scope
+R58508 Coq.Init.Logic "x = y" type_scope
+R58525 Integers.eqm_small_eq
+R58525 Integers.eqm_small_eq
+R58735 Coq.Init.Logic "x = y" type_scope
+R58702 Integers.ltu
+R58709 Integers.repr
+R58715 Coq.ZArith.BinInt.Z_of_nat
+R58724 Integers.wordsize
+R58737 Coq.Init.Datatypes.true
+R58681 Coq.Lists.List.In
+R58687 Integers.one_bits
+R58790 Coqlib.list_in_map_inv
+R58790 Coqlib.list_in_map_inv
+R58864 Coqlib.zlt_true
+R58864 Coqlib.zlt_true
+R58889 Integers.Z_one_bits_range
+R58889 Integers.Z_one_bits_range
+R58935 Coq.ZArith.BinInt "x <= y <= z" Z_scope
+R58938 Coq.ZArith.BinInt.Z_of_nat
+R58947 Integers.wordsize
+R58938 Coq.ZArith.BinInt.Z_of_nat
+R58947 Integers.wordsize
+R58959 Integers.max_unsigned
+R58935 Coq.ZArith.BinInt "x <= y <= z" Z_scope
+R58938 Coq.ZArith.BinInt.Z_of_nat
+R58947 Integers.wordsize
+R58938 Coq.ZArith.BinInt.Z_of_nat
+R58947 Integers.wordsize
+R58959 Integers.max_unsigned
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R59026 Integers.unsigned_repr
+R59026 Integers.unsigned_repr
+R59026 Integers.unsigned_repr
+R59026 Integers.unsigned_repr
+R59026 Integers.unsigned_repr
+R59026 Integers.unsigned_repr
+R59095 Integers.int
+R59083 Coq.Lists.List.list
+R59088 Integers.int
+R59121 Coq.Lists.List.nil
+R59128 Integers.zero
+R59139 Coq.Lists.List "x :: y" list_scope
+R59147 Integers.add
+R59152 Integers.shl
+R59156 Integers.one
+R59083 Coq.Lists.List.list
+R59088 Integers.int
+R59230 Coq.Init.Logic "x = y" type_scope
+R59232 Integers.int_of_one_bits
+R59249 Integers.one_bits
+R59296 Integers.repr
+R59302 Integers.powerserie
+R59314 Integers.Z_one_bits
+R59335 Integers.unsigned
+R59325 Integers.wordsize
+R59296 Integers.repr
+R59302 Integers.powerserie
+R59314 Integers.Z_one_bits
+R59335 Integers.unsigned
+R59325 Integers.wordsize
+R59369 Integers.repr
+R59375 Integers.unsigned
+R59369 Integers.repr
+R59375 Integers.unsigned
+R59420 Integers.Z_one_bits_powerserie
+R59420 Integers.Z_one_bits_powerserie
+R59495 Integers.Z_one_bits_range
+R59513 Integers.unsigned
+R59495 Integers.Z_one_bits_range
+R59513 Integers.unsigned
+R59541 Integers.Z_one_bits
+R59562 Integers.unsigned
+R59552 Integers.wordsize
+R59541 Integers.Z_one_bits
+R59562 Integers.unsigned
+R59552 Integers.wordsize
+R59667 Integers.eqm_samerepr
+R59667 Integers.eqm_samerepr
+R59689 Integers.eqm_add
+R59689 Integers.eqm_add
+R59706 Integers.shl_mul_two_p
+R59706 Integers.shl_mul_two_p
+R59729 Integers.mul_commut
+R59729 Integers.mul_commut
+R59752 Integers.mul_one
+R59752 Integers.mul_one
+R59767 Integers.eqm_unsigned_repr_r
+R59767 Integers.eqm_unsigned_repr_r
+R59799 Integers.unsigned_repr
+R59799 Integers.unsigned_repr
+R59849 Coq.Lists.List.in_eq
+R59849 Coq.Lists.List.in_eq
+R59891 Coq.ZArith.BinInt "x < y" Z_scope
+R59873 Coq.ZArith.BinInt.Z_of_nat
+R59882 Integers.wordsize
+R59893 Integers.max_unsigned
+R59891 Coq.ZArith.BinInt "x < y" Z_scope
+R59873 Coq.ZArith.BinInt.Z_of_nat
+R59882 Integers.wordsize
+R59893 Integers.max_unsigned
+R60057 Coq.Init.Logic "x = y" type_scope
+R60027 Integers.cmp
+R60032 AST.negate_comparison
+R60059 Coq.Bool.Bool.negb
+R60065 Integers.cmp
+R60125 Coq.Bool.Bool.negb_elim
+R60125 Coq.Bool.Bool.negb_elim
+R60125 Coq.Bool.Bool.negb_elim
+R60125 Coq.Bool.Bool.negb_elim
+R60125 Coq.Bool.Bool.negb_elim
+R60125 Coq.Bool.Bool.negb_elim
+R60125 Coq.Bool.Bool.negb_elim
+R60216 Coq.Init.Logic "x = y" type_scope
+R60185 Integers.cmpu
+R60191 AST.negate_comparison
+R60218 Coq.Bool.Bool.negb
+R60224 Integers.cmpu
+R60285 Coq.Bool.Bool.negb_elim
+R60285 Coq.Bool.Bool.negb_elim
+R60285 Coq.Bool.Bool.negb_elim
+R60285 Coq.Bool.Bool.negb_elim
+R60285 Coq.Bool.Bool.negb_elim
+R60285 Coq.Bool.Bool.negb_elim
+R60285 Coq.Bool.Bool.negb_elim
+R60370 Coq.Init.Logic "x = y" type_scope
+R60342 Integers.cmp
+R60347 AST.swap_comparison
+R60372 Integers.cmp
+R60431 Integers.eq_sym
+R60431 Integers.eq_sym
+R60452 Integers.eq_sym
+R60452 Integers.eq_sym
+R60530 Coq.Init.Logic "x = y" type_scope
+R60501 Integers.cmpu
+R60507 AST.swap_comparison
+R60532 Integers.cmpu
+R60592 Integers.eq_sym
+R60592 Integers.eq_sym
+R60613 Integers.eq_sym
+R60613 Integers.eq_sym
+R60688 Coq.Init.Logic "x = y" type_scope
+R60665 Integers.eq
+R60679 Integers.add
+R60669 Integers.add
+R60690 Integers.eq
+R60732 Coqlib.zeq
+R60750 Integers.unsigned
+R60737 Integers.unsigned
+R60732 Coqlib.zeq
+R60750 Integers.unsigned
+R60737 Integers.unsigned
+R60802 Coqlib.zeq_true
+R60802 Coqlib.zeq_true
+R60820 Coqlib.zeq_false
+R60820 Coqlib.zeq_false
+R60873 Integers.eqm_small_eq
+R60873 Integers.eqm_small_eq
+R60914 Integers.unsigned
+R60956 Coq.ZArith.BinInt "x - y" Z_scope
+R60944 Coq.ZArith.BinInt "x + y" Z_scope
+R60933 Integers.unsigned
+R60946 Integers.unsigned
+R60960 Integers.unsigned
+R60914 Integers.unsigned
+R60956 Coq.ZArith.BinInt "x - y" Z_scope
+R60944 Coq.ZArith.BinInt "x + y" Z_scope
+R60933 Integers.unsigned
+R60946 Integers.unsigned
+R60960 Integers.unsigned
+R60984 Integers.unsigned
+R61026 Coq.ZArith.BinInt "x - y" Z_scope
+R61014 Coq.ZArith.BinInt "x + y" Z_scope
+R61003 Integers.unsigned
+R61016 Integers.unsigned
+R61030 Integers.unsigned
+R60984 Integers.unsigned
+R61026 Coq.ZArith.BinInt "x - y" Z_scope
+R61014 Coq.ZArith.BinInt "x + y" Z_scope
+R61003 Integers.unsigned
+R61016 Integers.unsigned
+R61030 Integers.unsigned
+R61051 Integers.eqm_sub
+R61051 Integers.eqm_sub
+R61082 Integers.unsigned
+R61092 Integers.repr
+R61109 Coq.ZArith.BinInt "x + y" Z_scope
+R61098 Integers.unsigned
+R61111 Integers.unsigned
+R61066 Integers.eqm_trans
+R61082 Integers.unsigned
+R61092 Integers.repr
+R61109 Coq.ZArith.BinInt "x + y" Z_scope
+R61098 Integers.unsigned
+R61111 Integers.unsigned
+R61066 Integers.eqm_trans
+R61167 Integers.unsigned
+R61177 Integers.repr
+R61194 Coq.ZArith.BinInt "x + y" Z_scope
+R61183 Integers.unsigned
+R61196 Integers.unsigned
+R61151 Integers.eqm_trans
+R61167 Integers.unsigned
+R61177 Integers.repr
+R61194 Coq.ZArith.BinInt "x + y" Z_scope
+R61183 Integers.unsigned
+R61196 Integers.unsigned
+R61151 Integers.eqm_trans
+R61453 Coq.Init.Logic "x = y" type_scope
+R61430 Integers.lt
+R61444 Integers.add
+R61434 Integers.add
+R61455 Integers.lt
+R61388 Coq.ZArith.BinInt "x <= y <= z" Z_scope
+R61377 Integers.min_signed
+R61400 Coq.ZArith.BinInt "x + y" Z_scope
+R61391 Integers.signed
+R61402 Integers.signed
+R61400 Coq.ZArith.BinInt "x + y" Z_scope
+R61391 Integers.signed
+R61402 Integers.signed
+R61414 Integers.max_signed
+R61335 Coq.ZArith.BinInt "x <= y <= z" Z_scope
+R61324 Integers.min_signed
+R61347 Coq.ZArith.BinInt "x + y" Z_scope
+R61338 Integers.signed
+R61349 Integers.signed
+R61347 Coq.ZArith.BinInt "x + y" Z_scope
+R61338 Integers.signed
+R61349 Integers.signed
+R61361 Integers.max_signed
+R61495 Integers.add_signed
+R61495 Integers.add_signed
+R61495 Integers.add_signed
+R61495 Integers.add_signed
+R61535 Integers.signed_repr
+R61535 Integers.signed_repr
+R61535 Integers.signed_repr
+R61535 Integers.signed_repr
+R61535 Integers.signed_repr
+R61535 Integers.signed_repr
+R61560 Coqlib.zlt
+R61576 Integers.signed
+R61565 Integers.signed
+R61560 Coqlib.zlt
+R61576 Integers.signed
+R61565 Integers.signed
+R61603 Coqlib.zlt_true
+R61603 Coqlib.zlt_true
+R61628 Coqlib.zlt_false
+R61628 Coqlib.zlt_false
+R61827 Coq.Init.Logic "x = y" type_scope
+R61801 Integers.cmp
+R61818 Integers.add
+R61808 Integers.add
+R61829 Integers.cmp
+R61759 Coq.ZArith.BinInt "x <= y <= z" Z_scope
+R61748 Integers.min_signed
+R61771 Coq.ZArith.BinInt "x + y" Z_scope
+R61762 Integers.signed
+R61773 Integers.signed
+R61771 Coq.ZArith.BinInt "x + y" Z_scope
+R61762 Integers.signed
+R61773 Integers.signed
+R61785 Integers.max_signed
+R61706 Coq.ZArith.BinInt "x <= y <= z" Z_scope
+R61695 Integers.min_signed
+R61718 Coq.ZArith.BinInt "x + y" Z_scope
+R61709 Integers.signed
+R61720 Integers.signed
+R61718 Coq.ZArith.BinInt "x + y" Z_scope
+R61709 Integers.signed
+R61720 Integers.signed
+R61732 Integers.max_signed
+R61879 Integers.translate_eq
+R61879 Integers.translate_eq
+R61908 Integers.translate_lt
+R61908 Integers.translate_lt
+R61908 Integers.translate_lt
+R61908 Integers.translate_lt
+R61908 Integers.translate_lt
+R61908 Integers.translate_lt
+R61908 Integers.translate_lt
+R61908 Integers.translate_lt
+R61994 Integers.is_true
+R62003 Integers.notbool
+R61980 Integers.is_false
+R62163 Integers.is_false
+R62173 Integers.notbool
+R62150 Integers.is_true
+R62251 Integers.eq_spec
+R62261 Integers.zero
+R62251 Integers.eq_spec
+R62261 Integers.zero
+R62274 Integers.eq
+R62279 Integers.zero
+R62274 Integers.eq
+R62279 Integers.zero
+FFloats
+R121 Floats.float
+R143 Floats.float
+R175 Floats.float
+R166 Floats.float
+R206 Floats.float
+R197 Floats.float
+R247 Floats.float
+R238 Floats.float
+R285 Integers.int
+R276 Floats.float
+R319 Floats.float
+R312 Integers.int
+R356 Floats.float
+R349 Integers.int
+R397 Floats.float
+R388 Floats.float
+R379 Floats.float
+R437 Floats.float
+R428 Floats.float
+R419 Floats.float
+R477 Floats.float
+R468 Floats.float
+R459 Floats.float
+R517 Floats.float
+R508 Floats.float
+R499 Floats.float
+R572 Coq.Init.Datatypes.bool
+R563 Floats.float
+R554 Floats.float
+R540 AST.comparison
+R616 Coq.Init.Specif "{ A } + { B }" type_scope
+R620 Coq.Init.Logic "x = y" type_scope
+R632 Coq.Init.Logic "x <> y" type_scope
+R608 Floats.float
+R608 Floats.float
+R684 Coq.Init.Logic "x = y" type_scope
+R674 Floats.add
+R686 Floats.add
+R742 Coq.Init.Logic "x = y" type_scope
+R732 Floats.sub
+R744 Floats.add
+R752 Floats.neg
+R832 Coq.Init.Logic "x = y" type_scope
+R800 Floats.singleoffloat
+R815 Floats.singleoffloat
+R834 Floats.singleoffloat
+R897 Coq.Init.Logic "x = y" type_scope
+R883 Floats.cmp
+R887 AST.Cne
+R899 Coq.Bool.Bool.negb
+R905 Floats.cmp
+R909 AST.Ceq
+R969 Coq.Init.Logic "x = y" type_scope
+R955 Floats.cmp
+R959 AST.Cle
+R985 Coq.Bool.Bool "x || y" bool_scope
+R971 Floats.cmp
+R975 AST.Clt
+R988 Floats.cmp
+R992 AST.Ceq
+R1051 Coq.Init.Logic "x = y" type_scope
+R1037 Floats.cmp
+R1041 AST.Cge
+R1067 Coq.Bool.Bool "x || y" bool_scope
+R1053 Floats.cmp
+R1057 AST.Cgt
+R1070 Floats.cmp
+R1074 AST.Ceq
+R1124 Coq.Init.Logic "x = y" type_scope
+R1106 Floats.cmp
+R1119 Floats.zero
+R1114 Floats.zero
+R1110 AST.Ceq
+R1126 Coq.Init.Datatypes.true
+R1191 Coq.Init.Logic "x = y" type_scope
+R1176 Floats.cmp
+R1186 Floats.zero
+R1180 AST.Ceq
+R1193 Coq.Init.Datatypes.false
+R1165 Coq.Init.Logic "x <> y" type_scope
+R1168 Floats.zero
+FValues
+R118 Coq.ZArith.BinInt.Z
+R144 Coqlib.zeq
+R198 Integers.int
+R221 Floats.float
+R253 Integers.int
+R244 Values.block
+R284 Values.val
+R291 Values.Vint
+R296 Integers.zero
+R323 Values.val
+R330 Values.Vint
+R335 Integers.one
+R362 Values.val
+R369 Values.Vint
+R374 Integers.mone
+R403 Values.val
+R410 Values.Vint
+R415 Integers.one
+R443 Values.val
+R450 Values.Vint
+R455 Integers.zero
+R509 Values.val
+R537 Values.Vfalse
+R526 Values.Vtrue
+R502 Coq.Init.Datatypes.bool
+R616 Values.Vundef
+R629 Coq.Init.Logic.True
+R638 Values.Vint
+R646 AST.Tint
+R654 Coq.Init.Logic.True
+R663 Values.Vfloat
+R673 AST.Tfloat
+R683 Coq.Init.Logic.True
+R692 Values.Vptr
+R702 AST.Tint
+R710 Coq.Init.Logic.True
+R727 Coq.Init.Logic.False
+R579 AST.typ
+R570 Values.val
+R784 Coq.Lists.List.list
+R789 AST.typ
+R769 Coq.Lists.List.list
+R774 Values.val
+R840 Coq.Lists.List.nil
+R845 Coq.Lists.List.nil
+R852 Coq.Init.Logic.True
+R864 Coq.Lists.List "x :: y" list_scope
+R874 Coq.Lists.List "x :: y" list_scope
+R898 Coq.Init.Logic "A /\ B" type_scope
+R883 Values.has_type
+R933 Coq.Init.Logic.False
+R784 Coq.Lists.List.list
+R789 AST.typ
+R769 Coq.Lists.List.list
+R774 Values.val
+R1004 Values.Vint
+R1016 Coq.Init.Logic "x <> y" type_scope
+R1019 Integers.zero
+R1032 Values.Vptr
+R1046 Coq.Init.Logic.True
+R1060 Coq.Init.Logic.False
+R970 Values.val
+R1132 Values.Vint
+R1144 Coq.Init.Logic "x = y" type_scope
+R1146 Integers.zero
+R1164 Coq.Init.Logic.False
+R1098 Values.val
+R1208 Coq.Init.Datatypes.bool
+R1201 Values.val
+R1304 Coq.Init.Datatypes.true
+R1296 Values.Vint
+R1268 Coq.Init.Logic "x <> y" type_scope
+R1271 Integers.zero
+R1370 Coq.Init.Datatypes.false
+R1355 Values.Vint
+R1360 Integers.zero
+R1442 Coq.Init.Datatypes.true
+R1430 Values.Vptr
+R1475 Values.val
+R1501 Values.Vint
+R1511 Values.Vint
+R1517 Integers.neg
+R1537 Values.Vundef
+R1468 Values.val
+R1579 Values.val
+R1605 Values.Vfloat
+R1617 Values.Vfloat
+R1625 Floats.neg
+R1647 Values.Vundef
+R1572 Values.val
+R1689 Values.val
+R1715 Values.Vfloat
+R1727 Values.Vfloat
+R1735 Floats.abs
+R1757 Values.Vundef
+R1682 Values.val
+R1805 Values.val
+R1831 Values.Vfloat
+R1843 Values.Vint
+R1849 Floats.intoffloat
+R1878 Values.Vundef
+R1798 Values.val
+R1926 Values.val
+R1952 Values.Vint
+R1962 Values.Vfloat
+R1970 Floats.floatofint
+R1999 Values.Vundef
+R1919 Values.val
+R2048 Values.val
+R2074 Values.Vint
+R2084 Values.Vfloat
+R2092 Floats.floatofintu
+R2122 Values.Vundef
+R2041 Values.val
+R2166 Values.val
+R2192 Values.Vint
+R2202 Values.Vint
+R2208 Integers.xor
+R2218 Integers.mone
+R2237 Values.Vundef
+R2159 Values.val
+R2282 Values.val
+R2308 Values.Vint
+R2318 Values.of_bool
+R2327 Integers.eq
+R2336 Integers.zero
+R2350 Values.Vptr
+R2364 Values.Vfalse
+R2380 Values.Vundef
+R2275 Values.val
+R2429 Values.val
+R2455 Values.Vint
+R2465 Values.Vint
+R2470 Integers.cast8signed
+R2498 Values.Vundef
+R2422 Values.val
+R2549 Values.val
+R2575 Values.Vint
+R2585 Values.Vint
+R2590 Integers.cast8unsigned
+R2620 Values.Vundef
+R2542 Values.val
+R2670 Values.val
+R2696 Values.Vint
+R2706 Values.Vint
+R2711 Integers.cast16signed
+R2740 Values.Vundef
+R2663 Values.val
+R2792 Values.val
+R2818 Values.Vint
+R2828 Values.Vint
+R2833 Integers.cast16unsigned
+R2864 Values.Vundef
+R2785 Values.val
+R2915 Values.val
+R2941 Values.Vfloat
+R2953 Values.Vfloat
+R2960 Floats.singleoffloat
+R2992 Values.Vundef
+R2908 Values.val
+R3036 Values.val
+R3067 Values.Vint
+R3076 Values.Vint
+R3087 Values.Vint
+R3092 Integers.add
+R3111 Values.Vptr
+R3125 Values.Vint
+R3136 Values.Vptr
+R3145 Integers.add
+R3166 Values.Vint
+R3175 Values.Vptr
+R3191 Values.Vptr
+R3200 Integers.add
+R3229 Values.Vundef
+R3030 Values.val
+R3030 Values.val
+R3273 Values.val
+R3304 Values.Vint
+R3313 Values.Vint
+R3324 Values.Vint
+R3329 Integers.sub
+R3348 Values.Vptr
+R3362 Values.Vint
+R3373 Values.Vptr
+R3382 Integers.sub
+R3403 Values.Vptr
+R3417 Values.Vptr
+R3442 Coqlib.zeq
+R3486 Values.Vundef
+R3457 Values.Vint
+R3462 Integers.sub
+R3505 Values.Vundef
+R3267 Values.val
+R3267 Values.val
+R3549 Values.val
+R3580 Values.Vint
+R3589 Values.Vint
+R3600 Values.Vint
+R3605 Integers.mul
+R3632 Values.Vundef
+R3543 Values.val
+R3543 Values.val
+R3677 Values.val
+R3708 Values.Vint
+R3717 Values.Vint
+R3737 Integers.eq
+R3747 Integers.zero
+R3773 Values.Vint
+R3778 Integers.divs
+R3761 Values.Vundef
+R3806 Values.Vundef
+R3671 Values.val
+R3671 Values.val
+R3851 Values.val
+R3882 Values.Vint
+R3891 Values.Vint
+R3911 Integers.eq
+R3921 Integers.zero
+R3947 Values.Vint
+R3952 Integers.mods
+R3935 Values.Vundef
+R3980 Values.Vundef
+R3845 Values.val
+R3845 Values.val
+R4025 Values.val
+R4056 Values.Vint
+R4065 Values.Vint
+R4085 Integers.eq
+R4095 Integers.zero
+R4121 Values.Vint
+R4126 Integers.divu
+R4109 Values.Vundef
+R4154 Values.Vundef
+R4019 Values.val
+R4019 Values.val
+R4199 Values.val
+R4230 Values.Vint
+R4239 Values.Vint
+R4259 Integers.eq
+R4269 Integers.zero
+R4295 Values.Vint
+R4300 Integers.modu
+R4283 Values.Vundef
+R4328 Values.Vundef
+R4193 Values.val
+R4193 Values.val
+R4372 Values.val
+R4403 Values.Vint
+R4412 Values.Vint
+R4423 Values.Vint
+R4428 Integers.and
+R4455 Values.Vundef
+R4366 Values.val
+R4366 Values.val
+R4498 Values.val
+R4529 Values.Vint
+R4538 Values.Vint
+R4549 Values.Vint
+R4554 Integers.or
+R4580 Values.Vundef
+R4492 Values.val
+R4492 Values.val
+R4624 Values.val
+R4655 Values.Vint
+R4664 Values.Vint
+R4675 Values.Vint
+R4680 Integers.xor
+R4707 Values.Vundef
+R4618 Values.val
+R4618 Values.val
+R4751 Values.val
+R4782 Values.Vint
+R4791 Values.Vint
+R4810 Integers.ltu
+R4822 Integers.repr
+R4875 Values.Vundef
+R4845 Values.Vint
+R4850 Integers.shl
+R4894 Values.Vundef
+R4745 Values.val
+R4745 Values.val
+R4938 Values.val
+R4969 Values.Vint
+R4978 Values.Vint
+R4997 Integers.ltu
+R5009 Integers.repr
+R5062 Values.Vundef
+R5032 Values.Vint
+R5037 Integers.shr
+R5081 Values.Vundef
+R4932 Values.val
+R4932 Values.val
+R5131 Values.val
+R5162 Values.Vint
+R5171 Values.Vint
+R5190 Integers.ltu
+R5202 Integers.repr
+R5261 Values.Vundef
+R5225 Values.Vint
+R5230 Integers.shr_carry
+R5280 Values.Vundef
+R5125 Values.val
+R5125 Values.val
+R5325 Values.val
+R5356 Values.Vint
+R5365 Values.Vint
+R5384 Integers.ltu
+R5396 Integers.repr
+R5450 Values.Vundef
+R5419 Values.Vint
+R5424 Integers.shrx
+R5469 Values.Vundef
+R5319 Values.val
+R5319 Values.val
+R5514 Values.val
+R5545 Values.Vint
+R5554 Values.Vint
+R5573 Integers.ltu
+R5585 Integers.repr
+R5639 Values.Vundef
+R5608 Values.Vint
+R5613 Integers.shru
+R5658 Values.Vundef
+R5508 Values.val
+R5508 Values.val
+R5718 Values.val
+R5744 Values.Vint
+R5754 Values.Vint
+R5759 Integers.rolm
+R5792 Values.Vundef
+R5712 Integers.int
+R5712 Integers.int
+R5693 Values.val
+R5837 Values.val
+R5868 Values.Vfloat
+R5879 Values.Vfloat
+R5892 Values.Vfloat
+R5899 Floats.add
+R5928 Values.Vundef
+R5831 Values.val
+R5831 Values.val
+R5973 Values.val
+R6004 Values.Vfloat
+R6015 Values.Vfloat
+R6028 Values.Vfloat
+R6035 Floats.sub
+R6064 Values.Vundef
+R5967 Values.val
+R5967 Values.val
+R6109 Values.val
+R6140 Values.Vfloat
+R6151 Values.Vfloat
+R6164 Values.Vfloat
+R6171 Floats.mul
+R6200 Values.Vundef
+R6103 Values.val
+R6103 Values.val
+R6245 Values.val
+R6276 Values.Vfloat
+R6287 Values.Vfloat
+R6300 Values.Vfloat
+R6307 Floats.div
+R6336 Values.Vundef
+R6239 Values.val
+R6239 Values.val
+R6392 Values.val
+R6418 AST.Ceq
+R6425 Values.Vfalse
+R6436 AST.Cne
+R6443 Values.Vtrue
+R6460 Values.Vundef
+R6379 AST.comparison
+R6520 Values.val
+R6551 Values.Vint
+R6560 Values.Vint
+R6571 Values.of_bool
+R6580 Integers.cmp
+R6601 Values.Vint
+R6610 Values.Vptr
+R6635 Integers.eq
+R6645 Integers.zero
+R6679 Values.Vundef
+R6659 Values.cmp_mismatch
+R6690 Values.Vptr
+R6704 Values.Vptr
+R6729 Coqlib.zeq
+R6791 Values.cmp_mismatch
+R6750 Values.of_bool
+R6759 Integers.cmp
+R6810 Values.Vptr
+R6824 Values.Vint
+R6844 Integers.eq
+R6854 Integers.zero
+R6888 Values.Vundef
+R6868 Values.cmp_mismatch
+R6907 Values.Vundef
+R6514 Values.val
+R6514 Values.val
+R6494 AST.comparison
+R6968 Values.val
+R6999 Values.Vint
+R7008 Values.Vint
+R7025 Values.of_bool
+R7034 Integers.cmpu
+R7056 Values.Vint
+R7065 Values.Vptr
+R7090 Integers.eq
+R7100 Integers.zero
+R7134 Values.Vundef
+R7114 Values.cmp_mismatch
+R7145 Values.Vptr
+R7159 Values.Vptr
+R7184 Coqlib.zeq
+R7247 Values.cmp_mismatch
+R7205 Values.of_bool
+R7214 Integers.cmpu
+R7266 Values.Vptr
+R7280 Values.Vint
+R7300 Integers.eq
+R7310 Integers.zero
+R7344 Values.Vundef
+R7324 Values.cmp_mismatch
+R7363 Values.Vundef
+R6962 Values.val
+R6962 Values.val
+R6942 AST.comparison
+R7424 Values.val
+R7455 Values.Vfloat
+R7466 Values.Vfloat
+R7479 Values.of_bool
+R7488 Floats.cmp
+R7519 Values.Vundef
+R7418 Values.val
+R7418 Values.val
+R7398 AST.comparison
+R7617 AST.Mint8signed
+R7630 Values.Vint
+R7640 Values.Vint
+R7646 Integers.cast8signed
+R7669 AST.Mint8unsigned
+R7684 Values.Vint
+R7694 Values.Vint
+R7700 Integers.cast8unsigned
+R7725 AST.Mint16signed
+R7739 Values.Vint
+R7749 Values.Vint
+R7755 Integers.cast16signed
+R7779 AST.Mint16unsigned
+R7795 Values.Vint
+R7805 Values.Vint
+R7811 Integers.cast16unsigned
+R7837 AST.Mint32
+R7845 Values.Vint
+R7855 Values.Vint
+R7866 AST.Mint32
+R7874 Values.Vptr
+R7888 Values.Vptr
+R7903 AST.Mfloat32
+R7913 Values.Vfloat
+R7925 Values.Vfloat
+R7932 Floats.singleoffloat
+R7959 AST.Mfloat64
+R7969 Values.Vfloat
+R7981 Values.Vfloat
+R8002 Values.Vundef
+R7583 Values.val
+R7565 AST.memory_chunk
+R8113 Coq.Init.Logic "x = y" type_scope
+R8097 Values.cast8unsigned
+R8115 Values.and
+R8122 Values.Vint
+R8127 Integers.repr
+R8190 Integers.cast8unsigned_and
+R8190 Integers.cast8unsigned_and
+R8276 Coq.Init.Logic "x = y" type_scope
+R8259 Values.cast16unsigned
+R8278 Values.and
+R8285 Values.Vint
+R8290 Integers.repr
+R8355 Integers.cast16unsigned_and
+R8355 Integers.cast16unsigned_and
+R8439 Values.is_true
+R8448 Values.notbool
+R8425 Values.is_false
+R8606 Values.is_false
+R8616 Values.notbool
+R8593 Values.is_true
+R8697 Integers.eq_spec
+R8711 Integers.zero
+R8697 Integers.eq_spec
+R8711 Integers.zero
+R8730 Integers.eq
+R8739 Integers.zero
+R8730 Integers.eq
+R8739 Integers.zero
+R8852 Values.bool_of_val
+R8866 Coq.Init.Datatypes.true
+R8839 Values.is_true
+R9035 Values.is_true
+R9013 Values.bool_of_val
+R9027 Coq.Init.Datatypes.true
+R9173 Coq.Init.Logic "x = y" type_scope
+R9175 Coq.Init.Datatypes.true
+R9152 Values.bool_of_val
+R9139 Values.is_true
+R9301 Values.bool_of_val
+R9315 Coq.Init.Datatypes.false
+R9287 Values.is_false
+R9478 Values.is_false
+R9455 Values.bool_of_val
+R9469 Coq.Init.Datatypes.false
+R9619 Coq.Init.Logic "x = y" type_scope
+R9621 Coq.Init.Datatypes.false
+R9598 Values.bool_of_val
+R9584 Values.is_false
+R9776 Coq.Init.Logic "x = y" type_scope
+R9759 Values.of_bool
+R9768 Coq.Bool.Bool.negb
+R9778 Values.notbool
+R9787 Values.of_bool
+R9885 Coq.Init.Logic "x = y" type_scope
+R9875 Values.of_bool
+R9887 Values.notbool
+R9896 Values.of_bool
+R9905 Coq.Bool.Bool.negb
+R10018 Coq.Init.Logic "x = y" type_scope
+R9990 Values.notbool
+R9998 Values.notbool
+R10006 Values.of_bool
+R10020 Values.of_bool
+R10134 Coq.Init.Logic "x = y" type_scope
+R10106 Values.notbool
+R10114 Values.notbool
+R10122 Values.notbool
+R10136 Values.notbool
+R10190 Integers.eq
+R10199 Integers.zero
+R10190 Integers.eq
+R10199 Integers.zero
+R10269 Coq.Init.Logic "x = y" type_scope
+R10261 Values.add
+R10271 Values.add
+R10341 Integers.add_commut
+R10341 Integers.add_commut
+R10412 Coq.Init.Logic "x = y" type_scope
+R10396 Values.add
+R10401 Values.add
+R10414 Values.add
+R10421 Values.add
+R10499 Integers.add_assoc
+R10499 Integers.add_assoc
+R10530 Integers.add_assoc
+R10530 Integers.add_assoc
+R10573 Integers.add_commut
+R10573 Integers.add_commut
+R10606 Integers.add_commut
+R10606 Integers.add_commut
+R10633 Integers.add_assoc
+R10633 Integers.add_assoc
+R10664 Integers.add_commut
+R10664 Integers.add_commut
+R10697 Integers.add_assoc
+R10697 Integers.add_assoc
+R10774 Coq.Init.Logic "x = y" type_scope
+R10758 Values.add
+R10765 Values.add
+R10776 Values.add
+R10783 Values.add
+R10819 Values.add_commut
+R10819 Values.add_commut
+R10847 Values.add_assoc
+R10847 Values.add_assoc
+R10864 Values.add_commut
+R10864 Values.add_commut
+R10946 Coq.Init.Logic "x = y" type_scope
+R10922 Values.add
+R10937 Values.add
+R10927 Values.add
+R10948 Values.add
+R10963 Values.add
+R10953 Values.add
+R10998 Values.add_permut
+R10998 Values.add_permut
+R11018 Values.add_assoc
+R11018 Values.add_assoc
+R11040 Values.add_permut
+R11040 Values.add_permut
+R11068 Values.add_assoc
+R11068 Values.add_assoc
+R11114 Coq.Init.Logic "x = y" type_scope
+R11104 Values.neg
+R11108 Values.Vzero
+R11116 Values.Vzero
+R11199 Coq.Init.Logic "x = y" type_scope
+R11186 Values.neg
+R11190 Values.add
+R11201 Values.add
+R11214 Values.neg
+R11206 Values.neg
+R11281 Integers.neg_add_distr
+R11281 Integers.neg_add_distr
+R11348 Coq.Init.Logic "x = y" type_scope
+R11336 Values.sub
+R11340 Values.Vzero
+R11350 Values.neg
+R11446 Coq.Init.Logic "x = y" type_scope
+R11431 Values.sub
+R11438 Values.Vint
+R11448 Values.add
+R11455 Values.Vint
+R11461 Integers.neg
+R11525 Integers.sub_add_opp
+R11525 Integers.sub_add_opp
+R11525 Integers.sub_add_opp
+R11616 Coq.Init.Logic "x = y" type_scope
+R11591 Values.sub
+R11596 Values.add
+R11604 Values.Vint
+R11618 Values.add
+R11635 Values.Vint
+R11623 Values.sub
+R11710 Integers.sub_add_l
+R11710 Integers.sub_add_l
+R11741 Integers.sub_add_l
+R11741 Integers.sub_add_l
+R11770 Coqlib.zeq
+R11770 Coqlib.zeq
+R11796 Integers.sub_add_l
+R11796 Integers.sub_add_l
+R11898 Coq.Init.Logic "x = y" type_scope
+R11873 Values.sub
+R11881 Values.add
+R11889 Values.Vint
+R11900 Values.add
+R11917 Values.Vint
+R11923 Integers.neg
+R11905 Values.sub
+R12002 Integers.sub_add_r
+R12002 Integers.sub_add_r
+R12040 Integers.sub_add_opp
+R12040 Integers.sub_add_opp
+R12040 Integers.sub_add_opp
+R12040 Integers.sub_add_opp
+R12082 Integers.add_assoc
+R12082 Integers.add_assoc
+R12082 Integers.add_assoc
+R12082 Integers.add_assoc
+R12110 Integers.add_commut
+R12110 Integers.add_commut
+R12150 Integers.sub_add_opp
+R12150 Integers.sub_add_opp
+R12150 Integers.sub_add_opp
+R12150 Integers.sub_add_opp
+R12178 Integers.add_assoc
+R12178 Integers.add_assoc
+R12206 Integers.neg_add_distr
+R12206 Integers.neg_add_distr
+R12233 Coqlib.zeq
+R12233 Coqlib.zeq
+R12283 Integers.sub_add_opp
+R12283 Integers.sub_add_opp
+R12283 Integers.sub_add_opp
+R12283 Integers.sub_add_opp
+R12308 Integers.add_assoc
+R12308 Integers.add_assoc
+R12338 Integers.neg_add_distr
+R12338 Integers.neg_add_distr
+R12418 Coq.Init.Logic "x = y" type_scope
+R12410 Values.mul
+R12420 Values.mul
+R12488 Integers.mul_commut
+R12488 Integers.mul_commut
+R12559 Coq.Init.Logic "x = y" type_scope
+R12543 Values.mul
+R12548 Values.mul
+R12561 Values.mul
+R12568 Values.mul
+R12651 Integers.mul_assoc
+R12651 Integers.mul_assoc
+R12729 Coq.Init.Logic "x = y" type_scope
+R12713 Values.mul
+R12718 Values.add
+R12731 Values.add
+R12746 Values.mul
+R12736 Values.mul
+R12829 Integers.mul_add_distr_l
+R12829 Integers.mul_add_distr_l
+R12914 Coq.Init.Logic "x = y" type_scope
+R12898 Values.mul
+R12905 Values.add
+R12916 Values.add
+R12931 Values.mul
+R12921 Values.mul
+R13014 Integers.mul_add_distr_r
+R13014 Integers.mul_add_distr_r
+R13128 Coq.Init.Logic "x = y" type_scope
+R13113 Values.mul
+R13120 Values.Vint
+R13130 Values.shl
+R13137 Values.Vint
+R13096 Coq.Init.Logic "x = y" type_scope
+R13080 Integers.is_power2
+R13098 Coq.Init.Datatypes.Some
+R13209 Coq.ZArith.BinInt.Z_of_nat
+R13218 Integers.wordsize
+R13209 Coq.ZArith.BinInt.Z_of_nat
+R13218 Integers.wordsize
+R13240 Integers.is_power2_range
+R13240 Integers.is_power2_range
+R13281 Integers.mul_pow2
+R13281 Integers.mul_pow2
+R13351 Coq.Init.Logic "x = y" type_scope
+R13342 Values.mods
+R13353 Values.sub
+R13360 Values.mul
+R13365 Values.divs
+R13433 Integers.eq
+R13443 Integers.zero
+R13433 Integers.eq
+R13443 Integers.zero
+R13480 Integers.mods_divs
+R13480 Integers.mods_divs
+R13543 Coq.Init.Logic "x = y" type_scope
+R13534 Values.modu
+R13545 Values.sub
+R13552 Values.mul
+R13557 Values.divu
+R13631 Integers.eq_spec
+R13646 Integers.zero
+R13665 Integers.eq
+R13675 Integers.zero
+R13631 Integers.eq_spec
+R13646 Integers.zero
+R13665 Integers.eq
+R13675 Integers.zero
+R13722 Integers.modu_divu
+R13722 Integers.modu_divu
+R13838 Coq.Init.Logic "x = y" type_scope
+R13822 Values.divs
+R13830 Values.Vint
+R13840 Values.shrx
+R13848 Values.Vint
+R13805 Coq.Init.Logic "x = y" type_scope
+R13789 Integers.is_power2
+R13807 Coq.Init.Datatypes.Some
+R13920 Coq.ZArith.BinInt.Z_of_nat
+R13929 Integers.wordsize
+R13920 Coq.ZArith.BinInt.Z_of_nat
+R13929 Integers.wordsize
+R13951 Integers.is_power2_range
+R13951 Integers.is_power2_range
+R13994 Integers.eq_spec
+R14008 Integers.zero
+R14027 Integers.eq
+R14036 Integers.zero
+R13994 Integers.eq_spec
+R14008 Integers.zero
+R14027 Integers.eq
+R14036 Integers.zero
+R14108 Integers.divs_pow2
+R14108 Integers.divs_pow2
+R14224 Coq.Init.Logic "x = y" type_scope
+R14208 Values.divu
+R14216 Values.Vint
+R14226 Values.shru
+R14234 Values.Vint
+R14191 Coq.Init.Logic "x = y" type_scope
+R14175 Integers.is_power2
+R14193 Coq.Init.Datatypes.Some
+R14306 Coq.ZArith.BinInt.Z_of_nat
+R14315 Integers.wordsize
+R14306 Coq.ZArith.BinInt.Z_of_nat
+R14315 Integers.wordsize
+R14337 Integers.is_power2_range
+R14337 Integers.is_power2_range
+R14380 Integers.eq_spec
+R14394 Integers.zero
+R14413 Integers.eq
+R14422 Integers.zero
+R14380 Integers.eq_spec
+R14394 Integers.zero
+R14413 Integers.eq
+R14422 Integers.zero
+R14494 Integers.divu_pow2
+R14494 Integers.divu_pow2
+R14610 Coq.Init.Logic "x = y" type_scope
+R14594 Values.modu
+R14602 Values.Vint
+R14612 Values.and
+R14619 Values.Vint
+R14625 Integers.sub
+R14635 Integers.one
+R14577 Coq.Init.Logic "x = y" type_scope
+R14561 Integers.is_power2
+R14579 Coq.Init.Datatypes.Some
+R14702 Integers.eq_spec
+R14716 Integers.zero
+R14735 Integers.eq
+R14744 Integers.zero
+R14702 Integers.eq_spec
+R14716 Integers.zero
+R14735 Integers.eq
+R14744 Integers.zero
+R14817 Integers.modu_and
+R14817 Integers.modu_and
+R14884 Coq.Init.Logic "x = y" type_scope
+R14876 Values.and
+R14886 Values.and
+R14954 Integers.and_commut
+R14954 Integers.and_commut
+R15025 Coq.Init.Logic "x = y" type_scope
+R15009 Values.and
+R15014 Values.and
+R15027 Values.and
+R15034 Values.and
+R15117 Integers.and_assoc
+R15117 Integers.and_assoc
+R15176 Coq.Init.Logic "x = y" type_scope
+R15169 Values.or
+R15178 Values.or
+R15245 Integers.or_commut
+R15245 Integers.or_commut
+R15312 Coq.Init.Logic "x = y" type_scope
+R15298 Values.or
+R15302 Values.or
+R15314 Values.or
+R15320 Values.or
+R15402 Integers.or_assoc
+R15402 Integers.or_assoc
+R15462 Coq.Init.Logic "x = y" type_scope
+R15454 Values.xor
+R15464 Values.xor
+R15532 Integers.xor_commut
+R15532 Integers.xor_commut
+R15603 Coq.Init.Logic "x = y" type_scope
+R15587 Values.xor
+R15592 Values.xor
+R15605 Values.xor
+R15612 Values.xor
+R15695 Integers.xor_assoc
+R15695 Integers.xor_assoc
+R15772 Coq.Init.Logic "x = y" type_scope
+R15745 Values.mul
+R15756 Values.shl
+R15764 Values.Vone
+R15774 Values.shl
+R15842 Integers.ltu
+R15854 Integers.repr
+R15842 Integers.ltu
+R15854 Integers.repr
+R15900 Integers.shl_mul
+R15900 Integers.shl_mul
+R16004 Coq.Init.Logic "x = y" type_scope
+R15989 Values.shl
+R15996 Values.Vint
+R16006 Values.rolm
+R16016 Integers.shl
+R16024 Integers.mone
+R15977 Coq.Init.Logic "x = y" type_scope
+R15953 Integers.ltu
+R15964 Integers.repr
+R15979 Coq.Init.Datatypes.true
+R16105 Integers.shl_rolm
+R16105 Integers.shl_rolm
+R16221 Coq.Init.Logic "x = y" type_scope
+R16205 Values.shru
+R16213 Values.Vint
+R16223 Values.rolm
+R16257 Integers.shru
+R16266 Integers.mone
+R16231 Integers.sub
+R16240 Integers.repr
+R16193 Coq.Init.Logic "x = y" type_scope
+R16169 Integers.ltu
+R16180 Integers.repr
+R16195 Coq.Init.Datatypes.true
+R16347 Integers.shru_rolm
+R16347 Integers.shru_rolm
+R16443 Coq.Init.Logic "x = y" type_scope
+R16413 Values.add
+R16428 Values.shr_carry
+R16418 Values.shr
+R16445 Values.shrx
+R16509 Integers.ltu
+R16521 Integers.repr
+R16509 Integers.ltu
+R16521 Integers.repr
+R16564 Integers.shrx_carry
+R16564 Integers.shrx_carry
+R16656 Coq.Init.Logic "x = y" type_scope
+R16625 Values.or
+R16643 Values.rolm
+R16629 Values.rolm
+R16658 Values.rolm
+R16668 Integers.or
+R16740 Integers.or_rolm
+R16740 Integers.or_rolm
+R16830 Coq.Init.Logic "x = y" type_scope
+R16804 Values.rolm
+R16810 Values.rolm
+R16836 Values.rolm
+R16895 Integers.and
+R16904 Integers.rol
+R16844 Integers.and
+R16869 Integers.repr
+R16853 Integers.add
+R16987 Integers.and
+R17012 Integers.repr
+R16996 Integers.add
+R17037 Integers.modu
+R17063 Integers.repr
+R17047 Integers.add
+R16987 Integers.and
+R17012 Integers.repr
+R16996 Integers.add
+R17037 Integers.modu
+R17063 Integers.repr
+R17047 Integers.add
+R17086 Integers.rolm_rolm
+R17086 Integers.rolm_rolm
+R17130 Integers.sub
+R17152 Integers.one
+R17139 Integers.repr
+R17111 Integers.repr
+R17130 Integers.sub
+R17152 Integers.one
+R17139 Integers.repr
+R17111 Integers.repr
+R17189 Integers.repr
+R17170 Integers.modu_and
+R17189 Integers.repr
+R17170 Integers.modu_and
+R17274 Coq.Init.Logic "x = y" type_scope
+R17256 Values.rolm
+R17263 Integers.zero
+R17276 Values.and
+R17283 Values.Vint
+R17347 Integers.rolm_zero
+R17347 Integers.rolm_zero
+R17410 Coq.Init.Logic "x = y" type_scope
+R17401 Values.addf
+R17412 Values.addf
+R17481 Floats.addf_commut
+R17481 Floats.addf_commut
+R17582 Coq.Init.Logic "x = y" type_scope
+R17547 Values.cmp_mismatch
+R17561 AST.negate_comparison
+R17584 Values.notbool
+R17592 Values.cmp_mismatch
+R17717 Coq.Init.Logic "x = y" type_scope
+R17687 Values.cmp
+R17692 AST.negate_comparison
+R17719 Values.notbool
+R17728 Values.cmp
+R17796 Integers.negate_cmp
+R17796 Integers.negate_cmp
+R17818 Values.notbool_negb_1
+R17818 Values.notbool_negb_1
+R17842 Integers.eq
+R17851 Integers.zero
+R17842 Integers.eq
+R17851 Integers.zero
+R17868 Values.negate_cmp_mismatch
+R17868 Values.negate_cmp_mismatch
+R17910 Integers.eq
+R17920 Integers.zero
+R17910 Integers.eq
+R17920 Integers.zero
+R17937 Values.negate_cmp_mismatch
+R17937 Values.negate_cmp_mismatch
+R17979 Coqlib.zeq
+R17979 Coqlib.zeq
+R18007 Integers.negate_cmp
+R18007 Integers.negate_cmp
+R18029 Values.notbool_negb_1
+R18029 Values.notbool_negb_1
+R18053 Values.negate_cmp_mismatch
+R18053 Values.negate_cmp_mismatch
+R18150 Coq.Init.Logic "x = y" type_scope
+R18119 Values.cmpu
+R18125 AST.negate_comparison
+R18152 Values.notbool
+R18161 Values.cmpu
+R18230 Integers.negate_cmpu
+R18230 Integers.negate_cmpu
+R18253 Values.notbool_negb_1
+R18253 Values.notbool_negb_1
+R18277 Integers.eq
+R18286 Integers.zero
+R18277 Integers.eq
+R18286 Integers.zero
+R18303 Values.negate_cmp_mismatch
+R18303 Values.negate_cmp_mismatch
+R18345 Integers.eq
+R18355 Integers.zero
+R18345 Integers.eq
+R18355 Integers.zero
+R18372 Values.negate_cmp_mismatch
+R18372 Values.negate_cmp_mismatch
+R18414 Coqlib.zeq
+R18414 Coqlib.zeq
+R18442 Integers.negate_cmpu
+R18442 Integers.negate_cmpu
+R18465 Values.notbool_negb_1
+R18465 Values.notbool_negb_1
+R18489 Values.negate_cmp_mismatch
+R18489 Values.negate_cmp_mismatch
+R18586 Coq.Init.Logic "x = y" type_scope
+R18553 Values.cmp_mismatch
+R18567 AST.swap_comparison
+R18588 Values.cmp_mismatch
+R18710 Coq.Init.Logic "x = y" type_scope
+R18682 Values.cmp
+R18687 AST.swap_comparison
+R18712 Values.cmp
+R18779 Integers.swap_cmp
+R18779 Integers.swap_cmp
+R18807 Integers.eq
+R18816 Integers.zero
+R18807 Integers.eq
+R18816 Integers.zero
+R18833 Values.swap_cmp_mismatch
+R18833 Values.swap_cmp_mismatch
+R18866 Integers.eq
+R18876 Integers.zero
+R18866 Integers.eq
+R18876 Integers.zero
+R18893 Values.swap_cmp_mismatch
+R18893 Values.swap_cmp_mismatch
+R18926 Coqlib.zeq
+R18926 Coqlib.zeq
+R18964 Coqlib.zeq_true
+R18964 Coqlib.zeq_true
+R18982 Integers.swap_cmp
+R18982 Integers.swap_cmp
+R19012 Coqlib.zeq_false
+R19012 Coqlib.zeq_false
+R19029 Values.swap_cmp_mismatch
+R19029 Values.swap_cmp_mismatch
+R19126 Coq.Init.Logic "x = y" type_scope
+R19097 Values.cmpu
+R19103 AST.swap_comparison
+R19128 Values.cmpu
+R19196 Integers.swap_cmpu
+R19196 Integers.swap_cmpu
+R19225 Integers.eq
+R19234 Integers.zero
+R19225 Integers.eq
+R19234 Integers.zero
+R19251 Values.swap_cmp_mismatch
+R19251 Values.swap_cmp_mismatch
+R19284 Integers.eq
+R19294 Integers.zero
+R19284 Integers.eq
+R19294 Integers.zero
+R19311 Values.swap_cmp_mismatch
+R19311 Values.swap_cmp_mismatch
+R19344 Coqlib.zeq
+R19344 Coqlib.zeq
+R19382 Coqlib.zeq_true
+R19382 Coqlib.zeq_true
+R19400 Integers.swap_cmpu
+R19400 Integers.swap_cmpu
+R19431 Coqlib.zeq_false
+R19431 Coqlib.zeq_false
+R19448 Values.swap_cmp_mismatch
+R19448 Values.swap_cmp_mismatch
+R19544 Coq.Init.Logic "x = y" type_scope
+R19519 Values.notbool
+R19528 Values.cmpf
+R19533 AST.Cne
+R19546 Values.cmpf
+R19551 AST.Ceq
+R19620 Floats.cmp_ne_eq
+R19620 Floats.cmp_ne_eq
+R19645 Values.notbool_negb_1
+R19645 Values.notbool_negb_1
+R19670 Values.notbool_idem2
+R19670 Values.notbool_idem2
+R19754 Coq.Init.Logic "x = y" type_scope
+R19725 Values.or
+R19742 Values.of_bool
+R19729 Values.of_bool
+R19756 Values.of_bool
+R19768 Coq.Bool.Bool "x || y" bool_scope
+R19878 Coq.Init.Logic "x = y" type_scope
+R19863 Values.cmpf
+R19868 AST.Cle
+R19880 Values.or
+R19901 Values.cmpf
+R19906 AST.Ceq
+R19884 Values.cmpf
+R19889 AST.Clt
+R19976 Values.or_of_bool
+R19976 Values.or_of_bool
+R20001 Floats.cmp_le_lt_eq
+R20001 Floats.cmp_le_lt_eq
+R20075 Coq.Init.Logic "x = y" type_scope
+R20060 Values.cmpf
+R20065 AST.Cge
+R20077 Values.or
+R20098 Values.cmpf
+R20103 AST.Ceq
+R20081 Values.cmpf
+R20086 AST.Cgt
+R20173 Values.or_of_bool
+R20173 Values.or_of_bool
+R20198 Floats.cmp_ge_gt_eq
+R20198 Floats.cmp_ge_gt_eq
+R20268 Coq.Init.Logic "A \/ B" type_scope
+R20259 Coq.Init.Logic "x = y" type_scope
+R20261 Values.Vundef
+R20281 Coq.Init.Logic "A \/ B" type_scope
+R20273 Coq.Init.Logic "x = y" type_scope
+R20275 Values.Vtrue
+R20286 Coq.Init.Logic "x = y" type_scope
+R20288 Values.Vfalse
+R20247 Values.val
+R20332 Values.is_bool
+R20341 Values.of_bool
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R20431 Values.is_bool
+R20439 Values.Vundef
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R20525 Values.is_bool
+R20534 Values.cmp_mismatch
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R20645 Values.is_bool
+R20654 Values.cmp
+R20720 Values.undef_is_bool
+R20720 Values.undef_is_bool
+R20720 Values.undef_is_bool
+R20720 Values.undef_is_bool
+R20720 Values.undef_is_bool
+R20720 Values.undef_is_bool
+R20720 Values.undef_is_bool
+R20720 Values.undef_is_bool
+R20720 Values.undef_is_bool
+R20720 Values.undef_is_bool
+R20720 Values.undef_is_bool
+R20720 Values.undef_is_bool
+R20720 Values.undef_is_bool
+R20720 Values.undef_is_bool
+R20720 Values.undef_is_bool
+R20720 Values.undef_is_bool
+R20720 Values.undef_is_bool
+R20743 Values.of_bool_is_bool
+R20743 Values.of_bool_is_bool
+R20768 Integers.eq
+R20777 Integers.zero
+R20768 Integers.eq
+R20777 Integers.zero
+R20794 Values.cmp_mismatch_is_bool
+R20794 Values.cmp_mismatch_is_bool
+R20822 Values.undef_is_bool
+R20822 Values.undef_is_bool
+R20845 Integers.eq
+R20855 Integers.zero
+R20845 Integers.eq
+R20855 Integers.zero
+R20872 Values.cmp_mismatch_is_bool
+R20872 Values.cmp_mismatch_is_bool
+R20900 Values.undef_is_bool
+R20900 Values.undef_is_bool
+R20923 Coqlib.zeq
+R20923 Coqlib.zeq
+R20947 Values.of_bool_is_bool
+R20947 Values.of_bool_is_bool
+R20970 Values.cmp_mismatch_is_bool
+R20970 Values.cmp_mismatch_is_bool
+R21036 Values.is_bool
+R21045 Values.cmpu
+R21112 Values.undef_is_bool
+R21112 Values.undef_is_bool
+R21112 Values.undef_is_bool
+R21112 Values.undef_is_bool
+R21112 Values.undef_is_bool
+R21112 Values.undef_is_bool
+R21112 Values.undef_is_bool
+R21112 Values.undef_is_bool
+R21112 Values.undef_is_bool
+R21112 Values.undef_is_bool
+R21112 Values.undef_is_bool
+R21112 Values.undef_is_bool
+R21112 Values.undef_is_bool
+R21112 Values.undef_is_bool
+R21112 Values.undef_is_bool
+R21112 Values.undef_is_bool
+R21112 Values.undef_is_bool
+R21135 Values.of_bool_is_bool
+R21135 Values.of_bool_is_bool
+R21160 Integers.eq
+R21169 Integers.zero
+R21160 Integers.eq
+R21169 Integers.zero
+R21186 Values.cmp_mismatch_is_bool
+R21186 Values.cmp_mismatch_is_bool
+R21214 Values.undef_is_bool
+R21214 Values.undef_is_bool
+R21237 Integers.eq
+R21247 Integers.zero
+R21237 Integers.eq
+R21247 Integers.zero
+R21264 Values.cmp_mismatch_is_bool
+R21264 Values.cmp_mismatch_is_bool
+R21292 Values.undef_is_bool
+R21292 Values.undef_is_bool
+R21315 Coqlib.zeq
+R21315 Coqlib.zeq
+R21339 Values.of_bool_is_bool
+R21339 Values.of_bool_is_bool
+R21362 Values.cmp_mismatch_is_bool
+R21362 Values.cmp_mismatch_is_bool
+R21428 Values.is_bool
+R21437 Values.cmpf
+R21525 Values.of_bool_is_bool
+R21502 Values.undef_is_bool
+R21502 Values.undef_is_bool
+R21502 Values.undef_is_bool
+R21502 Values.undef_is_bool
+R21502 Values.undef_is_bool
+R21502 Values.undef_is_bool
+R21502 Values.undef_is_bool
+R21502 Values.undef_is_bool
+R21502 Values.undef_is_bool
+R21502 Values.undef_is_bool
+R21502 Values.undef_is_bool
+R21502 Values.undef_is_bool
+R21525 Values.of_bool_is_bool
+R21502 Values.undef_is_bool
+R21502 Values.undef_is_bool
+R21502 Values.undef_is_bool
+R21502 Values.undef_is_bool
+R21502 Values.undef_is_bool
+R21583 Values.is_bool
+R21592 Values.notbool
+R21640 Values.undef_is_bool
+R21640 Values.undef_is_bool
+R21661 Values.of_bool_is_bool
+R21661 Values.of_bool_is_bool
+R21687 Values.undef_is_bool
+R21687 Values.undef_is_bool
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R21777 Coq.Init.Logic "x = y" type_scope
+R21779 Values.xor
+R21795 Values.Vone
+R21784 Values.notbool
+R21762 Values.is_bool
+FMem
+R191 Coq.ZArith.BinInt.Z
+R215 Coqlib.zeq
+R181 Coq.ZArith.BinInt.Z
+R167 Coq.ZArith.BinInt.Z
+R351 Coq.Init.Logic "x = y" type_scope
+R336 Mem.update
+R325 Coq.ZArith.BinInt.Z
+R311 Coq.ZArith.BinInt.Z
+R394 Coqlib.zeq_true
+R394 Coqlib.zeq_true
+R505 Coq.Init.Logic "x = y" type_scope
+R490 Mem.update
+R482 Coq.Init.Logic "x <> y" type_scope
+R474 Coq.ZArith.BinInt.Z
+R462 Coq.ZArith.BinInt.Z
+R448 Coq.ZArith.BinInt.Z
+R550 Coqlib.zeq_false
+R550 Coqlib.zeq_false
+R631 Values.val
+R659 Values.val
+R687 Values.val
+R715 Values.val
+R786 Mem.content
+R781 Coq.ZArith.BinInt.Z
+R844 Coq.ZArith.BinInt.Z
+R855 Coq.ZArith.BinInt.Z
+R870 Mem.contentmap
+R952 Coq.Init.Logic "x = y" type_scope
+R954 Mem.Undef
+R921 Coq.Init.Logic "A \/ B" type_scope
+R915 Coq.ZArith.BinInt "x < y" Z_scope
+R928 Coq.ZArith.BinInt "x >= y" Z_scope
+R1007 Mem.block_contents
+R1002 Coq.ZArith.BinInt.Z
+R1036 Values.block
+R1070 Coq.ZArith.BinInt "x > y" Z_scope
+R1267 Mem.Size8
+R1282 Mem.Size16
+R1298 Mem.Size32
+R1314 Mem.Size64
+R1231 Mem.memory_size
+R1403 AST.Mint8signed
+R1418 Mem.Size8
+R1428 AST.Mint8unsigned
+R1445 Mem.Size8
+R1455 AST.Mint16signed
+R1471 Mem.Size16
+R1482 AST.Mint16unsigned
+R1500 Mem.Size16
+R1511 AST.Mint32
+R1521 Mem.Size32
+R1532 AST.Mfloat32
+R1544 Mem.Size32
+R1555 AST.Mfloat64
+R1567 Mem.Size64
+R1363 AST.memory_chunk
+R1629 Mem.size_mem
+R1639 Mem.mem_chunk
+R1612 AST.memory_chunk
+R1702 Coq.ZArith.BinInt "x > y" Z_scope
+R1821 Coq.Init.Logic "x = y" type_scope
+R1810 Mem.Undef
+R1823 Mem.Undef
+R1784 Coq.Init.Logic "A \/ B" type_scope
+R1779 Coq.ZArith.BinInt "x < y" Z_scope
+R1791 Coq.ZArith.BinInt "x >= y" Z_scope
+R1887 Mem.block_contents
+R1907 Mem.mkblock
+R1939 Mem.undef_undef_outside
+R1931 Mem.Undef
+R1882 Coq.ZArith.BinInt.Z
+R1882 Coq.ZArith.BinInt.Z
+R1986 Mem.mem
+R1995 Mem.mkmem
+R2030 Mem.one_pos
+R2011 Mem.empty_block
+R2060 Values.block
+R2178 Coq.ZArith.BinInt "x > y" Z_scope
+R2158 Coq.ZArith.BinInt.Zsucc
+R2167 Mem.nextblock
+R2209 Mem.nextblock_pos
+R2209 Mem.nextblock_pos
+R2282 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R2283 Mem.mkmem
+R2419 Mem.succ_nextblock_pos
+R2388 Coq.ZArith.BinInt.Zsucc
+R2397 Mem.nextblock
+R2290 Mem.update
+R2369 Mem.blocks
+R2330 Mem.empty_block
+R2300 Mem.nextblock
+R2448 Mem.nextblock
+R2274 Coq.ZArith.BinInt.Z
+R2274 Coq.ZArith.BinInt.Z
+R2261 Mem.mem
+R2544 Mem.mkmem
+R2656 Mem.nextblock_pos
+R2634 Mem.nextblock
+R2551 Mem.update
+R2614 Mem.blocks
+R2578 Mem.empty_block
+R2532 Values.block
+R2523 Mem.mem
+R2764 Coq.Lists.List.fold_right
+R2792 Mem.free
+R2747 Coq.Lists.List.list
+R2752 Values.block
+R2739 Mem.mem
+R2964 Mem.low
+R2972 Mem.blocks
+R2952 Values.block
+R2943 Mem.mem
+R3031 Mem.high
+R3040 Mem.blocks
+R3019 Values.block
+R3010 Mem.mem
+R3163 Coq.ZArith.BinInt "x < y" Z_scope
+R3168 Mem.nextblock
+R3149 Values.block
+R3140 Mem.mem
+R3310 Coq.Init.Datatypes.bool
+R3285 Mem.contentmap
+R3278 Coq.ZArith.BinInt.Z
+R3269 Coq.Init.Datatypes.nat
+R3337 Coq.Init.Datatypes.O
+R3342 Coq.Init.Datatypes.true
+R3351 Coq.Init.Datatypes.S
+R3388 Mem.Cont
+R3413 Coq.ZArith.BinInt "x + y" Z_scope
+R3433 Coq.Init.Datatypes.false
+R3285 Mem.contentmap
+R3278 Coq.ZArith.BinInt.Z
+R3269 Coq.Init.Datatypes.nat
+R3507 Mem.content
+R3523 Mem.check_cont
+R3539 Coq.ZArith.BinInt "x + y" Z_scope
+R3560 Mem.Undef
+R3493 Mem.contentmap
+R3486 Coq.ZArith.BinInt.Z
+R3477 Coq.Init.Datatypes.nat
+R3631 Mem.contentmap
+R3606 Mem.contentmap
+R3599 Coq.ZArith.BinInt.Z
+R3590 Coq.Init.Datatypes.nat
+R3664 Coq.Init.Datatypes.O
+R3675 Coq.Init.Datatypes.S
+R3683 Mem.update
+R3713 Coq.ZArith.BinInt "x + y" Z_scope
+R3692 Mem.Cont
+R3606 Mem.contentmap
+R3599 Coq.ZArith.BinInt.Z
+R3590 Coq.Init.Datatypes.nat
+R3792 Mem.contentmap
+R3808 Mem.update
+R3820 Mem.set_cont
+R3834 Coq.ZArith.BinInt "x + y" Z_scope
+R3778 Mem.contentmap
+R3765 Mem.content
+R3758 Coq.ZArith.BinInt.Z
+R3749 Coq.Init.Datatypes.nat
+R3957 Coq.Init.Logic "x = y" type_scope
+R3940 Mem.check_cont
+R3959 Coq.Init.Datatypes.true
+R3927 Coq.Init.Logic "x = y" type_scope
+R3929 Mem.Cont
+R3898 Coq.ZArith.BinInt "x <= y < z" Z_scope
+R3907 Coq.ZArith.BinInt "x + y" Z_scope
+R3909 Coq.ZArith.BinInt.Z_of_nat
+R4069 Coq.ZArith.Znat.inj_S
+R4069 Coq.ZArith.Znat.inj_S
+R4093 Coq.ZArith.Znat.inj_S
+R4093 Coq.ZArith.Znat.inj_S
+R4127 Mem.check_cont_true
+R4256 Coq.Init.Logic "x = y" type_scope
+R4258 Mem.Cont
+R4227 Coq.ZArith.BinInt "x <= y < z" Z_scope
+R4236 Coq.ZArith.BinInt "x + y" Z_scope
+R4238 Coq.ZArith.BinInt.Z_of_nat
+R4202 Coq.Init.Logic "x = y" type_scope
+R4185 Mem.check_cont
+R4204 Coq.Init.Datatypes.true
+R4376 Mem.check_cont
+R4376 Mem.check_cont
+R4447 Coq.Init.Logic "A \/ B" type_scope
+R4443 Coq.Init.Logic "x = y" type_scope
+R4456 Coq.ZArith.BinInt "x <= y < z" Z_scope
+R4452 Coq.ZArith.BinInt "x + y" Z_scope
+R4469 Coq.ZArith.BinInt "x + y" Z_scope
+R4466 Coq.ZArith.BinInt "x + y" Z_scope
+R4473 Coq.ZArith.BinInt.Z_of_nat
+R4447 Coq.Init.Logic "A \/ B" type_scope
+R4443 Coq.Init.Logic "x = y" type_scope
+R4456 Coq.ZArith.BinInt "x <= y < z" Z_scope
+R4452 Coq.ZArith.BinInt "x + y" Z_scope
+R4469 Coq.ZArith.BinInt "x + y" Z_scope
+R4466 Coq.ZArith.BinInt "x + y" Z_scope
+R4473 Coq.ZArith.BinInt.Z_of_nat
+R4498 Coq.ZArith.Znat.inj_S
+R4498 Coq.ZArith.Znat.inj_S
+R4574 Coq.ZArith.BinInt "x + y" Z_scope
+R4574 Coq.ZArith.BinInt "x + y" Z_scope
+R4605 Mem.check_cont_inv
+R4729 Coq.Init.Logic "x = y" type_scope
+R4712 Mem.check_cont
+R4731 Coq.Init.Datatypes.false
+R4699 Coq.Init.Logic "x <> y" type_scope
+R4702 Mem.Cont
+R4668 Coq.ZArith.BinInt "x <= y < z" Z_scope
+R4677 Coq.ZArith.BinInt "x + y" Z_scope
+R4679 Coq.ZArith.BinInt.Z_of_nat
+R4763 Mem.check_cont
+R4763 Mem.check_cont
+R4803 Mem.check_cont_inv
+R4803 Mem.check_cont_inv
+R4882 Mem.check_cont_false
+R4992 Coq.Init.Logic "x = y" type_scope
+R4974 Mem.set_cont
+R4994 Mem.Cont
+R4946 Coq.ZArith.BinInt "x <= y < z" Z_scope
+R4955 Coq.ZArith.BinInt "x + y" Z_scope
+R4957 Coq.ZArith.BinInt.Z_of_nat
+R5100 Coq.Init.Logic "A \/ B" type_scope
+R5096 Coq.Init.Logic "x = y" type_scope
+R5109 Coq.ZArith.BinInt "x <= y < z" Z_scope
+R5105 Coq.ZArith.BinInt "x + y" Z_scope
+R5122 Coq.ZArith.BinInt "x + y" Z_scope
+R5119 Coq.ZArith.BinInt "x + y" Z_scope
+R5126 Coq.ZArith.BinInt.Z_of_nat
+R5100 Coq.Init.Logic "A \/ B" type_scope
+R5096 Coq.Init.Logic "x = y" type_scope
+R5109 Coq.ZArith.BinInt "x <= y < z" Z_scope
+R5105 Coq.ZArith.BinInt "x + y" Z_scope
+R5122 Coq.ZArith.BinInt "x + y" Z_scope
+R5119 Coq.ZArith.BinInt "x + y" Z_scope
+R5126 Coq.ZArith.BinInt.Z_of_nat
+R5151 Coq.ZArith.Znat.inj_S
+R5151 Coq.ZArith.Znat.inj_S
+R5206 Mem.update_s
+R5206 Mem.update_s
+R5226 Mem.update_o
+R5226 Mem.update_o
+R5304 Mem.set_cont_inside
+R5419 Coq.Init.Logic "x = y" type_scope
+R5401 Mem.set_cont
+R5372 Coq.Init.Logic "A \/ B" type_scope
+R5368 Coq.ZArith.BinInt "x < y" Z_scope
+R5390 Coq.ZArith.BinInt "x <= y" Z_scope
+R5377 Coq.ZArith.BinInt "x + y" Z_scope
+R5379 Coq.ZArith.BinInt.Z_of_nat
+R5488 Coq.ZArith.Znat.inj_S
+R5488 Coq.ZArith.Znat.inj_S
+R5511 Mem.update_o
+R5511 Mem.update_o
+R5565 Mem.set_cont_outside
+R5650 Coq.Init.Logic "x = y" type_scope
+R5626 Mem.getN
+R5636 Mem.setN
+R5701 Mem.check_cont_true
+R5701 Mem.check_cont_true
+R5724 Mem.update_s
+R5724 Mem.update_s
+R5752 Mem.update_o
+R5752 Mem.update_o
+R5768 Mem.set_cont_inside
+R5768 Mem.set_cont_inside
+R5820 Mem.getN_setN_same
+R5968 Coq.Init.Logic "x = y" type_scope
+R5940 Mem.getN
+R5952 Mem.setN
+R5970 Mem.getN
+R5910 Coq.Init.Logic "A \/ B" type_scope
+R5905 Coq.ZArith.BinInt "x < y" Z_scope
+R5891 Coq.ZArith.BinInt "x + y" Z_scope
+R5893 Coq.ZArith.BinInt.Z_of_nat
+R5930 Coq.ZArith.BinInt "x < y" Z_scope
+R5916 Coq.ZArith.BinInt "x + y" Z_scope
+R5918 Coq.ZArith.BinInt.Z_of_nat
+R6030 Mem.check_cont
+R6048 Coq.ZArith.BinInt "x + y" Z_scope
+R6030 Mem.check_cont
+R6048 Coq.ZArith.BinInt "x + y" Z_scope
+R6074 Mem.check_cont_true
+R6074 Mem.check_cont_true
+R6099 Mem.update_o
+R6099 Mem.update_o
+R6117 Mem.set_cont_outside
+R6117 Mem.set_cont_outside
+R6167 Mem.update_o
+R6167 Mem.update_o
+R6185 Mem.set_cont_outside
+R6185 Mem.set_cont_outside
+R6212 Mem.check_cont_inv
+R6212 Mem.check_cont_inv
+R6268 Mem.check_cont
+R6292 Mem.update
+R6305 Mem.set_cont
+R6321 Coq.ZArith.BinInt "x + y" Z_scope
+R6286 Coq.ZArith.BinInt "x + y" Z_scope
+R6268 Mem.check_cont
+R6292 Mem.update
+R6305 Mem.set_cont
+R6321 Coq.ZArith.BinInt "x + y" Z_scope
+R6286 Coq.ZArith.BinInt "x + y" Z_scope
+R6375 Coq.Init.Logic "x = y" type_scope
+R6350 Mem.check_cont
+R6368 Coq.ZArith.BinInt "x + y" Z_scope
+R6377 Coq.Init.Datatypes.true
+R6375 Coq.Init.Logic "x = y" type_scope
+R6350 Mem.check_cont
+R6368 Coq.ZArith.BinInt "x + y" Z_scope
+R6377 Coq.Init.Datatypes.true
+R6392 Mem.check_cont_true
+R6392 Mem.check_cont_true
+R6432 Mem.check_cont_inv
+R6432 Mem.check_cont_inv
+R6473 Mem.update_o
+R6473 Mem.update_o
+R6491 Mem.set_cont_outside
+R6491 Mem.set_cont_outside
+R6591 Mem.getN_setN_other
+R6780 Coq.Init.Logic "A \/ B" type_scope
+R6773 Coq.Init.Logic "x = y" type_scope
+R6745 Mem.getN
+R6757 Mem.setN
+R6775 Mem.Cont
+R6813 Coq.Init.Logic "x = y" type_scope
+R6785 Mem.getN
+R6797 Mem.setN
+R6815 Mem.Undef
+R6732 Coq.Init.Logic "x <> y" type_scope
+R6735 Mem.Cont
+R6719 Coq.ZArith.BinInt "x >= y" Z_scope
+R6705 Coq.ZArith.BinInt "x + y" Z_scope
+R6707 Coq.ZArith.BinInt.Z_of_nat
+R6693 Coq.ZArith.BinInt "x >= y" Z_scope
+R6679 Coq.ZArith.BinInt "x + y" Z_scope
+R6681 Coq.ZArith.BinInt.Z_of_nat
+R6665 Coq.Init.Logic "x <> y" type_scope
+R6862 Mem.check_cont
+R6886 Mem.setN
+R6880 Coq.ZArith.BinInt "x + y" Z_scope
+R6862 Mem.check_cont
+R6886 Mem.setN
+R6880 Coq.ZArith.BinInt "x + y" Z_scope
+R6919 Coqlib.zlt
+R6919 Coqlib.zlt
+R6955 Coq.ZArith.BinInt "x <= y < z" Z_scope
+R6951 Coq.ZArith.BinInt "x + y" Z_scope
+R6970 Coq.ZArith.BinInt "x + y" Z_scope
+R6966 Coq.ZArith.BinInt "x + y" Z_scope
+R6972 Coq.ZArith.BinInt.Z_of_nat
+R6955 Coq.ZArith.BinInt "x <= y < z" Z_scope
+R6951 Coq.ZArith.BinInt "x + y" Z_scope
+R6970 Coq.ZArith.BinInt "x + y" Z_scope
+R6966 Coq.ZArith.BinInt "x + y" Z_scope
+R6972 Coq.ZArith.BinInt.Z_of_nat
+R7007 Mem.check_cont_inv
+R7007 Mem.check_cont_inv
+R7063 Mem.update_s
+R7063 Mem.update_s
+R7124 Mem.update_o
+R7124 Mem.update_o
+R7142 Mem.set_cont_inside
+R7142 Mem.set_cont_inside
+R7207 Mem.getN_setN_overlap
+R7307 Coq.Init.Logic "A \/ B" type_scope
+R7303 Coq.Init.Logic "x = y" type_scope
+R7277 Mem.getN
+R7288 Mem.setN
+R7336 Coq.Init.Logic "x = y" type_scope
+R7310 Mem.getN
+R7321 Mem.setN
+R7338 Mem.Undef
+R7386 Mem.check_cont
+R7409 Mem.setN
+R7403 Coq.ZArith.BinInt "x + y" Z_scope
+R7386 Mem.check_cont
+R7409 Mem.setN
+R7403 Coq.ZArith.BinInt "x + y" Z_scope
+R7460 Mem.update_s
+R7460 Mem.update_s
+R7504 Mem.getN_setN_mismatch
+R7584 Coq.Init.Logic "x = y" type_scope
+R7558 Mem.getN
+R7577 Mem.Undef
+R7586 Mem.Undef
+R7631 Mem.check_cont
+R7662 Mem.Undef
+R7647 Coq.ZArith.BinInt "x + y" Z_scope
+R7631 Mem.check_cont
+R7662 Mem.Undef
+R7647 Coq.ZArith.BinInt "x + y" Z_scope
+R7696 Mem.getN_init
+R7814 Coq.Init.Specif "{ A } + { B }" type_scope
+R7830 Coq.Init.Logic "A /\ B" type_scope
+R7823 Coq.ZArith.BinInt "x <= y" Z_scope
+R7818 Mem.low
+R7856 Coq.ZArith.BinInt "x <= y" Z_scope
+R7837 Coq.ZArith.BinInt "x + y" Z_scope
+R7839 Mem.size_chunk
+R7862 Mem.high
+R7892 Coq.Init.Logic "A \/ B" type_scope
+R7886 Coq.ZArith.BinInt "x > y" Z_scope
+R7881 Mem.low
+R7918 Coq.ZArith.BinInt "x > y" Z_scope
+R7899 Coq.ZArith.BinInt "x + y" Z_scope
+R7901 Mem.size_chunk
+R7923 Mem.high
+R7958 Coqlib.zle
+R7990 Mem.high
+R7967 Coq.ZArith.BinInt "x + y" Z_scope
+R7969 Mem.size_chunk
+R7941 Coqlib.zle
+R7948 Mem.low
+R8005 Coq.Init.Specif.left
+R8014 Coq.Init.Specif.left
+R8025 Coq.Init.Specif.left
+R8033 Coq.Init.Logic.conj
+R8049 Coq.Init.Specif.left
+R8058 Coq.Init.Specif.right
+R8070 Coq.Init.Specif.right
+R8079 Coq.Init.Logic.or_intror
+R8099 Coq.Init.Specif.right
+R8114 Coq.Init.Specif.right
+R8123 Coq.Init.Logic.or_introl
+R7787 Mem.block_contents
+R7780 Coq.ZArith.BinInt.Z
+R7760 AST.memory_chunk
+R8357 Coq.Init.Logic "x = y" type_scope
+R8322 Mem.in_bounds
+R8301 Coq.ZArith.BinInt "x <= y" Z_scope
+R8282 Coq.ZArith.BinInt "x + y" Z_scope
+R8284 Mem.size_chunk
+R8307 Mem.high
+R8268 Coq.ZArith.BinInt "x <= y" Z_scope
+R8263 Mem.low
+R8214 Mem.block_contents
+R8207 Coq.ZArith.BinInt.Z
+R8187 AST.memory_chunk
+R8387 Mem.in_bounds
+R8387 Mem.in_bounds
+R8609 Coq.Init.Logic "x = y" type_scope
+R8558 Mem.in_bounds
+R8579 Mem.mkblock
+R8596 Mem.high
+R8588 Mem.low
+R8613 Mem.in_bounds
+R8541 Mem.contentmap
+R8521 Mem.block_contents
+R8514 Coq.ZArith.BinInt.Z
+R8494 AST.memory_chunk
+R8685 Mem.in_bounds_holds
+R8701 Mem.in_bounds_exten
+R8775 Coq.Init.Datatypes.bool
+R8788 Coqlib.zlt
+R8797 Mem.nextblock
+R8956 Coq.Init.Datatypes.false
+R8851 Coqlib.zle
+R8858 Mem.low
+R8942 Coq.Init.Datatypes.false
+R8875 Coqlib.zlt
+R8886 Mem.high
+R8907 Coq.Init.Datatypes.false
+R8897 Coq.Init.Datatypes.true
+R8830 Mem.blocks
+R8770 Coq.ZArith.BinInt.Z
+R8757 Values.block
+R8748 Mem.mem
+R9073 Values.val
+R9100 Mem.Size8
+R9121 Mem.getN
+R9151 Mem.Datum8
+R9178 Values.Vundef
+R9199 Mem.Size16
+R9221 Mem.getN
+R9251 Mem.Datum16
+R9279 Values.Vundef
+R9300 Mem.Size32
+R9322 Mem.getN
+R9352 Mem.Datum32
+R9380 Values.Vundef
+R9401 Mem.Size64
+R9423 Mem.getN
+R9453 Mem.Datum64
+R9481 Values.Vundef
+R9068 Coq.ZArith.BinInt.Z
+R9050 Mem.contentmap
+R9033 Mem.memory_size
+R9591 Coq.Init.Datatypes.option
+R9598 Values.val
+R9610 Coqlib.zlt
+R9619 Mem.nextblock
+R9832 Coq.Init.Datatypes.None
+R9673 Mem.in_bounds
+R9815 Coq.Init.Datatypes.None
+R9705 Coq.Init.Datatypes.Some
+R9711 Values.load_result
+R9754 Mem.load_contents
+R9789 Mem.contents
+R9769 Mem.mem_chunk
+R9652 Mem.blocks
+R9570 Coq.ZArith.BinInt.Z
+R9557 Values.block
+R9548 Mem.mem
+R9530 AST.memory_chunk
+R9901 Coq.Init.Datatypes.option
+R9908 Values.val
+R9937 Values.Vptr
+R9951 Mem.load
+R9967 Integers.signed
+R9992 Coq.Init.Datatypes.None
+R9894 Values.val
+R9882 Mem.mem
+R9864 AST.memory_chunk
+R10185 Coq.Init.Logic "'exists' x , p" type_scope
+R10214 Coq.Init.Logic "x = y" type_scope
+R10195 Mem.load
+R10216 Coq.Init.Datatypes.Some
+R10162 Coq.ZArith.BinInt "x <= y" Z_scope
+R10143 Coq.ZArith.BinInt "x + y" Z_scope
+R10145 Mem.size_chunk
+R10165 Mem.high_bound
+R10127 Coq.ZArith.BinInt "x <= y" Z_scope
+R10113 Mem.low_bound
+R10092 Mem.valid_block
+R10086 Coq.ZArith.BinInt.Z
+R10073 Values.block
+R10064 Mem.mem
+R10046 AST.memory_chunk
+R10262 Coqlib.zlt_true
+R10262 Coqlib.zlt_true
+R10288 Mem.in_bounds_holds
+R10288 Mem.in_bounds_holds
+R10316 Values.load_result
+R10351 Mem.load_contents
+R10411 Mem.contents
+R10424 Mem.blocks
+R10366 Mem.mem_chunk
+R10316 Values.load_result
+R10351 Mem.load_contents
+R10411 Mem.contents
+R10424 Mem.blocks
+R10366 Mem.mem_chunk
+R10672 Coq.Init.Logic "A /\ B" type_scope
+R10656 Coq.ZArith.BinInt "x < y" Z_scope
+R10661 Mem.nextblock
+R10692 Coq.Init.Logic "A /\ B" type_scope
+R10685 Coq.ZArith.BinInt "x <= y" Z_scope
+R10680 Mem.low
+R10732 Coq.Init.Logic "A /\ B" type_scope
+R10720 Coq.ZArith.BinInt "x <= y" Z_scope
+R10701 Coq.ZArith.BinInt "x + y" Z_scope
+R10703 Mem.size_chunk
+R10726 Mem.high
+R10811 Coq.Init.Logic "x = y" type_scope
+R10737 Values.load_result
+R10760 Mem.load_contents
+R10796 Mem.contents
+R10775 Mem.mem_chunk
+R10639 Mem.blocks
+R10613 Coq.Init.Logic "x = y" type_scope
+R10594 Mem.load
+R10615 Coq.Init.Datatypes.Some
+R10586 Values.val
+R10579 Coq.ZArith.BinInt.Z
+R10566 Values.block
+R10557 Mem.mem
+R10539 AST.memory_chunk
+R10862 Coqlib.zlt
+R10869 Mem.nextblock
+R10862 Coqlib.zlt
+R10869 Mem.nextblock
+R10906 Mem.blocks
+R10906 Mem.blocks
+R10926 Mem.in_bounds
+R10926 Mem.in_bounds
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R11040 Mem.load_in_bounds
+R11055 Mem.load_inv
+R11210 Mem.contentmap
+R11244 Mem.Size8
+R11259 Mem.setN
+R11275 Mem.Datum8
+R11291 Mem.Size16
+R11307 Mem.setN
+R11323 Mem.Datum16
+R11340 Mem.Size32
+R11356 Mem.setN
+R11372 Mem.Datum32
+R11389 Mem.Size64
+R11405 Mem.setN
+R11421 Mem.Datum64
+R11203 Values.val
+R11196 Coq.ZArith.BinInt.Z
+R11152 Mem.contentmap
+R11135 Mem.memory_size
+R11665 Coq.Init.Logic "x = y" type_scope
+R11637 Mem.store_contents
+R11667 Mem.Undef
+R11618 Coq.Init.Logic "A \/ B" type_scope
+R11613 Coq.ZArith.BinInt "x < y" Z_scope
+R11623 Coq.ZArith.BinInt "x >= y" Z_scope
+R11586 Coq.Init.Logic "x = y" type_scope
+R11588 Mem.Undef
+R11568 Coq.Init.Logic "A \/ B" type_scope
+R11563 Coq.ZArith.BinInt "x < y" Z_scope
+R11573 Coq.ZArith.BinInt "x >= y" Z_scope
+R11518 Coq.Init.Logic "A /\ B" type_scope
+R11511 Coq.ZArith.BinInt "x <= y" Z_scope
+R11539 Coq.ZArith.BinInt "x <= y" Z_scope
+R11525 Coq.ZArith.BinInt "x + y" Z_scope
+R11527 Mem.size_mem
+R11851 Coq.Init.Logic "x = y" type_scope
+R11834 Mem.setN
+R11853 Mem.Undef
+R11808 Coq.Init.Logic "A \/ B" type_scope
+R11803 Coq.ZArith.BinInt "x < y" Z_scope
+R11813 Coq.ZArith.BinInt "x >= y" Z_scope
+R11780 Coq.ZArith.BinInt "x <= y" Z_scope
+R11761 Coq.ZArith.BinInt "x + y" Z_scope
+R11766 Coq.ZArith.BinInt "x + y" Z_scope
+R11768 Coq.ZArith.BinInt.Z_of_nat
+R11851 Coq.Init.Logic "x = y" type_scope
+R11834 Mem.setN
+R11853 Mem.Undef
+R11808 Coq.Init.Logic "A \/ B" type_scope
+R11803 Coq.ZArith.BinInt "x < y" Z_scope
+R11813 Coq.ZArith.BinInt "x >= y" Z_scope
+R11780 Coq.ZArith.BinInt "x <= y" Z_scope
+R11761 Coq.ZArith.BinInt "x + y" Z_scope
+R11766 Coq.ZArith.BinInt "x + y" Z_scope
+R11768 Coq.ZArith.BinInt.Z_of_nat
+R11894 Mem.update_o
+R11894 Mem.update_o
+R11934 Mem.set_cont_outside
+R11934 Mem.set_cont_outside
+R12080 Coq.ZArith.BinInt.Z_of_nat
+R12299 Mem.mem
+R12335 Mem.mkmem
+R12637 Mem.nextblock_pos
+R12619 Mem.nextblock
+R12346 Mem.update
+R12603 Mem.blocks
+R12364 Mem.mkblock
+R12478 Mem.store_contents_undef_outside
+R12575 Mem.undef_outside
+R12528 Mem.contents
+R12508 Mem.mem_chunk
+R12407 Mem.store_contents
+R12443 Mem.contents
+R12423 Mem.mem_chunk
+R12383 Mem.high
+R12375 Mem.low
+R12320 Mem.blocks
+R12236 Coq.Init.Logic "A /\ B" type_scope
+R12229 Coq.ZArith.BinInt "x <= y" Z_scope
+R12224 Mem.low
+R12212 Mem.blocks
+R12271 Coq.ZArith.BinInt "x <= y" Z_scope
+R12252 Coq.ZArith.BinInt "x + y" Z_scope
+R12254 Mem.size_chunk
+R12290 Mem.high
+R12278 Mem.blocks
+R12194 Values.val
+R12187 Coq.ZArith.BinInt.Z
+R12169 Values.block
+R12160 Mem.mem
+R12142 AST.memory_chunk
+R12750 Coq.Init.Datatypes.option
+R12757 Mem.mem
+R12769 Coqlib.zlt
+R12778 Mem.nextblock
+R12941 Coq.Init.Datatypes.None
+R12804 Mem.in_bounds
+R12828 Mem.blocks
+R12850 Coq.Init.Specif.left
+R12860 Coq.Init.Datatypes.Some
+R12865 Mem.unchecked_store
+R12906 Coq.Init.Specif.right
+R12917 Coq.Init.Datatypes.None
+R12743 Values.val
+R12736 Coq.ZArith.BinInt.Z
+R12706 Values.block
+R12697 Mem.mem
+R12679 AST.memory_chunk
+R13013 Coq.Init.Datatypes.option
+R13020 Mem.mem
+R13049 Values.Vptr
+R13063 Mem.store
+R13080 Integers.signed
+R13107 Coq.Init.Datatypes.None
+R13006 Values.val
+R13006 Values.val
+R12992 Mem.mem
+R12974 AST.memory_chunk
+R13310 Coq.Init.Logic "'exists' x , p" type_scope
+R13343 Coq.Init.Logic "x = y" type_scope
+R13321 Mem.store
+R13345 Coq.Init.Datatypes.Some
+R13287 Coq.ZArith.BinInt "x <= y" Z_scope
+R13268 Coq.ZArith.BinInt "x + y" Z_scope
+R13270 Mem.size_chunk
+R13290 Mem.high_bound
+R13252 Coq.ZArith.BinInt "x <= y" Z_scope
+R13238 Mem.low_bound
+R13217 Mem.valid_block
+R13209 Values.val
+R13202 Coq.ZArith.BinInt.Z
+R13189 Values.block
+R13180 Mem.mem
+R13162 AST.memory_chunk
+R13395 Coqlib.zlt_true
+R13395 Coqlib.zlt_true
+R13420 Mem.in_bounds
+R13441 Mem.blocks
+R13420 Mem.in_bounds
+R13441 Mem.blocks
+R13474 Mem.unchecked_store
+R13474 Mem.unchecked_store
+R13774 Coq.Init.Logic "A /\ B" type_scope
+R13758 Coq.ZArith.BinInt "x < y" Z_scope
+R13763 Mem.nextblock
+R13794 Coq.Init.Logic "A /\ B" type_scope
+R13787 Coq.ZArith.BinInt "x <= y" Z_scope
+R13782 Mem.low
+R13834 Coq.Init.Logic "A /\ B" type_scope
+R13822 Coq.ZArith.BinInt "x <= y" Z_scope
+R13803 Coq.ZArith.BinInt "x + y" Z_scope
+R13805 Mem.size_chunk
+R13828 Mem.high
+R13870 Coq.Init.Logic "A /\ B" type_scope
+R13854 Coq.Init.Logic "x = y" type_scope
+R13843 Mem.nextblock
+R13859 Mem.nextblock
+R13875 Coq.Init.Logic "'exists' x , p" type_scope
+R13897 Coq.Init.Logic "x = y" type_scope
+R13889 Mem.blocks
+R13903 Mem.update
+R14046 Mem.blocks
+R13913 Mem.mkblock
+R13963 Mem.store_contents
+R13999 Mem.contents
+R13979 Mem.mem_chunk
+R13932 Mem.high
+R13924 Mem.low
+R13741 Mem.blocks
+R13714 Coq.Init.Logic "x = y" type_scope
+R13692 Mem.store
+R13716 Coq.Init.Datatypes.Some
+R13684 Values.val
+R13677 Coq.ZArith.BinInt.Z
+R13664 Values.block
+R13655 Mem.mem
+R13655 Mem.mem
+R13634 AST.memory_chunk
+R14102 Coqlib.zlt
+R14109 Mem.nextblock
+R14102 Coqlib.zlt
+R14109 Mem.nextblock
+R14146 Mem.blocks
+R14146 Mem.blocks
+R14166 Mem.in_bounds
+R14166 Mem.in_bounds
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R14269 Mem.store_contents_undef_outside
+R14368 Mem.undef_outside
+R14357 Mem.high
+R14349 Mem.low
+R14330 Mem.contents
+R14299 Mem.mem_chunk
+R14269 Mem.store_contents_undef_outside
+R14368 Mem.undef_outside
+R14357 Mem.high
+R14349 Mem.low
+R14330 Mem.contents
+R14299 Mem.mem_chunk
+R14462 Mem.store_in_bounds
+R14478 Mem.store_inv
+R14624 Coq.Init.Logic "x <> y" type_scope
+R14599 Coq.Init.Logic "~ x" type_scope
+R14601 Mem.valid_block
+R14580 Mem.valid_block
+R14795 Coq.Init.Logic "~ x" type_scope
+R14797 Mem.valid_block
+R14782 Coq.Init.Logic "x = y" type_scope
+R14767 Mem.alloc
+R14784 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R14756 Values.block
+R14749 Coq.ZArith.BinInt.Z
+R14749 Coq.ZArith.BinInt.Z
+R14736 Mem.mem
+R14736 Mem.mem
+R15000 Mem.valid_block
+R14987 Coq.Init.Logic "x = y" type_scope
+R14972 Mem.alloc
+R14989 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R14961 Values.block
+R14954 Coq.ZArith.BinInt.Z
+R14954 Coq.ZArith.BinInt.Z
+R14941 Mem.mem
+R14941 Mem.mem
+R15253 Mem.valid_block
+R15233 Mem.valid_block
+R15217 Coq.Init.Logic "x = y" type_scope
+R15202 Mem.alloc
+R15219 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R15191 Values.block
+R15191 Values.block
+R15181 Coq.ZArith.BinInt.Z
+R15181 Coq.ZArith.BinInt.Z
+R15168 Mem.mem
+R15168 Mem.mem
+R15533 Mem.valid_block
+R15513 Mem.valid_block
+R15498 Coq.Init.Logic "x = y" type_scope
+R15474 Mem.store
+R15500 Coq.Init.Datatypes.Some
+R15466 Values.val
+R15459 Coq.ZArith.BinInt.Z
+R15446 Values.block
+R15446 Values.block
+R15434 Mem.mem
+R15434 Mem.mem
+R15412 AST.memory_chunk
+R15580 Mem.store_inv
+R15580 Mem.store_inv
+R15754 Mem.valid_block
+R15767 Mem.free
+R15735 Mem.valid_block
+R15724 Values.block
+R15724 Values.block
+R15712 Mem.mem
+R16086 Coq.Init.Logic "x = y" type_scope
+R16066 Mem.load
+R16088 Coq.Init.Datatypes.Some
+R16052 Coq.Init.Logic "x = y" type_scope
+R16032 Mem.load
+R16054 Coq.Init.Datatypes.Some
+R16016 Coq.Init.Logic "x = y" type_scope
+R16001 Mem.alloc
+R16018 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R15993 Values.val
+R15986 Coq.ZArith.BinInt.Z
+R15986 Coq.ZArith.BinInt.Z
+R15986 Coq.ZArith.BinInt.Z
+R15967 Values.block
+R15967 Values.block
+R15946 Mem.mem
+R15946 Mem.mem
+R15924 AST.memory_chunk
+R16183 Mem.load_inv
+R16183 Mem.load_inv
+R16266 Coqlib.zlt_true
+R16266 Coqlib.zlt_true
+R16294 Mem.update_o
+R16294 Mem.update_o
+R16294 Mem.update_o
+R16294 Mem.update_o
+R16315 Mem.in_bounds_holds
+R16315 Mem.in_bounds_holds
+R16481 Coq.Init.Logic "x = y" type_scope
+R16443 Mem.load_contents
+R16470 Mem.Undef
+R16483 Values.Vundef
+R16437 Coq.ZArith.BinInt.Z
+R16418 Mem.memory_size
+R16727 Coq.Init.Logic "x = y" type_scope
+R16729 Values.Vundef
+R16711 Coq.Init.Logic "x = y" type_scope
+R16690 Mem.load
+R16713 Coq.Init.Datatypes.Some
+R16674 Coq.Init.Logic "x = y" type_scope
+R16659 Mem.alloc
+R16676 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R16651 Values.val
+R16644 Coq.ZArith.BinInt.Z
+R16644 Coq.ZArith.BinInt.Z
+R16644 Coq.ZArith.BinInt.Z
+R16625 Values.block
+R16625 Values.block
+R16604 Mem.mem
+R16604 Mem.mem
+R16582 AST.memory_chunk
+R16824 Mem.load_inv
+R16824 Mem.load_inv
+R16877 Mem.update_s
+R16877 Mem.update_s
+R16943 Mem.load_contents_init
+R16943 Mem.load_contents_init
+R17124 Coq.Init.Logic "x = y" type_scope
+R17109 Mem.low_bound
+R17129 Coqlib.zeq
+R17151 Mem.low_bound
+R17093 Coq.Init.Logic "x = y" type_scope
+R17078 Mem.alloc
+R17095 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R17072 Coq.ZArith.BinInt.Z
+R17072 Coq.ZArith.BinInt.Z
+R17057 Values.block
+R17057 Values.block
+R17045 Mem.mem
+R17045 Mem.mem
+R17306 Coqlib.zeq
+R17313 Mem.nextblock
+R17306 Coqlib.zeq
+R17313 Mem.nextblock
+R17471 Coq.Init.Logic "x = y" type_scope
+R17455 Mem.high_bound
+R17476 Coqlib.zeq
+R17498 Mem.high_bound
+R17439 Coq.Init.Logic "x = y" type_scope
+R17424 Mem.alloc
+R17441 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R17418 Coq.ZArith.BinInt.Z
+R17418 Coq.ZArith.BinInt.Z
+R17403 Values.block
+R17403 Values.block
+R17391 Mem.mem
+R17391 Mem.mem
+R17655 Coqlib.zeq
+R17662 Mem.nextblock
+R17655 Coqlib.zeq
+R17662 Mem.nextblock
+R17877 Coq.Init.Logic "'exists' x , p" type_scope
+R17912 Coq.Init.Logic "x = y" type_scope
+R17889 Mem.store
+R17914 Coq.Init.Datatypes.Some
+R17866 Coq.ZArith.BinInt "x <= y" Z_scope
+R17847 Coq.ZArith.BinInt "x + y" Z_scope
+R17849 Mem.size_chunk
+R17833 Coq.ZArith.BinInt "x <= y" Z_scope
+R17815 Coq.Init.Logic "x = y" type_scope
+R17800 Mem.alloc
+R17817 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R17792 Values.val
+R17785 Coq.ZArith.BinInt.Z
+R17785 Coq.ZArith.BinInt.Z
+R17785 Coq.ZArith.BinInt.Z
+R17766 Values.block
+R17757 Mem.mem
+R17757 Mem.mem
+R17735 AST.memory_chunk
+R17993 Coq.ZArith.BinInt "x < y" Z_scope
+R17999 Mem.nextblock
+R17993 Coq.ZArith.BinInt "x < y" Z_scope
+R17999 Mem.nextblock
+R18075 Coq.ZArith.BinInt "x <= y" Z_scope
+R18060 Mem.low_bound
+R18075 Coq.ZArith.BinInt "x <= y" Z_scope
+R18060 Mem.low_bound
+R18138 Mem.update_s
+R18138 Mem.update_s
+R18205 Coq.ZArith.BinInt "x <= y" Z_scope
+R18186 Coq.ZArith.BinInt "x + y" Z_scope
+R18188 Mem.size_chunk
+R18208 Mem.high_bound
+R18205 Coq.ZArith.BinInt "x <= y" Z_scope
+R18186 Coq.ZArith.BinInt "x + y" Z_scope
+R18188 Mem.size_chunk
+R18208 Mem.high_bound
+R18281 Mem.update_s
+R18281 Mem.update_s
+R18321 Mem.store_in_bounds
+R18321 Mem.store_in_bounds
+R18381 Mem.store_alloc
+R18393 Mem.high_bound_alloc
+R18410 Mem.low_bound_alloc
+R18426 Mem.load_alloc_same
+R18442 Mem.load_contents_init
+R18461 Mem.load_alloc_other
+R18642 Coq.Init.Logic "x = y" type_scope
+R18613 Mem.load
+R18625 Mem.free
+R18644 Mem.load
+R18602 Coq.Init.Logic "x <> y" type_scope
+R18594 Coq.ZArith.BinInt.Z
+R18581 Values.block
+R18581 Values.block
+R18569 Mem.mem
+R18551 AST.memory_chunk
+R18715 Coqlib.zlt
+R18722 Mem.nextblock
+R18715 Coqlib.zlt
+R18722 Mem.nextblock
+R18755 Mem.update_o
+R18755 Mem.update_o
+R18889 Coq.Init.Logic "x = y" type_scope
+R18865 Mem.low_bound
+R18876 Mem.free
+R18891 Mem.low_bound
+R18854 Coq.Init.Logic "x <> y" type_scope
+R18842 Values.block
+R18842 Values.block
+R18830 Mem.mem
+R18964 Mem.update_o
+R18964 Mem.update_o
+R19084 Coq.Init.Logic "x = y" type_scope
+R19059 Mem.high_bound
+R19071 Mem.free
+R19086 Mem.high_bound
+R19048 Coq.Init.Logic "x <> y" type_scope
+R19036 Values.block
+R19036 Values.block
+R19024 Mem.mem
+R19161 Mem.update_o
+R19161 Mem.update_o
+R19195 Mem.load_free
+R19205 Mem.low_bound_free
+R19220 Mem.high_bound_free
+R19391 Coq.Init.Logic "A /\ B" type_scope
+R19384 Coq.ZArith.BinInt "x <= y" Z_scope
+R19369 Mem.low_bound
+R19417 Coq.ZArith.BinInt "x <= y" Z_scope
+R19398 Coq.ZArith.BinInt "x + y" Z_scope
+R19400 Mem.size_chunk
+R19420 Mem.high_bound
+R19354 Coq.Init.Logic "x = y" type_scope
+R19331 Mem.store
+R19356 Coq.Init.Datatypes.Some
+R19466 Mem.store_inv
+R19466 Mem.store_inv
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R19710 Coq.Init.Logic "x = y" type_scope
+R19661 Mem.load_contents
+R19679 Mem.store_contents
+R19653 Values.val
+R19646 Coq.ZArith.BinInt.Z
+R19628 Mem.contentmap
+R19611 Mem.memory_size
+R19809 Mem.getN_setN_same
+R19809 Mem.getN_setN_same
+R19809 Mem.getN_setN_same
+R19809 Mem.getN_setN_same
+R19809 Mem.getN_setN_same
+R20005 Coq.Init.Logic "x = y" type_scope
+R19985 Mem.load
+R20007 Coq.Init.Datatypes.Some
+R20013 Values.load_result
+R19970 Coq.Init.Logic "x = y" type_scope
+R19947 Mem.store
+R19972 Coq.Init.Datatypes.Some
+R19939 Values.val
+R19932 Coq.ZArith.BinInt.Z
+R19919 Values.block
+R19910 Mem.mem
+R19910 Mem.mem
+R19888 AST.memory_chunk
+R20070 Mem.store_inv
+R20070 Mem.store_inv
+R20170 Coqlib.zlt_true
+R20170 Coqlib.zlt_true
+R20216 Mem.update_s
+R20216 Mem.update_s
+R20216 Mem.update_s
+R20244 Mem.in_bounds_exten
+R20244 Mem.in_bounds_exten
+R20269 Mem.in_bounds_holds
+R20269 Mem.in_bounds_holds
+R20302 Mem.load_store_contents_same
+R20302 Mem.load_store_contents_same
+R20586 Coq.Init.Logic "x = y" type_scope
+R20533 Mem.load_contents
+R20552 Mem.store_contents
+R20590 Mem.load_contents
+R20497 Coq.Init.Logic "A \/ B" type_scope
+R20489 Coq.ZArith.BinInt "x <= y" Z_scope
+R20474 Coq.ZArith.BinInt "x + y" Z_scope
+R20476 Mem.size_mem
+R20520 Coq.ZArith.BinInt "x <= y" Z_scope
+R20505 Coq.ZArith.BinInt "x + y" Z_scope
+R20507 Mem.size_mem
+R20461 Values.val
+R20454 Coq.ZArith.BinInt.Z
+R20454 Coq.ZArith.BinInt.Z
+R20420 Mem.contentmap
+R20403 Mem.memory_size
+R20403 Mem.memory_size
+R20732 Mem.getN_setN_other
+R20774 Coq.ZArith.BinInt.Z_of_nat
+R20732 Mem.getN_setN_other
+R20774 Coq.ZArith.BinInt.Z_of_nat
+R20732 Mem.getN_setN_other
+R20774 Coq.ZArith.BinInt.Z_of_nat
+R20732 Mem.getN_setN_other
+R20774 Coq.ZArith.BinInt.Z_of_nat
+R20732 Mem.getN_setN_other
+R20774 Coq.ZArith.BinInt.Z_of_nat
+R20732 Mem.getN_setN_other
+R20774 Coq.ZArith.BinInt.Z_of_nat
+R20732 Mem.getN_setN_other
+R20774 Coq.ZArith.BinInt.Z_of_nat
+R20732 Mem.getN_setN_other
+R20774 Coq.ZArith.BinInt.Z_of_nat
+R20732 Mem.getN_setN_other
+R20774 Coq.ZArith.BinInt.Z_of_nat
+R20732 Mem.getN_setN_other
+R20774 Coq.ZArith.BinInt.Z_of_nat
+R20732 Mem.getN_setN_other
+R20774 Coq.ZArith.BinInt.Z_of_nat
+R20732 Mem.getN_setN_other
+R20774 Coq.ZArith.BinInt.Z_of_nat
+R20732 Mem.getN_setN_other
+R20774 Coq.ZArith.BinInt.Z_of_nat
+R20732 Mem.getN_setN_other
+R20774 Coq.ZArith.BinInt.Z_of_nat
+R20732 Mem.getN_setN_other
+R20774 Coq.ZArith.BinInt.Z_of_nat
+R20732 Mem.getN_setN_other
+R20774 Coq.ZArith.BinInt.Z_of_nat
+R20732 Mem.getN_setN_other
+R20774 Coq.ZArith.BinInt.Z_of_nat
+R21082 Coq.Init.Logic "x = y" type_scope
+R21059 Mem.load
+R21084 Mem.load
+R20980 Coq.Init.Logic "A \/ B" type_scope
+R20972 Coq.Init.Logic "x <> y" type_scope
+R21018 Coq.Init.Logic "A \/ B" type_scope
+R21008 Coq.ZArith.BinInt "x <= y" Z_scope
+R20988 Coq.ZArith.BinInt "x + y" Z_scope
+R20990 Mem.size_chunk
+R21046 Coq.ZArith.BinInt "x <= y" Z_scope
+R21026 Coq.ZArith.BinInt "x + y" Z_scope
+R21028 Mem.size_chunk
+R20954 Coq.Init.Logic "x = y" type_scope
+R20928 Mem.store
+R20956 Coq.Init.Datatypes.Some
+R20920 Values.val
+R20913 Coq.ZArith.BinInt.Z
+R20913 Coq.ZArith.BinInt.Z
+R20894 Values.block
+R20894 Values.block
+R20872 Mem.mem
+R20872 Mem.mem
+R20850 AST.memory_chunk
+R20850 AST.memory_chunk
+R21139 Mem.store_inv
+R21139 Mem.store_inv
+R21236 Coqlib.zlt
+R21244 Mem.nextblock
+R21236 Coqlib.zlt
+R21244 Mem.nextblock
+R21301 Coqlib.zeq
+R21301 Coqlib.zeq
+R21347 Mem.in_bounds_exten
+R21347 Mem.in_bounds_exten
+R21375 Mem.load_store_contents_other
+R21375 Mem.load_store_contents_other
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R21697 Coq.Init.Logic "x = y" type_scope
+R21499 Mem.getN
+R21516 Mem.setN
+R21554 Mem.Undef
+R21575 Mem.Datum8
+R21599 Mem.Datum16
+R21624 Mem.Datum32
+R21649 Mem.Datum64
+R21674 Mem.Cont
+R21715 Mem.getN_setN_overlap
+R21902 Coq.ZArith.BinInt.Z_of_nat
+R21930 Coq.ZArith.BinInt.Z_of_nat
+R22228 Coq.Init.Logic "x = y" type_scope
+R22175 Mem.load_contents
+R22194 Mem.store_contents
+R22230 Values.Vundef
+R22163 Coq.ZArith.BinInt "x > y" Z_scope
+R22148 Coq.ZArith.BinInt "x + y" Z_scope
+R22150 Mem.size_mem
+R22133 Coq.ZArith.BinInt "x > y" Z_scope
+R22118 Coq.ZArith.BinInt "x + y" Z_scope
+R22120 Mem.size_mem
+R22100 Coq.Init.Logic "x <> y" type_scope
+R22087 Values.val
+R22080 Coq.ZArith.BinInt.Z
+R22080 Coq.ZArith.BinInt.Z
+R22046 Mem.contentmap
+R22029 Mem.memory_size
+R22029 Mem.memory_size
+R22371 Coq.Init.Logic "x <> y" type_scope
+R22620 Coq.Init.Logic "x = y" type_scope
+R22424 Mem.getN
+R22440 Mem.setN
+R22477 Mem.Undef
+R22498 Mem.Datum8
+R22522 Mem.Datum16
+R22547 Mem.Datum32
+R22572 Mem.Datum64
+R22597 Mem.Cont
+R22638 Mem.getN_setN_mismatch
+R22983 Coq.Init.Logic "x = y" type_scope
+R22932 Mem.load_contents
+R22951 Mem.store_contents
+R22985 Values.Vundef
+R22920 Coq.Init.Logic "x <> y" type_scope
+R22908 Values.val
+R22901 Coq.ZArith.BinInt.Z
+R22873 Mem.contentmap
+R22856 Mem.memory_size
+R22856 Mem.memory_size
+R23219 Coq.Init.Logic "x = y" type_scope
+R23203 Mem.low_bound
+R23221 Mem.low_bound
+R23188 Coq.Init.Logic "x = y" type_scope
+R23165 Mem.store
+R23190 Coq.Init.Datatypes.Some
+R23157 Values.val
+R23150 Coq.ZArith.BinInt.Z
+R23137 Values.block
+R23137 Values.block
+R23125 Mem.mem
+R23125 Mem.mem
+R23103 AST.memory_chunk
+R23269 Mem.store_inv
+R23269 Mem.store_inv
+R23386 Coqlib.zeq
+R23386 Coqlib.zeq
+R23610 Coq.Init.Logic "x = y" type_scope
+R23593 Mem.high_bound
+R23612 Mem.high_bound
+R23578 Coq.Init.Logic "x = y" type_scope
+R23555 Mem.store
+R23580 Coq.Init.Datatypes.Some
+R23547 Values.val
+R23540 Coq.ZArith.BinInt.Z
+R23527 Values.block
+R23527 Values.block
+R23515 Mem.mem
+R23515 Mem.mem
+R23493 AST.memory_chunk
+R23661 Mem.store_inv
+R23661 Mem.store_inv
+R23779 Coqlib.zeq
+R23779 Coqlib.zeq
+R23857 Mem.high_bound_store
+R23874 Mem.low_bound_store
+R23890 Mem.load_store_contents_mismatch
+R23919 Mem.load_store_contents_overlap
+R23947 Mem.load_store_other
+R23964 Mem.store_is_in_bounds
+R23985 Mem.load_store_contents_same
+R24011 Mem.load_store_same
+R24027 Mem.load_store_contents_other
+R24202 Coq.Init.Logic "x = y" type_scope
+R24180 Coq.ZArith.BinInt "x <= y < z" Z_scope
+R24169 Coq.ZArith.BinInt.Z
+R24139 Mem.contentmap
+R24139 Mem.contentmap
+R24128 Coq.ZArith.BinInt.Z
+R24128 Coq.ZArith.BinInt.Z
+R24285 Mem.contentmap_agree
+R24326 Mem.contents
+R24312 Mem.contents
+R24264 Mem.block_contents
+R24264 Mem.block_contents
+R24253 Coq.ZArith.BinInt.Z
+R24253 Coq.ZArith.BinInt.Z
+R24401 Mem.block_contents_agree
+R24454 Mem.blocks
+R24438 Mem.blocks
+R24391 Mem.mem
+R24391 Mem.mem
+R24380 Coq.ZArith.BinInt.Z
+R24380 Coq.ZArith.BinInt.Z
+R24365 Values.block
+R24536 Mem.block_agree
+R24530 Coq.ZArith.BinInt.Z
+R24530 Coq.ZArith.BinInt.Z
+R24515 Values.block
+R24506 Mem.mem
+R24698 Mem.block_agree
+R24667 Mem.block_agree
+R24661 Coq.ZArith.BinInt.Z
+R24661 Coq.ZArith.BinInt.Z
+R24646 Values.block
+R24637 Mem.mem
+R24637 Mem.mem
+R24925 Mem.block_agree
+R24894 Mem.block_agree
+R24863 Mem.block_agree
+R24857 Coq.ZArith.BinInt.Z
+R24857 Coq.ZArith.BinInt.Z
+R24842 Values.block
+R24833 Mem.mem
+R24833 Mem.mem
+R24833 Mem.mem
+R24999 Mem.contents
+R25009 Mem.blocks
+R24999 Mem.contents
+R25009 Mem.blocks
+R25257 Coq.Init.Logic "x = y" type_scope
+R25237 Mem.check_cont
+R25259 Mem.check_cont
+R25226 Coq.ZArith.BinInt "x <= y" Z_scope
+R25213 Coq.ZArith.BinInt "x + y" Z_scope
+R25215 Coq.ZArith.BinInt.Z_of_nat
+R25199 Coq.ZArith.BinInt "x <= y" Z_scope
+R25190 Coq.ZArith.BinInt.Z
+R25179 Coq.Init.Datatypes.nat
+R25134 Mem.contentmap_agree
+R25128 Coq.ZArith.BinInt.Z
+R25128 Coq.ZArith.BinInt.Z
+R25108 Mem.contentmap
+R25108 Mem.contentmap
+R25335 Coq.ZArith.Znat.inj_S
+R25335 Coq.ZArith.Znat.inj_S
+R25603 Coq.Init.Logic "x = y" type_scope
+R25589 Mem.getN
+R25605 Mem.getN
+R25579 Coq.ZArith.BinInt "x < y" Z_scope
+R25566 Coq.ZArith.BinInt "x + y" Z_scope
+R25568 Coq.ZArith.BinInt.Z_of_nat
+R25552 Coq.ZArith.BinInt "x <= y" Z_scope
+R25543 Coq.ZArith.BinInt.Z
+R25532 Coq.Init.Datatypes.nat
+R25487 Mem.contentmap_agree
+R25481 Coq.ZArith.BinInt.Z
+R25481 Coq.ZArith.BinInt.Z
+R25461 Mem.contentmap
+R25461 Mem.contentmap
+R25662 Mem.check_cont_agree
+R25700 Coq.ZArith.BinInt "x + y" Z_scope
+R25662 Mem.check_cont_agree
+R25700 Coq.ZArith.BinInt "x + y" Z_scope
+R25715 Mem.check_cont
+R25733 Coq.ZArith.BinInt "x + y" Z_scope
+R25715 Mem.check_cont
+R25733 Coq.ZArith.BinInt "x + y" Z_scope
+R25993 Coq.Init.Logic "x = y" type_scope
+R25969 Mem.load_contents
+R25995 Mem.load_contents
+R25958 Coq.ZArith.BinInt "x <= y" Z_scope
+R25944 Coq.ZArith.BinInt "x + y" Z_scope
+R25946 Mem.size_mem
+R25930 Coq.ZArith.BinInt "x <= y" Z_scope
+R25893 Mem.contentmap_agree
+R25887 Coq.ZArith.BinInt.Z
+R25887 Coq.ZArith.BinInt.Z
+R25887 Coq.ZArith.BinInt.Z
+R25863 Mem.contentmap
+R25863 Mem.contentmap
+R25842 Mem.memory_size
+R26126 Mem.getN_agree
+R26166 Coq.ZArith.BinInt.Z_of_nat
+R26126 Mem.getN_agree
+R26126 Mem.getN_agree
+R26126 Mem.getN_agree
+R26126 Mem.getN_agree
+R26166 Coq.ZArith.BinInt.Z_of_nat
+R26166 Coq.ZArith.BinInt.Z_of_nat
+R26166 Coq.ZArith.BinInt.Z_of_nat
+R26166 Coq.ZArith.BinInt.Z_of_nat
+R26306 Mem.contentmap_agree
+R26350 Mem.set_cont
+R26330 Mem.set_cont
+R26272 Mem.contentmap_agree
+R26266 Coq.ZArith.BinInt.Z
+R26248 Mem.contentmap
+R26248 Mem.contentmap
+R26235 Coq.Init.Datatypes.nat
+R26228 Coq.ZArith.BinInt.Z
+R26228 Coq.ZArith.BinInt.Z
+R26443 Coqlib.zeq
+R26443 Coqlib.zeq
+R26489 Mem.update_s
+R26489 Mem.update_s
+R26489 Mem.update_s
+R26489 Mem.update_s
+R26531 Mem.update_o
+R26531 Mem.update_o
+R26531 Mem.update_o
+R26531 Mem.update_o
+R26531 Mem.update_o
+R26531 Mem.update_o
+R26723 Mem.contentmap_agree
+R26765 Mem.setN
+R26747 Mem.setN
+R26689 Mem.contentmap_agree
+R26677 Mem.content
+R26670 Coq.ZArith.BinInt.Z
+R26652 Mem.contentmap
+R26652 Mem.contentmap
+R26639 Coq.Init.Datatypes.nat
+R26632 Coq.ZArith.BinInt.Z
+R26632 Coq.ZArith.BinInt.Z
+R26838 Coqlib.zeq
+R26838 Coqlib.zeq
+R26884 Mem.update_s
+R26884 Mem.update_s
+R26884 Mem.update_s
+R26884 Mem.update_s
+R26926 Mem.update_o
+R26926 Mem.update_o
+R26926 Mem.update_o
+R26926 Mem.update_o
+R26953 Mem.set_cont_agree
+R26987 Coq.ZArith.BinInt "x + y" Z_scope
+R26953 Mem.set_cont_agree
+R26987 Coq.ZArith.BinInt "x + y" Z_scope
+R27146 Mem.contentmap_agree
+R27206 Mem.store_contents
+R27177 Mem.store_contents
+R27112 Mem.contentmap_agree
+R27104 Values.val
+R27097 Coq.ZArith.BinInt.Z
+R27097 Coq.ZArith.BinInt.Z
+R27097 Coq.ZArith.BinInt.Z
+R27073 Mem.contentmap
+R27073 Mem.contentmap
+R27052 Mem.memory_size
+R27290 Mem.setN_agree
+R27290 Mem.setN_agree
+R27290 Mem.setN_agree
+R27290 Mem.setN_agree
+R27290 Mem.setN_agree
+R27480 Mem.contentmap_agree
+R27507 Mem.set_cont
+R27462 Coq.Init.Logic "A \/ B" type_scope
+R27456 Coq.ZArith.BinInt "x <= y" Z_scope
+R27443 Coq.ZArith.BinInt "x + y" Z_scope
+R27445 Coq.ZArith.BinInt.Z_of_nat
+R27468 Coq.ZArith.BinInt "x <= y" Z_scope
+R27405 Mem.contentmap_agree
+R27399 Coq.ZArith.BinInt.Z
+R27381 Mem.contentmap
+R27381 Mem.contentmap
+R27368 Coq.Init.Datatypes.nat
+R27361 Coq.ZArith.BinInt.Z
+R27361 Coq.ZArith.BinInt.Z
+R27599 Coq.ZArith.Znat.inj_S
+R27599 Coq.ZArith.Znat.inj_S
+R27635 Coqlib.zeq
+R27635 Coqlib.zeq
+R27898 Mem.contentmap_agree
+R27925 Mem.setN
+R27880 Coq.Init.Logic "A \/ B" type_scope
+R27875 Coq.ZArith.BinInt "x < y" Z_scope
+R27862 Coq.ZArith.BinInt "x + y" Z_scope
+R27864 Coq.ZArith.BinInt.Z_of_nat
+R27886 Coq.ZArith.BinInt "x <= y" Z_scope
+R27824 Mem.contentmap_agree
+R27812 Mem.content
+R27805 Coq.ZArith.BinInt.Z
+R27787 Mem.contentmap
+R27787 Mem.contentmap
+R27774 Coq.Init.Datatypes.nat
+R27767 Coq.ZArith.BinInt.Z
+R27767 Coq.ZArith.BinInt.Z
+R28013 Coqlib.zeq
+R28013 Coqlib.zeq
+R28063 Mem.set_cont_outside_agree
+R28105 Coq.ZArith.BinInt "x + y" Z_scope
+R28063 Mem.set_cont_outside_agree
+R28105 Coq.ZArith.BinInt "x + y" Z_scope
+R28323 Mem.contentmap_agree
+R28350 Mem.store_contents
+R28305 Coq.Init.Logic "A \/ B" type_scope
+R28299 Coq.ZArith.BinInt "x <= y" Z_scope
+R28285 Coq.ZArith.BinInt "x + y" Z_scope
+R28287 Mem.size_mem
+R28311 Coq.ZArith.BinInt "x <= y" Z_scope
+R28247 Mem.contentmap_agree
+R28239 Values.val
+R28232 Coq.ZArith.BinInt.Z
+R28232 Coq.ZArith.BinInt.Z
+R28232 Coq.ZArith.BinInt.Z
+R28208 Mem.contentmap
+R28208 Mem.contentmap
+R28187 Mem.memory_size
+R28461 Mem.setN_outside_agree
+R28493 Coq.ZArith.BinInt.Z_of_nat
+R28461 Mem.setN_outside_agree
+R28461 Mem.setN_outside_agree
+R28461 Mem.setN_outside_agree
+R28461 Mem.setN_outside_agree
+R28493 Coq.ZArith.BinInt.Z_of_nat
+R28493 Coq.ZArith.BinInt.Z_of_nat
+R28493 Coq.ZArith.BinInt.Z_of_nat
+R28493 Coq.ZArith.BinInt.Z_of_nat
+R28788 Coq.Init.Logic "x = y" type_scope
+R28770 Coq.Init.Logic "x = y" type_scope
+R28750 Mem.load
+R28772 Coq.Init.Datatypes.Some
+R28735 Coq.Init.Logic "x = y" type_scope
+R28715 Mem.load
+R28737 Coq.Init.Datatypes.Some
+R28704 Coq.ZArith.BinInt "x <= y" Z_scope
+R28685 Coq.ZArith.BinInt "x + y" Z_scope
+R28687 Mem.size_chunk
+R28671 Coq.ZArith.BinInt "x <= y" Z_scope
+R28637 Mem.block_agree
+R28629 Values.val
+R28629 Values.val
+R28618 Coq.ZArith.BinInt.Z
+R28609 Coq.ZArith.BinInt.Z
+R28609 Coq.ZArith.BinInt.Z
+R28594 Values.block
+R28575 Mem.mem
+R28575 Mem.mem
+R28553 AST.memory_chunk
+R28826 Mem.load_inv
+R28826 Mem.load_inv
+R28886 Mem.load_inv
+R28886 Mem.load_inv
+R28980 Mem.load_contentmap_agree
+R28980 Mem.load_contentmap_agree
+R29291 Mem.block_agree
+R29275 Coq.Init.Logic "x = y" type_scope
+R29251 Mem.store
+R29277 Coq.Init.Datatypes.Some
+R29235 Coq.Init.Logic "x = y" type_scope
+R29211 Mem.store
+R29237 Coq.Init.Datatypes.Some
+R29180 Mem.block_agree
+R29172 Values.val
+R29165 Coq.ZArith.BinInt.Z
+R29152 Values.block
+R29135 Coq.ZArith.BinInt.Z
+R29135 Coq.ZArith.BinInt.Z
+R29120 Values.block
+R29102 Mem.mem
+R29102 Mem.mem
+R29102 Mem.mem
+R29102 Mem.mem
+R29072 AST.memory_chunk
+R29351 Mem.store_inv
+R29351 Mem.store_inv
+R29424 Mem.store_inv
+R29424 Mem.store_inv
+R29543 Coqlib.zeq
+R29543 Coqlib.zeq
+R29586 Mem.store_contentmap_agree
+R29586 Mem.store_contentmap_agree
+R29919 Mem.block_agree
+R29903 Coq.Init.Logic "x = y" type_scope
+R29879 Mem.store
+R29905 Coq.Init.Datatypes.Some
+R29829 Coq.Init.Logic "A \/ B" type_scope
+R29823 Coq.Init.Logic "x <> y" type_scope
+R29861 Coq.Init.Logic "A \/ B" type_scope
+R29855 Coq.ZArith.BinInt "x <= y" Z_scope
+R29836 Coq.ZArith.BinInt "x + y" Z_scope
+R29838 Mem.size_chunk
+R29867 Coq.ZArith.BinInt "x <= y" Z_scope
+R29790 Mem.block_agree
+R29782 Values.val
+R29775 Coq.ZArith.BinInt.Z
+R29762 Values.block
+R29745 Coq.ZArith.BinInt.Z
+R29745 Coq.ZArith.BinInt.Z
+R29730 Values.block
+R29712 Mem.mem
+R29712 Mem.mem
+R29712 Mem.mem
+R29686 AST.memory_chunk
+R29978 Mem.store_inv
+R29978 Mem.store_inv
+R30083 Coqlib.zeq
+R30083 Coqlib.zeq
+R30127 Mem.store_contentmap_outside_agree
+R30127 Mem.store_contentmap_outside_agree
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R30334 Coq.Init.Logic "A /\ B" type_scope
+R30322 Coq.ZArith.BinInt "x <= y" Z_scope
+R30317 Mem.low
+R30329 Mem.low
+R30360 Coq.Init.Logic "A /\ B" type_scope
+R30347 Coq.ZArith.BinInt "x <= y" Z_scope
+R30341 Mem.high
+R30354 Mem.high
+R30365 Mem.contentmap_agree
+R30419 Mem.contents
+R30405 Mem.contents
+R30395 Mem.high
+R30386 Mem.low
+R30292 Mem.block_contents
+R30292 Mem.block_contents
+R30500 Coq.Init.Logic "A /\ B" type_scope
+R30483 Coq.Init.Logic "x = y" type_scope
+R30472 Mem.nextblock
+R30489 Mem.nextblock
+R30550 Mem.block_contents_extends
+R30594 Mem.blocks
+R30578 Mem.blocks
+R30528 Coq.ZArith.BinInt "x < y" Z_scope
+R30534 Mem.nextblock
+R30516 Values.block
+R30458 Mem.mem
+R30458 Mem.mem
+R30648 Mem.extends
+R30642 Mem.mem
+R31002 Coq.Init.Logic "A /\ B" type_scope
+R30997 Coq.Init.Logic "x = y" type_scope
+R31005 Mem.extends
+R30977 Coq.Init.Logic "x = y" type_scope
+R30960 Mem.alloc
+R30979 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R30943 Coq.Init.Logic "x = y" type_scope
+R30926 Mem.alloc
+R30945 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R30914 Coq.ZArith.BinInt "x <= y" Z_scope
+R30900 Coq.ZArith.BinInt "x <= y" Z_scope
+R30877 Mem.extends
+R30867 Values.block
+R30867 Values.block
+R30856 Coq.ZArith.BinInt.Z
+R30856 Coq.ZArith.BinInt.Z
+R30856 Coq.ZArith.BinInt.Z
+R30856 Coq.ZArith.BinInt.Z
+R30833 Mem.mem
+R30833 Mem.mem
+R30833 Mem.mem
+R30833 Mem.mem
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R31195 Coqlib.zeq
+R31202 Mem.nextblock
+R31195 Coqlib.zeq
+R31202 Mem.nextblock
+R31251 Mem.update_s
+R31251 Mem.update_s
+R31251 Mem.update_s
+R31251 Mem.update_s
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R31332 Mem.update_o
+R31332 Mem.update_o
+R31332 Mem.update_o
+R31332 Mem.update_o
+R31332 Mem.update_o
+R31332 Mem.update_o
+R31458 Mem.extends
+R31479 Mem.free
+R31467 Mem.free
+R31439 Mem.extends
+R31429 Values.block
+R31420 Mem.mem
+R31420 Mem.mem
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R31582 Coqlib.zeq
+R31582 Coqlib.zeq
+R31628 Mem.update_s
+R31628 Mem.update_s
+R31628 Mem.update_s
+R31628 Mem.update_s
+R31732 Mem.update_o
+R31732 Mem.update_o
+R31732 Mem.update_o
+R31732 Mem.update_o
+R31732 Mem.update_o
+R31732 Mem.update_o
+R31956 Coq.Init.Logic "x = y" type_scope
+R31936 Mem.load
+R31958 Coq.Init.Datatypes.Some
+R31922 Coq.Init.Logic "x = y" type_scope
+R31902 Mem.load
+R31924 Coq.Init.Datatypes.Some
+R31883 Mem.extends
+R31875 Values.val
+R31868 Coq.ZArith.BinInt.Z
+R31855 Values.block
+R31846 Mem.mem
+R31846 Mem.mem
+R31824 AST.memory_chunk
+R32023 Mem.load_inv
+R32023 Mem.load_inv
+R32110 Coqlib.zlt_true
+R32110 Coqlib.zlt_true
+R32176 Mem.in_bounds_holds
+R32176 Mem.in_bounds_holds
+R32272 Mem.low
+R32277 Mem.blocks
+R32303 Mem.high
+R32309 Mem.blocks
+R32234 Mem.load_contentmap_agree
+R32272 Mem.low
+R32277 Mem.blocks
+R32303 Mem.high
+R32309 Mem.blocks
+R32234 Mem.load_contentmap_agree
+R32522 Coq.Init.Logic "'exists' x , p" type_scope
+R32568 Coq.Init.Logic "A /\ B" type_scope
+R32557 Coq.Init.Logic "x = y" type_scope
+R32534 Mem.store
+R32559 Coq.Init.Datatypes.Some
+R32571 Mem.extends
+R32506 Coq.Init.Logic "x = y" type_scope
+R32483 Mem.store
+R32508 Coq.Init.Datatypes.Some
+R32464 Mem.extends
+R32456 Values.val
+R32449 Coq.ZArith.BinInt.Z
+R32436 Values.block
+R32427 Mem.mem
+R32427 Mem.mem
+R32427 Mem.mem
+R32401 AST.memory_chunk
+R32653 Mem.store_inv
+R32653 Mem.store_inv
+R32798 Coqlib.zlt_true
+R32798 Coqlib.zlt_true
+R32822 Mem.in_bounds
+R32840 Mem.blocks
+R32822 Mem.in_bounds
+R32840 Mem.blocks
+R32872 Mem.unchecked_store
+R32872 Mem.unchecked_store
+R33108 Coqlib.zeq
+R33108 Coqlib.zeq
+R33182 Mem.store_contentmap_agree
+R33182 Mem.store_contentmap_agree
+R33512 Mem.extends
+R33496 Coq.Init.Logic "x = y" type_scope
+R33473 Mem.store
+R33498 Coq.Init.Datatypes.Some
+R33442 Coq.Init.Logic "A \/ B" type_scope
+R33424 Coq.ZArith.BinInt "x <= y" Z_scope
+R33405 Coq.ZArith.BinInt "x + y" Z_scope
+R33407 Mem.size_chunk
+R33427 Mem.low_bound
+R33461 Coq.ZArith.BinInt "x <= y" Z_scope
+R33445 Mem.high_bound
+R33382 Mem.extends
+R33374 Values.val
+R33367 Coq.ZArith.BinInt.Z
+R33354 Values.block
+R33345 Mem.mem
+R33345 Mem.mem
+R33345 Mem.mem
+R33319 AST.memory_chunk
+R33600 Mem.store_inv
+R33600 Mem.store_inv
+R33740 Coqlib.zeq
+R33740 Coqlib.zeq
+R33860 Mem.store_contentmap_outside_agree
+R33860 Mem.store_contentmap_outside_agree
+R34146 Coq.Init.Logic "x = y" type_scope
+R34092 Mem.block_contents_agree
+R34126 Mem.high
+R34117 Mem.low
+R34075 Coq.Init.Logic "x = y" type_scope
+R34069 Mem.high
+R34081 Mem.high
+R34049 Coq.Init.Logic "x = y" type_scope
+R34044 Mem.low
+R34055 Mem.low
+R34021 Mem.block_contents
+R34021 Mem.block_contents
+R34310 Coq.Init.Logic "x = y" type_scope
+R34310 Coq.Init.Logic "x = y" type_scope
+R34347 Coqlib.extensionality
+R34347 Coqlib.extensionality
+R34380 Coqlib.zlt
+R34380 Coqlib.zlt
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R34459 Coqlib.zlt
+R34459 Coqlib.zlt
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R34576 Coq.Init.Logic "x = y" type_scope
+R34576 Coq.Init.Logic "x = y" type_scope
+R34594 Coqlib.proof_irrelevance
+R34594 Coqlib.proof_irrelevance
+R34769 Coq.Init.Logic "x = y" type_scope
+R34744 Coq.Init.Logic "x = y" type_scope
+R34734 Mem.blocks
+R34750 Mem.blocks
+R34697 Coq.Init.Logic "x = y" type_scope
+R34686 Mem.nextblock
+R34703 Mem.nextblock
+R34905 Coq.Init.Logic "x = y" type_scope
+R34905 Coq.Init.Logic "x = y" type_scope
+R34920 Coqlib.extensionality
+R34920 Coqlib.extensionality
+R34967 Coq.Init.Logic "x = y" type_scope
+R34967 Coq.Init.Logic "x = y" type_scope
+R34986 Coqlib.proof_irrelevance
+R34986 Coqlib.proof_irrelevance
+R35102 Coq.Init.Datatypes.option
+R35116 Coq.Init.Datatypes "x * y" type_scope
+R35110 Values.block
+R35118 Coq.ZArith.BinInt.Z
+R35093 Values.block
+R35141 Mem.meminj
+R35179 Values.val
+R35172 Values.val
+R35251 Values.Vint
+R35242 Values.Vint
+R35320 Values.Vfloat
+R35309 Values.Vfloat
+R35486 Values.Vptr
+R35471 Values.Vptr
+R35422 Coq.Init.Logic "x = y" type_scope
+R35424 Integers.add
+R35438 Integers.repr
+R35393 Coq.Init.Logic "x = y" type_scope
+R35395 Coq.Init.Datatypes.Some
+R35400 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R35549 Values.Vundef
+R35573 Mem.val_inject_int
+R35588 Mem.val_inject_float
+R35605 Mem.val_inject_ptr
+R35621 Mem.val_inject_undef
+R35679 Coq.Lists.List.list
+R35684 Values.val
+R35667 Coq.Lists.List.list
+R35672 Values.val
+R35745 Coq.Lists.List.nil
+R35741 Coq.Lists.List.nil
+R35876 Coq.Lists.List "x :: y" list_scope
+R35867 Coq.Lists.List "x :: y" list_scope
+R35799 Mem.val_inject
+R35940 Values.val
+R35933 Values.val
+R35918 Mem.memory_size
+R36013 Mem.val_inject
+R36208 Values.Vint
+R36198 Values.Vint
+R36191 Mem.Size8
+R36140 Coq.Init.Logic "x = y" type_scope
+R36119 Integers.cast8unsigned
+R36142 Integers.cast8unsigned
+R36362 Values.Vint
+R36352 Values.Vint
+R36344 Mem.Size16
+R36292 Coq.Init.Logic "x = y" type_scope
+R36270 Integers.cast16unsigned
+R36294 Integers.cast16unsigned
+R36520 Values.Vfloat
+R36508 Values.Vfloat
+R36500 Mem.Size32
+R36447 Coq.Init.Logic "x = y" type_scope
+R36424 Floats.singleoffloat
+R36449 Floats.singleoffloat
+R36546 Mem.val_content_inject_base
+R36609 Mem.content
+R36598 Mem.content
+R36692 Mem.Undef
+R36821 Mem.Datum8
+R36809 Mem.Datum8
+R36753 Mem.val_content_inject
+R36772 Mem.Size8
+R36956 Mem.Datum16
+R36943 Mem.Datum16
+R36886 Mem.val_content_inject
+R36905 Mem.Size16
+R37092 Mem.Datum32
+R37079 Mem.Datum32
+R37022 Mem.val_content_inject
+R37041 Mem.Size32
+R37228 Mem.Datum64
+R37215 Mem.Datum64
+R37158 Mem.val_content_inject
+R37177 Mem.Size64
+R37291 Mem.Cont
+R37286 Mem.Cont
+R37311 Mem.content_inject_undef
+R37332 Mem.content_inject_datum8
+R37355 Mem.content_inject_datum16
+R37378 Mem.content_inject_datum32
+R37401 Mem.content_inject_datum64
+R37424 Mem.content_inject_cont
+R37554 Mem.content_inject
+R37583 Coq.ZArith.BinInt "x + y" Z_scope
+R37537 Coq.ZArith.BinInt "x <= y < z" Z_scope
+R37509 Coq.ZArith.BinInt.Z
+R37509 Coq.ZArith.BinInt.Z
+R37509 Coq.ZArith.BinInt.Z
+R37483 Mem.contentmap
+R37483 Mem.contentmap
+R37632 Mem.block_contents
+R37656 Coq.ZArith.BinInt.Z
+R37729 Coq.ZArith.BinInt "x <= y <= z" Z_scope
+R37714 Integers.min_signed
+R37741 Integers.max_signed
+R37783 Coq.Init.Logic "A \/ B" type_scope
+R37779 Coq.Init.Logic "x = y" type_scope
+R37830 Coq.Init.Logic "A /\ B" type_scope
+R37818 Coq.ZArith.BinInt "x <= y" Z_scope
+R37803 Integers.min_signed
+R37825 Mem.low
+R37843 Coq.ZArith.BinInt "x <= y" Z_scope
+R37837 Mem.high
+R37846 Integers.max_signed
+R37950 Coq.ZArith.BinInt "x <= y < z" Z_scope
+R37946 Mem.low
+R37953 Coq.ZArith.BinInt "x + y" Z_scope
+R37953 Coq.ZArith.BinInt "x + y" Z_scope
+R37966 Mem.high
+R37897 Coq.ZArith.BinInt "x <= y < z" Z_scope
+R37893 Mem.low
+R37908 Mem.high
+R37999 Mem.contentmap_inject
+R38058 Mem.high
+R38049 Mem.low
+R38035 Mem.contents
+R38021 Mem.contents
+R38102 Mem.mem
+R38197 Coq.Init.Logic "x = y" type_scope
+R38199 Coq.Init.Datatypes.None
+R38172 Coq.ZArith.BinInt "x >= y" Z_scope
+R38179 Mem.nextblock
+R38308 Coq.Init.Logic "A /\ B" type_scope
+R38291 Coq.ZArith.BinInt "x < y" Z_scope
+R38297 Mem.nextblock
+R38317 Mem.block_contents_inject
+R38389 Mem.blocks
+R38344 Mem.blocks
+R38261 Coq.Init.Logic "x = y" type_scope
+R38263 Coq.Init.Datatypes.Some
+R38267 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R38610 Coq.Init.Logic "A \/ B" type_scope
+R38596 Coq.Init.Logic "x <> y" type_scope
+R38786 Coq.Init.Logic "x <> y" type_scope
+R38778 Coq.ZArith.BinInt "x + y" Z_scope
+R38791 Coq.ZArith.BinInt "x + y" Z_scope
+R38718 Coq.ZArith.BinInt "x <= y < z" Z_scope
+R38702 Mem.low_bound
+R38726 Mem.high_bound
+R38644 Coq.ZArith.BinInt "x <= y < z" Z_scope
+R38628 Mem.low_bound
+R38652 Mem.high_bound
+R38562 Coq.Init.Logic "x = y" type_scope
+R38564 Coq.Init.Datatypes.Some
+R38569 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R38527 Coq.Init.Logic "x = y" type_scope
+R38529 Coq.Init.Datatypes.Some
+R38534 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R38507 Coq.Init.Logic "x <> y" type_scope
+R38899 Coq.ZArith.BinInt "x > y" Z_scope
+R38887 Mem.size_mem
+R38997 Coq.ZArith.BinInt "x > y" Z_scope
+R38980 Mem.size_chunk
+R39042 Mem.size_mem_pos
+R39042 Mem.size_mem_pos
+R39341 Coq.Init.Logic "x = y" type_scope
+R39325 Integers.signed
+R39359 Coq.ZArith.BinInt "x + y" Z_scope
+R39343 Integers.signed
+R39292 Coq.Init.Logic "x = y" type_scope
+R39294 Integers.add
+R39308 Integers.repr
+R39267 Coq.Init.Logic "x = y" type_scope
+R39269 Coq.Init.Datatypes.Some
+R39274 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R39230 Coq.ZArith.BinInt "x <= y" Z_scope
+R39211 Coq.ZArith.BinInt "x + y" Z_scope
+R39195 Integers.signed
+R39213 Mem.size_chunk
+R39251 Mem.high
+R39238 Mem.blocks
+R39171 Coq.ZArith.BinInt "x <= y" Z_scope
+R39166 Mem.low
+R39153 Mem.blocks
+R39174 Integers.signed
+R39126 Mem.mem_inject
+R39396 Mem.size_chunk_pos
+R39396 Mem.size_chunk_pos
+R39440 Mem.mi_mappedblocks
+R39440 Mem.mi_mappedblocks
+R39567 Coq.ZArith.BinInt.Zplus_0_r
+R39567 Coq.ZArith.BinInt.Zplus_0_r
+R39587 Integers.add_zero
+R39587 Integers.add_zero
+R39666 Integers.add_signed
+R39666 Integers.add_signed
+R39697 Integers.signed_repr
+R39697 Integers.signed_repr
+R39697 Integers.signed_repr
+R39697 Integers.signed_repr
+R39697 Integers.signed_repr
+R39697 Integers.signed_repr
+R39697 Integers.signed_repr
+R39697 Integers.signed_repr
+R39758 Coq.ZArith.BinInt "x <= y < z" Z_scope
+R39739 Mem.low
+R39744 Mem.blocks
+R39761 Integers.signed
+R39761 Integers.signed
+R39779 Mem.high
+R39785 Mem.blocks
+R39758 Coq.ZArith.BinInt "x <= y < z" Z_scope
+R39739 Mem.low
+R39744 Mem.blocks
+R39761 Integers.signed
+R39761 Integers.signed
+R39779 Mem.high
+R39785 Mem.blocks
+R39838 Integers.signed
+R39838 Integers.signed
+R40058 Coq.ZArith.BinInt "x <= y <= z" Z_scope
+R40043 Integers.min_signed
+R40076 Coq.ZArith.BinInt "x + y" Z_scope
+R40061 Integers.signed
+R40078 Integers.signed
+R40090 Integers.repr
+R40076 Coq.ZArith.BinInt "x + y" Z_scope
+R40061 Integers.signed
+R40078 Integers.signed
+R40090 Integers.repr
+R40105 Integers.max_signed
+R40024 Coq.Init.Logic "x = y" type_scope
+R40026 Coq.Init.Datatypes.Some
+R40030 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R40008 Coq.Init.Logic "x = y" type_scope
+R39972 Mem.valid_pointer
+R39992 Integers.signed
+R40010 Coq.Init.Datatypes.true
+R39950 Mem.mem_inject
+R40178 Coqlib.zlt
+R40185 Mem.nextblock
+R40178 Coqlib.zlt
+R40185 Mem.nextblock
+R40231 Coqlib.zle
+R40256 Integers.signed
+R40236 Mem.low
+R40241 Mem.blocks
+R40231 Coqlib.zle
+R40256 Integers.signed
+R40236 Mem.low
+R40241 Mem.blocks
+R40304 Coqlib.zlt
+R40326 Mem.high
+R40332 Mem.blocks
+R40309 Integers.signed
+R40304 Coqlib.zlt
+R40326 Mem.high
+R40332 Mem.blocks
+R40309 Integers.signed
+R40502 Integers.signed_repr
+R40502 Integers.signed_repr
+R40549 Coq.ZArith.BinInt.Zplus_0_r
+R40549 Coq.ZArith.BinInt.Zplus_0_r
+R40567 Integers.signed_range
+R40567 Integers.signed_range
+R40630 Coq.Init.Logic.conj
+R40630 Coq.Init.Logic.conj
+R40661 Integers.signed_repr
+R40661 Integers.signed_repr
+R40929 Coq.Init.Logic "x = y" type_scope
+R40901 Mem.check_cont
+R40917 Coq.ZArith.BinInt "x + y" Z_scope
+R40931 Coq.Init.Datatypes.true
+R40889 Coq.Init.Logic "x = y" type_scope
+R40871 Mem.check_cont
+R40891 Coq.Init.Datatypes.true
+R40860 Coq.ZArith.BinInt "x <= y" Z_scope
+R40847 Coq.ZArith.BinInt "x + y" Z_scope
+R40849 Coq.ZArith.BinInt.Z_of_nat
+R40837 Coq.ZArith.BinInt "x <= y" Z_scope
+R40779 Mem.contentmap_inject
+R40997 Mem.check_cont
+R40997 Mem.check_cont
+R41017 Coq.ZArith.Znat.inj_S
+R41017 Coq.ZArith.Znat.inj_S
+R41053 Coq.ZArith.BinInt "x <= y < z" Z_scope
+R41053 Coq.ZArith.BinInt "x <= y < z" Z_scope
+R41165 Coq.ZArith.BinInt "x + y" Z_scope
+R41157 Coq.ZArith.BinInt "x + y" Z_scope
+R41182 Coq.ZArith.BinInt "x + y" Z_scope
+R41179 Coq.ZArith.BinInt "x + y" Z_scope
+R41165 Coq.ZArith.BinInt "x + y" Z_scope
+R41157 Coq.ZArith.BinInt "x + y" Z_scope
+R41182 Coq.ZArith.BinInt "x + y" Z_scope
+R41179 Coq.ZArith.BinInt "x + y" Z_scope
+R41257 Mem.check_cont_inject
+R41417 Mem.content_inject
+R41447 Mem.getN
+R41457 Coq.ZArith.BinInt "x + y" Z_scope
+R41433 Mem.getN
+R41407 Coq.ZArith.BinInt "x < y" Z_scope
+R41394 Coq.ZArith.BinInt "x + y" Z_scope
+R41396 Coq.ZArith.BinInt.Z_of_nat
+R41384 Coq.ZArith.BinInt "x <= y" Z_scope
+R41326 Mem.contentmap_inject
+R41514 Coq.ZArith.BinInt "x <= y < z" Z_scope
+R41514 Coq.ZArith.BinInt "x <= y < z" Z_scope
+R41558 Mem.check_cont
+R41574 Coq.ZArith.BinInt "x + y" Z_scope
+R41558 Mem.check_cont
+R41574 Coq.ZArith.BinInt "x + y" Z_scope
+R41602 Mem.check_cont
+R41626 Coq.ZArith.BinInt "x + y" Z_scope
+R41618 Coq.ZArith.BinInt "x + y" Z_scope
+R41640 Coq.Init.Datatypes.true
+R41602 Mem.check_cont
+R41626 Coq.ZArith.BinInt "x + y" Z_scope
+R41618 Coq.ZArith.BinInt "x + y" Z_scope
+R41640 Coq.Init.Datatypes.true
+R41701 Coq.ZArith.BinInt "x + y" Z_scope
+R41693 Coq.ZArith.BinInt "x + y" Z_scope
+R41718 Coq.ZArith.BinInt "x + y" Z_scope
+R41715 Coq.ZArith.BinInt "x + y" Z_scope
+R41701 Coq.ZArith.BinInt "x + y" Z_scope
+R41693 Coq.ZArith.BinInt "x + y" Z_scope
+R41718 Coq.ZArith.BinInt "x + y" Z_scope
+R41715 Coq.ZArith.BinInt "x + y" Z_scope
+R41739 Mem.check_cont_inject
+R41739 Mem.check_cont_inject
+R41823 Mem.getN_inject
+R41862 Coq.Init.Datatypes.nat
+R41883 Coq.ZArith.BinInt.Z0
+R41889 Coq.Init.Datatypes.O
+R41893 Coq.ZArith.BinInt.Zpos
+R41905 Coq.NArith.BinPos.nat_of_P
+R41919 Coq.ZArith.BinInt.Zneg
+R41928 Coq.Init.Datatypes.O
+R41858 Coq.ZArith.BinInt.Z
+R42079 Mem.val_content_inject
+R42126 Mem.load_contents
+R42149 Coq.ZArith.BinInt "x + y" Z_scope
+R42102 Mem.load_contents
+R42068 Coq.ZArith.BinInt "x <= y" Z_scope
+R42054 Coq.ZArith.BinInt "x + y" Z_scope
+R42056 Mem.size_mem
+R42044 Coq.ZArith.BinInt "x <= y" Z_scope
+R42000 Mem.contentmap_inject
+R42183 Mem.content_inject
+R42237 Mem.getN
+R42269 Coq.ZArith.BinInt "x + y" Z_scope
+R42262 Coq.Init.Peano "x - y" nat_scope
+R42243 Mem.ztonat
+R42250 Mem.size_mem
+R42199 Mem.getN
+R42225 Coq.Init.Peano "x - y" nat_scope
+R42205 Mem.ztonat
+R42213 Mem.size_mem
+R42183 Mem.content_inject
+R42237 Mem.getN
+R42269 Coq.ZArith.BinInt "x + y" Z_scope
+R42262 Coq.Init.Peano "x - y" nat_scope
+R42243 Mem.ztonat
+R42250 Mem.size_mem
+R42199 Mem.getN
+R42225 Coq.Init.Peano "x - y" nat_scope
+R42205 Mem.ztonat
+R42213 Mem.size_mem
+R42308 Coq.ZArith.BinInt "x <= y < z" Z_scope
+R42349 Mem.getN_inject
+R42308 Coq.ZArith.BinInt "x <= y < z" Z_scope
+R42308 Coq.ZArith.BinInt "x <= y < z" Z_scope
+R42308 Coq.ZArith.BinInt "x <= y < z" Z_scope
+R42308 Coq.ZArith.BinInt "x <= y < z" Z_scope
+R42349 Mem.getN_inject
+R42349 Mem.getN_inject
+R42349 Mem.getN_inject
+R42349 Mem.getN_inject
+R42470 Mem.load_contents_inject
+R42591 Mem.val_inject
+R42630 Values.load_result
+R42603 Values.load_result
+R42543 Mem.val_content_inject
+R42563 Mem.mem_chunk
+R42774 Integers.cast8signed
+R42800 Integers.cast8signed
+R42774 Integers.cast8signed
+R42800 Integers.cast8signed
+R42841 Integers.cast8_signed_equal_if_unsigned_equal
+R42841 Integers.cast8_signed_equal_if_unsigned_equal
+R42923 Integers.cast16signed
+R42950 Integers.cast16signed
+R42923 Integers.cast16signed
+R42950 Integers.cast16signed
+R42992 Integers.cast16_signed_equal_if_unsigned_equal
+R42992 Integers.cast16_signed_equal_if_unsigned_equal
+R43100 Mem.val_inject_ptr
+R43100 Mem.val_inject_ptr
+R43308 Coq.Init.Logic "A /\ B" type_scope
+R43295 Coq.ZArith.BinInt "x <= y" Z_scope
+R43290 Mem.low
+R43300 Coq.ZArith.BinInt "x + y" Z_scope
+R43342 Coq.ZArith.BinInt "x <= y" Z_scope
+R43321 Coq.ZArith.BinInt "x + y" Z_scope
+R43314 Coq.ZArith.BinInt "x + y" Z_scope
+R43325 Mem.size_chunk
+R43349 Mem.high
+R43244 Coq.Init.Logic "A /\ B" type_scope
+R43239 Coq.ZArith.BinInt "x <= y" Z_scope
+R43234 Mem.low
+R43268 Coq.ZArith.BinInt "x <= y" Z_scope
+R43249 Coq.ZArith.BinInt "x + y" Z_scope
+R43251 Mem.size_chunk
+R43275 Mem.high
+R43191 Mem.block_contents_inject
+R43403 Mem.size_chunk_pos
+R43403 Mem.size_chunk_pos
+R43450 Coq.ZArith.BinInt "x <= y < z" Z_scope
+R43443 Mem.low
+R43474 Coq.ZArith.BinInt "x - y" Z_scope
+R43455 Coq.ZArith.BinInt "x + y" Z_scope
+R43457 Mem.size_chunk
+R43474 Coq.ZArith.BinInt "x - y" Z_scope
+R43455 Coq.ZArith.BinInt "x + y" Z_scope
+R43457 Mem.size_chunk
+R43480 Mem.high
+R43450 Coq.ZArith.BinInt "x <= y < z" Z_scope
+R43443 Mem.low
+R43474 Coq.ZArith.BinInt "x - y" Z_scope
+R43455 Coq.ZArith.BinInt "x + y" Z_scope
+R43457 Mem.size_chunk
+R43474 Coq.ZArith.BinInt "x - y" Z_scope
+R43455 Coq.ZArith.BinInt "x + y" Z_scope
+R43457 Mem.size_chunk
+R43480 Mem.high
+R43557 Coq.ZArith.BinInt "x <= y < z" Z_scope
+R43550 Mem.low
+R43564 Mem.high
+R43557 Coq.ZArith.BinInt "x <= y < z" Z_scope
+R43550 Mem.low
+R43564 Mem.high
+R43775 Mem.val_content_inject
+R43838 Mem.load_contents
+R43872 Coq.ZArith.BinInt "x + y" Z_scope
+R43859 Mem.contents
+R43798 Mem.load_contents
+R43819 Mem.contents
+R43757 Coq.ZArith.BinInt "x <= y" Z_scope
+R43743 Coq.ZArith.BinInt "x + y" Z_scope
+R43745 Mem.size_mem
+R43764 Mem.high
+R43733 Coq.ZArith.BinInt "x <= y" Z_scope
+R43728 Mem.low
+R43687 Mem.block_contents_inject
+R43948 Mem.low
+R43957 Mem.high
+R43918 Mem.load_contents_inject
+R43948 Mem.low
+R43957 Mem.high
+R43918 Mem.load_contents_inject
+R44132 Coq.Init.Logic "'exists' x , p" type_scope
+R44184 Coq.Init.Logic "A /\ B" type_scope
+R44174 Coq.Init.Logic "x = y" type_scope
+R44143 Mem.load
+R44165 Coq.ZArith.BinInt "x + y" Z_scope
+R44176 Coq.Init.Datatypes.Some
+R44187 Mem.val_inject
+R44108 Coq.Init.Logic "x = y" type_scope
+R44110 Coq.Init.Datatypes.Some
+R44115 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R44088 Coq.Init.Logic "x = y" type_scope
+R44067 Mem.load
+R44090 Coq.Init.Datatypes.Some
+R44045 Mem.mem_inject
+R44236 Mem.load_inv
+R44236 Mem.load_inv
+R44379 Values.load_result
+R44402 Mem.load_contents
+R44477 Coq.ZArith.BinInt "x + y" Z_scope
+R44463 Mem.contents
+R44450 Mem.blocks
+R44417 Mem.mem_chunk
+R44379 Values.load_result
+R44402 Mem.load_contents
+R44477 Coq.ZArith.BinInt "x + y" Z_scope
+R44463 Mem.contents
+R44450 Mem.blocks
+R44417 Mem.mem_chunk
+R44528 Mem.size_chunk_pos
+R44528 Mem.size_chunk_pos
+R44569 Coqlib.zlt_true
+R44569 Coqlib.zlt_true
+R44587 Mem.in_bounds_holds
+R44587 Mem.in_bounds_holds
+R44639 Coq.ZArith.BinInt "x <= y < z" Z_scope
+R44620 Mem.low
+R44625 Mem.blocks
+R44648 Mem.high
+R44654 Mem.blocks
+R44639 Coq.ZArith.BinInt "x <= y < z" Z_scope
+R44620 Mem.low
+R44625 Mem.blocks
+R44648 Mem.high
+R44654 Mem.blocks
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R44751 Coq.ZArith.BinInt "x <= y < z" Z_scope
+R44732 Mem.low
+R44737 Mem.blocks
+R44777 Coq.ZArith.BinInt "x - y" Z_scope
+R44758 Coq.ZArith.BinInt "x + y" Z_scope
+R44760 Mem.size_chunk
+R44777 Coq.ZArith.BinInt "x - y" Z_scope
+R44758 Coq.ZArith.BinInt "x + y" Z_scope
+R44760 Mem.size_chunk
+R44783 Mem.high
+R44788 Mem.blocks
+R44751 Coq.ZArith.BinInt "x <= y < z" Z_scope
+R44732 Mem.low
+R44737 Mem.blocks
+R44777 Coq.ZArith.BinInt "x - y" Z_scope
+R44758 Coq.ZArith.BinInt "x + y" Z_scope
+R44760 Mem.size_chunk
+R44777 Coq.ZArith.BinInt "x - y" Z_scope
+R44758 Coq.ZArith.BinInt "x + y" Z_scope
+R44760 Mem.size_chunk
+R44783 Mem.high
+R44788 Mem.blocks
+R44892 Mem.load_result_inject
+R44892 Mem.load_result_inject
+R44922 Mem.load_contents_inject
+R44922 Mem.load_contents_inject
+R45087 Coq.Init.Logic "'exists' x , p" type_scope
+R45126 Coq.Init.Logic "A /\ B" type_scope
+R45116 Coq.Init.Logic "x = y" type_scope
+R45098 Mem.loadv
+R45118 Coq.Init.Datatypes.Some
+R45129 Mem.val_inject
+R45065 Mem.val_inject
+R45050 Coq.Init.Logic "x = y" type_scope
+R45032 Mem.loadv
+R45052 Coq.Init.Datatypes.Some
+R45010 Mem.mem_inject
+R45237 Integers.signed
+R45276 Coq.ZArith.BinInt "x + y" Z_scope
+R45260 Integers.signed
+R45237 Integers.signed
+R45276 Coq.ZArith.BinInt "x + y" Z_scope
+R45260 Integers.signed
+R45290 Mem.load_inject
+R45290 Mem.load_inject
+R45351 Mem.load_inv
+R45351 Mem.load_inv
+R45405 Mem.address_inject
+R45405 Mem.address_inject
+R45629 Mem.contentmap_inject
+R45666 Mem.set_cont
+R45680 Coq.ZArith.BinInt "x + y" Z_scope
+R45648 Mem.set_cont
+R45618 Coq.ZArith.BinInt "x <= y" Z_scope
+R45605 Coq.ZArith.BinInt "x + y" Z_scope
+R45607 Coq.ZArith.BinInt.Z_of_nat
+R45595 Coq.ZArith.BinInt "x <= y" Z_scope
+R45537 Mem.contentmap_inject
+R45830 Coqlib.zeq
+R45830 Coqlib.zeq
+R45866 Coqlib.zeq_true
+R45866 Coqlib.zeq_true
+R45897 Coqlib.zeq_false
+R45897 Coqlib.zeq_false
+R45927 Coq.ZArith.BinInt "x + y" Z_scope
+R45919 Coq.ZArith.BinInt "x + y" Z_scope
+R45944 Coq.ZArith.BinInt "x + y" Z_scope
+R45941 Coq.ZArith.BinInt "x + y" Z_scope
+R45927 Coq.ZArith.BinInt "x + y" Z_scope
+R45919 Coq.ZArith.BinInt "x + y" Z_scope
+R45944 Coq.ZArith.BinInt "x + y" Z_scope
+R45941 Coq.ZArith.BinInt "x + y" Z_scope
+R45982 Coq.ZArith.Znat.inj_S
+R45982 Coq.ZArith.Znat.inj_S
+R46196 Mem.contentmap_inject
+R46232 Mem.setN
+R46242 Coq.ZArith.BinInt "x + y" Z_scope
+R46215 Mem.setN
+R46186 Coq.ZArith.BinInt "x < y" Z_scope
+R46173 Coq.ZArith.BinInt "x + y" Z_scope
+R46175 Coq.ZArith.BinInt.Z_of_nat
+R46163 Coq.ZArith.BinInt "x <= y" Z_scope
+R46134 Mem.content_inject
+R46093 Mem.contentmap_inject
+R46360 Coqlib.zeq
+R46360 Coqlib.zeq
+R46397 Coqlib.zeq_true
+R46397 Coqlib.zeq_true
+R46429 Coqlib.zeq_false
+R46429 Coqlib.zeq_false
+R46462 Coq.ZArith.BinInt "x + y" Z_scope
+R46454 Coq.ZArith.BinInt "x + y" Z_scope
+R46479 Coq.ZArith.BinInt "x + y" Z_scope
+R46476 Coq.ZArith.BinInt "x + y" Z_scope
+R46462 Coq.ZArith.BinInt "x + y" Z_scope
+R46454 Coq.ZArith.BinInt "x + y" Z_scope
+R46479 Coq.ZArith.BinInt "x + y" Z_scope
+R46476 Coq.ZArith.BinInt "x + y" Z_scope
+R46499 Mem.set_cont_inject
+R46499 Mem.set_cont_inject
+R46772 Mem.contentmap_inject
+R46840 Mem.store_contents
+R46864 Coq.ZArith.BinInt "x + y" Z_scope
+R46791 Mem.store_contents
+R46761 Coq.ZArith.BinInt "x <= y" Z_scope
+R46747 Coq.ZArith.BinInt "x + y" Z_scope
+R46749 Mem.size_mem
+R46737 Coq.ZArith.BinInt "x <= y" Z_scope
+R46701 Mem.val_content_inject
+R46660 Mem.contentmap_inject
+R46960 Mem.setN_inject
+R46960 Mem.setN_inject
+R46960 Mem.setN_inject
+R46960 Mem.setN_inject
+R46960 Mem.setN_inject
+R47118 Coq.Init.Logic "x = y" type_scope
+R47100 Mem.set_cont
+R47088 Coq.Init.Logic "x <> y" type_scope
+R47061 Coq.ZArith.BinInt "x <= y < z" Z_scope
+R47070 Coq.ZArith.BinInt "x + y" Z_scope
+R47072 Coq.ZArith.BinInt.Z_of_nat
+R47180 Coq.ZArith.Znat.inj_S
+R47180 Coq.ZArith.Znat.inj_S
+R47200 Mem.update_o
+R47200 Mem.update_o
+R47507 Mem.contentmap_inject
+R47529 Mem.set_cont
+R47487 Coq.Init.Logic "x <> y" type_scope
+R47493 Coq.ZArith.BinInt "x + y" Z_scope
+R47452 Coq.ZArith.BinInt "x <= y < z" Z_scope
+R47406 Coq.ZArith.BinInt "x <= y < z" Z_scope
+R47416 Coq.ZArith.BinInt "x + y" Z_scope
+R47418 Coq.ZArith.BinInt.Z_of_nat
+R47334 Mem.contentmap_inject
+R47614 Mem.set_cont_outside1
+R47614 Mem.set_cont_outside1
+R47919 Mem.contentmap_inject
+R47941 Mem.setN
+R47899 Coq.Init.Logic "x <> y" type_scope
+R47905 Coq.ZArith.BinInt "x + y" Z_scope
+R47865 Coq.ZArith.BinInt "x <= y < z" Z_scope
+R47815 Coq.ZArith.BinInt "x <= y < z" Z_scope
+R47825 Coq.ZArith.BinInt "x + y" Z_scope
+R47827 Coq.ZArith.BinInt.Z_of_nat
+R47837 Coq.Init.Datatypes.S
+R47757 Mem.contentmap_inject
+R48020 Mem.update_o
+R48020 Mem.update_o
+R48038 Mem.set_cont_outside_inject
+R48038 Mem.set_cont_outside_inject
+R48108 Coq.ZArith.Znat.inj_S
+R48108 Coq.ZArith.Znat.inj_S
+R48155 Coq.ZArith.Znat.inj_S
+R48155 Coq.ZArith.Znat.inj_S
+R48413 Mem.contentmap_inject
+R48435 Mem.store_contents
+R48394 Coq.Init.Logic "x <> y" type_scope
+R48400 Coq.ZArith.BinInt "x + y" Z_scope
+R48360 Coq.ZArith.BinInt "x <= y < z" Z_scope
+R48313 Coq.ZArith.BinInt "x <= y < z" Z_scope
+R48323 Coq.ZArith.BinInt "x + y" Z_scope
+R48325 Mem.size_mem
+R48255 Mem.contentmap_inject
+R48524 Mem.size_mem_pos
+R48524 Mem.size_mem_pos
+R48590 Mem.setN_outside_inject
+R48590 Mem.setN_outside_inject
+R48590 Mem.setN_outside_inject
+R48590 Mem.setN_outside_inject
+R48590 Mem.setN_outside_inject
+R48849 Coq.Init.Logic "'exists' x , p" type_scope
+R48913 Coq.Init.Logic "A /\ B" type_scope
+R48899 Coq.Init.Logic "x = y" type_scope
+R48864 Mem.store
+R48887 Coq.ZArith.BinInt "x + y" Z_scope
+R48901 Coq.Init.Datatypes.Some
+R48916 Mem.mem_inject
+R48801 Mem.val_content_inject
+R48821 Mem.mem_chunk
+R48777 Coq.Init.Logic "x = y" type_scope
+R48779 Coq.Init.Datatypes.Some
+R48784 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R48757 Coq.Init.Logic "x = y" type_scope
+R48732 Mem.store
+R48759 Coq.Init.Datatypes.Some
+R48710 Mem.mem_inject
+R48962 Mem.size_chunk_pos
+R48962 Mem.size_chunk_pos
+R49012 Mem.store_inv
+R49012 Mem.store_inv
+R49161 Mem.in_bounds_inject
+R49191 Coq.Init.Logic.conj
+R49161 Mem.in_bounds_inject
+R49191 Coq.Init.Logic.conj
+R49223 Mem.unchecked_store
+R49255 Coq.ZArith.BinInt "x + y" Z_scope
+R49223 Mem.unchecked_store
+R49255 Coq.ZArith.BinInt "x + y" Z_scope
+R49301 Coqlib.zlt_true
+R49301 Coqlib.zlt_true
+R49323 Mem.in_bounds
+R49354 Mem.blocks
+R49344 Coq.ZArith.BinInt "x + y" Z_scope
+R49323 Mem.in_bounds
+R49354 Mem.blocks
+R49344 Coq.ZArith.BinInt "x + y" Z_scope
+R49387 Coq.Init.Logic "x = y" type_scope
+R49387 Coq.Init.Logic "x = y" type_scope
+R49401 Coqlib.proof_irrelevance
+R49401 Coqlib.proof_irrelevance
+R49688 Coqlib.zeq
+R49688 Coqlib.zeq
+R49725 Coq.Init.Logic "x = y" type_scope
+R49725 Coq.Init.Logic "x = y" type_scope
+R49770 Coq.Init.Logic "x = y" type_scope
+R49770 Coq.Init.Logic "x = y" type_scope
+R49814 Coqlib.zeq_true
+R49814 Coqlib.zeq_true
+R49869 Mem.store_contents_inject
+R49869 Mem.store_contents_inject
+R49977 Coqlib.zeq
+R49977 Coqlib.zeq
+R50059 Mem.store_contents_outside_inject
+R50124 Coq.ZArith.BinInt "x + y" Z_scope
+R50100 Mem.mem_chunk
+R50059 Mem.store_contents_outside_inject
+R50124 Coq.ZArith.BinInt "x + y" Z_scope
+R50100 Mem.mem_chunk
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R50277 Coq.Init.Logic.sym_not_equal
+R50277 Coq.Init.Logic.sym_not_equal
+R50320 Coq.ZArith.BinInt "x + y" Z_scope
+R50313 Coq.ZArith.BinInt "x - y" Z_scope
+R50320 Coq.ZArith.BinInt "x + y" Z_scope
+R50313 Coq.ZArith.BinInt "x - y" Z_scope
+R50576 Coqlib.zeq
+R50576 Coqlib.zeq
+R50620 Coqlib.zeq_false
+R50620 Coqlib.zeq_false
+R50650 Coqlib.zeq
+R50650 Coqlib.zeq
+R50893 Coq.Init.Logic "'exists' x , p" type_scope
+R50957 Coq.Init.Logic "A /\ B" type_scope
+R50943 Coq.Init.Logic "x = y" type_scope
+R50908 Mem.store
+R50931 Coq.ZArith.BinInt "x + y" Z_scope
+R50945 Coq.Init.Datatypes.Some
+R50960 Mem.mem_inject
+R50871 Mem.val_inject
+R50847 Coq.Init.Logic "x = y" type_scope
+R50849 Coq.Init.Datatypes.Some
+R50854 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R50827 Coq.Init.Logic "x = y" type_scope
+R50802 Mem.store
+R50829 Coq.Init.Datatypes.Some
+R50780 Mem.mem_inject
+R51002 Mem.store_mapped_inject_1
+R51002 Mem.store_mapped_inject_1
+R51183 Mem.mem_inject
+R51171 Coq.Init.Logic "x = y" type_scope
+R51173 Coq.Init.Datatypes.None
+R51151 Coq.Init.Logic "x = y" type_scope
+R51126 Mem.store
+R51153 Coq.Init.Datatypes.Some
+R51104 Mem.mem_inject
+R51241 Mem.store_inv
+R51241 Mem.store_inv
+R51432 Coqlib.zeq_false
+R51432 Coqlib.zeq_false
+R51509 Coq.Init.Logic "x = y" type_scope
+R51494 Mem.low_bound
+R51511 Mem.low_bound
+R51509 Coq.Init.Logic "x = y" type_scope
+R51494 Mem.low_bound
+R51511 Mem.low_bound
+R51590 Coqlib.zeq
+R51590 Coqlib.zeq
+R51679 Coq.Init.Logic "x = y" type_scope
+R51663 Mem.high_bound
+R51681 Mem.high_bound
+R51679 Coq.Init.Logic "x = y" type_scope
+R51663 Mem.high_bound
+R51681 Mem.high_bound
+R51762 Coqlib.zeq
+R51762 Coqlib.zeq
+R52065 Coq.Init.Logic "'exists' x , p" type_scope
+R52112 Coq.Init.Logic "A /\ B" type_scope
+R52102 Coq.Init.Logic "x = y" type_scope
+R52080 Mem.storev
+R52104 Coq.Init.Datatypes.Some
+R52115 Mem.mem_inject
+R52017 Mem.val_content_inject
+R52037 Mem.mem_chunk
+R51995 Mem.val_inject
+R51980 Coq.Init.Logic "x = y" type_scope
+R51958 Mem.storev
+R51982 Coq.Init.Datatypes.Some
+R51936 Mem.mem_inject
+R52237 Integers.signed
+R52273 Coq.ZArith.BinInt "x + y" Z_scope
+R52260 Integers.signed
+R52237 Integers.signed
+R52273 Coq.ZArith.BinInt "x + y" Z_scope
+R52260 Integers.signed
+R52288 Mem.store_mapped_inject_1
+R52288 Mem.store_mapped_inject_1
+R52342 Mem.store_inv
+R52342 Mem.store_inv
+R52407 Mem.address_inject
+R52407 Mem.address_inject
+R52628 Coq.Init.Logic "'exists' x , p" type_scope
+R52675 Coq.Init.Logic "A /\ B" type_scope
+R52665 Coq.Init.Logic "x = y" type_scope
+R52643 Mem.storev
+R52667 Coq.Init.Datatypes.Some
+R52678 Mem.mem_inject
+R52606 Mem.val_inject
+R52584 Mem.val_inject
+R52569 Coq.Init.Logic "x = y" type_scope
+R52547 Mem.storev
+R52571 Coq.Init.Datatypes.Some
+R52525 Mem.mem_inject
+R52720 Mem.storev_mapped_inject_1
+R52720 Mem.storev_mapped_inject_1
+R52851 Mem.mem_inject
+R52863 Mem.free
+R52829 Mem.mem_inject
+R53056 Coqlib.zeq
+R53056 Coqlib.zeq
+R53286 Coqlib.zeq
+R53286 Coqlib.zeq
+R53356 Coqlib.zeq
+R53356 Coqlib.zeq
+R53557 Mem.mem_inject
+R53569 Mem.free_list
+R53535 Mem.mem_inject
+R53642 Mem.free_first_inject
+R53642 Mem.free_first_inject
+R53844 Mem.mem_inject
+R53859 Mem.free
+R53822 Mem.mem_inject
+R53796 Coq.ZArith.BinInt "x >= y" Z_scope
+R53780 Mem.low_bound
+R53799 Mem.high_bound
+R53739 Coq.Init.Logic "x = y" type_scope
+R53741 Coq.Init.Datatypes.Some
+R53745 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R54063 Coqlib.zeq
+R54063 Coqlib.zeq
+R54477 Coq.ZArith.BinInt "x >= y" Z_scope
+R54461 Mem.low_bound
+R54480 Mem.high_bound
+R54450 Coq.Init.Logic "x = y" type_scope
+R54440 Mem.free
+R54600 Mem.update_s
+R54600 Mem.update_s
+R54744 Coq.ZArith.BinInt "x >= y" Z_scope
+R54728 Mem.low_bound
+R54747 Mem.high_bound
+R54718 Coq.Lists.List.In
+R54687 Mem.free_list
+R54838 Coq.Lists.List.in_inv
+R54838 Coq.Lists.List.in_inv
+R54921 Mem.bounds_free_block
+R54944 Coq.Lists.List.fold_right
+R54985 Mem.free
+R54977 Mem.mem
+R54965 Values.block
+R54921 Mem.bounds_free_block
+R54944 Coq.Lists.List.fold_right
+R54985 Mem.free
+R54977 Mem.mem
+R54965 Values.block
+R55144 Coqlib.zeq
+R55144 Coqlib.zeq
+R55359 Mem.mem_inject
+R55388 Mem.free
+R55371 Mem.free_list
+R55337 Mem.mem_inject
+R55323 Coq.Lists.List.In
+R55303 Coq.Init.Logic "x = y" type_scope
+R55305 Coq.Init.Datatypes.Some
+R55309 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R55424 Mem.free_snd_inject
+R55424 Mem.free_snd_inject
+R55459 Mem.free_empty_bounds
+R55459 Mem.free_empty_bounds
+R55514 Mem.free_first_list_inject
+R55514 Mem.free_first_list_inject
+R55581 Mem.val_inject_int
+R55596 Mem.val_inject_float
+R55613 Mem.val_inject_ptr
+R55628 Mem.val_inject_undef
+R55659 Mem.val_nil_inject
+R55674 Mem.val_cons_inject
+R55796 Coq.Init.Logic "A \/ B" type_scope
+R55789 Coq.Init.Logic "x = y" type_scope
+R55804 Coq.Init.Logic "x = y" type_scope
+R55806 Coq.Init.Datatypes.None
+R55754 Mem.meminj
+R55754 Mem.meminj
+R55852 Mem.inject_incr
+R56018 Mem.inject_incr
+R55997 Mem.inject_incr
+R55976 Mem.inject_incr
+R56374 Mem.val_inject
+R56350 Mem.val_inject
+R56327 Mem.inject_incr
+R56488 Mem.val_inject_ptr
+R56488 Mem.val_inject_ptr
+R56673 Mem.val_list_inject
+R56642 Mem.val_list_inject
+R56621 Mem.inject_incr
+R56780 Mem.val_inject_incr
+R56780 Mem.val_inject_incr
+R56861 Mem.inject_incr_refl
+R56878 Mem.val_inject_incr
+R56894 Mem.val_list_inject_incr
+R56960 Mem.meminj
+R56985 Mem.inject_incr
+R57097 Mem.val_content_inject
+R57059 Mem.val_content_inject
+R57169 Mem.val_content_inject_base
+R57169 Mem.val_content_inject_base
+R57201 Mem.val_inject_incr
+R57201 Mem.val_inject_incr
+R57233 Mem.val_content_inject_8
+R57233 Mem.val_content_inject_8
+R57269 Mem.val_content_inject_16
+R57269 Mem.val_content_inject_16
+R57306 Mem.val_content_inject_32
+R57306 Mem.val_content_inject_32
+R57409 Mem.content_inject
+R57383 Mem.content_inject
+R57475 Mem.val_content_inject_incr
+R57475 Mem.val_content_inject_incr
+R57475 Mem.val_content_inject_incr
+R57475 Mem.val_content_inject_incr
+R57475 Mem.val_content_inject_incr
+R57616 Mem.contentmap_inject
+R57572 Mem.contentmap_inject
+R57706 Mem.content_inject_incr
+R57706 Mem.content_inject_incr
+R57837 Mem.block_contents_inject
+R57796 Mem.block_contents_inject
+R57931 Mem.contentmap_inject_incr
+R57931 Mem.contentmap_inject_incr
+R58102 Mem.meminj
+R58127 Values.eq_block
+R58092 Mem.meminj
+R58068 Coq.Init.Datatypes.option
+R58082 Coq.Init.Datatypes "x * y" type_scope
+R58076 Values.block
+R58084 Coq.ZArith.BinInt.Z
+R58057 Values.block
+R58220 Mem.inject_incr
+R58235 Mem.extend_inject
+R58208 Coq.Init.Logic "x = y" type_scope
+R58210 Coq.Init.Datatypes.None
+R58318 Values.eq_block
+R58318 Values.eq_block
+R58495 Mem.mem_inject
+R58479 Coq.Init.Logic "x = y" type_scope
+R58464 Mem.alloc
+R58481 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R58440 Mem.mem_inject
+R58745 Mem.update_o
+R58745 Mem.update_o
+R58947 Coq.Init.Logic "A /\ B" type_scope
+R58904 Mem.mem_inject
+R58916 Mem.extend_inject
+R58932 Coq.Init.Datatypes.None
+R58952 Mem.inject_incr
+R58967 Mem.extend_inject
+R58983 Coq.Init.Datatypes.None
+R58888 Coq.Init.Logic "x = y" type_scope
+R58873 Mem.alloc
+R58890 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R58849 Mem.mem_inject
+R59086 Mem.inject_incr
+R59101 Mem.extend_inject
+R59117 Coq.Init.Datatypes.None
+R59086 Mem.inject_incr
+R59101 Mem.extend_inject
+R59117 Coq.Init.Datatypes.None
+R59135 Mem.extend_inject_incr
+R59135 Mem.extend_inject_incr
+R59290 Values.eq_block
+R59290 Values.eq_block
+R59403 Values.eq_block
+R59403 Values.eq_block
+R59505 Mem.update_o
+R59505 Mem.update_o
+R59591 Mem.block_contents_inject_incr
+R59591 Mem.block_contents_inject_incr
+R59691 Values.eq_block
+R59691 Values.eq_block
+R59734 Values.eq_block
+R59734 Values.eq_block
+R59852 Mem.update_o
+R59852 Mem.update_o
+R59852 Mem.update_o
+R59852 Mem.update_o
+R59852 Mem.update_o
+R59852 Mem.update_o
+R60452 Coq.Init.Logic "A /\ B" type_scope
+R60397 Mem.mem_inject
+R60409 Mem.extend_inject
+R60426 Coq.Init.Datatypes.Some
+R60431 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R60457 Mem.inject_incr
+R60472 Mem.extend_inject
+R60489 Coq.Init.Datatypes.Some
+R60494 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R60350 Coq.Init.Logic "A \/ B" type_scope
+R60338 Coq.ZArith.BinInt "x <= y" Z_scope
+R60331 Coq.ZArith.BinInt "x + y" Z_scope
+R60314 Mem.high_bound
+R60344 Coq.ZArith.BinInt "x + y" Z_scope
+R60365 Coq.ZArith.BinInt "x <= y" Z_scope
+R60359 Coq.ZArith.BinInt "x + y" Z_scope
+R60384 Coq.ZArith.BinInt "x + y" Z_scope
+R60368 Mem.low_bound
+R60289 Coq.Init.Logic "x = y" type_scope
+R60291 Coq.Init.Datatypes.Some
+R60296 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R60238 Coq.ZArith.BinInt "x <= y" Z_scope
+R60232 Coq.ZArith.BinInt "x + y" Z_scope
+R60241 Mem.high_bound
+R60212 Coq.ZArith.BinInt "x <= y" Z_scope
+R60196 Mem.low_bound
+R60218 Coq.ZArith.BinInt "x + y" Z_scope
+R60173 Coq.ZArith.BinInt "x <= y" Z_scope
+R60156 Mem.high_bound
+R60176 Integers.max_signed
+R60132 Coq.ZArith.BinInt "x <= y" Z_scope
+R60117 Integers.min_signed
+R60135 Mem.low_bound
+R60087 Coq.ZArith.BinInt "x <= y <= z" Z_scope
+R60072 Integers.min_signed
+R60097 Integers.max_signed
+R60049 Mem.valid_block
+R60033 Coq.Init.Logic "x = y" type_scope
+R60018 Mem.alloc
+R60035 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R59994 Mem.mem_inject
+R60551 Mem.low_bound_alloc
+R60551 Mem.low_bound_alloc
+R60622 Mem.high_bound_alloc
+R60622 Mem.high_bound_alloc
+R60774 Mem.inject_incr
+R60789 Mem.extend_inject
+R60806 Coq.Init.Datatypes.Some
+R60811 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R60774 Mem.inject_incr
+R60789 Mem.extend_inject
+R60806 Coq.Init.Datatypes.Some
+R60811 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R60835 Mem.extend_inject_incr
+R60835 Mem.extend_inject_incr
+R61010 Values.eq_block
+R61010 Values.eq_block
+R61185 Values.eq_block
+R61185 Values.eq_block
+R61331 Mem.update_s
+R61331 Mem.update_s
+R61615 Mem.update_o
+R61615 Mem.update_o
+R61639 Mem.block_contents_inject_incr
+R61639 Mem.block_contents_inject_incr
+R61812 Coqlib.zeq
+R61829 Coqlib.zeq
+R61812 Coqlib.zeq
+R61829 Coqlib.zeq
+R61829 Coqlib.zeq
+R61911 Values.eq_block
+R61911 Values.eq_block
+R62068 Values.eq_block
+R62068 Values.eq_block
+FGlobalenvs
+R281 Globalenvs.t
+R268 AST.program
+R337 Mem.mem
+R324 AST.program
+R396 Coq.Init.Datatypes.option
+R389 Values.val
+R382 Globalenvs.t
+R466 Coq.Init.Datatypes.option
+R457 Values.block
+R450 Globalenvs.t
+R533 Coq.Init.Datatypes.option
+R540 Values.block
+R524 AST.ident
+R517 Globalenvs.t
+R656 Coq.Init.Logic "'exists' x , p" type_scope
+R668 Coq.Init.Logic "x = y" type_scope
+R670 Values.Vptr
+R677 Integers.zero
+R644 Coq.Init.Logic "x = y" type_scope
+R628 Globalenvs.find_funct
+R646 Coq.Init.Datatypes.Some
+R611 Values.val
+R602 Globalenvs.t
+R805 Coq.Init.Logic "x = y" type_scope
+R773 Globalenvs.find_funct
+R788 Values.Vptr
+R795 Integers.zero
+R807 Globalenvs.find_funct_ptr
+R761 Values.block
+R752 Globalenvs.t
+R1025 Coq.Init.Logic "x = y" type_scope
+R994 Globalenvs.find_funct_ptr
+R1010 Globalenvs.globalenv
+R1027 Coq.Init.Datatypes.Some
+R953 Coq.Lists.List.In
+R965 AST.prog_funct
+R956 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R920 Values.block
+R905 AST.program
+R1229 Coq.Init.Logic "x = y" type_scope
+R1202 Globalenvs.find_funct
+R1214 Globalenvs.globalenv
+R1231 Coq.Init.Datatypes.Some
+R1161 Coq.Lists.List.In
+R1173 AST.prog_funct
+R1164 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R1130 Values.val
+R1115 AST.program
+R1369 Coq.Init.Logic "A /\ B" type_scope
+R1347 Mem.valid_block
+R1361 Mem.nullptr
+R1395 Coq.Init.Logic "x = y" type_scope
+R1379 Mem.blocks
+R1387 Mem.nullptr
+R1397 Mem.empty_block
+R1329 Globalenvs.init_mem
+R1304 AST.program
+R1493 Coq.Init.Logic "'exists' x , p" type_scope
+R1504 Coq.Init.Logic "'exists' x , p" type_scope
+R1544 Coq.Init.Logic "x = y" type_scope
+R1534 Mem.blocks
+R1521 Globalenvs.init_mem
+R1546 Mem.empty_block
+R1481 Values.block
+R1466 AST.program
+R1701 Coq.ZArith.BinInt "x < y" Z_scope
+R1687 Coq.Init.Logic "x = y" type_scope
+R1656 Globalenvs.find_funct_ptr
+R1672 Globalenvs.globalenv
+R1689 Coq.Init.Datatypes.Some
+R1637 Values.block
+R1622 AST.program
+R1842 Coq.ZArith.BinInt "x < y" Z_scope
+R1844 Mem.nextblock
+R1855 Globalenvs.init_mem
+R1828 Coq.Init.Logic "x = y" type_scope
+R1799 Globalenvs.find_symbol
+R1812 Globalenvs.globalenv
+R1830 Coq.Init.Datatypes.Some
+R1787 Values.block
+R1776 AST.ident
+R1760 AST.program
+R2087 Coq.Init.Logic "x = y" type_scope
+R2029 Globalenvs.find_funct_ptr
+R2045 Globalenvs.globalenv
+R2056 AST.transform_program
+R2089 Coq.Init.Datatypes.Some
+R2013 Coq.Init.Logic "x = y" type_scope
+R1982 Globalenvs.find_funct_ptr
+R1998 Globalenvs.globalenv
+R2015 Coq.Init.Datatypes.Some
+R1963 Values.block
+R1948 AST.program
+R2310 Coq.Init.Logic "x = y" type_scope
+R2256 Globalenvs.find_funct
+R2268 Globalenvs.globalenv
+R2279 AST.transform_program
+R2312 Coq.Init.Datatypes.Some
+R2240 Coq.Init.Logic "x = y" type_scope
+R2213 Globalenvs.find_funct
+R2225 Globalenvs.globalenv
+R2242 Coq.Init.Datatypes.Some
+R2196 Values.val
+R2181 AST.program
+R2487 Coq.Init.Logic "x = y" type_scope
+R2432 Globalenvs.find_symbol
+R2445 Globalenvs.globalenv
+R2456 AST.transform_program
+R2493 Globalenvs.find_symbol
+R2506 Globalenvs.globalenv
+R2420 AST.ident
+R2405 AST.program
+R2649 Coq.Init.Logic "x = y" type_scope
+R2611 Globalenvs.init_mem
+R2621 AST.transform_program
+R2651 Globalenvs.init_mem
+R2595 AST.program
+R2972 Coq.Init.Logic "A /\ B" type_scope
+R2961 Coq.Init.Logic "x = y" type_scope
+R2929 Globalenvs.find_funct_ptr
+R2945 Globalenvs.globalenv
+R2984 Coq.Init.Logic "x <> y" type_scope
+R2987 Coq.Init.Datatypes.None
+R2913 Coq.Init.Logic "x = y" type_scope
+R2882 Globalenvs.find_funct_ptr
+R2898 Globalenvs.globalenv
+R2915 Coq.Init.Datatypes.Some
+R2863 Values.block
+R2835 Coq.Init.Logic "x = y" type_scope
+R2800 AST.transform_partial_program
+R2837 Coq.Init.Datatypes.Some
+R2784 AST.program
+R2768 AST.program
+R2743 Coq.Init.Datatypes.option
+R3288 Coq.Init.Logic "A /\ B" type_scope
+R3277 Coq.Init.Logic "x = y" type_scope
+R3249 Globalenvs.find_funct
+R3261 Globalenvs.globalenv
+R3300 Coq.Init.Logic "x <> y" type_scope
+R3303 Coq.Init.Datatypes.None
+R3233 Coq.Init.Logic "x = y" type_scope
+R3206 Globalenvs.find_funct
+R3218 Globalenvs.globalenv
+R3235 Coq.Init.Datatypes.Some
+R3189 Values.val
+R3161 Coq.Init.Logic "x = y" type_scope
+R3126 AST.transform_partial_program
+R3163 Coq.Init.Datatypes.Some
+R3110 AST.program
+R3094 AST.program
+R3069 Coq.Init.Datatypes.option
+R3547 Coq.Init.Logic "x = y" type_scope
+R3518 Globalenvs.find_symbol
+R3531 Globalenvs.globalenv
+R3549 Globalenvs.find_symbol
+R3562 Globalenvs.globalenv
+R3506 AST.ident
+R3478 Coq.Init.Logic "x = y" type_scope
+R3443 AST.transform_partial_program
+R3480 Coq.Init.Datatypes.Some
+R3427 AST.program
+R3411 AST.program
+R3386 Coq.Init.Datatypes.option
+R3773 Coq.Init.Logic "x = y" type_scope
+R3761 Globalenvs.init_mem
+R3775 Globalenvs.init_mem
+R3744 Coq.Init.Logic "x = y" type_scope
+R3709 AST.transform_partial_program
+R3746 Coq.Init.Datatypes.Some
+R3693 AST.program
+R3677 AST.program
+R3652 Coq.Init.Datatypes.option
+R3945 Maps.t
+R3953 Coq.Init.Datatypes.option
+R4027 Coq.ZArith.BinInt.Z
+R4041 Maps.t
+R4049 Values.block
+R4120 Globalenvs.genv
+R4188 Globalenvs.genv
+R4229 Globalenvs.mkgenv
+R4314 Maps.set
+R4344 Globalenvs.symbols
+R4325 Coq.Init.Datatypes.fst
+R4295 Coq.ZArith.BinInt.Zpred
+R4237 Maps.set
+R4273 Globalenvs.functions
+R4249 Coq.Init.Datatypes.Some
+R4255 Coq.Init.Datatypes.snd
+R4210 Globalenvs.nextfunction
+R4180 Globalenvs.genv
+R4166 Coq.Init.Datatypes "x * y" type_scope
+R4160 AST.ident
+R4415 Globalenvs.genv
+R4425 Globalenvs.mkgenv
+R4482 Maps.set
+R4502 Globalenvs.symbols
+R4458 Globalenvs.nextfunction
+R4435 Globalenvs.functions
+R4407 Globalenvs.genv
+R4396 Values.block
+R4385 AST.ident
+R4563 Coq.Init.Datatypes.option
+R4581 Maps.get
+R4595 Globalenvs.functions
+R4554 Values.block
+R4544 Globalenvs.genv
+R4651 Coq.Init.Datatypes.option
+R4686 Values.Vptr
+R4709 Integers.eq
+R4720 Integers.zero
+R4758 Coq.Init.Datatypes.None
+R4734 Globalenvs.find_funct_ptr
+R4778 Coq.Init.Datatypes.None
+R4644 Values.val
+R4634 Globalenvs.genv
+R4840 Coq.Init.Datatypes.option
+R4847 Values.block
+R4858 Maps.get
+R4876 Globalenvs.symbols
+R4831 AST.ident
+R4818 Globalenvs.genv
+R4977 Coq.Init.Logic "'exists' x , p" type_scope
+R4989 Coq.Init.Logic "x = y" type_scope
+R4991 Values.Vptr
+R4998 Integers.zero
+R4965 Coq.Init.Logic "x = y" type_scope
+R4949 Globalenvs.find_funct
+R4967 Coq.Init.Datatypes.Some
+R4930 Values.val
+R4923 Globalenvs.t
+R5106 Integers.eq_spec
+R5120 Integers.zero
+R5106 Integers.eq_spec
+R5120 Integers.zero
+R5137 Integers.eq
+R5146 Integers.zero
+R5137 Integers.eq
+R5146 Integers.zero
+R5307 Coq.Init.Logic "x = y" type_scope
+R5275 Globalenvs.find_funct
+R5290 Values.Vptr
+R5297 Integers.zero
+R5309 Globalenvs.find_funct_ptr
+R5265 Values.block
+R5258 Globalenvs.t
+R5370 Integers.eq_spec
+R5391 Integers.zero
+R5382 Integers.zero
+R5370 Integers.eq_spec
+R5391 Integers.zero
+R5382 Integers.zero
+R5410 Integers.eq
+R5426 Integers.zero
+R5417 Integers.zero
+R5410 Integers.eq
+R5426 Integers.zero
+R5417 Integers.zero
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R5539 Globalenvs.genv
+R5549 Globalenvs.mkgenv
+R5579 Maps.empty
+R5591 Values.block
+R5557 Maps.init
+R5567 Coq.Init.Datatypes.None
+R5665 Globalenvs.genv
+R5675 Coq.Lists.List.fold_right
+R5691 Globalenvs.add_funct
+R5641 Coq.Lists.List.list
+R5653 Coq.Init.Datatypes "x * y" type_scope
+R5647 AST.ident
+R5629 Globalenvs.genv
+R5795 Coq.Init.Datatypes "x * y" type_scope
+R5790 Globalenvs.genv
+R5797 Mem.mem
+R5806 Coq.Lists.List.fold_right
+R5957 Mem.alloc
+R5985 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R5986 Globalenvs.add_symbol
+R5862 Coq.Init.Datatypes "x * y" type_scope
+R5857 Globalenvs.genv
+R5864 Mem.mem
+R5845 Coq.Init.Datatypes "x * y" type_scope
+R5839 AST.ident
+R5847 Coq.ZArith.BinInt.Z
+R5770 Coq.Lists.List.list
+R5782 Coq.Init.Datatypes "x * y" type_scope
+R5776 AST.ident
+R5784 Coq.ZArith.BinInt.Z
+R5756 Coq.Init.Datatypes "x * y" type_scope
+R5751 Globalenvs.genv
+R5758 Mem.mem
+R6083 Coq.Init.Datatypes "x * y" type_scope
+R6078 Globalenvs.genv
+R6085 Mem.mem
+R6095 Globalenvs.add_globals
+R6163 AST.prog_vars
+R6111 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R6112 Globalenvs.add_functs
+R6132 AST.prog_funct
+R6123 Globalenvs.empty
+R6145 Mem.empty
+R6060 AST.program
+R6218 Globalenvs.genv
+R6228 Coq.Init.Datatypes.fst
+R6233 Globalenvs.globalenv_initmem
+R6201 AST.program
+R6297 Mem.mem
+R6306 Coq.Init.Datatypes.snd
+R6311 Globalenvs.globalenv_initmem
+R6280 AST.program
+R6416 Coq.Init.Logic "x = y" type_scope
+R6392 Globalenvs.functions
+R6403 Globalenvs.globalenv
+R6418 Globalenvs.functions
+R6429 Globalenvs.add_functs
+R6449 AST.prog_funct
+R6440 Globalenvs.empty
+R6374 AST.program
+R6577 Coq.Init.Logic "x = y" type_scope
+R6537 Globalenvs.functions
+R6548 Coq.Init.Datatypes.fst
+R6553 Globalenvs.add_globals
+R6579 Globalenvs.functions
+R6590 Coq.Init.Datatypes.fst
+R6513 Coq.Lists.List.list
+R6525 Coq.Init.Datatypes "x * y" type_scope
+R6519 AST.ident
+R6527 Coq.ZArith.BinInt.Z
+R6499 Coq.Init.Datatypes "x * y" type_scope
+R6494 Globalenvs.genv
+R6501 Mem.mem
+R6577 Coq.Init.Logic "x = y" type_scope
+R6537 Globalenvs.functions
+R6548 Coq.Init.Datatypes.fst
+R6553 Globalenvs.add_globals
+R6579 Globalenvs.functions
+R6590 Coq.Init.Datatypes.fst
+R6513 Coq.Lists.List.list
+R6525 Coq.Init.Datatypes "x * y" type_scope
+R6519 AST.ident
+R6527 Coq.ZArith.BinInt.Z
+R6499 Coq.Init.Datatypes "x * y" type_scope
+R6494 Globalenvs.genv
+R6501 Mem.mem
+R6666 Globalenvs.add_globals
+R6666 Globalenvs.add_globals
+R6932 Coq.Init.Logic "A /\ B" type_scope
+R6910 Mem.valid_block
+R6924 Mem.nullptr
+R6956 Coq.Init.Logic "x = y" type_scope
+R6940 Mem.blocks
+R6948 Mem.nullptr
+R6958 Mem.mkblock
+R6988 Mem.undef_undef_outside
+R6980 Mem.Undef
+R6894 Globalenvs.init_mem
+R6867 AST.program
+R7302 Coq.Init.Logic "A /\ B" type_scope
+R7285 Coq.ZArith.BinInt "x < y" Z_scope
+R7291 Mem.nextblock
+R7329 Coq.Init.Logic "x = y" type_scope
+R7313 Mem.blocks
+R7321 Mem.nullptr
+R7331 Mem.mkblock
+R7361 Mem.undef_undef_outside
+R7353 Mem.Undef
+R7248 Coq.Init.Datatypes.snd
+R7253 Globalenvs.add_globals
+R7215 Coq.Lists.List.list
+R7227 Coq.Init.Datatypes "x * y" type_scope
+R7221 AST.ident
+R7229 Coq.ZArith.BinInt.Z
+R7137 Coq.Init.Logic "x = y" type_scope
+R7121 Mem.blocks
+R7129 Mem.nullptr
+R7139 Mem.mkblock
+R7169 Mem.undef_undef_outside
+R7161 Mem.Undef
+R7093 Coq.ZArith.BinInt "x < y" Z_scope
+R7099 Mem.nextblock
+R7075 Coq.Init.Datatypes.snd
+R7053 Coq.Init.Datatypes "x * y" type_scope
+R7048 Globalenvs.genv
+R7055 Mem.mem
+R7302 Coq.Init.Logic "A /\ B" type_scope
+R7285 Coq.ZArith.BinInt "x < y" Z_scope
+R7291 Mem.nextblock
+R7329 Coq.Init.Logic "x = y" type_scope
+R7313 Mem.blocks
+R7321 Mem.nullptr
+R7331 Mem.mkblock
+R7361 Mem.undef_undef_outside
+R7353 Mem.Undef
+R7248 Coq.Init.Datatypes.snd
+R7253 Globalenvs.add_globals
+R7215 Coq.Lists.List.list
+R7227 Coq.Init.Datatypes "x * y" type_scope
+R7221 AST.ident
+R7229 Coq.ZArith.BinInt.Z
+R7137 Coq.Init.Logic "x = y" type_scope
+R7121 Mem.blocks
+R7129 Mem.nullptr
+R7139 Mem.mkblock
+R7169 Mem.undef_undef_outside
+R7161 Mem.Undef
+R7093 Coq.ZArith.BinInt "x < y" Z_scope
+R7099 Mem.nextblock
+R7075 Coq.Init.Datatypes.snd
+R7053 Coq.Init.Datatypes "x * y" type_scope
+R7048 Globalenvs.genv
+R7055 Mem.mem
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R7455 Globalenvs.add_globals
+R7455 Globalenvs.add_globals
+R7592 Mem.update_o
+R7592 Mem.update_o
+R7614 Coq.Init.Logic.sym_not_equal
+R7614 Coq.Init.Logic.sym_not_equal
+R7635 Coq.ZArith.Zorder.Zlt_not_eq
+R7635 Coq.ZArith.Zorder.Zlt_not_eq
+R7839 Coq.Init.Logic "'exists' x , p" type_scope
+R7850 Coq.Init.Logic "'exists' x , p" type_scope
+R7888 Coq.Init.Logic "x = y" type_scope
+R7878 Mem.blocks
+R7865 Globalenvs.init_mem
+R7890 Mem.empty_block
+R7829 Values.block
+R7810 AST.program
+R8007 Coq.Init.Logic "'exists' x , p" type_scope
+R8018 Coq.Init.Logic "'exists' x , p" type_scope
+R8049 Coq.Init.Logic "x = y" type_scope
+R8039 Mem.blocks
+R8051 Mem.empty_block
+R7988 Coq.Init.Logic "x = y" type_scope
+R7955 Globalenvs.add_globals
+R7967 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R7972 Mem.empty
+R7990 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R8007 Coq.Init.Logic "'exists' x , p" type_scope
+R8018 Coq.Init.Logic "'exists' x , p" type_scope
+R8049 Coq.Init.Logic "x = y" type_scope
+R8039 Mem.blocks
+R8051 Mem.empty_block
+R7988 Coq.Init.Logic "x = y" type_scope
+R7955 Globalenvs.add_globals
+R7967 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R7972 Mem.empty
+R7990 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R8195 Globalenvs.add_globals
+R8207 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R8212 Mem.empty
+R8195 Globalenvs.add_globals
+R8207 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R8212 Mem.empty
+R8358 Coqlib.zeq
+R8365 Mem.nextblock
+R8358 Coqlib.zeq
+R8365 Mem.nextblock
+R8443 Globalenvs.globalenv_initmem
+R8443 Globalenvs.globalenv_initmem
+R8659 Coq.ZArith.BinInt "x < y" Z_scope
+R8623 Globalenvs.nextfunction
+R8637 Globalenvs.add_functs
+R8648 Globalenvs.empty
+R8863 Coq.ZArith.BinInt "x < y" Z_scope
+R8849 Coq.Init.Logic "x = y" type_scope
+R8818 Globalenvs.find_funct_ptr
+R8834 Globalenvs.globalenv
+R8851 Coq.Init.Datatypes.Some
+R8797 Values.block
+R8778 AST.program
+R8975 Coq.ZArith.BinInt "x < y" Z_scope
+R8961 Coq.Init.Logic "x = y" type_scope
+R8915 Maps.get
+R8927 Globalenvs.functions
+R8938 Globalenvs.add_functs
+R8949 Globalenvs.empty
+R8963 Coq.Init.Datatypes.Some
+R8975 Coq.ZArith.BinInt "x < y" Z_scope
+R8961 Coq.Init.Logic "x = y" type_scope
+R8915 Maps.get
+R8927 Globalenvs.functions
+R8938 Globalenvs.add_functs
+R8949 Globalenvs.empty
+R8963 Coq.Init.Datatypes.Some
+R9019 Maps.gi
+R9019 Maps.gi
+R9052 Maps.gsspec
+R9052 Maps.gsspec
+R9071 Maps.eq
+R9086 Globalenvs.nextfunction
+R9100 Globalenvs.add_functs
+R9111 Globalenvs.empty
+R9071 Maps.eq
+R9086 Globalenvs.nextfunction
+R9100 Globalenvs.add_functs
+R9111 Globalenvs.empty
+R9160 Globalenvs.nextfunction_add_functs_neg
+R9160 Globalenvs.nextfunction_add_functs_neg
+R9233 Globalenvs.functions_globalenv
+R9233 Globalenvs.functions_globalenv
+R9400 Coq.ZArith.BinInt "x < y" Z_scope
+R9402 Mem.nextblock
+R9413 Globalenvs.init_mem
+R9386 Coq.Init.Logic "x = y" type_scope
+R9357 Globalenvs.find_symbol
+R9370 Globalenvs.globalenv
+R9388 Coq.Init.Datatypes.Some
+R9347 Values.block
+R9336 AST.ident
+R9316 AST.program
+R9514 Coq.ZArith.BinInt "x < y" Z_scope
+R9500 Coq.Init.Logic "x = y" type_scope
+R9494 Maps "a ! b"
+R9464 Globalenvs.symbols
+R9473 Globalenvs.add_functs
+R9484 Globalenvs.empty
+R9502 Coq.Init.Datatypes.Some
+R9514 Coq.ZArith.BinInt "x < y" Z_scope
+R9500 Coq.Init.Logic "x = y" type_scope
+R9494 Maps "a ! b"
+R9464 Globalenvs.symbols
+R9473 Globalenvs.add_functs
+R9484 Globalenvs.empty
+R9502 Coq.Init.Datatypes.Some
+R9570 Maps.gempty
+R9570 Maps.gempty
+R9606 Maps.gsspec
+R9606 Maps.gsspec
+R9645 Coqlib.peq
+R9645 Coqlib.peq
+R9694 Globalenvs.nextfunction_add_functs_neg
+R9694 Globalenvs.nextfunction_add_functs_neg
+R9870 Coq.ZArith.BinInt "x < y" Z_scope
+R9872 Mem.nextblock
+R9852 Coq.Init.Logic "x = y" type_scope
+R9848 Maps "a ! b"
+R9839 Globalenvs.symbols
+R9854 Coq.Init.Datatypes.Some
+R9822 Coq.Init.Logic "x = y" type_scope
+R9771 Globalenvs.add_globals
+R9783 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R9784 Globalenvs.add_functs
+R9795 Globalenvs.empty
+R9806 Mem.empty
+R9824 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R9870 Coq.ZArith.BinInt "x < y" Z_scope
+R9872 Mem.nextblock
+R9852 Coq.Init.Logic "x = y" type_scope
+R9848 Maps "a ! b"
+R9839 Globalenvs.symbols
+R9854 Coq.Init.Datatypes.Some
+R9822 Coq.Init.Logic "x = y" type_scope
+R9771 Globalenvs.add_globals
+R9783 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R9784 Globalenvs.add_functs
+R9795 Globalenvs.empty
+R9806 Mem.empty
+R9824 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R10028 Globalenvs.add_globals
+R10040 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R10041 Globalenvs.add_functs
+R10052 Globalenvs.empty
+R10063 Mem.empty
+R10028 Globalenvs.add_globals
+R10040 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R10041 Globalenvs.add_functs
+R10052 Globalenvs.empty
+R10063 Mem.empty
+R10175 Maps.gsspec
+R10175 Maps.gsspec
+R10195 Coqlib.peq
+R10195 Coqlib.peq
+R10392 Globalenvs.add_globals
+R10472 AST.prog_vars
+R10404 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R10405 Globalenvs.add_functs
+R10423 AST.prog_funct
+R10416 Globalenvs.empty
+R10438 Mem.empty
+R10392 Globalenvs.add_globals
+R10472 AST.prog_vars
+R10404 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R10405 Globalenvs.add_functs
+R10423 AST.prog_funct
+R10416 Globalenvs.empty
+R10438 Mem.empty
+R10754 Coq.Init.Logic "x = y" type_scope
+R10723 Globalenvs.find_funct_ptr
+R10739 Globalenvs.globalenv
+R10756 Coq.Init.Datatypes.Some
+R10684 Coq.Lists.List.In
+R10696 AST.prog_funct
+R10687 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R10653 Values.block
+R10638 AST.program
+R10831 Globalenvs.functions_globalenv
+R10831 Globalenvs.functions_globalenv
+R10866 AST.prog_funct
+R10866 AST.prog_funct
+R10911 Maps.gi
+R10911 Maps.gi
+R10952 Maps.gsspec
+R10952 Maps.gsspec
+R10973 Maps.eq
+R10988 Globalenvs.nextfunction
+R11002 Globalenvs.add_functs
+R11014 Globalenvs.empty
+R10973 Maps.eq
+R10988 Globalenvs.nextfunction
+R11002 Globalenvs.add_functs
+R11014 Globalenvs.empty
+R11053 Coq.Init.Datatypes.fst
+R11053 Coq.Init.Datatypes.fst
+R11336 Coq.Init.Logic "x = y" type_scope
+R11309 Globalenvs.find_funct
+R11321 Globalenvs.globalenv
+R11338 Coq.Init.Datatypes.Some
+R11270 Coq.Lists.List.In
+R11282 AST.prog_funct
+R11273 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R11241 Values.val
+R11226 AST.program
+R11450 Integers.eq
+R11459 Integers.zero
+R11450 Integers.eq
+R11459 Integers.zero
+R11519 Globalenvs.find_funct_ptr_prop
+R11519 Globalenvs.find_funct_ptr_prop
+R11683 Coq.Init.Datatypes.option
+R11705 AST.program
+R11729 AST.program
+R11797 Coq.Init.Logic "x = y" type_scope
+R11762 AST.transform_partial_program
+R11799 Coq.Init.Datatypes.Some
+R12059 Coq.Init.Logic "A /\ B" type_scope
+R12042 Coq.Init.Logic "x = y" type_scope
+R12026 Globalenvs.nextfunction
+R12044 Globalenvs.nextfunction
+R12087 Coq.Init.Logic "A /\ B" type_scope
+R12075 Coq.Init.Logic "x = y" type_scope
+R12064 Globalenvs.symbols
+R12077 Globalenvs.symbols
+R12196 Coq.Init.Logic "A /\ B" type_scope
+R12185 Coq.Init.Logic "x = y" type_scope
+R12159 Maps.get
+R12171 Globalenvs.functions
+R12208 Coq.Init.Logic "x <> y" type_scope
+R12211 Coq.Init.Datatypes.None
+R12145 Coq.Init.Logic "x = y" type_scope
+R12120 Maps.get
+R12132 Globalenvs.functions
+R12147 Coq.Init.Datatypes.Some
+R12103 Values.block
+R11995 Globalenvs.add_functs
+R12007 Globalenvs.empty
+R11955 Globalenvs.add_functs
+R11967 Globalenvs.empty
+R11929 Coq.Init.Logic "x = y" type_scope
+R11895 AST.transf_partial_program
+R11931 Coq.Init.Datatypes.Some
+R11874 Coq.Lists.List.list
+R11886 Coq.Init.Datatypes "x * y" type_scope
+R11880 AST.ident
+R11849 Coq.Lists.List.list
+R11861 Coq.Init.Datatypes "x * y" type_scope
+R11855 AST.ident
+R12370 Maps.gi
+R12370 Maps.gi
+R12370 Maps.gi
+R12370 Maps.gi
+R12473 AST.transf_partial_program
+R12473 AST.transf_partial_program
+R12729 Coqlib.zeq
+R12736 Globalenvs.nextfunction
+R12750 Globalenvs.add_functs
+R12762 Globalenvs.empty
+R12729 Coqlib.zeq
+R12736 Globalenvs.nextfunction
+R12750 Globalenvs.add_functs
+R12762 Globalenvs.empty
+R12813 Maps.gss
+R12813 Maps.gss
+R12813 Maps.gss
+R12813 Maps.gss
+R12936 Maps.gso
+R12936 Maps.gso
+R12936 Maps.gso
+R13142 Coq.Init.Logic "x = y" type_scope
+R13111 Coq.Init.Datatypes.snd
+R13116 Globalenvs.add_globals
+R13128 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R13144 Coq.Init.Datatypes.snd
+R13149 Globalenvs.add_globals
+R13161 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R13090 Coq.Lists.List.list
+R13102 Coq.Init.Datatypes "x * y" type_scope
+R13096 AST.ident
+R13104 Coq.ZArith.BinInt.Z
+R13078 Mem.mem
+R13066 Globalenvs.genv
+R13053 Globalenvs.genv
+R13247 Globalenvs.add_globals
+R13259 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R13247 Globalenvs.add_globals
+R13259 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R13286 Globalenvs.add_globals
+R13298 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R13286 Globalenvs.add_globals
+R13298 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R13549 Coq.Init.Logic "x = y" type_scope
+R13508 Globalenvs.symbols
+R13517 Coq.Init.Datatypes.fst
+R13522 Globalenvs.add_globals
+R13534 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R13553 Globalenvs.symbols
+R13562 Coq.Init.Datatypes.fst
+R13567 Globalenvs.add_globals
+R13579 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R13487 Coq.Lists.List.list
+R13499 Coq.Init.Datatypes "x * y" type_scope
+R13493 AST.ident
+R13501 Coq.ZArith.BinInt.Z
+R13455 Coq.Init.Logic "x = y" type_scope
+R13444 Globalenvs.symbols
+R13457 Globalenvs.symbols
+R13436 Mem.mem
+R13424 Globalenvs.genv
+R13411 Globalenvs.genv
+R13655 Globalenvs.mem_add_globals_transf
+R13655 Globalenvs.mem_add_globals_transf
+R13724 Globalenvs.add_globals
+R13736 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R13724 Globalenvs.add_globals
+R13736 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R13763 Globalenvs.add_globals
+R13775 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R13763 Globalenvs.add_globals
+R13775 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R13954 Coq.Init.Logic "x = y" type_scope
+R13909 AST.transf_partial_program
+R13942 AST.prog_funct
+R13956 Coq.Init.Datatypes.Some
+R13965 AST.prog_funct
+R14051 AST.transf_partial_program
+R14082 AST.prog_funct
+R14051 AST.transf_partial_program
+R14082 AST.prog_funct
+R14347 Coq.Init.Logic "A /\ B" type_scope
+R14336 Coq.Init.Logic "x = y" type_scope
+R14304 Globalenvs.find_funct_ptr
+R14320 Globalenvs.globalenv
+R14359 Coq.Init.Logic "x <> y" type_scope
+R14362 Coq.Init.Datatypes.None
+R14290 Coq.Init.Logic "x = y" type_scope
+R14259 Globalenvs.find_funct_ptr
+R14275 Globalenvs.globalenv
+R14292 Coq.Init.Datatypes.Some
+R14242 Values.block
+R14408 Globalenvs.add_functs_transf
+R14441 Globalenvs.prog_funct_transf_OK
+R14429 AST.prog_funct
+R14408 Globalenvs.add_functs_transf
+R14441 Globalenvs.prog_funct_transf_OK
+R14429 AST.prog_funct
+R14528 Globalenvs.functions_globalenv
+R14528 Globalenvs.functions_globalenv
+R14528 Globalenvs.functions_globalenv
+R14528 Globalenvs.functions_globalenv
+R14712 Coq.Init.Logic "A /\ B" type_scope
+R14701 Coq.Init.Logic "x = y" type_scope
+R14673 Globalenvs.find_funct
+R14685 Globalenvs.globalenv
+R14724 Coq.Init.Logic "x <> y" type_scope
+R14727 Coq.Init.Datatypes.None
+R14659 Coq.Init.Logic "x = y" type_scope
+R14632 Globalenvs.find_funct
+R14644 Globalenvs.globalenv
+R14661 Coq.Init.Datatypes.Some
+R14617 Values.val
+R14840 Integers.eq
+R14851 Integers.zero
+R14840 Integers.eq
+R14851 Integers.zero
+R14898 Globalenvs.find_funct_ptr_transf_partial
+R14898 Globalenvs.find_funct_ptr_transf_partial
+R14988 Coq.Init.Logic "x = y" type_scope
+R14965 Globalenvs.symbols
+R14974 Globalenvs.globalenv
+R14990 Globalenvs.symbols
+R14999 Globalenvs.globalenv
+R15080 Globalenvs.add_functs_transf
+R15113 Globalenvs.prog_funct_transf_OK
+R15101 AST.prog_funct
+R15080 Globalenvs.add_functs_transf
+R15113 Globalenvs.prog_funct_transf_OK
+R15101 AST.prog_funct
+R15224 AST.transf_partial_program
+R15255 AST.prog_funct
+R15224 AST.transf_partial_program
+R15255 AST.prog_funct
+R15345 Globalenvs.symbols_add_globals_transf
+R15345 Globalenvs.symbols_add_globals_transf
+R15513 Coq.Init.Logic "x = y" type_scope
+R15484 Globalenvs.find_symbol
+R15497 Globalenvs.globalenv
+R15515 Globalenvs.find_symbol
+R15528 Globalenvs.globalenv
+R15474 AST.ident
+R15592 Globalenvs.symbols_init_transf
+R15592 Globalenvs.symbols_init_transf
+R15672 Coq.Init.Logic "x = y" type_scope
+R15660 Globalenvs.init_mem
+R15674 Globalenvs.init_mem
+R15807 AST.transf_partial_program
+R15838 AST.prog_funct
+R15807 AST.transf_partial_program
+R15838 AST.prog_funct
+R15928 Globalenvs.mem_add_globals_transf
+R15928 Globalenvs.mem_add_globals_transf
+R16093 AST.program
+R16114 AST.transform_program
+R16178 Coq.Init.Datatypes.option
+R16190 Coq.Init.Datatypes.Some
+R16331 Coq.Init.Logic "x = y" type_scope
+R16289 AST.transf_partial_program
+R16312 Globalenvs.transf_partial
+R16335 Coq.Init.Datatypes.Some
+R16341 AST.transf_program
+R16268 Coq.Lists.List.list
+R16280 Coq.Init.Datatypes "x * y" type_scope
+R16274 AST.ident
+R16561 Coq.Init.Logic "x = y" type_scope
+R16518 AST.transform_partial_program
+R16544 Globalenvs.transf_partial
+R16563 Coq.Init.Datatypes.Some
+R16655 Globalenvs.transf_program_transf_partial_program
+R16655 Globalenvs.transf_program_transf_partial_program
+R16853 Coq.Init.Logic "x = y" type_scope
+R16821 Globalenvs.find_funct_ptr
+R16837 Globalenvs.globalenv
+R16855 Coq.Init.Datatypes.Some
+R16807 Coq.Init.Logic "x = y" type_scope
+R16776 Globalenvs.find_funct_ptr
+R16792 Globalenvs.globalenv
+R16809 Coq.Init.Datatypes.Some
+R16759 Values.block
+R16903 Globalenvs.find_funct_ptr_transf_partial
+R16968 Globalenvs.transform_program_transform_partial_program
+R16933 Globalenvs.transf_partial
+R16903 Globalenvs.find_funct_ptr_transf_partial
+R16968 Globalenvs.transform_program_transform_partial_program
+R16933 Globalenvs.transf_partial
+R17189 Coq.Init.Logic "x = y" type_scope
+R17161 Globalenvs.find_funct
+R17173 Globalenvs.globalenv
+R17191 Coq.Init.Datatypes.Some
+R17147 Coq.Init.Logic "x = y" type_scope
+R17120 Globalenvs.find_funct
+R17132 Globalenvs.globalenv
+R17149 Coq.Init.Datatypes.Some
+R17105 Values.val
+R17239 Globalenvs.find_funct_transf_partial
+R17300 Globalenvs.transform_program_transform_partial_program
+R17265 Globalenvs.transf_partial
+R17239 Globalenvs.find_funct_transf_partial
+R17300 Globalenvs.transform_program_transform_partial_program
+R17265 Globalenvs.transf_partial
+R17477 Coq.Init.Logic "x = y" type_scope
+R17448 Globalenvs.find_symbol
+R17461 Globalenvs.globalenv
+R17479 Globalenvs.find_symbol
+R17492 Globalenvs.globalenv
+R17438 AST.ident
+R17565 Globalenvs.transf_partial
+R17533 Globalenvs.find_symbol_transf_partial
+R17565 Globalenvs.transf_partial
+R17533 Globalenvs.find_symbol_transf_partial
+R17589 Globalenvs.transform_program_transform_partial_program
+R17589 Globalenvs.transform_program_transform_partial_program
+R17679 Coq.Init.Logic "x = y" type_scope
+R17667 Globalenvs.init_mem
+R17681 Globalenvs.init_mem
+R17737 Globalenvs.transf_partial
+R17708 Globalenvs.init_mem_transf_partial
+R17737 Globalenvs.transf_partial
+R17708 Globalenvs.init_mem_transf_partial
+R17761 Globalenvs.transform_program_transform_partial_program
+R17761 Globalenvs.transform_program_transform_partial_program
+FOp
+R263 AST.comparison
+R337 AST.comparison
+R428 Integers.int
+R414 AST.comparison
+R523 Integers.int
+R509 AST.comparison
+R604 AST.comparison
+R680 AST.comparison
+R767 Integers.int
+R846 Integers.int
+R1006 Integers.int
+R1097 Floats.float
+R1193 Integers.int
+R1184 AST.ident
+R1294 Integers.int
+R1726 Integers.int
+R1857 Integers.int
+R1980 Integers.int
+R2247 Integers.int
+R2369 Integers.int
+R2493 Integers.int
+R2884 Integers.int
+R2956 Integers.int
+R3106 Integers.int
+R3099 Integers.int
+R4092 Op.condition
+R4222 Integers.int
+R4370 Integers.int
+R4361 AST.ident
+R4445 Integers.int
+R4436 AST.ident
+R4518 Integers.int
+R4644 Coq.Init.Datatypes.option
+R4651 Coq.Init.Datatypes.bool
+R4664 Integers.eq
+R4673 Integers.zero
+R4763 Coq.Init.Datatypes.None
+R4703 AST.Ceq
+R4710 Coq.Init.Datatypes.Some
+R4715 Coq.Init.Datatypes.false
+R4723 AST.Cne
+R4730 Coq.Init.Datatypes.Some
+R4735 Coq.Init.Datatypes.true
+R4747 Coq.Init.Datatypes.None
+R4637 Integers.int
+R4621 AST.comparison
+R4831 Coq.Init.Datatypes.option
+R4838 Coq.Init.Datatypes.bool
+R4872 Op.Ccomp
+R4889 Coq.Lists.List "x :: y" list_scope
+R4881 Values.Vint
+R4900 Coq.Lists.List "x :: y" list_scope
+R4892 Values.Vint
+R4903 Coq.Lists.List.nil
+R4916 Coq.Init.Datatypes.Some
+R4922 Integers.cmp
+R4943 Op.Ccomp
+R4963 Coq.Lists.List "x :: y" list_scope
+R4952 Values.Vptr
+R4977 Coq.Lists.List "x :: y" list_scope
+R4966 Values.Vptr
+R4980 Coq.Lists.List.nil
+R4996 Values.eq_block
+R5044 Coq.Init.Datatypes.None
+R5016 Coq.Init.Datatypes.Some
+R5022 Integers.cmp
+R5053 Op.Ccomp
+R5073 Coq.Lists.List "x :: y" list_scope
+R5062 Values.Vptr
+R5084 Coq.Lists.List "x :: y" list_scope
+R5076 Values.Vint
+R5087 Coq.Lists.List.nil
+R5100 Op.eval_compare_null
+R5127 Op.Ccomp
+R5144 Coq.Lists.List "x :: y" list_scope
+R5136 Values.Vint
+R5158 Coq.Lists.List "x :: y" list_scope
+R5147 Values.Vptr
+R5161 Coq.Lists.List.nil
+R5174 Op.eval_compare_null
+R5201 Op.Ccompu
+R5219 Coq.Lists.List "x :: y" list_scope
+R5211 Values.Vint
+R5230 Coq.Lists.List "x :: y" list_scope
+R5222 Values.Vint
+R5233 Coq.Lists.List.nil
+R5246 Coq.Init.Datatypes.Some
+R5252 Integers.cmpu
+R5274 Op.Ccompu
+R5295 Coq.Lists.List "x :: y" list_scope
+R5284 Values.Vptr
+R5309 Coq.Lists.List "x :: y" list_scope
+R5298 Values.Vptr
+R5312 Coq.Lists.List.nil
+R5328 Values.eq_block
+R5377 Coq.Init.Datatypes.None
+R5348 Coq.Init.Datatypes.Some
+R5354 Integers.cmpu
+R5386 Op.Ccompu
+R5407 Coq.Lists.List "x :: y" list_scope
+R5396 Values.Vptr
+R5418 Coq.Lists.List "x :: y" list_scope
+R5410 Values.Vint
+R5421 Coq.Lists.List.nil
+R5434 Op.eval_compare_null
+R5461 Op.Ccompu
+R5479 Coq.Lists.List "x :: y" list_scope
+R5471 Values.Vint
+R5493 Coq.Lists.List "x :: y" list_scope
+R5482 Values.Vptr
+R5496 Coq.Lists.List.nil
+R5509 Op.eval_compare_null
+R5536 Op.Ccompimm
+R5558 Coq.Lists.List "x :: y" list_scope
+R5550 Values.Vint
+R5561 Coq.Lists.List.nil
+R5574 Coq.Init.Datatypes.Some
+R5580 Integers.cmp
+R5600 Op.Ccompimm
+R5625 Coq.Lists.List "x :: y" list_scope
+R5614 Values.Vptr
+R5628 Coq.Lists.List.nil
+R5641 Op.eval_compare_null
+R5667 Op.Ccompuimm
+R5690 Coq.Lists.List "x :: y" list_scope
+R5682 Values.Vint
+R5693 Coq.Lists.List.nil
+R5706 Coq.Init.Datatypes.Some
+R5712 Integers.cmpu
+R5733 Op.Ccompuimm
+R5759 Coq.Lists.List "x :: y" list_scope
+R5748 Values.Vptr
+R5762 Coq.Lists.List.nil
+R5775 Op.eval_compare_null
+R5801 Op.Ccompf
+R5821 Coq.Lists.List "x :: y" list_scope
+R5811 Values.Vfloat
+R5834 Coq.Lists.List "x :: y" list_scope
+R5824 Values.Vfloat
+R5837 Coq.Lists.List.nil
+R5850 Coq.Init.Datatypes.Some
+R5856 Floats.cmp
+R5879 Op.Cnotcompf
+R5902 Coq.Lists.List "x :: y" list_scope
+R5892 Values.Vfloat
+R5915 Coq.Lists.List "x :: y" list_scope
+R5905 Values.Vfloat
+R5918 Coq.Lists.List.nil
+R5931 Coq.Init.Datatypes.Some
+R5937 Coq.Bool.Bool.negb
+R5943 Floats.cmp
+R5967 Op.Cmaskzero
+R5988 Coq.Lists.List "x :: y" list_scope
+R5980 Values.Vint
+R5991 Coq.Lists.List.nil
+R6004 Coq.Init.Datatypes.Some
+R6010 Integers.eq
+R6032 Integers.zero
+R6018 Integers.and
+R6046 Op.Cmasknotzero
+R6070 Coq.Lists.List "x :: y" list_scope
+R6062 Values.Vint
+R6073 Coq.Lists.List.nil
+R6086 Coq.Init.Datatypes.Some
+R6092 Coq.Bool.Bool.negb
+R6098 Integers.eq
+R6120 Integers.zero
+R6106 Integers.and
+R6149 Coq.Init.Datatypes.None
+R4819 Coq.Lists.List.list
+R4824 Values.val
+R4803 Op.condition
+R6208 Coq.Init.Datatypes.option
+R6215 Values.val
+R6242 Values.Vptr
+R6254 Coq.Init.Datatypes.Some
+R6260 Values.Vptr
+R6268 Integers.add
+R6295 Coq.Init.Datatypes.None
+R6201 Integers.int
+R6188 Values.val
+R6411 Coq.Init.Datatypes.option
+R6418 Values.val
+R6449 Op.Omove
+R6458 Coq.Lists.List "x :: y" list_scope
+R6460 Coq.Lists.List.nil
+R6467 Coq.Init.Datatypes.Some
+R6479 Op.Ointconst
+R6492 Coq.Lists.List.nil
+R6499 Coq.Init.Datatypes.Some
+R6505 Values.Vint
+R6517 Op.Ofloatconst
+R6532 Coq.Lists.List.nil
+R6539 Coq.Init.Datatypes.Some
+R6545 Values.Vfloat
+R6559 Op.Oaddrsymbol
+R6578 Coq.Lists.List.nil
+R6597 Globalenvs.find_symbol
+R6634 Coq.Init.Datatypes.None
+R6642 Coq.Init.Datatypes.None
+R6655 Coq.Init.Datatypes.Some
+R6665 Coq.Init.Datatypes.Some
+R6671 Values.Vptr
+R6697 Op.Oaddrstack
+R6713 Coq.Lists.List.nil
+R6720 Op.offset_sp
+R6741 Op.Oundef
+R6749 Coq.Lists.List.nil
+R6756 Coq.Init.Datatypes.Some
+R6761 Values.Vundef
+R6772 Op.Ocast8signed
+R6794 Coq.Lists.List "x :: y" list_scope
+R6786 Values.Vint
+R6797 Coq.Lists.List.nil
+R6804 Coq.Init.Datatypes.Some
+R6810 Values.Vint
+R6816 Integers.cast8signed
+R6841 Op.Ocast16signed
+R6864 Coq.Lists.List "x :: y" list_scope
+R6856 Values.Vint
+R6867 Coq.Lists.List.nil
+R6874 Coq.Init.Datatypes.Some
+R6880 Values.Vint
+R6886 Integers.cast16signed
+R6912 Op.Oadd
+R6926 Coq.Lists.List "x :: y" list_scope
+R6918 Values.Vint
+R6937 Coq.Lists.List "x :: y" list_scope
+R6929 Values.Vint
+R6940 Coq.Lists.List.nil
+R6947 Coq.Init.Datatypes.Some
+R6953 Values.Vint
+R6959 Integers.add
+R6979 Op.Oadd
+R6993 Coq.Lists.List "x :: y" list_scope
+R6985 Values.Vint
+R7007 Coq.Lists.List "x :: y" list_scope
+R6996 Values.Vptr
+R7010 Coq.Lists.List.nil
+R7017 Coq.Init.Datatypes.Some
+R7023 Values.Vptr
+R7032 Integers.add
+R7052 Op.Oadd
+R7069 Coq.Lists.List "x :: y" list_scope
+R7058 Values.Vptr
+R7080 Coq.Lists.List "x :: y" list_scope
+R7072 Values.Vint
+R7083 Coq.Lists.List.nil
+R7090 Coq.Init.Datatypes.Some
+R7096 Values.Vptr
+R7105 Integers.add
+R7125 Op.Oaddimm
+R7144 Coq.Lists.List "x :: y" list_scope
+R7136 Values.Vint
+R7147 Coq.Lists.List.nil
+R7154 Coq.Init.Datatypes.Some
+R7160 Values.Vint
+R7166 Integers.add
+R7185 Op.Oaddimm
+R7207 Coq.Lists.List "x :: y" list_scope
+R7196 Values.Vptr
+R7210 Coq.Lists.List.nil
+R7217 Coq.Init.Datatypes.Some
+R7223 Values.Vptr
+R7232 Integers.add
+R7251 Op.Osub
+R7265 Coq.Lists.List "x :: y" list_scope
+R7257 Values.Vint
+R7276 Coq.Lists.List "x :: y" list_scope
+R7268 Values.Vint
+R7279 Coq.Lists.List.nil
+R7286 Coq.Init.Datatypes.Some
+R7292 Values.Vint
+R7298 Integers.sub
+R7318 Op.Osub
+R7335 Coq.Lists.List "x :: y" list_scope
+R7324 Values.Vptr
+R7346 Coq.Lists.List "x :: y" list_scope
+R7338 Values.Vint
+R7349 Coq.Lists.List.nil
+R7356 Coq.Init.Datatypes.Some
+R7362 Values.Vptr
+R7371 Integers.sub
+R7391 Op.Osub
+R7408 Coq.Lists.List "x :: y" list_scope
+R7397 Values.Vptr
+R7422 Coq.Lists.List "x :: y" list_scope
+R7411 Values.Vptr
+R7425 Coq.Lists.List.nil
+R7441 Values.eq_block
+R7494 Coq.Init.Datatypes.None
+R7461 Coq.Init.Datatypes.Some
+R7467 Values.Vint
+R7473 Integers.sub
+R7503 Op.Osubimm
+R7522 Coq.Lists.List "x :: y" list_scope
+R7514 Values.Vint
+R7525 Coq.Lists.List.nil
+R7532 Coq.Init.Datatypes.Some
+R7538 Values.Vint
+R7544 Integers.sub
+R7563 Op.Omul
+R7577 Coq.Lists.List "x :: y" list_scope
+R7569 Values.Vint
+R7588 Coq.Lists.List "x :: y" list_scope
+R7580 Values.Vint
+R7591 Coq.Lists.List.nil
+R7598 Coq.Init.Datatypes.Some
+R7604 Values.Vint
+R7610 Integers.mul
+R7630 Op.Omulimm
+R7649 Coq.Lists.List "x :: y" list_scope
+R7641 Values.Vint
+R7652 Coq.Lists.List.nil
+R7659 Coq.Init.Datatypes.Some
+R7665 Values.Vint
+R7671 Integers.mul
+R7690 Op.Odiv
+R7704 Coq.Lists.List "x :: y" list_scope
+R7696 Values.Vint
+R7715 Coq.Lists.List "x :: y" list_scope
+R7707 Values.Vint
+R7718 Coq.Lists.List.nil
+R7734 Integers.eq
+R7744 Integers.zero
+R7768 Coq.Init.Datatypes.Some
+R7774 Values.Vint
+R7780 Integers.divs
+R7758 Coq.Init.Datatypes.None
+R7801 Op.Odivu
+R7816 Coq.Lists.List "x :: y" list_scope
+R7808 Values.Vint
+R7827 Coq.Lists.List "x :: y" list_scope
+R7819 Values.Vint
+R7830 Coq.Lists.List.nil
+R7846 Integers.eq
+R7856 Integers.zero
+R7880 Coq.Init.Datatypes.Some
+R7886 Values.Vint
+R7892 Integers.divu
+R7870 Coq.Init.Datatypes.None
+R7913 Op.Oand
+R7927 Coq.Lists.List "x :: y" list_scope
+R7919 Values.Vint
+R7938 Coq.Lists.List "x :: y" list_scope
+R7930 Values.Vint
+R7941 Coq.Lists.List.nil
+R7948 Coq.Init.Datatypes.Some
+R7954 Values.Vint
+R7960 Integers.and
+R7980 Op.Oandimm
+R7999 Coq.Lists.List "x :: y" list_scope
+R7991 Values.Vint
+R8002 Coq.Lists.List.nil
+R8009 Coq.Init.Datatypes.Some
+R8015 Values.Vint
+R8021 Integers.and
+R8040 Op.Oor
+R8053 Coq.Lists.List "x :: y" list_scope
+R8045 Values.Vint
+R8064 Coq.Lists.List "x :: y" list_scope
+R8056 Values.Vint
+R8067 Coq.Lists.List.nil
+R8074 Coq.Init.Datatypes.Some
+R8080 Values.Vint
+R8086 Integers.or
+R8105 Op.Oorimm
+R8123 Coq.Lists.List "x :: y" list_scope
+R8115 Values.Vint
+R8126 Coq.Lists.List.nil
+R8133 Coq.Init.Datatypes.Some
+R8139 Values.Vint
+R8145 Integers.or
+R8163 Op.Oxor
+R8177 Coq.Lists.List "x :: y" list_scope
+R8169 Values.Vint
+R8188 Coq.Lists.List "x :: y" list_scope
+R8180 Values.Vint
+R8191 Coq.Lists.List.nil
+R8198 Coq.Init.Datatypes.Some
+R8204 Values.Vint
+R8210 Integers.xor
+R8230 Op.Oxorimm
+R8249 Coq.Lists.List "x :: y" list_scope
+R8241 Values.Vint
+R8252 Coq.Lists.List.nil
+R8259 Coq.Init.Datatypes.Some
+R8265 Values.Vint
+R8271 Integers.xor
+R8290 Op.Onand
+R8305 Coq.Lists.List "x :: y" list_scope
+R8297 Values.Vint
+R8316 Coq.Lists.List "x :: y" list_scope
+R8308 Values.Vint
+R8319 Coq.Lists.List.nil
+R8326 Coq.Init.Datatypes.Some
+R8332 Values.Vint
+R8338 Integers.not
+R8347 Integers.and
+R8368 Op.Onor
+R8382 Coq.Lists.List "x :: y" list_scope
+R8374 Values.Vint
+R8393 Coq.Lists.List "x :: y" list_scope
+R8385 Values.Vint
+R8396 Coq.Lists.List.nil
+R8403 Coq.Init.Datatypes.Some
+R8409 Values.Vint
+R8415 Integers.not
+R8424 Integers.or
+R8444 Op.Onxor
+R8459 Coq.Lists.List "x :: y" list_scope
+R8451 Values.Vint
+R8470 Coq.Lists.List "x :: y" list_scope
+R8462 Values.Vint
+R8473 Coq.Lists.List.nil
+R8480 Coq.Init.Datatypes.Some
+R8486 Values.Vint
+R8492 Integers.not
+R8501 Integers.xor
+R8522 Op.Oshl
+R8536 Coq.Lists.List "x :: y" list_scope
+R8528 Values.Vint
+R8547 Coq.Lists.List "x :: y" list_scope
+R8539 Values.Vint
+R8550 Coq.Lists.List.nil
+R8566 Integers.ltu
+R8578 Integers.repr
+R8629 Coq.Init.Datatypes.None
+R8596 Coq.Init.Datatypes.Some
+R8602 Values.Vint
+R8608 Integers.shl
+R8638 Op.Oshr
+R8652 Coq.Lists.List "x :: y" list_scope
+R8644 Values.Vint
+R8663 Coq.Lists.List "x :: y" list_scope
+R8655 Values.Vint
+R8666 Coq.Lists.List.nil
+R8682 Integers.ltu
+R8694 Integers.repr
+R8745 Coq.Init.Datatypes.None
+R8712 Coq.Init.Datatypes.Some
+R8718 Values.Vint
+R8724 Integers.shr
+R8754 Op.Oshrimm
+R8773 Coq.Lists.List "x :: y" list_scope
+R8765 Values.Vint
+R8776 Coq.Lists.List.nil
+R8792 Integers.ltu
+R8803 Integers.repr
+R8853 Coq.Init.Datatypes.None
+R8821 Coq.Init.Datatypes.Some
+R8827 Values.Vint
+R8833 Integers.shr
+R8862 Op.Oshrximm
+R8882 Coq.Lists.List "x :: y" list_scope
+R8874 Values.Vint
+R8885 Coq.Lists.List.nil
+R8901 Integers.ltu
+R8912 Integers.repr
+R8963 Coq.Init.Datatypes.None
+R8930 Coq.Init.Datatypes.Some
+R8936 Values.Vint
+R8942 Integers.shrx
+R8972 Op.Oshru
+R8987 Coq.Lists.List "x :: y" list_scope
+R8979 Values.Vint
+R8998 Coq.Lists.List "x :: y" list_scope
+R8990 Values.Vint
+R9001 Coq.Lists.List.nil
+R9017 Integers.ltu
+R9029 Integers.repr
+R9081 Coq.Init.Datatypes.None
+R9047 Coq.Init.Datatypes.Some
+R9053 Values.Vint
+R9059 Integers.shru
+R9090 Op.Orolm
+R9117 Coq.Lists.List "x :: y" list_scope
+R9109 Values.Vint
+R9120 Coq.Lists.List.nil
+R9133 Coq.Init.Datatypes.Some
+R9139 Values.Vint
+R9145 Integers.rolm
+R9175 Op.Onegf
+R9192 Coq.Lists.List "x :: y" list_scope
+R9182 Values.Vfloat
+R9195 Coq.Lists.List.nil
+R9202 Coq.Init.Datatypes.Some
+R9208 Values.Vfloat
+R9216 Floats.neg
+R9235 Op.Oabsf
+R9252 Coq.Lists.List "x :: y" list_scope
+R9242 Values.Vfloat
+R9255 Coq.Lists.List.nil
+R9262 Coq.Init.Datatypes.Some
+R9268 Values.Vfloat
+R9276 Floats.abs
+R9295 Op.Oaddf
+R9312 Coq.Lists.List "x :: y" list_scope
+R9302 Values.Vfloat
+R9325 Coq.Lists.List "x :: y" list_scope
+R9315 Values.Vfloat
+R9328 Coq.Lists.List.nil
+R9335 Coq.Init.Datatypes.Some
+R9341 Values.Vfloat
+R9349 Floats.add
+R9371 Op.Osubf
+R9388 Coq.Lists.List "x :: y" list_scope
+R9378 Values.Vfloat
+R9401 Coq.Lists.List "x :: y" list_scope
+R9391 Values.Vfloat
+R9404 Coq.Lists.List.nil
+R9411 Coq.Init.Datatypes.Some
+R9417 Values.Vfloat
+R9425 Floats.sub
+R9447 Op.Omulf
+R9464 Coq.Lists.List "x :: y" list_scope
+R9454 Values.Vfloat
+R9477 Coq.Lists.List "x :: y" list_scope
+R9467 Values.Vfloat
+R9480 Coq.Lists.List.nil
+R9487 Coq.Init.Datatypes.Some
+R9493 Values.Vfloat
+R9501 Floats.mul
+R9523 Op.Odivf
+R9540 Coq.Lists.List "x :: y" list_scope
+R9530 Values.Vfloat
+R9553 Coq.Lists.List "x :: y" list_scope
+R9543 Values.Vfloat
+R9556 Coq.Lists.List.nil
+R9563 Coq.Init.Datatypes.Some
+R9569 Values.Vfloat
+R9577 Floats.div
+R9599 Op.Omuladdf
+R9619 Coq.Lists.List "x :: y" list_scope
+R9609 Values.Vfloat
+R9632 Coq.Lists.List "x :: y" list_scope
+R9622 Values.Vfloat
+R9645 Coq.Lists.List "x :: y" list_scope
+R9635 Values.Vfloat
+R9648 Coq.Lists.List.nil
+R9661 Coq.Init.Datatypes.Some
+R9667 Values.Vfloat
+R9675 Floats.add
+R9686 Floats.mul
+R9712 Op.Omulsubf
+R9732 Coq.Lists.List "x :: y" list_scope
+R9722 Values.Vfloat
+R9745 Coq.Lists.List "x :: y" list_scope
+R9735 Values.Vfloat
+R9758 Coq.Lists.List "x :: y" list_scope
+R9748 Values.Vfloat
+R9761 Coq.Lists.List.nil
+R9774 Coq.Init.Datatypes.Some
+R9780 Values.Vfloat
+R9788 Floats.sub
+R9799 Floats.mul
+R9825 Op.Osingleoffloat
+R9851 Coq.Lists.List "x :: y" list_scope
+R9841 Values.Vfloat
+R9854 Coq.Lists.List.nil
+R9867 Coq.Init.Datatypes.Some
+R9873 Values.Vfloat
+R9881 Floats.singleoffloat
+R9910 Op.Ointoffloat
+R9933 Coq.Lists.List "x :: y" list_scope
+R9923 Values.Vfloat
+R9936 Coq.Lists.List.nil
+R9950 Coq.Init.Datatypes.Some
+R9956 Values.Vint
+R9962 Floats.intoffloat
+R9988 Op.Ofloatofint
+R10009 Coq.Lists.List "x :: y" list_scope
+R10001 Values.Vint
+R10012 Coq.Lists.List.nil
+R10026 Coq.Init.Datatypes.Some
+R10032 Values.Vfloat
+R10040 Floats.floatofint
+R10066 Op.Ofloatofintu
+R10088 Coq.Lists.List "x :: y" list_scope
+R10080 Values.Vint
+R10091 Coq.Lists.List.nil
+R10105 Coq.Init.Datatypes.Some
+R10111 Values.Vfloat
+R10119 Floats.floatofintu
+R10146 Op.Ocmp
+R10171 Op.eval_condition
+R10204 Coq.Init.Datatypes.None
+R10212 Coq.Init.Datatypes.None
+R10225 Coq.Init.Datatypes.Some
+R10230 Coq.Init.Datatypes.false
+R10239 Coq.Init.Datatypes.Some
+R10244 Values.Vfalse
+R10259 Coq.Init.Datatypes.Some
+R10264 Coq.Init.Datatypes.true
+R10272 Coq.Init.Datatypes.Some
+R10277 Values.Vtrue
+R10305 Coq.Init.Datatypes.None
+R6399 Coq.Lists.List.list
+R6404 Values.val
+R6383 Op.operation
+R6369 Values.val
+R6354 Globalenvs.t
+R10425 Coq.Init.Datatypes.option
+R10432 Values.val
+R10465 Op.Aindexed
+R10488 Coq.Lists.List "x :: y" list_scope
+R10477 Values.Vptr
+R10491 Coq.Lists.List.nil
+R10504 Coq.Init.Datatypes.Some
+R10510 Values.Vptr
+R10519 Integers.add
+R10538 Op.Aindexed2
+R10560 Coq.Lists.List "x :: y" list_scope
+R10549 Values.Vptr
+R10571 Coq.Lists.List "x :: y" list_scope
+R10563 Values.Vint
+R10574 Coq.Lists.List.nil
+R10587 Coq.Init.Datatypes.Some
+R10593 Values.Vptr
+R10602 Integers.add
+R10622 Op.Aindexed2
+R10641 Coq.Lists.List "x :: y" list_scope
+R10633 Values.Vint
+R10655 Coq.Lists.List "x :: y" list_scope
+R10644 Values.Vptr
+R10658 Coq.Lists.List.nil
+R10671 Coq.Init.Datatypes.Some
+R10677 Values.Vptr
+R10686 Integers.add
+R10706 Op.Aglobal
+R10721 Coq.Lists.List.nil
+R10740 Globalenvs.find_symbol
+R10777 Coq.Init.Datatypes.None
+R10785 Coq.Init.Datatypes.None
+R10798 Coq.Init.Datatypes.Some
+R10808 Coq.Init.Datatypes.Some
+R10814 Values.Vptr
+R10840 Op.Abased
+R10862 Coq.Lists.List "x :: y" list_scope
+R10854 Values.Vint
+R10865 Coq.Lists.List.nil
+R10884 Globalenvs.find_symbol
+R10921 Coq.Init.Datatypes.None
+R10929 Coq.Init.Datatypes.None
+R10942 Coq.Init.Datatypes.Some
+R10952 Coq.Init.Datatypes.Some
+R10958 Values.Vptr
+R10966 Integers.add
+R10997 Op.Ainstack
+R11011 Coq.Lists.List.nil
+R11024 Op.offset_sp
+R11053 Coq.Init.Datatypes.None
+R10413 Coq.Lists.List.list
+R10418 Values.val
+R10396 Op.addressing
+R10380 Values.val
+R10365 Globalenvs.t
+R11113 Op.condition
+R11148 Op.Ccomp
+R11159 Op.Ccomp
+R11165 AST.negate_comparison
+R11190 Op.Ccompu
+R11202 Op.Ccompu
+R11209 AST.negate_comparison
+R11234 Op.Ccompimm
+R11250 Op.Ccompimm
+R11260 AST.negate_comparison
+R11287 Op.Ccompuimm
+R11304 Op.Ccompuimm
+R11315 AST.negate_comparison
+R11342 Op.Ccompf
+R11354 Op.Cnotcompf
+R11370 Op.Cnotcompf
+R11385 Op.Ccompf
+R11398 Op.Cmaskzero
+R11413 Op.Cmasknotzero
+R11432 Op.Cmasknotzero
+R11450 Op.Cmaskzero
+R11101 Op.condition
+R11553 Coq.Init.Logic "x = y" type_scope
+R11526 Coq.Lists.List.nil
+R11539 Coq.Lists.List "x :: y" list_scope
+R11555 Coq.Init.Datatypes.Some
+R11711 Coq.Init.Logic "x = y" type_scope
+R11649 Values.Vundef
+R11663 Values.Vint
+R11677 Values.Vfloat
+R11693 Values.Vptr
+R11713 Coq.Init.Datatypes.Some
+R11800 Coq.Init.Logic "x = y" type_scope
+R11793 Coq.Init.Datatypes.Some
+R11802 Coq.Init.Datatypes.Some
+R12020 Coq.Init.Logic "x = y" type_scope
+R11978 Op.eval_compare_null
+R11997 AST.negate_comparison
+R12022 Coq.Init.Datatypes.Some
+R12028 Coq.Bool.Bool.negb
+R11964 Coq.Init.Logic "x = y" type_scope
+R11942 Op.eval_compare_null
+R11966 Coq.Init.Datatypes.Some
+R12096 Integers.eq
+R12105 Integers.zero
+R12096 Integers.eq
+R12105 Integers.zero
+R12380 Coq.Init.Logic "x = y" type_scope
+R12338 Op.eval_condition
+R12354 Op.negate_condition
+R12382 Coq.Init.Datatypes.Some
+R12388 Coq.Bool.Bool.negb
+R12324 Coq.Init.Logic "x = y" type_scope
+R12301 Op.eval_condition
+R12326 Coq.Init.Datatypes.Some
+R12292 Coq.Init.Datatypes.bool
+R12278 Coq.Lists.List.list
+R12283 Values.val
+R12262 Op.condition
+R12483 Integers.negate_cmp
+R12483 Integers.negate_cmp
+R12513 Op.eval_negate_compare_null
+R12513 Op.eval_negate_compare_null
+R12553 Op.eval_negate_compare_null
+R12553 Op.eval_negate_compare_null
+R12597 Values.eq_block
+R12597 Values.eq_block
+R12622 Integers.negate_cmp
+R12622 Integers.negate_cmp
+R12676 Integers.negate_cmpu
+R12676 Integers.negate_cmpu
+R12707 Op.eval_negate_compare_null
+R12707 Op.eval_negate_compare_null
+R12747 Op.eval_negate_compare_null
+R12747 Op.eval_negate_compare_null
+R12791 Values.eq_block
+R12791 Values.eq_block
+R12816 Integers.negate_cmpu
+R12816 Integers.negate_cmpu
+R12871 Integers.negate_cmp
+R12871 Integers.negate_cmp
+R12901 Op.eval_negate_compare_null
+R12901 Op.eval_negate_compare_null
+R12943 Integers.negate_cmpu
+R12943 Integers.negate_cmpu
+R12974 Op.eval_negate_compare_null
+R12974 Op.eval_negate_compare_null
+R13024 Coq.Bool.Bool.negb_elim
+R13024 Coq.Bool.Bool.negb_elim
+R13059 Coq.Bool.Bool.negb_elim
+R13059 Coq.Bool.Bool.negb_elim
+R13139 Globalenvs.t
+R13164 Globalenvs.t
+R13248 Coq.Init.Logic "x = y" type_scope
+R13225 Globalenvs.find_symbol
+R13250 Globalenvs.find_symbol
+R13217 AST.ident
+R13356 Coq.Init.Logic "x = y" type_scope
+R13328 Op.eval_operation
+R13358 Op.eval_operation
+R13580 Coq.Init.Logic "x = y" type_scope
+R13549 Op.eval_addressing
+R13582 Op.eval_addressing
+R13854 Coq.Init.Datatypes.option
+R13892 Op.Omove
+R13903 Coq.Lists.List "x :: y" list_scope
+R13906 Coq.Lists.List.nil
+R13913 Coq.Init.Datatypes.Some
+R13934 Coq.Init.Datatypes.None
+R13844 Coq.Lists.List.list
+R13826 Op.operation
+R14090 Coq.Init.Logic "A /\ B" type_scope
+R14082 Coq.Init.Logic "x = y" type_scope
+R14084 Op.Omove
+R14098 Coq.Init.Logic "x = y" type_scope
+R14102 Coq.Lists.List "x :: y" list_scope
+R14105 Coq.Lists.List.nil
+R14065 Coq.Init.Logic "x = y" type_scope
+R14039 Op.is_move_operation
+R14067 Coq.Init.Datatypes.Some
+R14021 Coq.Lists.List.list
+R14003 Op.operation
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R14381 Coq.Lists.List.list
+R14386 AST.typ
+R14412 Op.Ccomp
+R14428 Coq.Lists.List "x :: y" list_scope
+R14423 AST.Tint
+R14436 Coq.Lists.List "x :: y" list_scope
+R14431 AST.Tint
+R14439 Coq.Lists.List.nil
+R14447 Op.Ccompu
+R14464 Coq.Lists.List "x :: y" list_scope
+R14459 AST.Tint
+R14472 Coq.Lists.List "x :: y" list_scope
+R14467 AST.Tint
+R14475 Coq.Lists.List.nil
+R14483 Op.Ccompimm
+R14504 Coq.Lists.List "x :: y" list_scope
+R14499 AST.Tint
+R14507 Coq.Lists.List.nil
+R14515 Op.Ccompuimm
+R14537 Coq.Lists.List "x :: y" list_scope
+R14532 AST.Tint
+R14540 Coq.Lists.List.nil
+R14548 Op.Ccompf
+R14567 Coq.Lists.List "x :: y" list_scope
+R14560 AST.Tfloat
+R14577 Coq.Lists.List "x :: y" list_scope
+R14570 AST.Tfloat
+R14580 Coq.Lists.List.nil
+R14588 Op.Cnotcompf
+R14610 Coq.Lists.List "x :: y" list_scope
+R14603 AST.Tfloat
+R14620 Coq.Lists.List "x :: y" list_scope
+R14613 AST.Tfloat
+R14623 Coq.Lists.List.nil
+R14631 Op.Cmaskzero
+R14651 Coq.Lists.List "x :: y" list_scope
+R14646 AST.Tint
+R14654 Coq.Lists.List.nil
+R14662 Op.Cmasknotzero
+R14685 Coq.Lists.List "x :: y" list_scope
+R14680 AST.Tint
+R14688 Coq.Lists.List.nil
+R14368 Op.condition
+R14756 Coq.Init.Datatypes "x * y" type_scope
+R14747 Coq.Lists.List.list
+R14752 AST.typ
+R14758 AST.typ
+R14785 Op.Omove
+R14794 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R14795 Coq.Lists.List.nil
+R14800 AST.Tint
+R14836 Op.Ointconst
+R14851 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R14852 Coq.Lists.List.nil
+R14857 AST.Tint
+R14867 Op.Ofloatconst
+R14884 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R14885 Coq.Lists.List.nil
+R14890 AST.Tfloat
+R14902 Op.Oaddrsymbol
+R14921 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R14922 Coq.Lists.List.nil
+R14927 AST.Tint
+R14937 Op.Oaddrstack
+R14953 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R14954 Coq.Lists.List.nil
+R14959 AST.Tint
+R14969 Op.Oundef
+R14979 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R14980 Coq.Lists.List.nil
+R14985 AST.Tint
+R15020 Op.Ocast8signed
+R15036 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R15042 Coq.Lists.List "x :: y" list_scope
+R15037 AST.Tint
+R15045 Coq.Lists.List.nil
+R15050 AST.Tint
+R15060 Op.Ocast16signed
+R15077 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R15083 Coq.Lists.List "x :: y" list_scope
+R15078 AST.Tint
+R15086 Coq.Lists.List.nil
+R15091 AST.Tint
+R15101 Op.Oadd
+R15109 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R15115 Coq.Lists.List "x :: y" list_scope
+R15110 AST.Tint
+R15123 Coq.Lists.List "x :: y" list_scope
+R15118 AST.Tint
+R15126 Coq.Lists.List.nil
+R15131 AST.Tint
+R15141 Op.Oaddimm
+R15154 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R15160 Coq.Lists.List "x :: y" list_scope
+R15155 AST.Tint
+R15163 Coq.Lists.List.nil
+R15168 AST.Tint
+R15178 Op.Osub
+R15186 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R15192 Coq.Lists.List "x :: y" list_scope
+R15187 AST.Tint
+R15200 Coq.Lists.List "x :: y" list_scope
+R15195 AST.Tint
+R15203 Coq.Lists.List.nil
+R15208 AST.Tint
+R15218 Op.Osubimm
+R15231 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R15237 Coq.Lists.List "x :: y" list_scope
+R15232 AST.Tint
+R15240 Coq.Lists.List.nil
+R15245 AST.Tint
+R15255 Op.Omul
+R15263 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R15269 Coq.Lists.List "x :: y" list_scope
+R15264 AST.Tint
+R15277 Coq.Lists.List "x :: y" list_scope
+R15272 AST.Tint
+R15280 Coq.Lists.List.nil
+R15285 AST.Tint
+R15295 Op.Omulimm
+R15308 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R15314 Coq.Lists.List "x :: y" list_scope
+R15309 AST.Tint
+R15317 Coq.Lists.List.nil
+R15322 AST.Tint
+R15332 Op.Odiv
+R15340 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R15346 Coq.Lists.List "x :: y" list_scope
+R15341 AST.Tint
+R15354 Coq.Lists.List "x :: y" list_scope
+R15349 AST.Tint
+R15357 Coq.Lists.List.nil
+R15362 AST.Tint
+R15372 Op.Odivu
+R15381 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R15387 Coq.Lists.List "x :: y" list_scope
+R15382 AST.Tint
+R15395 Coq.Lists.List "x :: y" list_scope
+R15390 AST.Tint
+R15398 Coq.Lists.List.nil
+R15403 AST.Tint
+R15413 Op.Oand
+R15421 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R15427 Coq.Lists.List "x :: y" list_scope
+R15422 AST.Tint
+R15435 Coq.Lists.List "x :: y" list_scope
+R15430 AST.Tint
+R15438 Coq.Lists.List.nil
+R15443 AST.Tint
+R15453 Op.Oandimm
+R15466 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R15472 Coq.Lists.List "x :: y" list_scope
+R15467 AST.Tint
+R15475 Coq.Lists.List.nil
+R15480 AST.Tint
+R15490 Op.Oor
+R15497 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R15503 Coq.Lists.List "x :: y" list_scope
+R15498 AST.Tint
+R15511 Coq.Lists.List "x :: y" list_scope
+R15506 AST.Tint
+R15514 Coq.Lists.List.nil
+R15519 AST.Tint
+R15529 Op.Oorimm
+R15541 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R15547 Coq.Lists.List "x :: y" list_scope
+R15542 AST.Tint
+R15550 Coq.Lists.List.nil
+R15555 AST.Tint
+R15565 Op.Oxor
+R15573 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R15579 Coq.Lists.List "x :: y" list_scope
+R15574 AST.Tint
+R15587 Coq.Lists.List "x :: y" list_scope
+R15582 AST.Tint
+R15590 Coq.Lists.List.nil
+R15595 AST.Tint
+R15605 Op.Oxorimm
+R15618 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R15624 Coq.Lists.List "x :: y" list_scope
+R15619 AST.Tint
+R15627 Coq.Lists.List.nil
+R15632 AST.Tint
+R15642 Op.Onand
+R15651 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R15657 Coq.Lists.List "x :: y" list_scope
+R15652 AST.Tint
+R15665 Coq.Lists.List "x :: y" list_scope
+R15660 AST.Tint
+R15668 Coq.Lists.List.nil
+R15673 AST.Tint
+R15683 Op.Onor
+R15691 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R15697 Coq.Lists.List "x :: y" list_scope
+R15692 AST.Tint
+R15705 Coq.Lists.List "x :: y" list_scope
+R15700 AST.Tint
+R15708 Coq.Lists.List.nil
+R15713 AST.Tint
+R15723 Op.Onxor
+R15732 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R15738 Coq.Lists.List "x :: y" list_scope
+R15733 AST.Tint
+R15746 Coq.Lists.List "x :: y" list_scope
+R15741 AST.Tint
+R15749 Coq.Lists.List.nil
+R15754 AST.Tint
+R15764 Op.Oshl
+R15772 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R15778 Coq.Lists.List "x :: y" list_scope
+R15773 AST.Tint
+R15786 Coq.Lists.List "x :: y" list_scope
+R15781 AST.Tint
+R15789 Coq.Lists.List.nil
+R15794 AST.Tint
+R15804 Op.Oshr
+R15812 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R15818 Coq.Lists.List "x :: y" list_scope
+R15813 AST.Tint
+R15826 Coq.Lists.List "x :: y" list_scope
+R15821 AST.Tint
+R15829 Coq.Lists.List.nil
+R15834 AST.Tint
+R15844 Op.Oshrimm
+R15857 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R15863 Coq.Lists.List "x :: y" list_scope
+R15858 AST.Tint
+R15866 Coq.Lists.List.nil
+R15871 AST.Tint
+R15881 Op.Oshrximm
+R15895 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R15901 Coq.Lists.List "x :: y" list_scope
+R15896 AST.Tint
+R15904 Coq.Lists.List.nil
+R15909 AST.Tint
+R15919 Op.Oshru
+R15928 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R15934 Coq.Lists.List "x :: y" list_scope
+R15929 AST.Tint
+R15942 Coq.Lists.List "x :: y" list_scope
+R15937 AST.Tint
+R15945 Coq.Lists.List.nil
+R15950 AST.Tint
+R15960 Op.Orolm
+R15973 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R15979 Coq.Lists.List "x :: y" list_scope
+R15974 AST.Tint
+R15982 Coq.Lists.List.nil
+R15987 AST.Tint
+R15997 Op.Onegf
+R16006 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R16014 Coq.Lists.List "x :: y" list_scope
+R16007 AST.Tfloat
+R16017 Coq.Lists.List.nil
+R16022 AST.Tfloat
+R16034 Op.Oabsf
+R16043 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R16051 Coq.Lists.List "x :: y" list_scope
+R16044 AST.Tfloat
+R16054 Coq.Lists.List.nil
+R16059 AST.Tfloat
+R16071 Op.Oaddf
+R16080 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R16088 Coq.Lists.List "x :: y" list_scope
+R16081 AST.Tfloat
+R16098 Coq.Lists.List "x :: y" list_scope
+R16091 AST.Tfloat
+R16101 Coq.Lists.List.nil
+R16106 AST.Tfloat
+R16118 Op.Osubf
+R16127 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R16135 Coq.Lists.List "x :: y" list_scope
+R16128 AST.Tfloat
+R16145 Coq.Lists.List "x :: y" list_scope
+R16138 AST.Tfloat
+R16148 Coq.Lists.List.nil
+R16153 AST.Tfloat
+R16165 Op.Omulf
+R16174 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R16182 Coq.Lists.List "x :: y" list_scope
+R16175 AST.Tfloat
+R16192 Coq.Lists.List "x :: y" list_scope
+R16185 AST.Tfloat
+R16195 Coq.Lists.List.nil
+R16200 AST.Tfloat
+R16212 Op.Odivf
+R16221 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R16229 Coq.Lists.List "x :: y" list_scope
+R16222 AST.Tfloat
+R16239 Coq.Lists.List "x :: y" list_scope
+R16232 AST.Tfloat
+R16242 Coq.Lists.List.nil
+R16247 AST.Tfloat
+R16259 Op.Omuladdf
+R16271 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R16279 Coq.Lists.List "x :: y" list_scope
+R16272 AST.Tfloat
+R16289 Coq.Lists.List "x :: y" list_scope
+R16282 AST.Tfloat
+R16299 Coq.Lists.List "x :: y" list_scope
+R16292 AST.Tfloat
+R16302 Coq.Lists.List.nil
+R16307 AST.Tfloat
+R16319 Op.Omulsubf
+R16331 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R16339 Coq.Lists.List "x :: y" list_scope
+R16332 AST.Tfloat
+R16349 Coq.Lists.List "x :: y" list_scope
+R16342 AST.Tfloat
+R16359 Coq.Lists.List "x :: y" list_scope
+R16352 AST.Tfloat
+R16362 Coq.Lists.List.nil
+R16367 AST.Tfloat
+R16379 Op.Osingleoffloat
+R16397 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R16405 Coq.Lists.List "x :: y" list_scope
+R16398 AST.Tfloat
+R16408 Coq.Lists.List.nil
+R16413 AST.Tfloat
+R16425 Op.Ointoffloat
+R16440 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R16448 Coq.Lists.List "x :: y" list_scope
+R16441 AST.Tfloat
+R16451 Coq.Lists.List.nil
+R16456 AST.Tint
+R16466 Op.Ofloatofint
+R16481 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R16487 Coq.Lists.List "x :: y" list_scope
+R16482 AST.Tint
+R16490 Coq.Lists.List.nil
+R16495 AST.Tfloat
+R16507 Op.Ofloatofintu
+R16523 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R16529 Coq.Lists.List "x :: y" list_scope
+R16524 AST.Tint
+R16532 Coq.Lists.List.nil
+R16537 AST.Tfloat
+R16549 Op.Ocmp
+R16559 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R16560 Op.type_of_condition
+R16581 AST.Tint
+R14734 Op.operation
+R16646 Coq.Lists.List.list
+R16651 AST.typ
+R16680 Op.Aindexed
+R16699 Coq.Lists.List "x :: y" list_scope
+R16694 AST.Tint
+R16702 Coq.Lists.List.nil
+R16710 Op.Aindexed2
+R16728 Coq.Lists.List "x :: y" list_scope
+R16723 AST.Tint
+R16736 Coq.Lists.List "x :: y" list_scope
+R16731 AST.Tint
+R16739 Coq.Lists.List.nil
+R16747 Op.Aglobal
+R16762 Coq.Lists.List.nil
+R16770 Op.Abased
+R16789 Coq.Lists.List "x :: y" list_scope
+R16784 AST.Tint
+R16792 Coq.Lists.List.nil
+R16800 Op.Ainstack
+R16814 Coq.Lists.List.nil
+R16632 Op.addressing
+R16871 AST.typ
+R16897 AST.Mint8signed
+R16912 AST.Tint
+R16921 AST.Mint8unsigned
+R16938 AST.Tint
+R16947 AST.Mint16signed
+R16963 AST.Tint
+R16972 AST.Mint16unsigned
+R16990 AST.Tint
+R16999 AST.Mint32
+R17009 AST.Tint
+R17018 AST.Mfloat32
+R17030 AST.Tfloat
+R17041 AST.Mfloat64
+R17053 AST.Tfloat
+R16855 AST.memory_chunk
+R17120 Globalenvs.t
+R17261 Values.has_type
+R17277 Coq.Init.Datatypes.snd
+R17282 Op.type_of_operation
+R17247 Coq.Init.Logic "x = y" type_scope
+R17218 Op.eval_operation
+R17249 Coq.Init.Datatypes.Some
+R17203 Coq.Init.Logic "x <> y" type_scope
+R17206 Op.Oundef
+R17188 Coq.Init.Logic "x <> y" type_scope
+R17191 Op.Omove
+R17383 Coq.Init.Logic.I
+R17383 Coq.Init.Logic.I
+R17383 Coq.Init.Logic.I
+R17383 Coq.Init.Logic.I
+R17383 Coq.Init.Logic.I
+R17383 Coq.Init.Logic.I
+R17383 Coq.Init.Logic.I
+R17383 Coq.Init.Logic.I
+R17383 Coq.Init.Logic.I
+R17383 Coq.Init.Logic.I
+R17383 Coq.Init.Logic.I
+R17383 Coq.Init.Logic.I
+R17383 Coq.Init.Logic.I
+R17383 Coq.Init.Logic.I
+R17383 Coq.Init.Logic.I
+R17383 Coq.Init.Logic.I
+R17383 Coq.Init.Logic.I
+R17383 Coq.Init.Logic.I
+R17383 Coq.Init.Logic.I
+R17383 Coq.Init.Logic.I
+R17383 Coq.Init.Logic.I
+R17383 Coq.Init.Logic.I
+R17383 Coq.Init.Logic.I
+R17383 Coq.Init.Logic.I
+R17383 Coq.Init.Logic.I
+R17383 Coq.Init.Logic.I
+R17383 Coq.Init.Logic.I
+R17383 Coq.Init.Logic.I
+R17383 Coq.Init.Logic.I
+R17383 Coq.Init.Logic.I
+R17383 Coq.Init.Logic.I
+R17383 Coq.Init.Logic.I
+R17383 Coq.Init.Logic.I
+R17383 Coq.Init.Logic.I
+R17383 Coq.Init.Logic.I
+R17383 Coq.Init.Logic.I
+R17383 Coq.Init.Logic.I
+R17383 Coq.Init.Logic.I
+R17383 Coq.Init.Logic.I
+R17383 Coq.Init.Logic.I
+R17383 Coq.Init.Logic.I
+R17383 Coq.Init.Logic.I
+R17383 Coq.Init.Logic.I
+R17383 Coq.Init.Logic.I
+R17383 Coq.Init.Logic.I
+R17383 Coq.Init.Logic.I
+R17383 Coq.Init.Logic.I
+R17383 Coq.Init.Logic.I
+R17383 Coq.Init.Logic.I
+R17383 Coq.Init.Logic.I
+R17412 Globalenvs.find_symbol
+R17476 Coq.Init.Logic.I
+R17412 Globalenvs.find_symbol
+R17476 Coq.Init.Logic.I
+R17565 Coq.Init.Logic.I
+R17565 Coq.Init.Logic.I
+R17580 Values.eq_block
+R17580 Values.eq_block
+R17632 Coq.Init.Logic.I
+R17632 Coq.Init.Logic.I
+R17663 Integers.eq
+R17673 Integers.zero
+R17663 Integers.eq
+R17673 Integers.zero
+R17737 Coq.Init.Logic.I
+R17737 Coq.Init.Logic.I
+R17752 Integers.eq
+R17762 Integers.zero
+R17752 Integers.eq
+R17762 Integers.zero
+R17826 Coq.Init.Logic.I
+R17826 Coq.Init.Logic.I
+R17841 Integers.ltu
+R17853 Integers.repr
+R17841 Integers.ltu
+R17853 Integers.repr
+R17906 Coq.Init.Logic.I
+R17906 Coq.Init.Logic.I
+R17935 Integers.ltu
+R17947 Integers.repr
+R17935 Integers.ltu
+R17947 Integers.repr
+R18000 Coq.Init.Logic.I
+R18000 Coq.Init.Logic.I
+R18029 Integers.ltu
+R18040 Integers.repr
+R18029 Integers.ltu
+R18040 Integers.repr
+R18093 Coq.Init.Logic.I
+R18093 Coq.Init.Logic.I
+R18122 Integers.ltu
+R18133 Integers.repr
+R18122 Integers.ltu
+R18133 Integers.repr
+R18186 Coq.Init.Logic.I
+R18186 Coq.Init.Logic.I
+R18215 Integers.ltu
+R18227 Integers.repr
+R18215 Integers.ltu
+R18227 Integers.repr
+R18280 Coq.Init.Logic.I
+R18280 Coq.Init.Logic.I
+R18309 Op.eval_condition
+R18309 Op.eval_condition
+R18382 Coq.Init.Logic.I
+R18382 Coq.Init.Logic.I
+R18382 Coq.Init.Logic.I
+R18500 Values.has_type
+R18516 Op.type_of_chunk
+R18486 Coq.Init.Logic "x = y" type_scope
+R18463 Mem.loadv
+R18488 Coq.Init.Datatypes.Some
+R18580 Values.has_type
+R18620 Op.type_of_chunk
+R18594 Values.load_result
+R18580 Values.has_type
+R18620 Op.type_of_chunk
+R18594 Values.load_result
+R18679 Coq.Init.Logic.I
+R18679 Coq.Init.Logic.I
+R18679 Coq.Init.Logic.I
+R18679 Coq.Init.Logic.I
+R18679 Coq.Init.Logic.I
+R18679 Coq.Init.Logic.I
+R18679 Coq.Init.Logic.I
+R18679 Coq.Init.Logic.I
+R18679 Coq.Init.Logic.I
+R18679 Coq.Init.Logic.I
+R18679 Coq.Init.Logic.I
+R18679 Coq.Init.Logic.I
+R18679 Coq.Init.Logic.I
+R18679 Coq.Init.Logic.I
+R18679 Coq.Init.Logic.I
+R18679 Coq.Init.Logic.I
+R18679 Coq.Init.Logic.I
+R18679 Coq.Init.Logic.I
+R18679 Coq.Init.Logic.I
+R18679 Coq.Init.Logic.I
+R18679 Coq.Init.Logic.I
+R18679 Coq.Init.Logic.I
+R18679 Coq.Init.Logic.I
+R18679 Coq.Init.Logic.I
+R18679 Coq.Init.Logic.I
+R18679 Coq.Init.Logic.I
+R18679 Coq.Init.Logic.I
+R18679 Coq.Init.Logic.I
+R18679 Coq.Init.Logic.I
+R18776 Mem.load_inv
+R18776 Mem.load_inv
+R19092 Globalenvs.t
+R19158 Values.val
+R19173 Globalenvs.find_symbol
+R19207 Coq.Init.Datatypes.Some
+R19217 Values.Vptr
+R19232 Coq.Init.Datatypes.None
+R19240 Values.Vundef
+R19151 Integers.int
+R19138 AST.ident
+R19322 Values.val
+R19355 Op.Ccomp
+R19366 Coq.Lists.List "x :: y" list_scope
+R19370 Coq.Lists.List "x :: y" list_scope
+R19372 Coq.Lists.List.nil
+R19379 Values.cmp
+R19399 Op.Ccompu
+R19411 Coq.Lists.List "x :: y" list_scope
+R19415 Coq.Lists.List "x :: y" list_scope
+R19417 Coq.Lists.List.nil
+R19424 Values.cmpu
+R19445 Op.Ccompimm
+R19461 Coq.Lists.List "x :: y" list_scope
+R19463 Coq.Lists.List.nil
+R19470 Values.cmp
+R19484 Values.Vint
+R19496 Op.Ccompuimm
+R19513 Coq.Lists.List "x :: y" list_scope
+R19515 Coq.Lists.List.nil
+R19522 Values.cmpu
+R19537 Values.Vint
+R19549 Op.Ccompf
+R19561 Coq.Lists.List "x :: y" list_scope
+R19565 Coq.Lists.List "x :: y" list_scope
+R19567 Coq.Lists.List.nil
+R19574 Values.cmpf
+R19595 Op.Cnotcompf
+R19610 Coq.Lists.List "x :: y" list_scope
+R19614 Coq.Lists.List "x :: y" list_scope
+R19616 Coq.Lists.List.nil
+R19623 Values.notbool
+R19635 Values.cmpf
+R19657 Op.Cmaskzero
+R19672 Coq.Lists.List "x :: y" list_scope
+R19674 Coq.Lists.List.nil
+R19681 Values.notbool
+R19694 Values.and
+R19706 Values.Vint
+R19719 Op.Cmasknotzero
+R19737 Coq.Lists.List "x :: y" list_scope
+R19739 Coq.Lists.List.nil
+R19746 Values.notbool
+R19758 Values.notbool
+R19771 Values.and
+R19783 Values.Vint
+R19805 Values.Vundef
+R19310 Coq.Lists.List.list
+R19315 Values.val
+R19294 Op.condition
+R19895 Values.val
+R19926 Op.Omove
+R19935 Coq.Lists.List "x :: y" list_scope
+R19937 Coq.Lists.List.nil
+R19951 Op.Ointconst
+R19964 Coq.Lists.List.nil
+R19971 Values.Vint
+R19982 Op.Ofloatconst
+R19997 Coq.Lists.List.nil
+R20004 Values.Vfloat
+R20017 Op.Oaddrsymbol
+R20036 Coq.Lists.List.nil
+R20043 Op.find_symbol_offset
+R20072 Op.Oaddrstack
+R20088 Coq.Lists.List.nil
+R20095 Values.add
+R20107 Values.Vint
+R20121 Op.Oundef
+R20129 Coq.Lists.List.nil
+R20136 Values.Vundef
+R20147 Op.Ocast8signed
+R20163 Coq.Lists.List "x :: y" list_scope
+R20165 Coq.Lists.List.nil
+R20172 Values.cast8signed
+R20195 Op.Ocast16signed
+R20212 Coq.Lists.List "x :: y" list_scope
+R20214 Coq.Lists.List.nil
+R20221 Values.cast16signed
+R20245 Op.Oadd
+R20253 Coq.Lists.List "x :: y" list_scope
+R20257 Coq.Lists.List "x :: y" list_scope
+R20259 Coq.Lists.List.nil
+R20266 Values.add
+R20284 Op.Oaddimm
+R20297 Coq.Lists.List "x :: y" list_scope
+R20299 Coq.Lists.List.nil
+R20306 Values.add
+R20318 Values.Vint
+R20330 Op.Osub
+R20338 Coq.Lists.List "x :: y" list_scope
+R20342 Coq.Lists.List "x :: y" list_scope
+R20344 Coq.Lists.List.nil
+R20351 Values.sub
+R20369 Op.Osubimm
+R20382 Coq.Lists.List "x :: y" list_scope
+R20384 Coq.Lists.List.nil
+R20391 Values.sub
+R20400 Values.Vint
+R20415 Op.Omul
+R20423 Coq.Lists.List "x :: y" list_scope
+R20427 Coq.Lists.List "x :: y" list_scope
+R20429 Coq.Lists.List.nil
+R20436 Values.mul
+R20454 Op.Omulimm
+R20467 Coq.Lists.List "x :: y" list_scope
+R20469 Coq.Lists.List.nil
+R20476 Values.mul
+R20488 Values.Vint
+R20500 Op.Odiv
+R20508 Coq.Lists.List "x :: y" list_scope
+R20512 Coq.Lists.List "x :: y" list_scope
+R20514 Coq.Lists.List.nil
+R20521 Values.divs
+R20540 Op.Odivu
+R20549 Coq.Lists.List "x :: y" list_scope
+R20553 Coq.Lists.List "x :: y" list_scope
+R20555 Coq.Lists.List.nil
+R20562 Values.divu
+R20581 Op.Oand
+R20589 Coq.Lists.List "x :: y" list_scope
+R20593 Coq.Lists.List "x :: y" list_scope
+R20595 Coq.Lists.List.nil
+R20602 Values.and
+R20620 Op.Oandimm
+R20633 Coq.Lists.List "x :: y" list_scope
+R20635 Coq.Lists.List.nil
+R20642 Values.and
+R20654 Values.Vint
+R20666 Op.Oor
+R20673 Coq.Lists.List "x :: y" list_scope
+R20677 Coq.Lists.List "x :: y" list_scope
+R20679 Coq.Lists.List.nil
+R20686 Values.or
+R20703 Op.Oorimm
+R20715 Coq.Lists.List "x :: y" list_scope
+R20717 Coq.Lists.List.nil
+R20724 Values.or
+R20735 Values.Vint
+R20747 Op.Oxor
+R20755 Coq.Lists.List "x :: y" list_scope
+R20759 Coq.Lists.List "x :: y" list_scope
+R20761 Coq.Lists.List.nil
+R20768 Values.xor
+R20786 Op.Oxorimm
+R20799 Coq.Lists.List "x :: y" list_scope
+R20801 Coq.Lists.List.nil
+R20808 Values.xor
+R20820 Values.Vint
+R20832 Op.Onand
+R20841 Coq.Lists.List "x :: y" list_scope
+R20845 Coq.Lists.List "x :: y" list_scope
+R20847 Coq.Lists.List.nil
+R20854 Values.notint
+R20865 Values.and
+R20884 Op.Onor
+R20892 Coq.Lists.List "x :: y" list_scope
+R20896 Coq.Lists.List "x :: y" list_scope
+R20898 Coq.Lists.List.nil
+R20905 Values.notint
+R20916 Values.or
+R20934 Op.Onxor
+R20943 Coq.Lists.List "x :: y" list_scope
+R20947 Coq.Lists.List "x :: y" list_scope
+R20949 Coq.Lists.List.nil
+R20956 Values.notint
+R20967 Values.xor
+R20986 Op.Oshl
+R20994 Coq.Lists.List "x :: y" list_scope
+R20998 Coq.Lists.List "x :: y" list_scope
+R21000 Coq.Lists.List.nil
+R21007 Values.shl
+R21025 Op.Oshr
+R21033 Coq.Lists.List "x :: y" list_scope
+R21037 Coq.Lists.List "x :: y" list_scope
+R21039 Coq.Lists.List.nil
+R21046 Values.shr
+R21064 Op.Oshrimm
+R21077 Coq.Lists.List "x :: y" list_scope
+R21079 Coq.Lists.List.nil
+R21086 Values.shr
+R21098 Values.Vint
+R21110 Op.Oshrximm
+R21124 Coq.Lists.List "x :: y" list_scope
+R21126 Coq.Lists.List.nil
+R21133 Values.shrx
+R21146 Values.Vint
+R21158 Op.Oshru
+R21167 Coq.Lists.List "x :: y" list_scope
+R21171 Coq.Lists.List "x :: y" list_scope
+R21173 Coq.Lists.List.nil
+R21180 Values.shru
+R21199 Op.Orolm
+R21220 Coq.Lists.List "x :: y" list_scope
+R21222 Coq.Lists.List.nil
+R21229 Values.rolm
+R21257 Op.Onegf
+R21266 Coq.Lists.List "x :: y" list_scope
+R21268 Coq.Lists.List.nil
+R21275 Values.negf
+R21291 Op.Oabsf
+R21300 Coq.Lists.List "x :: y" list_scope
+R21302 Coq.Lists.List.nil
+R21309 Values.absf
+R21325 Op.Oaddf
+R21334 Coq.Lists.List "x :: y" list_scope
+R21338 Coq.Lists.List "x :: y" list_scope
+R21340 Coq.Lists.List.nil
+R21347 Values.addf
+R21366 Op.Osubf
+R21375 Coq.Lists.List "x :: y" list_scope
+R21379 Coq.Lists.List "x :: y" list_scope
+R21381 Coq.Lists.List.nil
+R21388 Values.subf
+R21407 Op.Omulf
+R21416 Coq.Lists.List "x :: y" list_scope
+R21420 Coq.Lists.List "x :: y" list_scope
+R21422 Coq.Lists.List.nil
+R21429 Values.mulf
+R21448 Op.Odivf
+R21457 Coq.Lists.List "x :: y" list_scope
+R21461 Coq.Lists.List "x :: y" list_scope
+R21463 Coq.Lists.List.nil
+R21470 Values.divf
+R21489 Op.Omuladdf
+R21501 Coq.Lists.List "x :: y" list_scope
+R21505 Coq.Lists.List "x :: y" list_scope
+R21509 Coq.Lists.List "x :: y" list_scope
+R21511 Coq.Lists.List.nil
+R21518 Values.addf
+R21528 Values.mulf
+R21551 Op.Omulsubf
+R21563 Coq.Lists.List "x :: y" list_scope
+R21567 Coq.Lists.List "x :: y" list_scope
+R21571 Coq.Lists.List "x :: y" list_scope
+R21573 Coq.Lists.List.nil
+R21580 Values.subf
+R21590 Values.mulf
+R21613 Op.Osingleoffloat
+R21631 Coq.Lists.List "x :: y" list_scope
+R21633 Coq.Lists.List.nil
+R21640 Values.singleoffloat
+R21665 Op.Ointoffloat
+R21680 Coq.Lists.List "x :: y" list_scope
+R21682 Coq.Lists.List.nil
+R21689 Values.intoffloat
+R21711 Op.Ofloatofint
+R21726 Coq.Lists.List "x :: y" list_scope
+R21728 Coq.Lists.List.nil
+R21735 Values.floatofint
+R21757 Op.Ofloatofintu
+R21773 Coq.Lists.List "x :: y" list_scope
+R21775 Coq.Lists.List.nil
+R21782 Values.floatofintu
+R21805 Op.Ocmp
+R21818 Op.eval_condition_total
+R21856 Values.Vundef
+R19883 Coq.Lists.List.list
+R19888 Values.val
+R19867 Op.operation
+R19857 Values.val
+R21954 Values.val
+R21987 Op.Aindexed
+R22001 Coq.Lists.List "x :: y" list_scope
+R22003 Coq.Lists.List.nil
+R22010 Values.add
+R22022 Values.Vint
+R22034 Op.Aindexed2
+R22047 Coq.Lists.List "x :: y" list_scope
+R22051 Coq.Lists.List "x :: y" list_scope
+R22053 Coq.Lists.List.nil
+R22060 Values.add
+R22078 Op.Aglobal
+R22093 Coq.Lists.List.nil
+R22100 Op.find_symbol_offset
+R22129 Op.Abased
+R22145 Coq.Lists.List "x :: y" list_scope
+R22147 Coq.Lists.List.nil
+R22154 Values.add
+R22163 Op.find_symbol_offset
+R22196 Op.Ainstack
+R22210 Coq.Lists.List.nil
+R22217 Values.add
+R22229 Values.Vint
+R22251 Values.Vundef
+R21942 Coq.Lists.List.list
+R21947 Values.val
+R21925 Op.addressing
+R21913 Values.val
+R22409 Coq.Init.Logic "x = y" type_scope
+R22356 Integers.eq
+R22365 Integers.zero
+R22403 Values.Vundef
+R22379 Values.cmp_mismatch
+R22413 Values.of_bool
+R22338 Coq.Init.Logic "x = y" type_scope
+R22316 Op.eval_compare_null
+R22340 Coq.Init.Datatypes.Some
+R22484 Integers.eq
+R22493 Integers.zero
+R22484 Integers.eq
+R22493 Integers.zero
+R22694 Coq.Init.Logic "x = y" type_scope
+R22668 Op.eval_condition_total
+R22696 Values.of_bool
+R22654 Coq.Init.Logic "x = y" type_scope
+R22634 Op.eval_condition
+R22656 Coq.Init.Datatypes.Some
+R22832 Op.eval_compare_null_weaken
+R22832 Op.eval_compare_null_weaken
+R22832 Op.eval_compare_null_weaken
+R22832 Op.eval_compare_null_weaken
+R22832 Op.eval_compare_null_weaken
+R22832 Op.eval_compare_null_weaken
+R22832 Op.eval_compare_null_weaken
+R22832 Op.eval_compare_null_weaken
+R22832 Op.eval_compare_null_weaken
+R22832 Op.eval_compare_null_weaken
+R22832 Op.eval_compare_null_weaken
+R22899 Coqlib.zeq
+R22899 Coqlib.zeq
+R22957 Coqlib.zeq
+R22957 Coqlib.zeq
+R22999 Values.notbool_negb_1
+R22999 Values.notbool_negb_1
+R23038 Values.notbool_negb_1
+R23038 Values.notbool_negb_1
+R23190 Coq.Init.Logic "x = y" type_scope
+R23160 Op.eval_operation_total
+R23146 Coq.Init.Logic "x = y" type_scope
+R23117 Op.eval_operation
+R23148 Coq.Init.Datatypes.Some
+R23345 Globalenvs.find_symbol
+R23345 Globalenvs.find_symbol
+R23515 Coqlib.zeq
+R23515 Coqlib.zeq
+R23550 Integers.eq
+R23560 Integers.zero
+R23550 Integers.eq
+R23560 Integers.zero
+R23595 Integers.eq
+R23605 Integers.zero
+R23595 Integers.eq
+R23605 Integers.zero
+R23640 Integers.ltu
+R23652 Integers.repr
+R23640 Integers.ltu
+R23652 Integers.repr
+R23691 Integers.ltu
+R23703 Integers.repr
+R23691 Integers.ltu
+R23703 Integers.repr
+R23742 Integers.ltu
+R23753 Integers.repr
+R23742 Integers.ltu
+R23753 Integers.repr
+R23792 Integers.ltu
+R23803 Integers.repr
+R23792 Integers.ltu
+R23803 Integers.repr
+R23842 Integers.ltu
+R23854 Integers.repr
+R23842 Integers.ltu
+R23854 Integers.repr
+R23891 Op.eval_condition
+R23891 Op.eval_condition
+R23956 Values.of_bool
+R23956 Values.of_bool
+R23980 Op.eval_condition_weaken
+R23980 Op.eval_condition_weaken
+R24198 Coq.Init.Logic "x = y" type_scope
+R24165 Op.eval_addressing_total
+R24151 Coq.Init.Logic "x = y" type_scope
+R24119 Op.eval_addressing
+R24153 Coq.Init.Datatypes.Some
+R24329 Integers.add_commut
+R24329 Integers.add_commut
+R24387 Globalenvs.find_symbol
+R24387 Globalenvs.find_symbol
+R24466 Globalenvs.find_symbol
+R24466 Globalenvs.find_symbol
+R24653 Values.is_bool
+R24666 Op.eval_condition_total
+R24754 Values.undef_is_bool
+R24798 Values.undef_is_bool
+R24847 Values.undef_is_bool
+R24754 Values.undef_is_bool
+R24754 Values.undef_is_bool
+R24754 Values.undef_is_bool
+R24754 Values.undef_is_bool
+R24754 Values.undef_is_bool
+R24754 Values.undef_is_bool
+R24754 Values.undef_is_bool
+R24754 Values.undef_is_bool
+R24754 Values.undef_is_bool
+R24754 Values.undef_is_bool
+R24754 Values.undef_is_bool
+R24754 Values.undef_is_bool
+R24754 Values.undef_is_bool
+R24754 Values.undef_is_bool
+R24754 Values.undef_is_bool
+R24754 Values.undef_is_bool
+R24798 Values.undef_is_bool
+R24798 Values.undef_is_bool
+R24798 Values.undef_is_bool
+R24798 Values.undef_is_bool
+R24798 Values.undef_is_bool
+R24798 Values.undef_is_bool
+R24798 Values.undef_is_bool
+R24798 Values.undef_is_bool
+R24798 Values.undef_is_bool
+R24798 Values.undef_is_bool
+R24798 Values.undef_is_bool
+R24798 Values.undef_is_bool
+R24798 Values.undef_is_bool
+R24798 Values.undef_is_bool
+R24798 Values.undef_is_bool
+R24798 Values.undef_is_bool
+R24847 Values.undef_is_bool
+R24847 Values.undef_is_bool
+R24847 Values.undef_is_bool
+R24847 Values.undef_is_bool
+R24847 Values.undef_is_bool
+R24847 Values.undef_is_bool
+R24847 Values.undef_is_bool
+R24847 Values.undef_is_bool
+R24882 Values.cmp_is_bool
+R24882 Values.cmp_is_bool
+R24907 Values.cmpu_is_bool
+R24907 Values.cmpu_is_bool
+R24933 Values.cmp_is_bool
+R24933 Values.cmp_is_bool
+R24958 Values.cmpu_is_bool
+R24958 Values.cmpu_is_bool
+R24984 Values.cmpf_is_bool
+R24984 Values.cmpf_is_bool
+R25010 Values.notbool_is_bool
+R25010 Values.notbool_is_bool
+R25039 Values.notbool_is_bool
+R25039 Values.notbool_is_bool
+R25068 Values.notbool_is_bool
+R25068 Values.notbool_is_bool
+FCminor
+R260 AST.ident
+R288 AST.ident
+R320 Op.operation
+R378 Op.addressing
+R362 AST.memory_chunk
+R438 Op.addressing
+R422 AST.memory_chunk
+R489 AST.signature
+R623 Coq.Init.Datatypes.nat
+R714 Op.condition
+R931 Cminor.expr
+R961 Cminor.condexpr
+R1070 Coq.Init.Datatypes.nat
+R1095 Coq.Init.Datatypes.option
+R1102 Cminor.expr
+R1248 AST.signature
+R1272 Coq.Lists.List.list
+R1277 AST.ident
+R1295 Coq.Lists.List.list
+R1300 AST.ident
+R1324 Coq.ZArith.BinInt.Z
+R1338 Cminor.stmtlist
+R1373 AST.program
+R1385 Cminor.function
+R1489 Coq.Init.Datatypes.nat
+R1520 Coq.Init.Datatypes.option
+R1527 Values.val
+R1669 Cminor.Out_normal
+R1681 Coq.Init.Datatypes.None
+R1691 Coq.Init.Logic "x = y" type_scope
+R1693 Values.Vundef
+R1704 Cminor.Out_return
+R1715 Coq.Init.Datatypes.None
+R1721 Coq.Init.Datatypes.None
+R1731 Coq.Init.Logic "x = y" type_scope
+R1733 Values.Vundef
+R1744 Cminor.Out_return
+R1756 Coq.Init.Datatypes.Some
+R1766 Coq.Init.Datatypes.Some
+R1779 Coq.Init.Logic "x = y" type_scope
+R1796 Coq.Init.Logic.False
+R1629 Values.val
+R1613 Coq.Init.Datatypes.option
+R1620 AST.typ
+R1599 Cminor.outcome
+R1852 Cminor.outcome
+R1884 Cminor.Out_normal
+R1898 Cminor.Out_normal
+R1913 Cminor.Out_exit
+R1922 Coq.Init.Datatypes.O
+R1927 Cminor.Out_normal
+R1942 Cminor.Out_exit
+R1952 Coq.Init.Datatypes.S
+R1960 Cminor.Out_exit
+R1975 Cminor.Out_return
+R1994 Cminor.Out_return
+R1841 Cminor.outcome
+R2037 Globalenvs.t
+R2044 Cminor.function
+R2072 Maps.t
+R2080 Values.val
+R2106 Coq.Lists.List.list
+R2111 Values.val
+R2183 Cminor.env
+R2157 Coq.Lists.List.list
+R2162 AST.ident
+R2142 Coq.Lists.List.list
+R2147 Values.val
+R2217 Coq.Lists.List "x :: y" list_scope
+R2227 Coq.Lists.List "x :: y" list_scope
+R2236 Maps.set
+R2278 Coq.Lists.List "x :: y" list_scope
+R2285 Coq.Lists.List.nil
+R2292 Maps.set
+R2324 Coq.Lists.List.nil
+R2305 Values.Vundef
+R2344 Maps.empty
+R2356 Values.val
+R2157 Coq.Lists.List.list
+R2162 AST.ident
+R2142 Coq.Lists.List.list
+R2147 Values.val
+R2428 Cminor.env
+R2409 Cminor.env
+R2393 Coq.Lists.List.list
+R2398 AST.ident
+R2455 Coq.Lists.List.nil
+R2471 Coq.Lists.List "x :: y" list_scope
+R2480 Maps.set
+R2493 Values.Vundef
+R2409 Cminor.env
+R2393 Coq.Lists.List.list
+R2398 AST.ident
+R2556 Cminor.genv
+R2664 Values.val
+R2657 Mem.mem
+R2650 Cminor.env
+R2633 Cminor.expr
+R2626 Mem.mem
+R2619 Cminor.env
+R2600 Cminor.letenv
+R2593 Values.val
+R4702 Coq.Init.Datatypes.bool
+R4695 Mem.mem
+R4688 Cminor.env
+R4667 Cminor.condexpr
+R4660 Mem.mem
+R4653 Cminor.env
+R4634 Cminor.letenv
+R4627 Values.val
+R5446 Coq.Lists.List.list
+R5451 Values.val
+R5439 Mem.mem
+R5432 Cminor.env
+R5411 Cminor.exprlist
+R5404 Mem.mem
+R5397 Cminor.env
+R5378 Cminor.letenv
+R5371 Values.val
+R5829 Values.val
+R5822 Mem.mem
+R5802 Coq.Lists.List.list
+R5807 Values.val
+R5790 Cminor.function
+R5783 Mem.mem
+R6303 Cminor.outcome
+R6296 Mem.mem
+R6289 Cminor.env
+R6272 Cminor.stmt
+R6265 Mem.mem
+R6258 Cminor.env
+R6242 Values.val
+R7681 Cminor.outcome
+R7674 Mem.mem
+R7667 Cminor.env
+R7646 Cminor.stmtlist
+R7639 Mem.mem
+R7632 Cminor.env
+R7616 Values.val
+R2783 Cminor.Evar
+R2744 Coq.Init.Logic "x = y" type_scope
+R2729 Maps.get
+R2746 Coq.Init.Datatypes.Some
+R2934 Maps.set
+R2919 Cminor.Eassign
+R3130 Cminor.Eop
+R3091 Coq.Init.Logic "x = y" type_scope
+R3064 Op.eval_operation
+R3093 Coq.Init.Datatypes.Some
+R3375 Cminor.Eload
+R3336 Coq.Init.Logic "x = y" type_scope
+R3315 Mem.loadv
+R3338 Coq.Init.Datatypes.Some
+R3297 Coq.Init.Logic "x = y" type_scope
+R3267 Op.eval_addressing
+R3299 Coq.Init.Datatypes.Some
+R3687 Cminor.Estore
+R3647 Coq.Init.Logic "x = y" type_scope
+R3623 Mem.storev
+R3649 Coq.Init.Datatypes.Some
+R3605 Coq.Init.Logic "x = y" type_scope
+R3575 Op.eval_addressing
+R3607 Coq.Init.Datatypes.Some
+R4023 Cminor.Ecall
+R3946 Coq.Init.Logic "x = y" type_scope
+R3938 Cminor.fn_sig
+R3917 Coq.Init.Logic "x = y" type_scope
+R3895 Globalenvs.find_funct
+R3919 Coq.Init.Datatypes.Some
+R4252 Cminor.Econdition
+R4455 Cminor.Elet
+R4402 Coq.Lists.List "x :: y" list_scope
+R4580 Cminor.Eletvar
+R4541 Coq.Init.Logic "x = y" type_scope
+R4526 Coq.Lists.List.nth_error
+R4543 Coq.Init.Datatypes.Some
+R4800 Coq.Init.Datatypes.true
+R4789 Cminor.CEtrue
+R4889 Coq.Init.Datatypes.false
+R4877 Cminor.CEfalse
+R5072 Cminor.CEcond
+R5029 Coq.Init.Logic "x = y" type_scope
+R5006 Op.eval_condition
+R5031 Coq.Init.Datatypes.Some
+R5312 Cminor.CEcondition
+R5544 Coq.Lists.List.nil
+R5535 Cminor.Enil
+R5748 Coq.Lists.List "x :: y" list_scope
+R5727 Cminor.Econs
+R6195 Mem.free
+R6111 Cminor.outcome_result_value
+R6148 AST.sig_res
+R6139 Cminor.fn_sig
+R6083 Cminor.fn_body
+R6057 Values.Vptr
+R6065 Integers.zero
+R6029 Coq.Init.Logic "x = y" type_scope
+R5973 Cminor.set_locals
+R5997 Cminor.set_params
+R6017 Cminor.fn_params
+R5987 Cminor.fn_vars
+R5953 Coq.Init.Logic "x = y" type_scope
+R5921 Mem.alloc
+R5938 Cminor.fn_stackspace
+R5955 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R6448 Cminor.Out_normal
+R6433 Cminor.Sexpr
+R6388 Coq.Lists.List.nil
+R6668 Cminor.Sifthenelse
+R6554 Coq.Lists.List.nil
+R6885 Cminor.Sloop
+R6838 Cminor.Sloop
+R6798 Cminor.Out_normal
+R7054 Cminor.Sloop
+R7013 Coq.Init.Logic "x <> y" type_scope
+R7016 Cminor.Out_normal
+R7210 Cminor.outcome_block
+R7192 Cminor.Sblock
+R7306 Cminor.Out_exit
+R7292 Cminor.Sexit
+R7405 Cminor.Out_return
+R7416 Coq.Init.Datatypes.None
+R7386 Cminor.Sreturn
+R7394 Coq.Init.Datatypes.None
+R7565 Cminor.Out_return
+R7577 Coq.Init.Datatypes.Some
+R7540 Cminor.Sreturn
+R7549 Coq.Init.Datatypes.Some
+R7495 Coq.Lists.List.nil
+R7772 Cminor.Out_normal
+R7763 Cminor.Snil
+R7968 Cminor.Scons
+R7881 Cminor.Out_normal
+R8140 Cminor.Scons
+R8095 Coq.Init.Logic "x <> y" type_scope
+R8098 Cminor.Out_normal
+R8298 Coq.Init.Logic "'exists' x , p" type_scope
+R8308 Coq.Init.Logic "'exists' x , p" type_scope
+R8318 Coq.Init.Logic "'exists' x , p" type_scope
+R8373 Coq.Init.Logic "A /\ B" type_scope
+R8364 Coq.Init.Logic "x = y" type_scope
+R8330 Globalenvs.find_symbol
+R8353 AST.prog_main
+R8366 Coq.Init.Datatypes.Some
+R8412 Coq.Init.Logic "A /\ B" type_scope
+R8403 Coq.Init.Logic "x = y" type_scope
+R8378 Globalenvs.find_funct_ptr
+R8405 Coq.Init.Datatypes.Some
+R8458 Coq.Init.Logic "A /\ B" type_scope
+R8428 Coq.Init.Logic "x = y" type_scope
+R8420 Cminor.fn_sig
+R8430 AST.mksignature
+R8447 Coq.Init.Datatypes.Some
+R8452 AST.Tint
+R8442 Coq.Lists.List.nil
+R8463 Cminor.eval_funcall
+R8484 Coq.Lists.List.nil
+R8277 Globalenvs.init_mem
+R8245 Globalenvs.globalenv
+R8218 Values.val
+R8205 Cminor.program
+FCmconstr
+R378 Cminor.expr
+R360 Cminor.expr
+R351 Coq.Init.Datatypes.nat
+R1026 Cminor.condexpr
+R1004 Cminor.condexpr
+R995 Coq.Init.Datatypes.nat
+R1316 Cminor.exprlist
+R1294 Cminor.exprlist
+R1285 Coq.Init.Datatypes.nat
+R405 Cminor.Evar
+R416 Cminor.Evar
+R428 Cminor.Eassign
+R444 Cminor.Eassign
+R475 Cminor.Eop
+R488 Cminor.Eop
+R520 Cminor.Eload
+R543 Cminor.Eload
+R585 Cminor.Estore
+R617 Cminor.Estore
+R676 Cminor.Ecall
+R694 Cminor.Ecall
+R745 Cminor.Econdition
+R771 Cminor.Econdition
+R838 Cminor.Elet
+R850 Cminor.Elet
+R883 Coq.Init.Datatypes.S
+R895 Cminor.Eletvar
+R917 Coq.Arith.Compare_dec.le_gt_dec
+R955 Cminor.Eletvar
+R936 Cminor.Eletvar
+R945 Coq.Init.Datatypes.S
+R360 Cminor.expr
+R351 Coq.Init.Datatypes.nat
+R1057 Cminor.CEtrue
+R1067 Cminor.CEtrue
+R1078 Cminor.CEfalse
+R1089 Cminor.CEfalse
+R1101 Cminor.CEcond
+R1119 Cminor.CEcond
+R1156 Cminor.CEcondition
+R1183 Cminor.CEcondition
+R1004 Cminor.condexpr
+R995 Coq.Init.Datatypes.nat
+R1347 Cminor.Enil
+R1355 Cminor.Enil
+R1364 Cminor.Econs
+R1378 Cminor.Econs
+R1294 Cminor.exprlist
+R1285 Coq.Init.Datatypes.nat
+R1456 Cminor.expr
+R1464 Cmconstr.lift_expr
+R1474 Coq.Init.Datatypes.O
+R1449 Cminor.expr
+R1495 Cminor.Econs
+R1636 Cminor.Eop
+R1662 Cmconstr "x ::: y" cminor_scope
+R1666 Cminor.Enil
+R1641 Op.Osubimm
+R1649 Integers.zero
+R1627 Cminor.expr
+R1706 Cminor.Eop
+R1719 Cmconstr "x ::: y" cminor_scope
+R1723 Cminor.Enil
+R1710 Op.Onegf
+R1697 Cminor.expr
+R1763 Cminor.Eop
+R1776 Cmconstr "x ::: y" cminor_scope
+R1780 Cminor.Enil
+R1767 Op.Oabsf
+R1754 Cminor.expr
+R1822 Cminor.Eop
+R1841 Cmconstr "x ::: y" cminor_scope
+R1845 Cminor.Enil
+R1826 Op.Ointoffloat
+R1813 Cminor.expr
+R1887 Cminor.Eop
+R1906 Cmconstr "x ::: y" cminor_scope
+R1910 Cminor.Enil
+R1891 Op.Ofloatofint
+R1878 Cminor.expr
+R1953 Cminor.Eop
+R1973 Cmconstr "x ::: y" cminor_scope
+R1977 Cminor.Enil
+R1957 Op.Ofloatofintu
+R1944 Cminor.expr
+R2313 Cminor.expr
+R2401 Cminor.Eop
+R2413 Cmconstr "x ::: y" cminor_scope
+R2418 Cmconstr "x ::: y" cminor_scope
+R2421 Cminor.Enil
+R2405 Op.Oand
+R2374 Cminor.expr
+R2363 Cminor.expr
+R2502 Cminor.Eop
+R2513 Cmconstr "x ::: y" cminor_scope
+R2518 Cmconstr "x ::: y" cminor_scope
+R2521 Cminor.Enil
+R2506 Op.Oor
+R2475 Cminor.expr
+R2464 Cminor.expr
+R2602 Cminor.Eop
+R2614 Cmconstr "x ::: y" cminor_scope
+R2619 Cmconstr "x ::: y" cminor_scope
+R2622 Cminor.Enil
+R2606 Op.Oxor
+R2575 Cminor.expr
+R2564 Cminor.expr
+R2666 Cminor.expr
+R2756 Cmconstr.notint_cases
+R2781 Cminor.Eop
+R2785 Op.Oand
+R2793 Cmconstr "x ::: y" cminor_scope
+R2798 Cmconstr "x ::: y" cminor_scope
+R2801 Cminor.Enil
+R2816 Cmconstr.notint_case1
+R2839 Cminor.Eop
+R2843 Op.Oor
+R2850 Cmconstr "x ::: y" cminor_scope
+R2855 Cmconstr "x ::: y" cminor_scope
+R2858 Cminor.Enil
+R2873 Cmconstr.notint_case2
+R2896 Cminor.Eop
+R2900 Op.Oxor
+R2908 Cmconstr "x ::: y" cminor_scope
+R2913 Cmconstr "x ::: y" cminor_scope
+R2916 Cminor.Enil
+R2931 Cmconstr.notint_case3
+R2965 Cmconstr.notint_default
+R2724 Cminor.expr
+R3029 Cmconstr.notint_match
+R3053 Cmconstr.notint_case1
+R3081 Cminor.Eop
+R3094 Cmconstr "x ::: y" cminor_scope
+R3099 Cmconstr "x ::: y" cminor_scope
+R3102 Cminor.Enil
+R3085 Op.Onand
+R3112 Cmconstr.notint_case2
+R3140 Cminor.Eop
+R3152 Cmconstr "x ::: y" cminor_scope
+R3157 Cmconstr "x ::: y" cminor_scope
+R3160 Cminor.Enil
+R3144 Op.Onor
+R3170 Cmconstr.notint_case3
+R3198 Cminor.Eop
+R3211 Cmconstr "x ::: y" cminor_scope
+R3216 Cmconstr "x ::: y" cminor_scope
+R3219 Cminor.Enil
+R3202 Op.Onxor
+R3229 Cmconstr.notint_default
+R3255 Cminor.Elet
+R3263 Cminor.Eop
+R3283 Cmconstr "x ::: y" cminor_scope
+R3273 Cminor.Eletvar
+R3281 Coq.Init.Datatypes.O
+R3297 Cmconstr "x ::: y" cminor_scope
+R3287 Cminor.Eletvar
+R3295 Coq.Init.Datatypes.O
+R3301 Cminor.Enil
+R3267 Op.Onor
+R3012 Cminor.expr
+R3355 Cminor.Eop
+R3394 Cmconstr "x ::: y" cminor_scope
+R3398 Cminor.Enil
+R3360 Op.Ocmp
+R3366 Op.Ccompuimm
+R3380 Integers.zero
+R3376 AST.Ceq
+R3344 Cminor.expr
+R3446 Cminor.expr
+R3427 Cminor.expr
+R3473 Cminor.Eop
+R3478 Op.Ointconst
+R3491 Cminor.Enil
+R3505 Cminor.Eop
+R3571 Cminor.Enil
+R3510 Op.Ointconst
+R3524 Integers.eq
+R3533 Integers.zero
+R3560 Integers.zero
+R3547 Integers.one
+R3580 Cminor.Eop
+R3585 Op.Ocmp
+R3610 Cminor.Eop
+R3615 Op.Ocmp
+R3621 Op.negate_condition
+R3654 Cminor.Econdition
+R3683 Cminor.Econdition
+R3738 Cmconstr.notbool_base
+R3427 Cminor.expr
+R3797 Cminor.Eop
+R3817 Cmconstr "x ::: y" cminor_scope
+R3821 Cminor.Enil
+R3801 Op.Ocast8signed
+R3788 Cminor.expr
+R3869 Cminor.Eop
+R3908 Cmconstr "x ::: y" cminor_scope
+R3912 Cminor.Enil
+R3874 Op.Orolm
+R3890 Integers.repr
+R3880 Integers.zero
+R3858 Cminor.expr
+R3958 Cminor.Eop
+R3979 Cmconstr "x ::: y" cminor_scope
+R3983 Cminor.Enil
+R3962 Op.Ocast16signed
+R3947 Cminor.expr
+R4031 Cminor.Eop
+R4072 Cmconstr "x ::: y" cminor_scope
+R4076 Cminor.Enil
+R4036 Op.Orolm
+R4052 Integers.repr
+R4042 Integers.zero
+R4020 Cminor.expr
+R4123 Cminor.Eop
+R4145 Cmconstr "x ::: y" cminor_scope
+R4149 Cminor.Enil
+R4127 Op.Osingleoffloat
+R4112 Cminor.expr
+R4619 Cminor.expr
+R4694 Cminor.Eop
+R4712 Cminor.Enil
+R4699 Op.Ointconst
+R4668 Integers.int
+R4790 Cminor.Eop
+R4812 Cminor.Enil
+R4795 Op.Oaddrsymbol
+R4764 Integers.int
+R4753 AST.ident
+R4879 Cminor.Eop
+R4898 Cminor.Enil
+R4884 Op.Oaddrstack
+R4853 Integers.int
+R4975 Cminor.Eop
+R4994 Cmconstr "x ::: y" cminor_scope
+R4998 Cminor.Enil
+R4980 Op.Oaddimm
+R4948 Cminor.expr
+R4939 Integers.int
+R5042 Cminor.expr
+R5132 Cmconstr.addimm_cases
+R5157 Cminor.Eop
+R5162 Op.Ointconst
+R5175 Cminor.Enil
+R5189 Cmconstr.addimm_case1
+R5208 Cminor.Eop
+R5213 Op.Oaddrsymbol
+R5230 Cminor.Enil
+R5244 Cmconstr.addimm_case2
+R5265 Cminor.Eop
+R5270 Op.Oaddrstack
+R5284 Cminor.Enil
+R5298 Cmconstr.addimm_case3
+R5317 Cminor.Eop
+R5322 Op.Oaddimm
+R5336 Cmconstr "x ::: y" cminor_scope
+R5340 Cminor.Enil
+R5355 Cmconstr.addimm_case4
+R5387 Cmconstr.addimm_default
+R5100 Cminor.expr
+R5457 Integers.eq
+R5466 Integers.zero
+R5495 Cmconstr.addimm_match
+R5519 Cmconstr.addimm_case1
+R5543 Cminor.Eop
+R5572 Cminor.Enil
+R5548 Op.Ointconst
+R5558 Integers.add
+R5581 Cmconstr.addimm_case2
+R5607 Cminor.Eop
+R5641 Cminor.Enil
+R5612 Op.Oaddrsymbol
+R5627 Integers.add
+R5650 Cmconstr.addimm_case3
+R5674 Cminor.Eop
+R5705 Cminor.Enil
+R5679 Op.Oaddrstack
+R5691 Integers.add
+R5714 Cmconstr.addimm_case4
+R5740 Cminor.Eop
+R5770 Cmconstr "x ::: y" cminor_scope
+R5774 Cminor.Enil
+R5745 Op.Oaddimm
+R5753 Integers.add
+R5784 Cmconstr.addimm_default
+R5810 Cminor.Eop
+R5829 Cmconstr "x ::: y" cminor_scope
+R5833 Cminor.Enil
+R5815 Op.Oaddimm
+R5443 Cminor.expr
+R5434 Integers.int
+R6372 Cminor.expr
+R6361 Cminor.expr
+R6453 Cminor.Eop
+R6472 Cminor.Enil
+R6458 Op.Ointconst
+R6429 Cminor.expr
+R6419 Integers.int
+R6602 Cminor.Eop
+R6622 Cmconstr "x ::: y" cminor_scope
+R6625 Cminor.Enil
+R6607 Op.Oaddimm
+R6571 Cminor.Eop
+R6591 Cmconstr "x ::: y" cminor_scope
+R6594 Cminor.Enil
+R6576 Op.Oaddimm
+R6547 Cminor.expr
+R6537 Integers.int
+R6526 Cminor.expr
+R6516 Integers.int
+R6710 Cminor.Eop
+R6729 Cmconstr "x ::: y" cminor_scope
+R6732 Cminor.Enil
+R6714 Op.Oaddimm
+R6686 Cminor.expr
+R6675 Cminor.expr
+R6665 Integers.int
+R6816 Cminor.Eop
+R6835 Cminor.Enil
+R6821 Op.Ointconst
+R6788 Integers.int
+R6777 Cminor.expr
+R6924 Cminor.Eop
+R6944 Cmconstr "x ::: y" cminor_scope
+R6947 Cminor.Enil
+R6929 Op.Oaddimm
+R6895 Cminor.expr
+R6885 Integers.int
+R6874 Cminor.expr
+R7000 Cminor.expr
+R6989 Cminor.expr
+R7105 Cmconstr.add_cases
+R7130 Cminor.Eop
+R7135 Op.Ointconst
+R7149 Cminor.Enil
+R7163 Cmconstr.add_case4
+R7183 Cminor.Eop
+R7188 Op.Oaddimm
+R7203 Cmconstr "x ::: y" cminor_scope
+R7206 Cminor.Enil
+R7221 Cmconstr.add_case5
+R7256 Cmconstr.add_default
+R7072 Cminor.expr
+R7061 Cminor.expr
+R7362 Cmconstr.add_cases
+R7387 Cminor.Eop
+R7392 Op.Ointconst
+R7406 Cminor.Enil
+R7424 Cmconstr.add_case1
+R7444 Cminor.Eop
+R7449 Op.Oaddimm
+R7464 Cmconstr "x ::: y" cminor_scope
+R7467 Cminor.Enil
+R7474 Cminor.Eop
+R7479 Op.Oaddimm
+R7494 Cmconstr "x ::: y" cminor_scope
+R7497 Cminor.Enil
+R7512 Cmconstr.add_case2
+R7538 Cminor.Eop
+R7542 Op.Oaddimm
+R7557 Cmconstr "x ::: y" cminor_scope
+R7560 Cminor.Enil
+R7579 Cmconstr.add_case3
+R7618 Cmconstr.add_match_aux
+R7319 Cminor.expr
+R7308 Cminor.expr
+R7694 Cmconstr.add_match
+R7719 Cmconstr.add_case1
+R7744 Cmconstr.addimm
+R7761 Cmconstr.add_case2
+R7792 Cmconstr.addimm
+R7816 Cminor.Eop
+R7828 Cmconstr "x ::: y" cminor_scope
+R7833 Cmconstr "x ::: y" cminor_scope
+R7836 Cminor.Enil
+R7820 Op.Oadd
+R7800 Integers.add
+R7847 Cmconstr.add_case3
+R7875 Cmconstr.addimm
+R7886 Cminor.Eop
+R7898 Cmconstr "x ::: y" cminor_scope
+R7903 Cmconstr "x ::: y" cminor_scope
+R7906 Cminor.Enil
+R7890 Op.Oadd
+R7917 Cmconstr.add_case4
+R7942 Cmconstr.addimm
+R7959 Cmconstr.add_case5
+R7987 Cmconstr.addimm
+R7998 Cminor.Eop
+R8010 Cmconstr "x ::: y" cminor_scope
+R8015 Cmconstr "x ::: y" cminor_scope
+R8018 Cminor.Enil
+R8002 Op.Oadd
+R8029 Cmconstr.add_default
+R8056 Cminor.Eop
+R8068 Cmconstr "x ::: y" cminor_scope
+R8073 Cmconstr "x ::: y" cminor_scope
+R8076 Cminor.Enil
+R8060 Op.Oadd
+R7677 Cminor.expr
+R7666 Cminor.expr
+R8590 Cminor.expr
+R8579 Cminor.expr
+R8676 Cminor.Eop
+R8695 Cminor.Enil
+R8681 Op.Ointconst
+R8648 Integers.int
+R8637 Cminor.expr
+R8820 Cminor.Eop
+R8840 Cmconstr "x ::: y" cminor_scope
+R8843 Cminor.Enil
+R8825 Op.Oaddimm
+R8789 Cminor.Eop
+R8809 Cmconstr "x ::: y" cminor_scope
+R8812 Cminor.Enil
+R8794 Op.Oaddimm
+R8765 Cminor.expr
+R8755 Integers.int
+R8744 Cminor.expr
+R8734 Integers.int
+R8928 Cminor.Eop
+R8948 Cmconstr "x ::: y" cminor_scope
+R8951 Cminor.Enil
+R8933 Op.Oaddimm
+R8904 Cminor.expr
+R8893 Cminor.expr
+R8883 Integers.int
+R9046 Cminor.Eop
+R9066 Cmconstr "x ::: y" cminor_scope
+R9069 Cminor.Enil
+R9051 Op.Oaddimm
+R9017 Cminor.expr
+R9007 Integers.int
+R8996 Cminor.expr
+R9122 Cminor.expr
+R9111 Cminor.expr
+R9227 Cmconstr.sub_cases
+R9252 Cminor.Eop
+R9257 Op.Oaddimm
+R9272 Cmconstr "x ::: y" cminor_scope
+R9275 Cminor.Enil
+R9290 Cmconstr.sub_case3
+R9325 Cmconstr.sub_default
+R9194 Cminor.expr
+R9183 Cminor.expr
+R9431 Cmconstr.sub_cases
+R9456 Cminor.Eop
+R9461 Op.Ointconst
+R9475 Cminor.Enil
+R9493 Cmconstr.sub_case1
+R9513 Cminor.Eop
+R9518 Op.Oaddimm
+R9533 Cmconstr "x ::: y" cminor_scope
+R9536 Cminor.Enil
+R9543 Cminor.Eop
+R9548 Op.Oaddimm
+R9563 Cmconstr "x ::: y" cminor_scope
+R9566 Cminor.Enil
+R9581 Cmconstr.sub_case2
+R9607 Cminor.Eop
+R9612 Op.Oaddimm
+R9627 Cmconstr "x ::: y" cminor_scope
+R9630 Cminor.Enil
+R9649 Cmconstr.sub_case4
+R9688 Cmconstr.sub_match_aux
+R9388 Cminor.expr
+R9377 Cminor.expr
+R9764 Cmconstr.sub_match
+R9789 Cmconstr.sub_case1
+R9814 Cmconstr.addimm
+R9822 Integers.neg
+R9841 Cmconstr.sub_case2
+R9872 Cmconstr.addimm
+R9896 Cminor.Eop
+R9908 Cmconstr "x ::: y" cminor_scope
+R9913 Cmconstr "x ::: y" cminor_scope
+R9916 Cminor.Enil
+R9900 Op.Osub
+R9880 Integers.sub
+R9927 Cmconstr.sub_case3
+R9955 Cmconstr.addimm
+R9966 Cminor.Eop
+R9978 Cmconstr "x ::: y" cminor_scope
+R9983 Cmconstr "x ::: y" cminor_scope
+R9986 Cminor.Enil
+R9970 Op.Osub
+R9997 Cmconstr.sub_case4
+R10025 Cmconstr.addimm
+R10046 Cminor.Eop
+R10058 Cmconstr "x ::: y" cminor_scope
+R10063 Cmconstr "x ::: y" cminor_scope
+R10066 Cminor.Enil
+R10050 Op.Osub
+R10033 Integers.neg
+R10077 Cmconstr.sub_default
+R10104 Cminor.Eop
+R10116 Cmconstr "x ::: y" cminor_scope
+R10121 Cmconstr "x ::: y" cminor_scope
+R10124 Cminor.Enil
+R10108 Op.Osub
+R9747 Cminor.expr
+R9736 Cminor.expr
+R10665 Cminor.expr
+R10737 Cminor.Eop
+R10756 Cminor.Enil
+R10742 Op.Ointconst
+R10713 Integers.int
+R10849 Cminor.Eop
+R10878 Cmconstr "x ::: y" cminor_scope
+R10881 Cminor.Enil
+R10854 Op.Orolm
+R10824 Cminor.expr
+R10814 Integers.int
+R10801 Integers.int
+R10924 Cminor.expr
+R11013 Cmconstr.rolm_cases
+R11036 Cminor.Eop
+R11041 Op.Ointconst
+R11055 Cminor.Enil
+R11069 Cmconstr.rolm_case1
+R11087 Cminor.Eop
+R11092 Op.Orolm
+R11116 Cmconstr "x ::: y" cminor_scope
+R11119 Cminor.Enil
+R11134 Cmconstr.rolm_case2
+R11178 Cmconstr.rolm_default
+R10980 Cminor.expr
+R11261 Cmconstr.rolm_match
+R11284 Cmconstr.rolm_case1
+R11307 Cminor.Eop
+R11359 Cminor.Enil
+R11312 Op.Ointconst
+R11322 Integers.and
+R11331 Integers.rol
+R11368 Cmconstr.rolm_case2
+R11538 Integers.is_rlw_mask
+R11617 Cminor.Eop
+R11646 Cmconstr "x ::: y" cminor_scope
+R11649 Cminor.Enil
+R11622 Op.Orolm
+R11570 Cminor.Eop
+R11597 Cmconstr "x ::: y" cminor_scope
+R11600 Cminor.Enil
+R11575 Op.Orolm
+R11488 Integers.and
+R11497 Integers.rol
+R11419 Integers.and
+R11454 Integers.repr
+R11428 Integers.add
+R11659 Cmconstr.rolm_default
+R11684 Cminor.Eop
+R11713 Cmconstr "x ::: y" cminor_scope
+R11716 Cminor.Enil
+R11689 Op.Orolm
+R11245 Integers.int
+R11245 Integers.int
+R11223 Cminor.expr
+R11777 Integers.eq
+R11787 Integers.zero
+R11818 Integers.ltu
+R11830 Integers.repr
+R11896 Cminor.Eop
+R11908 Cmconstr "x ::: y" cminor_scope
+R11934 Cmconstr "x ::: y" cminor_scope
+R11911 Cminor.Eop
+R11930 Cminor.Enil
+R11916 Op.Ointconst
+R11937 Cminor.Enil
+R11900 Op.Oshl
+R11852 Cmconstr.rolm
+R11864 Integers.shl
+R11872 Integers.mone
+R11764 Integers.int
+R11753 Cminor.expr
+R11993 Integers.eq
+R12003 Integers.zero
+R12034 Integers.ltu
+R12046 Integers.repr
+R12137 Cminor.Eop
+R12150 Cmconstr "x ::: y" cminor_scope
+R12176 Cmconstr "x ::: y" cminor_scope
+R12153 Cminor.Eop
+R12172 Cminor.Enil
+R12158 Op.Ointconst
+R12179 Cminor.Enil
+R12141 Op.Oshru
+R12068 Cmconstr.rolm
+R12104 Integers.shru
+R12113 Integers.mone
+R12077 Integers.sub
+R12086 Integers.repr
+R11980 Integers.int
+R11969 Cminor.expr
+R12242 Integers.one_bits
+R12269 Coq.Lists.List "x :: y" list_scope
+R12272 Coq.Lists.List.nil
+R12285 Cmconstr.shlimm
+R12303 Coq.Lists.List "x :: y" list_scope
+R12308 Coq.Lists.List "x :: y" list_scope
+R12311 Coq.Lists.List.nil
+R12324 Cminor.Elet
+R12341 Cminor.Eop
+R12372 Cmconstr "x ::: y" cminor_scope
+R12351 Cmconstr.shlimm
+R12359 Cminor.Eletvar
+R12416 Cmconstr "x ::: y" cminor_scope
+R12395 Cmconstr.shlimm
+R12403 Cminor.Eletvar
+R12420 Cminor.Enil
+R12345 Op.Oadd
+R12442 Cminor.Eop
+R12462 Cmconstr "x ::: y" cminor_scope
+R12465 Cminor.Enil
+R12447 Op.Omulimm
+R12225 Cminor.expr
+R12215 Integers.int
+R12758 Cminor.expr
+R12834 Cminor.Eop
+R12853 Cminor.Enil
+R12839 Op.Ointconst
+R12808 Integers.int
+R12932 Cminor.Eop
+R12952 Cmconstr "x ::: y" cminor_scope
+R12955 Cminor.Enil
+R12937 Op.Oaddimm
+R12905 Cminor.expr
+R12895 Integers.int
+R13000 Cminor.expr
+R13093 Cmconstr.mulimm_cases
+R13118 Cminor.Eop
+R13123 Op.Ointconst
+R13137 Cminor.Enil
+R13151 Cmconstr.mulimm_case1
+R13171 Cminor.Eop
+R13176 Op.Oaddimm
+R13191 Cmconstr "x ::: y" cminor_scope
+R13194 Cminor.Enil
+R13209 Cmconstr.mulimm_case2
+R13244 Cmconstr.mulimm_default
+R13060 Cminor.expr
+R13317 Integers.eq
+R13327 Integers.zero
+R13396 Integers.eq
+R13406 Integers.one
+R13439 Cmconstr.mulimm_match
+R13464 Cmconstr.mulimm_case1
+R13489 Cminor.Eop
+R13520 Cminor.Enil
+R13494 Op.Ointconst
+R13504 Integers.mul
+R13529 Cmconstr.mulimm_case2
+R13557 Cmconstr.addimm
+R13581 Cmconstr.mulimm_base
+R13565 Integers.mul
+R13604 Cmconstr.mulimm_default
+R13631 Cmconstr.mulimm_base
+R13346 Cminor.Elet
+R13355 Cminor.Eop
+R13380 Cminor.Enil
+R13360 Op.Ointconst
+R13370 Integers.zero
+R13303 Cminor.expr
+R13293 Integers.int
+R13909 Cminor.expr
+R13898 Cminor.expr
+R13990 Cminor.Eop
+R14009 Cminor.Enil
+R13995 Op.Ointconst
+R13966 Cminor.expr
+R13956 Integers.int
+R14092 Cminor.Eop
+R14111 Cminor.Enil
+R14097 Op.Ointconst
+R14064 Integers.int
+R14053 Cminor.expr
+R14163 Cminor.expr
+R14152 Cminor.expr
+R14268 Cmconstr.mul_cases
+R14293 Cminor.Eop
+R14298 Op.Ointconst
+R14312 Cminor.Enil
+R14326 Cmconstr.mul_case2
+R14358 Cmconstr.mul_default
+R14235 Cminor.expr
+R14224 Cminor.expr
+R14454 Cmconstr.mul_cases
+R14479 Cminor.Eop
+R14484 Op.Ointconst
+R14498 Cminor.Enil
+R14512 Cmconstr.mul_case1
+R14544 Cmconstr.mul_match_aux
+R14421 Cminor.expr
+R14410 Cminor.expr
+R14620 Cmconstr.mul_match
+R14645 Cmconstr.mul_case1
+R14670 Cmconstr.mulimm
+R14687 Cmconstr.mul_case2
+R14712 Cmconstr.mulimm
+R14729 Cmconstr.mul_default
+R14756 Cminor.Eop
+R14768 Cmconstr "x ::: y" cminor_scope
+R14773 Cmconstr "x ::: y" cminor_scope
+R14776 Cminor.Enil
+R14760 Op.Omul
+R14603 Cminor.expr
+R14592 Cminor.expr
+R14831 Cminor.Eop
+R14843 Cmconstr "x ::: y" cminor_scope
+R14848 Cmconstr "x ::: y" cminor_scope
+R14851 Cminor.Enil
+R14835 Op.Odiv
+R14822 Cminor.expr
+R14811 Cminor.expr
+R14916 Cminor.Elet
+R14929 Cminor.Elet
+R14951 Cminor.Eop
+R14971 Cmconstr "x ::: y" cminor_scope
+R14961 Cminor.Eletvar
+R15125 Cmconstr "x ::: y" cminor_scope
+R14992 Cminor.Eop
+R15047 Cmconstr "x ::: y" cminor_scope
+R15002 Cminor.Eop
+R15023 Cmconstr "x ::: y" cminor_scope
+R15013 Cminor.Eletvar
+R15037 Cmconstr "x ::: y" cminor_scope
+R15027 Cminor.Eletvar
+R15041 Cminor.Enil
+R15088 Cmconstr "x ::: y" cminor_scope
+R15078 Cminor.Eletvar
+R15119 Cminor.Enil
+R14996 Op.Omul
+R15146 Cminor.Enil
+R14955 Op.Osub
+R14935 Cmconstr.lift
+R14905 Cminor.expr
+R14905 Cminor.expr
+R14886 Op.operation
+R15175 Cmconstr.mod_aux
+R15183 Op.Odiv
+R15224 Cminor.expr
+R15296 Cminor.Eop
+R15315 Cminor.Enil
+R15301 Op.Ointconst
+R15272 Integers.int
+R15357 Cminor.expr
+R15446 Cmconstr.divu_cases
+R15469 Cminor.Eop
+R15474 Op.Ointconst
+R15488 Cminor.Enil
+R15502 Cmconstr.divu_case1
+R15532 Cmconstr.divu_default
+R15413 Cminor.expr
+R15605 Cmconstr.divu_match
+R15628 Cmconstr.divu_case1
+R15657 Integers.is_power2
+R15687 Coq.Init.Datatypes.Some
+R15698 Cmconstr.shruimm
+R15720 Coq.Init.Datatypes.None
+R15731 Cminor.Eop
+R15744 Cmconstr "x ::: y" cminor_scope
+R15749 Cmconstr "x ::: y" cminor_scope
+R15752 Cminor.Enil
+R15735 Op.Odivu
+R15772 Cmconstr.divu_default
+R15797 Cminor.Eop
+R15810 Cmconstr "x ::: y" cminor_scope
+R15815 Cmconstr "x ::: y" cminor_scope
+R15818 Cminor.Enil
+R15801 Op.Odivu
+R15588 Cminor.expr
+R15577 Cminor.expr
+R15881 Cmconstr.divu_match
+R15904 Cmconstr.divu_case1
+R15933 Integers.is_power2
+R15963 Coq.Init.Datatypes.Some
+R15974 Cmconstr.rolm
+R15992 Integers.sub
+R16003 Integers.one
+R15982 Integers.zero
+R16020 Coq.Init.Datatypes.None
+R16031 Cmconstr.mod_aux
+R16039 Op.Odivu
+R16065 Cmconstr.divu_default
+R16090 Cmconstr.mod_aux
+R16098 Op.Odivu
+R15864 Cminor.expr
+R15853 Cminor.expr
+R16165 Integers.is_rlw_mask
+R16218 Cminor.Eop
+R16238 Cmconstr "x ::: y" cminor_scope
+R16241 Cminor.Enil
+R16223 Op.Oandimm
+R16191 Cmconstr.rolm
+R16199 Integers.zero
+R16151 Cminor.expr
+R16141 Integers.int
+R16297 Cmconstr.mul_match
+R16322 Cmconstr.mul_case1
+R16347 Cmconstr.andimm
+R16364 Cmconstr.mul_case2
+R16389 Cmconstr.andimm
+R16406 Cmconstr.mul_default
+R16433 Cminor.Eop
+R16445 Cmconstr "x ::: y" cminor_scope
+R16450 Cmconstr "x ::: y" cminor_scope
+R16453 Cminor.Enil
+R16437 Op.Oand
+R16280 Cminor.expr
+R16269 Cminor.expr
+R16534 Cminor.Evar
+R16543 Cminor.Evar
+R16557 AST.ident_eq
+R16587 Coq.Init.Datatypes.false
+R16577 Coq.Init.Datatypes.true
+R16605 Coq.Init.Datatypes.false
+R16501 Cminor.expr
+R16501 Cminor.expr
+R16662 Cminor.expr
+R16651 Cminor.expr
+R16868 Cminor.Eop
+R16897 Cmconstr "x ::: y" cminor_scope
+R16900 Cminor.Enil
+R16873 Op.Orolm
+R16811 Cminor.Eop
+R16841 Cmconstr "x ::: y" cminor_scope
+R16844 Cminor.Enil
+R16816 Op.Orolm
+R16788 Cminor.expr
+R16778 Integers.int
+R16765 Integers.int
+R16736 Cminor.expr
+R16726 Integers.int
+R16713 Integers.int
+R16952 Cminor.expr
+R16941 Cminor.expr
+R17061 Cmconstr.or_cases
+R17085 Cminor.Eop
+R17090 Op.Orolm
+R17115 Cmconstr "x ::: y" cminor_scope
+R17118 Cminor.Enil
+R17129 Cminor.Eop
+R17134 Op.Orolm
+R17158 Cmconstr "x ::: y" cminor_scope
+R17161 Cminor.Enil
+R17176 Cmconstr.or_case1
+R17239 Cmconstr.or_default
+R17018 Cminor.expr
+R17007 Cminor.expr
+R17311 Cmconstr.or_match
+R17335 Cmconstr.or_case1
+R17465 Coq.Bool.Bool "x && y" bool_scope
+R17419 Coq.Bool.Bool "x && y" bool_scope
+R17390 Integers.eq
+R17422 Integers.is_rlw_mask
+R17439 Integers.or
+R17468 Cmconstr.same_expr_pure
+R17564 Cminor.Eop
+R17575 Cmconstr "x ::: y" cminor_scope
+R17580 Cmconstr "x ::: y" cminor_scope
+R17583 Cminor.Enil
+R17568 Op.Oor
+R17500 Cminor.Eop
+R17544 Cmconstr "x ::: y" cminor_scope
+R17547 Cminor.Enil
+R17505 Op.Orolm
+R17520 Integers.or
+R17593 Cmconstr.or_default
+R17619 Cminor.Eop
+R17630 Cmconstr "x ::: y" cminor_scope
+R17635 Cmconstr "x ::: y" cminor_scope
+R17638 Cminor.Enil
+R17623 Op.Oor
+R17294 Cminor.expr
+R17283 Cminor.expr
+R17684 Cminor.Eop
+R17696 Cmconstr "x ::: y" cminor_scope
+R17701 Cmconstr "x ::: y" cminor_scope
+R17704 Cminor.Enil
+R17688 Op.Oxor
+R17675 Cminor.expr
+R17675 Cminor.expr
+R17747 Cminor.expr
+R17821 Cminor.Eop
+R17840 Cminor.Enil
+R17826 Op.Ointconst
+R17796 Integers.int
+R17883 Cminor.expr
+R17974 Cmconstr.shift_cases
+R17998 Cminor.Eop
+R18003 Op.Ointconst
+R18017 Cminor.Enil
+R18031 Cmconstr.shift_case1
+R18062 Cmconstr.shift_default
+R17941 Cminor.expr
+R18135 Cmconstr.shift_match
+R18159 Cmconstr.shift_case1
+R18183 Cmconstr.shlimm
+R18200 Cmconstr.shift_default
+R18226 Cminor.Eop
+R18238 Cmconstr "x ::: y" cminor_scope
+R18243 Cmconstr "x ::: y" cminor_scope
+R18246 Cminor.Enil
+R18230 Op.Oshl
+R18118 Cminor.expr
+R18107 Cminor.expr
+R18294 Cminor.Eop
+R18306 Cmconstr "x ::: y" cminor_scope
+R18311 Cmconstr "x ::: y" cminor_scope
+R18314 Cminor.Enil
+R18298 Op.Oshr
+R18283 Cminor.expr
+R18283 Cminor.expr
+R18371 Cmconstr.shift_match
+R18395 Cmconstr.shift_case1
+R18419 Cmconstr.shruimm
+R18437 Cmconstr.shift_default
+R18463 Cminor.Eop
+R18476 Cmconstr "x ::: y" cminor_scope
+R18481 Cmconstr "x ::: y" cminor_scope
+R18484 Cminor.Enil
+R18467 Op.Oshru
+R18354 Cminor.expr
+R18343 Cminor.expr
+R18817 Cminor.expr
+R18806 Cminor.expr
+R18912 Cminor.Eop
+R18925 Cmconstr "x ::: y" cminor_scope
+R18930 Cmconstr "x ::: y" cminor_scope
+R18933 Cminor.Enil
+R18916 Op.Omulf
+R18887 Cminor.expr
+R18876 Cminor.expr
+R18865 Cminor.expr
+R19031 Cminor.Eop
+R19044 Cmconstr "x ::: y" cminor_scope
+R19049 Cmconstr "x ::: y" cminor_scope
+R19052 Cminor.Enil
+R19035 Op.Omulf
+R19001 Cminor.expr
+R18990 Cminor.expr
+R18979 Cminor.expr
+R19106 Cminor.expr
+R19095 Cminor.expr
+R19213 Cmconstr.addf_cases
+R19239 Cminor.Eop
+R19243 Op.Omulf
+R19252 Cmconstr "x ::: y" cminor_scope
+R19257 Cmconstr "x ::: y" cminor_scope
+R19260 Cminor.Enil
+R19275 Cmconstr.addf_case2
+R19311 Cmconstr.addf_default
+R19180 Cminor.expr
+R19169 Cminor.expr
+R19409 Cmconstr.addf_cases
+R19435 Cminor.Eop
+R19439 Op.Omulf
+R19448 Cmconstr "x ::: y" cminor_scope
+R19453 Cmconstr "x ::: y" cminor_scope
+R19456 Cminor.Enil
+R19471 Cmconstr.addf_case1
+R19507 Cmconstr.addf_match_aux
+R19376 Cminor.expr
+R19365 Cminor.expr
+R19585 Cmconstr.addf_match
+R19611 Cmconstr.addf_case1
+R19640 Cminor.Eop
+R19656 Cmconstr "x ::: y" cminor_scope
+R19661 Cmconstr "x ::: y" cminor_scope
+R19666 Cmconstr "x ::: y" cminor_scope
+R19669 Cminor.Enil
+R19644 Op.Omuladdf
+R19679 Cmconstr.addf_case2
+R19708 Cminor.Elet
+R19717 Cminor.Eop
+R19738 Cmconstr "x ::: y" cminor_scope
+R19731 Cmconstr.lift
+R19748 Cmconstr "x ::: y" cminor_scope
+R19741 Cmconstr.lift
+R19760 Cmconstr "x ::: y" cminor_scope
+R19751 Cminor.Eletvar
+R19763 Cminor.Enil
+R19721 Op.Omuladdf
+R19774 Cmconstr.addf_default
+R19802 Cminor.Eop
+R19815 Cmconstr "x ::: y" cminor_scope
+R19820 Cmconstr "x ::: y" cminor_scope
+R19823 Cminor.Enil
+R19806 Op.Oaddf
+R19568 Cminor.expr
+R19557 Cminor.expr
+R20073 Cminor.expr
+R20062 Cminor.expr
+R20168 Cminor.Eop
+R20181 Cmconstr "x ::: y" cminor_scope
+R20186 Cmconstr "x ::: y" cminor_scope
+R20189 Cminor.Enil
+R20172 Op.Omulf
+R20143 Cminor.expr
+R20132 Cminor.expr
+R20121 Cminor.expr
+R20248 Cminor.expr
+R20237 Cminor.expr
+R20351 Cmconstr.subf_cases
+R20377 Cminor.Eop
+R20381 Op.Omulf
+R20390 Cmconstr "x ::: y" cminor_scope
+R20395 Cmconstr "x ::: y" cminor_scope
+R20398 Cminor.Enil
+R20413 Cmconstr.subf_case1
+R20449 Cmconstr.subf_default
+R20318 Cminor.expr
+R20307 Cminor.expr
+R20525 Cmconstr.subf_match
+R20551 Cmconstr.subf_case1
+R20580 Cminor.Eop
+R20596 Cmconstr "x ::: y" cminor_scope
+R20601 Cmconstr "x ::: y" cminor_scope
+R20606 Cmconstr "x ::: y" cminor_scope
+R20609 Cminor.Enil
+R20584 Op.Omulsubf
+R20619 Cmconstr.subf_default
+R20647 Cminor.Eop
+R20660 Cmconstr "x ::: y" cminor_scope
+R20665 Cmconstr "x ::: y" cminor_scope
+R20668 Cminor.Enil
+R20651 Op.Osubf
+R20508 Cminor.expr
+R20497 Cminor.expr
+R20715 Cminor.Eop
+R20728 Cmconstr "x ::: y" cminor_scope
+R20733 Cmconstr "x ::: y" cminor_scope
+R20736 Cminor.Enil
+R20719 Op.Omulf
+R20706 Cminor.expr
+R20706 Cminor.expr
+R20776 Cminor.Eop
+R20789 Cmconstr "x ::: y" cminor_scope
+R20794 Cmconstr "x ::: y" cminor_scope
+R20797 Cminor.Enil
+R20780 Op.Odivf
+R20767 Cminor.expr
+R20767 Cminor.expr
+R20855 Cminor.Eop
+R20879 Cmconstr "x ::: y" cminor_scope
+R20884 Cmconstr "x ::: y" cminor_scope
+R20887 Cminor.Enil
+R20860 Op.Ocmp
+R20866 Op.Ccomp
+R20844 Cminor.expr
+R20844 Cminor.expr
+R20824 AST.comparison
+R20945 Cminor.Eop
+R20970 Cmconstr "x ::: y" cminor_scope
+R20975 Cmconstr "x ::: y" cminor_scope
+R20978 Cminor.Enil
+R20950 Op.Ocmp
+R20956 Op.Ccompu
+R20934 Cminor.expr
+R20934 Cminor.expr
+R20914 AST.comparison
+R21036 Cminor.Eop
+R21061 Cmconstr "x ::: y" cminor_scope
+R21066 Cmconstr "x ::: y" cminor_scope
+R21069 Cminor.Enil
+R21041 Op.Ocmp
+R21047 Op.Ccompf
+R21025 Cminor.expr
+R21025 Cminor.expr
+R21005 AST.comparison
+R21115 Cminor.condexpr
+R21107 Cminor.expr
+R21146 Cminor.Eop
+R21151 Op.Ointconst
+R21164 Cminor.Enil
+R21181 Integers.eq
+R21190 Integers.zero
+R21217 Cminor.CEtrue
+R21204 Cminor.CEfalse
+R21228 Cminor.Eop
+R21233 Op.Ocmp
+R21247 Cminor.CEcond
+R21263 Cminor.Econdition
+R21292 Cminor.CEcondition
+R21360 Cminor.CEcond
+R21394 Cmconstr "x ::: y" cminor_scope
+R21397 Cminor.Enil
+R21368 Op.Ccompuimm
+R21382 Integers.zero
+R21378 AST.Cne
+R21107 Cminor.expr
+R21457 Cminor.expr
+R21467 Cminor.Econdition
+R21479 Cmconstr.condexpr_of_expr
+R21449 Cminor.expr
+R21449 Cminor.expr
+R21449 Cminor.expr
+R21948 Cminor.expr
+R22042 Cminor.Eop
+R22064 Cminor.Enil
+R22047 Op.Oaddrsymbol
+R22012 Integers.int
+R22001 AST.ident
+R22139 Cminor.Eop
+R22158 Cminor.Enil
+R22144 Op.Oaddrstack
+R22109 Integers.int
+R22263 Cminor.Eop
+R22299 Cmconstr "x ::: y" cminor_scope
+R22273 Cminor.Eop
+R22295 Cminor.Enil
+R22278 Op.Oaddrsymbol
+R22304 Cmconstr "x ::: y" cminor_scope
+R22307 Cminor.Enil
+R22267 Op.Oadd
+R22224 Cminor.expr
+R22214 Integers.int
+R22203 AST.ident
+R22394 Cminor.Eop
+R22413 Cmconstr "x ::: y" cminor_scope
+R22416 Cminor.Enil
+R22399 Op.Oaddimm
+R22363 Cminor.expr
+R22353 Integers.int
+R22505 Cminor.Eop
+R22517 Cmconstr "x ::: y" cminor_scope
+R22522 Cmconstr "x ::: y" cminor_scope
+R22525 Cminor.Enil
+R22509 Op.Oadd
+R22474 Cminor.expr
+R22463 Cminor.expr
+R22573 Cminor.expr
+R22671 Cmconstr.addressing_cases
+R22700 Cminor.Eop
+R22705 Op.Oaddrsymbol
+R22722 Cminor.Enil
+R22736 Cmconstr.addressing_case1
+R22761 Cminor.Eop
+R22766 Op.Oaddrstack
+R22780 Cminor.Enil
+R22794 Cmconstr.addressing_case2
+R22817 Cminor.Eop
+R22821 Op.Oadd
+R22853 Cmconstr "x ::: y" cminor_scope
+R22827 Cminor.Eop
+R22832 Op.Oaddrsymbol
+R22849 Cminor.Enil
+R22858 Cmconstr "x ::: y" cminor_scope
+R22861 Cminor.Enil
+R22876 Cmconstr.addressing_case3
+R22904 Cminor.Eop
+R22909 Op.Oaddimm
+R22923 Cmconstr "x ::: y" cminor_scope
+R22926 Cminor.Enil
+R22941 Cmconstr.addressing_case4
+R22967 Cminor.Eop
+R22971 Op.Oadd
+R22979 Cmconstr "x ::: y" cminor_scope
+R22984 Cmconstr "x ::: y" cminor_scope
+R22987 Cminor.Enil
+R23002 Cmconstr.addressing_case5
+R23040 Cmconstr.addressing_default
+R22639 Cminor.expr
+R23112 Cmconstr.addressing_match
+R23140 Cmconstr.addressing_case1
+R23170 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R23171 Op.Aglobal
+R23184 Cminor.Enil
+R23194 Cmconstr.addressing_case2
+R23222 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R23223 Op.Ainstack
+R23235 Cminor.Enil
+R23245 Cmconstr.addressing_case3
+R23278 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R23279 Op.Abased
+R23293 Cmconstr "x ::: y" cminor_scope
+R23296 Cminor.Enil
+R23306 Cmconstr.addressing_case4
+R23337 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R23338 Op.Aindexed
+R23352 Cmconstr "x ::: y" cminor_scope
+R23355 Cminor.Enil
+R23365 Cmconstr.addressing_case5
+R23397 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R23398 Op.Aindexed2
+R23411 Cmconstr "x ::: y" cminor_scope
+R23416 Cmconstr "x ::: y" cminor_scope
+R23419 Cminor.Enil
+R23429 Cmconstr.addressing_default
+R23459 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R23460 Op.Aindexed
+R23469 Integers.zero
+R23480 Cmconstr "x ::: y" cminor_scope
+R23483 Cminor.Enil
+R23095 Cminor.expr
+R23557 Cmconstr.addressing
+R23580 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R23596 Cminor.Eload
+R23540 Cminor.expr
+R23521 AST.memory_chunk
+R23690 Cmconstr.addressing
+R23713 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R23729 Cminor.Estore
+R23673 Cminor.expr
+R23673 Cminor.expr
+R23651 AST.memory_chunk
+R23820 Cminor.stmt
+R23830 Cminor.Sifthenelse
+R23843 Cmconstr.condexpr_of_expr
+R23808 Cminor.stmtlist
+R23808 Cminor.stmtlist
+R23789 Cminor.expr
+FCmconstrproof
+R355 Cminor.genv
+R431 Cminor.letenv
+R424 Values.val
+R417 Coq.Init.Datatypes.nat
+R407 Cminor.letenv
+R515 Coq.Lists.List "x :: y" list_scope
+R508 Coq.Init.Datatypes.O
+R639 Coq.Lists.List "x :: y" list_scope
+R629 Coq.Init.Datatypes.S
+R621 Coq.Lists.List "x :: y" list_scope
+R801 Coq.Init.Logic "x = y" type_scope
+R785 Coq.Lists.List.nth_error
+R803 Coq.Init.Datatypes.Some
+R771 Coq.Init.Peano "x > y" nat_scope
+R756 Coq.Init.Logic "x = y" type_scope
+R741 Coq.Lists.List.nth_error
+R758 Coq.Init.Datatypes.Some
+R699 Cmconstrproof.insert_lenv
+R1103 Coq.Init.Logic "x = y" type_scope
+R1083 Coq.Lists.List.nth_error
+R1098 Coq.Init.Datatypes.S
+R1105 Coq.Init.Datatypes.Some
+R1068 Coq.Init.Peano "x <= y" nat_scope
+R1053 Coq.Init.Logic "x = y" type_scope
+R1038 Coq.Lists.List.nth_error
+R1055 Coq.Init.Datatypes.Some
+R996 Cmconstrproof.insert_lenv
+R1466 Cminor.eval_Evar
+R1476 Cminor.eval_Eassign
+R1489 Cminor.eval_Eop
+R1498 Cminor.eval_Eload
+R1509 Cminor.eval_Estore
+R1534 Cminor.eval_Ecall
+R1545 Cminor.eval_Econdition
+R1574 Cminor.eval_Elet
+R1584 Cminor.eval_Eletvar
+R1611 Cminor.eval_CEtrue
+R1623 Cminor.eval_CEfalse
+R1636 Cminor.eval_CEcond
+R1661 Cminor.eval_CEcondition
+R1678 Cminor.eval_Enil
+R1688 Cminor.eval_Econs
+R1851 Cminor.eval_expr
+R1878 Cmconstr.lift_expr
+R1823 Cmconstrproof.insert_lenv
+R1769 Cminor.eval_expr
+R1930 Cmconstrproof.eval_expr_ind_3
+R2321 Cminor.eval_exprlist
+R2352 Cmconstr.lift_exprlist
+R2289 Cmconstrproof.insert_lenv
+R2173 Cminor.eval_condexpr
+R2204 Cmconstr.lift_condexpr
+R2141 Cmconstrproof.insert_lenv
+R2035 Cminor.eval_expr
+R2062 Cmconstr.lift_expr
+R2003 Cmconstrproof.insert_lenv
+R1930 Cmconstrproof.eval_expr_ind_3
+R2321 Cminor.eval_exprlist
+R2352 Cmconstr.lift_exprlist
+R2289 Cmconstrproof.insert_lenv
+R2173 Cminor.eval_condexpr
+R2204 Cmconstr.lift_condexpr
+R2141 Cmconstrproof.insert_lenv
+R2035 Cminor.eval_expr
+R2062 Cmconstr.lift_expr
+R2003 Cmconstrproof.insert_lenv
+R2445 Cminor.eval_Econdition
+R2445 Cminor.eval_Econdition
+R2445 Cminor.eval_Econdition
+R2523 Cminor.eval_Elet
+R2523 Cminor.eval_Elet
+R2557 Cmconstrproof.insert_lenv_S
+R2557 Cmconstrproof.insert_lenv_S
+R2587 Coq.Arith.Compare_dec.le_gt_dec
+R2587 Coq.Arith.Compare_dec.le_gt_dec
+R2619 Cminor.eval_Eletvar
+R2619 Cminor.eval_Eletvar
+R2640 Cmconstrproof.insert_lenv_lookup2
+R2640 Cmconstrproof.insert_lenv_lookup2
+R2676 Cminor.eval_Eletvar
+R2676 Cminor.eval_Eletvar
+R2697 Cmconstrproof.insert_lenv_lookup1
+R2697 Cmconstrproof.insert_lenv_lookup1
+R2749 Cminor.eval_CEcondition
+R2749 Cminor.eval_CEcondition
+R2749 Cminor.eval_CEcondition
+R2917 Cminor.eval_expr
+R2948 Cmconstr.lift
+R2935 Coq.Lists.List "x :: y" list_scope
+R2877 Cminor.eval_expr
+R3002 Cmconstrproof.eval_lift_expr
+R3002 Cmconstrproof.eval_lift_expr
+R3036 Cmconstrproof.insert_lenv_0
+R3036 Cmconstrproof.insert_lenv_0
+R3070 Cmconstrproof.eval_lift
+R3129 Cminor.eval_Eop
+R3333 Coq.Init.Logic "A /\ B" type_scope
+R3328 Coq.Init.Logic "x = y" type_scope
+R3344 Coq.Init.Logic "A /\ B" type_scope
+R3339 Coq.Init.Logic "x = y" type_scope
+R3375 Coq.Init.Logic "x = y" type_scope
+R3347 Op.eval_operation
+R3371 Coq.Lists.List.nil
+R3377 Coq.Init.Datatypes.Some
+R3273 Cminor.eval_expr
+R3299 Cminor.Eop
+R3306 Cminor.Enil
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R3584 Coq.Init.Logic "'exists' x , p" type_scope
+R3634 Coq.Init.Logic "A /\ B" type_scope
+R3597 Cminor.eval_expr
+R3675 Coq.Init.Logic "x = y" type_scope
+R3639 Op.eval_operation
+R3667 Coq.Lists.List "x :: y" list_scope
+R3670 Coq.Lists.List.nil
+R3677 Coq.Init.Datatypes.Some
+R3523 Cminor.eval_expr
+R3549 Cminor.Eop
+R3560 Cmconstr "x ::: y" cminor_scope
+R3564 Cminor.Enil
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R3964 Coq.Init.Logic "'exists' x , p" type_scope
+R3975 Coq.Init.Logic "'exists' x , p" type_scope
+R3986 Coq.Init.Logic "'exists' x , p" type_scope
+R3997 Coq.Init.Logic "'exists' x , p" type_scope
+R4047 Coq.Init.Logic "A /\ B" type_scope
+R4010 Cminor.eval_expr
+R4089 Coq.Init.Logic "A /\ B" type_scope
+R4052 Cminor.eval_expr
+R4136 Coq.Init.Logic "x = y" type_scope
+R4094 Op.eval_operation
+R4122 Coq.Lists.List "x :: y" list_scope
+R4128 Coq.Lists.List "x :: y" list_scope
+R4131 Coq.Lists.List.nil
+R4138 Coq.Init.Datatypes.Some
+R3896 Cminor.eval_expr
+R3922 Cminor.Eop
+R3933 Cmconstr "x ::: y" cminor_scope
+R3940 Cmconstr "x ::: y" cminor_scope
+R3944 Cminor.Enil
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R4386 Cminor.eval_expr
+R4415 Cminor.Eop
+R4423 Cminor.Enil
+R4720 Cminor.eval_expr
+R4749 Cminor.Eop
+R4762 Cmconstr "x ::: y" cminor_scope
+R4766 Cminor.Enil
+R5027 Cminor.eval_expr
+R5056 Cminor.Eop
+R5069 Cmconstr "x ::: y" cminor_scope
+R5077 Cmconstr "x ::: y" cminor_scope
+R5081 Cminor.Enil
+R5144 Cmconstrproof.inv_eval_Eop_2
+R4829 Cmconstrproof.inv_eval_Eop_1
+R4485 Cmconstrproof.inv_eval_Eop_0
+R5640 Cminor.eval_expr
+R5683 Values.Vint
+R5689 Integers.neg
+R5666 Cmconstr.negint
+R5593 Cminor.eval_expr
+R5627 Values.Vint
+R5721 Cmconstr.negint
+R5842 Cminor.eval_expr
+R5887 Values.Vfloat
+R5895 Floats.neg
+R5868 Cmconstr.negfloat
+R5793 Cminor.eval_expr
+R5827 Values.Vfloat
+R5929 Cmconstr.negfloat
+R6051 Cminor.eval_expr
+R6096 Values.Vfloat
+R6104 Floats.abs
+R6077 Cmconstr.absfloat
+R6002 Cminor.eval_expr
+R6036 Values.Vfloat
+R6138 Cmconstr.absfloat
+R6262 Cminor.eval_expr
+R6309 Values.Vint
+R6315 Floats.intoffloat
+R6288 Cmconstr.intoffloat
+R6213 Cminor.eval_expr
+R6247 Values.Vfloat
+R6356 Cmconstr.intoffloat
+R6480 Cminor.eval_expr
+R6527 Values.Vfloat
+R6535 Floats.floatofint
+R6506 Cmconstr.floatofint
+R6433 Cminor.eval_expr
+R6467 Values.Vint
+R6576 Cmconstr.floatofint
+R6701 Cminor.eval_expr
+R6749 Values.Vfloat
+R6757 Floats.floatofintu
+R6727 Cmconstr.floatofintu
+R6654 Cminor.eval_expr
+R6688 Values.Vint
+R6799 Cmconstr.floatofintu
+R6920 Cminor.eval_expr
+R6963 Values.Vint
+R6969 Integers.not
+R6946 Cmconstr.notint
+R6873 Cminor.eval_expr
+R6907 Values.Vint
+R7028 Cmconstr.notint_match
+R7028 Cmconstr.notint_match
+R7212 Cminor.eval_Elet
+R7212 Cminor.eval_Elet
+R7243 Cminor.eval_Eop
+R7243 Cminor.eval_Eop
+R7262 Cminor.eval_Econs
+R7262 Cminor.eval_Econs
+R7280 Cminor.eval_Eletvar
+R7280 Cminor.eval_Eletvar
+R7323 Cminor.eval_Econs
+R7323 Cminor.eval_Econs
+R7341 Cminor.eval_Eletvar
+R7341 Cminor.eval_Eletvar
+R7383 Cminor.eval_Enil
+R7383 Cminor.eval_Enil
+R7412 Integers.or_idem
+R7412 Integers.or_idem
+R7563 Cminor.eval_expr
+R7612 Values.of_bool
+R7625 Coq.Bool.Bool.negb
+R7589 Cmconstr.notbool_base
+R7538 Values.bool_of_val
+R7498 Cminor.eval_expr
+R7655 Cmconstr.notbool_base
+R7704 Integers.eq_false
+R7704 Integers.eq_false
+R7734 Integers.eq_true
+R7734 Integers.eq_true
+R7787 Values.bool_of_true_val
+R7808 Values.bool_of_false_val
+R7843 Values.bool_of_true_val_inv
+R7868 Values.bool_of_false_val_inv
+R8030 Cminor.eval_expr
+R8074 Values.of_bool
+R8087 Coq.Bool.Bool.negb
+R8056 Cmconstr.notbool
+R8005 Values.bool_of_val
+R7965 Cminor.eval_expr
+R8171 Values.is_true
+R8184 Values.of_bool
+R8197 Coq.Bool.Bool.negb
+R8148 Values.bool_of_val
+R8130 Values.is_false
+R8171 Values.is_true
+R8184 Values.of_bool
+R8197 Coq.Bool.Bool.negb
+R8148 Values.bool_of_val
+R8130 Values.is_false
+R8290 Integers.one_not_zero
+R8290 Integers.one_not_zero
+R8389 Values.is_false
+R8403 Values.of_bool
+R8416 Coq.Bool.Bool.negb
+R8366 Values.bool_of_val
+R8349 Values.is_true
+R8389 Values.is_false
+R8403 Values.of_bool
+R8416 Coq.Bool.Bool.negb
+R8366 Values.bool_of_val
+R8349 Values.is_true
+R8547 Cmconstrproof.eval_notbool_base
+R8547 Cmconstrproof.eval_notbool_base
+R8547 Cmconstrproof.eval_notbool_base
+R8547 Cmconstrproof.eval_notbool_base
+R8547 Cmconstrproof.eval_notbool_base
+R8547 Cmconstrproof.eval_notbool_base
+R8547 Cmconstrproof.eval_notbool_base
+R8547 Cmconstrproof.eval_notbool_base
+R8547 Cmconstrproof.eval_notbool_base
+R8547 Cmconstrproof.eval_notbool_base
+R8600 Cmconstrproof.eval_notbool_base
+R8600 Cmconstrproof.eval_notbool_base
+R8600 Cmconstrproof.eval_notbool_base
+R8600 Cmconstrproof.eval_notbool_base
+R8600 Cmconstrproof.eval_notbool_base
+R8600 Cmconstrproof.eval_notbool_base
+R8600 Cmconstrproof.eval_notbool_base
+R8600 Cmconstrproof.eval_notbool_base
+R8600 Cmconstrproof.eval_notbool_base
+R8600 Cmconstrproof.eval_notbool_base
+R8600 Cmconstrproof.eval_notbool_base
+R8600 Cmconstrproof.eval_notbool_base
+R8600 Cmconstrproof.eval_notbool_base
+R8600 Cmconstrproof.eval_notbool_base
+R8600 Cmconstrproof.eval_notbool_base
+R8600 Cmconstrproof.eval_notbool_base
+R8600 Cmconstrproof.eval_notbool_base
+R8600 Cmconstrproof.eval_notbool_base
+R8600 Cmconstrproof.eval_notbool_base
+R8600 Cmconstrproof.eval_notbool_base
+R8600 Cmconstrproof.eval_notbool_base
+R8600 Cmconstrproof.eval_notbool_base
+R8600 Cmconstrproof.eval_notbool_base
+R8600 Cmconstrproof.eval_notbool_base
+R8600 Cmconstrproof.eval_notbool_base
+R8600 Cmconstrproof.eval_notbool_base
+R8600 Cmconstrproof.eval_notbool_base
+R8600 Cmconstrproof.eval_notbool_base
+R8600 Cmconstrproof.eval_notbool_base
+R8600 Cmconstrproof.eval_notbool_base
+R8600 Cmconstrproof.eval_notbool_base
+R8600 Cmconstrproof.eval_notbool_base
+R8600 Cmconstrproof.eval_notbool_base
+R8600 Cmconstrproof.eval_notbool_base
+R8600 Cmconstrproof.eval_notbool_base
+R8600 Cmconstrproof.eval_notbool_base
+R8600 Cmconstrproof.eval_notbool_base
+R8600 Cmconstrproof.eval_notbool_base
+R8600 Cmconstrproof.eval_notbool_base
+R8600 Cmconstrproof.eval_notbool_base
+R8600 Cmconstrproof.eval_notbool_base
+R8600 Cmconstrproof.eval_notbool_base
+R8600 Cmconstrproof.eval_notbool_base
+R8600 Cmconstrproof.eval_notbool_base
+R8600 Cmconstrproof.eval_notbool_base
+R8753 Integers.eq_false
+R8753 Integers.eq_false
+R8814 Integers.eq_true
+R8814 Integers.eq_true
+R8864 Cmconstrproof.eval_notbool_base
+R8864 Cmconstrproof.eval_notbool_base
+R8964 Cminor.eval_Eop
+R8964 Cminor.eval_Eop
+R8998 Op.eval_condition
+R8998 Op.eval_condition
+R9063 Coq.Init.Logic "x = y" type_scope
+R9063 Coq.Init.Logic "x = y" type_scope
+R9150 Op.eval_negate_condition
+R9150 Op.eval_negate_condition
+R9369 Cminor.eval_Econdition
+R9369 Cminor.eval_Econdition
+R9533 Cminor.eval_expr
+R9581 Values.Vint
+R9587 Integers.cast8signed
+R9559 Cmconstr.cast8signed
+R9486 Cminor.eval_expr
+R9520 Values.Vint
+R9625 Cmconstr.cast8signed
+R9753 Cminor.eval_expr
+R9803 Values.Vint
+R9809 Integers.cast8unsigned
+R9779 Cmconstr.cast8unsigned
+R9706 Cminor.eval_expr
+R9740 Values.Vint
+R9852 Cmconstr.cast8unsigned
+R9885 Integers.rolm_zero
+R9885 Integers.rolm_zero
+R9908 Integers.cast8unsigned_and
+R9908 Integers.cast8unsigned_and
+R10055 Cminor.eval_expr
+R10104 Values.Vint
+R10110 Integers.cast16signed
+R10081 Cmconstr.cast16signed
+R10008 Cminor.eval_expr
+R10042 Values.Vint
+R10149 Cmconstr.cast16signed
+R10279 Cminor.eval_expr
+R10330 Values.Vint
+R10336 Integers.cast16unsigned
+R10305 Cmconstr.cast16unsigned
+R10232 Cminor.eval_expr
+R10266 Values.Vint
+R10380 Cmconstr.cast16unsigned
+R10414 Integers.rolm_zero
+R10414 Integers.rolm_zero
+R10437 Integers.cast16unsigned_and
+R10437 Integers.cast16unsigned_and
+R10584 Cminor.eval_expr
+R10634 Values.Vfloat
+R10642 Floats.singleoffloat
+R10610 Cmconstr.singleoffloat
+R10535 Cminor.eval_expr
+R10569 Values.Vfloat
+R10687 Cmconstr.singleoffloat
+R10813 Cminor.eval_expr
+R10858 Values.Vint
+R10864 Integers.add
+R10839 Cmconstr.addimm
+R10766 Cminor.eval_expr
+R10800 Values.Vint
+R10933 Integers.eq_spec
+R10947 Integers.zero
+R10933 Integers.eq_spec
+R10947 Integers.zero
+R10964 Integers.eq
+R10973 Integers.zero
+R10964 Integers.eq
+R10973 Integers.zero
+R11010 Integers.add_zero
+R11010 Integers.add_zero
+R11038 Cmconstr.addimm_match
+R11038 Cmconstr.addimm_match
+R11100 Integers.add_commut
+R11100 Integers.add_commut
+R11146 Globalenvs.find_symbol
+R11146 Globalenvs.find_symbol
+R11300 Integers.add_assoc
+R11300 Integers.add_assoc
+R11342 Integers.add_commut
+R11342 Integers.add_commut
+R11492 Cminor.eval_expr
+R11537 Values.Vptr
+R11545 Integers.add
+R11518 Cmconstr.addimm
+R11441 Cminor.eval_expr
+R11475 Values.Vptr
+R11618 Integers.eq_spec
+R11632 Integers.zero
+R11618 Integers.eq_spec
+R11632 Integers.zero
+R11649 Integers.eq
+R11658 Integers.zero
+R11649 Integers.eq
+R11658 Integers.zero
+R11695 Integers.add_zero
+R11695 Integers.add_zero
+R11723 Cmconstr.addimm_match
+R11723 Cmconstr.addimm_match
+R11807 Globalenvs.find_symbol
+R11807 Globalenvs.find_symbol
+R11844 Integers.add_commut
+R11844 Integers.add_commut
+R12006 Integers.add_assoc
+R12006 Integers.add_assoc
+R12034 Integers.add_commut
+R12034 Integers.add_commut
+R12123 Integers.add_commut
+R12123 Integers.add_commut
+R12152 Integers.add_assoc
+R12152 Integers.add_assoc
+R12346 Cminor.eval_expr
+R12388 Values.Vint
+R12394 Integers.add
+R12372 Cmconstr.add
+R12299 Cminor.eval_expr
+R12333 Values.Vint
+R12252 Cminor.eval_expr
+R12286 Values.Vint
+R12452 Cmconstr.add_match
+R12452 Cmconstr.add_match
+R12497 Integers.add_commut
+R12497 Integers.add_commut
+R12519 Cmconstrproof.eval_addimm
+R12519 Cmconstrproof.eval_addimm
+R12601 Integers.add
+R12620 Integers.add
+R12644 Integers.add
+R12629 Integers.add
+R12601 Integers.add
+R12620 Integers.add
+R12644 Integers.add
+R12629 Integers.add
+R12671 Cmconstrproof.eval_addimm
+R12671 Cmconstrproof.eval_addimm
+R12735 Integers.add_assoc
+R12735 Integers.add_assoc
+R12735 Integers.add_assoc
+R12735 Integers.add_assoc
+R12763 Integers.add_permut
+R12763 Integers.add_permut
+R12816 Integers.add
+R12835 Integers.add
+R12844 Integers.add
+R12816 Integers.add
+R12835 Integers.add
+R12844 Integers.add
+R12872 Cmconstrproof.eval_addimm
+R12872 Cmconstrproof.eval_addimm
+R12921 Integers.add_assoc
+R12921 Integers.add_assoc
+R12921 Integers.add_assoc
+R12921 Integers.add_assoc
+R12949 Integers.add_commut
+R12949 Integers.add_commut
+R12998 Cmconstrproof.eval_addimm
+R12998 Cmconstrproof.eval_addimm
+R13054 Integers.add
+R13073 Integers.add
+R13082 Integers.add
+R13054 Integers.add
+R13073 Integers.add
+R13082 Integers.add
+R13110 Cmconstrproof.eval_addimm
+R13110 Cmconstrproof.eval_addimm
+R13152 Integers.add_assoc
+R13152 Integers.add_assoc
+R13353 Cminor.eval_expr
+R13395 Values.Vptr
+R13403 Integers.add
+R13379 Cmconstr.add
+R13306 Cminor.eval_expr
+R13340 Values.Vint
+R13257 Cminor.eval_expr
+R13291 Values.Vptr
+R13461 Cmconstr.add_match
+R13461 Cmconstr.add_match
+R13556 Integers.add
+R13575 Integers.add
+R13599 Integers.add
+R13584 Integers.add
+R13556 Integers.add
+R13575 Integers.add
+R13599 Integers.add
+R13584 Integers.add
+R13626 Cmconstrproof.eval_addimm_ptr
+R13626 Cmconstrproof.eval_addimm_ptr
+R13703 Integers.add_assoc
+R13703 Integers.add_assoc
+R13703 Integers.add_assoc
+R13703 Integers.add_assoc
+R13731 Integers.add_permut
+R13731 Integers.add_permut
+R13784 Integers.add
+R13803 Integers.add
+R13812 Integers.add
+R13784 Integers.add
+R13803 Integers.add
+R13812 Integers.add
+R13840 Cmconstrproof.eval_addimm_ptr
+R13840 Cmconstrproof.eval_addimm_ptr
+R13903 Integers.add_assoc
+R13903 Integers.add_assoc
+R13903 Integers.add_assoc
+R13903 Integers.add_assoc
+R13931 Integers.add_commut
+R13931 Integers.add_commut
+R13967 Cmconstrproof.eval_addimm_ptr
+R13967 Cmconstrproof.eval_addimm_ptr
+R14027 Integers.add
+R14046 Integers.add
+R14055 Integers.add
+R14027 Integers.add
+R14046 Integers.add
+R14055 Integers.add
+R14083 Cmconstrproof.eval_addimm_ptr
+R14083 Cmconstrproof.eval_addimm_ptr
+R14129 Integers.add_assoc
+R14129 Integers.add_assoc
+R14332 Cminor.eval_expr
+R14374 Values.Vptr
+R14382 Integers.add
+R14358 Cmconstr.add
+R14283 Cminor.eval_expr
+R14317 Values.Vptr
+R14236 Cminor.eval_expr
+R14270 Values.Vint
+R14440 Cmconstr.add_match
+R14440 Cmconstr.add_match
+R14488 Cmconstrproof.eval_addimm_ptr
+R14488 Cmconstrproof.eval_addimm_ptr
+R14568 Integers.add
+R14587 Integers.add
+R14611 Integers.add
+R14596 Integers.add
+R14568 Integers.add
+R14587 Integers.add
+R14611 Integers.add
+R14596 Integers.add
+R14638 Cmconstrproof.eval_addimm_ptr
+R14638 Cmconstrproof.eval_addimm_ptr
+R14715 Integers.add_assoc
+R14715 Integers.add_assoc
+R14715 Integers.add_assoc
+R14715 Integers.add_assoc
+R14751 Integers.add_commut
+R14751 Integers.add_commut
+R14780 Integers.add_permut
+R14780 Integers.add_permut
+R14833 Integers.add
+R14852 Integers.add
+R14861 Integers.add
+R14833 Integers.add
+R14852 Integers.add
+R14861 Integers.add
+R14889 Cmconstrproof.eval_addimm_ptr
+R14889 Cmconstrproof.eval_addimm_ptr
+R14943 Integers.add_assoc
+R14943 Integers.add_assoc
+R14943 Integers.add_assoc
+R15016 Integers.add
+R15035 Integers.add
+R15044 Integers.add
+R15016 Integers.add
+R15035 Integers.add
+R15044 Integers.add
+R15072 Cmconstrproof.eval_addimm_ptr
+R15072 Cmconstrproof.eval_addimm_ptr
+R15148 Integers.add_assoc
+R15148 Integers.add_assoc
+R15148 Integers.add_assoc
+R15148 Integers.add_assoc
+R15176 Integers.add_commut
+R15176 Integers.add_commut
+R15364 Cminor.eval_expr
+R15406 Values.Vint
+R15412 Integers.sub
+R15390 Cmconstr.sub
+R15317 Cminor.eval_expr
+R15351 Values.Vint
+R15270 Cminor.eval_expr
+R15304 Values.Vint
+R15472 Cmconstr.sub_match
+R15472 Cmconstr.sub_match
+R15518 Integers.sub_add_opp
+R15518 Integers.sub_add_opp
+R15546 Cmconstrproof.eval_addimm
+R15546 Cmconstrproof.eval_addimm
+R15627 Integers.sub
+R15646 Integers.add
+R15670 Integers.sub
+R15655 Integers.sub
+R15627 Integers.sub
+R15646 Integers.add
+R15670 Integers.sub
+R15655 Integers.sub
+R15697 Cmconstrproof.eval_addimm
+R15697 Cmconstrproof.eval_addimm
+R15759 Integers.sub_add_opp
+R15759 Integers.sub_add_opp
+R15759 Integers.sub_add_opp
+R15759 Integers.sub_add_opp
+R15759 Integers.sub_add_opp
+R15795 Integers.add_assoc
+R15795 Integers.add_assoc
+R15795 Integers.add_assoc
+R15795 Integers.add_assoc
+R15830 Integers.add_permut
+R15830 Integers.add_permut
+R15869 Integers.neg_add_distr
+R15869 Integers.neg_add_distr
+R15924 Integers.sub
+R15943 Integers.add
+R15952 Integers.sub
+R15924 Integers.sub
+R15943 Integers.add
+R15952 Integers.sub
+R15980 Cmconstrproof.eval_addimm
+R15980 Cmconstrproof.eval_addimm
+R16022 Integers.sub_add_l
+R16022 Integers.sub_add_l
+R16080 Integers.sub
+R16099 Integers.add
+R16122 Integers.neg
+R16108 Integers.sub
+R16080 Integers.sub
+R16099 Integers.add
+R16122 Integers.neg
+R16108 Integers.sub
+R16146 Cmconstrproof.eval_addimm
+R16146 Cmconstrproof.eval_addimm
+R16189 Integers.add_commut
+R16189 Integers.add_commut
+R16227 Integers.sub_add_r
+R16227 Integers.sub_add_r
+R16427 Cminor.eval_expr
+R16469 Values.Vptr
+R16477 Integers.sub
+R16453 Cmconstr.sub
+R16380 Cminor.eval_expr
+R16414 Values.Vint
+R16331 Cminor.eval_expr
+R16365 Values.Vptr
+R16537 Cmconstr.sub_match
+R16537 Cmconstr.sub_match
+R16583 Integers.sub_add_opp
+R16583 Integers.sub_add_opp
+R16611 Cmconstrproof.eval_addimm_ptr
+R16611 Cmconstrproof.eval_addimm_ptr
+R16710 Integers.sub
+R16729 Integers.add
+R16753 Integers.sub
+R16738 Integers.sub
+R16710 Integers.sub
+R16729 Integers.add
+R16753 Integers.sub
+R16738 Integers.sub
+R16780 Cmconstrproof.eval_addimm_ptr
+R16780 Cmconstrproof.eval_addimm_ptr
+R16846 Integers.sub_add_opp
+R16846 Integers.sub_add_opp
+R16846 Integers.sub_add_opp
+R16846 Integers.sub_add_opp
+R16846 Integers.sub_add_opp
+R16882 Integers.add_assoc
+R16882 Integers.add_assoc
+R16882 Integers.add_assoc
+R16882 Integers.add_assoc
+R16917 Integers.add_permut
+R16917 Integers.add_permut
+R16956 Integers.neg_add_distr
+R16956 Integers.neg_add_distr
+R17020 Integers.sub
+R17039 Integers.add
+R17048 Integers.sub
+R17020 Integers.sub
+R17039 Integers.add
+R17048 Integers.sub
+R17076 Cmconstrproof.eval_addimm_ptr
+R17076 Cmconstrproof.eval_addimm_ptr
+R17122 Integers.sub_add_l
+R17122 Integers.sub_add_l
+R17180 Integers.sub
+R17199 Integers.add
+R17222 Integers.neg
+R17208 Integers.sub
+R17180 Integers.sub
+R17199 Integers.add
+R17222 Integers.neg
+R17208 Integers.sub
+R17246 Cmconstrproof.eval_addimm_ptr
+R17246 Cmconstrproof.eval_addimm_ptr
+R17293 Integers.add_commut
+R17293 Integers.add_commut
+R17331 Integers.sub_add_r
+R17331 Integers.sub_add_r
+R17533 Cminor.eval_expr
+R17575 Values.Vint
+R17581 Integers.sub
+R17559 Cmconstr.sub
+R17484 Cminor.eval_expr
+R17518 Values.Vptr
+R17435 Cminor.eval_expr
+R17469 Values.Vptr
+R17641 Cmconstr.sub_match
+R17641 Cmconstr.sub_match
+R17736 Integers.sub
+R17755 Integers.add
+R17779 Integers.sub
+R17764 Integers.sub
+R17736 Integers.sub
+R17755 Integers.add
+R17779 Integers.sub
+R17764 Integers.sub
+R17806 Cmconstrproof.eval_addimm
+R17806 Cmconstrproof.eval_addimm
+R17884 Coqlib.zeq_true
+R17884 Coqlib.zeq_true
+R17941 Integers.sub_add_opp
+R17941 Integers.sub_add_opp
+R17941 Integers.sub_add_opp
+R17941 Integers.sub_add_opp
+R17941 Integers.sub_add_opp
+R17977 Integers.add_assoc
+R17977 Integers.add_assoc
+R17977 Integers.add_assoc
+R17977 Integers.add_assoc
+R18012 Integers.add_permut
+R18012 Integers.add_permut
+R18051 Integers.neg_add_distr
+R18051 Integers.neg_add_distr
+R18115 Integers.sub
+R18134 Integers.add
+R18143 Integers.sub
+R18115 Integers.sub
+R18134 Integers.add
+R18143 Integers.sub
+R18171 Cmconstrproof.eval_addimm
+R18171 Cmconstrproof.eval_addimm
+R18228 Coqlib.zeq_true
+R18228 Coqlib.zeq_true
+R18265 Integers.sub_add_l
+R18265 Integers.sub_add_l
+R18332 Integers.sub
+R18351 Integers.add
+R18374 Integers.neg
+R18360 Integers.sub
+R18332 Integers.sub
+R18351 Integers.add
+R18374 Integers.neg
+R18360 Integers.sub
+R18398 Cmconstrproof.eval_addimm
+R18398 Cmconstrproof.eval_addimm
+R18455 Coqlib.zeq_true
+R18455 Coqlib.zeq_true
+R18493 Integers.add_commut
+R18493 Integers.add_commut
+R18531 Integers.sub_add_r
+R18531 Integers.sub_add_r
+R18589 Coqlib.zeq_true
+R18589 Coqlib.zeq_true
+R18721 Cminor.eval_expr
+R18774 Values.Vint
+R18780 Integers.rolm
+R18747 Cmconstr.rolm
+R18674 Cminor.eval_expr
+R18708 Values.Vint
+R18850 Cmconstr.rolm_match
+R18850 Cmconstr.rolm_match
+R18916 Integers.is_rlw_mask
+R18933 Integers.and
+R18942 Integers.rol
+R18916 Integers.is_rlw_mask
+R18933 Integers.and
+R18942 Integers.rol
+R19047 Integers.and
+R19081 Integers.repr
+R19056 Integers.add
+R19106 Integers.modu
+R19141 Integers.repr
+R19116 Integers.add
+R19047 Integers.and
+R19081 Integers.repr
+R19056 Integers.add
+R19106 Integers.modu
+R19141 Integers.repr
+R19116 Integers.add
+R19174 Integers.rolm_rolm
+R19174 Integers.rolm_rolm
+R19219 Integers.sub
+R19241 Integers.one
+R19228 Integers.repr
+R19200 Integers.repr
+R19219 Integers.sub
+R19241 Integers.one
+R19228 Integers.repr
+R19200 Integers.repr
+R19278 Integers.repr
+R19259 Integers.modu_and
+R19278 Integers.repr
+R19259 Integers.modu_and
+R19471 Cminor.eval_expr
+R19516 Values.Vint
+R19522 Integers.shl
+R19497 Cmconstr.shlimm
+R19459 Coq.Init.Logic "x = y" type_scope
+R19435 Integers.ltu
+R19446 Integers.repr
+R19461 Coq.Init.Datatypes.true
+R19388 Cminor.eval_expr
+R19422 Values.Vint
+R19584 Integers.eq_spec
+R19598 Integers.zero
+R19615 Integers.eq
+R19624 Integers.zero
+R19584 Integers.eq_spec
+R19598 Integers.zero
+R19615 Integers.eq
+R19624 Integers.zero
+R19661 Integers.shl_zero
+R19661 Integers.shl_zero
+R19706 Integers.shl
+R19725 Integers.rolm
+R19739 Integers.shl
+R19747 Integers.mone
+R19706 Integers.shl
+R19725 Integers.rolm
+R19739 Integers.shl
+R19747 Integers.mone
+R19769 Cmconstrproof.eval_rolm
+R19769 Cmconstrproof.eval_rolm
+R19802 Integers.shl_rolm
+R19802 Integers.shl_rolm
+R19973 Cminor.eval_expr
+R20019 Values.Vint
+R20025 Integers.shru
+R19999 Cmconstr.shruimm
+R19961 Coq.Init.Logic "x = y" type_scope
+R19937 Integers.ltu
+R19948 Integers.repr
+R19963 Coq.Init.Datatypes.true
+R19890 Cminor.eval_expr
+R19924 Values.Vint
+R20089 Integers.eq_spec
+R20103 Integers.zero
+R20120 Integers.eq
+R20129 Integers.zero
+R20089 Integers.eq_spec
+R20103 Integers.zero
+R20120 Integers.eq
+R20129 Integers.zero
+R20166 Integers.shru_zero
+R20166 Integers.shru_zero
+R20212 Integers.shru
+R20232 Integers.rolm
+R20270 Integers.shru
+R20279 Integers.mone
+R20244 Integers.sub
+R20253 Integers.repr
+R20212 Integers.shru
+R20232 Integers.rolm
+R20270 Integers.shru
+R20279 Integers.mone
+R20244 Integers.sub
+R20253 Integers.repr
+R20301 Cmconstrproof.eval_rolm
+R20301 Cmconstrproof.eval_rolm
+R20334 Integers.shru_rolm
+R20334 Integers.shru_rolm
+R20472 Cminor.eval_expr
+R20522 Values.Vint
+R20528 Integers.mul
+R20498 Cmconstr.mulimm_base
+R20425 Cminor.eval_expr
+R20459 Values.Vint
+R20595 Integers.one_bits_decomp
+R20595 Integers.one_bits_decomp
+R20634 Integers.one_bits_range
+R20634 Integers.one_bits_range
+R20667 Coq.ZArith.BinInt.Z_of_nat
+R20676 Integers.wordsize
+R20667 Coq.ZArith.BinInt.Z_of_nat
+R20676 Integers.wordsize
+R20707 Integers.one_bits
+R20707 Integers.one_bits
+R20797 Integers.add_zero
+R20797 Integers.add_zero
+R20822 Integers.shl_mul
+R20822 Integers.shl_mul
+R20843 Cmconstrproof.eval_shlimm
+R20843 Cmconstrproof.eval_shlimm
+R20933 Values.Vint
+R20911 Cminor.eval_Elet
+R20933 Values.Vint
+R20911 Cminor.eval_Elet
+R20977 Integers.add_zero
+R20977 Integers.add_zero
+R21002 Integers.mul_add_distr_r
+R21002 Integers.mul_add_distr_r
+R21036 Integers.shl_mul
+R21036 Integers.shl_mul
+R21062 Integers.shl_mul
+R21062 Integers.shl_mul
+R21092 Cminor.eval_Econs
+R21092 Cminor.eval_Econs
+R21113 Cmconstrproof.eval_shlimm
+R21113 Cmconstrproof.eval_shlimm
+R21132 Cminor.eval_Eletvar
+R21132 Cminor.eval_Eletvar
+R21196 Cminor.eval_Econs
+R21196 Cminor.eval_Econs
+R21216 Cmconstrproof.eval_shlimm
+R21216 Cmconstrproof.eval_shlimm
+R21235 Cminor.eval_Eletvar
+R21235 Cminor.eval_Eletvar
+R21455 Cminor.eval_expr
+R21500 Values.Vint
+R21506 Integers.mul
+R21481 Cmconstr.mulimm
+R21408 Cminor.eval_expr
+R21442 Values.Vint
+R21575 Integers.eq_spec
+R21589 Integers.zero
+R21606 Integers.eq
+R21615 Integers.zero
+R21575 Integers.eq_spec
+R21589 Integers.zero
+R21606 Integers.eq
+R21615 Integers.zero
+R21652 Integers.mul_zero
+R21652 Integers.mul_zero
+R21702 Integers.eq_spec
+R21716 Integers.one
+R21732 Integers.eq
+R21741 Integers.one
+R21702 Integers.eq_spec
+R21716 Integers.one
+R21732 Integers.eq
+R21741 Integers.one
+R21777 Integers.mul_one
+R21777 Integers.mul_one
+R21804 Cmconstr.mulimm_match
+R21804 Cmconstr.mulimm_match
+R21859 Integers.mul_commut
+R21859 Integers.mul_commut
+R21923 Integers.mul
+R21942 Integers.add
+R21965 Integers.mul
+R21951 Integers.mul
+R21923 Integers.mul
+R21942 Integers.add
+R21965 Integers.mul
+R21951 Integers.mul
+R21989 Cmconstrproof.eval_addimm
+R21989 Cmconstrproof.eval_addimm
+R22008 Cmconstrproof.eval_mulimm_base
+R22008 Cmconstrproof.eval_mulimm_base
+R22051 Integers.mul_add_distr_l
+R22051 Integers.mul_add_distr_l
+R22085 Integers.mul_commut
+R22085 Integers.mul_commut
+R22109 Cmconstrproof.eval_mulimm_base
+R22109 Cmconstrproof.eval_mulimm_base
+R22301 Cminor.eval_expr
+R22343 Values.Vint
+R22349 Integers.mul
+R22327 Cmconstr.mul
+R22254 Cminor.eval_expr
+R22288 Values.Vint
+R22207 Cminor.eval_expr
+R22241 Values.Vint
+R22409 Cmconstr.mul_match
+R22409 Cmconstr.mul_match
+R22454 Integers.mul_commut
+R22454 Integers.mul_commut
+R22476 Cmconstrproof.eval_mulimm
+R22476 Cmconstrproof.eval_mulimm
+R22515 Cmconstrproof.eval_mulimm
+R22515 Cmconstrproof.eval_mulimm
+R22726 Cminor.eval_expr
+R22769 Values.Vint
+R22775 Integers.divs
+R22752 Cmconstr.divs
+R22709 Coq.Init.Logic "x <> y" type_scope
+R22712 Integers.zero
+R22660 Cminor.eval_expr
+R22694 Values.Vint
+R22613 Cminor.eval_expr
+R22647 Values.Vint
+R22810 Cmconstr.divs
+R22835 Integers.eq
+R22842 Integers.eq_spec
+R22856 Integers.zero
+R23225 Cminor.eval_expr
+R23280 Values.Vint
+R23286 Integers.sub
+R23297 Integers.mul
+R23251 Cmconstr.mod_aux
+R23208 Coq.Init.Logic "x <> y" type_scope
+R23211 Integers.zero
+R23159 Cminor.eval_expr
+R23193 Values.Vint
+R23112 Cminor.eval_expr
+R23146 Values.Vint
+R23032 Coq.Init.Logic "x = y" type_scope
+R22979 Op.eval_operation
+R23014 Coq.Lists.List "x :: y" list_scope
+R23007 Values.Vint
+R23024 Coq.Lists.List "x :: y" list_scope
+R23017 Values.Vint
+R23027 Coq.Lists.List.nil
+R23037 Coq.Init.Datatypes.Some
+R23043 Values.Vint
+R22961 Coq.Init.Logic "x <> y" type_scope
+R22964 Integers.zero
+R23368 Cminor.eval_Elet
+R23368 Cminor.eval_Elet
+R23397 Cminor.eval_Elet
+R23397 Cminor.eval_Elet
+R23417 Cmconstrproof.eval_lift
+R23417 Cmconstrproof.eval_lift
+R23448 Cminor.eval_Eop
+R23448 Cminor.eval_Eop
+R23465 Cminor.eval_Econs
+R23465 Cminor.eval_Econs
+R23487 Cminor.eval_Eletvar
+R23487 Cminor.eval_Eletvar
+R23530 Cminor.eval_Econs
+R23530 Cminor.eval_Econs
+R23549 Cminor.eval_Eop
+R23549 Cminor.eval_Eop
+R23569 Cminor.eval_Econs
+R23569 Cminor.eval_Econs
+R23588 Cminor.eval_Eop
+R23588 Cminor.eval_Eop
+R23607 Cminor.eval_Econs
+R23607 Cminor.eval_Econs
+R23625 Cminor.eval_Eletvar
+R23625 Cminor.eval_Eletvar
+R23668 Cminor.eval_Econs
+R23668 Cminor.eval_Econs
+R23686 Cminor.eval_Eletvar
+R23686 Cminor.eval_Eletvar
+R23728 Cminor.eval_Enil
+R23728 Cminor.eval_Enil
+R23769 Cminor.eval_Econs
+R23769 Cminor.eval_Econs
+R23787 Cminor.eval_Eletvar
+R23787 Cminor.eval_Eletvar
+R23829 Cminor.eval_Enil
+R23829 Cminor.eval_Enil
+R23866 Cminor.eval_Enil
+R23866 Cminor.eval_Enil
+R24075 Cminor.eval_expr
+R24118 Values.Vint
+R24124 Integers.mods
+R24101 Cmconstr.mods
+R24058 Coq.Init.Logic "x <> y" type_scope
+R24061 Integers.zero
+R24009 Cminor.eval_expr
+R24043 Values.Vint
+R23962 Cminor.eval_expr
+R23996 Values.Vint
+R24181 Integers.mods_divs
+R24181 Integers.mods_divs
+R24206 Cmconstrproof.eval_mod_aux
+R24206 Cmconstrproof.eval_mod_aux
+R24254 Integers.eq
+R24261 Integers.eq_spec
+R24276 Integers.zero
+R24495 Cminor.eval_expr
+R24558 Values.Vint
+R24564 Integers.divu
+R24521 Cminor.Eop
+R24534 Cmconstr "x ::: y" cminor_scope
+R24540 Cmconstr "x ::: y" cminor_scope
+R24544 Cminor.Enil
+R24525 Op.Odivu
+R24478 Coq.Init.Logic "x <> y" type_scope
+R24481 Integers.zero
+R24429 Cminor.eval_expr
+R24463 Values.Vint
+R24382 Cminor.eval_expr
+R24416 Values.Vint
+R24624 Integers.eq
+R24631 Integers.eq_spec
+R24645 Integers.zero
+R24858 Cminor.eval_expr
+R24901 Values.Vint
+R24907 Integers.divu
+R24884 Cmconstr.divu
+R24841 Coq.Init.Logic "x <> y" type_scope
+R24844 Integers.zero
+R24792 Cminor.eval_expr
+R24826 Values.Vint
+R24745 Cminor.eval_expr
+R24779 Values.Vint
+R24969 Cmconstr.divu_match
+R24969 Cmconstr.divu_match
+R25014 Integers.is_power2
+R25014 Integers.is_power2
+R25052 Integers.divu_pow2
+R25052 Integers.divu_pow2
+R25085 Cmconstrproof.eval_shruimm
+R25085 Cmconstrproof.eval_shruimm
+R25113 Integers.is_power2_range
+R25113 Integers.is_power2_range
+R25174 Cmconstrproof.eval_divu_base
+R25174 Cmconstrproof.eval_divu_base
+R25223 Cmconstrproof.eval_divu_base
+R25223 Cmconstrproof.eval_divu_base
+R25428 Cminor.eval_expr
+R25471 Values.Vint
+R25477 Integers.modu
+R25454 Cmconstr.modu
+R25411 Coq.Init.Logic "x <> y" type_scope
+R25414 Integers.zero
+R25362 Cminor.eval_expr
+R25396 Values.Vint
+R25315 Cminor.eval_expr
+R25349 Values.Vint
+R25537 Cmconstr.divu_match
+R25537 Cmconstr.divu_match
+R25582 Integers.is_power2
+R25582 Integers.is_power2
+R25620 Integers.modu_and
+R25620 Integers.modu_and
+R25657 Integers.rolm_zero
+R25657 Integers.rolm_zero
+R25678 Cmconstrproof.eval_rolm
+R25678 Cmconstrproof.eval_rolm
+R25712 Integers.modu_divu
+R25712 Integers.modu_divu
+R25734 Cmconstrproof.eval_mod_aux
+R25734 Cmconstrproof.eval_mod_aux
+R25775 Integers.eq
+R25782 Integers.eq_spec
+R25797 Integers.zero
+R25872 Integers.modu_divu
+R25872 Integers.modu_divu
+R25894 Cmconstrproof.eval_mod_aux
+R25894 Cmconstrproof.eval_mod_aux
+R25935 Integers.eq
+R25942 Integers.eq_spec
+R25957 Integers.zero
+R26135 Cminor.eval_expr
+R26180 Values.Vint
+R26186 Integers.and
+R26161 Cmconstr.andimm
+R26088 Cminor.eval_expr
+R26122 Values.Vint
+R26240 Integers.is_rlw_mask
+R26240 Integers.is_rlw_mask
+R26273 Integers.rolm_zero
+R26273 Integers.rolm_zero
+R26294 Cmconstrproof.eval_rolm
+R26294 Cmconstrproof.eval_rolm
+R26484 Cminor.eval_expr
+R26526 Values.Vint
+R26532 Integers.and
+R26510 Cmconstr.and
+R26437 Cminor.eval_expr
+R26471 Values.Vint
+R26390 Cminor.eval_expr
+R26424 Values.Vint
+R26590 Cmconstr.mul_match
+R26590 Cmconstr.mul_match
+R26635 Integers.and_commut
+R26635 Integers.and_commut
+R26657 Cmconstrproof.eval_andimm
+R26657 Cmconstrproof.eval_andimm
+R26696 Cmconstrproof.eval_andimm
+R26696 Cmconstrproof.eval_andimm
+R26932 Coq.Init.Logic "A /\ B" type_scope
+R26927 Coq.Init.Logic "x = y" type_scope
+R26943 Coq.Init.Logic "A /\ B" type_scope
+R26938 Coq.Init.Logic "x = y" type_scope
+R26954 Coq.Init.Logic "A /\ B" type_scope
+R26949 Coq.Init.Logic "x = y" type_scope
+R26960 Coq.Init.Logic "x = y" type_scope
+R26882 Cminor.eval_expr
+R26840 Cminor.eval_expr
+R26828 Coq.Init.Logic "x = y" type_scope
+R26807 Cmconstr.same_expr_pure
+R26830 Coq.Init.Datatypes.true
+R27101 AST.ident_eq
+R27101 AST.ident_eq
+R27179 Coq.Init.Logic "x = y" type_scope
+R27179 Coq.Init.Logic "x = y" type_scope
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R27380 Cminor.eval_expr
+R27421 Values.Vint
+R27427 Integers.or
+R27406 Cmconstr.or
+R27333 Cminor.eval_expr
+R27367 Values.Vint
+R27286 Cminor.eval_expr
+R27320 Values.Vint
+R27483 Cmconstr.or_match
+R27483 Cmconstr.or_match
+R27520 Integers.eq_spec
+R27556 Integers.eq
+R27520 Integers.eq_spec
+R27556 Integers.eq
+R27596 Integers.is_rlw_mask
+R27613 Integers.or
+R27596 Integers.is_rlw_mask
+R27613 Integers.or
+R27645 Cmconstr.same_expr_pure
+R27645 Cmconstr.same_expr_pure
+R27740 Cmconstrproof.eval_same_expr_pure
+R27740 Cmconstrproof.eval_same_expr_pure
+R27959 Integers.or_rolm
+R27959 Integers.or_rolm
+R28204 Cminor.eval_expr
+R28246 Values.Vint
+R28252 Integers.xor
+R28230 Cmconstr.xor
+R28157 Cminor.eval_expr
+R28191 Values.Vint
+R28110 Cminor.eval_expr
+R28144 Values.Vint
+R28284 Cmconstr.xor
+R28487 Cminor.eval_expr
+R28529 Values.Vint
+R28535 Integers.shl
+R28513 Cmconstr.shl
+R28475 Coq.Init.Logic "x = y" type_scope
+R28451 Integers.ltu
+R28462 Integers.repr
+R28477 Coq.Init.Datatypes.true
+R28404 Cminor.eval_expr
+R28438 Values.Vint
+R28357 Cminor.eval_expr
+R28391 Values.Vint
+R28593 Cmconstr.shift_match
+R28593 Cmconstr.shift_match
+R28637 Cmconstrproof.eval_shlimm
+R28637 Cmconstrproof.eval_shlimm
+R28889 Cminor.eval_expr
+R28931 Values.Vint
+R28937 Integers.shr
+R28915 Cmconstr.shr
+R28877 Coq.Init.Logic "x = y" type_scope
+R28853 Integers.ltu
+R28864 Integers.repr
+R28879 Coq.Init.Datatypes.true
+R28806 Cminor.eval_expr
+R28840 Values.Vint
+R28759 Cminor.eval_expr
+R28793 Values.Vint
+R28971 Cmconstr.shr
+R29200 Cminor.eval_expr
+R29243 Values.Vint
+R29249 Integers.shru
+R29226 Cmconstr.shru
+R29188 Coq.Init.Logic "x = y" type_scope
+R29164 Integers.ltu
+R29175 Integers.repr
+R29190 Coq.Init.Datatypes.true
+R29117 Cminor.eval_expr
+R29151 Values.Vint
+R29070 Cminor.eval_expr
+R29104 Values.Vint
+R29309 Cmconstr.shift_match
+R29309 Cmconstr.shift_match
+R29353 Cmconstrproof.eval_shruimm
+R29353 Cmconstrproof.eval_shruimm
+R29575 Cminor.eval_expr
+R29618 Values.Vfloat
+R29626 Floats.add
+R29601 Cmconstr.addf
+R29526 Cminor.eval_expr
+R29560 Values.Vfloat
+R29477 Cminor.eval_expr
+R29511 Values.Vfloat
+R29687 Cmconstr.addf_match
+R29687 Cmconstr.addf_match
+R29801 Cminor.eval_Elet
+R29801 Cminor.eval_Elet
+R29840 Cminor.eval_Econs
+R29840 Cminor.eval_Econs
+R29858 Cmconstrproof.eval_lift
+R29858 Cmconstrproof.eval_lift
+R29889 Cminor.eval_Econs
+R29889 Cminor.eval_Econs
+R29907 Cmconstrproof.eval_lift
+R29907 Cmconstrproof.eval_lift
+R29939 Cminor.eval_Econs
+R29939 Cminor.eval_Econs
+R29957 Cminor.eval_Eletvar
+R29957 Cminor.eval_Eletvar
+R29999 Cminor.eval_Enil
+R29999 Cminor.eval_Enil
+R30030 Floats.addf_commut
+R30030 Floats.addf_commut
+R30240 Cminor.eval_expr
+R30283 Values.Vfloat
+R30291 Floats.sub
+R30266 Cmconstr.subf
+R30191 Cminor.eval_expr
+R30225 Values.Vfloat
+R30142 Cminor.eval_expr
+R30176 Values.Vfloat
+R30352 Cmconstr.subf_match
+R30352 Cmconstr.subf_match
+R30606 Cminor.eval_expr
+R30649 Values.Vfloat
+R30657 Floats.mul
+R30632 Cmconstr.mulf
+R30557 Cminor.eval_expr
+R30591 Values.Vfloat
+R30508 Cminor.eval_expr
+R30542 Values.Vfloat
+R30691 Cmconstr.mulf
+R30864 Cminor.eval_expr
+R30907 Values.Vfloat
+R30915 Floats.div
+R30890 Cmconstr.divf
+R30815 Cminor.eval_expr
+R30849 Values.Vfloat
+R30766 Cminor.eval_expr
+R30800 Values.Vfloat
+R30949 Cmconstr.divf
+R31119 Cminor.eval_expr
+R31163 Values.of_bool
+R31176 Integers.cmp
+R31145 Cmconstr.cmp
+R31072 Cminor.eval_expr
+R31106 Values.Vint
+R31025 Cminor.eval_expr
+R31059 Values.Vint
+R31213 Cmconstr.cmp
+R31234 Integers.cmp
+R31234 Integers.cmp
+R31493 Cminor.eval_expr
+R31519 Cmconstr.cmp
+R31460 Coq.Init.Logic "A \/ B" type_scope
+R31447 Coq.Init.Logic "A /\ B" type_scope
+R31441 Coq.Init.Logic "x = y" type_scope
+R31443 AST.Ceq
+R31452 Coq.Init.Logic "x = y" type_scope
+R31454 Values.Vfalse
+R31474 Coq.Init.Logic "A /\ B" type_scope
+R31468 Coq.Init.Logic "x = y" type_scope
+R31470 AST.Cne
+R31479 Coq.Init.Logic "x = y" type_scope
+R31481 Values.Vtrue
+R31384 Cminor.eval_expr
+R31418 Values.Vint
+R31423 Integers.zero
+R31335 Cminor.eval_expr
+R31369 Values.Vptr
+R31559 Cmconstr.cmp
+R31869 Cminor.eval_expr
+R31895 Cmconstr.cmp
+R31836 Coq.Init.Logic "A \/ B" type_scope
+R31823 Coq.Init.Logic "A /\ B" type_scope
+R31817 Coq.Init.Logic "x = y" type_scope
+R31819 AST.Ceq
+R31828 Coq.Init.Logic "x = y" type_scope
+R31830 Values.Vfalse
+R31850 Coq.Init.Logic "A /\ B" type_scope
+R31844 Coq.Init.Logic "x = y" type_scope
+R31846 AST.Cne
+R31855 Coq.Init.Logic "x = y" type_scope
+R31857 Values.Vtrue
+R31765 Cminor.eval_expr
+R31799 Values.Vptr
+R31711 Cminor.eval_expr
+R31745 Values.Vint
+R31750 Integers.zero
+R31935 Cmconstr.cmp
+R32182 Cminor.eval_expr
+R32226 Values.of_bool
+R32239 Integers.cmp
+R32208 Cmconstr.cmp
+R32133 Cminor.eval_expr
+R32167 Values.Vptr
+R32084 Cminor.eval_expr
+R32118 Values.Vptr
+R32276 Cmconstr.cmp
+R32316 Coqlib.zeq_true
+R32316 Coqlib.zeq_true
+R32335 Integers.cmp
+R32335 Integers.cmp
+R32522 Cminor.eval_expr
+R32567 Values.of_bool
+R32580 Integers.cmpu
+R32548 Cmconstr.cmpu
+R32475 Cminor.eval_expr
+R32509 Values.Vint
+R32428 Cminor.eval_expr
+R32462 Values.Vint
+R32618 Cmconstr.cmpu
+R32640 Integers.cmpu
+R32640 Integers.cmpu
+R32832 Cminor.eval_expr
+R32877 Values.of_bool
+R32890 Floats.cmp
+R32858 Cmconstr.cmpf
+R32783 Cminor.eval_expr
+R32817 Values.Vfloat
+R32734 Cminor.eval_expr
+R32768 Values.Vfloat
+R32929 Cmconstr.cmpf
+R32951 Floats.cmp
+R32951 Floats.cmp
+R33125 Cminor.eval_condexpr
+R33172 Cminor.CEcond
+R33207 Cmconstr "x ::: y" cminor_scope
+R33211 Cminor.Enil
+R33180 Op.Ccompuimm
+R33194 Integers.zero
+R33190 AST.Cne
+R33100 Values.bool_of_val
+R33060 Cminor.eval_expr
+R33051 Coq.Init.Datatypes.bool
+R33270 Cminor.eval_CEcond
+R33270 Cminor.eval_CEcond
+R33336 Integers.eq_false
+R33336 Integers.eq_false
+R33513 Cminor.eval_condexpr
+R33543 Cmconstr.condexpr_of_expr
+R33488 Values.bool_of_val
+R33448 Cminor.eval_expr
+R33439 Coq.Init.Datatypes.bool
+R33625 Cmconstrproof.eval_base_condition_of_expr
+R33625 Cmconstrproof.eval_base_condition_of_expr
+R33625 Cmconstrproof.eval_base_condition_of_expr
+R33625 Cmconstrproof.eval_base_condition_of_expr
+R33625 Cmconstrproof.eval_base_condition_of_expr
+R33625 Cmconstrproof.eval_base_condition_of_expr
+R33625 Cmconstrproof.eval_base_condition_of_expr
+R33625 Cmconstrproof.eval_base_condition_of_expr
+R33625 Cmconstrproof.eval_base_condition_of_expr
+R33625 Cmconstrproof.eval_base_condition_of_expr
+R33694 Cmconstrproof.eval_base_condition_of_expr
+R33694 Cmconstrproof.eval_base_condition_of_expr
+R33694 Cmconstrproof.eval_base_condition_of_expr
+R33694 Cmconstrproof.eval_base_condition_of_expr
+R33694 Cmconstrproof.eval_base_condition_of_expr
+R33694 Cmconstrproof.eval_base_condition_of_expr
+R33694 Cmconstrproof.eval_base_condition_of_expr
+R33694 Cmconstrproof.eval_base_condition_of_expr
+R33694 Cmconstrproof.eval_base_condition_of_expr
+R33694 Cmconstrproof.eval_base_condition_of_expr
+R33694 Cmconstrproof.eval_base_condition_of_expr
+R33694 Cmconstrproof.eval_base_condition_of_expr
+R33694 Cmconstrproof.eval_base_condition_of_expr
+R33694 Cmconstrproof.eval_base_condition_of_expr
+R33694 Cmconstrproof.eval_base_condition_of_expr
+R33694 Cmconstrproof.eval_base_condition_of_expr
+R33694 Cmconstrproof.eval_base_condition_of_expr
+R33694 Cmconstrproof.eval_base_condition_of_expr
+R33694 Cmconstrproof.eval_base_condition_of_expr
+R33694 Cmconstrproof.eval_base_condition_of_expr
+R33694 Cmconstrproof.eval_base_condition_of_expr
+R33694 Cmconstrproof.eval_base_condition_of_expr
+R33694 Cmconstrproof.eval_base_condition_of_expr
+R33694 Cmconstrproof.eval_base_condition_of_expr
+R33694 Cmconstrproof.eval_base_condition_of_expr
+R33694 Cmconstrproof.eval_base_condition_of_expr
+R33694 Cmconstrproof.eval_base_condition_of_expr
+R33694 Cmconstrproof.eval_base_condition_of_expr
+R33694 Cmconstrproof.eval_base_condition_of_expr
+R33694 Cmconstrproof.eval_base_condition_of_expr
+R33694 Cmconstrproof.eval_base_condition_of_expr
+R33694 Cmconstrproof.eval_base_condition_of_expr
+R33694 Cmconstrproof.eval_base_condition_of_expr
+R33694 Cmconstrproof.eval_base_condition_of_expr
+R33694 Cmconstrproof.eval_base_condition_of_expr
+R33694 Cmconstrproof.eval_base_condition_of_expr
+R33694 Cmconstrproof.eval_base_condition_of_expr
+R33694 Cmconstrproof.eval_base_condition_of_expr
+R33694 Cmconstrproof.eval_base_condition_of_expr
+R33694 Cmconstrproof.eval_base_condition_of_expr
+R33694 Cmconstrproof.eval_base_condition_of_expr
+R33694 Cmconstrproof.eval_base_condition_of_expr
+R33694 Cmconstrproof.eval_base_condition_of_expr
+R33694 Cmconstrproof.eval_base_condition_of_expr
+R33694 Cmconstrproof.eval_base_condition_of_expr
+R33910 Integers.eq_false
+R33910 Integers.eq_false
+R33962 Integers.eq_true
+R33962 Integers.eq_true
+R33997 Cmconstrproof.eval_base_condition_of_expr
+R33997 Cmconstrproof.eval_base_condition_of_expr
+R34056 Cminor.eval_CEcond
+R34056 Cminor.eval_CEcond
+R34102 Op.eval_condition
+R34102 Op.eval_condition
+R34466 Cminor.eval_expr
+R34492 Cmconstr.conditionalexpr
+R34424 Cminor.eval_expr
+R34404 Values.is_true
+R34362 Cminor.eval_expr
+R34604 Coq.Init.Datatypes.true
+R34577 Cminor.eval_Econdition
+R34604 Coq.Init.Datatypes.true
+R34577 Cminor.eval_Econdition
+R34625 Cmconstrproof.eval_condition_of_expr
+R34625 Cmconstrproof.eval_condition_of_expr
+R34869 Cminor.eval_expr
+R34895 Cmconstr.conditionalexpr
+R34827 Cminor.eval_expr
+R34806 Values.is_false
+R34764 Cminor.eval_expr
+R35007 Coq.Init.Datatypes.false
+R34980 Cminor.eval_Econdition
+R35007 Coq.Init.Datatypes.false
+R34980 Cminor.eval_Econdition
+R35029 Cmconstrproof.eval_condition_of_expr
+R35029 Cmconstrproof.eval_condition_of_expr
+R35210 Cmconstr.addressing
+R35228 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R35248 Coq.Init.Logic "'exists' x , p" type_scope
+R35306 Coq.Init.Logic "A /\ B" type_scope
+R35263 Cminor.eval_exprlist
+R35344 Coq.Init.Logic "x = y" type_scope
+R35314 Op.eval_addressing
+R35346 Coq.Init.Datatypes.Some
+R35186 Coq.Init.Logic "x = y" type_scope
+R35188 Values.Vptr
+R35144 Cminor.eval_expr
+R35410 Cmconstr.addressing_match
+R35410 Cmconstr.addressing_match
+R35461 Coq.Lists.List.nil
+R35465 Values.val
+R35461 Coq.Lists.List.nil
+R35465 Values.val
+R35537 Coq.Lists.List.nil
+R35541 Values.val
+R35537 Coq.Lists.List.nil
+R35541 Values.val
+R35667 Coq.Lists.List "x :: y" list_scope
+R35659 Values.Vint
+R35670 Coq.Lists.List.nil
+R35667 Coq.Lists.List "x :: y" list_scope
+R35659 Values.Vint
+R35670 Coq.Lists.List.nil
+R35735 Globalenvs.find_symbol
+R35735 Globalenvs.find_symbol
+R35826 Globalenvs.find_symbol
+R35826 Globalenvs.find_symbol
+R35899 Coq.Lists.List "x :: y" list_scope
+R35891 Values.Vint
+R35902 Coq.Lists.List.nil
+R35899 Coq.Lists.List "x :: y" list_scope
+R35891 Values.Vint
+R35902 Coq.Lists.List.nil
+R35958 Globalenvs.find_symbol
+R35958 Globalenvs.find_symbol
+R36072 Coq.Lists.List "x :: y" list_scope
+R36062 Values.Vptr
+R36075 Coq.Lists.List.nil
+R36072 Coq.Lists.List "x :: y" list_scope
+R36062 Values.Vptr
+R36075 Coq.Lists.List.nil
+R36191 Coq.Lists.List "x :: y" list_scope
+R36184 Values.Vint
+R36205 Coq.Lists.List "x :: y" list_scope
+R36194 Values.Vptr
+R36208 Coq.Lists.List.nil
+R36191 Coq.Lists.List "x :: y" list_scope
+R36184 Values.Vint
+R36205 Coq.Lists.List "x :: y" list_scope
+R36194 Values.Vptr
+R36208 Coq.Lists.List.nil
+R36266 Integers.add_commut
+R36266 Integers.add_commut
+R36316 Coq.Lists.List "x :: y" list_scope
+R36306 Values.Vptr
+R36327 Coq.Lists.List "x :: y" list_scope
+R36319 Values.Vint
+R36330 Coq.Lists.List.nil
+R36316 Coq.Lists.List "x :: y" list_scope
+R36306 Values.Vptr
+R36327 Coq.Lists.List "x :: y" list_scope
+R36319 Values.Vint
+R36330 Coq.Lists.List.nil
+R36399 Coq.Lists.List "x :: y" list_scope
+R36402 Coq.Lists.List.nil
+R36399 Coq.Lists.List "x :: y" list_scope
+R36402 Coq.Lists.List.nil
+R36465 Integers.add_zero
+R36465 Integers.add_zero
+R36629 Cminor.eval_expr
+R36655 Cmconstr.load
+R36614 Coq.Init.Logic "x = y" type_scope
+R36593 Mem.loadv
+R36616 Coq.Init.Datatypes.Some
+R36553 Cminor.eval_expr
+R36785 Cmconstrproof.eval_addressing
+R36824 Coq.Init.Logic.refl_equal
+R36785 Cmconstrproof.eval_addressing
+R36824 Coq.Init.Logic.refl_equal
+R36852 Cmconstr.addressing
+R36852 Cmconstr.addressing
+R36898 Cminor.eval_Eload
+R36898 Cminor.eval_Eload
+R37126 Cminor.eval_expr
+R37152 Cmconstr.store
+R37111 Coq.Init.Logic "x = y" type_scope
+R37085 Mem.storev
+R37113 Coq.Init.Datatypes.Some
+R37043 Cminor.eval_expr
+R37001 Cminor.eval_expr
+R37288 Cmconstrproof.eval_addressing
+R37327 Coq.Init.Logic.refl_equal
+R37288 Cmconstrproof.eval_addressing
+R37327 Coq.Init.Logic.refl_equal
+R37355 Cmconstr.addressing
+R37355 Cmconstr.addressing
+R37402 Cminor.eval_Estore
+R37402 Cminor.eval_Estore
+R37617 Cminor.exec_stmt
+R37640 Cmconstr.ifthenelse
+R37571 Cminor.exec_stmtlist
+R37552 Values.is_true
+R37511 Cminor.eval_expr
+R37527 Coq.Lists.List.nil
+R37748 Coq.Init.Datatypes.true
+R37720 Cminor.exec_Sifthenelse
+R37748 Coq.Init.Datatypes.true
+R37720 Cminor.exec_Sifthenelse
+R37763 Cmconstrproof.eval_condition_of_expr
+R37763 Cmconstrproof.eval_condition_of_expr
+R38014 Cminor.exec_stmt
+R38037 Cmconstr.ifthenelse
+R37967 Cminor.exec_stmtlist
+R37947 Values.is_false
+R37906 Cminor.eval_expr
+R37922 Coq.Lists.List.nil
+R38145 Coq.Init.Datatypes.false
+R38117 Cminor.exec_Sifthenelse
+R38145 Coq.Init.Datatypes.false
+R38117 Cminor.exec_Sifthenelse
+R38161 Cmconstrproof.eval_condition_of_expr
+R38161 Cmconstrproof.eval_condition_of_expr
+FCminorplus
+R250 Integers.int
+R284 Floats.float
+R954 AST.comparison
+R989 AST.comparison
+R1024 AST.comparison
+R1085 AST.ident
+R1113 AST.ident
+R1141 AST.ident
+R1173 Cminorplus.operation
+R1215 AST.memory_chunk
+R1257 AST.memory_chunk
+R1306 AST.signature
+R1436 Coq.Init.Datatypes.nat
+R1568 Cminorplus.expr
+R1598 Cminorplus.expr
+R1703 Coq.Init.Datatypes.nat
+R1728 Coq.Init.Datatypes.option
+R1735 Cminorplus.expr
+R1881 AST.memory_chunk
+R1925 Coq.ZArith.BinInt.Z
+R1995 AST.signature
+R2019 Coq.Lists.List.list
+R2031 Coq.Init.Datatypes "x * y" type_scope
+R2025 AST.ident
+R2033 AST.memory_chunk
+R2059 Coq.Lists.List.list
+R2071 Coq.Init.Datatypes "x * y" type_scope
+R2065 AST.ident
+R2073 Cminorplus.local_variable
+R2101 Cminorplus.stmtlist
+R2136 AST.program
+R2148 Cminorplus.function
+R2252 Coq.Init.Datatypes.nat
+R2283 Coq.Init.Datatypes.option
+R2290 Values.val
+R2432 Cminorplus.Out_normal
+R2444 Coq.Init.Datatypes.None
+R2454 Coq.Init.Logic "x = y" type_scope
+R2456 Values.Vundef
+R2467 Cminorplus.Out_return
+R2478 Coq.Init.Datatypes.None
+R2484 Coq.Init.Datatypes.None
+R2494 Coq.Init.Logic "x = y" type_scope
+R2496 Values.Vundef
+R2507 Cminorplus.Out_return
+R2519 Coq.Init.Datatypes.Some
+R2529 Coq.Init.Datatypes.Some
+R2542 Coq.Init.Logic "x = y" type_scope
+R2559 Coq.Init.Logic.False
+R2392 Values.val
+R2376 Coq.Init.Datatypes.option
+R2383 AST.typ
+R2362 Cminorplus.outcome
+R2615 Cminorplus.outcome
+R2647 Cminorplus.Out_normal
+R2661 Cminorplus.Out_normal
+R2676 Cminorplus.Out_exit
+R2685 Coq.Init.Datatypes.O
+R2690 Cminorplus.Out_normal
+R2705 Cminorplus.Out_exit
+R2715 Coq.Init.Datatypes.S
+R2723 Cminorplus.Out_exit
+R2738 Cminorplus.Out_return
+R2757 Cminorplus.Out_return
+R2604 Cminorplus.outcome
+R2800 Globalenvs.t
+R2807 Cminorplus.function
+R2835 Maps.t
+R2850 Coq.Init.Datatypes "x * y" type_scope
+R2844 Values.block
+R2852 Cminorplus.local_variable
+R2892 Cminorplus.env
+R2899 Maps.empty
+R2918 Coq.Init.Datatypes "x * y" type_scope
+R2912 Values.block
+R2920 Cminorplus.local_variable
+R2958 Coq.Lists.List.list
+R2963 Values.val
+R3010 Coq.ZArith.BinInt.Z
+R3035 Cminorplus.LVscalar
+R3053 Mem.size_chunk
+R3074 Cminorplus.LVarray
+R3088 Coq.ZArith.Zmin.Zmax
+R2992 Cminorplus.local_variable
+R3236 Coq.Lists.List "x ++ y" list_scope
+R3149 Coq.Lists.List.map
+R3223 Cminorplus.fn_params
+R3179 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R3180 Coq.Init.Datatypes.fst
+R3194 Cminorplus.LVscalar
+R3204 Coq.Init.Datatypes.snd
+R3242 Cminorplus.fn_vars
+R3134 Cminorplus.function
+R3299 Coq.Lists.List.map
+R3337 Cminorplus.fn_params
+R3310 Coq.Init.Datatypes.fst
+R3320 AST.memory_chunk
+R3314 AST.ident
+R3284 Cminorplus.function
+R3394 Coq.Lists.List.map
+R3434 Cminorplus.fn_vars
+R3405 Coq.Init.Datatypes.fst
+R3415 Cminorplus.local_variable
+R3409 AST.ident
+R3379 Cminorplus.function
+R3502 Coq.Init.Datatypes.option
+R3509 Values.val
+R3521 Integers.eq
+R3530 Integers.zero
+R3622 Coq.Init.Datatypes.None
+R3560 AST.Ceq
+R3567 Coq.Init.Datatypes.Some
+R3572 Values.Vfalse
+R3581 AST.Cne
+R3588 Coq.Init.Datatypes.Some
+R3593 Values.Vtrue
+R3606 Coq.Init.Datatypes.None
+R3495 Integers.int
+R3479 AST.comparison
+R3696 Coq.Init.Datatypes.option
+R3703 Values.val
+R3734 Cminorplus.Ointconst
+R3747 Coq.Lists.List.nil
+R3754 Coq.Init.Datatypes.Some
+R3760 Values.Vint
+R3772 Cminorplus.Ofloatconst
+R3787 Coq.Lists.List.nil
+R3794 Coq.Init.Datatypes.Some
+R3800 Values.Vfloat
+R3814 Cminorplus.Ocast8unsigned
+R3838 Coq.Lists.List "x :: y" list_scope
+R3830 Values.Vint
+R3841 Coq.Lists.List.nil
+R3848 Coq.Init.Datatypes.Some
+R3854 Values.Vint
+R3860 Integers.cast8unsigned
+R3887 Cminorplus.Ocast8signed
+R3909 Coq.Lists.List "x :: y" list_scope
+R3901 Values.Vint
+R3912 Coq.Lists.List.nil
+R3919 Coq.Init.Datatypes.Some
+R3925 Values.Vint
+R3931 Integers.cast8signed
+R3956 Cminorplus.Ocast16unsigned
+R3981 Coq.Lists.List "x :: y" list_scope
+R3973 Values.Vint
+R3984 Coq.Lists.List.nil
+R3991 Coq.Init.Datatypes.Some
+R3997 Values.Vint
+R4003 Integers.cast16unsigned
+R4031 Cminorplus.Ocast16signed
+R4054 Coq.Lists.List "x :: y" list_scope
+R4046 Values.Vint
+R4057 Coq.Lists.List.nil
+R4064 Coq.Init.Datatypes.Some
+R4070 Values.Vint
+R4076 Integers.cast16signed
+R4102 Cminorplus.Onotint
+R4119 Coq.Lists.List "x :: y" list_scope
+R4111 Values.Vint
+R4122 Coq.Lists.List.nil
+R4129 Coq.Init.Datatypes.Some
+R4135 Values.Vint
+R4141 Integers.not
+R4158 Cminorplus.Oadd
+R4172 Coq.Lists.List "x :: y" list_scope
+R4164 Values.Vint
+R4183 Coq.Lists.List "x :: y" list_scope
+R4175 Values.Vint
+R4186 Coq.Lists.List.nil
+R4193 Coq.Init.Datatypes.Some
+R4199 Values.Vint
+R4205 Integers.add
+R4225 Cminorplus.Oadd
+R4239 Coq.Lists.List "x :: y" list_scope
+R4231 Values.Vint
+R4253 Coq.Lists.List "x :: y" list_scope
+R4242 Values.Vptr
+R4256 Coq.Lists.List.nil
+R4263 Coq.Init.Datatypes.Some
+R4269 Values.Vptr
+R4278 Integers.add
+R4298 Cminorplus.Oadd
+R4315 Coq.Lists.List "x :: y" list_scope
+R4304 Values.Vptr
+R4326 Coq.Lists.List "x :: y" list_scope
+R4318 Values.Vint
+R4329 Coq.Lists.List.nil
+R4336 Coq.Init.Datatypes.Some
+R4342 Values.Vptr
+R4351 Integers.add
+R4371 Cminorplus.Osub
+R4385 Coq.Lists.List "x :: y" list_scope
+R4377 Values.Vint
+R4396 Coq.Lists.List "x :: y" list_scope
+R4388 Values.Vint
+R4399 Coq.Lists.List.nil
+R4406 Coq.Init.Datatypes.Some
+R4412 Values.Vint
+R4418 Integers.sub
+R4438 Cminorplus.Osub
+R4455 Coq.Lists.List "x :: y" list_scope
+R4444 Values.Vptr
+R4466 Coq.Lists.List "x :: y" list_scope
+R4458 Values.Vint
+R4469 Coq.Lists.List.nil
+R4476 Coq.Init.Datatypes.Some
+R4482 Values.Vptr
+R4491 Integers.sub
+R4511 Cminorplus.Osub
+R4528 Coq.Lists.List "x :: y" list_scope
+R4517 Values.Vptr
+R4542 Coq.Lists.List "x :: y" list_scope
+R4531 Values.Vptr
+R4545 Coq.Lists.List.nil
+R4561 Values.eq_block
+R4614 Coq.Init.Datatypes.None
+R4581 Coq.Init.Datatypes.Some
+R4587 Values.Vint
+R4593 Integers.sub
+R4623 Cminorplus.Omul
+R4637 Coq.Lists.List "x :: y" list_scope
+R4629 Values.Vint
+R4648 Coq.Lists.List "x :: y" list_scope
+R4640 Values.Vint
+R4651 Coq.Lists.List.nil
+R4658 Coq.Init.Datatypes.Some
+R4664 Values.Vint
+R4670 Integers.mul
+R4690 Cminorplus.Odiv
+R4704 Coq.Lists.List "x :: y" list_scope
+R4696 Values.Vint
+R4715 Coq.Lists.List "x :: y" list_scope
+R4707 Values.Vint
+R4718 Coq.Lists.List.nil
+R4734 Integers.eq
+R4744 Integers.zero
+R4768 Coq.Init.Datatypes.Some
+R4774 Values.Vint
+R4780 Integers.divs
+R4758 Coq.Init.Datatypes.None
+R4801 Cminorplus.Odivu
+R4816 Coq.Lists.List "x :: y" list_scope
+R4808 Values.Vint
+R4827 Coq.Lists.List "x :: y" list_scope
+R4819 Values.Vint
+R4830 Coq.Lists.List.nil
+R4846 Integers.eq
+R4856 Integers.zero
+R4880 Coq.Init.Datatypes.Some
+R4886 Values.Vint
+R4892 Integers.divu
+R4870 Coq.Init.Datatypes.None
+R4913 Cminorplus.Omod
+R4927 Coq.Lists.List "x :: y" list_scope
+R4919 Values.Vint
+R4938 Coq.Lists.List "x :: y" list_scope
+R4930 Values.Vint
+R4941 Coq.Lists.List.nil
+R4957 Integers.eq
+R4967 Integers.zero
+R4991 Coq.Init.Datatypes.Some
+R4997 Values.Vint
+R5003 Integers.mods
+R4981 Coq.Init.Datatypes.None
+R5024 Cminorplus.Omodu
+R5039 Coq.Lists.List "x :: y" list_scope
+R5031 Values.Vint
+R5050 Coq.Lists.List "x :: y" list_scope
+R5042 Values.Vint
+R5053 Coq.Lists.List.nil
+R5069 Integers.eq
+R5079 Integers.zero
+R5103 Coq.Init.Datatypes.Some
+R5109 Values.Vint
+R5115 Integers.modu
+R5093 Coq.Init.Datatypes.None
+R5136 Cminorplus.Oand
+R5150 Coq.Lists.List "x :: y" list_scope
+R5142 Values.Vint
+R5161 Coq.Lists.List "x :: y" list_scope
+R5153 Values.Vint
+R5164 Coq.Lists.List.nil
+R5171 Coq.Init.Datatypes.Some
+R5177 Values.Vint
+R5183 Integers.and
+R5203 Cminorplus.Oor
+R5216 Coq.Lists.List "x :: y" list_scope
+R5208 Values.Vint
+R5227 Coq.Lists.List "x :: y" list_scope
+R5219 Values.Vint
+R5230 Coq.Lists.List.nil
+R5237 Coq.Init.Datatypes.Some
+R5243 Values.Vint
+R5249 Integers.or
+R5268 Cminorplus.Oxor
+R5282 Coq.Lists.List "x :: y" list_scope
+R5274 Values.Vint
+R5293 Coq.Lists.List "x :: y" list_scope
+R5285 Values.Vint
+R5296 Coq.Lists.List.nil
+R5303 Coq.Init.Datatypes.Some
+R5309 Values.Vint
+R5315 Integers.xor
+R5335 Cminorplus.Oshl
+R5349 Coq.Lists.List "x :: y" list_scope
+R5341 Values.Vint
+R5360 Coq.Lists.List "x :: y" list_scope
+R5352 Values.Vint
+R5363 Coq.Lists.List.nil
+R5379 Integers.ltu
+R5391 Integers.repr
+R5442 Coq.Init.Datatypes.None
+R5409 Coq.Init.Datatypes.Some
+R5415 Values.Vint
+R5421 Integers.shl
+R5451 Cminorplus.Oshr
+R5465 Coq.Lists.List "x :: y" list_scope
+R5457 Values.Vint
+R5476 Coq.Lists.List "x :: y" list_scope
+R5468 Values.Vint
+R5479 Coq.Lists.List.nil
+R5495 Integers.ltu
+R5507 Integers.repr
+R5558 Coq.Init.Datatypes.None
+R5525 Coq.Init.Datatypes.Some
+R5531 Values.Vint
+R5537 Integers.shr
+R5567 Cminorplus.Oshru
+R5582 Coq.Lists.List "x :: y" list_scope
+R5574 Values.Vint
+R5593 Coq.Lists.List "x :: y" list_scope
+R5585 Values.Vint
+R5596 Coq.Lists.List.nil
+R5612 Integers.ltu
+R5624 Integers.repr
+R5676 Coq.Init.Datatypes.None
+R5642 Coq.Init.Datatypes.Some
+R5648 Values.Vint
+R5654 Integers.shru
+R5685 Cminorplus.Onegf
+R5702 Coq.Lists.List "x :: y" list_scope
+R5692 Values.Vfloat
+R5705 Coq.Lists.List.nil
+R5712 Coq.Init.Datatypes.Some
+R5718 Values.Vfloat
+R5726 Floats.neg
+R5745 Cminorplus.Oabsf
+R5762 Coq.Lists.List "x :: y" list_scope
+R5752 Values.Vfloat
+R5765 Coq.Lists.List.nil
+R5772 Coq.Init.Datatypes.Some
+R5778 Values.Vfloat
+R5786 Floats.abs
+R5805 Cminorplus.Oaddf
+R5822 Coq.Lists.List "x :: y" list_scope
+R5812 Values.Vfloat
+R5835 Coq.Lists.List "x :: y" list_scope
+R5825 Values.Vfloat
+R5838 Coq.Lists.List.nil
+R5845 Coq.Init.Datatypes.Some
+R5851 Values.Vfloat
+R5859 Floats.add
+R5881 Cminorplus.Osubf
+R5898 Coq.Lists.List "x :: y" list_scope
+R5888 Values.Vfloat
+R5911 Coq.Lists.List "x :: y" list_scope
+R5901 Values.Vfloat
+R5914 Coq.Lists.List.nil
+R5921 Coq.Init.Datatypes.Some
+R5927 Values.Vfloat
+R5935 Floats.sub
+R5957 Cminorplus.Omulf
+R5974 Coq.Lists.List "x :: y" list_scope
+R5964 Values.Vfloat
+R5987 Coq.Lists.List "x :: y" list_scope
+R5977 Values.Vfloat
+R5990 Coq.Lists.List.nil
+R5997 Coq.Init.Datatypes.Some
+R6003 Values.Vfloat
+R6011 Floats.mul
+R6033 Cminorplus.Odivf
+R6050 Coq.Lists.List "x :: y" list_scope
+R6040 Values.Vfloat
+R6063 Coq.Lists.List "x :: y" list_scope
+R6053 Values.Vfloat
+R6066 Coq.Lists.List.nil
+R6073 Coq.Init.Datatypes.Some
+R6079 Values.Vfloat
+R6087 Floats.div
+R6109 Cminorplus.Osingleoffloat
+R6135 Coq.Lists.List "x :: y" list_scope
+R6125 Values.Vfloat
+R6138 Coq.Lists.List.nil
+R6151 Coq.Init.Datatypes.Some
+R6157 Values.Vfloat
+R6165 Floats.singleoffloat
+R6194 Cminorplus.Ointoffloat
+R6217 Coq.Lists.List "x :: y" list_scope
+R6207 Values.Vfloat
+R6220 Coq.Lists.List.nil
+R6234 Coq.Init.Datatypes.Some
+R6240 Values.Vint
+R6246 Floats.intoffloat
+R6272 Cminorplus.Ofloatofint
+R6293 Coq.Lists.List "x :: y" list_scope
+R6285 Values.Vint
+R6296 Coq.Lists.List.nil
+R6310 Coq.Init.Datatypes.Some
+R6316 Values.Vfloat
+R6324 Floats.floatofint
+R6350 Cminorplus.Ofloatofintu
+R6372 Coq.Lists.List "x :: y" list_scope
+R6364 Values.Vint
+R6375 Coq.Lists.List.nil
+R6389 Coq.Init.Datatypes.Some
+R6395 Values.Vfloat
+R6403 Floats.floatofintu
+R6430 Cminorplus.Ocmp
+R6446 Coq.Lists.List "x :: y" list_scope
+R6438 Values.Vint
+R6457 Coq.Lists.List "x :: y" list_scope
+R6449 Values.Vint
+R6460 Coq.Lists.List.nil
+R6473 Coq.Init.Datatypes.Some
+R6479 Values.of_bool
+R6491 Integers.cmp
+R6513 Cminorplus.Ocmp
+R6532 Coq.Lists.List "x :: y" list_scope
+R6521 Values.Vptr
+R6546 Coq.Lists.List "x :: y" list_scope
+R6535 Values.Vptr
+R6549 Coq.Lists.List.nil
+R6606 Coq.Bool.Bool "x && y" bool_scope
+R6565 Mem.valid_pointer
+R6585 Integers.signed
+R6609 Mem.valid_pointer
+R6629 Integers.signed
+R6744 Coq.Init.Datatypes.None
+R6660 Values.eq_block
+R6720 Coq.Init.Datatypes.None
+R6680 Coq.Init.Datatypes.Some
+R6685 Values.of_bool
+R6697 Integers.cmp
+R6753 Cminorplus.Ocmp
+R6772 Coq.Lists.List "x :: y" list_scope
+R6761 Values.Vptr
+R6783 Coq.Lists.List "x :: y" list_scope
+R6775 Values.Vint
+R6786 Coq.Lists.List.nil
+R6793 Cminorplus.eval_compare_null
+R6820 Cminorplus.Ocmp
+R6836 Coq.Lists.List "x :: y" list_scope
+R6828 Values.Vint
+R6850 Coq.Lists.List "x :: y" list_scope
+R6839 Values.Vptr
+R6853 Coq.Lists.List.nil
+R6860 Cminorplus.eval_compare_null
+R6887 Cminorplus.Ocmpu
+R6904 Coq.Lists.List "x :: y" list_scope
+R6896 Values.Vint
+R6915 Coq.Lists.List "x :: y" list_scope
+R6907 Values.Vint
+R6918 Coq.Lists.List.nil
+R6931 Coq.Init.Datatypes.Some
+R6937 Values.of_bool
+R6949 Integers.cmpu
+R6972 Cminorplus.Ocmpf
+R6991 Coq.Lists.List "x :: y" list_scope
+R6981 Values.Vfloat
+R7004 Coq.Lists.List "x :: y" list_scope
+R6994 Values.Vfloat
+R7007 Coq.Lists.List.nil
+R7020 Coq.Init.Datatypes.Some
+R7026 Values.of_bool
+R7039 Floats.cmp
+R7071 Coq.Init.Datatypes.None
+R3690 Mem.mem
+R3676 Coq.Lists.List.list
+R3681 Values.val
+R3660 Cminorplus.operation
+R7133 Coq.Init.Datatypes.option
+R7140 Values.val
+R7173 AST.Mint8signed
+R7186 Values.Vint
+R7196 Coq.Init.Datatypes.Some
+R7202 Values.Vint
+R7208 Integers.cast8signed
+R7232 AST.Mint8unsigned
+R7247 Values.Vint
+R7257 Coq.Init.Datatypes.Some
+R7263 Values.Vint
+R7269 Integers.cast8unsigned
+R7295 AST.Mint16signed
+R7309 Values.Vint
+R7319 Coq.Init.Datatypes.Some
+R7325 Values.Vint
+R7331 Integers.cast16signed
+R7356 AST.Mint16unsigned
+R7372 Values.Vint
+R7382 Coq.Init.Datatypes.Some
+R7388 Values.Vint
+R7394 Integers.cast16unsigned
+R7421 AST.Mint32
+R7429 Values.Vint
+R7439 Coq.Init.Datatypes.Some
+R7444 Values.Vint
+R7456 AST.Mint32
+R7464 Values.Vptr
+R7478 Coq.Init.Datatypes.Some
+R7483 Values.Vptr
+R7499 AST.Mfloat32
+R7509 Values.Vfloat
+R7521 Coq.Init.Datatypes.Some
+R7526 Values.Vfloat
+R7533 Floats.singleoffloat
+R7561 AST.Mfloat64
+R7571 Values.Vfloat
+R7583 Coq.Init.Datatypes.Some
+R7588 Values.Vfloat
+R7610 Coq.Init.Datatypes.None
+R7126 Values.val
+R7108 AST.memory_chunk
+R7765 Coq.Lists.List.list
+R7770 Values.block
+R7758 Mem.mem
+R7751 Cminorplus.env
+R7691 Coq.Lists.List.list
+R7703 Coq.Init.Datatypes "x * y" type_scope
+R7697 AST.ident
+R7705 Cminorplus.local_variable
+R7657 Mem.mem
+R7650 Cminorplus.env
+R7864 Coq.Lists.List.nil
+R7856 Coq.Lists.List.nil
+R8107 Coq.Lists.List "x :: y" list_scope
+R8088 Coq.Lists.List "x :: y" list_scope
+R8079 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R8007 Maps.set
+R8020 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R7970 Coq.Init.Logic "x = y" type_scope
+R7944 Mem.alloc
+R7959 Cminorplus.sizeof
+R7972 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R8254 Mem.mem
+R8215 Coq.Lists.List.list
+R8220 Values.val
+R8184 Coq.Lists.List.list
+R8196 Coq.Init.Datatypes "x * y" type_scope
+R8190 AST.ident
+R8198 AST.memory_chunk
+R8177 Mem.mem
+R8143 Cminorplus.env
+R8342 Coq.Lists.List.nil
+R8338 Coq.Lists.List.nil
+R8649 Coq.Lists.List "x :: y" list_scope
+R8634 Coq.Lists.List "x :: y" list_scope
+R8622 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R8539 Coq.Init.Logic "x = y" type_scope
+R8514 Mem.store
+R8541 Coq.Init.Datatypes.Some
+R8495 Coq.Init.Logic "x = y" type_scope
+R8481 Cminorplus.cast
+R8497 Coq.Init.Datatypes.Some
+R8446 Coq.Init.Logic "x = y" type_scope
+R8431 Maps.get
+R8448 Coq.Init.Datatypes.Some
+R8452 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R8456 Cminorplus.LVscalar
+R8691 Cminorplus.genv
+R8776 Values.val
+R8769 Mem.mem
+R8761 Cminorplus.expr
+R8754 Mem.mem
+R8738 Cminorplus.env
+R8728 Cminorplus.letenv
+R11257 Coq.Lists.List.list
+R11262 Values.val
+R11250 Mem.mem
+R11229 Cminorplus.exprlist
+R11222 Mem.mem
+R11206 Cminorplus.env
+R11196 Cminorplus.letenv
+R11604 Values.val
+R11597 Mem.mem
+R11577 Coq.Lists.List.list
+R11582 Values.val
+R11565 Cminorplus.function
+R11558 Mem.mem
+R12102 Cminorplus.outcome
+R12095 Mem.mem
+R12078 Cminorplus.stmt
+R12071 Mem.mem
+R12055 Cminorplus.env
+R13544 Cminorplus.outcome
+R13537 Mem.mem
+R13516 Cminorplus.stmtlist
+R13509 Mem.mem
+R13493 Cminorplus.env
+R8954 Cminorplus.Evar
+R8918 Coq.Init.Logic "x = y" type_scope
+R8897 Mem.load
+R8920 Coq.Init.Datatypes.Some
+R8861 Coq.Init.Logic "x = y" type_scope
+R8846 Maps.get
+R8863 Coq.Init.Datatypes.Some
+R8868 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R8872 Cminorplus.LVscalar
+R9218 Cminorplus.Eassign
+R9181 Coq.Init.Logic "x = y" type_scope
+R9155 Mem.store
+R9183 Coq.Init.Datatypes.Some
+R9136 Coq.Init.Logic "x = y" type_scope
+R9122 Cminorplus.cast
+R9138 Coq.Init.Datatypes.Some
+R9086 Coq.Init.Logic "x = y" type_scope
+R9071 Maps.get
+R9088 Coq.Init.Datatypes.Some
+R9093 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R9097 Cminorplus.LVscalar
+R9369 Values.Vptr
+R9376 Integers.zero
+R9354 Cminorplus.Eaddrof
+R9312 Coq.Init.Logic "x = y" type_scope
+R9297 Maps.get
+R9314 Coq.Init.Datatypes.Some
+R9319 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R9548 Values.Vptr
+R9555 Integers.zero
+R9533 Cminorplus.Eaddrof
+R9497 Coq.Init.Logic "x = y" type_scope
+R9474 Globalenvs.find_symbol
+R9499 Coq.Init.Datatypes.Some
+R9458 Coq.Init.Logic "x = y" type_scope
+R9443 Maps.get
+R9460 Coq.Init.Datatypes.None
+R9719 Cminorplus.Eop
+R9683 Coq.Init.Logic "x = y" type_scope
+R9659 Cminorplus.eval_operation
+R9685 Coq.Init.Datatypes.Some
+R9886 Cminorplus.Eload
+R9850 Coq.Init.Logic "x = y" type_scope
+R9828 Mem.loadv
+R9852 Coq.Init.Datatypes.Some
+R10143 Cminorplus.Estore
+R10106 Coq.Init.Logic "x = y" type_scope
+R10080 Mem.storev
+R10108 Coq.Init.Datatypes.Some
+R10061 Coq.Init.Logic "x = y" type_scope
+R10047 Cminorplus.cast
+R10063 Coq.Init.Datatypes.Some
+R10446 Cminorplus.Ecall
+R10372 Coq.Init.Logic "x = y" type_scope
+R10364 Cminorplus.fn_sig
+R10343 Coq.Init.Logic "x = y" type_scope
+R10321 Globalenvs.find_funct
+R10345 Coq.Init.Datatypes.Some
+R10652 Cminorplus.Econdition
+R10575 Values.is_true
+R10860 Cminorplus.Econdition
+R10782 Values.is_false
+R11035 Cminorplus.Elet
+R10989 Coq.Lists.List "x :: y" list_scope
+R11151 Cminorplus.Eletvar
+R11115 Coq.Init.Logic "x = y" type_scope
+R11100 Coq.Lists.List.nth_error
+R11117 Coq.Init.Datatypes.Some
+R11347 Coq.Lists.List.nil
+R11340 Cminorplus.Enil
+R11523 Coq.Lists.List "x :: y" list_scope
+R11505 Cminorplus.Econs
+R12003 Mem.free_list
+R11919 Cminorplus.outcome_result_value
+R11956 AST.sig_res
+R11947 Cminorplus.fn_sig
+R11894 Cminorplus.fn_body
+R11819 Cminorplus.bind_parameters
+R11843 Cminorplus.fn_params
+R11757 Cminorplus.alloc_variables
+R11786 Cminorplus.fn_variables
+R11773 Cminorplus.empty_env
+R11696 Coqlib.list_norepet
+R11728 Coq.Lists.List "x ++ y" list_scope
+R11710 Cminorplus.fn_params_names
+R11731 Cminorplus.fn_vars_names
+R12229 Cminorplus.Out_normal
+R12217 Cminorplus.Sexpr
+R12178 Coq.Lists.List.nil
+R12427 Cminorplus.Sifthenelse
+R12349 Values.is_true
+R12324 Coq.Lists.List.nil
+R12646 Cminorplus.Sifthenelse
+R12567 Values.is_false
+R12542 Coq.Lists.List.nil
+R12835 Cminorplus.Sloop
+R12794 Cminorplus.Sloop
+R12758 Cminorplus.Out_normal
+R12986 Cminorplus.Sloop
+R12948 Coq.Init.Logic "x <> y" type_scope
+R12951 Cminorplus.Out_normal
+R13121 Cminorplus.outcome_block
+R13106 Cminorplus.Sblock
+R13209 Cminorplus.Out_exit
+R13197 Cminorplus.Sexit
+R13300 Cminorplus.Out_return
+R13311 Coq.Init.Datatypes.None
+R13283 Cminorplus.Sreturn
+R13291 Coq.Init.Datatypes.None
+R13442 Cminorplus.Out_return
+R13454 Coq.Init.Datatypes.Some
+R13420 Cminorplus.Sreturn
+R13429 Coq.Init.Datatypes.Some
+R13381 Coq.Lists.List.nil
+R13627 Cminorplus.Out_normal
+R13620 Cminorplus.Snil
+R13798 Cminorplus.Scons
+R13721 Cminorplus.Out_normal
+R13952 Cminorplus.Scons
+R13910 Coq.Init.Logic "x <> y" type_scope
+R13913 Cminorplus.Out_normal
+R14431 Coq.Init.Logic "'exists' x , p" type_scope
+R14441 Coq.Init.Logic "'exists' x , p" type_scope
+R14451 Coq.Init.Logic "'exists' x , p" type_scope
+R14506 Coq.Init.Logic "A /\ B" type_scope
+R14497 Coq.Init.Logic "x = y" type_scope
+R14463 Globalenvs.find_symbol
+R14486 AST.prog_main
+R14499 Coq.Init.Datatypes.Some
+R14545 Coq.Init.Logic "A /\ B" type_scope
+R14536 Coq.Init.Logic "x = y" type_scope
+R14511 Globalenvs.find_funct_ptr
+R14538 Coq.Init.Datatypes.Some
+R14591 Coq.Init.Logic "A /\ B" type_scope
+R14561 Coq.Init.Logic "x = y" type_scope
+R14553 Cminorplus.fn_sig
+R14563 AST.mksignature
+R14580 Coq.Init.Datatypes.Some
+R14585 AST.Tint
+R14575 Coq.Lists.List.nil
+R14596 Cminorplus.eval_funcall
+R14617 Coq.Lists.List.nil
+R14410 Globalenvs.init_mem
+R14378 Globalenvs.globalenv
+R14351 Values.val
+R14338 Cminorplus.program
+FCminorgen
+R323 Coq.Init.Datatypes.option
+R330 Cminor.expr
+R358 Cminor.Enil
+R394 Cminorgen.Ointconst
+R411 Coq.Init.Datatypes.Some
+R416 Cminor.Eop
+R434 Cminor.Enil
+R421 Op.Ointconst
+R448 Cminorgen.Ofloatconst
+R467 Coq.Init.Datatypes.Some
+R472 Cminor.Eop
+R492 Cminor.Enil
+R477 Op.Ofloatconst
+R511 Coq.Init.Datatypes.None
+R530 Cminor.Econs
+R539 Cminor.Enil
+R575 Cminorgen.Ocast8unsigned
+R595 Coq.Init.Datatypes.Some
+R600 Cmconstr.cast8unsigned
+R635 Cminorgen.Ocast8signed
+R653 Coq.Init.Datatypes.Some
+R658 Cmconstr.cast8signed
+R691 Cminorgen.Ocast16unsigned
+R712 Coq.Init.Datatypes.Some
+R717 Cmconstr.cast16unsigned
+R753 Cminorgen.Ocast16signed
+R772 Coq.Init.Datatypes.Some
+R777 Cmconstr.cast16signed
+R811 Cminorgen.Onotint
+R824 Coq.Init.Datatypes.Some
+R829 Cmconstr.notint
+R857 Cminorgen.Onegf
+R868 Coq.Init.Datatypes.Some
+R873 Cmconstr.negfloat
+R903 Cminorgen.Oabsf
+R914 Coq.Init.Datatypes.Some
+R919 Cmconstr.absfloat
+R949 Cminorgen.Osingleoffloat
+R969 Coq.Init.Datatypes.Some
+R974 Cmconstr.singleoffloat
+R1009 Cminorgen.Ointoffloat
+R1026 Coq.Init.Datatypes.Some
+R1031 Cmconstr.intoffloat
+R1063 Cminorgen.Ofloatofint
+R1080 Coq.Init.Datatypes.Some
+R1085 Cmconstr.floatofint
+R1117 Cminorgen.Ofloatofintu
+R1135 Coq.Init.Datatypes.Some
+R1140 Cmconstr.floatofintu
+R1178 Coq.Init.Datatypes.None
+R1197 Cminor.Econs
+R1207 Cminor.Econs
+R1216 Cminor.Enil
+R1253 Cminorgen.Oadd
+R1263 Coq.Init.Datatypes.Some
+R1268 Cmconstr.add
+R1296 Cminorgen.Osub
+R1306 Coq.Init.Datatypes.Some
+R1311 Cmconstr.sub
+R1339 Cminorgen.Omul
+R1349 Coq.Init.Datatypes.Some
+R1354 Cmconstr.mul
+R1382 Cminorgen.Odiv
+R1392 Coq.Init.Datatypes.Some
+R1397 Cmconstr.divs
+R1426 Cminorgen.Odivu
+R1437 Coq.Init.Datatypes.Some
+R1442 Cmconstr.divu
+R1471 Cminorgen.Omod
+R1481 Coq.Init.Datatypes.Some
+R1486 Cmconstr.mods
+R1515 Cminorgen.Omodu
+R1526 Coq.Init.Datatypes.Some
+R1531 Cmconstr.modu
+R1560 Cminorgen.Oand
+R1570 Coq.Init.Datatypes.Some
+R1575 Cmconstr.and
+R1603 Cminorgen.Oor
+R1612 Coq.Init.Datatypes.Some
+R1617 Cmconstr.or
+R1644 Cminorgen.Oxor
+R1654 Coq.Init.Datatypes.Some
+R1659 Cmconstr.xor
+R1687 Cminorgen.Oshl
+R1697 Coq.Init.Datatypes.Some
+R1702 Cmconstr.shl
+R1730 Cminorgen.Oshr
+R1740 Coq.Init.Datatypes.Some
+R1745 Cmconstr.shr
+R1773 Cminorgen.Oshru
+R1784 Coq.Init.Datatypes.Some
+R1789 Cmconstr.shru
+R1818 Cminorgen.Oaddf
+R1829 Coq.Init.Datatypes.Some
+R1834 Cmconstr.addf
+R1863 Cminorgen.Osubf
+R1874 Coq.Init.Datatypes.Some
+R1879 Cmconstr.subf
+R1908 Cminorgen.Omulf
+R1919 Coq.Init.Datatypes.Some
+R1924 Cmconstr.mulf
+R1953 Cminorgen.Odivf
+R1964 Coq.Init.Datatypes.Some
+R1969 Cmconstr.divf
+R1998 Cminorgen.Ocmp
+R2010 Coq.Init.Datatypes.Some
+R2015 Cmconstr.cmp
+R2045 Cminorgen.Ocmpu
+R2058 Coq.Init.Datatypes.Some
+R2063 Cmconstr.cmpu
+R2094 Cminorgen.Ocmpf
+R2107 Coq.Init.Datatypes.Some
+R2112 Cmconstr.cmpf
+R2148 Coq.Init.Datatypes.None
+R2172 Coq.Init.Datatypes.None
+R312 Cminor.exprlist
+R294 Cminorgen.operation
+R2239 Cminor.expr
+R2270 AST.Mint8signed
+R2285 Cmconstr.cast8signed
+R2312 AST.Mint8unsigned
+R2329 Cmconstr.cast8unsigned
+R2358 AST.Mint16signed
+R2374 Cmconstr.cast16signed
+R2402 AST.Mint16unsigned
+R2420 Cmconstr.cast16unsigned
+R2450 AST.Mint32
+R2466 AST.Mfloat32
+R2478 Cmconstr.singleoffloat
+R2507 AST.Mfloat64
+R2232 Cminor.expr
+R2214 AST.memory_chunk
+R2583 Cminor.expr
+R2593 Cmconstr.load
+R2576 Cminor.expr
+R2558 AST.memory_chunk
+R2676 Cminor.expr
+R2686 Cminorgen.make_cast
+R2703 Cmconstr.store
+R2669 Cminor.expr
+R2669 Cminor.expr
+R2647 AST.memory_chunk
+R2769 Cminor.expr
+R2779 Cminor.Eop
+R2811 Cminor.Enil
+R2784 Op.Oaddrstack
+R2796 Integers.repr
+R2765 Coq.ZArith.BinInt.Z
+R2860 AST.memory_chunk
+R2923 Coq.ZArith.BinInt.Z
+R2907 AST.memory_chunk
+R2958 Coq.ZArith.BinInt.Z
+R3023 Maps.t
+R3030 Cminorgen.var_info
+R3091 Coq.Init.Datatypes.option
+R3098 Cminor.expr
+R3114 Maps.get
+R3140 Cminorgen.Var_local
+R3159 Coq.Init.Datatypes.Some
+R3164 Cminor.Evar
+R3177 Cminorgen.Var_stack_scalar
+R3207 Coq.Init.Datatypes.Some
+R3212 Cminorgen.make_load
+R3229 Cminorgen.make_stackaddr
+R3254 Cminorgen.Var_stack_array
+R3277 Coq.Init.Datatypes.None
+R3286 Cminorgen.Var_global
+R3300 Coq.Init.Datatypes.None
+R3083 AST.ident
+R3067 Cminorgen.compilenv
+R3375 Coq.Init.Datatypes.option
+R3382 Cminor.expr
+R3398 Maps.get
+R3424 Cminorgen.Var_local
+R3443 Coq.Init.Datatypes.Some
+R3448 Cminor.Eassign
+R3460 Cminorgen.make_cast
+R3486 Cminorgen.Var_stack_scalar
+R3522 Coq.Init.Datatypes.Some
+R3527 Cminorgen.make_store
+R3545 Cminorgen.make_stackaddr
+R3574 Cminorgen.Var_stack_array
+R3597 Coq.Init.Datatypes.None
+R3606 Cminorgen.Var_global
+R3620 Coq.Init.Datatypes.None
+R3368 Cminor.expr
+R3355 AST.ident
+R3339 Cminorgen.compilenv
+R3684 Coq.Init.Datatypes.option
+R3691 Cminor.expr
+R3707 Maps.get
+R3733 Cminorgen.Var_local
+R3752 Coq.Init.Datatypes.None
+R3761 Cminorgen.Var_stack_scalar
+R3791 Coq.Init.Datatypes.Some
+R3797 Cminorgen.make_stackaddr
+R3821 Cminorgen.Var_stack_array
+R3844 Coq.Init.Datatypes.Some
+R3850 Cminorgen.make_stackaddr
+R3874 Cminorgen.Var_global
+R3888 Coq.Init.Datatypes.Some
+R3894 Cminor.Eop
+R3924 Cminor.Enil
+R3899 Op.Oaddrsymbol
+R3914 Integers.zero
+R3676 AST.ident
+R3660 Cminorgen.compilenv
+R3999 Coq.Init.Datatypes.option
+R4030 Coq.Init.Datatypes.None
+R4038 Coq.Init.Datatypes.None
+R4047 Coq.Init.Datatypes.Some
+R3988 Coq.Init.Datatypes.option
+R3969 Coq.Init.Datatypes.option
+R4100 Cminorgen.bind
+R4269 Coq.Init.Datatypes.option
+R4276 Cminor.expr
+R4228 Cminorgen.expr
+R4213 Cminorgen.compilenv
+R5323 Coq.Init.Datatypes.option
+R5330 Cminor.exprlist
+R5277 Cminorgen.exprlist
+R5261 Cminorgen.compilenv
+R4303 Cminorgen.Evar
+R4316 Cminorgen.var_get
+R4336 Cminorgen.Eaddrof
+R4352 Cminorgen.var_addr
+R4373 Cminorgen.Eassign
+R4397 Cminorgen "'do' X <- A ; B"
+R4426 Cminorgen.var_set
+R4449 Cminorgen.Eop
+R4470 Cminorgen "'do' X <- A ; B"
+R4505 Cminorgen.make_op
+R4524 Cminorgen.Eload
+R4549 Cminorgen "'do' X <- A ; B"
+R4578 Coq.Init.Datatypes.Some
+R4584 Cminorgen.make_load
+R4608 Cminorgen.Estore
+R4638 Cminorgen "'do' X <- A ; B"
+R4675 Cminorgen "'do' X <- A ; B"
+R4712 Coq.Init.Datatypes.Some
+R4718 Cminorgen.make_store
+R4748 Cminorgen.Ecall
+R4774 Cminorgen "'do' X <- A ; B"
+R4809 Cminorgen "'do' X <- A ; B"
+R4850 Coq.Init.Datatypes.Some
+R4856 Cminor.Ecall
+R4878 Cminorgen.Econdition
+R4909 Cminorgen "'do' X <- A ; B"
+R4946 Cminorgen "'do' X <- A ; B"
+R4983 Cminorgen "'do' X <- A ; B"
+R5020 Coq.Init.Datatypes.Some
+R5026 Cmconstr.conditionalexpr
+R5068 Cminorgen.Elet
+R5090 Cminorgen "'do' X <- A ; B"
+R5127 Cminorgen "'do' X <- A ; B"
+R5164 Coq.Init.Datatypes.Some
+R5170 Cminor.Elet
+R5188 Cminorgen.Eletvar
+R5209 Coq.Init.Datatypes.Some
+R5215 Cminor.Eletvar
+R4228 Cminorgen.expr
+R4213 Cminorgen.compilenv
+R5362 Cminorgen.Enil
+R5378 Coq.Init.Datatypes.Some
+R5383 Cminor.Enil
+R5392 Cminorgen.Econs
+R5415 Cminorgen "'do' X <- A ; B"
+R5452 Cminorgen "'do' X <- A ; B"
+R5493 Coq.Init.Datatypes.Some
+R5499 Cminor.Econs
+R5277 Cminorgen.exprlist
+R5261 Cminorgen.compilenv
+R5606 Coq.Init.Datatypes.option
+R5613 Cminor.stmt
+R5565 Cminorgen.stmt
+R5550 Cminorgen.compilenv
+R6324 Coq.Init.Datatypes.option
+R6331 Cminor.stmtlist
+R6279 Cminorgen.stmtlist
+R6264 Cminorgen.compilenv
+R5640 Cminorgen.Sexpr
+R5659 Cminorgen "'do' X <- A ; B"
+R5668 Cminorgen.transl_expr
+R5688 Coq.Init.Datatypes.Some
+R5693 Cminor.Sexpr
+R5707 Cminorgen.Sifthenelse
+R5738 Cminorgen "'do' X <- A ; B"
+R5747 Cminorgen.transl_expr
+R5773 Cminorgen "'do' X <- A ; B"
+R5814 Cminorgen "'do' X <- A ; B"
+R5855 Coq.Init.Datatypes.Some
+R5861 Cmconstr.ifthenelse
+R5897 Cminorgen.Sloop
+R5916 Cminorgen "'do' X <- A ; B"
+R5955 Coq.Init.Datatypes.Some
+R5961 Cminor.Sloop
+R5975 Cminorgen.Sblock
+R5995 Cminorgen "'do' X <- A ; B"
+R6034 Coq.Init.Datatypes.Some
+R6040 Cminor.Sblock
+R6055 Cminorgen.Sexit
+R6074 Coq.Init.Datatypes.Some
+R6080 Cminor.Sexit
+R6093 Cminorgen.Sreturn
+R6103 Coq.Init.Datatypes.None
+R6117 Coq.Init.Datatypes.Some
+R6123 Cminor.Sreturn
+R6131 Coq.Init.Datatypes.None
+R6141 Cminorgen.Sreturn
+R6152 Coq.Init.Datatypes.Some
+R6169 Cminorgen "'do' X <- A ; B"
+R6178 Cminorgen.transl_expr
+R6204 Coq.Init.Datatypes.Some
+R6210 Cminor.Sreturn
+R6219 Coq.Init.Datatypes.Some
+R5565 Cminorgen.stmt
+R5550 Cminorgen.compilenv
+R6362 Cminorgen.Snil
+R6372 Coq.Init.Datatypes.Some
+R6377 Cminor.Snil
+R6386 Cminorgen.Scons
+R6409 Cminorgen "'do' X <- A ; B"
+R6446 Cminorgen "'do' X <- A ; B"
+R6487 Coq.Init.Datatypes.Some
+R6493 Cminor.Scons
+R6279 Cminorgen.stmtlist
+R6264 Cminorgen.compilenv
+R6590 Cminorgen.t
+R6581 Cminorgen.expr
+R7311 Cminorgen.t
+R7298 Cminorgen.exprlist
+R6623 Cminorgen.Evar
+R6636 Cminorgen.empty
+R6655 Cminorgen.Eaddrof
+R6671 Cminorgen.add
+R6687 Cminorgen.empty
+R6706 Cminorgen.Eassign
+R6746 Cminorgen.Eop
+R6788 Cminorgen.Eload
+R6829 Cminorgen.Estore
+R6859 Cminorgen.union
+R6920 Cminorgen.Ecall
+R6946 Cminorgen.union
+R7010 Cminorgen.Econdition
+R7041 Cminorgen.union
+R7087 Cminorgen.union
+R7149 Cminorgen.Elet
+R7171 Cminorgen.union
+R7232 Cminorgen.Eletvar
+R7247 Cminorgen.empty
+R6581 Cminorgen.expr
+R7344 Cminorgen.Enil
+R7354 Cminorgen.empty
+R7373 Cminorgen.Econs
+R7396 Cminorgen.union
+R7298 Cminorgen.exprlist
+R7503 Cminorgen.t
+R7494 Cminorgen.stmt
+R7953 Cminorgen.t
+R7940 Cminorgen.stmtlist
+R7536 Cminorgen.Sexpr
+R7549 Cminorgen.addr_taken_expr
+R7571 Cminorgen.Sifthenelse
+R7602 Cminorgen.union
+R7646 Cminorgen.union
+R7618 Cminorgen.addr_taken_expr
+R7716 Cminorgen.Sloop
+R7755 Cminorgen.Sblock
+R7795 Cminorgen.Sexit
+R7808 Cminorgen.empty
+R7827 Cminorgen.Sreturn
+R7837 Coq.Init.Datatypes.None
+R7845 Cminorgen.empty
+R7864 Cminorgen.Sreturn
+R7875 Coq.Init.Datatypes.Some
+R7886 Cminorgen.addr_taken_expr
+R7494 Cminorgen.stmt
+R7986 Cminorgen.Snil
+R7996 Cminorgen.empty
+R8015 Cminorgen.Scons
+R8038 Cminorgen.union
+R7940 Cminorgen.stmtlist
+R8174 Coq.ZArith.BinInt "x * y" Z_scope
+R8164 Coq.ZArith.Zdiv "x / y" Z_scope
+R8161 Coq.ZArith.BinInt "x - y" Z_scope
+R8152 Coq.ZArith.BinInt "x + y" Z_scope
+R8140 Coq.ZArith.BinInt.Z
+R8128 Coq.ZArith.BinInt.Z
+R8320 Coq.Init.Datatypes "x * y" type_scope
+R8310 Cminorgen.compilenv
+R8322 Coq.ZArith.BinInt.Z
+R8395 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R8400 Cminorplus.LVarray
+R8459 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R8460 Maps.set
+R8473 Cminorgen.Var_stack_array
+R8504 Coq.ZArith.BinInt "x + y" Z_scope
+R8506 Coq.ZArith.Zmin.Zmax
+R8432 Cminorgen.align
+R8521 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R8526 Cminorplus.LVscalar
+R8554 Cminorgen.mem
+R8747 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R8748 Maps.set
+R8761 Cminorgen.Var_local
+R8670 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R8671 Maps.set
+R8684 Cminorgen.Var_stack_scalar
+R8722 Coq.ZArith.BinInt "x + y" Z_scope
+R8640 Cminorgen.align
+R8597 Mem.size_chunk
+R8303 Coq.Init.Datatypes "x * y" type_scope
+R8293 Cminorgen.compilenv
+R8305 Coq.ZArith.BinInt.Z
+R8254 Coq.Init.Datatypes "x * y" type_scope
+R8248 AST.ident
+R8256 Cminorplus.local_variable
+R8224 Cminorgen.t
+R8970 Coq.Init.Datatypes "x * y" type_scope
+R8960 Cminorgen.compilenv
+R8972 Coq.ZArith.BinInt.Z
+R8930 Coq.Init.Datatypes "x * y" type_scope
+R8920 Cminorgen.compilenv
+R8932 Coq.ZArith.BinInt.Z
+R8868 Coq.Lists.List.list
+R8880 Coq.Init.Datatypes "x * y" type_scope
+R8874 AST.ident
+R8882 Cminorplus.local_variable
+R8839 Cminorgen.t
+R9005 Coq.Lists.List.nil
+R9037 Coq.Lists.List "x :: y" list_scope
+R9079 Cminorgen.assign_variable
+R8930 Coq.Init.Datatypes "x * y" type_scope
+R8920 Cminorgen.compilenv
+R8932 Coq.ZArith.BinInt.Z
+R8868 Coq.Lists.List.list
+R8880 Coq.Init.Datatypes "x * y" type_scope
+R8874 AST.ident
+R8882 Cminorplus.local_variable
+R8839 Cminorgen.t
+R9184 Coq.Init.Datatypes "x * y" type_scope
+R9174 Cminorgen.compilenv
+R9186 Coq.ZArith.BinInt.Z
+R9193 Cminorgen.assign_variables
+R9275 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R9276 Maps.init
+R9286 Cminorgen.Var_global
+R9255 Cminorplus.fn_variables
+R9215 Cminorgen.addr_taken_stmtlist
+R9238 Cminorgen.fn_body
+R9160 Cminorgen.function
+R9417 Cminor.stmtlist
+R9363 Coq.Lists.List.list
+R9375 Coq.Init.Datatypes "x * y" type_scope
+R9369 AST.ident
+R9377 AST.memory_chunk
+R9343 Cminorgen.compilenv
+R9453 Coq.Lists.List.nil
+R9460 Cminor.Snil
+R9481 Coq.Lists.List "x :: y" list_scope
+R9469 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R9503 Maps.get
+R9533 Cminorgen.Var_local
+R9562 Cminor.Scons
+R9569 Cminor.Sexpr
+R9576 Cminor.Eassign
+R9588 Cminorgen.make_cast
+R9605 Cminor.Evar
+R9669 Cminorgen.Var_stack_scalar
+R9709 Cminor.Scons
+R9716 Cminor.Sexpr
+R9723 Cminorgen.make_store
+R9762 Cminor.Evar
+R9741 Cminorgen.make_stackaddr
+R9840 Cminor.Snil
+R9363 Coq.Lists.List.list
+R9375 Coq.Init.Datatypes "x * y" type_scope
+R9369 AST.ident
+R9377 AST.memory_chunk
+R9343 Cminorgen.compilenv
+R9933 Coq.Init.Datatypes.option
+R9940 Cminor.function
+R9979 Cminorgen.build_compilenv
+R10005 Coqlib.zle
+R10019 Integers.max_signed
+R10321 Coq.Init.Datatypes.None
+R10043 Cminorgen "'do' X <- A ; B"
+R10055 Cminorgen.transl_stmtlist
+R10079 Cminorgen.fn_body
+R10098 Coq.Init.Datatypes.Some
+R10104 Cminor.mkfunction
+R10251 Cminor.Scons
+R10258 Cminor.Sblock
+R10266 Cminorgen.store_parameters
+R10291 Cminorgen.fn_params
+R10193 Cminorgen.fn_vars_names
+R10157 Cminorgen.fn_params_names
+R10130 Cminorgen.fn_sig
+R9920 Cminorgen.function
+R10371 Coq.Init.Datatypes.option
+R10378 Cminor.program
+R10391 AST.transform_partial_program
+R10417 Cminorgen.transl_function
+R10358 Cminorgen.program
+FCminorgenproof
+R1141 Cminorgenproof.program
+R1168 Cminor.program
+R1216 Coq.Init.Logic "x = y" type_scope
+R1196 Cminorgen.transl_program
+R1218 Coq.Init.Datatypes.Some
+R1239 Cminorgenproof.genv
+R1249 Globalenvs.globalenv
+R1279 Cminor.genv
+R1287 Globalenvs.globalenv
+R1379 Coq.Init.Logic "x = y" type_scope
+R1356 Globalenvs.find_symbol
+R1381 Globalenvs.find_symbol
+R1348 AST.ident
+R1482 Cminorgen.transl_function
+R1445 Globalenvs.find_symbol_transf_partial
+R1482 Cminorgen.transl_function
+R1445 Globalenvs.find_symbol_transf_partial
+R1630 Coq.Init.Logic "'exists' x , p" type_scope
+R1679 Coq.Init.Logic "A /\ B" type_scope
+R1669 Coq.Init.Logic "x = y" type_scope
+R1643 Globalenvs.find_funct_ptr
+R1671 Coq.Init.Datatypes.Some
+R1700 Coq.Init.Logic "x = y" type_scope
+R1682 Cminorgen.transl_function
+R1702 Coq.Init.Datatypes.Some
+R1616 Coq.Init.Logic "x = y" type_scope
+R1591 Globalenvs.find_funct_ptr
+R1618 Coq.Init.Datatypes.Some
+R1576 Cminorgenproof.function
+R1565 Values.block
+R1747 Globalenvs.find_funct_ptr_transf_partial
+R1782 Cminorgen.transl_function
+R1747 Globalenvs.find_funct_ptr_transf_partial
+R1782 Cminorgen.transl_function
+R1817 Cminorgen.transl_function
+R1817 Cminorgen.transl_function
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R2017 Coq.Init.Logic "'exists' x , p" type_scope
+R2062 Coq.Init.Logic "A /\ B" type_scope
+R2052 Coq.Init.Logic "x = y" type_scope
+R2030 Globalenvs.find_funct
+R2054 Coq.Init.Datatypes.Some
+R2083 Coq.Init.Logic "x = y" type_scope
+R2065 Cminorgen.transl_function
+R2085 Coq.Init.Datatypes.Some
+R2003 Coq.Init.Logic "x = y" type_scope
+R1982 Globalenvs.find_funct
+R2005 Coq.Init.Datatypes.Some
+R1967 Cminorgenproof.function
+R1958 Values.val
+R2130 Globalenvs.find_funct_transf_partial
+R2161 Cminorgen.transl_function
+R2130 Globalenvs.find_funct_transf_partial
+R2161 Cminorgen.transl_function
+R2196 Cminorgen.transl_function
+R2196 Cminorgen.transl_function
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R2388 Mem.meminj
+R2531 Coq.Init.Logic "A /\ B" type_scope
+R2517 Coq.Init.Logic "x = y" type_scope
+R2519 Coq.Init.Datatypes.Some
+R2524 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R2558 Coq.Init.Logic "x = y" type_scope
+R2534 Globalenvs.find_symbol
+R2560 Coq.Init.Datatypes.Some
+R2495 Coq.Init.Logic "x = y" type_scope
+R2472 Globalenvs.find_symbol
+R2497 Coq.Init.Datatypes.Some
+R2615 Coq.Init.Logic "x = y" type_scope
+R2617 Coq.Init.Datatypes.Some
+R2621 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R2604 Coq.ZArith.BinInt "x < y" Z_scope
+R2658 Mem.meminj
+R2671 AST.ident
+R2702 Cminorgenproof.env
+R2713 Mem.mem
+R2723 Cminor.env
+R2733 Values.block
+R2763 Cminorgen.var_info
+R3035 Cminorgen.Var_local
+R2982 Mem.val_inject
+R2963 Coq.Init.Logic "x = y" type_scope
+R2947 Maps.get
+R2965 Coq.Init.Datatypes.Some
+R2931 Coq.Init.Logic "x = y" type_scope
+R2933 Coq.Init.Datatypes.None
+R2909 Coq.Init.Logic "x = y" type_scope
+R2888 Mem.load
+R2911 Coq.Init.Datatypes.Some
+R2852 Coq.Init.Logic "x = y" type_scope
+R2837 Maps.get
+R2854 Coq.Init.Datatypes.Some
+R2859 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R2863 Cminorplus.LVscalar
+R3254 Cminorgen.Var_stack_scalar
+R3163 Mem.val_inject
+R3195 Values.Vptr
+R3204 Integers.repr
+R3177 Values.Vptr
+R3184 Integers.zero
+R3127 Coq.Init.Logic "x = y" type_scope
+R3112 Maps.get
+R3129 Coq.Init.Datatypes.Some
+R3134 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R3138 Cminorplus.LVscalar
+R3476 Cminorgen.Var_stack_array
+R3385 Mem.val_inject
+R3417 Values.Vptr
+R3426 Integers.repr
+R3399 Values.Vptr
+R3406 Integers.zero
+R3353 Coq.Init.Logic "x = y" type_scope
+R3338 Maps.get
+R3355 Coq.Init.Datatypes.Some
+R3360 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R3364 Cminorplus.LVarray
+R3582 Cminorgen.Var_global
+R3540 Coq.Init.Logic "x = y" type_scope
+R3525 Maps.get
+R3542 Coq.Init.Datatypes.None
+R3617 Mem.meminj
+R3632 Cminorgen.compilenv
+R3664 Cminorgenproof.env
+R3675 Mem.mem
+R3685 Cminor.env
+R3695 Values.block
+R3727 Coq.ZArith.BinInt.Z
+R3787 Cminorgenproof.match_var
+R3813 Maps.get
+R3858 Coq.ZArith.BinInt "x <= y" Z_scope
+R3938 Coq.ZArith.BinInt "x <= y < z" Z_scope
+R3918 Coq.Init.Logic "x = y" type_scope
+R3903 Maps.get
+R3920 Coq.Init.Datatypes.Some
+R3924 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R4102 Coq.Init.Logic "x <> y" type_scope
+R4089 Coq.Init.Logic "x <> y" type_scope
+R4060 Coq.Init.Logic "x = y" type_scope
+R4044 Maps.get
+R4062 Coq.Init.Datatypes.Some
+R4066 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R4019 Coq.Init.Logic "x = y" type_scope
+R4003 Maps.get
+R4021 Coq.Init.Datatypes.Some
+R4025 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R4177 Coq.ZArith.BinInt "x <= y < z" Z_scope
+R4153 Coq.Init.Logic "x = y" type_scope
+R4155 Coq.Init.Datatypes.Some
+R4159 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R4270 Coq.ZArith.BinInt "x < y" Z_scope
+R4259 Coq.ZArith.BinInt "x < y" Z_scope
+R4236 Coq.Init.Logic "x = y" type_scope
+R4238 Coq.Init.Datatypes.Some
+R4242 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R4328 Cminorgen.compilenv
+R4349 Cminorgenproof.env
+R4367 Cminor.env
+R4383 Values.block
+R4402 Coq.ZArith.BinInt.Z
+R4418 Coq.ZArith.BinInt.Z
+R4456 Coq.Lists.List.list
+R4461 Cminorgenproof.frame
+R4529 Mem.mem
+R4524 Coq.ZArith.BinInt.Z
+R4519 Coq.ZArith.BinInt.Z
+R4506 Cminorgenproof.callstack
+R4496 Mem.meminj
+R4640 Coq.Lists.List.nil
+R4594 Cminorgenproof.match_globalenvs
+R4900 Coq.Lists.List "x :: y" list_scope
+R4873 Cminorgenproof.mkframe
+R4774 Cminorgenproof.match_env
+R4756 Coq.ZArith.BinInt "x < y" Z_scope
+R4735 Coq.ZArith.BinInt "x <= y" Z_scope
+R5134 Cminorgenproof.match_env
+R5095 Cminorgenproof.match_env
+R5080 Coq.Init.Logic "x = y" type_scope
+R5057 Mem.store
+R5082 Coq.Init.Datatypes.Some
+R5044 Coq.Init.Logic "x <> y" type_scope
+R5047 Coq.Init.Datatypes.None
+R5337 Mem.load_store_other
+R5337 Mem.load_store_other
+R5576 Cminorgenproof.match_callstack
+R5561 Coq.Init.Logic "x = y" type_scope
+R5538 Mem.store
+R5563 Coq.Init.Datatypes.Some
+R5525 Coq.Init.Logic "x <> y" type_scope
+R5528 Coq.Init.Datatypes.None
+R5452 Cminorgenproof.match_callstack
+R5674 Cminorgenproof.match_env_store_mapped
+R5674 Cminorgenproof.match_env_store_mapped
+R5815 Coq.Init.Logic "'exists' x , p" type_scope
+R5828 Coq.Init.Logic "x = y" type_scope
+R5830 Values.load_result
+R5798 Values.val
+R5780 AST.memory_chunk
+R5949 Coq.Init.Logic "x = y" type_scope
+R5901 Values.load_result
+R5924 Values.load_result
+R5953 Values.load_result
+R6038 Integers.cast8_signed_idem
+R6038 Integers.cast8_signed_idem
+R6077 Integers.cast8_unsigned_idem
+R6077 Integers.cast8_unsigned_idem
+R6118 Integers.cast16_signed_idem
+R6118 Integers.cast16_signed_idem
+R6158 Integers.cast16_unsigned_idem
+R6158 Integers.cast16_unsigned_idem
+R6200 Floats.singleoffloat_idem
+R6200 Floats.singleoffloat_idem
+R6338 Coq.Init.Logic "x = y" type_scope
+R6314 Values.load_result
+R6288 Cminorgenproof.val_normalized
+R6394 Cminorgenproof.load_result_idem
+R6394 Cminorgenproof.load_result_idem
+R6666 Cminorgenproof.match_env
+R6689 Maps.set
+R6627 Cminorgenproof.match_env
+R6612 Coq.Init.Logic "x = y" type_scope
+R6591 Mem.store
+R6614 Coq.Init.Datatypes.Some
+R6562 Cminorgenproof.val_normalized
+R6539 Mem.val_inject
+R6508 Coq.Init.Logic "x = y" type_scope
+R6504 Maps "a ! b"
+R6510 Coq.Init.Datatypes.Some
+R6514 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R6518 Cminorplus.LVscalar
+R6855 Coqlib.peq
+R6855 Coqlib.peq
+R6954 Cminorplus.local_variable
+R6932 Cminorgenproof.local_variable
+R6954 Cminorplus.local_variable
+R6932 Cminorgenproof.local_variable
+R7084 Mem.load_store_same
+R7084 Mem.load_store_same
+R7127 Maps.gss
+R7127 Maps.gss
+R7172 Values.load_result
+R7172 Values.load_result
+R7209 Mem.load_result_inject
+R7209 Mem.load_result_inject
+R7263 Cminorgenproof.load_result_normalized
+R7263 Cminorgenproof.load_result_normalized
+R7379 Mem.load_store_other
+R7379 Mem.load_store_other
+R7417 Maps.gso
+R7417 Maps.gso
+R7743 Cminorgenproof.match_env
+R7704 Cminorgenproof.match_env
+R7694 Coq.ZArith.BinInt "x <= y" Z_scope
+R7676 Coq.Init.Logic "x = y" type_scope
+R7655 Mem.store
+R7678 Coq.Init.Datatypes.Some
+R7932 Mem.load_store_other
+R7932 Mem.load_store_other
+R8217 Cminorgenproof.match_callstack
+R8207 Coq.ZArith.BinInt "x <= y" Z_scope
+R8186 Coq.Init.Logic "x = y" type_scope
+R8165 Mem.store
+R8188 Coq.Init.Datatypes.Some
+R8100 Cminorgenproof.match_callstack
+R8315 Cminorgenproof.match_env_store_above
+R8315 Cminorgenproof.match_env_store_above
+R8735 Cminorgenproof.match_callstack
+R8799 Coq.Lists.List "x :: y" list_scope
+R8754 Cminorgenproof.mkframe
+R8770 Maps.set
+R8661 Cminorgenproof.match_callstack
+R8707 Coq.Lists.List "x :: y" list_scope
+R8680 Cminorgenproof.mkframe
+R8646 Coq.Init.Logic "x = y" type_scope
+R8625 Mem.store
+R8648 Coq.Init.Datatypes.Some
+R8596 Cminorgenproof.val_normalized
+R8573 Mem.val_inject
+R8542 Coq.Init.Logic "x = y" type_scope
+R8538 Maps "a ! b"
+R8544 Coq.Init.Datatypes.Some
+R8548 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R8552 Cminorplus.LVscalar
+R8882 Cminorgenproof.match_env_store_local
+R8882 Cminorgenproof.match_env_store_local
+R8921 Cminorgenproof.match_callstack_store_above
+R8921 Cminorgenproof.match_callstack_store_above
+R9176 Cminorgenproof.match_env
+R9161 Coq.Init.Logic "x = y" type_scope
+R9157 Maps "a ! b"
+R9166 Maps "a ! b"
+R9089 Cminorgenproof.match_env
+R9703 Cminorgenproof.match_callstack
+R9749 Coq.Lists.List "x :: y" list_scope
+R9722 Cminorgenproof.mkframe
+R9629 Cminorgenproof.match_callstack
+R9675 Coq.Lists.List "x :: y" list_scope
+R9648 Cminorgenproof.mkframe
+R9614 Coq.Init.Logic "x = y" type_scope
+R9610 Maps "a ! b"
+R9616 Coq.Init.Datatypes.Some
+R9593 Coq.Init.Logic "x = y" type_scope
+R9572 Mem.store
+R9595 Coq.Init.Datatypes.Some
+R9543 Cminorgenproof.val_normalized
+R9520 Mem.val_inject
+R9489 Coq.Init.Logic "x = y" type_scope
+R9485 Maps "a ! b"
+R9491 Coq.Init.Datatypes.Some
+R9495 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R9499 Cminorplus.LVscalar
+R9859 Maps.set
+R9831 Cminorgenproof.match_env_extensional
+R9859 Maps.set
+R9831 Cminorgenproof.match_env_extensional
+R9889 Cminorgenproof.match_env_store_local
+R9889 Cminorgenproof.match_env_store_local
+R9937 Maps.gsspec
+R9937 Maps.gsspec
+R9960 Coqlib.peq
+R9960 Coqlib.peq
+R10008 Cminorgenproof.match_callstack_store_above
+R10008 Cminorgenproof.match_callstack_store_above
+R10285 Cminorgenproof.match_callstack
+R10269 Coq.ZArith.BinInt "x <= y" Z_scope
+R10249 Coq.ZArith.BinInt "x <= y" Z_scope
+R10177 Cminorgenproof.match_callstack
+R10519 Coq.Init.Logic "x = y" type_scope
+R10484 Mem.load
+R10496 Mem.free_list
+R10521 Mem.load
+R10472 Coq.Init.Logic "x <> y" type_scope
+R10456 Coq.Lists.List.In
+R10598 Mem.load_free
+R10598 Mem.load_free
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R10657 Coq.Init.Logic.sym_not_equal
+R10657 Coq.Init.Logic.sym_not_equal
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R10834 Cminorgenproof.match_env
+R10854 Mem.free_list
+R10823 Coq.ZArith.BinInt "x <= y" Z_scope
+R10808 Coq.Lists.List.In
+R10759 Cminorgenproof.match_env
+R11039 Cminorgenproof.load_freelist
+R11039 Cminorgenproof.load_freelist
+R11324 Cminorgenproof.match_callstack
+R11359 Mem.free_list
+R11313 Coq.ZArith.BinInt "x <= y" Z_scope
+R11295 Coq.Lists.List.In
+R11229 Cminorgenproof.match_callstack
+R11435 Cminorgenproof.match_env_freelist
+R11435 Cminorgenproof.match_env_freelist
+R11787 Cminorgenproof.match_callstack
+R11822 Mem.free_list
+R11714 Cminorgenproof.match_callstack
+R11760 Coq.Lists.List "x :: y" list_scope
+R11733 Cminorgenproof.mkframe
+R11703 Coq.ZArith.BinInt "x <= y" Z_scope
+R11688 Coq.Lists.List.In
+R11894 Cminorgenproof.match_callstack_incr_bound
+R11894 Cminorgenproof.match_callstack_incr_bound
+R11941 Cminorgenproof.match_callstack_freelist_rec
+R11941 Cminorgenproof.match_callstack_freelist_rec
+R12135 Coq.Init.Logic "x = y" type_scope
+R12117 Mem.load
+R12137 Coq.Init.Datatypes.Some
+R12142 Values.Vundef
+R12102 Coq.Init.Logic "x = y" type_scope
+R12072 Mem.alloc
+R12084 Mem.size_chunk
+R12104 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R12178 Mem.valid_block
+R12178 Mem.valid_block
+R12204 Mem.valid_new_block
+R12204 Mem.valid_new_block
+R12253 Coq.ZArith.BinInt "x <= y" Z_scope
+R12238 Mem.low_bound
+R12253 Coq.ZArith.BinInt "x <= y" Z_scope
+R12238 Mem.low_bound
+R12277 Mem.low_bound_alloc
+R12277 Mem.low_bound_alloc
+R12317 Coqlib.zeq_true
+R12317 Coqlib.zeq_true
+R12365 Coq.ZArith.BinInt "x <= y" Z_scope
+R12346 Coq.ZArith.BinInt "x + y" Z_scope
+R12348 Mem.size_chunk
+R12368 Mem.high_bound
+R12365 Coq.ZArith.BinInt "x <= y" Z_scope
+R12346 Coq.ZArith.BinInt "x + y" Z_scope
+R12348 Mem.size_chunk
+R12368 Mem.high_bound
+R12402 Mem.high_bound_alloc
+R12402 Mem.high_bound_alloc
+R12443 Coqlib.zeq_true
+R12443 Coqlib.zeq_true
+R12468 Mem.load_in_bounds
+R12468 Mem.load_in_bounds
+R12529 Coq.Init.Logic "x = y" type_scope
+R12531 Values.Vundef
+R12529 Coq.Init.Logic "x = y" type_scope
+R12531 Values.Vundef
+R12547 Mem.load_alloc_same
+R12547 Mem.load_alloc_same
+R13207 Cminorgenproof.match_env
+R13245 Mem.nextblock
+R13184 Mem.inject_incr
+R13155 Maps.set
+R13168 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R13117 Maps.set
+R13075 Mem.extend_inject
+R13050 Coq.Init.Logic "x = y" type_scope
+R13046 Maps "a ! b"
+R13052 Coq.Init.Datatypes.Some
+R12990 Cminorgenproof.match_env
+R13028 Mem.nextblock
+R12739 Cminorgen.Var_local
+R12770 Coq.Init.Logic "A /\ B" type_scope
+R12763 Coq.Init.Logic "x = y" type_scope
+R12765 Coq.Init.Datatypes.None
+R12776 Coq.Init.Logic "x = y" type_scope
+R12778 Cminorplus.LVscalar
+R12799 Cminorgen.Var_stack_scalar
+R12850 Coq.Init.Logic "A /\ B" type_scope
+R12834 Coq.Init.Logic "x = y" type_scope
+R12836 Coq.Init.Datatypes.Some
+R12840 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R12856 Coq.Init.Logic "x = y" type_scope
+R12858 Cminorplus.LVscalar
+R12879 Cminorgen.Var_stack_array
+R12923 Coq.Init.Logic "A /\ B" type_scope
+R12907 Coq.Init.Logic "x = y" type_scope
+R12909 Coq.Init.Datatypes.Some
+R12913 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R12926 Coq.Init.Logic "'exists' x , p" type_scope
+R12940 Coq.Init.Logic "x = y" type_scope
+R12942 Cminorplus.LVarray
+R12959 Cminorgen.Var_global
+R12973 Coq.Init.Logic.False
+R12702 Coq.Init.Logic "x = y" type_scope
+R12679 Mem.alloc
+R12691 Cminorplus.sizeof
+R12704 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R13287 Coq.Init.Logic "x = y" type_scope
+R13293 Mem.nextblock
+R13287 Coq.Init.Logic "x = y" type_scope
+R13293 Mem.nextblock
+R13362 Coq.Init.Logic "x = y" type_scope
+R13351 Mem.nextblock
+R13364 Coq.ZArith.BinInt.Zsucc
+R13374 Mem.nextblock
+R13362 Coq.Init.Logic "x = y" type_scope
+R13351 Mem.nextblock
+R13364 Coq.ZArith.BinInt.Zsucc
+R13374 Mem.nextblock
+R13517 Maps.gsspec
+R13517 Maps.gsspec
+R13536 Coqlib.peq
+R13536 Coqlib.peq
+R13698 Values.Vundef
+R13675 Cminorgenproof.match_var_local
+R13698 Values.Vundef
+R13675 Cminorgenproof.match_var_local
+R13734 Maps.gss
+R13734 Maps.gss
+R13770 Cminorgenproof.load_from_alloc_is_undef
+R13770 Cminorgenproof.load_from_alloc_is_undef
+R13904 Coqlib.zeq_true
+R13904 Coqlib.zeq_true
+R14032 Cminorgenproof.match_var_stack_scalar
+R14032 Cminorgenproof.match_var_stack_scalar
+R14089 Maps.gss
+R14089 Maps.gss
+R14125 Mem.val_inject_ptr
+R14125 Mem.val_inject_ptr
+R14192 Coqlib.zeq_true
+R14192 Coqlib.zeq_true
+R14223 Integers.add_commut
+R14223 Integers.add_commut
+R14247 Integers.add_zero
+R14247 Integers.add_zero
+R14348 Cminorgenproof.match_var_stack_array
+R14348 Cminorgenproof.match_var_stack_array
+R14406 Maps.gss
+R14406 Maps.gss
+R14442 Mem.val_inject_ptr
+R14442 Mem.val_inject_ptr
+R14509 Coqlib.zeq_true
+R14509 Coqlib.zeq_true
+R14540 Integers.add_commut
+R14540 Integers.add_commut
+R14564 Integers.add_zero
+R14564 Integers.add_zero
+R14757 Maps.gso
+R14757 Maps.gso
+R14823 Coqlib.zeq_false
+R14823 Coqlib.zeq_false
+R14928 Maps.gso
+R14928 Maps.gso
+R14970 Maps.gso
+R14970 Maps.gso
+R15012 Maps.gso
+R15012 Maps.gso
+R15134 Maps.gsspec
+R15134 Maps.gsspec
+R15157 Coqlib.peq
+R15157 Coqlib.peq
+R15359 Maps.gsspec
+R15359 Maps.gsspec
+R15359 Maps.gsspec
+R15359 Maps.gsspec
+R15381 Coqlib.peq
+R15400 Coqlib.peq
+R15381 Coqlib.peq
+R15400 Coqlib.peq
+R15400 Coqlib.peq
+R15722 Coqlib.zeq
+R15722 Coqlib.zeq
+R15917 Coqlib.zeq
+R15917 Coqlib.zeq
+R16322 Cminorgenproof.match_env
+R16299 Mem.inject_incr
+R16270 Mem.extend_inject
+R16220 Cminorgenproof.match_env
+R16197 Coq.ZArith.BinInt "x <= y" Z_scope
+R16204 Mem.nextblock
+R16141 Coq.Init.Datatypes.None
+R16149 Coq.Init.Logic.True
+R16156 Coq.Init.Datatypes.Some
+R16161 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R16180 Coq.ZArith.BinInt "x < y" Z_scope
+R16110 Coq.Init.Logic "x = y" type_scope
+R16084 Mem.alloc
+R16096 Cminorplus.sizeof
+R16112 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R16388 Coq.Init.Logic "x = y" type_scope
+R16394 Mem.nextblock
+R16388 Coq.Init.Logic "x = y" type_scope
+R16394 Mem.nextblock
+R16627 Coqlib.zeq_false
+R16627 Coqlib.zeq_false
+R16792 Coqlib.zeq
+R16792 Coqlib.zeq
+R16940 Coqlib.zeq
+R16940 Coqlib.zeq
+R17342 Cminorgenproof.match_callstack
+R17319 Mem.inject_incr
+R17290 Mem.extend_inject
+R17257 Coq.ZArith.BinInt "x <= y" Z_scope
+R17264 Mem.nextblock
+R17193 Coq.Init.Datatypes.None
+R17201 Coq.Init.Logic.True
+R17208 Coq.Init.Datatypes.Some
+R17213 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R17236 Coq.ZArith.BinInt "x <= y" Z_scope
+R17162 Coq.Init.Logic "x = y" type_scope
+R17139 Mem.alloc
+R17151 Cminorplus.sizeof
+R17164 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R17073 Cminorgenproof.match_callstack
+R17675 Cminorgenproof.match_env_alloc_other
+R17675 Cminorgenproof.match_env_alloc_other
+R18551 Cminorgenproof.match_callstack
+R18623 Mem.nextblock
+R18612 Coq.Lists.List "x :: y" list_scope
+R18571 Cminorgenproof.mkframe
+R18601 Mem.nextblock
+R18528 Mem.inject_incr
+R18499 Maps.set
+R18512 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R18461 Maps.set
+R18419 Mem.extend_inject
+R18394 Coq.Init.Logic "x = y" type_scope
+R18390 Maps "a ! b"
+R18396 Coq.Init.Datatypes.Some
+R18290 Cminorgenproof.match_callstack
+R18362 Mem.nextblock
+R18351 Coq.Lists.List "x :: y" list_scope
+R18310 Cminorgenproof.mkframe
+R18340 Mem.nextblock
+R18039 Cminorgen.Var_local
+R18070 Coq.Init.Logic "A /\ B" type_scope
+R18063 Coq.Init.Logic "x = y" type_scope
+R18065 Coq.Init.Datatypes.None
+R18076 Coq.Init.Logic "x = y" type_scope
+R18078 Cminorplus.LVscalar
+R18099 Cminorgen.Var_stack_scalar
+R18150 Coq.Init.Logic "A /\ B" type_scope
+R18134 Coq.Init.Logic "x = y" type_scope
+R18136 Coq.Init.Datatypes.Some
+R18140 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R18156 Coq.Init.Logic "x = y" type_scope
+R18158 Cminorplus.LVscalar
+R18179 Cminorgen.Var_stack_array
+R18223 Coq.Init.Logic "A /\ B" type_scope
+R18207 Coq.Init.Logic "x = y" type_scope
+R18209 Coq.Init.Datatypes.Some
+R18213 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R18226 Coq.Init.Logic "'exists' x , p" type_scope
+R18240 Coq.Init.Logic "x = y" type_scope
+R18242 Cminorplus.LVarray
+R18259 Cminorgen.Var_global
+R18273 Coq.Init.Logic.False
+R18002 Coq.Init.Logic "x = y" type_scope
+R17979 Mem.alloc
+R17991 Cminorplus.sizeof
+R18004 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R18733 Cminorgenproof.match_env_alloc_same
+R18733 Cminorgenproof.match_env_alloc_same
+R18782 Cminorgenproof.match_callstack_alloc_other
+R18782 Cminorgenproof.match_callstack_alloc_other
+R19158 Cminorgenproof.match_callstack
+R19190 Mem.nextblock
+R19108 Cminorgenproof.match_callstack
+R19140 Mem.nextblock
+R19092 Coq.Init.Logic "x = y" type_scope
+R19076 Mem.alloc
+R19094 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R19228 Cminorgenproof.match_callstack_incr_bound
+R19228 Cminorgenproof.match_callstack_incr_bound
+R19441 Cminorgenproof.match_globalenvs
+R19400 Cminorgenproof.match_callstack
+R19613 Cminorgenproof.match_env
+R19601 Coq.ZArith.BinInt "x <= y" Z_scope
+R19560 Cminorgenproof.match_env
+R19968 Cminorgenproof.match_callstack
+R20017 Coq.Lists.List "x :: y" list_scope
+R19987 Cminorgenproof.mkframe
+R19895 Cminorgenproof.match_callstack
+R19941 Coq.Lists.List "x :: y" list_scope
+R19914 Cminorgenproof.mkframe
+R20106 Cminorgenproof.match_env_incr_hi
+R20106 Cminorgenproof.match_env_incr_hi
+R20216 Cmconstrproof.eval_negint
+R20228 Cmconstrproof.eval_negfloat
+R20242 Cmconstrproof.eval_absfloat
+R20256 Cmconstrproof.eval_intoffloat
+R20274 Cmconstrproof.eval_floatofint
+R20290 Cmconstrproof.eval_floatofintu
+R20307 Cmconstrproof.eval_notint
+R20319 Cmconstrproof.eval_notbool
+R20334 Cmconstrproof.eval_cast8signed
+R20351 Cmconstrproof.eval_cast8unsigned
+R20370 Cmconstrproof.eval_cast16signed
+R20390 Cmconstrproof.eval_cast16unsigned
+R20410 Cmconstrproof.eval_singleoffloat
+R20429 Cmconstrproof.eval_add
+R20438 Cmconstrproof.eval_add_ptr
+R20453 Cmconstrproof.eval_add_ptr_2
+R20468 Cmconstrproof.eval_sub
+R20477 Cmconstrproof.eval_sub_ptr_int
+R20494 Cmconstrproof.eval_sub_ptr_ptr
+R20513 Cmconstrproof.eval_mul
+R20522 Cmconstrproof.eval_divs
+R20532 Cmconstrproof.eval_mods
+R20542 Cmconstrproof.eval_divu
+R20552 Cmconstrproof.eval_modu
+R20564 Cmconstrproof.eval_and
+R20573 Cmconstrproof.eval_or
+R20581 Cmconstrproof.eval_xor
+R20590 Cmconstrproof.eval_shl
+R20599 Cmconstrproof.eval_shr
+R20608 Cmconstrproof.eval_shru
+R20621 Cmconstrproof.eval_addf
+R20631 Cmconstrproof.eval_subf
+R20641 Cmconstrproof.eval_mulf
+R20651 Cmconstrproof.eval_divf
+R20663 Cmconstrproof.eval_cmp
+R20672 Cmconstrproof.eval_cmp_null_r
+R20688 Cmconstrproof.eval_cmp_null_l
+R20704 Cmconstrproof.eval_cmp_ptr
+R20719 Cmconstrproof.eval_cmpu
+R20729 Cmconstrproof.eval_cmpf
+R20796 Mem.val_inject
+R20826 Values.of_bool
+R20810 Values.of_bool
+R20970 Coq.Init.Logic "'exists' x , p" type_scope
+R20982 Coq.Init.Logic "A /\ B" type_scope
+R20985 Mem.val_inject
+R20999 Values.Vint
+R21096 Coq.Init.Logic "'exists' x , p" type_scope
+R21108 Coq.Init.Logic "A /\ B" type_scope
+R21111 Mem.val_inject
+R21125 Values.Vfloat
+R21226 Coq.Init.Logic "'exists' x , p" type_scope
+R21238 Coq.Init.Logic "A /\ B" type_scope
+R21241 Mem.val_inject
+R21255 Values.of_bool
+R21292 Values.of_bool
+R21350 Cminorgenproof.val_inject_val_of_bool
+R21157 Values.Vfloat
+R21029 Values.Vint
+R21497 Coq.Init.Logic "x = y" type_scope
+R21461 Integers.sub
+R21484 Integers.add
+R21470 Integers.add
+R21499 Integers.sub
+R21537 Integers.sub_add_opp
+R21537 Integers.sub_add_opp
+R21562 Integers.neg_add_distr
+R21562 Integers.neg_add_distr
+R21591 Integers.add_assoc
+R21591 Integers.add_assoc
+R21618 Integers.add_commut
+R21646 Integers.neg
+R21634 Integers.neg
+R21618 Integers.add_commut
+R21646 Integers.neg
+R21634 Integers.neg
+R21673 Integers.add_assoc
+R21673 Integers.add_assoc
+R21699 Integers.add_neg_zero
+R21699 Integers.add_neg_zero
+R21728 Integers.add_commut
+R21743 Integers.zero
+R21728 Integers.add_commut
+R21743 Integers.zero
+R21762 Integers.add_zero
+R21762 Integers.add_zero
+R21794 Integers.sub_add_opp
+R21794 Integers.sub_add_opp
+R21916 Coq.Init.Logic "A /\ B" type_scope
+R21905 Coq.Init.Logic "x = y" type_scope
+R21907 Integers.zero
+R21942 Coq.Init.Logic "A \/ B" type_scope
+R21928 Coq.Init.Logic "A /\ B" type_scope
+R21922 Coq.Init.Logic "x = y" type_scope
+R21924 AST.Ceq
+R21933 Coq.Init.Logic "x = y" type_scope
+R21935 Values.Vfalse
+R21953 Coq.Init.Logic "A /\ B" type_scope
+R21947 Coq.Init.Logic "x = y" type_scope
+R21949 AST.Cne
+R21958 Coq.Init.Logic "x = y" type_scope
+R21960 Values.Vtrue
+R21889 Coq.Init.Logic "x = y" type_scope
+R21865 Cminorgenproof.eval_compare_null
+R21891 Coq.Init.Datatypes.Some
+R22032 Integers.eq
+R22039 Integers.eq_spec
+R22053 Integers.zero
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R22412 Coq.Init.Logic "'exists' x , p" type_scope
+R22487 Coq.Init.Logic "A /\ B" type_scope
+R22428 Cminor.eval_expr
+R22443 Values.Vptr
+R22451 Integers.zero
+R22490 Mem.val_inject
+R22387 Mem.mem_inject
+R22357 Mem.val_list_inject
+R22289 Cminor.eval_exprlist
+R22308 Values.Vptr
+R22316 Integers.zero
+R22275 Coq.Init.Logic "x = y" type_scope
+R22249 Cminorgenproof.eval_operation
+R22277 Coq.Init.Datatypes.Some
+R22235 Coq.Init.Logic "x = y" type_scope
+R22221 Cminorgen.make_op
+R22237 Coq.Init.Datatypes.Some
+R23809 Values.Vptr
+R23818 Integers.add
+R23809 Values.Vptr
+R23818 Integers.add
+R23872 Mem.val_inject_ptr
+R23872 Mem.val_inject_ptr
+R23930 Integers.add_assoc
+R23930 Integers.add_assoc
+R23930 Integers.add_assoc
+R23930 Integers.add_assoc
+R23958 Integers.add_commut
+R23958 Integers.add_commut
+R24004 Values.Vptr
+R24013 Integers.add
+R24004 Values.Vptr
+R24013 Integers.add
+R24068 Mem.val_inject_ptr
+R24068 Mem.val_inject_ptr
+R24126 Integers.add_assoc
+R24126 Integers.add_assoc
+R24126 Integers.add_assoc
+R24126 Integers.add_assoc
+R24154 Integers.add_commut
+R24154 Integers.add_commut
+R24200 Values.Vptr
+R24209 Integers.sub
+R24200 Values.Vptr
+R24209 Integers.sub
+R24264 Mem.val_inject_ptr
+R24264 Mem.val_inject_ptr
+R24313 Integers.sub_add_l
+R24313 Integers.sub_add_l
+R24361 Values.eq_block
+R24361 Values.eq_block
+R24432 Coq.Init.Logic "x = y" type_scope
+R24432 Coq.Init.Logic "x = y" type_scope
+R24471 Values.Vint
+R24477 Integers.sub
+R24471 Values.Vint
+R24477 Integers.sub
+R24572 Cminorgenproof.int_sub_shifted
+R24572 Cminorgenproof.int_sub_shifted
+R24643 Integers.eq_spec
+R24658 Integers.zero
+R24679 Integers.eq
+R24689 Integers.zero
+R24643 Integers.eq_spec
+R24658 Integers.zero
+R24679 Integers.eq
+R24689 Integers.zero
+R24779 Integers.eq_spec
+R24794 Integers.zero
+R24815 Integers.eq
+R24825 Integers.zero
+R24779 Integers.eq_spec
+R24794 Integers.zero
+R24815 Integers.eq
+R24825 Integers.zero
+R24915 Integers.eq_spec
+R24930 Integers.zero
+R24951 Integers.eq
+R24961 Integers.zero
+R24915 Integers.eq_spec
+R24930 Integers.zero
+R24951 Integers.eq
+R24961 Integers.zero
+R25051 Integers.eq_spec
+R25066 Integers.zero
+R25087 Integers.eq
+R25097 Integers.zero
+R25051 Integers.eq_spec
+R25066 Integers.zero
+R25087 Integers.eq
+R25097 Integers.zero
+R25182 Integers.ltu
+R25194 Integers.repr
+R25182 Integers.ltu
+R25194 Integers.repr
+R25304 Integers.ltu
+R25316 Integers.repr
+R25304 Integers.ltu
+R25316 Integers.repr
+R25427 Integers.ltu
+R25439 Integers.repr
+R25427 Integers.ltu
+R25439 Integers.repr
+R25555 Cminorgenproof.eval_compare_null_inv
+R25555 Cminorgenproof.eval_compare_null_inv
+R25747 Cminorgenproof.eval_compare_null_inv
+R25747 Cminorgenproof.eval_compare_null_inv
+R25976 Coq.Bool.Bool "x && y" bool_scope
+R25942 Mem.valid_pointer
+R25962 Integers.signed
+R25979 Mem.valid_pointer
+R26000 Integers.signed
+R25976 Coq.Bool.Bool "x && y" bool_scope
+R25942 Mem.valid_pointer
+R25962 Integers.signed
+R25979 Mem.valid_pointer
+R26000 Integers.signed
+R26078 Values.eq_block
+R26078 Values.eq_block
+R26142 Coq.Init.Logic "x = y" type_scope
+R26142 Coq.Init.Logic "x = y" type_scope
+R26185 Coq.Init.Logic "x = y" type_scope
+R26185 Coq.Init.Logic "x = y" type_scope
+R26222 Coq.Bool.Bool.andb_prop
+R26222 Coq.Bool.Bool.andb_prop
+R26259 Values.of_bool
+R26272 Integers.cmp
+R26259 Values.of_bool
+R26272 Integers.cmp
+R26353 Integers.translate_cmp
+R26353 Integers.translate_cmp
+R26381 Cminorgenproof.val_inject_val_of_bool
+R26381 Cminorgenproof.val_inject_val_of_bool
+R26415 Mem.valid_pointer_inject_no_overflow
+R26415 Mem.valid_pointer_inject_no_overflow
+R26465 Mem.valid_pointer_inject_no_overflow
+R26465 Mem.valid_pointer_inject_no_overflow
+R27073 Coq.Init.Logic "'exists' x , p" type_scope
+R27189 Coq.Init.Logic "A /\ B" type_scope
+R27087 Cminor.eval_expr
+R27144 Cminorgen.make_cast
+R27102 Values.Vptr
+R27110 Integers.zero
+R27214 Coq.Init.Logic "A /\ B" type_scope
+R27192 Mem.val_inject
+R27217 Cminorgenproof.val_normalized
+R27050 Mem.val_inject
+R27035 Coq.Init.Logic "x = y" type_scope
+R27022 Cminorplus.cast
+R27037 Coq.Init.Datatypes.Some
+R26960 Cminor.eval_expr
+R26975 Values.Vptr
+R26983 Integers.zero
+R27365 Values.Vint
+R27371 Integers.cast8signed
+R27365 Values.Vint
+R27371 Integers.cast8signed
+R27408 Cmconstrproof.eval_cast8signed
+R27408 Cmconstrproof.eval_cast8signed
+R27463 Values.Vint
+R27463 Values.Vint
+R27496 Values.Vint
+R27502 Integers.cast8unsigned
+R27496 Values.Vint
+R27502 Integers.cast8unsigned
+R27540 Cmconstrproof.eval_cast8unsigned
+R27540 Cmconstrproof.eval_cast8unsigned
+R27597 Values.Vint
+R27597 Values.Vint
+R27630 Values.Vint
+R27636 Integers.cast16signed
+R27630 Values.Vint
+R27636 Integers.cast16signed
+R27674 Cmconstrproof.eval_cast16signed
+R27674 Cmconstrproof.eval_cast16signed
+R27730 Values.Vint
+R27730 Values.Vint
+R27763 Values.Vint
+R27769 Integers.cast16unsigned
+R27763 Values.Vint
+R27769 Integers.cast16unsigned
+R27808 Cmconstrproof.eval_cast16unsigned
+R27808 Cmconstrproof.eval_cast16unsigned
+R27866 Values.Vint
+R27866 Values.Vint
+R27899 Values.Vint
+R27899 Values.Vint
+R27944 Values.Vint
+R27944 Values.Vint
+R27977 Values.Vptr
+R27977 Values.Vptr
+R28028 Values.Vptr
+R28028 Values.Vptr
+R28067 Values.Vfloat
+R28075 Floats.singleoffloat
+R28067 Values.Vfloat
+R28075 Floats.singleoffloat
+R28116 Cmconstrproof.eval_singleoffloat
+R28116 Cmconstrproof.eval_singleoffloat
+R28173 Values.Vfloat
+R28173 Values.Vfloat
+R28209 Values.Vfloat
+R28209 Values.Vfloat
+R28257 Values.Vfloat
+R28257 Values.Vfloat
+R28346 Cminor.eval_expr
+R28440 Values.Vptr
+R28449 Integers.repr
+R28401 Cminorgen.make_stackaddr
+R28361 Values.Vptr
+R28369 Integers.zero
+R28514 Cminor.eval_Eop
+R28514 Cminor.eval_Eop
+R28569 Integers.add_commut
+R28569 Integers.add_commut
+R28591 Integers.add_zero
+R28591 Integers.add_zero
+R28782 Cminor.eval_expr
+R28839 Cminorgen.make_load
+R28797 Values.Vptr
+R28805 Integers.zero
+R28768 Coq.Init.Logic "x = y" type_scope
+R28745 Mem.loadv
+R28770 Coq.Init.Datatypes.Some
+R28683 Cminor.eval_expr
+R28698 Values.Vptr
+R28706 Integers.zero
+R28925 Cmconstrproof.eval_load
+R28925 Cmconstrproof.eval_load
+R29064 Mem.val_content_inject
+R29086 Mem.mem_chunk
+R29039 Mem.val_inject
+R29024 Coq.Init.Logic "x = y" type_scope
+R29010 Cminorplus.cast
+R29026 Coq.Init.Datatypes.Some
+R29220 Mem.val_content_inject_8
+R29220 Mem.val_content_inject_8
+R29248 Integers.cast8_unsigned_signed
+R29248 Integers.cast8_unsigned_signed
+R29283 Mem.val_content_inject_8
+R29283 Mem.val_content_inject_8
+R29311 Integers.cast8_unsigned_idem
+R29311 Integers.cast8_unsigned_idem
+R29344 Mem.val_content_inject_16
+R29344 Mem.val_content_inject_16
+R29373 Integers.cast16_unsigned_signed
+R29373 Integers.cast16_unsigned_signed
+R29409 Mem.val_content_inject_16
+R29409 Mem.val_content_inject_16
+R29438 Integers.cast16_unsigned_idem
+R29438 Integers.cast16_unsigned_idem
+R29536 Mem.val_content_inject_32
+R29536 Mem.val_content_inject_32
+R29565 Floats.singleoffloat_idem
+R29565 Floats.singleoffloat_idem
+R30070 Coq.Init.Logic "'exists' x , p" type_scope
+R30082 Coq.Init.Logic "'exists' x , p" type_scope
+R30204 Coq.Init.Logic "A /\ B" type_scope
+R30095 Cminor.eval_expr
+R30152 Cminorgen.make_store
+R30110 Values.Vptr
+R30118 Integers.zero
+R30229 Coq.Init.Logic "A /\ B" type_scope
+R30207 Mem.mem_inject
+R30252 Coq.Init.Logic "A /\ B" type_scope
+R30232 Mem.val_inject
+R30269 Coq.Init.Logic "x = y" type_scope
+R30255 Mem.nextblock
+R30271 Mem.nextblock
+R30041 Mem.val_inject
+R30010 Mem.val_inject
+R29985 Mem.mem_inject
+R29970 Coq.Init.Logic "x = y" type_scope
+R29942 Mem.storev
+R29972 Coq.Init.Datatypes.Some
+R29928 Coq.Init.Logic "x = y" type_scope
+R29912 Cminorplus.cast
+R29930 Coq.Init.Datatypes.Some
+R29833 Cminor.eval_expr
+R29848 Values.Vptr
+R29856 Integers.zero
+R29752 Cminor.eval_expr
+R29767 Values.Vptr
+R29775 Integers.zero
+R30332 Mem.val_content_inject
+R30354 Mem.mem_chunk
+R30332 Mem.val_content_inject
+R30354 Mem.mem_chunk
+R30392 Cminorgenproof.val_content_inject_cast
+R30392 Cminorgenproof.val_content_inject_cast
+R30432 Mem.storev_mapped_inject_1
+R30432 Mem.storev_mapped_inject_1
+R30530 Cmconstrproof.eval_store
+R30530 Cmconstrproof.eval_store
+R30611 Cminorgenproof.make_cast_correct
+R30611 Cminorgenproof.make_cast_correct
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R30824 Mem.store_inv
+R30824 Mem.store_inv
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R31165 Coq.Init.Logic "'exists' x , p" type_scope
+R31233 Coq.Init.Logic "A /\ B" type_scope
+R31180 Cminor.eval_expr
+R31195 Values.Vptr
+R31203 Integers.zero
+R31240 Mem.val_inject
+R31151 Coq.Init.Logic "x = y" type_scope
+R31134 Mem.load
+R31153 Coq.Init.Datatypes.Some
+R31103 Coq.Init.Logic "x = y" type_scope
+R31099 Maps "a ! b"
+R31105 Coq.Init.Datatypes.Some
+R31109 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R31113 Cminorplus.LVscalar
+R31075 Mem.mem_inject
+R30986 Cminorgenproof.match_callstack
+R31057 Mem.nextblock
+R31042 Mem.nextblock
+R31032 Coq.Lists.List "x :: y" list_scope
+R31005 Cminorgenproof.mkframe
+R30972 Coq.Init.Logic "x = y" type_scope
+R30956 Cminorgen.var_get
+R30974 Coq.Init.Datatypes.Some
+R31302 Cminorgenproof.match_var
+R31331 Maps "a !! b"
+R31302 Cminorgenproof.match_var
+R31331 Maps "a !! b"
+R31391 Maps "a !! b"
+R31391 Maps "a !! b"
+R31545 Cminor.eval_Evar
+R31545 Cminor.eval_Evar
+R31714 Coq.Init.Logic "x = y" type_scope
+R31714 Coq.Init.Logic "x = y" type_scope
+R31755 Coq.Init.Logic "x = y" type_scope
+R31755 Coq.Init.Logic "x = y" type_scope
+R31829 Coq.Init.Logic "x = y" type_scope
+R31797 Mem.loadv
+R31812 Values.Vptr
+R31819 Integers.zero
+R31831 Coq.Init.Datatypes.Some
+R31829 Coq.Init.Logic "x = y" type_scope
+R31797 Mem.loadv
+R31812 Values.Vptr
+R31819 Integers.zero
+R31831 Coq.Init.Datatypes.Some
+R31866 Mem.loadv_inject
+R31866 Mem.loadv_inject
+R31975 Cminorgenproof.make_load_correct
+R31975 Cminorgenproof.make_load_correct
+R32008 Cminorgenproof.make_stackaddr_correct
+R32008 Cminorgenproof.make_stackaddr_correct
+R32281 Coq.Init.Logic "'exists' x , p" type_scope
+R32349 Coq.Init.Logic "A /\ B" type_scope
+R32296 Cminor.eval_expr
+R32311 Values.Vptr
+R32319 Integers.zero
+R32356 Mem.val_inject
+R32370 Values.Vptr
+R32377 Integers.zero
+R32262 Coq.Init.Logic "x = y" type_scope
+R32258 Maps "a ! b"
+R32264 Coq.Init.Datatypes.Some
+R32268 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R32168 Cminorgenproof.match_callstack
+R32239 Mem.nextblock
+R32224 Mem.nextblock
+R32214 Coq.Lists.List "x :: y" list_scope
+R32187 Cminorgenproof.mkframe
+R32154 Coq.Init.Logic "x = y" type_scope
+R32137 Cminorgen.var_addr
+R32156 Coq.Init.Datatypes.Some
+R32435 Cminorgenproof.match_var
+R32464 Maps "a !! b"
+R32435 Cminorgenproof.match_var
+R32464 Maps "a !! b"
+R32524 Maps "a !! b"
+R32524 Maps "a !! b"
+R32666 Values.Vptr
+R32675 Integers.repr
+R32666 Values.Vptr
+R32675 Integers.repr
+R32705 Cminorgenproof.make_stackaddr_correct
+R32705 Cminorgenproof.make_stackaddr_correct
+R32802 Values.Vptr
+R32811 Integers.repr
+R32802 Values.Vptr
+R32811 Integers.repr
+R32841 Cminorgenproof.make_stackaddr_correct
+R32841 Cminorgenproof.make_stackaddr_correct
+R33199 Coq.Init.Logic "'exists' x , p" type_scope
+R33267 Coq.Init.Logic "A /\ B" type_scope
+R33214 Cminor.eval_expr
+R33229 Values.Vptr
+R33237 Integers.zero
+R33274 Mem.val_inject
+R33288 Values.Vptr
+R33295 Integers.zero
+R33185 Coq.Init.Logic "x = y" type_scope
+R33162 Globalenvs.find_symbol
+R33187 Coq.Init.Datatypes.Some
+R33150 Coq.Init.Logic "x = y" type_scope
+R33146 Maps "a ! b"
+R33152 Coq.Init.Datatypes.None
+R33056 Cminorgenproof.match_callstack
+R33127 Mem.nextblock
+R33112 Mem.nextblock
+R33102 Coq.Lists.List "x :: y" list_scope
+R33075 Cminorgenproof.mkframe
+R33042 Coq.Init.Logic "x = y" type_scope
+R33025 Cminorgen.var_addr
+R33044 Coq.Init.Datatypes.Some
+R33353 Cminorgenproof.match_var
+R33382 Maps "a !! b"
+R33353 Cminorgenproof.match_var
+R33382 Maps "a !! b"
+R33444 Maps "a !! b"
+R33444 Maps "a !! b"
+R33545 Cminorgenproof.match_callstack_match_globalenvs
+R33545 Cminorgenproof.match_callstack_match_globalenvs
+R33664 Values.Vptr
+R33671 Integers.zero
+R33664 Values.Vptr
+R33671 Integers.zero
+R33698 Cminor.eval_Eop
+R33698 Cminor.eval_Eop
+R34244 Coq.Init.Logic "'exists' x , p" type_scope
+R34256 Coq.Init.Logic "'exists' x , p" type_scope
+R34268 Coq.Init.Logic "'exists' x , p" type_scope
+R34340 Coq.Init.Logic "A /\ B" type_scope
+R34283 Cminor.eval_expr
+R34298 Values.Vptr
+R34306 Integers.zero
+R34366 Coq.Init.Logic "A /\ B" type_scope
+R34347 Mem.val_inject
+R34393 Coq.Init.Logic "A /\ B" type_scope
+R34373 Mem.mem_inject
+R34400 Cminorgenproof.match_callstack
+R34474 Mem.nextblock
+R34458 Mem.nextblock
+R34447 Coq.Lists.List "x :: y" list_scope
+R34419 Cminorgenproof.mkframe
+R34229 Coq.Init.Logic "x = y" type_scope
+R34207 Mem.store
+R34231 Coq.Init.Datatypes.Some
+R34192 Coq.Init.Logic "x = y" type_scope
+R34178 Cminorplus.cast
+R34194 Coq.Init.Datatypes.Some
+R34147 Coq.Init.Logic "x = y" type_scope
+R34143 Maps "a ! b"
+R34149 Coq.Init.Datatypes.Some
+R34153 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R34157 Cminorplus.LVscalar
+R34117 Mem.mem_inject
+R34091 Mem.val_inject
+R34025 Cminor.eval_expr
+R34040 Values.Vptr
+R34048 Integers.zero
+R33932 Cminorgenproof.match_callstack
+R34006 Mem.nextblock
+R33990 Mem.nextblock
+R33979 Coq.Lists.List "x :: y" list_scope
+R33951 Cminorgenproof.mkframe
+R33918 Coq.Init.Logic "x = y" type_scope
+R33898 Cminorgen.var_set
+R33920 Coq.Init.Datatypes.Some
+R34556 Coq.Init.Logic "x = y" type_scope
+R34543 Mem.nextblock
+R34558 Mem.nextblock
+R34556 Coq.Init.Logic "x = y" type_scope
+R34543 Mem.nextblock
+R34558 Mem.nextblock
+R34589 Mem.store_inv
+R34589 Mem.store_inv
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R34731 Maps "a !! b"
+R34731 Maps "a !! b"
+R34917 Coq.Init.Logic "x = y" type_scope
+R34917 Coq.Init.Logic "x = y" type_scope
+R34957 Coq.Init.Logic "x = y" type_scope
+R34957 Coq.Init.Logic "x = y" type_scope
+R34998 Cminorgenproof.make_cast_correct
+R34998 Cminorgenproof.make_cast_correct
+R35092 Maps.set
+R35092 Maps.set
+R35153 Cminor.eval_Eassign
+R35153 Cminor.eval_Eassign
+R35205 Mem.store_unmapped_inject
+R35205 Mem.store_unmapped_inject
+R35264 Cminorgenproof.match_callstack_store_local
+R35264 Cminorgenproof.match_callstack_store_local
+R35422 Coq.Init.Logic "x = y" type_scope
+R35422 Coq.Init.Logic "x = y" type_scope
+R35462 Coq.Init.Logic "x = y" type_scope
+R35462 Coq.Init.Logic "x = y" type_scope
+R35542 Coq.Init.Logic "x = y" type_scope
+R35505 Mem.storev
+R35522 Values.Vptr
+R35529 Integers.zero
+R35544 Coq.Init.Datatypes.Some
+R35542 Coq.Init.Logic "x = y" type_scope
+R35505 Mem.storev
+R35522 Values.Vptr
+R35529 Integers.zero
+R35544 Coq.Init.Datatypes.Some
+R35580 Cminorgenproof.make_stackaddr_correct
+R35580 Cminorgenproof.make_stackaddr_correct
+R35658 Cminorgenproof.make_store_correct
+R35658 Cminorgenproof.make_store_correct
+R35953 Cminorgenproof.match_callstack_mapped
+R35953 Cminorgenproof.match_callstack_mapped
+R36097 Coq.ZArith.BinInt "x <= y" Z_scope
+R36100 Cminorgen.align
+R36088 Coq.ZArith.BinInt "x > y" Z_scope
+R36244 Coq.ZArith.BinInt "x <= y" Z_scope
+R36223 Coq.Init.Logic "x = y" type_scope
+R36186 Cminorgen.assign_variables
+R36212 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R36225 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R36383 Cminorgen.mem
+R36383 Cminorgen.mem
+R36460 Mem.size_chunk_pos
+R36460 Mem.size_chunk_pos
+R36500 Cminorgenproof.align_bounds
+R36517 Mem.size_chunk
+R36500 Cminorgenproof.align_bounds
+R36517 Mem.size_chunk
+R36605 Coq.ZArith.BinInt "x > y" Z_scope
+R36605 Coq.ZArith.BinInt "x > y" Z_scope
+R36630 Cminorgenproof.align_bounds
+R36630 Cminorgenproof.align_bounds
+R36665 Coq.ZArith.BinInt "x <= y" Z_scope
+R36668 Coq.ZArith.Zmin.Zmax
+R36665 Coq.ZArith.BinInt "x <= y" Z_scope
+R36668 Coq.ZArith.Zmin.Zmax
+R36685 Coqlib.Zmax_bound_l
+R36685 Coqlib.Zmax_bound_l
+R37340 Coq.Init.Logic "'exists' x , p" type_scope
+R37375 Coq.Init.Logic "A /\ B" type_scope
+R37356 Mem.inject_incr
+R37400 Coq.Init.Logic "A /\ B" type_scope
+R37378 Mem.mem_inject
+R37403 Cminorgenproof.match_callstack
+R37514 Mem.nextblock
+R37499 Mem.nextblock
+R37464 Coq.Lists.List "x :: y" list_scope
+R37423 Cminorgenproof.mkframe
+R37453 Mem.nextblock
+R37326 Coq.Init.Logic "x <> y" type_scope
+R37322 Maps "a ! b"
+R37329 Coq.Init.Datatypes.None
+R37300 Coq.Lists.List.In
+R37303 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R37273 Coq.ZArith.BinInt "x <= y" Z_scope
+R37265 Coq.ZArith.BinInt "x + y" Z_scope
+R37250 Mem.high_bound
+R37229 Coq.Init.Logic "x = y" type_scope
+R37231 Coq.Init.Datatypes.Some
+R37235 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R37197 Coq.ZArith.BinInt "x <= y" Z_scope
+R37172 Mem.mem_inject
+R37052 Cminorgenproof.match_callstack
+R37154 Mem.nextblock
+R37139 Mem.nextblock
+R37109 Coq.Lists.List "x :: y" list_scope
+R37071 Cminorgenproof.mkframe
+R37098 Mem.nextblock
+R37032 Coq.Init.Logic "x = y" type_scope
+R36995 Cminorgen.assign_variables
+R37021 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R37034 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R36936 Cminorplus.alloc_variables
+R36885 Coq.ZArith.BinInt "x <= y" Z_scope
+R36888 Integers.max_signed
+R36870 Coq.Init.Logic "x = y" type_scope
+R36853 Mem.high_bound
+R36844 Coq.Init.Logic "x = y" type_scope
+R36828 Mem.low_bound
+R36805 Mem.valid_block
+R37686 Mem.inject_incr_refl
+R37686 Mem.inject_incr_refl
+R37835 Cminorgen.assign_variables
+R37862 Cminorgen.assign_variable
+R37891 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R37882 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R37775 Cminorgen.assign_variables
+R37815 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R37806 Coq.Lists.List "x :: y" list_scope
+R37797 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R37835 Cminorgen.assign_variables
+R37862 Cminorgen.assign_variable
+R37891 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R37882 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R37775 Cminorgen.assign_variables
+R37815 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R37806 Coq.Lists.List "x :: y" list_scope
+R37797 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R37915 Cminorgen.assign_variable
+R37944 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R37935 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R37915 Cminorgen.assign_variable
+R37944 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R37935 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R38083 Coq.Init.Logic "x <> y" type_scope
+R38078 Maps "a ! b"
+R38086 Coq.Init.Datatypes.None
+R38054 Coq.Lists.List.In
+R38057 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R38083 Coq.Init.Logic "x <> y" type_scope
+R38078 Maps "a ! b"
+R38086 Coq.Init.Datatypes.None
+R38054 Coq.Lists.List.In
+R38057 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R38152 Coq.Init.Logic "'exists' x , p" type_scope
+R38169 Coq.Init.Logic "x = y" type_scope
+R38165 Maps "a ! b"
+R38171 Coq.Init.Datatypes.Some
+R38152 Coq.Init.Logic "'exists' x , p" type_scope
+R38169 Coq.Init.Logic "x = y" type_scope
+R38165 Maps "a ! b"
+R38171 Coq.Init.Datatypes.Some
+R38199 Coq.Init.Logic "x <> y" type_scope
+R38195 Maps "a ! b"
+R38202 Coq.Init.Datatypes.None
+R38199 Coq.Init.Logic "x <> y" type_scope
+R38195 Maps "a ! b"
+R38202 Coq.Init.Datatypes.None
+R38260 Maps "a ! b"
+R38260 Maps "a ! b"
+R38443 Cminorgen.mem
+R38443 Cminorgen.mem
+R38527 Cminorgen.align
+R38537 Mem.size_chunk
+R38527 Cminorgen.align
+R38537 Mem.size_chunk
+R38618 Mem.extend_inject
+R38636 Coq.Init.Datatypes.Some
+R38641 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R38618 Mem.extend_inject
+R38636 Coq.Init.Datatypes.Some
+R38641 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R38672 Mem.size_chunk_pos
+R38672 Mem.size_chunk_pos
+R38726 Cminorgenproof.align_bounds
+R38743 Mem.size_chunk
+R38726 Cminorgenproof.align_bounds
+R38743 Mem.size_chunk
+R38826 Coq.Init.Logic "A /\ B" type_scope
+R38806 Mem.mem_inject
+R38829 Mem.inject_incr
+R38826 Coq.Init.Logic "A /\ B" type_scope
+R38806 Mem.mem_inject
+R38829 Mem.inject_incr
+R38877 Coq.ZArith.BinInt "x < y" Z_scope
+R38862 Integers.min_signed
+R38877 Coq.ZArith.BinInt "x < y" Z_scope
+R38862 Integers.min_signed
+R38916 Cminorgenproof.assign_variables_incr
+R38916 Cminorgenproof.assign_variables_incr
+R38988 Mem.alloc_mapped_inject
+R38988 Mem.alloc_mapped_inject
+R39203 Cminorgenproof.match_callstack
+R39336 Mem.nextblock
+R39321 Mem.nextblock
+R39300 Coq.Lists.List "x :: y" list_scope
+R39236 Cminorgenproof.mkframe
+R39286 Mem.nextblock
+R39251 Maps.set
+R39264 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R39203 Cminorgenproof.match_callstack
+R39336 Mem.nextblock
+R39321 Mem.nextblock
+R39300 Coq.Lists.List "x :: y" list_scope
+R39236 Cminorgenproof.mkframe
+R39286 Mem.nextblock
+R39251 Maps.set
+R39264 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R39392 Cminorgenproof.match_callstack_alloc_left
+R39392 Cminorgenproof.match_callstack_alloc_left
+R39449 Coq.ZArith.BinInt "x <= y" Z_scope
+R39449 Coq.ZArith.BinInt "x <= y" Z_scope
+R39602 Coq.ZArith.BinInt "x <= y" Z_scope
+R39594 Coq.ZArith.BinInt "x + y" Z_scope
+R39578 Mem.high_bound
+R39521 Coq.Init.Logic "x = y" type_scope
+R39523 Coq.Init.Datatypes.Some
+R39527 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R39602 Coq.ZArith.BinInt "x <= y" Z_scope
+R39594 Coq.ZArith.BinInt "x + y" Z_scope
+R39578 Mem.high_bound
+R39521 Coq.Init.Logic "x = y" type_scope
+R39523 Coq.Init.Datatypes.Some
+R39527 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R39688 Mem.high_bound_alloc
+R39688 Mem.high_bound_alloc
+R39733 Coqlib.zeq
+R39733 Coqlib.zeq
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R40004 Mem.inject_incr_trans
+R40004 Mem.inject_incr_trans
+R40139 Mem.alloc_unmapped_inject
+R40139 Mem.alloc_unmapped_inject
+R40199 Mem.extend_inject
+R40216 Coq.Init.Datatypes.None
+R40199 Mem.extend_inject
+R40216 Coq.Init.Datatypes.None
+R40267 Cminorgenproof.match_callstack
+R40400 Mem.nextblock
+R40385 Mem.nextblock
+R40364 Coq.Lists.List "x :: y" list_scope
+R40300 Cminorgenproof.mkframe
+R40350 Mem.nextblock
+R40315 Maps.set
+R40328 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R40267 Cminorgenproof.match_callstack
+R40400 Mem.nextblock
+R40385 Mem.nextblock
+R40364 Coq.Lists.List "x :: y" list_scope
+R40300 Cminorgenproof.mkframe
+R40350 Mem.nextblock
+R40315 Maps.set
+R40328 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R40456 Cminorgenproof.match_callstack_alloc_left
+R40456 Cminorgenproof.match_callstack_alloc_left
+R40613 Coq.ZArith.BinInt "x <= y" Z_scope
+R40605 Coq.ZArith.BinInt "x + y" Z_scope
+R40589 Mem.high_bound
+R40532 Coq.Init.Logic "x = y" type_scope
+R40534 Coq.Init.Datatypes.Some
+R40538 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R40613 Coq.ZArith.BinInt "x <= y" Z_scope
+R40605 Coq.ZArith.BinInt "x + y" Z_scope
+R40589 Mem.high_bound
+R40532 Coq.Init.Logic "x = y" type_scope
+R40534 Coq.Init.Datatypes.Some
+R40538 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R40698 Mem.high_bound_alloc
+R40698 Mem.high_bound_alloc
+R40743 Coqlib.zeq
+R40743 Coqlib.zeq
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R40958 Mem.inject_incr_trans
+R40958 Mem.inject_incr_trans
+R41101 Coq.ZArith.BinInt "x <= y" Z_scope
+R41104 Coq.ZArith.Zmin.Zmax
+R41101 Coq.ZArith.BinInt "x <= y" Z_scope
+R41104 Coq.ZArith.Zmin.Zmax
+R41123 Coq.ZArith.Zmin.Zmax1
+R41123 Coq.ZArith.Zmin.Zmax1
+R41143 Coq.ZArith.BinInt "x > y" Z_scope
+R41143 Coq.ZArith.BinInt "x > y" Z_scope
+R41170 Cminorgenproof.align_bounds
+R41170 Cminorgenproof.align_bounds
+R41214 Cminorgen.align
+R41214 Cminorgen.align
+R41245 Mem.extend_inject
+R41263 Coq.Init.Datatypes.Some
+R41268 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R41245 Mem.extend_inject
+R41263 Coq.Init.Datatypes.Some
+R41268 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R41313 Coq.Init.Logic "A /\ B" type_scope
+R41293 Mem.mem_inject
+R41316 Mem.inject_incr
+R41313 Coq.Init.Logic "A /\ B" type_scope
+R41293 Mem.mem_inject
+R41316 Mem.inject_incr
+R41362 Coq.ZArith.BinInt "x < y" Z_scope
+R41347 Integers.min_signed
+R41362 Coq.ZArith.BinInt "x < y" Z_scope
+R41347 Integers.min_signed
+R41399 Cminorgenproof.assign_variables_incr
+R41399 Cminorgenproof.assign_variables_incr
+R41469 Mem.alloc_mapped_inject
+R41469 Mem.alloc_mapped_inject
+R41680 Cminorgenproof.match_callstack
+R41813 Mem.nextblock
+R41798 Mem.nextblock
+R41777 Coq.Lists.List "x :: y" list_scope
+R41713 Cminorgenproof.mkframe
+R41763 Mem.nextblock
+R41728 Maps.set
+R41741 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R41680 Cminorgenproof.match_callstack
+R41813 Mem.nextblock
+R41798 Mem.nextblock
+R41777 Coq.Lists.List "x :: y" list_scope
+R41713 Cminorgenproof.mkframe
+R41763 Mem.nextblock
+R41728 Maps.set
+R41741 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R41869 Cminorgenproof.match_callstack_alloc_left
+R41869 Cminorgenproof.match_callstack_alloc_left
+R41926 Coq.ZArith.BinInt "x <= y" Z_scope
+R41926 Coq.ZArith.BinInt "x <= y" Z_scope
+R42079 Coq.ZArith.BinInt "x <= y" Z_scope
+R42071 Coq.ZArith.BinInt "x + y" Z_scope
+R42055 Mem.high_bound
+R41998 Coq.Init.Logic "x = y" type_scope
+R42000 Coq.Init.Datatypes.Some
+R42004 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R42079 Coq.ZArith.BinInt "x <= y" Z_scope
+R42071 Coq.ZArith.BinInt "x + y" Z_scope
+R42055 Mem.high_bound
+R41998 Coq.Init.Logic "x = y" type_scope
+R42000 Coq.Init.Datatypes.Some
+R42004 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R42165 Mem.high_bound_alloc
+R42165 Mem.high_bound_alloc
+R42210 Coqlib.zeq
+R42210 Coqlib.zeq
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R42481 Mem.inject_incr_trans
+R42481 Mem.inject_incr_trans
+R42611 Coq.Init.Logic "x <> y" type_scope
+R42606 Maps "a ! b"
+R42584 Cminor.set_params
+R42614 Coq.Init.Datatypes.None
+R42567 Coq.Lists.List.In
+R42699 Maps.gsspec
+R42699 Maps.gsspec
+R42719 Coqlib.peq
+R42719 Coqlib.peq
+R42811 Maps.gsspec
+R42811 Maps.gsspec
+R42831 Coqlib.peq
+R42831 Coqlib.peq
+R43020 Coq.Init.Logic "x <> y" type_scope
+R43015 Maps "a ! b"
+R42998 Cminor.set_locals
+R43023 Coq.Init.Datatypes.None
+R42978 Coq.Init.Logic "A \/ B" type_scope
+R42967 Coq.Lists.List.In
+R42986 Coq.Init.Logic "x <> y" type_scope
+R42982 Maps "a ! b"
+R42989 Coq.Init.Datatypes.None
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R43088 Maps.gsspec
+R43088 Maps.gsspec
+R43108 Coqlib.peq
+R43108 Coqlib.peq
+R43166 Coq.Init.Logic "x <> y" type_scope
+R43166 Coq.Init.Logic "x <> y" type_scope
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R43338 Coq.Init.Logic "x <> y" type_scope
+R43333 Maps "a ! b"
+R43293 Cminor.set_locals
+R43310 Cminor.set_params
+R43341 Coq.Init.Datatypes.None
+R43264 Coq.Lists.List.In
+R43278 Coq.Lists.List "x ++ y" list_scope
+R43370 Cminorgenproof.set_locals_defined
+R43370 Cminorgenproof.set_locals_defined
+R43399 Coq.Lists.List.in_app_or
+R43399 Coq.Lists.List.in_app_or
+R43442 Cminorgenproof.set_params_defined
+R43442 Cminorgenproof.set_params_defined
+R44021 Coq.Init.Logic "'exists' x , p" type_scope
+R44056 Coq.Init.Logic "A /\ B" type_scope
+R44037 Mem.inject_incr
+R44082 Coq.Init.Logic "A /\ B" type_scope
+R44059 Mem.mem_inject
+R44085 Cminorgenproof.match_callstack
+R44206 Mem.nextblock
+R44190 Mem.nextblock
+R44155 Coq.Lists.List "x :: y" list_scope
+R44105 Cminorgenproof.mkframe
+R44144 Mem.nextblock
+R44129 Mem.nextblock
+R43972 Cminor.set_locals
+R43990 Cminor.set_params
+R43905 Coq.Lists.List.map
+R43946 Cminorgenproof.fn_vars
+R43916 Coq.Init.Datatypes.fst
+R43926 Cminorplus.local_variable
+R43920 AST.ident
+R43835 Coq.Lists.List.map
+R43874 Cminorgenproof.fn_params
+R43846 Coq.Init.Datatypes.fst
+R43856 AST.memory_chunk
+R43850 AST.ident
+R43797 Mem.mem_inject
+R43740 Cminorgenproof.match_callstack
+R43779 Mem.nextblock
+R43764 Mem.nextblock
+R43723 Coq.Init.Logic "x = y" type_scope
+R43705 Mem.alloc
+R43725 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R43644 Cminorplus.alloc_variables
+R43675 Cminorplus.fn_variables
+R43660 Cminorgenproof.empty_env
+R43621 Coq.ZArith.BinInt "x <= y" Z_scope
+R43624 Integers.max_signed
+R43600 Coq.Init.Logic "x = y" type_scope
+R43581 Cminorgen.build_compilenv
+R43602 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R44256 Coq.Init.Logic "x = y" type_scope
+R44258 Mem.nextblock
+R44256 Coq.Init.Logic "x = y" type_scope
+R44258 Mem.nextblock
+R44334 Cminorgenproof.match_callstack_alloc_variables_rec
+R44334 Cminorgenproof.match_callstack_alloc_variables_rec
+R44404 Mem.valid_new_block
+R44404 Mem.valid_new_block
+R44439 Mem.low_bound_alloc
+R44439 Mem.low_bound_alloc
+R44479 Coqlib.zeq_true
+R44479 Coqlib.zeq_true
+R44500 Mem.high_bound_alloc
+R44500 Mem.high_bound_alloc
+R44541 Coqlib.zeq_true
+R44541 Coqlib.zeq_true
+R44606 Mem.valid_block
+R44606 Mem.valid_block
+R44634 Mem.valid_new_block
+R44634 Mem.valid_new_block
+R44712 Maps.gi
+R44712 Maps.gi
+R44765 Maps.gempty
+R44765 Maps.gempty
+R44883 Maps.gempty
+R44883 Maps.gempty
+R44976 Maps.gempty
+R44976 Maps.gempty
+R45037 Mem.mi_mappedblocks
+R45037 Mem.mi_mappedblocks
+R45091 Mem.fresh_block_alloc
+R45091 Mem.fresh_block_alloc
+R45163 Mem.mi_mappedblocks
+R45163 Mem.mi_mappedblocks
+R45258 Mem.alloc_right_inject
+R45258 Mem.alloc_right_inject
+R45310 Mem.mi_mappedblocks
+R45310 Mem.mi_mappedblocks
+R45439 Cminorgenproof.set_locals_params_defined
+R45439 Cminorgenproof.set_locals_params_defined
+R45554 Cminorgenproof.fn_params
+R45528 Cminorplus.fn_params
+R45554 Cminorgenproof.fn_params
+R45528 Cminorplus.fn_params
+R45607 Cminorgenproof.fn_vars
+R45583 Cminorplus.fn_vars
+R45607 Cminorgenproof.fn_vars
+R45583 Cminorplus.fn_vars
+R45633 Coq.Lists.List.in_app_or
+R45633 Coq.Lists.List.in_app_or
+R45670 Coqlib.list_in_map_inv
+R45670 Coqlib.list_in_map_inv
+R45721 Coq.Lists.List.in_or_app
+R45721 Coq.Lists.List.in_or_app
+R45757 Coq.Lists.List.in_map
+R45757 Coq.Lists.List.in_map
+R45784 Coq.Lists.List.in_or_app
+R45784 Coq.Lists.List.in_or_app
+R45821 Coq.Init.Datatypes.fst
+R45825 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R45821 Coq.Init.Datatypes.fst
+R45825 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R45842 Coq.Lists.List.in_map
+R45842 Coq.Lists.List.in_map
+R45991 Coq.ZArith.BinInt "x <= y" Z_scope
+R45978 Mem.nextblock
+R45994 Mem.nextblock
+R45937 Cminorplus.alloc_variables
+R46267 Coq.Init.Logic "A <-> B" type_scope
+R46245 Coq.ZArith.BinInt "x <= y < z" Z_scope
+R46234 Mem.nextblock
+R46256 Mem.nextblock
+R46271 Coq.Lists.List.In
+R46179 Cminorplus.alloc_variables
+R46419 Coq.Init.Logic "x = y" type_scope
+R46407 Mem.nextblock
+R46419 Coq.Init.Logic "x = y" type_scope
+R46407 Mem.nextblock
+R46476 Coq.Init.Logic "x = y" type_scope
+R46463 Mem.nextblock
+R46478 Coq.ZArith.BinInt.Zsucc
+R46485 Mem.nextblock
+R46476 Coq.Init.Logic "x = y" type_scope
+R46463 Mem.nextblock
+R46478 Coq.ZArith.BinInt.Zsucc
+R46485 Mem.nextblock
+R46598 Coq.Init.Logic "A \/ B" type_scope
+R46594 Coq.Init.Logic "x = y" type_scope
+R46582 Mem.nextblock
+R46614 Coq.ZArith.BinInt "x <= y < z" Z_scope
+R46601 Mem.nextblock
+R46621 Mem.nextblock
+R46598 Coq.Init.Logic "A \/ B" type_scope
+R46594 Coq.Init.Logic "x = y" type_scope
+R46582 Mem.nextblock
+R46614 Coq.ZArith.BinInt "x <= y < z" Z_scope
+R46601 Mem.nextblock
+R46621 Mem.nextblock
+R46767 Cminorgenproof.alloc_variables_nextblock_incr
+R46767 Cminorgenproof.alloc_variables_nextblock_incr
+R46967 Cminor.env
+R46955 Coq.Lists.List.list
+R46960 Values.val
+R46924 Coq.Lists.List.list
+R46936 Coq.Init.Datatypes "x * y" type_scope
+R46930 AST.ident
+R46938 AST.memory_chunk
+R46914 Mem.meminj
+R47048 Coq.Lists.List.nil
+R47044 Coq.Lists.List.nil
+R47259 Coq.Lists.List "x :: y" list_scope
+R47247 Coq.Lists.List "x :: y" list_scope
+R47235 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R47149 Mem.val_inject
+R47130 Coq.Init.Logic "x = y" type_scope
+R47126 Maps "a ! b"
+R47132 Coq.Init.Datatypes.Some
+R47441 Cminorgenproof.vars_vals_match
+R47427 Coq.Init.Logic "x = y" type_scope
+R47423 Maps "a ! b"
+R47431 Maps "a ! b"
+R47400 Coq.Lists.List.In
+R47403 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R47335 Cminorgenproof.vars_vals_match
+R48014 Coq.Init.Logic "'exists' x , p" type_scope
+R48026 Coq.Init.Logic "'exists' x , p" type_scope
+R48178 Coq.Init.Logic "A /\ B" type_scope
+R48043 Cminor.exec_stmtlist
+R48165 Cminor.Out_normal
+R48108 Cminorgen.store_parameters
+R48062 Values.Vptr
+R48070 Integers.zero
+R48203 Coq.Init.Logic "A /\ B" type_scope
+R48181 Mem.mem_inject
+R48206 Cminorgenproof.match_callstack
+R48280 Mem.nextblock
+R48264 Mem.nextblock
+R48253 Coq.Lists.List "x :: y" list_scope
+R48225 Cminorgenproof.mkframe
+R47921 Cminorgenproof.match_callstack
+R47995 Mem.nextblock
+R47979 Mem.nextblock
+R47968 Coq.Lists.List "x :: y" list_scope
+R47940 Cminorgenproof.mkframe
+R47896 Mem.mem_inject
+R47834 Coqlib.list_norepet
+R47848 Coq.Lists.List.map
+R47859 Coq.Init.Datatypes.fst
+R47869 AST.memory_chunk
+R47863 AST.ident
+R47797 Cminorgenproof.vars_vals_match
+R47721 Cminorplus.bind_parameters
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R48692 Coq.Init.Logic "x = y" type_scope
+R48679 Mem.nextblock
+R48694 Mem.nextblock
+R48692 Coq.Init.Logic "x = y" type_scope
+R48679 Mem.nextblock
+R48694 Mem.nextblock
+R48724 Mem.store_inv
+R48724 Mem.store_inv
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R48884 Cminorplus.local_variable
+R48862 Cminorgenproof.local_variable
+R48884 Cminorplus.local_variable
+R48862 Cminorgenproof.local_variable
+R48987 Coq.Init.Logic "x = y" type_scope
+R48987 Coq.Init.Logic "x = y" type_scope
+R49026 Cminor.eval_expr
+R49072 Cminor.Evar
+R49059 Coq.Lists.List.nil
+R49041 Values.Vptr
+R49049 Integers.zero
+R49026 Cminor.eval_expr
+R49072 Cminor.Evar
+R49059 Coq.Lists.List.nil
+R49041 Values.Vptr
+R49049 Integers.zero
+R49131 Cminorgenproof.make_cast_correct
+R49131 Cminorgenproof.make_cast_correct
+R49252 Maps.set
+R49252 Maps.set
+R49291 Cminorgenproof.vars_vals_match
+R49291 Cminorgenproof.vars_vals_match
+R49335 Cminorgenproof.vars_vals_match_extensional
+R49335 Cminorgenproof.vars_vals_match_extensional
+R49409 Maps.gso
+R49409 Maps.gso
+R49472 Coq.Init.Datatypes.fst
+R49476 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R49472 Coq.Init.Datatypes.fst
+R49476 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R49493 Coq.Lists.List.in_map
+R49493 Coq.Lists.List.in_map
+R49526 Mem.store_unmapped_inject
+R49526 Mem.store_unmapped_inject
+R49604 Cminorgenproof.match_callstack_store_local
+R49604 Cminorgenproof.match_callstack_store_local
+R49926 Cminor.exec_Scons_continue
+R49926 Cminor.exec_Scons_continue
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R50139 Cminorplus.local_variable
+R50117 Cminorgenproof.local_variable
+R50139 Cminorplus.local_variable
+R50117 Cminorgenproof.local_variable
+R50246 Cminorgenproof.make_stackaddr_correct
+R50272 Coq.Lists.List.nil
+R50246 Cminorgenproof.make_stackaddr_correct
+R50272 Coq.Lists.List.nil
+R50307 Cminor.eval_expr
+R50353 Cminor.Evar
+R50340 Coq.Lists.List.nil
+R50322 Values.Vptr
+R50330 Integers.zero
+R50307 Cminor.eval_expr
+R50353 Cminor.Evar
+R50340 Coq.Lists.List.nil
+R50322 Values.Vptr
+R50330 Integers.zero
+R50410 Cminorgenproof.make_store_correct
+R50478 Values.Vptr
+R50485 Integers.zero
+R50410 Cminorgenproof.make_store_correct
+R50478 Values.Vptr
+R50485 Integers.zero
+R50604 Coq.Init.Logic "x <> y" type_scope
+R50607 Coq.Init.Datatypes.None
+R50604 Coq.Init.Logic "x <> y" type_scope
+R50607 Coq.Init.Datatypes.None
+R50654 Cminorgenproof.match_callstack_mapped
+R50654 Cminorgenproof.match_callstack_mapped
+R50941 Cminor.exec_Scons_continue
+R50941 Cminor.exec_Scons_continue
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R51124 Cminorplus.local_variable
+R51102 Cminorgenproof.local_variable
+R51124 Cminorplus.local_variable
+R51102 Cminorgenproof.local_variable
+R51191 Cminorplus.local_variable
+R51169 Cminorgenproof.local_variable
+R51191 Cminorplus.local_variable
+R51169 Cminorgenproof.local_variable
+R51435 Cminorgenproof.vars_vals_match
+R51470 Cminor.set_params
+R51488 Coq.Lists.List.map
+R51499 Coq.Init.Datatypes.fst
+R51509 AST.memory_chunk
+R51503 AST.ident
+R51401 Mem.val_list_inject
+R51377 Coq.Init.Logic "x = y" type_scope
+R51358 Coq.Lists.List.length
+R51379 Coq.Lists.List.length
+R51296 Coqlib.list_norepet
+R51310 Coq.Lists.List.map
+R51321 Coq.Init.Datatypes.fst
+R51331 AST.memory_chunk
+R51325 AST.ident
+R51747 Maps.gss
+R51747 Maps.gss
+R51824 Cminor.set_params
+R51840 Coq.Lists.List.map
+R51846 Coq.Init.Datatypes.fst
+R51856 AST.memory_chunk
+R51850 AST.ident
+R51788 Cminorgenproof.vars_vals_match_extensional
+R51824 Cminor.set_params
+R51840 Coq.Lists.List.map
+R51846 Coq.Init.Datatypes.fst
+R51856 AST.memory_chunk
+R51850 AST.ident
+R51788 Cminorgenproof.vars_vals_match_extensional
+R51930 Maps.gso
+R51930 Maps.gso
+R52006 Coq.Init.Datatypes.fst
+R52010 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R51983 Coq.Init.Datatypes.fst
+R51987 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R52006 Coq.Init.Datatypes.fst
+R52010 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R51983 Coq.Init.Datatypes.fst
+R51987 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R52030 Coq.Lists.List.in_map
+R52030 Coq.Lists.List.in_map
+R52328 Cminorgenproof.vars_vals_match
+R52363 Cminor.set_locals
+R52425 Cminor.set_params
+R52443 Coq.Lists.List.map
+R52454 Coq.Init.Datatypes.fst
+R52464 AST.memory_chunk
+R52458 AST.ident
+R52375 Coq.Lists.List.map
+R52386 Coq.Init.Datatypes.fst
+R52396 Cminorplus.local_variable
+R52390 AST.ident
+R52208 Coqlib.list_norepet
+R52277 Coq.Lists.List "x ++ y" list_scope
+R52222 Coq.Lists.List.map
+R52233 Coq.Init.Datatypes.fst
+R52243 Cminorplus.local_variable
+R52237 AST.ident
+R52280 Coq.Lists.List.map
+R52291 Coq.Init.Datatypes.fst
+R52301 AST.memory_chunk
+R52295 AST.ident
+R52159 Mem.val_list_inject
+R52135 Coq.Init.Logic "x = y" type_scope
+R52116 Coq.Lists.List.length
+R52137 Coq.Lists.List.length
+R52538 Cminorgenproof.vars_vals_match_holds_1
+R52538 Cminorgenproof.vars_vals_match_holds_1
+R52608 Cminorgenproof.vars_vals_match_extensional
+R52608 Cminorgenproof.vars_vals_match_extensional
+R52660 Maps.gso
+R52660 Maps.gso
+R52710 Coq.Lists.List.in_or_app
+R52710 Coq.Lists.List.in_or_app
+R52749 Coq.Init.Datatypes.fst
+R52753 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R52754 Coq.Init.Datatypes.fst
+R52736 Coq.Init.Datatypes.fst
+R52749 Coq.Init.Datatypes.fst
+R52753 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R52754 Coq.Init.Datatypes.fst
+R52736 Coq.Init.Datatypes.fst
+R52775 Coq.Lists.List.in_map
+R52775 Coq.Lists.List.in_map
+R52922 Coq.Init.Logic "x = y" type_scope
+R52903 Coq.Lists.List.length
+R52924 Coq.Lists.List.length
+R52862 Cminorplus.bind_parameters
+R53547 Coq.Init.Logic "'exists' x , p" type_scope
+R53558 Coq.Init.Logic "'exists' x , p" type_scope
+R53570 Coq.Init.Logic "'exists' x , p" type_scope
+R53729 Coq.Init.Logic "A /\ B" type_scope
+R53587 Cminor.exec_stmtlist
+R53716 Cminor.Out_normal
+R53650 Cminorgen.store_parameters
+R53676 Cminorgenproof.fn_params
+R53606 Values.Vptr
+R53614 Integers.zero
+R53755 Coq.Init.Logic "A /\ B" type_scope
+R53732 Mem.mem_inject
+R53777 Coq.Init.Logic "A /\ B" type_scope
+R53758 Mem.inject_incr
+R53908 Coq.Init.Logic "A /\ B" type_scope
+R53780 Cminorgenproof.match_callstack
+R53892 Mem.nextblock
+R53876 Mem.nextblock
+R53858 Coq.Lists.List "x :: y" list_scope
+R53807 Cminorgenproof.mkframe
+R53847 Mem.nextblock
+R53832 Mem.nextblock
+R53958 Coq.Init.Logic "A <-> B" type_scope
+R53936 Coq.ZArith.BinInt "x <= y < z" Z_scope
+R53925 Mem.nextblock
+R53947 Mem.nextblock
+R53962 Coq.Lists.List.In
+R53488 Coqlib.list_norepet
+R53521 Coq.Lists.List "x ++ y" list_scope
+R53502 Cminorplus.fn_params_names
+R53524 Cminorplus.fn_vars_names
+R53465 Mem.mem_inject
+R53429 Mem.val_list_inject
+R53353 Cminor.set_locals
+R53384 Cminor.set_params
+R53403 Cminorplus.fn_params_names
+R53365 Cminorplus.fn_vars_names
+R53322 Coq.Init.Logic "x = y" type_scope
+R53304 Mem.alloc
+R53324 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R53281 Coq.ZArith.BinInt "x <= y" Z_scope
+R53284 Integers.max_signed
+R53260 Coq.Init.Logic "x = y" type_scope
+R53241 Cminorgen.build_compilenv
+R53262 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R53184 Cminorgenproof.match_callstack
+R53223 Mem.nextblock
+R53208 Mem.nextblock
+R53132 Cminorplus.bind_parameters
+R53157 Cminorgenproof.fn_params
+R53073 Cminorplus.alloc_variables
+R53102 Cminorplus.fn_variables
+R53089 Cminorplus.empty_env
+R54004 Cminorgenproof.bind_parameters_length
+R54004 Cminorgenproof.bind_parameters_length
+R54066 Cminorgenproof.match_callstack_alloc_variables
+R54066 Cminorgenproof.match_callstack_alloc_variables
+R54232 Mem.val_list_inject
+R54232 Mem.val_list_inject
+R54277 Mem.val_list_inject_incr
+R54277 Mem.val_list_inject_incr
+R54320 Cminorgenproof.vars_vals_match_holds
+R54379 Coqlib.list_norepet_append_commut
+R54320 Cminorgenproof.vars_vals_match_holds
+R54379 Coqlib.list_norepet_append_commut
+R54457 Coqlib.list_norepet
+R54471 Coq.Lists.List.map
+R54510 Cminorgenproof.fn_params
+R54482 Coq.Init.Datatypes.fst
+R54492 AST.memory_chunk
+R54486 AST.ident
+R54457 Coqlib.list_norepet
+R54471 Coq.Lists.List.map
+R54510 Cminorgenproof.fn_params
+R54482 Coq.Init.Datatypes.fst
+R54492 AST.memory_chunk
+R54486 AST.ident
+R54571 Coqlib.list_norepet_append_left
+R54571 Coqlib.list_norepet_append_left
+R54616 Cminorgenproof.store_parameters_correct
+R54616 Cminorgenproof.store_parameters_correct
+R54864 Cminorgenproof.alloc_variables_list_block
+R54864 Cminorgenproof.alloc_variables_list_block
+R55037 Coq.Init.Logic "x = y" type_scope
+R55022 Cminorgen.bind
+R55039 Coq.Init.Datatypes.Some
+R55296 Coq.Init.Logic "x = y" type_scope
+R55291 Coq.Init.Datatypes.None
+R55298 Coq.Init.Datatypes.Some
+R55359 Coq.Init.Logic "x = y" type_scope
+R55352 Coq.Init.Datatypes.Some
+R55361 Coq.Init.Datatypes.Some
+R55100 Coq.Init.Logic.refl_equal
+R55522 Coq.Init.Logic "x = y" type_scope
+R55507 Cminorgen.bind
+R55524 Coq.Init.Datatypes.Some
+R55570 Coq.Init.Logic "x = y" type_scope
+R55565 Coq.Init.Datatypes.None
+R55572 Coq.Init.Datatypes.Some
+R55619 Coq.Init.Logic "x = y" type_scope
+R55612 Coq.Init.Datatypes.Some
+R55621 Coq.Init.Datatypes.Some
+R55678 Coq.Init.Logic "x = y" type_scope
+R55680 Coq.Init.Datatypes.Some
+R55744 Coq.Init.Logic "x = y" type_scope
+R55746 Coq.Init.Datatypes.Some
+R55808 Coq.Init.Logic "x = y" type_scope
+R55810 Coq.Init.Datatypes.Some
+R55870 Coq.Init.Logic "x = y" type_scope
+R55872 Coq.Init.Datatypes.Some
+R55930 Coq.Init.Logic "x = y" type_scope
+R55932 Coq.Init.Datatypes.Some
+R55988 Coq.Init.Logic "x = y" type_scope
+R55990 Coq.Init.Datatypes.Some
+R56044 Coq.Init.Logic "x = y" type_scope
+R56046 Coq.Init.Datatypes.Some
+R56597 Coq.Init.Logic "'exists' x , p" type_scope
+R56608 Coq.Init.Logic "'exists' x , p" type_scope
+R56620 Coq.Init.Logic "'exists' x , p" type_scope
+R56632 Coq.Init.Logic "'exists' x , p" type_scope
+R56709 Coq.Init.Logic "A /\ B" type_scope
+R56648 Cminor.eval_expr
+R56663 Values.Vptr
+R56671 Integers.zero
+R56733 Coq.Init.Logic "A /\ B" type_scope
+R56712 Mem.val_inject
+R56759 Coq.Init.Logic "A /\ B" type_scope
+R56736 Mem.mem_inject
+R56782 Coq.Init.Logic "A /\ B" type_scope
+R56762 Mem.inject_incr
+R56785 Cminorgenproof.match_callstack
+R56876 Mem.nextblock
+R56860 Mem.nextblock
+R56841 Coq.Lists.List "x :: y" list_scope
+R56813 Cminorgenproof.mkframe
+R56434 Cminorgenproof.match_callstack
+R56531 Mem.nextblock
+R56515 Mem.nextblock
+R56493 Coq.Lists.List "x :: y" list_scope
+R56465 Cminorgenproof.mkframe
+R56402 Mem.mem_inject
+R56366 Mem.val_list_inject
+R56346 Coq.Init.Logic "x = y" type_scope
+R56327 Cminorgen.transl_expr
+R56348 Coq.Init.Datatypes.Some
+R56261 Values.val
+R56252 Mem.mem
+R56239 Cminorgenproof.expr
+R56230 Mem.mem
+R56218 Cminorgenproof.env
+R56204 Cminorgenproof.letenv
+R57347 Coq.Init.Logic "'exists' x , p" type_scope
+R57358 Coq.Init.Logic "'exists' x , p" type_scope
+R57370 Coq.Init.Logic "'exists' x , p" type_scope
+R57382 Coq.Init.Logic "'exists' x , p" type_scope
+R57466 Coq.Init.Logic "A /\ B" type_scope
+R57399 Cminor.eval_exprlist
+R57418 Values.Vptr
+R57426 Integers.zero
+R57497 Coq.Init.Logic "A /\ B" type_scope
+R57469 Mem.val_list_inject
+R57523 Coq.Init.Logic "A /\ B" type_scope
+R57500 Mem.mem_inject
+R57546 Coq.Init.Logic "A /\ B" type_scope
+R57526 Mem.inject_incr
+R57549 Cminorgenproof.match_callstack
+R57640 Mem.nextblock
+R57624 Mem.nextblock
+R57605 Coq.Lists.List "x :: y" list_scope
+R57577 Cminorgenproof.mkframe
+R57179 Cminorgenproof.match_callstack
+R57276 Mem.nextblock
+R57260 Mem.nextblock
+R57238 Coq.Lists.List "x :: y" list_scope
+R57210 Cminorgenproof.mkframe
+R57147 Mem.mem_inject
+R57111 Mem.val_list_inject
+R57090 Coq.Init.Logic "x = y" type_scope
+R57066 Cminorgen.transl_exprlist
+R57092 Coq.Init.Datatypes.Some
+R56994 Coq.Lists.List.list
+R56999 Values.val
+R56984 Mem.mem
+R56967 Cminorgenproof.exprlist
+R56957 Mem.mem
+R56945 Cminorgenproof.env
+R56931 Cminorgenproof.letenv
+R57975 Coq.Init.Logic "'exists' x , p" type_scope
+R57986 Coq.Init.Logic "'exists' x , p" type_scope
+R57998 Coq.Init.Logic "'exists' x , p" type_scope
+R58058 Coq.Init.Logic "A /\ B" type_scope
+R58016 Cminor.eval_funcall
+R58086 Coq.Init.Logic "A /\ B" type_scope
+R58061 Mem.val_inject
+R58112 Coq.Init.Logic "A /\ B" type_scope
+R58089 Mem.mem_inject
+R58135 Coq.Init.Logic "A /\ B" type_scope
+R58115 Mem.inject_incr
+R58138 Cminorgenproof.match_callstack
+R58180 Mem.nextblock
+R58164 Mem.nextblock
+R57941 Mem.val_list_inject
+R57872 Cminorgenproof.match_callstack
+R57914 Mem.nextblock
+R57898 Mem.nextblock
+R57840 Mem.mem_inject
+R57819 Coq.Init.Logic "x = y" type_scope
+R57800 Cminorgen.transl_function
+R57821 Coq.Init.Datatypes.Some
+R57749 Values.val
+R57738 Mem.mem
+R57723 Coq.Lists.List.list
+R57728 Values.val
+R57704 Cminorgenproof.function
+R57694 Mem.mem
+R58225 Mem.meminj
+R58248 Cminor.outcome
+R58235 Cminorgenproof.outcome
+R58330 Cminor.Out_normal
+R58317 Cminorgenproof.Out_normal
+R58415 Cminor.Out_exit
+R58400 Cminorgenproof.Out_exit
+R58503 Cminor.Out_return
+R58514 Coq.Init.Datatypes.None
+R58483 Cminorgenproof.Out_return
+R58496 Coq.Init.Datatypes.None
+R58649 Cminor.Out_return
+R58661 Coq.Init.Datatypes.Some
+R58624 Cminorgenproof.Out_return
+R58638 Coq.Init.Datatypes.Some
+R58578 Mem.val_inject
+R59053 Coq.Init.Logic "'exists' x , p" type_scope
+R59064 Coq.Init.Logic "'exists' x , p" type_scope
+R59076 Coq.Init.Logic "'exists' x , p" type_scope
+R59088 Coq.Init.Logic "'exists' x , p" type_scope
+R59165 Coq.Init.Logic "A /\ B" type_scope
+R59106 Cminor.exec_stmt
+R59121 Values.Vptr
+R59129 Integers.zero
+R59197 Coq.Init.Logic "A /\ B" type_scope
+R59168 Cminorgenproof.outcome_inject
+R59223 Coq.Init.Logic "A /\ B" type_scope
+R59200 Mem.mem_inject
+R59246 Coq.Init.Logic "A /\ B" type_scope
+R59226 Mem.inject_incr
+R59249 Cminorgenproof.match_callstack
+R59340 Mem.nextblock
+R59324 Mem.nextblock
+R59305 Coq.Lists.List "x :: y" list_scope
+R59277 Cminorgenproof.mkframe
+R58890 Cminorgenproof.match_callstack
+R58987 Mem.nextblock
+R58971 Mem.nextblock
+R58949 Coq.Lists.List "x :: y" list_scope
+R58921 Cminorgenproof.mkframe
+R58858 Mem.mem_inject
+R58838 Coq.Init.Logic "x = y" type_scope
+R58819 Cminorgen.transl_stmt
+R58840 Coq.Init.Datatypes.Some
+R58752 Cminorgenproof.outcome
+R58741 Mem.mem
+R58728 Cminorgenproof.stmt
+R58719 Mem.mem
+R58707 Cminorgenproof.env
+R59752 Coq.Init.Logic "'exists' x , p" type_scope
+R59763 Coq.Init.Logic "'exists' x , p" type_scope
+R59775 Coq.Init.Logic "'exists' x , p" type_scope
+R59787 Coq.Init.Logic "'exists' x , p" type_scope
+R59868 Coq.Init.Logic "A /\ B" type_scope
+R59805 Cminor.exec_stmtlist
+R59824 Values.Vptr
+R59832 Integers.zero
+R59900 Coq.Init.Logic "A /\ B" type_scope
+R59871 Cminorgenproof.outcome_inject
+R59926 Coq.Init.Logic "A /\ B" type_scope
+R59903 Mem.mem_inject
+R59949 Coq.Init.Logic "A /\ B" type_scope
+R59929 Mem.inject_incr
+R59952 Cminorgenproof.match_callstack
+R60043 Mem.nextblock
+R60027 Mem.nextblock
+R60008 Coq.Lists.List "x :: y" list_scope
+R59980 Cminorgenproof.mkframe
+R59585 Cminorgenproof.match_callstack
+R59682 Mem.nextblock
+R59666 Mem.nextblock
+R59644 Coq.Lists.List "x :: y" list_scope
+R59616 Cminorgenproof.mkframe
+R59553 Mem.mem_inject
+R59533 Coq.Init.Logic "x = y" type_scope
+R59510 Cminorgen.transl_stmtlist
+R59535 Coq.Init.Datatypes.Some
+R59443 Cminorgenproof.outcome
+R59432 Mem.mem
+R59415 Cminorgenproof.stmtlist
+R59406 Mem.mem
+R59394 Cminorgenproof.env
+R60313 Cminorgenproof.eval_expr_prop
+R60336 Cminorgenproof.Evar
+R60298 Coq.Init.Logic "x = y" type_scope
+R60281 Mem.load
+R60300 Coq.Init.Datatypes.Some
+R60248 Coq.Init.Logic "x = y" type_scope
+R60243 Maps "a ! b"
+R60250 Coq.Init.Datatypes.Some
+R60255 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R60259 Cminorplus.LVscalar
+R60232 Values.val
+R60213 AST.memory_chunk
+R60197 Values.block
+R60177 Coq.NArith.BinPos.positive
+R60166 Mem.mem
+R60127 Maps.t
+R60142 Coq.Init.Datatypes "x * y" type_scope
+R60136 Values.block
+R60144 Cminorplus.local_variable
+R60107 Cminorgenproof.letenv
+R60422 Cminorgenproof.var_get_correct
+R60422 Cminorgenproof.var_get_correct
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R60977 Cminorgenproof.eval_expr_prop
+R61000 Cminorgenproof.Eassign
+R60961 Coq.Init.Logic "x = y" type_scope
+R60939 Mem.store
+R60963 Coq.Init.Datatypes.Some
+R60923 Coq.Init.Logic "x = y" type_scope
+R60909 Cminorplus.cast
+R60925 Coq.Init.Datatypes.Some
+R60876 Coq.Init.Logic "x = y" type_scope
+R60871 Maps "a ! b"
+R60878 Coq.Init.Datatypes.Some
+R60883 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R60887 Cminorplus.LVscalar
+R60833 Cminorgenproof.eval_expr_prop
+R60797 Cminorgenproof.eval_expr
+R60788 Mem.mem
+R60777 Values.val
+R60777 Values.val
+R60754 AST.memory_chunk
+R60733 Values.block
+R60723 Mem.mem
+R60709 Cminorgenproof.expr
+R60694 Coq.NArith.BinPos.positive
+R60678 Mem.mem
+R60666 Cminorgenproof.env
+R60651 Cminorgenproof.letenv
+R61223 Cminorgenproof.var_set_correct
+R61223 Cminorgenproof.var_set_correct
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R61668 Cminorgenproof.eval_expr_prop
+R61706 Values.Vptr
+R61713 Integers.zero
+R61691 Cminorplus.Eaddrof
+R61647 Coq.Init.Logic "x = y" type_scope
+R61642 Maps "a ! b"
+R61649 Coq.Init.Datatypes.Some
+R61654 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R61620 Cminorplus.local_variable
+R61607 Values.block
+R61587 Coq.NArith.BinPos.positive
+R61576 Mem.mem
+R61537 Maps.t
+R61552 Coq.Init.Datatypes "x * y" type_scope
+R61546 Values.block
+R61554 Cminorplus.local_variable
+R61517 Cminorgenproof.letenv
+R61782 Cminorgenproof.var_addr_local_correct
+R61782 Cminorgenproof.var_addr_local_correct
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R62175 Cminorgenproof.eval_expr_prop
+R62213 Values.Vptr
+R62220 Integers.zero
+R62198 Cminorplus.Eaddrof
+R62160 Coq.Init.Logic "x = y" type_scope
+R62137 Globalenvs.find_symbol
+R62162 Coq.Init.Datatypes.Some
+R62124 Coq.Init.Logic "x = y" type_scope
+R62119 Maps "a ! b"
+R62126 Coq.Init.Datatypes.None
+R62106 Values.block
+R62086 Coq.NArith.BinPos.positive
+R62075 Mem.mem
+R62036 Maps.t
+R62051 Coq.Init.Datatypes "x * y" type_scope
+R62045 Values.block
+R62053 Cminorplus.local_variable
+R62016 Cminorgenproof.letenv
+R62289 Cminorgenproof.var_addr_global_correct
+R62289 Cminorgenproof.var_addr_global_correct
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R62757 Cminorgenproof.eval_expr_prop
+R62780 Cminorgenproof.Eop
+R62742 Coq.Init.Logic "x = y" type_scope
+R62716 Cminorgenproof.eval_operation
+R62744 Coq.Init.Datatypes.Some
+R62675 Cminorgenproof.eval_exprlist_prop
+R62634 Cminorgenproof.eval_exprlist
+R62625 Values.val
+R62610 Coq.Lists.List.list
+R62615 Values.val
+R62594 Mem.mem
+R62576 Cminorgenproof.exprlist
+R62557 Cminorgenproof.operation
+R62541 Mem.mem
+R62529 Cminorgenproof.env
+R62514 Cminorgenproof.letenv
+R62997 Cminorgenproof.make_op_correct
+R62997 Cminorgenproof.make_op_correct
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R63439 Cminorgenproof.eval_expr_prop
+R63462 Cminorgenproof.Eload
+R63424 Coq.Init.Logic "x = y" type_scope
+R63406 Mem.loadv
+R63426 Coq.Init.Datatypes.Some
+R63370 Cminorgenproof.eval_expr_prop
+R63334 Cminorgenproof.eval_expr
+R63325 Values.val
+R63325 Values.val
+R63307 Mem.mem
+R63293 Cminorgenproof.expr
+R63274 AST.memory_chunk
+R63255 Mem.mem
+R63243 Cminorgenproof.env
+R63228 Cminorgenproof.letenv
+R63664 Mem.loadv_inject
+R63664 Mem.loadv_inject
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R63811 Cminorgenproof.make_load_correct
+R63811 Cminorgenproof.make_load_correct
+R64258 Cminorgenproof.eval_expr_prop
+R64281 Cminorgenproof.Estore
+R64242 Coq.Init.Logic "x = y" type_scope
+R64220 Mem.storev
+R64244 Coq.Init.Datatypes.Some
+R64204 Coq.Init.Logic "x = y" type_scope
+R64190 Cminorplus.cast
+R64206 Coq.Init.Datatypes.Some
+R64153 Cminorgenproof.eval_expr_prop
+R64116 Cminorgenproof.eval_expr
+R64080 Cminorgenproof.eval_expr_prop
+R64044 Cminorgenproof.eval_expr
+R64035 Values.val
+R64024 Mem.mem
+R64013 Values.val
+R64002 Mem.mem
+R63991 Values.val
+R63975 Mem.mem
+R63961 Cminorgenproof.expr
+R63961 Cminorgenproof.expr
+R63940 AST.memory_chunk
+R63921 Mem.mem
+R63909 Cminorgenproof.env
+R63894 Cminorgenproof.letenv
+R64491 Mem.val_list_inject
+R64491 Mem.val_list_inject
+R64526 Mem.val_list_inject_incr
+R64526 Mem.val_list_inject_incr
+R64700 Mem.val_inject
+R64700 Mem.val_inject
+R64730 Mem.val_inject_incr
+R64730 Mem.val_inject_incr
+R64766 Cminorgenproof.make_store_correct
+R64766 Cminorgenproof.make_store_correct
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R65011 Mem.inject_incr_trans
+R65011 Mem.inject_incr_trans
+R65047 Mem.val_inject
+R65047 Mem.val_inject
+R65077 Mem.val_inject_incr
+R65077 Mem.val_inject_incr
+R65202 Mem.nextblock
+R65222 Mem.nextblock
+R65202 Mem.nextblock
+R65222 Mem.nextblock
+R65246 Cminorgenproof.match_callstack_mapped
+R65246 Cminorgenproof.match_callstack_mapped
+R65304 Mem.store_inv
+R65304 Mem.store_inv
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R65446 Coq.Init.Logic "x = y" type_scope
+R65438 Cminor.fn_sig
+R65451 Cminorgenproof.fn_sig
+R65421 Coq.Init.Logic "x = y" type_scope
+R65403 Cminorgen.transl_function
+R65423 Coq.Init.Datatypes.Some
+R65520 Cminorgen.build_compilenv
+R65520 Cminorgen.build_compilenv
+R65548 Coqlib.zle
+R65554 Integers.max_signed
+R65548 Coqlib.zle
+R65554 Integers.max_signed
+R66171 Cminorgenproof.eval_expr_prop
+R66194 Cminorgenproof.Ecall
+R66128 Cminorgenproof.eval_funcall_prop
+R66085 Cminorgenproof.eval_funcall
+R66073 Coq.Init.Logic "x = y" type_scope
+R66062 Cminorgenproof.fn_sig
+R66047 Coq.Init.Logic "x = y" type_scope
+R66025 Globalenvs.find_funct
+R66049 Coq.Init.Datatypes.Some
+R65980 Cminorgenproof.eval_exprlist_prop
+R65935 Cminorgenproof.eval_exprlist
+R65899 Cminorgenproof.eval_expr_prop
+R65863 Cminorgenproof.eval_expr
+R65847 Cminorgenproof.function
+R65832 Values.val
+R65814 Coq.Lists.List.list
+R65819 Values.val
+R65800 Values.val
+R65789 Mem.mem
+R65789 Mem.mem
+R65789 Mem.mem
+R65760 Cminorgenproof.exprlist
+R65746 Cminorgenproof.expr
+R65730 AST.signature
+R65713 Mem.mem
+R65701 Cminorgenproof.env
+R65686 Cminorgenproof.letenv
+R66420 Mem.val_list_inject
+R66420 Mem.val_list_inject
+R66455 Mem.val_list_inject_incr
+R66455 Mem.val_list_inject_incr
+R66632 Coq.Init.Logic "x = y" type_scope
+R66632 Coq.Init.Logic "x = y" type_scope
+R66649 Globalenvs.find_funct_inv
+R66649 Globalenvs.find_funct_inv
+R66718 Globalenvs.find_funct_find_funct_ptr
+R66718 Globalenvs.find_funct_find_funct_ptr
+R66773 Globalenvs.find_funct_ptr_inv
+R66773 Globalenvs.find_funct_ptr_inv
+R66821 Cminorgenproof.match_globalenvs
+R66821 Cminorgenproof.match_globalenvs
+R66850 Cminorgenproof.match_callstack_match_globalenvs
+R66850 Cminorgenproof.match_callstack_match_globalenvs
+R66907 Cminorgenproof.mg_functions
+R66907 Cminorgenproof.mg_functions
+R67094 Cminorgenproof.functions_translated
+R67094 Cminorgenproof.functions_translated
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R67335 Cminor.eval_Ecall
+R67335 Cminor.eval_Ecall
+R67375 Cminorgenproof.sig_transl_function
+R67375 Cminorgenproof.sig_transl_function
+R67410 Mem.inject_incr_trans
+R67410 Mem.inject_incr_trans
+R67452 Mem.inject_incr_trans
+R67452 Mem.inject_incr_trans
+R67824 Cminorgenproof.eval_expr_prop
+R67847 Cminorgenproof.Econdition
+R67787 Cminorgenproof.eval_expr_prop
+R67750 Cminorgenproof.eval_expr
+R67729 Values.is_true
+R67693 Cminorgenproof.eval_expr_prop
+R67657 Cminorgenproof.eval_expr
+R67648 Values.val
+R67632 Mem.mem
+R67621 Values.val
+R67610 Mem.mem
+R67596 Cminorgenproof.expr
+R67596 Cminorgenproof.expr
+R67596 Cminorgenproof.expr
+R67577 Mem.mem
+R67565 Cminorgenproof.env
+R67550 Cminorgenproof.letenv
+R68057 Mem.val_list_inject
+R68057 Mem.val_list_inject
+R68092 Mem.val_list_inject_incr
+R68092 Mem.val_list_inject_incr
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R68334 Cmconstrproof.eval_conditionalexpr_true
+R68334 Cmconstrproof.eval_conditionalexpr_true
+R68454 Mem.inject_incr_trans
+R68454 Mem.inject_incr_trans
+R68821 Cminorgenproof.eval_expr_prop
+R68844 Cminorgenproof.Econdition
+R68784 Cminorgenproof.eval_expr_prop
+R68747 Cminorgenproof.eval_expr
+R68725 Values.is_false
+R68689 Cminorgenproof.eval_expr_prop
+R68653 Cminorgenproof.eval_expr
+R68644 Values.val
+R68628 Mem.mem
+R68617 Values.val
+R68606 Mem.mem
+R68592 Cminorgenproof.expr
+R68592 Cminorgenproof.expr
+R68592 Cminorgenproof.expr
+R68573 Mem.mem
+R68561 Cminorgenproof.env
+R68546 Cminorgenproof.letenv
+R69054 Mem.val_list_inject
+R69054 Mem.val_list_inject
+R69089 Mem.val_list_inject_incr
+R69089 Mem.val_list_inject_incr
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R69331 Cmconstrproof.eval_conditionalexpr_false
+R69331 Cmconstrproof.eval_conditionalexpr_false
+R69452 Mem.inject_incr_trans
+R69452 Mem.inject_incr_trans
+R69794 Cminorgenproof.eval_expr_prop
+R69817 Cminorgenproof.Elet
+R69749 Cminorgenproof.eval_expr_prop
+R69768 Coq.Lists.List "x :: y" list_scope
+R69704 Cminorgenproof.eval_expr
+R69723 Coq.Lists.List "x :: y" list_scope
+R69668 Cminorgenproof.eval_expr_prop
+R69632 Cminorgenproof.eval_expr
+R69623 Values.val
+R69612 Mem.mem
+R69601 Values.val
+R69590 Mem.mem
+R69576 Cminorgenproof.expr
+R69576 Cminorgenproof.expr
+R69559 Mem.mem
+R69547 Cminorgenproof.env
+R69532 Cminorgenproof.letenv
+R70019 Mem.val_list_inject
+R70054 Coq.Lists.List "x :: y" list_scope
+R70042 Coq.Lists.List "x :: y" list_scope
+R70019 Mem.val_list_inject
+R70054 Coq.Lists.List "x :: y" list_scope
+R70042 Coq.Lists.List "x :: y" list_scope
+R70094 Mem.val_list_inject_incr
+R70094 Mem.val_list_inject_incr
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R70331 Cminor.eval_Elet
+R70331 Cminor.eval_Elet
+R70358 Mem.inject_incr_trans
+R70358 Mem.inject_incr_trans
+R70508 Coq.Init.Logic "'exists' x , p" type_scope
+R70544 Coq.Init.Logic "A /\ B" type_scope
+R70534 Coq.Init.Logic "x = y" type_scope
+R70519 Coq.Lists.List.nth_error
+R70536 Coq.Init.Datatypes.Some
+R70547 Mem.val_inject
+R70493 Coq.Init.Logic "x = y" type_scope
+R70478 Coq.Lists.List.nth_error
+R70495 Coq.Init.Datatypes.Some
+R70436 Mem.val_list_inject
+R70860 Cminorgenproof.eval_expr_prop
+R70883 Cminorgenproof.Eletvar
+R70845 Coq.Init.Logic "x = y" type_scope
+R70830 Coq.Lists.List.nth_error
+R70847 Coq.Init.Datatypes.Some
+R70821 Values.val
+R70806 Coq.Init.Datatypes.nat
+R70796 Mem.mem
+R70784 Cminorgenproof.env
+R70769 Coq.Lists.List.list
+R70774 Values.val
+R70956 Cminorgenproof.val_list_inject_nth
+R70956 Cminorgenproof.val_list_inject_nth
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R71091 Cminor.eval_Eletvar
+R71091 Cminor.eval_Eletvar
+R71205 Cminorgenproof.eval_exprlist_prop
+R71240 Coq.Lists.List.nil
+R71231 Cminorgenproof.Enil
+R71196 Mem.mem
+R71184 Cminorgenproof.env
+R71169 Cminorgenproof.letenv
+R71335 Coq.Lists.List.nil
+R71339 Values.val
+R71335 Coq.Lists.List.nil
+R71339 Values.val
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R71720 Cminorgenproof.eval_exprlist_prop
+R71767 Coq.Lists.List "x :: y" list_scope
+R71747 Cminorgenproof.Econs
+R71678 Cminorgenproof.eval_exprlist_prop
+R71636 Cminorgenproof.eval_exprlist
+R71601 Cminorgenproof.eval_expr_prop
+R71566 Cminorgenproof.eval_expr
+R71552 Coq.Lists.List.list
+R71557 Values.val
+R71541 Mem.mem
+R71530 Values.val
+R71515 Mem.mem
+R71497 Cminorgenproof.exprlist
+R71483 Cminorgenproof.expr
+R71468 Mem.mem
+R71456 Cminorgenproof.env
+R71441 Cminorgenproof.letenv
+R71959 Mem.val_list_inject
+R71959 Mem.val_list_inject
+R71994 Mem.val_list_inject_incr
+R71994 Mem.val_list_inject_incr
+R72168 Mem.val_inject
+R72168 Mem.val_inject
+R72197 Mem.val_inject_incr
+R72197 Mem.val_inject_incr
+R72270 Coq.Lists.List "x :: y" list_scope
+R72270 Coq.Lists.List "x :: y" list_scope
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R72333 Mem.inject_incr_trans
+R72333 Mem.inject_incr_trans
+R72883 Cminorgenproof.eval_funcall_prop
+R72912 Mem.free_list
+R72822 Cminorgenproof.outcome_result_value
+R72850 AST.sig_res
+R72859 Cminorgenproof.fn_sig
+R72771 Cminorgenproof.exec_stmtlist_prop
+R72796 Cminorgenproof.fn_body
+R72720 Cminorgenproof.exec_stmtlist
+R72745 Cminorgenproof.fn_body
+R72668 Cminorplus.bind_parameters
+R72690 Cminorgenproof.fn_params
+R72609 Cminorplus.alloc_variables
+R72638 Cminorplus.fn_variables
+R72625 Cminorplus.empty_env
+R72551 Coqlib.list_norepet
+R72583 Coq.Lists.List "x ++ y" list_scope
+R72565 Cminorplus.fn_params_names
+R72586 Cminorplus.fn_vars_names
+R72542 Values.val
+R72523 Cminorgenproof.outcome
+R72506 Mem.mem
+R72506 Mem.mem
+R72485 Coq.Lists.List.list
+R72490 Values.block
+R72474 Mem.mem
+R72461 Cminorgenproof.env
+R72441 Coq.Lists.List.list
+R72446 Values.val
+R72420 Cminorgenproof.function
+R72410 Mem.mem
+R73026 Cminorgen.build_compilenv
+R73026 Cminorgen.build_compilenv
+R73109 Coqlib.zle
+R73123 Integers.max_signed
+R73109 Coqlib.zle
+R73123 Integers.max_signed
+R73194 Mem.alloc
+R73194 Mem.alloc
+R73250 Cminorgenproof.function_entry_ok
+R73250 Cminorgenproof.function_entry_ok
+R73555 Coq.Init.Logic "'exists' x , p" type_scope
+R73636 Coq.Init.Logic "A /\ B" type_scope
+R73581 Cminor.outcome_result_value
+R73621 AST.sig_res
+R73610 Cminorgenproof.fn_sig
+R73650 Mem.val_inject
+R73555 Coq.Init.Logic "'exists' x , p" type_scope
+R73636 Coq.Init.Logic "A /\ B" type_scope
+R73581 Cminor.outcome_result_value
+R73621 AST.sig_res
+R73610 Cminorgenproof.fn_sig
+R73650 Mem.val_inject
+R73786 AST.sig_res
+R73795 Cminorgenproof.fn_sig
+R73786 AST.sig_res
+R73795 Cminorgenproof.fn_sig
+R73844 Values.Vundef
+R73844 Values.Vundef
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R73915 AST.sig_res
+R73924 Cminorgenproof.fn_sig
+R73915 AST.sig_res
+R73924 Cminorgenproof.fn_sig
+R73973 Values.Vundef
+R73973 Values.Vundef
+R74033 AST.sig_res
+R74042 Cminorgenproof.fn_sig
+R74033 AST.sig_res
+R74042 Cminorgenproof.fn_sig
+R74204 Mem.free
+R74204 Mem.free
+R74314 Cminor.exec_Scons_continue
+R74314 Cminor.exec_Scons_continue
+R74374 Cminor.outcome_block
+R74388 Cminor.Out_normal
+R74357 Cminor.Out_normal
+R74374 Cminor.outcome_block
+R74388 Cminor.Out_normal
+R74357 Cminor.Out_normal
+R74409 Cminor.exec_Sblock
+R74409 Cminor.exec_Sblock
+R74533 Mem.free_inject
+R74533 Mem.free_inject
+R74700 Mem.inject_incr_trans
+R74700 Mem.inject_incr_trans
+R74802 Coq.Init.Logic "x = y" type_scope
+R74774 Mem.nextblock
+R74785 Mem.free_list
+R74804 Mem.nextblock
+R74802 Coq.Init.Logic "x = y" type_scope
+R74774 Mem.nextblock
+R74785 Mem.free_list
+R74804 Mem.nextblock
+R74892 Mem.nextblock
+R74892 Mem.nextblock
+R74925 Cminorgenproof.match_callstack_freelist
+R74925 Cminorgenproof.match_callstack_freelist
+R75213 Cminorgenproof.exec_stmt_prop
+R75247 Cminorgenproof.Out_normal
+R75233 Cminorgenproof.Sexpr
+R75177 Cminorgenproof.eval_expr_prop
+R75192 Coq.Lists.List.nil
+R75141 Cminorgenproof.eval_expr
+R75156 Coq.Lists.List.nil
+R75132 Values.val
+R75122 Mem.mem
+R75103 Cminorgenproof.expr
+R75093 Mem.mem
+R75081 Cminorgenproof.env
+R75344 Mem.val_nil_inject
+R75344 Mem.val_nil_inject
+R75487 Cminor.Out_normal
+R75487 Cminor.Out_normal
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R75918 Cminorgenproof.exec_stmt_prop
+R75938 Cminorgenproof.Sifthenelse
+R75877 Cminorgenproof.exec_stmtlist_prop
+R75836 Cminorgenproof.exec_stmtlist
+R75815 Values.is_true
+R75778 Cminorgenproof.eval_expr_prop
+R75793 Coq.Lists.List.nil
+R75741 Cminorgenproof.eval_expr
+R75756 Coq.Lists.List.nil
+R75726 Cminorgenproof.outcome
+R75709 Mem.mem
+R75698 Values.val
+R75687 Mem.mem
+R75669 Cminorgenproof.stmtlist
+R75669 Cminorgenproof.stmtlist
+R75645 Cminorgenproof.expr
+R75635 Mem.mem
+R75623 Cminorgenproof.env
+R76053 Mem.val_nil_inject
+R76053 Mem.val_nil_inject
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R76354 Cmconstrproof.exec_ifthenelse_true
+R76354 Cmconstrproof.exec_ifthenelse_true
+R76468 Mem.inject_incr_trans
+R76468 Mem.inject_incr_trans
+R76856 Cminorgenproof.exec_stmt_prop
+R76876 Cminorgenproof.Sifthenelse
+R76815 Cminorgenproof.exec_stmtlist_prop
+R76774 Cminorgenproof.exec_stmtlist
+R76752 Values.is_false
+R76715 Cminorgenproof.eval_expr_prop
+R76730 Coq.Lists.List.nil
+R76678 Cminorgenproof.eval_expr
+R76693 Coq.Lists.List.nil
+R76663 Cminorgenproof.outcome
+R76646 Mem.mem
+R76635 Values.val
+R76624 Mem.mem
+R76606 Cminorgenproof.stmtlist
+R76606 Cminorgenproof.stmtlist
+R76582 Cminorgenproof.expr
+R76572 Mem.mem
+R76560 Cminorgenproof.env
+R76991 Mem.val_nil_inject
+R76991 Mem.val_nil_inject
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R77292 Cmconstrproof.exec_ifthenelse_false
+R77292 Cmconstrproof.exec_ifthenelse_false
+R77407 Mem.inject_incr_trans
+R77407 Mem.inject_incr_trans
+R77756 Cminorgenproof.exec_stmt_prop
+R77776 Cminorgenproof.Sloop
+R77710 Cminorgenproof.exec_stmt_prop
+R77731 Cminorgenproof.Sloop
+R77664 Cminorgenproof.exec_stmt
+R77685 Cminorgenproof.Sloop
+R77616 Cminorgenproof.exec_stmtlist_prop
+R77645 Cminorgenproof.Out_normal
+R77568 Cminorgenproof.exec_stmtlist
+R77597 Cminorgenproof.Out_normal
+R77553 Cminorgenproof.outcome
+R77541 Mem.mem
+R77541 Mem.mem
+R77515 Cminorgenproof.stmtlist
+R77504 Mem.mem
+R77492 Cminorgenproof.env
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R78161 Cminor.exec_Sloop_loop
+R78161 Cminor.exec_Sloop_loop
+R78233 Mem.inject_incr_trans
+R78233 Mem.inject_incr_trans
+R78496 Cminorgenproof.exec_stmt_prop
+R78516 Cminorgenproof.Sloop
+R78474 Coq.Init.Logic "x <> y" type_scope
+R78477 Cminorgenproof.Out_normal
+R78431 Cminorgenproof.exec_stmtlist_prop
+R78392 Cminorgenproof.exec_stmtlist
+R78377 Cminorgenproof.outcome
+R78365 Mem.mem
+R78342 Cminorgenproof.stmtlist
+R78331 Mem.mem
+R78319 Cminorgenproof.env
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R78778 Cminor.exec_Sloop_stop
+R78778 Cminor.exec_Sloop_stop
+R79056 Cminorgenproof.exec_stmt_prop
+R79098 Cminorgenproof.outcome_block
+R79076 Cminorgenproof.Sblock
+R79017 Cminorgenproof.exec_stmtlist_prop
+R78978 Cminorgenproof.exec_stmtlist
+R78963 Cminorgenproof.outcome
+R78951 Mem.mem
+R78928 Cminorgenproof.stmtlist
+R78917 Mem.mem
+R78905 Cminorgenproof.env
+R79326 Cminor.outcome_block
+R79326 Cminor.outcome_block
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R79378 Cminor.exec_Sblock
+R79378 Cminor.exec_Sblock
+R79604 Cminorgenproof.exec_stmt_prop
+R79638 Cminorgenproof.Out_exit
+R79624 Cminorgenproof.Sexit
+R79595 Coq.Init.Datatypes.nat
+R79585 Mem.mem
+R79573 Cminorgenproof.env
+R79741 Cminor.Out_exit
+R79741 Cminor.Out_exit
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R79885 Cminorgenproof.exec_stmt_prop
+R79929 Cminorgenproof.Out_return
+R79942 Coq.Init.Datatypes.None
+R79905 Cminorgenproof.Sreturn
+R79915 Coq.Init.Datatypes.None
+R79876 Mem.mem
+R79864 Cminorgenproof.env
+R80037 Cminor.Out_return
+R80048 Coq.Init.Datatypes.None
+R80037 Cminor.Out_return
+R80048 Coq.Init.Datatypes.None
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R80297 Cminorgenproof.exec_stmt_prop
+R80346 Cminorgenproof.Out_return
+R80360 Coq.Init.Datatypes.Some
+R80317 Cminorgenproof.Sreturn
+R80328 Coq.Init.Datatypes.Some
+R80261 Cminorgenproof.eval_expr_prop
+R80276 Coq.Lists.List.nil
+R80225 Cminorgenproof.eval_expr
+R80240 Coq.Lists.List.nil
+R80216 Values.val
+R80206 Mem.mem
+R80187 Cminorgenproof.expr
+R80177 Mem.mem
+R80165 Cminorgenproof.env
+R80452 Mem.val_nil_inject
+R80452 Mem.val_nil_inject
+R80594 Cminor.Out_return
+R80606 Coq.Init.Datatypes.Some
+R80594 Cminor.Out_return
+R80606 Coq.Init.Datatypes.Some
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R80759 Cminorgenproof.exec_stmtlist_prop
+R80791 Cminorgenproof.Out_normal
+R80782 Cminorgenproof.Snil
+R80750 Mem.mem
+R80738 Cminorgenproof.env
+R80892 Cminor.Out_normal
+R80892 Cminor.Out_normal
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R81268 Cminorgenproof.exec_stmtlist_prop
+R81292 Cminorgenproof.Scons
+R81228 Cminorgenproof.exec_stmtlist_prop
+R81188 Cminorgenproof.exec_stmtlist
+R81145 Cminorgenproof.exec_stmt_prop
+R81169 Cminorgenproof.Out_normal
+R81102 Cminorgenproof.exec_stmt
+R81126 Cminorgenproof.Out_normal
+R81087 Cminorgenproof.outcome
+R81075 Mem.mem
+R81075 Mem.mem
+R81054 Cminorgenproof.stmtlist
+R81035 Cminorgenproof.stmt
+R81025 Mem.mem
+R81013 Cminorgenproof.env
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R81677 Cminor.exec_Scons_continue
+R81677 Cminor.exec_Scons_continue
+R81752 Mem.inject_incr_trans
+R81752 Mem.inject_incr_trans
+R82018 Cminorgenproof.exec_stmtlist_prop
+R82042 Cminorgenproof.Scons
+R81996 Coq.Init.Logic "x <> y" type_scope
+R81999 Cminorgenproof.Out_normal
+R81958 Cminorgenproof.exec_stmt_prop
+R81924 Cminorgenproof.exec_stmt
+R81909 Cminorgenproof.outcome
+R81897 Mem.mem
+R81879 Cminorgenproof.stmtlist
+R81860 Cminorgenproof.stmt
+R81850 Mem.mem
+R81838 Cminorgenproof.env
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R82306 Cminor.exec_Scons_stop
+R82306 Cminor.exec_Scons_stop
+R82491 Cminorgenproof.eval_funcall_prop
+R82448 Cminorgenproof.eval_funcall
+R82538 Cminorplus.eval_funcall_ind5
+R83582 Cminorgenproof.transl_stmtlist_Scons_1_correct
+R83545 Cminorgenproof.transl_stmtlist_Scons_2_correct
+R83511 Cminorgenproof.transl_stmtlist_Snil_correct
+R83473 Cminorgenproof.transl_stmt_Sreturn_some_correct
+R83435 Cminorgenproof.transl_stmt_Sreturn_none_correct
+R83404 Cminorgenproof.transl_stmt_Sexit_correct
+R83372 Cminorgenproof.transl_stmt_Sblock_correct
+R83336 Cminorgenproof.transl_stmt_Sloop_exit_correct
+R83300 Cminorgenproof.transl_stmt_Sloop_loop_correct
+R83257 Cminorgenproof.transl_stmt_Sifthenelse_false_correct
+R83215 Cminorgenproof.transl_stmt_Sifthenelse_true_correct
+R83184 Cminorgenproof.transl_stmt_Sexpr_correct
+R83156 Cminorgenproof.transl_funcall_correct
+R83121 Cminorgenproof.transl_exprlist_Econs_correct
+R83087 Cminorgenproof.transl_exprlist_Enil_correct
+R83054 Cminorgenproof.transl_expr_Eletvar_correct
+R83024 Cminorgenproof.transl_expr_Elet_correct
+R82982 Cminorgenproof.transl_expr_Econdition_false_correct
+R82941 Cminorgenproof.transl_expr_Econdition_true_correct
+R82910 Cminorgenproof.transl_expr_Ecall_correct
+R82878 Cminorgenproof.transl_expr_Estore_correct
+R82847 Cminorgenproof.transl_expr_Eload_correct
+R82818 Cminorgenproof.transl_expr_Eop_correct
+R82778 Cminorgenproof.transl_expr_Eaddrof_global_correct
+R82739 Cminorgenproof.transl_expr_Eaddrof_local_correct
+R82706 Cminorgenproof.transl_expr_Eassign_correct
+R82676 Cminorgenproof.transl_expr_Evar_correct
+R82651 Cminorgenproof.exec_stmtlist_prop
+R82631 Cminorgenproof.exec_stmt_prop
+R82608 Cminorgenproof.eval_funcall_prop
+R82584 Cminorgenproof.eval_exprlist_prop
+R82564 Cminorgenproof.eval_expr_prop
+R83841 Cminorgenproof.match_globalenvs
+R83790 Coqlib.zlt
+R83799 Mem.nextblock
+R83831 Coq.Init.Datatypes.None
+R83815 Coq.Init.Datatypes.Some
+R83819 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R83744 Globalenvs.init_mem
+R83710 Globalenvs.init_mem
+R83944 Coqlib.zlt_true
+R83944 Coqlib.zlt_true
+R83980 Globalenvs.find_symbol_inv
+R83980 Globalenvs.find_symbol_inv
+R84031 Cminorgenproof.symbols_preserved
+R84031 Cminorgenproof.symbols_preserved
+R84078 Coqlib.zlt_true
+R84078 Coqlib.zlt_true
+R84108 Mem.nextblock_pos
+R84108 Mem.nextblock_pos
+R84219 Cminor.exec_program
+R84239 Values.Vint
+R84185 Cminorgenproof.exec_program
+R84206 Values.Vint
+R84315 Cminorgenproof.function_ptr_translated
+R84315 Cminorgenproof.function_ptr_translated
+R84387 Globalenvs.init_mem
+R84387 Globalenvs.init_mem
+R84437 Coqlib.zlt
+R84447 Mem.nextblock
+R84479 Coq.Init.Datatypes.None
+R84463 Coq.Init.Datatypes.Some
+R84467 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R84437 Coqlib.zlt
+R84447 Mem.nextblock
+R84479 Coq.Init.Datatypes.None
+R84463 Coq.Init.Datatypes.Some
+R84467 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R84503 Mem.mem_inject
+R84503 Mem.mem_inject
+R84569 Coqlib.zlt_false
+R84569 Coqlib.zlt_false
+R84600 Coqlib.zlt
+R84608 Mem.nextblock
+R84600 Coqlib.zlt
+R84608 Mem.nextblock
+R84788 Globalenvs.initmem_undef
+R84788 Globalenvs.initmem_undef
+R84898 Coqlib.zlt
+R84906 Mem.nextblock
+R84898 Coqlib.zlt
+R84906 Mem.nextblock
+R84954 Coqlib.zlt
+R84962 Mem.nextblock
+R84954 Coqlib.zlt
+R84962 Mem.nextblock
+R85037 Cminorgenproof.match_callstack
+R85078 Mem.nextblock
+R85063 Mem.nextblock
+R85055 Coq.Lists.List.nil
+R85037 Cminorgenproof.match_callstack
+R85078 Mem.nextblock
+R85063 Mem.nextblock
+R85055 Coq.Lists.List.nil
+R85127 Cminorgenproof.match_globalenvs_init
+R85127 Cminorgenproof.match_globalenvs_init
+R85181 Cminorgenproof.transl_function_correct
+R85284 Mem.val_nil_inject
+R85181 Cminorgenproof.transl_function_correct
+R85284 Mem.val_nil_inject
+R85449 AST.prog_main
+R85471 AST.prog_main
+R85449 AST.prog_main
+R85471 AST.prog_main
+R85504 Cminorgenproof.symbols_preserved
+R85504 Cminorgenproof.symbols_preserved
+R85567 Cminorgen.transl_function
+R85531 AST.transform_partial_program_main
+R85567 Cminorgen.transl_function
+R85531 AST.transform_partial_program_main
+R85648 Cminorgenproof.sig_transl_function
+R85648 Cminorgenproof.sig_transl_function
+R85686 Globalenvs.init_mem_transf_partial
+R85715 Cminorgen.transl_function
+R85686 Globalenvs.init_mem_transf_partial
+R85715 Cminorgen.transl_function
+FCminorgenproof
+R410 Cminorgenproof.program
+R437 Cminor.program
+R485 Coq.Init.Logic "x = y" type_scope
+R465 Cminorgen.transl_program
+R487 Coq.Init.Datatypes.Some
+R508 Cminorgenproof.genv
+R518 Globalenvs.globalenv
+R548 Cminor.genv
+R556 Globalenvs.globalenv
+R648 Coq.Init.Logic "x = y" type_scope
+R625 Globalenvs.find_symbol
+R650 Globalenvs.find_symbol
+R617 AST.ident
+R751 Cminorgen.transl_function
+R714 Globalenvs.find_symbol_transf_partial
+R751 Cminorgen.transl_function
+R714 Globalenvs.find_symbol_transf_partial
+R899 Coq.Init.Logic "'exists' x , p" type_scope
+R948 Coq.Init.Logic "A /\ B" type_scope
+R938 Coq.Init.Logic "x = y" type_scope
+R912 Globalenvs.find_funct_ptr
+R940 Coq.Init.Datatypes.Some
+R969 Coq.Init.Logic "x = y" type_scope
+R951 Cminorgen.transl_function
+R971 Coq.Init.Datatypes.Some
+R885 Coq.Init.Logic "x = y" type_scope
+R860 Globalenvs.find_funct_ptr
+R887 Coq.Init.Datatypes.Some
+R845 Cminorgenproof.function
+R834 Values.block
+R1016 Globalenvs.find_funct_ptr_transf_partial
+R1051 Cminorgen.transl_function
+R1016 Globalenvs.find_funct_ptr_transf_partial
+R1051 Cminorgen.transl_function
+R1086 Cminorgen.transl_function
+R1086 Cminorgen.transl_function
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R1286 Coq.Init.Logic "'exists' x , p" type_scope
+R1331 Coq.Init.Logic "A /\ B" type_scope
+R1321 Coq.Init.Logic "x = y" type_scope
+R1299 Globalenvs.find_funct
+R1323 Coq.Init.Datatypes.Some
+R1352 Coq.Init.Logic "x = y" type_scope
+R1334 Cminorgen.transl_function
+R1354 Coq.Init.Datatypes.Some
+R1272 Coq.Init.Logic "x = y" type_scope
+R1251 Globalenvs.find_funct
+R1274 Coq.Init.Datatypes.Some
+R1236 Cminorgenproof.function
+R1227 Values.val
+R1399 Globalenvs.find_funct_transf_partial
+R1430 Cminorgen.transl_function
+R1399 Globalenvs.find_funct_transf_partial
+R1430 Cminorgen.transl_function
+R1465 Cminorgen.transl_function
+R1465 Cminorgen.transl_function
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R1657 Mem.meminj
+R1800 Coq.Init.Logic "A /\ B" type_scope
+R1786 Coq.Init.Logic "x = y" type_scope
+R1788 Coq.Init.Datatypes.Some
+R1793 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R1827 Coq.Init.Logic "x = y" type_scope
+R1803 Globalenvs.find_symbol
+R1829 Coq.Init.Datatypes.Some
+R1764 Coq.Init.Logic "x = y" type_scope
+R1741 Globalenvs.find_symbol
+R1766 Coq.Init.Datatypes.Some
+R1884 Coq.Init.Logic "x = y" type_scope
+R1886 Coq.Init.Datatypes.Some
+R1890 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R1873 Coq.ZArith.BinInt "x < y" Z_scope
+R1927 Mem.meminj
+R1940 AST.ident
+R1971 Cminorgenproof.env
+R1982 Mem.mem
+R1992 Cminor.env
+R2002 Values.block
+R2032 Cminorgen.var_info
+R2304 Cminorgen.Var_local
+R2251 Mem.val_inject
+R2232 Coq.Init.Logic "x = y" type_scope
+R2216 Maps.get
+R2234 Coq.Init.Datatypes.Some
+R2200 Coq.Init.Logic "x = y" type_scope
+R2202 Coq.Init.Datatypes.None
+R2178 Coq.Init.Logic "x = y" type_scope
+R2157 Mem.load
+R2180 Coq.Init.Datatypes.Some
+R2121 Coq.Init.Logic "x = y" type_scope
+R2106 Maps.get
+R2123 Coq.Init.Datatypes.Some
+R2128 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R2132 Cminorplus.LVscalar
+R2523 Cminorgen.Var_stack_scalar
+R2432 Mem.val_inject
+R2464 Values.Vptr
+R2473 Integers.repr
+R2446 Values.Vptr
+R2453 Integers.zero
+R2396 Coq.Init.Logic "x = y" type_scope
+R2381 Maps.get
+R2398 Coq.Init.Datatypes.Some
+R2403 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R2407 Cminorplus.LVscalar
+R2745 Cminorgen.Var_stack_array
+R2654 Mem.val_inject
+R2686 Values.Vptr
+R2695 Integers.repr
+R2668 Values.Vptr
+R2675 Integers.zero
+R2622 Coq.Init.Logic "x = y" type_scope
+R2607 Maps.get
+R2624 Coq.Init.Datatypes.Some
+R2629 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R2633 Cminorplus.LVarray
+R2851 Cminorgen.Var_global
+R2809 Coq.Init.Logic "x = y" type_scope
+R2794 Maps.get
+R2811 Coq.Init.Datatypes.None
+R2886 Mem.meminj
+R2901 Cminorgen.compilenv
+R2933 Cminorgenproof.env
+R2944 Mem.mem
+R2954 Cminor.env
+R2964 Values.block
+R2996 Coq.ZArith.BinInt.Z
+R3056 Cminorgenproof.match_var
+R3082 Maps.get
+R3127 Coq.ZArith.BinInt "x <= y" Z_scope
+R3207 Coq.ZArith.BinInt "x <= y < z" Z_scope
+R3187 Coq.Init.Logic "x = y" type_scope
+R3172 Maps.get
+R3189 Coq.Init.Datatypes.Some
+R3193 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R3371 Coq.Init.Logic "x <> y" type_scope
+R3358 Coq.Init.Logic "x <> y" type_scope
+R3329 Coq.Init.Logic "x = y" type_scope
+R3313 Maps.get
+R3331 Coq.Init.Datatypes.Some
+R3335 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R3288 Coq.Init.Logic "x = y" type_scope
+R3272 Maps.get
+R3290 Coq.Init.Datatypes.Some
+R3294 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R3446 Coq.ZArith.BinInt "x <= y < z" Z_scope
+R3422 Coq.Init.Logic "x = y" type_scope
+R3424 Coq.Init.Datatypes.Some
+R3428 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R3539 Coq.ZArith.BinInt "x < y" Z_scope
+R3528 Coq.ZArith.BinInt "x < y" Z_scope
+R3505 Coq.Init.Logic "x = y" type_scope
+R3507 Coq.Init.Datatypes.Some
+R3511 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R3597 Cminorgen.compilenv
+R3618 Cminorgenproof.env
+R3636 Cminor.env
+R3652 Values.block
+R3671 Coq.ZArith.BinInt.Z
+R3687 Coq.ZArith.BinInt.Z
+R3725 Coq.Lists.List.list
+R3730 Cminorgenproof.frame
+R3798 Mem.mem
+R3793 Coq.ZArith.BinInt.Z
+R3788 Coq.ZArith.BinInt.Z
+R3775 Cminorgenproof.callstack
+R3765 Mem.meminj
+R3909 Coq.Lists.List.nil
+R3863 Cminorgenproof.match_globalenvs
+R4169 Coq.Lists.List "x :: y" list_scope
+R4142 Cminorgenproof.mkframe
+R4043 Cminorgenproof.match_env
+R4025 Coq.ZArith.BinInt "x < y" Z_scope
+R4004 Coq.ZArith.BinInt "x <= y" Z_scope
+R4403 Cminorgenproof.match_env
+R4364 Cminorgenproof.match_env
+R4349 Coq.Init.Logic "x = y" type_scope
+R4326 Mem.store
+R4351 Coq.Init.Datatypes.Some
+R4313 Coq.Init.Logic "x <> y" type_scope
+R4316 Coq.Init.Datatypes.None
+R4606 Mem.load_store_other
+R4606 Mem.load_store_other
+R4845 Cminorgenproof.match_callstack
+R4830 Coq.Init.Logic "x = y" type_scope
+R4807 Mem.store
+R4832 Coq.Init.Datatypes.Some
+R4794 Coq.Init.Logic "x <> y" type_scope
+R4797 Coq.Init.Datatypes.None
+R4721 Cminorgenproof.match_callstack
+R4943 Cminorgenproof.match_env_store_mapped
+R4943 Cminorgenproof.match_env_store_mapped
+R5084 Coq.Init.Logic "'exists' x , p" type_scope
+R5097 Coq.Init.Logic "x = y" type_scope
+R5099 Values.load_result
+R5067 Values.val
+R5049 AST.memory_chunk
+R5218 Coq.Init.Logic "x = y" type_scope
+R5170 Values.load_result
+R5193 Values.load_result
+R5222 Values.load_result
+R5307 Integers.cast8_signed_idem
+R5307 Integers.cast8_signed_idem
+R5346 Integers.cast8_unsigned_idem
+R5346 Integers.cast8_unsigned_idem
+R5387 Integers.cast16_signed_idem
+R5387 Integers.cast16_signed_idem
+R5427 Integers.cast16_unsigned_idem
+R5427 Integers.cast16_unsigned_idem
+R5469 Floats.singleoffloat_idem
+R5469 Floats.singleoffloat_idem
+R5607 Coq.Init.Logic "x = y" type_scope
+R5583 Values.load_result
+R5557 Cminorgenproof.val_normalized
+R5663 Cminorgenproof.load_result_idem
+R5663 Cminorgenproof.load_result_idem
+R5935 Cminorgenproof.match_env
+R5958 Maps.set
+R5896 Cminorgenproof.match_env
+R5881 Coq.Init.Logic "x = y" type_scope
+R5860 Mem.store
+R5883 Coq.Init.Datatypes.Some
+R5831 Cminorgenproof.val_normalized
+R5808 Mem.val_inject
+R5777 Coq.Init.Logic "x = y" type_scope
+R5773 Maps "a ! b"
+R5779 Coq.Init.Datatypes.Some
+R5783 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R5787 Cminorplus.LVscalar
+R6124 Coqlib.peq
+R6124 Coqlib.peq
+R6223 Cminorplus.local_variable
+R6201 Cminorgenproof.local_variable
+R6223 Cminorplus.local_variable
+R6201 Cminorgenproof.local_variable
+R6353 Mem.load_store_same
+R6353 Mem.load_store_same
+R6396 Maps.gss
+R6396 Maps.gss
+R6441 Values.load_result
+R6441 Values.load_result
+R6478 Mem.load_result_inject
+R6478 Mem.load_result_inject
+R6532 Cminorgenproof.load_result_normalized
+R6532 Cminorgenproof.load_result_normalized
+R6648 Mem.load_store_other
+R6648 Mem.load_store_other
+R6686 Maps.gso
+R6686 Maps.gso
+R7012 Cminorgenproof.match_env
+R6973 Cminorgenproof.match_env
+R6963 Coq.ZArith.BinInt "x <= y" Z_scope
+R6945 Coq.Init.Logic "x = y" type_scope
+R6924 Mem.store
+R6947 Coq.Init.Datatypes.Some
+R7201 Mem.load_store_other
+R7201 Mem.load_store_other
+R7486 Cminorgenproof.match_callstack
+R7476 Coq.ZArith.BinInt "x <= y" Z_scope
+R7455 Coq.Init.Logic "x = y" type_scope
+R7434 Mem.store
+R7457 Coq.Init.Datatypes.Some
+R7369 Cminorgenproof.match_callstack
+R7584 Cminorgenproof.match_env_store_above
+R7584 Cminorgenproof.match_env_store_above
+R8004 Cminorgenproof.match_callstack
+R8068 Coq.Lists.List "x :: y" list_scope
+R8023 Cminorgenproof.mkframe
+R8039 Maps.set
+R7930 Cminorgenproof.match_callstack
+R7976 Coq.Lists.List "x :: y" list_scope
+R7949 Cminorgenproof.mkframe
+R7915 Coq.Init.Logic "x = y" type_scope
+R7894 Mem.store
+R7917 Coq.Init.Datatypes.Some
+R7865 Cminorgenproof.val_normalized
+R7842 Mem.val_inject
+R7811 Coq.Init.Logic "x = y" type_scope
+R7807 Maps "a ! b"
+R7813 Coq.Init.Datatypes.Some
+R7817 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R7821 Cminorplus.LVscalar
+R8151 Cminorgenproof.match_env_store_local
+R8151 Cminorgenproof.match_env_store_local
+R8190 Cminorgenproof.match_callstack_store_above
+R8190 Cminorgenproof.match_callstack_store_above
+R8445 Cminorgenproof.match_env
+R8430 Coq.Init.Logic "x = y" type_scope
+R8426 Maps "a ! b"
+R8435 Maps "a ! b"
+R8358 Cminorgenproof.match_env
+R8972 Cminorgenproof.match_callstack
+R9018 Coq.Lists.List "x :: y" list_scope
+R8991 Cminorgenproof.mkframe
+R8898 Cminorgenproof.match_callstack
+R8944 Coq.Lists.List "x :: y" list_scope
+R8917 Cminorgenproof.mkframe
+R8883 Coq.Init.Logic "x = y" type_scope
+R8879 Maps "a ! b"
+R8885 Coq.Init.Datatypes.Some
+R8862 Coq.Init.Logic "x = y" type_scope
+R8841 Mem.store
+R8864 Coq.Init.Datatypes.Some
+R8812 Cminorgenproof.val_normalized
+R8789 Mem.val_inject
+R8758 Coq.Init.Logic "x = y" type_scope
+R8754 Maps "a ! b"
+R8760 Coq.Init.Datatypes.Some
+R8764 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R8768 Cminorplus.LVscalar
+R9128 Maps.set
+R9100 Cminorgenproof.match_env_extensional
+R9128 Maps.set
+R9100 Cminorgenproof.match_env_extensional
+R9158 Cminorgenproof.match_env_store_local
+R9158 Cminorgenproof.match_env_store_local
+R9206 Maps.gsspec
+R9206 Maps.gsspec
+R9229 Coqlib.peq
+R9229 Coqlib.peq
+R9277 Cminorgenproof.match_callstack_store_above
+R9277 Cminorgenproof.match_callstack_store_above
+R9554 Cminorgenproof.match_callstack
+R9538 Coq.ZArith.BinInt "x <= y" Z_scope
+R9518 Coq.ZArith.BinInt "x <= y" Z_scope
+R9446 Cminorgenproof.match_callstack
+R9788 Coq.Init.Logic "x = y" type_scope
+R9753 Mem.load
+R9765 Mem.free_list
+R9790 Mem.load
+R9741 Coq.Init.Logic "x <> y" type_scope
+R9725 Coq.Lists.List.In
+R9867 Mem.load_free
+R9867 Mem.load_free
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R9926 Coq.Init.Logic.sym_not_equal
+R9926 Coq.Init.Logic.sym_not_equal
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R10103 Cminorgenproof.match_env
+R10123 Mem.free_list
+R10092 Coq.ZArith.BinInt "x <= y" Z_scope
+R10077 Coq.Lists.List.In
+R10028 Cminorgenproof.match_env
+R10308 Cminorgenproof.load_freelist
+R10308 Cminorgenproof.load_freelist
+R10593 Cminorgenproof.match_callstack
+R10628 Mem.free_list
+R10582 Coq.ZArith.BinInt "x <= y" Z_scope
+R10564 Coq.Lists.List.In
+R10498 Cminorgenproof.match_callstack
+R10704 Cminorgenproof.match_env_freelist
+R10704 Cminorgenproof.match_env_freelist
+R11056 Cminorgenproof.match_callstack
+R11091 Mem.free_list
+R10983 Cminorgenproof.match_callstack
+R11029 Coq.Lists.List "x :: y" list_scope
+R11002 Cminorgenproof.mkframe
+R10972 Coq.ZArith.BinInt "x <= y" Z_scope
+R10957 Coq.Lists.List.In
+R11163 Cminorgenproof.match_callstack_incr_bound
+R11163 Cminorgenproof.match_callstack_incr_bound
+R11210 Cminorgenproof.match_callstack_freelist_rec
+R11210 Cminorgenproof.match_callstack_freelist_rec
+R11404 Coq.Init.Logic "x = y" type_scope
+R11386 Mem.load
+R11406 Coq.Init.Datatypes.Some
+R11411 Values.Vundef
+R11371 Coq.Init.Logic "x = y" type_scope
+R11341 Mem.alloc
+R11353 Mem.size_chunk
+R11373 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R11447 Mem.valid_block
+R11447 Mem.valid_block
+R11473 Mem.valid_new_block
+R11473 Mem.valid_new_block
+R11522 Coq.ZArith.BinInt "x <= y" Z_scope
+R11507 Mem.low_bound
+R11522 Coq.ZArith.BinInt "x <= y" Z_scope
+R11507 Mem.low_bound
+R11546 Mem.low_bound_alloc
+R11546 Mem.low_bound_alloc
+R11586 Coqlib.zeq_true
+R11586 Coqlib.zeq_true
+R11634 Coq.ZArith.BinInt "x <= y" Z_scope
+R11615 Coq.ZArith.BinInt "x + y" Z_scope
+R11617 Mem.size_chunk
+R11637 Mem.high_bound
+R11634 Coq.ZArith.BinInt "x <= y" Z_scope
+R11615 Coq.ZArith.BinInt "x + y" Z_scope
+R11617 Mem.size_chunk
+R11637 Mem.high_bound
+R11671 Mem.high_bound_alloc
+R11671 Mem.high_bound_alloc
+R11712 Coqlib.zeq_true
+R11712 Coqlib.zeq_true
+R11737 Mem.load_in_bounds
+R11737 Mem.load_in_bounds
+R11798 Coq.Init.Logic "x = y" type_scope
+R11800 Values.Vundef
+R11798 Coq.Init.Logic "x = y" type_scope
+R11800 Values.Vundef
+R11816 Mem.load_alloc_same
+R11816 Mem.load_alloc_same
+R12476 Cminorgenproof.match_env
+R12514 Mem.nextblock
+R12453 Mem.inject_incr
+R12424 Maps.set
+R12437 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R12386 Maps.set
+R12344 Mem.extend_inject
+R12319 Coq.Init.Logic "x = y" type_scope
+R12315 Maps "a ! b"
+R12321 Coq.Init.Datatypes.Some
+R12259 Cminorgenproof.match_env
+R12297 Mem.nextblock
+R12008 Cminorgen.Var_local
+R12039 Coq.Init.Logic "A /\ B" type_scope
+R12032 Coq.Init.Logic "x = y" type_scope
+R12034 Coq.Init.Datatypes.None
+R12045 Coq.Init.Logic "x = y" type_scope
+R12047 Cminorplus.LVscalar
+R12068 Cminorgen.Var_stack_scalar
+R12119 Coq.Init.Logic "A /\ B" type_scope
+R12103 Coq.Init.Logic "x = y" type_scope
+R12105 Coq.Init.Datatypes.Some
+R12109 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R12125 Coq.Init.Logic "x = y" type_scope
+R12127 Cminorplus.LVscalar
+R12148 Cminorgen.Var_stack_array
+R12192 Coq.Init.Logic "A /\ B" type_scope
+R12176 Coq.Init.Logic "x = y" type_scope
+R12178 Coq.Init.Datatypes.Some
+R12182 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R12195 Coq.Init.Logic "'exists' x , p" type_scope
+R12209 Coq.Init.Logic "x = y" type_scope
+R12211 Cminorplus.LVarray
+R12228 Cminorgen.Var_global
+R12242 Coq.Init.Logic.False
+R11971 Coq.Init.Logic "x = y" type_scope
+R11948 Mem.alloc
+R11960 Cminorplus.sizeof
+R11973 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R12556 Coq.Init.Logic "x = y" type_scope
+R12562 Mem.nextblock
+R12556 Coq.Init.Logic "x = y" type_scope
+R12562 Mem.nextblock
+R12631 Coq.Init.Logic "x = y" type_scope
+R12620 Mem.nextblock
+R12633 Coq.ZArith.BinInt.Zsucc
+R12643 Mem.nextblock
+R12631 Coq.Init.Logic "x = y" type_scope
+R12620 Mem.nextblock
+R12633 Coq.ZArith.BinInt.Zsucc
+R12643 Mem.nextblock
+R12786 Maps.gsspec
+R12786 Maps.gsspec
+R12805 Coqlib.peq
+R12805 Coqlib.peq
+R12967 Values.Vundef
+R12944 Cminorgenproof.match_var_local
+R12967 Values.Vundef
+R12944 Cminorgenproof.match_var_local
+R13003 Maps.gss
+R13003 Maps.gss
+R13039 Cminorgenproof.load_from_alloc_is_undef
+R13039 Cminorgenproof.load_from_alloc_is_undef
+R13173 Coqlib.zeq_true
+R13173 Coqlib.zeq_true
+R13301 Cminorgenproof.match_var_stack_scalar
+R13301 Cminorgenproof.match_var_stack_scalar
+R13358 Maps.gss
+R13358 Maps.gss
+R13394 Mem.val_inject_ptr
+R13394 Mem.val_inject_ptr
+R13461 Coqlib.zeq_true
+R13461 Coqlib.zeq_true
+R13492 Integers.add_commut
+R13492 Integers.add_commut
+R13516 Integers.add_zero
+R13516 Integers.add_zero
+R13617 Cminorgenproof.match_var_stack_array
+R13617 Cminorgenproof.match_var_stack_array
+R13675 Maps.gss
+R13675 Maps.gss
+R13711 Mem.val_inject_ptr
+R13711 Mem.val_inject_ptr
+R13778 Coqlib.zeq_true
+R13778 Coqlib.zeq_true
+R13809 Integers.add_commut
+R13809 Integers.add_commut
+R13833 Integers.add_zero
+R13833 Integers.add_zero
+R14026 Maps.gso
+R14026 Maps.gso
+R14092 Coqlib.zeq_false
+R14092 Coqlib.zeq_false
+R14197 Maps.gso
+R14197 Maps.gso
+R14239 Maps.gso
+R14239 Maps.gso
+R14281 Maps.gso
+R14281 Maps.gso
+R14403 Maps.gsspec
+R14403 Maps.gsspec
+R14426 Coqlib.peq
+R14426 Coqlib.peq
+R14628 Maps.gsspec
+R14628 Maps.gsspec
+R14628 Maps.gsspec
+R14628 Maps.gsspec
+R14650 Coqlib.peq
+R14669 Coqlib.peq
+R14650 Coqlib.peq
+R14669 Coqlib.peq
+R14669 Coqlib.peq
+R14991 Coqlib.zeq
+R14991 Coqlib.zeq
+R15186 Coqlib.zeq
+R15186 Coqlib.zeq
+R15591 Cminorgenproof.match_env
+R15568 Mem.inject_incr
+R15539 Mem.extend_inject
+R15489 Cminorgenproof.match_env
+R15466 Coq.ZArith.BinInt "x <= y" Z_scope
+R15473 Mem.nextblock
+R15410 Coq.Init.Datatypes.None
+R15418 Coq.Init.Logic.True
+R15425 Coq.Init.Datatypes.Some
+R15430 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R15449 Coq.ZArith.BinInt "x < y" Z_scope
+R15379 Coq.Init.Logic "x = y" type_scope
+R15353 Mem.alloc
+R15365 Cminorplus.sizeof
+R15381 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R15657 Coq.Init.Logic "x = y" type_scope
+R15663 Mem.nextblock
+R15657 Coq.Init.Logic "x = y" type_scope
+R15663 Mem.nextblock
+R15896 Coqlib.zeq_false
+R15896 Coqlib.zeq_false
+R16061 Coqlib.zeq
+R16061 Coqlib.zeq
+R16209 Coqlib.zeq
+R16209 Coqlib.zeq
+R16611 Cminorgenproof.match_callstack
+R16588 Mem.inject_incr
+R16559 Mem.extend_inject
+R16526 Coq.ZArith.BinInt "x <= y" Z_scope
+R16533 Mem.nextblock
+R16462 Coq.Init.Datatypes.None
+R16470 Coq.Init.Logic.True
+R16477 Coq.Init.Datatypes.Some
+R16482 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R16505 Coq.ZArith.BinInt "x <= y" Z_scope
+R16431 Coq.Init.Logic "x = y" type_scope
+R16408 Mem.alloc
+R16420 Cminorplus.sizeof
+R16433 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R16342 Cminorgenproof.match_callstack
+R16944 Cminorgenproof.match_env_alloc_other
+R16944 Cminorgenproof.match_env_alloc_other
+R17820 Cminorgenproof.match_callstack
+R17892 Mem.nextblock
+R17881 Coq.Lists.List "x :: y" list_scope
+R17840 Cminorgenproof.mkframe
+R17870 Mem.nextblock
+R17797 Mem.inject_incr
+R17768 Maps.set
+R17781 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R17730 Maps.set
+R17688 Mem.extend_inject
+R17663 Coq.Init.Logic "x = y" type_scope
+R17659 Maps "a ! b"
+R17665 Coq.Init.Datatypes.Some
+R17559 Cminorgenproof.match_callstack
+R17631 Mem.nextblock
+R17620 Coq.Lists.List "x :: y" list_scope
+R17579 Cminorgenproof.mkframe
+R17609 Mem.nextblock
+R17308 Cminorgen.Var_local
+R17339 Coq.Init.Logic "A /\ B" type_scope
+R17332 Coq.Init.Logic "x = y" type_scope
+R17334 Coq.Init.Datatypes.None
+R17345 Coq.Init.Logic "x = y" type_scope
+R17347 Cminorplus.LVscalar
+R17368 Cminorgen.Var_stack_scalar
+R17419 Coq.Init.Logic "A /\ B" type_scope
+R17403 Coq.Init.Logic "x = y" type_scope
+R17405 Coq.Init.Datatypes.Some
+R17409 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R17425 Coq.Init.Logic "x = y" type_scope
+R17427 Cminorplus.LVscalar
+R17448 Cminorgen.Var_stack_array
+R17492 Coq.Init.Logic "A /\ B" type_scope
+R17476 Coq.Init.Logic "x = y" type_scope
+R17478 Coq.Init.Datatypes.Some
+R17482 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R17495 Coq.Init.Logic "'exists' x , p" type_scope
+R17509 Coq.Init.Logic "x = y" type_scope
+R17511 Cminorplus.LVarray
+R17528 Cminorgen.Var_global
+R17542 Coq.Init.Logic.False
+R17271 Coq.Init.Logic "x = y" type_scope
+R17248 Mem.alloc
+R17260 Cminorplus.sizeof
+R17273 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R18002 Cminorgenproof.match_env_alloc_same
+R18002 Cminorgenproof.match_env_alloc_same
+R18051 Cminorgenproof.match_callstack_alloc_other
+R18051 Cminorgenproof.match_callstack_alloc_other
+R18427 Cminorgenproof.match_callstack
+R18459 Mem.nextblock
+R18377 Cminorgenproof.match_callstack
+R18409 Mem.nextblock
+R18361 Coq.Init.Logic "x = y" type_scope
+R18345 Mem.alloc
+R18363 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R18497 Cminorgenproof.match_callstack_incr_bound
+R18497 Cminorgenproof.match_callstack_incr_bound
+R18710 Cminorgenproof.match_globalenvs
+R18669 Cminorgenproof.match_callstack
+R18882 Cminorgenproof.match_env
+R18870 Coq.ZArith.BinInt "x <= y" Z_scope
+R18829 Cminorgenproof.match_env
+R19237 Cminorgenproof.match_callstack
+R19286 Coq.Lists.List "x :: y" list_scope
+R19256 Cminorgenproof.mkframe
+R19164 Cminorgenproof.match_callstack
+R19210 Coq.Lists.List "x :: y" list_scope
+R19183 Cminorgenproof.mkframe
+R19375 Cminorgenproof.match_env_incr_hi
+R19375 Cminorgenproof.match_env_incr_hi
+R19485 Cmconstrproof.eval_negint
+R19497 Cmconstrproof.eval_negfloat
+R19511 Cmconstrproof.eval_absfloat
+R19525 Cmconstrproof.eval_intoffloat
+R19543 Cmconstrproof.eval_floatofint
+R19559 Cmconstrproof.eval_floatofintu
+R19576 Cmconstrproof.eval_notint
+R19588 Cmconstrproof.eval_notbool
+R19603 Cmconstrproof.eval_cast8signed
+R19620 Cmconstrproof.eval_cast8unsigned
+R19639 Cmconstrproof.eval_cast16signed
+R19659 Cmconstrproof.eval_cast16unsigned
+R19679 Cmconstrproof.eval_singleoffloat
+R19698 Cmconstrproof.eval_add
+R19707 Cmconstrproof.eval_add_ptr
+R19722 Cmconstrproof.eval_add_ptr_2
+R19737 Cmconstrproof.eval_sub
+R19746 Cmconstrproof.eval_sub_ptr_int
+R19763 Cmconstrproof.eval_sub_ptr_ptr
+R19782 Cmconstrproof.eval_mul
+R19791 Cmconstrproof.eval_divs
+R19801 Cmconstrproof.eval_mods
+R19811 Cmconstrproof.eval_divu
+R19821 Cmconstrproof.eval_modu
+R19833 Cmconstrproof.eval_and
+R19842 Cmconstrproof.eval_or
+R19850 Cmconstrproof.eval_xor
+R19859 Cmconstrproof.eval_shl
+R19868 Cmconstrproof.eval_shr
+R19877 Cmconstrproof.eval_shru
+R19890 Cmconstrproof.eval_addf
+R19900 Cmconstrproof.eval_subf
+R19910 Cmconstrproof.eval_mulf
+R19920 Cmconstrproof.eval_divf
+R19932 Cmconstrproof.eval_cmp
+R19941 Cmconstrproof.eval_cmp_null_r
+R19957 Cmconstrproof.eval_cmp_null_l
+R19973 Cmconstrproof.eval_cmp_ptr
+R19988 Cmconstrproof.eval_cmpu
+R19998 Cmconstrproof.eval_cmpf
+R20065 Mem.val_inject
+R20095 Values.of_bool
+R20079 Values.of_bool
+R20239 Coq.Init.Logic "'exists' x , p" type_scope
+R20251 Coq.Init.Logic "A /\ B" type_scope
+R20254 Mem.val_inject
+R20268 Values.Vint
+R20365 Coq.Init.Logic "'exists' x , p" type_scope
+R20377 Coq.Init.Logic "A /\ B" type_scope
+R20380 Mem.val_inject
+R20394 Values.Vfloat
+R20495 Coq.Init.Logic "'exists' x , p" type_scope
+R20507 Coq.Init.Logic "A /\ B" type_scope
+R20510 Mem.val_inject
+R20524 Values.of_bool
+R20561 Values.of_bool
+R20619 Cminorgenproof.val_inject_val_of_bool
+R20426 Values.Vfloat
+R20298 Values.Vint
+R20766 Coq.Init.Logic "x = y" type_scope
+R20730 Integers.sub
+R20753 Integers.add
+R20739 Integers.add
+R20768 Integers.sub
+R20806 Integers.sub_add_opp
+R20806 Integers.sub_add_opp
+R20831 Integers.neg_add_distr
+R20831 Integers.neg_add_distr
+R20860 Integers.add_assoc
+R20860 Integers.add_assoc
+R20887 Integers.add_commut
+R20915 Integers.neg
+R20903 Integers.neg
+R20887 Integers.add_commut
+R20915 Integers.neg
+R20903 Integers.neg
+R20942 Integers.add_assoc
+R20942 Integers.add_assoc
+R20968 Integers.add_neg_zero
+R20968 Integers.add_neg_zero
+R20997 Integers.add_commut
+R21012 Integers.zero
+R20997 Integers.add_commut
+R21012 Integers.zero
+R21031 Integers.add_zero
+R21031 Integers.add_zero
+R21063 Integers.sub_add_opp
+R21063 Integers.sub_add_opp
+R21185 Coq.Init.Logic "A /\ B" type_scope
+R21174 Coq.Init.Logic "x = y" type_scope
+R21176 Integers.zero
+R21211 Coq.Init.Logic "A \/ B" type_scope
+R21197 Coq.Init.Logic "A /\ B" type_scope
+R21191 Coq.Init.Logic "x = y" type_scope
+R21193 AST.Ceq
+R21202 Coq.Init.Logic "x = y" type_scope
+R21204 Values.Vfalse
+R21222 Coq.Init.Logic "A /\ B" type_scope
+R21216 Coq.Init.Logic "x = y" type_scope
+R21218 AST.Cne
+R21227 Coq.Init.Logic "x = y" type_scope
+R21229 Values.Vtrue
+R21158 Coq.Init.Logic "x = y" type_scope
+R21134 Cminorgenproof.eval_compare_null
+R21160 Coq.Init.Datatypes.Some
+R21301 Integers.eq
+R21308 Integers.eq_spec
+R21322 Integers.zero
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R21681 Coq.Init.Logic "'exists' x , p" type_scope
+R21756 Coq.Init.Logic "A /\ B" type_scope
+R21697 Cminor.eval_expr
+R21712 Values.Vptr
+R21720 Integers.zero
+R21759 Mem.val_inject
+R21656 Mem.mem_inject
+R21626 Mem.val_list_inject
+R21558 Cminor.eval_exprlist
+R21577 Values.Vptr
+R21585 Integers.zero
+R21544 Coq.Init.Logic "x = y" type_scope
+R21518 Cminorgenproof.eval_operation
+R21546 Coq.Init.Datatypes.Some
+R21504 Coq.Init.Logic "x = y" type_scope
+R21490 Cminorgen.make_op
+R21506 Coq.Init.Datatypes.Some
+R23078 Values.Vptr
+R23087 Integers.add
+R23078 Values.Vptr
+R23087 Integers.add
+R23141 Mem.val_inject_ptr
+R23141 Mem.val_inject_ptr
+R23199 Integers.add_assoc
+R23199 Integers.add_assoc
+R23199 Integers.add_assoc
+R23199 Integers.add_assoc
+R23227 Integers.add_commut
+R23227 Integers.add_commut
+R23273 Values.Vptr
+R23282 Integers.add
+R23273 Values.Vptr
+R23282 Integers.add
+R23337 Mem.val_inject_ptr
+R23337 Mem.val_inject_ptr
+R23395 Integers.add_assoc
+R23395 Integers.add_assoc
+R23395 Integers.add_assoc
+R23395 Integers.add_assoc
+R23423 Integers.add_commut
+R23423 Integers.add_commut
+R23469 Values.Vptr
+R23478 Integers.sub
+R23469 Values.Vptr
+R23478 Integers.sub
+R23533 Mem.val_inject_ptr
+R23533 Mem.val_inject_ptr
+R23582 Integers.sub_add_l
+R23582 Integers.sub_add_l
+R23630 Values.eq_block
+R23630 Values.eq_block
+R23701 Coq.Init.Logic "x = y" type_scope
+R23701 Coq.Init.Logic "x = y" type_scope
+R23740 Values.Vint
+R23746 Integers.sub
+R23740 Values.Vint
+R23746 Integers.sub
+R23841 Cminorgenproof.int_sub_shifted
+R23841 Cminorgenproof.int_sub_shifted
+R23912 Integers.eq_spec
+R23927 Integers.zero
+R23948 Integers.eq
+R23958 Integers.zero
+R23912 Integers.eq_spec
+R23927 Integers.zero
+R23948 Integers.eq
+R23958 Integers.zero
+R24048 Integers.eq_spec
+R24063 Integers.zero
+R24084 Integers.eq
+R24094 Integers.zero
+R24048 Integers.eq_spec
+R24063 Integers.zero
+R24084 Integers.eq
+R24094 Integers.zero
+R24184 Integers.eq_spec
+R24199 Integers.zero
+R24220 Integers.eq
+R24230 Integers.zero
+R24184 Integers.eq_spec
+R24199 Integers.zero
+R24220 Integers.eq
+R24230 Integers.zero
+R24320 Integers.eq_spec
+R24335 Integers.zero
+R24356 Integers.eq
+R24366 Integers.zero
+R24320 Integers.eq_spec
+R24335 Integers.zero
+R24356 Integers.eq
+R24366 Integers.zero
+R24451 Integers.ltu
+R24463 Integers.repr
+R24451 Integers.ltu
+R24463 Integers.repr
+R24573 Integers.ltu
+R24585 Integers.repr
+R24573 Integers.ltu
+R24585 Integers.repr
+R24696 Integers.ltu
+R24708 Integers.repr
+R24696 Integers.ltu
+R24708 Integers.repr
+R24824 Cminorgenproof.eval_compare_null_inv
+R24824 Cminorgenproof.eval_compare_null_inv
+R25016 Cminorgenproof.eval_compare_null_inv
+R25016 Cminorgenproof.eval_compare_null_inv
+R25245 Coq.Bool.Bool "x && y" bool_scope
+R25211 Mem.valid_pointer
+R25231 Integers.signed
+R25248 Mem.valid_pointer
+R25269 Integers.signed
+R25245 Coq.Bool.Bool "x && y" bool_scope
+R25211 Mem.valid_pointer
+R25231 Integers.signed
+R25248 Mem.valid_pointer
+R25269 Integers.signed
+R25347 Values.eq_block
+R25347 Values.eq_block
+R25411 Coq.Init.Logic "x = y" type_scope
+R25411 Coq.Init.Logic "x = y" type_scope
+R25454 Coq.Init.Logic "x = y" type_scope
+R25454 Coq.Init.Logic "x = y" type_scope
+R25491 Coq.Bool.Bool.andb_prop
+R25491 Coq.Bool.Bool.andb_prop
+R25528 Values.of_bool
+R25541 Integers.cmp
+R25528 Values.of_bool
+R25541 Integers.cmp
+R25622 Integers.translate_cmp
+R25622 Integers.translate_cmp
+R25650 Cminorgenproof.val_inject_val_of_bool
+R25650 Cminorgenproof.val_inject_val_of_bool
+R25684 Mem.valid_pointer_inject_no_overflow
+R25684 Mem.valid_pointer_inject_no_overflow
+R25734 Mem.valid_pointer_inject_no_overflow
+R25734 Mem.valid_pointer_inject_no_overflow
+R26342 Coq.Init.Logic "'exists' x , p" type_scope
+R26458 Coq.Init.Logic "A /\ B" type_scope
+R26356 Cminor.eval_expr
+R26413 Cminorgen.make_cast
+R26371 Values.Vptr
+R26379 Integers.zero
+R26483 Coq.Init.Logic "A /\ B" type_scope
+R26461 Mem.val_inject
+R26486 Cminorgenproof.val_normalized
+R26319 Mem.val_inject
+R26304 Coq.Init.Logic "x = y" type_scope
+R26291 Cminorplus.cast
+R26306 Coq.Init.Datatypes.Some
+R26229 Cminor.eval_expr
+R26244 Values.Vptr
+R26252 Integers.zero
+R26634 Values.Vint
+R26640 Integers.cast8signed
+R26634 Values.Vint
+R26640 Integers.cast8signed
+R26677 Cmconstrproof.eval_cast8signed
+R26677 Cmconstrproof.eval_cast8signed
+R26732 Values.Vint
+R26732 Values.Vint
+R26765 Values.Vint
+R26771 Integers.cast8unsigned
+R26765 Values.Vint
+R26771 Integers.cast8unsigned
+R26809 Cmconstrproof.eval_cast8unsigned
+R26809 Cmconstrproof.eval_cast8unsigned
+R26866 Values.Vint
+R26866 Values.Vint
+R26899 Values.Vint
+R26905 Integers.cast16signed
+R26899 Values.Vint
+R26905 Integers.cast16signed
+R26943 Cmconstrproof.eval_cast16signed
+R26943 Cmconstrproof.eval_cast16signed
+R26999 Values.Vint
+R26999 Values.Vint
+R27032 Values.Vint
+R27038 Integers.cast16unsigned
+R27032 Values.Vint
+R27038 Integers.cast16unsigned
+R27077 Cmconstrproof.eval_cast16unsigned
+R27077 Cmconstrproof.eval_cast16unsigned
+R27135 Values.Vint
+R27135 Values.Vint
+R27168 Values.Vint
+R27168 Values.Vint
+R27213 Values.Vint
+R27213 Values.Vint
+R27246 Values.Vptr
+R27246 Values.Vptr
+R27297 Values.Vptr
+R27297 Values.Vptr
+R27336 Values.Vfloat
+R27344 Floats.singleoffloat
+R27336 Values.Vfloat
+R27344 Floats.singleoffloat
+R27385 Cmconstrproof.eval_singleoffloat
+R27385 Cmconstrproof.eval_singleoffloat
+R27442 Values.Vfloat
+R27442 Values.Vfloat
+R27478 Values.Vfloat
+R27478 Values.Vfloat
+R27526 Values.Vfloat
+R27526 Values.Vfloat
+R27615 Cminor.eval_expr
+R27709 Values.Vptr
+R27718 Integers.repr
+R27670 Cminorgen.make_stackaddr
+R27630 Values.Vptr
+R27638 Integers.zero
+R27783 Cminor.eval_Eop
+R27783 Cminor.eval_Eop
+R27838 Integers.add_commut
+R27838 Integers.add_commut
+R27860 Integers.add_zero
+R27860 Integers.add_zero
+R28051 Cminor.eval_expr
+R28108 Cminorgen.make_load
+R28066 Values.Vptr
+R28074 Integers.zero
+R28037 Coq.Init.Logic "x = y" type_scope
+R28014 Mem.loadv
+R28039 Coq.Init.Datatypes.Some
+R27952 Cminor.eval_expr
+R27967 Values.Vptr
+R27975 Integers.zero
+R28194 Cmconstrproof.eval_load
+R28194 Cmconstrproof.eval_load
+R28333 Mem.val_content_inject
+R28355 Mem.mem_chunk
+R28308 Mem.val_inject
+R28293 Coq.Init.Logic "x = y" type_scope
+R28279 Cminorplus.cast
+R28295 Coq.Init.Datatypes.Some
+R28489 Mem.val_content_inject_8
+R28489 Mem.val_content_inject_8
+R28517 Integers.cast8_unsigned_signed
+R28517 Integers.cast8_unsigned_signed
+R28552 Mem.val_content_inject_8
+R28552 Mem.val_content_inject_8
+R28580 Integers.cast8_unsigned_idem
+R28580 Integers.cast8_unsigned_idem
+R28613 Mem.val_content_inject_16
+R28613 Mem.val_content_inject_16
+R28642 Integers.cast16_unsigned_signed
+R28642 Integers.cast16_unsigned_signed
+R28678 Mem.val_content_inject_16
+R28678 Mem.val_content_inject_16
+R28707 Integers.cast16_unsigned_idem
+R28707 Integers.cast16_unsigned_idem
+R28805 Mem.val_content_inject_32
+R28805 Mem.val_content_inject_32
+R28834 Floats.singleoffloat_idem
+R28834 Floats.singleoffloat_idem
+R29339 Coq.Init.Logic "'exists' x , p" type_scope
+R29351 Coq.Init.Logic "'exists' x , p" type_scope
+R29473 Coq.Init.Logic "A /\ B" type_scope
+R29364 Cminor.eval_expr
+R29421 Cminorgen.make_store
+R29379 Values.Vptr
+R29387 Integers.zero
+R29498 Coq.Init.Logic "A /\ B" type_scope
+R29476 Mem.mem_inject
+R29521 Coq.Init.Logic "A /\ B" type_scope
+R29501 Mem.val_inject
+R29538 Coq.Init.Logic "x = y" type_scope
+R29524 Mem.nextblock
+R29540 Mem.nextblock
+R29310 Mem.val_inject
+R29279 Mem.val_inject
+R29254 Mem.mem_inject
+R29239 Coq.Init.Logic "x = y" type_scope
+R29211 Mem.storev
+R29241 Coq.Init.Datatypes.Some
+R29197 Coq.Init.Logic "x = y" type_scope
+R29181 Cminorplus.cast
+R29199 Coq.Init.Datatypes.Some
+R29102 Cminor.eval_expr
+R29117 Values.Vptr
+R29125 Integers.zero
+R29021 Cminor.eval_expr
+R29036 Values.Vptr
+R29044 Integers.zero
+R29601 Mem.val_content_inject
+R29623 Mem.mem_chunk
+R29601 Mem.val_content_inject
+R29623 Mem.mem_chunk
+R29661 Cminorgenproof.val_content_inject_cast
+R29661 Cminorgenproof.val_content_inject_cast
+R29701 Mem.storev_mapped_inject_1
+R29701 Mem.storev_mapped_inject_1
+R29799 Cmconstrproof.eval_store
+R29799 Cmconstrproof.eval_store
+R29880 Cminorgenproof.make_cast_correct
+R29880 Cminorgenproof.make_cast_correct
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R30093 Mem.store_inv
+R30093 Mem.store_inv
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R30434 Coq.Init.Logic "'exists' x , p" type_scope
+R30502 Coq.Init.Logic "A /\ B" type_scope
+R30449 Cminor.eval_expr
+R30464 Values.Vptr
+R30472 Integers.zero
+R30509 Mem.val_inject
+R30420 Coq.Init.Logic "x = y" type_scope
+R30403 Mem.load
+R30422 Coq.Init.Datatypes.Some
+R30372 Coq.Init.Logic "x = y" type_scope
+R30368 Maps "a ! b"
+R30374 Coq.Init.Datatypes.Some
+R30378 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R30382 Cminorplus.LVscalar
+R30344 Mem.mem_inject
+R30255 Cminorgenproof.match_callstack
+R30326 Mem.nextblock
+R30311 Mem.nextblock
+R30301 Coq.Lists.List "x :: y" list_scope
+R30274 Cminorgenproof.mkframe
+R30241 Coq.Init.Logic "x = y" type_scope
+R30225 Cminorgen.var_get
+R30243 Coq.Init.Datatypes.Some
+R30571 Cminorgenproof.match_var
+R30600 Maps "a !! b"
+R30571 Cminorgenproof.match_var
+R30600 Maps "a !! b"
+R30660 Maps "a !! b"
+R30660 Maps "a !! b"
+R30814 Cminor.eval_Evar
+R30814 Cminor.eval_Evar
+R30983 Coq.Init.Logic "x = y" type_scope
+R30983 Coq.Init.Logic "x = y" type_scope
+R31024 Coq.Init.Logic "x = y" type_scope
+R31024 Coq.Init.Logic "x = y" type_scope
+R31098 Coq.Init.Logic "x = y" type_scope
+R31066 Mem.loadv
+R31081 Values.Vptr
+R31088 Integers.zero
+R31100 Coq.Init.Datatypes.Some
+R31098 Coq.Init.Logic "x = y" type_scope
+R31066 Mem.loadv
+R31081 Values.Vptr
+R31088 Integers.zero
+R31100 Coq.Init.Datatypes.Some
+R31135 Mem.loadv_inject
+R31135 Mem.loadv_inject
+R31244 Cminorgenproof.make_load_correct
+R31244 Cminorgenproof.make_load_correct
+R31277 Cminorgenproof.make_stackaddr_correct
+R31277 Cminorgenproof.make_stackaddr_correct
+R31550 Coq.Init.Logic "'exists' x , p" type_scope
+R31618 Coq.Init.Logic "A /\ B" type_scope
+R31565 Cminor.eval_expr
+R31580 Values.Vptr
+R31588 Integers.zero
+R31625 Mem.val_inject
+R31639 Values.Vptr
+R31646 Integers.zero
+R31531 Coq.Init.Logic "x = y" type_scope
+R31527 Maps "a ! b"
+R31533 Coq.Init.Datatypes.Some
+R31537 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R31437 Cminorgenproof.match_callstack
+R31508 Mem.nextblock
+R31493 Mem.nextblock
+R31483 Coq.Lists.List "x :: y" list_scope
+R31456 Cminorgenproof.mkframe
+R31423 Coq.Init.Logic "x = y" type_scope
+R31406 Cminorgen.var_addr
+R31425 Coq.Init.Datatypes.Some
+R31704 Cminorgenproof.match_var
+R31733 Maps "a !! b"
+R31704 Cminorgenproof.match_var
+R31733 Maps "a !! b"
+R31793 Maps "a !! b"
+R31793 Maps "a !! b"
+R31935 Values.Vptr
+R31944 Integers.repr
+R31935 Values.Vptr
+R31944 Integers.repr
+R31974 Cminorgenproof.make_stackaddr_correct
+R31974 Cminorgenproof.make_stackaddr_correct
+R32071 Values.Vptr
+R32080 Integers.repr
+R32071 Values.Vptr
+R32080 Integers.repr
+R32110 Cminorgenproof.make_stackaddr_correct
+R32110 Cminorgenproof.make_stackaddr_correct
+R32468 Coq.Init.Logic "'exists' x , p" type_scope
+R32536 Coq.Init.Logic "A /\ B" type_scope
+R32483 Cminor.eval_expr
+R32498 Values.Vptr
+R32506 Integers.zero
+R32543 Mem.val_inject
+R32557 Values.Vptr
+R32564 Integers.zero
+R32454 Coq.Init.Logic "x = y" type_scope
+R32431 Globalenvs.find_symbol
+R32456 Coq.Init.Datatypes.Some
+R32419 Coq.Init.Logic "x = y" type_scope
+R32415 Maps "a ! b"
+R32421 Coq.Init.Datatypes.None
+R32325 Cminorgenproof.match_callstack
+R32396 Mem.nextblock
+R32381 Mem.nextblock
+R32371 Coq.Lists.List "x :: y" list_scope
+R32344 Cminorgenproof.mkframe
+R32311 Coq.Init.Logic "x = y" type_scope
+R32294 Cminorgen.var_addr
+R32313 Coq.Init.Datatypes.Some
+R32622 Cminorgenproof.match_var
+R32651 Maps "a !! b"
+R32622 Cminorgenproof.match_var
+R32651 Maps "a !! b"
+R32713 Maps "a !! b"
+R32713 Maps "a !! b"
+R32814 Cminorgenproof.match_callstack_match_globalenvs
+R32814 Cminorgenproof.match_callstack_match_globalenvs
+R32933 Values.Vptr
+R32940 Integers.zero
+R32933 Values.Vptr
+R32940 Integers.zero
+R32967 Cminor.eval_Eop
+R32967 Cminor.eval_Eop
+R33513 Coq.Init.Logic "'exists' x , p" type_scope
+R33525 Coq.Init.Logic "'exists' x , p" type_scope
+R33537 Coq.Init.Logic "'exists' x , p" type_scope
+R33609 Coq.Init.Logic "A /\ B" type_scope
+R33552 Cminor.eval_expr
+R33567 Values.Vptr
+R33575 Integers.zero
+R33635 Coq.Init.Logic "A /\ B" type_scope
+R33616 Mem.val_inject
+R33662 Coq.Init.Logic "A /\ B" type_scope
+R33642 Mem.mem_inject
+R33669 Cminorgenproof.match_callstack
+R33743 Mem.nextblock
+R33727 Mem.nextblock
+R33716 Coq.Lists.List "x :: y" list_scope
+R33688 Cminorgenproof.mkframe
+R33498 Coq.Init.Logic "x = y" type_scope
+R33476 Mem.store
+R33500 Coq.Init.Datatypes.Some
+R33461 Coq.Init.Logic "x = y" type_scope
+R33447 Cminorplus.cast
+R33463 Coq.Init.Datatypes.Some
+R33416 Coq.Init.Logic "x = y" type_scope
+R33412 Maps "a ! b"
+R33418 Coq.Init.Datatypes.Some
+R33422 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R33426 Cminorplus.LVscalar
+R33386 Mem.mem_inject
+R33360 Mem.val_inject
+R33294 Cminor.eval_expr
+R33309 Values.Vptr
+R33317 Integers.zero
+R33201 Cminorgenproof.match_callstack
+R33275 Mem.nextblock
+R33259 Mem.nextblock
+R33248 Coq.Lists.List "x :: y" list_scope
+R33220 Cminorgenproof.mkframe
+R33187 Coq.Init.Logic "x = y" type_scope
+R33167 Cminorgen.var_set
+R33189 Coq.Init.Datatypes.Some
+R33825 Coq.Init.Logic "x = y" type_scope
+R33812 Mem.nextblock
+R33827 Mem.nextblock
+R33825 Coq.Init.Logic "x = y" type_scope
+R33812 Mem.nextblock
+R33827 Mem.nextblock
+R33858 Mem.store_inv
+R33858 Mem.store_inv
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R34000 Maps "a !! b"
+R34000 Maps "a !! b"
+R34186 Coq.Init.Logic "x = y" type_scope
+R34186 Coq.Init.Logic "x = y" type_scope
+R34226 Coq.Init.Logic "x = y" type_scope
+R34226 Coq.Init.Logic "x = y" type_scope
+R34267 Cminorgenproof.make_cast_correct
+R34267 Cminorgenproof.make_cast_correct
+R34361 Maps.set
+R34361 Maps.set
+R34422 Cminor.eval_Eassign
+R34422 Cminor.eval_Eassign
+R34474 Mem.store_unmapped_inject
+R34474 Mem.store_unmapped_inject
+R34533 Cminorgenproof.match_callstack_store_local
+R34533 Cminorgenproof.match_callstack_store_local
+R34691 Coq.Init.Logic "x = y" type_scope
+R34691 Coq.Init.Logic "x = y" type_scope
+R34731 Coq.Init.Logic "x = y" type_scope
+R34731 Coq.Init.Logic "x = y" type_scope
+R34811 Coq.Init.Logic "x = y" type_scope
+R34774 Mem.storev
+R34791 Values.Vptr
+R34798 Integers.zero
+R34813 Coq.Init.Datatypes.Some
+R34811 Coq.Init.Logic "x = y" type_scope
+R34774 Mem.storev
+R34791 Values.Vptr
+R34798 Integers.zero
+R34813 Coq.Init.Datatypes.Some
+R34849 Cminorgenproof.make_stackaddr_correct
+R34849 Cminorgenproof.make_stackaddr_correct
+R34927 Cminorgenproof.make_store_correct
+R34927 Cminorgenproof.make_store_correct
+R35222 Cminorgenproof.match_callstack_mapped
+R35222 Cminorgenproof.match_callstack_mapped
+R35366 Coq.ZArith.BinInt "x <= y" Z_scope
+R35369 Cminorgen.align
+R35357 Coq.ZArith.BinInt "x > y" Z_scope
+R35513 Coq.ZArith.BinInt "x <= y" Z_scope
+R35492 Coq.Init.Logic "x = y" type_scope
+R35455 Cminorgen.assign_variables
+R35481 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R35494 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R35652 Cminorgen.mem
+R35652 Cminorgen.mem
+R35729 Mem.size_chunk_pos
+R35729 Mem.size_chunk_pos
+R35769 Cminorgenproof.align_bounds
+R35786 Mem.size_chunk
+R35769 Cminorgenproof.align_bounds
+R35786 Mem.size_chunk
+R35874 Coq.ZArith.BinInt "x > y" Z_scope
+R35874 Coq.ZArith.BinInt "x > y" Z_scope
+R35899 Cminorgenproof.align_bounds
+R35899 Cminorgenproof.align_bounds
+R35934 Coq.ZArith.BinInt "x <= y" Z_scope
+R35937 Coq.ZArith.Zmin.Zmax
+R35934 Coq.ZArith.BinInt "x <= y" Z_scope
+R35937 Coq.ZArith.Zmin.Zmax
+R35954 Coqlib.Zmax_bound_l
+R35954 Coqlib.Zmax_bound_l
+R36609 Coq.Init.Logic "'exists' x , p" type_scope
+R36644 Coq.Init.Logic "A /\ B" type_scope
+R36625 Mem.inject_incr
+R36669 Coq.Init.Logic "A /\ B" type_scope
+R36647 Mem.mem_inject
+R36672 Cminorgenproof.match_callstack
+R36783 Mem.nextblock
+R36768 Mem.nextblock
+R36733 Coq.Lists.List "x :: y" list_scope
+R36692 Cminorgenproof.mkframe
+R36722 Mem.nextblock
+R36595 Coq.Init.Logic "x <> y" type_scope
+R36591 Maps "a ! b"
+R36598 Coq.Init.Datatypes.None
+R36569 Coq.Lists.List.In
+R36572 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R36542 Coq.ZArith.BinInt "x <= y" Z_scope
+R36534 Coq.ZArith.BinInt "x + y" Z_scope
+R36519 Mem.high_bound
+R36498 Coq.Init.Logic "x = y" type_scope
+R36500 Coq.Init.Datatypes.Some
+R36504 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R36466 Coq.ZArith.BinInt "x <= y" Z_scope
+R36441 Mem.mem_inject
+R36321 Cminorgenproof.match_callstack
+R36423 Mem.nextblock
+R36408 Mem.nextblock
+R36378 Coq.Lists.List "x :: y" list_scope
+R36340 Cminorgenproof.mkframe
+R36367 Mem.nextblock
+R36301 Coq.Init.Logic "x = y" type_scope
+R36264 Cminorgen.assign_variables
+R36290 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R36303 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R36205 Cminorplus.alloc_variables
+R36154 Coq.ZArith.BinInt "x <= y" Z_scope
+R36157 Integers.max_signed
+R36139 Coq.Init.Logic "x = y" type_scope
+R36122 Mem.high_bound
+R36113 Coq.Init.Logic "x = y" type_scope
+R36097 Mem.low_bound
+R36074 Mem.valid_block
+R36955 Mem.inject_incr_refl
+R36955 Mem.inject_incr_refl
+R37104 Cminorgen.assign_variables
+R37131 Cminorgen.assign_variable
+R37160 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R37151 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R37044 Cminorgen.assign_variables
+R37084 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R37075 Coq.Lists.List "x :: y" list_scope
+R37066 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R37104 Cminorgen.assign_variables
+R37131 Cminorgen.assign_variable
+R37160 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R37151 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R37044 Cminorgen.assign_variables
+R37084 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R37075 Coq.Lists.List "x :: y" list_scope
+R37066 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R37184 Cminorgen.assign_variable
+R37213 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R37204 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R37184 Cminorgen.assign_variable
+R37213 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R37204 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R37352 Coq.Init.Logic "x <> y" type_scope
+R37347 Maps "a ! b"
+R37355 Coq.Init.Datatypes.None
+R37323 Coq.Lists.List.In
+R37326 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R37352 Coq.Init.Logic "x <> y" type_scope
+R37347 Maps "a ! b"
+R37355 Coq.Init.Datatypes.None
+R37323 Coq.Lists.List.In
+R37326 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R37421 Coq.Init.Logic "'exists' x , p" type_scope
+R37438 Coq.Init.Logic "x = y" type_scope
+R37434 Maps "a ! b"
+R37440 Coq.Init.Datatypes.Some
+R37421 Coq.Init.Logic "'exists' x , p" type_scope
+R37438 Coq.Init.Logic "x = y" type_scope
+R37434 Maps "a ! b"
+R37440 Coq.Init.Datatypes.Some
+R37468 Coq.Init.Logic "x <> y" type_scope
+R37464 Maps "a ! b"
+R37471 Coq.Init.Datatypes.None
+R37468 Coq.Init.Logic "x <> y" type_scope
+R37464 Maps "a ! b"
+R37471 Coq.Init.Datatypes.None
+R37529 Maps "a ! b"
+R37529 Maps "a ! b"
+R37712 Cminorgen.mem
+R37712 Cminorgen.mem
+R37796 Cminorgen.align
+R37806 Mem.size_chunk
+R37796 Cminorgen.align
+R37806 Mem.size_chunk
+R37887 Mem.extend_inject
+R37905 Coq.Init.Datatypes.Some
+R37910 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R37887 Mem.extend_inject
+R37905 Coq.Init.Datatypes.Some
+R37910 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R37941 Mem.size_chunk_pos
+R37941 Mem.size_chunk_pos
+R37995 Cminorgenproof.align_bounds
+R38012 Mem.size_chunk
+R37995 Cminorgenproof.align_bounds
+R38012 Mem.size_chunk
+R38095 Coq.Init.Logic "A /\ B" type_scope
+R38075 Mem.mem_inject
+R38098 Mem.inject_incr
+R38095 Coq.Init.Logic "A /\ B" type_scope
+R38075 Mem.mem_inject
+R38098 Mem.inject_incr
+R38146 Coq.ZArith.BinInt "x < y" Z_scope
+R38131 Integers.min_signed
+R38146 Coq.ZArith.BinInt "x < y" Z_scope
+R38131 Integers.min_signed
+R38185 Cminorgenproof.assign_variables_incr
+R38185 Cminorgenproof.assign_variables_incr
+R38257 Mem.alloc_mapped_inject
+R38257 Mem.alloc_mapped_inject
+R38472 Cminorgenproof.match_callstack
+R38605 Mem.nextblock
+R38590 Mem.nextblock
+R38569 Coq.Lists.List "x :: y" list_scope
+R38505 Cminorgenproof.mkframe
+R38555 Mem.nextblock
+R38520 Maps.set
+R38533 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R38472 Cminorgenproof.match_callstack
+R38605 Mem.nextblock
+R38590 Mem.nextblock
+R38569 Coq.Lists.List "x :: y" list_scope
+R38505 Cminorgenproof.mkframe
+R38555 Mem.nextblock
+R38520 Maps.set
+R38533 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R38661 Cminorgenproof.match_callstack_alloc_left
+R38661 Cminorgenproof.match_callstack_alloc_left
+R38718 Coq.ZArith.BinInt "x <= y" Z_scope
+R38718 Coq.ZArith.BinInt "x <= y" Z_scope
+R38871 Coq.ZArith.BinInt "x <= y" Z_scope
+R38863 Coq.ZArith.BinInt "x + y" Z_scope
+R38847 Mem.high_bound
+R38790 Coq.Init.Logic "x = y" type_scope
+R38792 Coq.Init.Datatypes.Some
+R38796 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R38871 Coq.ZArith.BinInt "x <= y" Z_scope
+R38863 Coq.ZArith.BinInt "x + y" Z_scope
+R38847 Mem.high_bound
+R38790 Coq.Init.Logic "x = y" type_scope
+R38792 Coq.Init.Datatypes.Some
+R38796 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R38957 Mem.high_bound_alloc
+R38957 Mem.high_bound_alloc
+R39002 Coqlib.zeq
+R39002 Coqlib.zeq
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R39273 Mem.inject_incr_trans
+R39273 Mem.inject_incr_trans
+R39408 Mem.alloc_unmapped_inject
+R39408 Mem.alloc_unmapped_inject
+R39468 Mem.extend_inject
+R39485 Coq.Init.Datatypes.None
+R39468 Mem.extend_inject
+R39485 Coq.Init.Datatypes.None
+R39536 Cminorgenproof.match_callstack
+R39669 Mem.nextblock
+R39654 Mem.nextblock
+R39633 Coq.Lists.List "x :: y" list_scope
+R39569 Cminorgenproof.mkframe
+R39619 Mem.nextblock
+R39584 Maps.set
+R39597 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R39536 Cminorgenproof.match_callstack
+R39669 Mem.nextblock
+R39654 Mem.nextblock
+R39633 Coq.Lists.List "x :: y" list_scope
+R39569 Cminorgenproof.mkframe
+R39619 Mem.nextblock
+R39584 Maps.set
+R39597 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R39725 Cminorgenproof.match_callstack_alloc_left
+R39725 Cminorgenproof.match_callstack_alloc_left
+R39882 Coq.ZArith.BinInt "x <= y" Z_scope
+R39874 Coq.ZArith.BinInt "x + y" Z_scope
+R39858 Mem.high_bound
+R39801 Coq.Init.Logic "x = y" type_scope
+R39803 Coq.Init.Datatypes.Some
+R39807 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R39882 Coq.ZArith.BinInt "x <= y" Z_scope
+R39874 Coq.ZArith.BinInt "x + y" Z_scope
+R39858 Mem.high_bound
+R39801 Coq.Init.Logic "x = y" type_scope
+R39803 Coq.Init.Datatypes.Some
+R39807 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R39967 Mem.high_bound_alloc
+R39967 Mem.high_bound_alloc
+R40012 Coqlib.zeq
+R40012 Coqlib.zeq
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R40227 Mem.inject_incr_trans
+R40227 Mem.inject_incr_trans
+R40370 Coq.ZArith.BinInt "x <= y" Z_scope
+R40373 Coq.ZArith.Zmin.Zmax
+R40370 Coq.ZArith.BinInt "x <= y" Z_scope
+R40373 Coq.ZArith.Zmin.Zmax
+R40392 Coq.ZArith.Zmin.Zmax1
+R40392 Coq.ZArith.Zmin.Zmax1
+R40412 Coq.ZArith.BinInt "x > y" Z_scope
+R40412 Coq.ZArith.BinInt "x > y" Z_scope
+R40439 Cminorgenproof.align_bounds
+R40439 Cminorgenproof.align_bounds
+R40483 Cminorgen.align
+R40483 Cminorgen.align
+R40514 Mem.extend_inject
+R40532 Coq.Init.Datatypes.Some
+R40537 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R40514 Mem.extend_inject
+R40532 Coq.Init.Datatypes.Some
+R40537 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R40582 Coq.Init.Logic "A /\ B" type_scope
+R40562 Mem.mem_inject
+R40585 Mem.inject_incr
+R40582 Coq.Init.Logic "A /\ B" type_scope
+R40562 Mem.mem_inject
+R40585 Mem.inject_incr
+R40631 Coq.ZArith.BinInt "x < y" Z_scope
+R40616 Integers.min_signed
+R40631 Coq.ZArith.BinInt "x < y" Z_scope
+R40616 Integers.min_signed
+R40668 Cminorgenproof.assign_variables_incr
+R40668 Cminorgenproof.assign_variables_incr
+R40738 Mem.alloc_mapped_inject
+R40738 Mem.alloc_mapped_inject
+R40949 Cminorgenproof.match_callstack
+R41082 Mem.nextblock
+R41067 Mem.nextblock
+R41046 Coq.Lists.List "x :: y" list_scope
+R40982 Cminorgenproof.mkframe
+R41032 Mem.nextblock
+R40997 Maps.set
+R41010 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R40949 Cminorgenproof.match_callstack
+R41082 Mem.nextblock
+R41067 Mem.nextblock
+R41046 Coq.Lists.List "x :: y" list_scope
+R40982 Cminorgenproof.mkframe
+R41032 Mem.nextblock
+R40997 Maps.set
+R41010 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R41138 Cminorgenproof.match_callstack_alloc_left
+R41138 Cminorgenproof.match_callstack_alloc_left
+R41195 Coq.ZArith.BinInt "x <= y" Z_scope
+R41195 Coq.ZArith.BinInt "x <= y" Z_scope
+R41348 Coq.ZArith.BinInt "x <= y" Z_scope
+R41340 Coq.ZArith.BinInt "x + y" Z_scope
+R41324 Mem.high_bound
+R41267 Coq.Init.Logic "x = y" type_scope
+R41269 Coq.Init.Datatypes.Some
+R41273 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R41348 Coq.ZArith.BinInt "x <= y" Z_scope
+R41340 Coq.ZArith.BinInt "x + y" Z_scope
+R41324 Mem.high_bound
+R41267 Coq.Init.Logic "x = y" type_scope
+R41269 Coq.Init.Datatypes.Some
+R41273 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R41434 Mem.high_bound_alloc
+R41434 Mem.high_bound_alloc
+R41479 Coqlib.zeq
+R41479 Coqlib.zeq
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R41750 Mem.inject_incr_trans
+R41750 Mem.inject_incr_trans
+R41880 Coq.Init.Logic "x <> y" type_scope
+R41875 Maps "a ! b"
+R41853 Cminor.set_params
+R41883 Coq.Init.Datatypes.None
+R41836 Coq.Lists.List.In
+R41968 Maps.gsspec
+R41968 Maps.gsspec
+R41988 Coqlib.peq
+R41988 Coqlib.peq
+R42080 Maps.gsspec
+R42080 Maps.gsspec
+R42100 Coqlib.peq
+R42100 Coqlib.peq
+R42289 Coq.Init.Logic "x <> y" type_scope
+R42284 Maps "a ! b"
+R42267 Cminor.set_locals
+R42292 Coq.Init.Datatypes.None
+R42247 Coq.Init.Logic "A \/ B" type_scope
+R42236 Coq.Lists.List.In
+R42255 Coq.Init.Logic "x <> y" type_scope
+R42251 Maps "a ! b"
+R42258 Coq.Init.Datatypes.None
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R42357 Maps.gsspec
+R42357 Maps.gsspec
+R42377 Coqlib.peq
+R42377 Coqlib.peq
+R42435 Coq.Init.Logic "x <> y" type_scope
+R42435 Coq.Init.Logic "x <> y" type_scope
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R42607 Coq.Init.Logic "x <> y" type_scope
+R42602 Maps "a ! b"
+R42562 Cminor.set_locals
+R42579 Cminor.set_params
+R42610 Coq.Init.Datatypes.None
+R42533 Coq.Lists.List.In
+R42547 Coq.Lists.List "x ++ y" list_scope
+R42639 Cminorgenproof.set_locals_defined
+R42639 Cminorgenproof.set_locals_defined
+R42668 Coq.Lists.List.in_app_or
+R42668 Coq.Lists.List.in_app_or
+R42711 Cminorgenproof.set_params_defined
+R42711 Cminorgenproof.set_params_defined
+R43290 Coq.Init.Logic "'exists' x , p" type_scope
+R43325 Coq.Init.Logic "A /\ B" type_scope
+R43306 Mem.inject_incr
+R43351 Coq.Init.Logic "A /\ B" type_scope
+R43328 Mem.mem_inject
+R43354 Cminorgenproof.match_callstack
+R43475 Mem.nextblock
+R43459 Mem.nextblock
+R43424 Coq.Lists.List "x :: y" list_scope
+R43374 Cminorgenproof.mkframe
+R43413 Mem.nextblock
+R43398 Mem.nextblock
+R43241 Cminor.set_locals
+R43259 Cminor.set_params
+R43174 Coq.Lists.List.map
+R43215 Cminorgenproof.fn_vars
+R43185 Coq.Init.Datatypes.fst
+R43195 Cminorplus.local_variable
+R43189 AST.ident
+R43104 Coq.Lists.List.map
+R43143 Cminorgenproof.fn_params
+R43115 Coq.Init.Datatypes.fst
+R43125 AST.memory_chunk
+R43119 AST.ident
+R43066 Mem.mem_inject
+R43009 Cminorgenproof.match_callstack
+R43048 Mem.nextblock
+R43033 Mem.nextblock
+R42992 Coq.Init.Logic "x = y" type_scope
+R42974 Mem.alloc
+R42994 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R42913 Cminorplus.alloc_variables
+R42944 Cminorplus.fn_variables
+R42929 Cminorgenproof.empty_env
+R42890 Coq.ZArith.BinInt "x <= y" Z_scope
+R42893 Integers.max_signed
+R42869 Coq.Init.Logic "x = y" type_scope
+R42850 Cminorgen.build_compilenv
+R42871 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R43525 Coq.Init.Logic "x = y" type_scope
+R43527 Mem.nextblock
+R43525 Coq.Init.Logic "x = y" type_scope
+R43527 Mem.nextblock
+R43603 Cminorgenproof.match_callstack_alloc_variables_rec
+R43603 Cminorgenproof.match_callstack_alloc_variables_rec
+R43673 Mem.valid_new_block
+R43673 Mem.valid_new_block
+R43708 Mem.low_bound_alloc
+R43708 Mem.low_bound_alloc
+R43748 Coqlib.zeq_true
+R43748 Coqlib.zeq_true
+R43769 Mem.high_bound_alloc
+R43769 Mem.high_bound_alloc
+R43810 Coqlib.zeq_true
+R43810 Coqlib.zeq_true
+R43875 Mem.valid_block
+R43875 Mem.valid_block
+R43903 Mem.valid_new_block
+R43903 Mem.valid_new_block
+R43981 Maps.gi
+R43981 Maps.gi
+R44034 Maps.gempty
+R44034 Maps.gempty
+R44152 Maps.gempty
+R44152 Maps.gempty
+R44245 Maps.gempty
+R44245 Maps.gempty
+R44306 Mem.mi_mappedblocks
+R44306 Mem.mi_mappedblocks
+R44360 Mem.fresh_block_alloc
+R44360 Mem.fresh_block_alloc
+R44432 Mem.mi_mappedblocks
+R44432 Mem.mi_mappedblocks
+R44527 Mem.alloc_right_inject
+R44527 Mem.alloc_right_inject
+R44579 Mem.mi_mappedblocks
+R44579 Mem.mi_mappedblocks
+R44708 Cminorgenproof.set_locals_params_defined
+R44708 Cminorgenproof.set_locals_params_defined
+R44823 Cminorgenproof.fn_params
+R44797 Cminorplus.fn_params
+R44823 Cminorgenproof.fn_params
+R44797 Cminorplus.fn_params
+R44876 Cminorgenproof.fn_vars
+R44852 Cminorplus.fn_vars
+R44876 Cminorgenproof.fn_vars
+R44852 Cminorplus.fn_vars
+R44902 Coq.Lists.List.in_app_or
+R44902 Coq.Lists.List.in_app_or
+R44939 Coqlib.list_in_map_inv
+R44939 Coqlib.list_in_map_inv
+R44990 Coq.Lists.List.in_or_app
+R44990 Coq.Lists.List.in_or_app
+R45026 Coq.Lists.List.in_map
+R45026 Coq.Lists.List.in_map
+R45053 Coq.Lists.List.in_or_app
+R45053 Coq.Lists.List.in_or_app
+R45090 Coq.Init.Datatypes.fst
+R45094 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R45090 Coq.Init.Datatypes.fst
+R45094 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R45111 Coq.Lists.List.in_map
+R45111 Coq.Lists.List.in_map
+R45260 Coq.ZArith.BinInt "x <= y" Z_scope
+R45247 Mem.nextblock
+R45263 Mem.nextblock
+R45206 Cminorplus.alloc_variables
+R45536 Coq.Init.Logic "A <-> B" type_scope
+R45514 Coq.ZArith.BinInt "x <= y < z" Z_scope
+R45503 Mem.nextblock
+R45525 Mem.nextblock
+R45540 Coq.Lists.List.In
+R45448 Cminorplus.alloc_variables
+R45688 Coq.Init.Logic "x = y" type_scope
+R45676 Mem.nextblock
+R45688 Coq.Init.Logic "x = y" type_scope
+R45676 Mem.nextblock
+R45745 Coq.Init.Logic "x = y" type_scope
+R45732 Mem.nextblock
+R45747 Coq.ZArith.BinInt.Zsucc
+R45754 Mem.nextblock
+R45745 Coq.Init.Logic "x = y" type_scope
+R45732 Mem.nextblock
+R45747 Coq.ZArith.BinInt.Zsucc
+R45754 Mem.nextblock
+R45867 Coq.Init.Logic "A \/ B" type_scope
+R45863 Coq.Init.Logic "x = y" type_scope
+R45851 Mem.nextblock
+R45883 Coq.ZArith.BinInt "x <= y < z" Z_scope
+R45870 Mem.nextblock
+R45890 Mem.nextblock
+R45867 Coq.Init.Logic "A \/ B" type_scope
+R45863 Coq.Init.Logic "x = y" type_scope
+R45851 Mem.nextblock
+R45883 Coq.ZArith.BinInt "x <= y < z" Z_scope
+R45870 Mem.nextblock
+R45890 Mem.nextblock
+R46036 Cminorgenproof.alloc_variables_nextblock_incr
+R46036 Cminorgenproof.alloc_variables_nextblock_incr
+R46236 Cminor.env
+R46224 Coq.Lists.List.list
+R46229 Values.val
+R46193 Coq.Lists.List.list
+R46205 Coq.Init.Datatypes "x * y" type_scope
+R46199 AST.ident
+R46207 AST.memory_chunk
+R46183 Mem.meminj
+R46317 Coq.Lists.List.nil
+R46313 Coq.Lists.List.nil
+R46528 Coq.Lists.List "x :: y" list_scope
+R46516 Coq.Lists.List "x :: y" list_scope
+R46504 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R46418 Mem.val_inject
+R46399 Coq.Init.Logic "x = y" type_scope
+R46395 Maps "a ! b"
+R46401 Coq.Init.Datatypes.Some
+R46710 Cminorgenproof.vars_vals_match
+R46696 Coq.Init.Logic "x = y" type_scope
+R46692 Maps "a ! b"
+R46700 Maps "a ! b"
+R46669 Coq.Lists.List.In
+R46672 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R46604 Cminorgenproof.vars_vals_match
+R47283 Coq.Init.Logic "'exists' x , p" type_scope
+R47295 Coq.Init.Logic "'exists' x , p" type_scope
+R47447 Coq.Init.Logic "A /\ B" type_scope
+R47312 Cminor.exec_stmtlist
+R47434 Cminor.Out_normal
+R47377 Cminorgen.store_parameters
+R47331 Values.Vptr
+R47339 Integers.zero
+R47472 Coq.Init.Logic "A /\ B" type_scope
+R47450 Mem.mem_inject
+R47475 Cminorgenproof.match_callstack
+R47549 Mem.nextblock
+R47533 Mem.nextblock
+R47522 Coq.Lists.List "x :: y" list_scope
+R47494 Cminorgenproof.mkframe
+R47190 Cminorgenproof.match_callstack
+R47264 Mem.nextblock
+R47248 Mem.nextblock
+R47237 Coq.Lists.List "x :: y" list_scope
+R47209 Cminorgenproof.mkframe
+R47165 Mem.mem_inject
+R47103 Coqlib.list_norepet
+R47117 Coq.Lists.List.map
+R47128 Coq.Init.Datatypes.fst
+R47138 AST.memory_chunk
+R47132 AST.ident
+R47066 Cminorgenproof.vars_vals_match
+R46990 Cminorplus.bind_parameters
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R47961 Coq.Init.Logic "x = y" type_scope
+R47948 Mem.nextblock
+R47963 Mem.nextblock
+R47961 Coq.Init.Logic "x = y" type_scope
+R47948 Mem.nextblock
+R47963 Mem.nextblock
+R47993 Mem.store_inv
+R47993 Mem.store_inv
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R48153 Cminorplus.local_variable
+R48131 Cminorgenproof.local_variable
+R48153 Cminorplus.local_variable
+R48131 Cminorgenproof.local_variable
+R48256 Coq.Init.Logic "x = y" type_scope
+R48256 Coq.Init.Logic "x = y" type_scope
+R48295 Cminor.eval_expr
+R48341 Cminor.Evar
+R48328 Coq.Lists.List.nil
+R48310 Values.Vptr
+R48318 Integers.zero
+R48295 Cminor.eval_expr
+R48341 Cminor.Evar
+R48328 Coq.Lists.List.nil
+R48310 Values.Vptr
+R48318 Integers.zero
+R48400 Cminorgenproof.make_cast_correct
+R48400 Cminorgenproof.make_cast_correct
+R48521 Maps.set
+R48521 Maps.set
+R48560 Cminorgenproof.vars_vals_match
+R48560 Cminorgenproof.vars_vals_match
+R48604 Cminorgenproof.vars_vals_match_extensional
+R48604 Cminorgenproof.vars_vals_match_extensional
+R48678 Maps.gso
+R48678 Maps.gso
+R48741 Coq.Init.Datatypes.fst
+R48745 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R48741 Coq.Init.Datatypes.fst
+R48745 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R48762 Coq.Lists.List.in_map
+R48762 Coq.Lists.List.in_map
+R48795 Mem.store_unmapped_inject
+R48795 Mem.store_unmapped_inject
+R48873 Cminorgenproof.match_callstack_store_local
+R48873 Cminorgenproof.match_callstack_store_local
+R49195 Cminor.exec_Scons_continue
+R49195 Cminor.exec_Scons_continue
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R49408 Cminorplus.local_variable
+R49386 Cminorgenproof.local_variable
+R49408 Cminorplus.local_variable
+R49386 Cminorgenproof.local_variable
+R49515 Cminorgenproof.make_stackaddr_correct
+R49541 Coq.Lists.List.nil
+R49515 Cminorgenproof.make_stackaddr_correct
+R49541 Coq.Lists.List.nil
+R49576 Cminor.eval_expr
+R49622 Cminor.Evar
+R49609 Coq.Lists.List.nil
+R49591 Values.Vptr
+R49599 Integers.zero
+R49576 Cminor.eval_expr
+R49622 Cminor.Evar
+R49609 Coq.Lists.List.nil
+R49591 Values.Vptr
+R49599 Integers.zero
+R49679 Cminorgenproof.make_store_correct
+R49747 Values.Vptr
+R49754 Integers.zero
+R49679 Cminorgenproof.make_store_correct
+R49747 Values.Vptr
+R49754 Integers.zero
+R49873 Coq.Init.Logic "x <> y" type_scope
+R49876 Coq.Init.Datatypes.None
+R49873 Coq.Init.Logic "x <> y" type_scope
+R49876 Coq.Init.Datatypes.None
+R49923 Cminorgenproof.match_callstack_mapped
+R49923 Cminorgenproof.match_callstack_mapped
+R50210 Cminor.exec_Scons_continue
+R50210 Cminor.exec_Scons_continue
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R50393 Cminorplus.local_variable
+R50371 Cminorgenproof.local_variable
+R50393 Cminorplus.local_variable
+R50371 Cminorgenproof.local_variable
+R50460 Cminorplus.local_variable
+R50438 Cminorgenproof.local_variable
+R50460 Cminorplus.local_variable
+R50438 Cminorgenproof.local_variable
+R50704 Cminorgenproof.vars_vals_match
+R50739 Cminor.set_params
+R50757 Coq.Lists.List.map
+R50768 Coq.Init.Datatypes.fst
+R50778 AST.memory_chunk
+R50772 AST.ident
+R50670 Mem.val_list_inject
+R50646 Coq.Init.Logic "x = y" type_scope
+R50627 Coq.Lists.List.length
+R50648 Coq.Lists.List.length
+R50565 Coqlib.list_norepet
+R50579 Coq.Lists.List.map
+R50590 Coq.Init.Datatypes.fst
+R50600 AST.memory_chunk
+R50594 AST.ident
+R51016 Maps.gss
+R51016 Maps.gss
+R51093 Cminor.set_params
+R51109 Coq.Lists.List.map
+R51115 Coq.Init.Datatypes.fst
+R51125 AST.memory_chunk
+R51119 AST.ident
+R51057 Cminorgenproof.vars_vals_match_extensional
+R51093 Cminor.set_params
+R51109 Coq.Lists.List.map
+R51115 Coq.Init.Datatypes.fst
+R51125 AST.memory_chunk
+R51119 AST.ident
+R51057 Cminorgenproof.vars_vals_match_extensional
+R51199 Maps.gso
+R51199 Maps.gso
+R51275 Coq.Init.Datatypes.fst
+R51279 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R51252 Coq.Init.Datatypes.fst
+R51256 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R51275 Coq.Init.Datatypes.fst
+R51279 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R51252 Coq.Init.Datatypes.fst
+R51256 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R51299 Coq.Lists.List.in_map
+R51299 Coq.Lists.List.in_map
+R51597 Cminorgenproof.vars_vals_match
+R51632 Cminor.set_locals
+R51694 Cminor.set_params
+R51712 Coq.Lists.List.map
+R51723 Coq.Init.Datatypes.fst
+R51733 AST.memory_chunk
+R51727 AST.ident
+R51644 Coq.Lists.List.map
+R51655 Coq.Init.Datatypes.fst
+R51665 Cminorplus.local_variable
+R51659 AST.ident
+R51477 Coqlib.list_norepet
+R51546 Coq.Lists.List "x ++ y" list_scope
+R51491 Coq.Lists.List.map
+R51502 Coq.Init.Datatypes.fst
+R51512 Cminorplus.local_variable
+R51506 AST.ident
+R51549 Coq.Lists.List.map
+R51560 Coq.Init.Datatypes.fst
+R51570 AST.memory_chunk
+R51564 AST.ident
+R51428 Mem.val_list_inject
+R51404 Coq.Init.Logic "x = y" type_scope
+R51385 Coq.Lists.List.length
+R51406 Coq.Lists.List.length
+R51807 Cminorgenproof.vars_vals_match_holds_1
+R51807 Cminorgenproof.vars_vals_match_holds_1
+R51877 Cminorgenproof.vars_vals_match_extensional
+R51877 Cminorgenproof.vars_vals_match_extensional
+R51929 Maps.gso
+R51929 Maps.gso
+R51979 Coq.Lists.List.in_or_app
+R51979 Coq.Lists.List.in_or_app
+R52018 Coq.Init.Datatypes.fst
+R52022 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R52023 Coq.Init.Datatypes.fst
+R52005 Coq.Init.Datatypes.fst
+R52018 Coq.Init.Datatypes.fst
+R52022 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R52023 Coq.Init.Datatypes.fst
+R52005 Coq.Init.Datatypes.fst
+R52044 Coq.Lists.List.in_map
+R52044 Coq.Lists.List.in_map
+R52191 Coq.Init.Logic "x = y" type_scope
+R52172 Coq.Lists.List.length
+R52193 Coq.Lists.List.length
+R52131 Cminorplus.bind_parameters
+R52816 Coq.Init.Logic "'exists' x , p" type_scope
+R52827 Coq.Init.Logic "'exists' x , p" type_scope
+R52839 Coq.Init.Logic "'exists' x , p" type_scope
+R52998 Coq.Init.Logic "A /\ B" type_scope
+R52856 Cminor.exec_stmtlist
+R52985 Cminor.Out_normal
+R52919 Cminorgen.store_parameters
+R52945 Cminorgenproof.fn_params
+R52875 Values.Vptr
+R52883 Integers.zero
+R53024 Coq.Init.Logic "A /\ B" type_scope
+R53001 Mem.mem_inject
+R53046 Coq.Init.Logic "A /\ B" type_scope
+R53027 Mem.inject_incr
+R53177 Coq.Init.Logic "A /\ B" type_scope
+R53049 Cminorgenproof.match_callstack
+R53161 Mem.nextblock
+R53145 Mem.nextblock
+R53127 Coq.Lists.List "x :: y" list_scope
+R53076 Cminorgenproof.mkframe
+R53116 Mem.nextblock
+R53101 Mem.nextblock
+R53227 Coq.Init.Logic "A <-> B" type_scope
+R53205 Coq.ZArith.BinInt "x <= y < z" Z_scope
+R53194 Mem.nextblock
+R53216 Mem.nextblock
+R53231 Coq.Lists.List.In
+R52757 Coqlib.list_norepet
+R52790 Coq.Lists.List "x ++ y" list_scope
+R52771 Cminorplus.fn_params_names
+R52793 Cminorplus.fn_vars_names
+R52734 Mem.mem_inject
+R52698 Mem.val_list_inject
+R52622 Cminor.set_locals
+R52653 Cminor.set_params
+R52672 Cminorplus.fn_params_names
+R52634 Cminorplus.fn_vars_names
+R52591 Coq.Init.Logic "x = y" type_scope
+R52573 Mem.alloc
+R52593 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R52550 Coq.ZArith.BinInt "x <= y" Z_scope
+R52553 Integers.max_signed
+R52529 Coq.Init.Logic "x = y" type_scope
+R52510 Cminorgen.build_compilenv
+R52531 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R52453 Cminorgenproof.match_callstack
+R52492 Mem.nextblock
+R52477 Mem.nextblock
+R52401 Cminorplus.bind_parameters
+R52426 Cminorgenproof.fn_params
+R52342 Cminorplus.alloc_variables
+R52371 Cminorplus.fn_variables
+R52358 Cminorplus.empty_env
+R53273 Cminorgenproof.bind_parameters_length
+R53273 Cminorgenproof.bind_parameters_length
+R53335 Cminorgenproof.match_callstack_alloc_variables
+R53335 Cminorgenproof.match_callstack_alloc_variables
+R53501 Mem.val_list_inject
+R53501 Mem.val_list_inject
+R53546 Mem.val_list_inject_incr
+R53546 Mem.val_list_inject_incr
+R53589 Cminorgenproof.vars_vals_match_holds
+R53648 Coqlib.list_norepet_append_commut
+R53589 Cminorgenproof.vars_vals_match_holds
+R53648 Coqlib.list_norepet_append_commut
+R53726 Coqlib.list_norepet
+R53740 Coq.Lists.List.map
+R53779 Cminorgenproof.fn_params
+R53751 Coq.Init.Datatypes.fst
+R53761 AST.memory_chunk
+R53755 AST.ident
+R53726 Coqlib.list_norepet
+R53740 Coq.Lists.List.map
+R53779 Cminorgenproof.fn_params
+R53751 Coq.Init.Datatypes.fst
+R53761 AST.memory_chunk
+R53755 AST.ident
+R53840 Coqlib.list_norepet_append_left
+R53840 Coqlib.list_norepet_append_left
+R53885 Cminorgenproof.store_parameters_correct
+R53885 Cminorgenproof.store_parameters_correct
+R54133 Cminorgenproof.alloc_variables_list_block
+R54133 Cminorgenproof.alloc_variables_list_block
+R54306 Coq.Init.Logic "x = y" type_scope
+R54291 Cminorgen.bind
+R54308 Coq.Init.Datatypes.Some
+R54565 Coq.Init.Logic "x = y" type_scope
+R54560 Coq.Init.Datatypes.None
+R54567 Coq.Init.Datatypes.Some
+R54628 Coq.Init.Logic "x = y" type_scope
+R54621 Coq.Init.Datatypes.Some
+R54630 Coq.Init.Datatypes.Some
+R54369 Coq.Init.Logic.refl_equal
+R54791 Coq.Init.Logic "x = y" type_scope
+R54776 Cminorgen.bind
+R54793 Coq.Init.Datatypes.Some
+R54839 Coq.Init.Logic "x = y" type_scope
+R54834 Coq.Init.Datatypes.None
+R54841 Coq.Init.Datatypes.Some
+R54888 Coq.Init.Logic "x = y" type_scope
+R54881 Coq.Init.Datatypes.Some
+R54890 Coq.Init.Datatypes.Some
+R54947 Coq.Init.Logic "x = y" type_scope
+R54949 Coq.Init.Datatypes.Some
+R55013 Coq.Init.Logic "x = y" type_scope
+R55015 Coq.Init.Datatypes.Some
+R55077 Coq.Init.Logic "x = y" type_scope
+R55079 Coq.Init.Datatypes.Some
+R55139 Coq.Init.Logic "x = y" type_scope
+R55141 Coq.Init.Datatypes.Some
+R55199 Coq.Init.Logic "x = y" type_scope
+R55201 Coq.Init.Datatypes.Some
+R55257 Coq.Init.Logic "x = y" type_scope
+R55259 Coq.Init.Datatypes.Some
+R55313 Coq.Init.Logic "x = y" type_scope
+R55315 Coq.Init.Datatypes.Some
+R55818 Coq.Init.Logic "'exists' x , p" type_scope
+R55829 Coq.Init.Logic "'exists' x , p" type_scope
+R55841 Coq.Init.Logic "'exists' x , p" type_scope
+R55853 Coq.Init.Logic "'exists' x , p" type_scope
+R55930 Coq.Init.Logic "A /\ B" type_scope
+R55869 Cminor.eval_expr
+R55884 Values.Vptr
+R55892 Integers.zero
+R55954 Coq.Init.Logic "A /\ B" type_scope
+R55933 Mem.val_inject
+R55980 Coq.Init.Logic "A /\ B" type_scope
+R55957 Mem.mem_inject
+R56003 Coq.Init.Logic "A /\ B" type_scope
+R55983 Mem.inject_incr
+R56006 Cminorgenproof.match_callstack
+R56097 Mem.nextblock
+R56081 Mem.nextblock
+R56062 Coq.Lists.List "x :: y" list_scope
+R56034 Cminorgenproof.mkframe
+R55703 Cminorgenproof.match_callstack
+R55800 Mem.nextblock
+R55784 Mem.nextblock
+R55762 Coq.Lists.List "x :: y" list_scope
+R55734 Cminorgenproof.mkframe
+R55671 Mem.mem_inject
+R55635 Mem.val_list_inject
+R55615 Coq.Init.Logic "x = y" type_scope
+R55596 Cminorgen.transl_expr
+R55617 Coq.Init.Datatypes.Some
+R55530 Values.val
+R55521 Mem.mem
+R55508 Cminorgenproof.expr
+R55499 Mem.mem
+R55487 Cminorgenproof.env
+R55473 Cminorgenproof.letenv
+R56515 Coq.Init.Logic "'exists' x , p" type_scope
+R56526 Coq.Init.Logic "'exists' x , p" type_scope
+R56538 Coq.Init.Logic "'exists' x , p" type_scope
+R56550 Coq.Init.Logic "'exists' x , p" type_scope
+R56634 Coq.Init.Logic "A /\ B" type_scope
+R56567 Cminor.eval_exprlist
+R56586 Values.Vptr
+R56594 Integers.zero
+R56665 Coq.Init.Logic "A /\ B" type_scope
+R56637 Mem.val_list_inject
+R56691 Coq.Init.Logic "A /\ B" type_scope
+R56668 Mem.mem_inject
+R56714 Coq.Init.Logic "A /\ B" type_scope
+R56694 Mem.inject_incr
+R56717 Cminorgenproof.match_callstack
+R56808 Mem.nextblock
+R56792 Mem.nextblock
+R56773 Coq.Lists.List "x :: y" list_scope
+R56745 Cminorgenproof.mkframe
+R56400 Cminorgenproof.match_callstack
+R56497 Mem.nextblock
+R56481 Mem.nextblock
+R56459 Coq.Lists.List "x :: y" list_scope
+R56431 Cminorgenproof.mkframe
+R56368 Mem.mem_inject
+R56332 Mem.val_list_inject
+R56311 Coq.Init.Logic "x = y" type_scope
+R56287 Cminorgen.transl_exprlist
+R56313 Coq.Init.Datatypes.Some
+R56215 Coq.Lists.List.list
+R56220 Values.val
+R56205 Mem.mem
+R56188 Cminorgenproof.exprlist
+R56178 Mem.mem
+R56166 Cminorgenproof.env
+R56152 Cminorgenproof.letenv
+R57143 Coq.Init.Logic "'exists' x , p" type_scope
+R57154 Coq.Init.Logic "'exists' x , p" type_scope
+R57166 Coq.Init.Logic "'exists' x , p" type_scope
+R57226 Coq.Init.Logic "A /\ B" type_scope
+R57184 Cminor.eval_funcall
+R57254 Coq.Init.Logic "A /\ B" type_scope
+R57229 Mem.val_inject
+R57280 Coq.Init.Logic "A /\ B" type_scope
+R57257 Mem.mem_inject
+R57303 Coq.Init.Logic "A /\ B" type_scope
+R57283 Mem.inject_incr
+R57306 Cminorgenproof.match_callstack
+R57348 Mem.nextblock
+R57332 Mem.nextblock
+R57109 Mem.val_list_inject
+R57040 Cminorgenproof.match_callstack
+R57082 Mem.nextblock
+R57066 Mem.nextblock
+R57008 Mem.mem_inject
+R56987 Coq.Init.Logic "x = y" type_scope
+R56968 Cminorgen.transl_function
+R56989 Coq.Init.Datatypes.Some
+R56917 Values.val
+R56906 Mem.mem
+R56891 Coq.Lists.List.list
+R56896 Values.val
+R56872 Cminorgenproof.function
+R56862 Mem.mem
+R57393 Mem.meminj
+R57416 Cminor.outcome
+R57403 Cminorgenproof.outcome
+R57498 Cminor.Out_normal
+R57485 Cminorgenproof.Out_normal
+R57583 Cminor.Out_exit
+R57568 Cminorgenproof.Out_exit
+R57671 Cminor.Out_return
+R57682 Coq.Init.Datatypes.None
+R57651 Cminorgenproof.Out_return
+R57664 Coq.Init.Datatypes.None
+R57817 Cminor.Out_return
+R57829 Coq.Init.Datatypes.Some
+R57792 Cminorgenproof.Out_return
+R57806 Coq.Init.Datatypes.Some
+R57746 Mem.val_inject
+R58173 Coq.Init.Logic "'exists' x , p" type_scope
+R58184 Coq.Init.Logic "'exists' x , p" type_scope
+R58196 Coq.Init.Logic "'exists' x , p" type_scope
+R58208 Coq.Init.Logic "'exists' x , p" type_scope
+R58285 Coq.Init.Logic "A /\ B" type_scope
+R58226 Cminor.exec_stmt
+R58241 Values.Vptr
+R58249 Integers.zero
+R58317 Coq.Init.Logic "A /\ B" type_scope
+R58288 Cminorgenproof.outcome_inject
+R58343 Coq.Init.Logic "A /\ B" type_scope
+R58320 Mem.mem_inject
+R58366 Coq.Init.Logic "A /\ B" type_scope
+R58346 Mem.inject_incr
+R58369 Cminorgenproof.match_callstack
+R58460 Mem.nextblock
+R58444 Mem.nextblock
+R58425 Coq.Lists.List "x :: y" list_scope
+R58397 Cminorgenproof.mkframe
+R58058 Cminorgenproof.match_callstack
+R58155 Mem.nextblock
+R58139 Mem.nextblock
+R58117 Coq.Lists.List "x :: y" list_scope
+R58089 Cminorgenproof.mkframe
+R58026 Mem.mem_inject
+R58006 Coq.Init.Logic "x = y" type_scope
+R57987 Cminorgen.transl_stmt
+R58008 Coq.Init.Datatypes.Some
+R57920 Cminorgenproof.outcome
+R57909 Mem.mem
+R57896 Cminorgenproof.stmt
+R57887 Mem.mem
+R57875 Cminorgenproof.env
+R58820 Coq.Init.Logic "'exists' x , p" type_scope
+R58831 Coq.Init.Logic "'exists' x , p" type_scope
+R58843 Coq.Init.Logic "'exists' x , p" type_scope
+R58855 Coq.Init.Logic "'exists' x , p" type_scope
+R58936 Coq.Init.Logic "A /\ B" type_scope
+R58873 Cminor.exec_stmtlist
+R58892 Values.Vptr
+R58900 Integers.zero
+R58968 Coq.Init.Logic "A /\ B" type_scope
+R58939 Cminorgenproof.outcome_inject
+R58994 Coq.Init.Logic "A /\ B" type_scope
+R58971 Mem.mem_inject
+R59017 Coq.Init.Logic "A /\ B" type_scope
+R58997 Mem.inject_incr
+R59020 Cminorgenproof.match_callstack
+R59111 Mem.nextblock
+R59095 Mem.nextblock
+R59076 Coq.Lists.List "x :: y" list_scope
+R59048 Cminorgenproof.mkframe
+R58705 Cminorgenproof.match_callstack
+R58802 Mem.nextblock
+R58786 Mem.nextblock
+R58764 Coq.Lists.List "x :: y" list_scope
+R58736 Cminorgenproof.mkframe
+R58673 Mem.mem_inject
+R58653 Coq.Init.Logic "x = y" type_scope
+R58630 Cminorgen.transl_stmtlist
+R58655 Coq.Init.Datatypes.Some
+R58563 Cminorgenproof.outcome
+R58552 Mem.mem
+R58535 Cminorgenproof.stmtlist
+R58526 Mem.mem
+R58514 Cminorgenproof.env
+R59381 Cminorgenproof.eval_expr_prop
+R59404 Cminorgenproof.Evar
+R59366 Coq.Init.Logic "x = y" type_scope
+R59349 Mem.load
+R59368 Coq.Init.Datatypes.Some
+R59316 Coq.Init.Logic "x = y" type_scope
+R59311 Maps "a ! b"
+R59318 Coq.Init.Datatypes.Some
+R59323 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R59327 Cminorplus.LVscalar
+R59300 Values.val
+R59281 AST.memory_chunk
+R59265 Values.block
+R59245 Coq.NArith.BinPos.positive
+R59234 Mem.mem
+R59195 Maps.t
+R59210 Coq.Init.Datatypes "x * y" type_scope
+R59204 Values.block
+R59212 Cminorplus.local_variable
+R59175 Cminorgenproof.letenv
+R59490 Cminorgenproof.var_get_correct
+R59490 Cminorgenproof.var_get_correct
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R60045 Cminorgenproof.eval_expr_prop
+R60068 Cminorgenproof.Eassign
+R60029 Coq.Init.Logic "x = y" type_scope
+R60007 Mem.store
+R60031 Coq.Init.Datatypes.Some
+R59991 Coq.Init.Logic "x = y" type_scope
+R59977 Cminorplus.cast
+R59993 Coq.Init.Datatypes.Some
+R59944 Coq.Init.Logic "x = y" type_scope
+R59939 Maps "a ! b"
+R59946 Coq.Init.Datatypes.Some
+R59951 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R59955 Cminorplus.LVscalar
+R59901 Cminorgenproof.eval_expr_prop
+R59865 Cminorgenproof.eval_expr
+R59856 Mem.mem
+R59845 Values.val
+R59845 Values.val
+R59822 AST.memory_chunk
+R59801 Values.block
+R59791 Mem.mem
+R59777 Cminorgenproof.expr
+R59762 Coq.NArith.BinPos.positive
+R59746 Mem.mem
+R59734 Cminorgenproof.env
+R59719 Cminorgenproof.letenv
+R60291 Cminorgenproof.var_set_correct
+R60291 Cminorgenproof.var_set_correct
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R60736 Cminorgenproof.eval_expr_prop
+R60774 Values.Vptr
+R60781 Integers.zero
+R60759 Cminorplus.Eaddrof
+R60715 Coq.Init.Logic "x = y" type_scope
+R60710 Maps "a ! b"
+R60717 Coq.Init.Datatypes.Some
+R60722 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R60688 Cminorplus.local_variable
+R60675 Values.block
+R60655 Coq.NArith.BinPos.positive
+R60644 Mem.mem
+R60605 Maps.t
+R60620 Coq.Init.Datatypes "x * y" type_scope
+R60614 Values.block
+R60622 Cminorplus.local_variable
+R60585 Cminorgenproof.letenv
+R60850 Cminorgenproof.var_addr_local_correct
+R60850 Cminorgenproof.var_addr_local_correct
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R61243 Cminorgenproof.eval_expr_prop
+R61281 Values.Vptr
+R61288 Integers.zero
+R61266 Cminorplus.Eaddrof
+R61228 Coq.Init.Logic "x = y" type_scope
+R61205 Globalenvs.find_symbol
+R61230 Coq.Init.Datatypes.Some
+R61192 Coq.Init.Logic "x = y" type_scope
+R61187 Maps "a ! b"
+R61194 Coq.Init.Datatypes.None
+R61174 Values.block
+R61154 Coq.NArith.BinPos.positive
+R61143 Mem.mem
+R61104 Maps.t
+R61119 Coq.Init.Datatypes "x * y" type_scope
+R61113 Values.block
+R61121 Cminorplus.local_variable
+R61084 Cminorgenproof.letenv
+R61357 Cminorgenproof.var_addr_global_correct
+R61357 Cminorgenproof.var_addr_global_correct
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R61825 Cminorgenproof.eval_expr_prop
+R61848 Cminorgenproof.Eop
+R61810 Coq.Init.Logic "x = y" type_scope
+R61784 Cminorgenproof.eval_operation
+R61812 Coq.Init.Datatypes.Some
+R61743 Cminorgenproof.eval_exprlist_prop
+R61702 Cminorgenproof.eval_exprlist
+R61693 Values.val
+R61678 Coq.Lists.List.list
+R61683 Values.val
+R61662 Mem.mem
+R61644 Cminorgenproof.exprlist
+R61625 Cminorgenproof.operation
+R61609 Mem.mem
+R61597 Cminorgenproof.env
+R61582 Cminorgenproof.letenv
+R62065 Cminorgenproof.make_op_correct
+R62065 Cminorgenproof.make_op_correct
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R62507 Cminorgenproof.eval_expr_prop
+R62530 Cminorgenproof.Eload
+R62492 Coq.Init.Logic "x = y" type_scope
+R62474 Mem.loadv
+R62494 Coq.Init.Datatypes.Some
+R62438 Cminorgenproof.eval_expr_prop
+R62402 Cminorgenproof.eval_expr
+R62393 Values.val
+R62393 Values.val
+R62375 Mem.mem
+R62361 Cminorgenproof.expr
+R62342 AST.memory_chunk
+R62323 Mem.mem
+R62311 Cminorgenproof.env
+R62296 Cminorgenproof.letenv
+R62732 Mem.loadv_inject
+R62732 Mem.loadv_inject
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R62879 Cminorgenproof.make_load_correct
+R62879 Cminorgenproof.make_load_correct
+R63326 Cminorgenproof.eval_expr_prop
+R63349 Cminorgenproof.Estore
+R63310 Coq.Init.Logic "x = y" type_scope
+R63288 Mem.storev
+R63312 Coq.Init.Datatypes.Some
+R63272 Coq.Init.Logic "x = y" type_scope
+R63258 Cminorplus.cast
+R63274 Coq.Init.Datatypes.Some
+R63221 Cminorgenproof.eval_expr_prop
+R63184 Cminorgenproof.eval_expr
+R63148 Cminorgenproof.eval_expr_prop
+R63112 Cminorgenproof.eval_expr
+R63103 Values.val
+R63092 Mem.mem
+R63081 Values.val
+R63070 Mem.mem
+R63059 Values.val
+R63043 Mem.mem
+R63029 Cminorgenproof.expr
+R63029 Cminorgenproof.expr
+R63008 AST.memory_chunk
+R62989 Mem.mem
+R62977 Cminorgenproof.env
+R62962 Cminorgenproof.letenv
+R63559 Mem.val_list_inject
+R63559 Mem.val_list_inject
+R63594 Mem.val_list_inject_incr
+R63594 Mem.val_list_inject_incr
+R63768 Mem.val_inject
+R63768 Mem.val_inject
+R63798 Mem.val_inject_incr
+R63798 Mem.val_inject_incr
+R63834 Cminorgenproof.make_store_correct
+R63834 Cminorgenproof.make_store_correct
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R64079 Mem.inject_incr_trans
+R64079 Mem.inject_incr_trans
+R64115 Mem.val_inject
+R64115 Mem.val_inject
+R64145 Mem.val_inject_incr
+R64145 Mem.val_inject_incr
+R64270 Mem.nextblock
+R64290 Mem.nextblock
+R64270 Mem.nextblock
+R64290 Mem.nextblock
+R64314 Cminorgenproof.match_callstack_mapped
+R64314 Cminorgenproof.match_callstack_mapped
+R64372 Mem.store_inv
+R64372 Mem.store_inv
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R64514 Coq.Init.Logic "x = y" type_scope
+R64506 Cminor.fn_sig
+R64519 Cminorgenproof.fn_sig
+R64489 Coq.Init.Logic "x = y" type_scope
+R64471 Cminorgen.transl_function
+R64491 Coq.Init.Datatypes.Some
+R64588 Cminorgen.build_compilenv
+R64588 Cminorgen.build_compilenv
+R64616 Coqlib.zle
+R64622 Integers.max_signed
+R64616 Coqlib.zle
+R64622 Integers.max_signed
+R65239 Cminorgenproof.eval_expr_prop
+R65262 Cminorgenproof.Ecall
+R65196 Cminorgenproof.eval_funcall_prop
+R65153 Cminorgenproof.eval_funcall
+R65141 Coq.Init.Logic "x = y" type_scope
+R65130 Cminorgenproof.fn_sig
+R65115 Coq.Init.Logic "x = y" type_scope
+R65093 Globalenvs.find_funct
+R65117 Coq.Init.Datatypes.Some
+R65048 Cminorgenproof.eval_exprlist_prop
+R65003 Cminorgenproof.eval_exprlist
+R64967 Cminorgenproof.eval_expr_prop
+R64931 Cminorgenproof.eval_expr
+R64915 Cminorgenproof.function
+R64900 Values.val
+R64882 Coq.Lists.List.list
+R64887 Values.val
+R64868 Values.val
+R64857 Mem.mem
+R64857 Mem.mem
+R64857 Mem.mem
+R64828 Cminorgenproof.exprlist
+R64814 Cminorgenproof.expr
+R64798 AST.signature
+R64781 Mem.mem
+R64769 Cminorgenproof.env
+R64754 Cminorgenproof.letenv
+R65488 Mem.val_list_inject
+R65488 Mem.val_list_inject
+R65523 Mem.val_list_inject_incr
+R65523 Mem.val_list_inject_incr
+R65700 Coq.Init.Logic "x = y" type_scope
+R65700 Coq.Init.Logic "x = y" type_scope
+R65717 Globalenvs.find_funct_inv
+R65717 Globalenvs.find_funct_inv
+R65786 Globalenvs.find_funct_find_funct_ptr
+R65786 Globalenvs.find_funct_find_funct_ptr
+R65841 Globalenvs.find_funct_ptr_inv
+R65841 Globalenvs.find_funct_ptr_inv
+R65889 Cminorgenproof.match_globalenvs
+R65889 Cminorgenproof.match_globalenvs
+R65918 Cminorgenproof.match_callstack_match_globalenvs
+R65918 Cminorgenproof.match_callstack_match_globalenvs
+R65975 Cminorgenproof.mg_functions
+R65975 Cminorgenproof.mg_functions
+R66162 Cminorgenproof.functions_translated
+R66162 Cminorgenproof.functions_translated
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R66403 Cminor.eval_Ecall
+R66403 Cminor.eval_Ecall
+R66443 Cminorgenproof.sig_transl_function
+R66443 Cminorgenproof.sig_transl_function
+R66478 Mem.inject_incr_trans
+R66478 Mem.inject_incr_trans
+R66520 Mem.inject_incr_trans
+R66520 Mem.inject_incr_trans
+R66892 Cminorgenproof.eval_expr_prop
+R66915 Cminorgenproof.Econdition
+R66855 Cminorgenproof.eval_expr_prop
+R66818 Cminorgenproof.eval_expr
+R66797 Values.is_true
+R66761 Cminorgenproof.eval_expr_prop
+R66725 Cminorgenproof.eval_expr
+R66716 Values.val
+R66700 Mem.mem
+R66689 Values.val
+R66678 Mem.mem
+R66664 Cminorgenproof.expr
+R66664 Cminorgenproof.expr
+R66664 Cminorgenproof.expr
+R66645 Mem.mem
+R66633 Cminorgenproof.env
+R66618 Cminorgenproof.letenv
+R67125 Mem.val_list_inject
+R67125 Mem.val_list_inject
+R67160 Mem.val_list_inject_incr
+R67160 Mem.val_list_inject_incr
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R67402 Cmconstrproof.eval_conditionalexpr_true
+R67402 Cmconstrproof.eval_conditionalexpr_true
+R67522 Mem.inject_incr_trans
+R67522 Mem.inject_incr_trans
+R67889 Cminorgenproof.eval_expr_prop
+R67912 Cminorgenproof.Econdition
+R67852 Cminorgenproof.eval_expr_prop
+R67815 Cminorgenproof.eval_expr
+R67793 Values.is_false
+R67757 Cminorgenproof.eval_expr_prop
+R67721 Cminorgenproof.eval_expr
+R67712 Values.val
+R67696 Mem.mem
+R67685 Values.val
+R67674 Mem.mem
+R67660 Cminorgenproof.expr
+R67660 Cminorgenproof.expr
+R67660 Cminorgenproof.expr
+R67641 Mem.mem
+R67629 Cminorgenproof.env
+R67614 Cminorgenproof.letenv
+R68122 Mem.val_list_inject
+R68122 Mem.val_list_inject
+R68157 Mem.val_list_inject_incr
+R68157 Mem.val_list_inject_incr
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R68399 Cmconstrproof.eval_conditionalexpr_false
+R68399 Cmconstrproof.eval_conditionalexpr_false
+R68520 Mem.inject_incr_trans
+R68520 Mem.inject_incr_trans
+R68862 Cminorgenproof.eval_expr_prop
+R68885 Cminorgenproof.Elet
+R68817 Cminorgenproof.eval_expr_prop
+R68836 Coq.Lists.List "x :: y" list_scope
+R68772 Cminorgenproof.eval_expr
+R68791 Coq.Lists.List "x :: y" list_scope
+R68736 Cminorgenproof.eval_expr_prop
+R68700 Cminorgenproof.eval_expr
+R68691 Values.val
+R68680 Mem.mem
+R68669 Values.val
+R68658 Mem.mem
+R68644 Cminorgenproof.expr
+R68644 Cminorgenproof.expr
+R68627 Mem.mem
+R68615 Cminorgenproof.env
+R68600 Cminorgenproof.letenv
+R69087 Mem.val_list_inject
+R69122 Coq.Lists.List "x :: y" list_scope
+R69110 Coq.Lists.List "x :: y" list_scope
+R69087 Mem.val_list_inject
+R69122 Coq.Lists.List "x :: y" list_scope
+R69110 Coq.Lists.List "x :: y" list_scope
+R69162 Mem.val_list_inject_incr
+R69162 Mem.val_list_inject_incr
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R69399 Cminor.eval_Elet
+R69399 Cminor.eval_Elet
+R69426 Mem.inject_incr_trans
+R69426 Mem.inject_incr_trans
+R69576 Coq.Init.Logic "'exists' x , p" type_scope
+R69612 Coq.Init.Logic "A /\ B" type_scope
+R69602 Coq.Init.Logic "x = y" type_scope
+R69587 Coq.Lists.List.nth_error
+R69604 Coq.Init.Datatypes.Some
+R69615 Mem.val_inject
+R69561 Coq.Init.Logic "x = y" type_scope
+R69546 Coq.Lists.List.nth_error
+R69563 Coq.Init.Datatypes.Some
+R69504 Mem.val_list_inject
+R69928 Cminorgenproof.eval_expr_prop
+R69951 Cminorgenproof.Eletvar
+R69913 Coq.Init.Logic "x = y" type_scope
+R69898 Coq.Lists.List.nth_error
+R69915 Coq.Init.Datatypes.Some
+R69889 Values.val
+R69874 Coq.Init.Datatypes.nat
+R69864 Mem.mem
+R69852 Cminorgenproof.env
+R69837 Coq.Lists.List.list
+R69842 Values.val
+R70024 Cminorgenproof.val_list_inject_nth
+R70024 Cminorgenproof.val_list_inject_nth
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R70159 Cminor.eval_Eletvar
+R70159 Cminor.eval_Eletvar
+R70273 Cminorgenproof.eval_exprlist_prop
+R70308 Coq.Lists.List.nil
+R70299 Cminorgenproof.Enil
+R70264 Mem.mem
+R70252 Cminorgenproof.env
+R70237 Cminorgenproof.letenv
+R70403 Coq.Lists.List.nil
+R70407 Values.val
+R70403 Coq.Lists.List.nil
+R70407 Values.val
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R70788 Cminorgenproof.eval_exprlist_prop
+R70835 Coq.Lists.List "x :: y" list_scope
+R70815 Cminorgenproof.Econs
+R70746 Cminorgenproof.eval_exprlist_prop
+R70704 Cminorgenproof.eval_exprlist
+R70669 Cminorgenproof.eval_expr_prop
+R70634 Cminorgenproof.eval_expr
+R70620 Coq.Lists.List.list
+R70625 Values.val
+R70609 Mem.mem
+R70598 Values.val
+R70583 Mem.mem
+R70565 Cminorgenproof.exprlist
+R70551 Cminorgenproof.expr
+R70536 Mem.mem
+R70524 Cminorgenproof.env
+R70509 Cminorgenproof.letenv
+R71027 Mem.val_list_inject
+R71027 Mem.val_list_inject
+R71062 Mem.val_list_inject_incr
+R71062 Mem.val_list_inject_incr
+R71236 Mem.val_inject
+R71236 Mem.val_inject
+R71265 Mem.val_inject_incr
+R71265 Mem.val_inject_incr
+R71338 Coq.Lists.List "x :: y" list_scope
+R71338 Coq.Lists.List "x :: y" list_scope
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R71401 Mem.inject_incr_trans
+R71401 Mem.inject_incr_trans
+R71951 Cminorgenproof.eval_funcall_prop
+R71980 Mem.free_list
+R71890 Cminorgenproof.outcome_result_value
+R71918 AST.sig_res
+R71927 Cminorgenproof.fn_sig
+R71839 Cminorgenproof.exec_stmtlist_prop
+R71864 Cminorgenproof.fn_body
+R71788 Cminorgenproof.exec_stmtlist
+R71813 Cminorgenproof.fn_body
+R71736 Cminorplus.bind_parameters
+R71758 Cminorgenproof.fn_params
+R71677 Cminorplus.alloc_variables
+R71706 Cminorplus.fn_variables
+R71693 Cminorplus.empty_env
+R71619 Coqlib.list_norepet
+R71651 Coq.Lists.List "x ++ y" list_scope
+R71633 Cminorplus.fn_params_names
+R71654 Cminorplus.fn_vars_names
+R71610 Values.val
+R71591 Cminorgenproof.outcome
+R71574 Mem.mem
+R71574 Mem.mem
+R71553 Coq.Lists.List.list
+R71558 Values.block
+R71542 Mem.mem
+R71529 Cminorgenproof.env
+R71509 Coq.Lists.List.list
+R71514 Values.val
+R71488 Cminorgenproof.function
+R71478 Mem.mem
+R72094 Cminorgen.build_compilenv
+R72094 Cminorgen.build_compilenv
+R72177 Coqlib.zle
+R72191 Integers.max_signed
+R72177 Coqlib.zle
+R72191 Integers.max_signed
+R72262 Mem.alloc
+R72262 Mem.alloc
+R72318 Cminorgenproof.function_entry_ok
+R72318 Cminorgenproof.function_entry_ok
+R72623 Coq.Init.Logic "'exists' x , p" type_scope
+R72704 Coq.Init.Logic "A /\ B" type_scope
+R72649 Cminor.outcome_result_value
+R72689 AST.sig_res
+R72678 Cminorgenproof.fn_sig
+R72718 Mem.val_inject
+R72623 Coq.Init.Logic "'exists' x , p" type_scope
+R72704 Coq.Init.Logic "A /\ B" type_scope
+R72649 Cminor.outcome_result_value
+R72689 AST.sig_res
+R72678 Cminorgenproof.fn_sig
+R72718 Mem.val_inject
+R72854 AST.sig_res
+R72863 Cminorgenproof.fn_sig
+R72854 AST.sig_res
+R72863 Cminorgenproof.fn_sig
+R72912 Values.Vundef
+R72912 Values.Vundef
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R72983 AST.sig_res
+R72992 Cminorgenproof.fn_sig
+R72983 AST.sig_res
+R72992 Cminorgenproof.fn_sig
+R73041 Values.Vundef
+R73041 Values.Vundef
+R73101 AST.sig_res
+R73110 Cminorgenproof.fn_sig
+R73101 AST.sig_res
+R73110 Cminorgenproof.fn_sig
+R73272 Mem.free
+R73272 Mem.free
+R73382 Cminor.exec_Scons_continue
+R73382 Cminor.exec_Scons_continue
+R73442 Cminor.outcome_block
+R73456 Cminor.Out_normal
+R73425 Cminor.Out_normal
+R73442 Cminor.outcome_block
+R73456 Cminor.Out_normal
+R73425 Cminor.Out_normal
+R73477 Cminor.exec_Sblock
+R73477 Cminor.exec_Sblock
+R73601 Mem.free_inject
+R73601 Mem.free_inject
+R73768 Mem.inject_incr_trans
+R73768 Mem.inject_incr_trans
+R73870 Coq.Init.Logic "x = y" type_scope
+R73842 Mem.nextblock
+R73853 Mem.free_list
+R73872 Mem.nextblock
+R73870 Coq.Init.Logic "x = y" type_scope
+R73842 Mem.nextblock
+R73853 Mem.free_list
+R73872 Mem.nextblock
+R73960 Mem.nextblock
+R73960 Mem.nextblock
+R73993 Cminorgenproof.match_callstack_freelist
+R73993 Cminorgenproof.match_callstack_freelist
+R74281 Cminorgenproof.exec_stmt_prop
+R74315 Cminorgenproof.Out_normal
+R74301 Cminorgenproof.Sexpr
+R74245 Cminorgenproof.eval_expr_prop
+R74260 Coq.Lists.List.nil
+R74209 Cminorgenproof.eval_expr
+R74224 Coq.Lists.List.nil
+R74200 Values.val
+R74190 Mem.mem
+R74171 Cminorgenproof.expr
+R74161 Mem.mem
+R74149 Cminorgenproof.env
+R74412 Mem.val_nil_inject
+R74412 Mem.val_nil_inject
+R74555 Cminor.Out_normal
+R74555 Cminor.Out_normal
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R74986 Cminorgenproof.exec_stmt_prop
+R75006 Cminorgenproof.Sifthenelse
+R74945 Cminorgenproof.exec_stmtlist_prop
+R74904 Cminorgenproof.exec_stmtlist
+R74883 Values.is_true
+R74846 Cminorgenproof.eval_expr_prop
+R74861 Coq.Lists.List.nil
+R74809 Cminorgenproof.eval_expr
+R74824 Coq.Lists.List.nil
+R74794 Cminorgenproof.outcome
+R74777 Mem.mem
+R74766 Values.val
+R74755 Mem.mem
+R74737 Cminorgenproof.stmtlist
+R74737 Cminorgenproof.stmtlist
+R74713 Cminorgenproof.expr
+R74703 Mem.mem
+R74691 Cminorgenproof.env
+R75121 Mem.val_nil_inject
+R75121 Mem.val_nil_inject
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R75422 Cmconstrproof.exec_ifthenelse_true
+R75422 Cmconstrproof.exec_ifthenelse_true
+R75536 Mem.inject_incr_trans
+R75536 Mem.inject_incr_trans
+R75924 Cminorgenproof.exec_stmt_prop
+R75944 Cminorgenproof.Sifthenelse
+R75883 Cminorgenproof.exec_stmtlist_prop
+R75842 Cminorgenproof.exec_stmtlist
+R75820 Values.is_false
+R75783 Cminorgenproof.eval_expr_prop
+R75798 Coq.Lists.List.nil
+R75746 Cminorgenproof.eval_expr
+R75761 Coq.Lists.List.nil
+R75731 Cminorgenproof.outcome
+R75714 Mem.mem
+R75703 Values.val
+R75692 Mem.mem
+R75674 Cminorgenproof.stmtlist
+R75674 Cminorgenproof.stmtlist
+R75650 Cminorgenproof.expr
+R75640 Mem.mem
+R75628 Cminorgenproof.env
+R76059 Mem.val_nil_inject
+R76059 Mem.val_nil_inject
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R76360 Cmconstrproof.exec_ifthenelse_false
+R76360 Cmconstrproof.exec_ifthenelse_false
+R76475 Mem.inject_incr_trans
+R76475 Mem.inject_incr_trans
+R76824 Cminorgenproof.exec_stmt_prop
+R76844 Cminorgenproof.Sloop
+R76778 Cminorgenproof.exec_stmt_prop
+R76799 Cminorgenproof.Sloop
+R76732 Cminorgenproof.exec_stmt
+R76753 Cminorgenproof.Sloop
+R76684 Cminorgenproof.exec_stmtlist_prop
+R76713 Cminorgenproof.Out_normal
+R76636 Cminorgenproof.exec_stmtlist
+R76665 Cminorgenproof.Out_normal
+R76621 Cminorgenproof.outcome
+R76609 Mem.mem
+R76609 Mem.mem
+R76583 Cminorgenproof.stmtlist
+R76572 Mem.mem
+R76560 Cminorgenproof.env
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R77229 Cminor.exec_Sloop_loop
+R77229 Cminor.exec_Sloop_loop
+R77301 Mem.inject_incr_trans
+R77301 Mem.inject_incr_trans
+R77564 Cminorgenproof.exec_stmt_prop
+R77584 Cminorgenproof.Sloop
+R77542 Coq.Init.Logic "x <> y" type_scope
+R77545 Cminorgenproof.Out_normal
+R77499 Cminorgenproof.exec_stmtlist_prop
+R77460 Cminorgenproof.exec_stmtlist
+R77445 Cminorgenproof.outcome
+R77433 Mem.mem
+R77410 Cminorgenproof.stmtlist
+R77399 Mem.mem
+R77387 Cminorgenproof.env
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R77846 Cminor.exec_Sloop_stop
+R77846 Cminor.exec_Sloop_stop
+R78124 Cminorgenproof.exec_stmt_prop
+R78166 Cminorgenproof.outcome_block
+R78144 Cminorgenproof.Sblock
+R78085 Cminorgenproof.exec_stmtlist_prop
+R78046 Cminorgenproof.exec_stmtlist
+R78031 Cminorgenproof.outcome
+R78019 Mem.mem
+R77996 Cminorgenproof.stmtlist
+R77985 Mem.mem
+R77973 Cminorgenproof.env
+R78394 Cminor.outcome_block
+R78394 Cminor.outcome_block
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R78446 Cminor.exec_Sblock
+R78446 Cminor.exec_Sblock
+R78672 Cminorgenproof.exec_stmt_prop
+R78706 Cminorgenproof.Out_exit
+R78692 Cminorgenproof.Sexit
+R78663 Coq.Init.Datatypes.nat
+R78653 Mem.mem
+R78641 Cminorgenproof.env
+R78809 Cminor.Out_exit
+R78809 Cminor.Out_exit
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R78953 Cminorgenproof.exec_stmt_prop
+R78997 Cminorgenproof.Out_return
+R79010 Coq.Init.Datatypes.None
+R78973 Cminorgenproof.Sreturn
+R78983 Coq.Init.Datatypes.None
+R78944 Mem.mem
+R78932 Cminorgenproof.env
+R79105 Cminor.Out_return
+R79116 Coq.Init.Datatypes.None
+R79105 Cminor.Out_return
+R79116 Coq.Init.Datatypes.None
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R79365 Cminorgenproof.exec_stmt_prop
+R79414 Cminorgenproof.Out_return
+R79428 Coq.Init.Datatypes.Some
+R79385 Cminorgenproof.Sreturn
+R79396 Coq.Init.Datatypes.Some
+R79329 Cminorgenproof.eval_expr_prop
+R79344 Coq.Lists.List.nil
+R79293 Cminorgenproof.eval_expr
+R79308 Coq.Lists.List.nil
+R79284 Values.val
+R79274 Mem.mem
+R79255 Cminorgenproof.expr
+R79245 Mem.mem
+R79233 Cminorgenproof.env
+R79520 Mem.val_nil_inject
+R79520 Mem.val_nil_inject
+R79662 Cminor.Out_return
+R79674 Coq.Init.Datatypes.Some
+R79662 Cminor.Out_return
+R79674 Coq.Init.Datatypes.Some
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R79827 Cminorgenproof.exec_stmtlist_prop
+R79859 Cminorgenproof.Out_normal
+R79850 Cminorgenproof.Snil
+R79818 Mem.mem
+R79806 Cminorgenproof.env
+R79960 Cminor.Out_normal
+R79960 Cminor.Out_normal
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R80336 Cminorgenproof.exec_stmtlist_prop
+R80360 Cminorgenproof.Scons
+R80296 Cminorgenproof.exec_stmtlist_prop
+R80256 Cminorgenproof.exec_stmtlist
+R80213 Cminorgenproof.exec_stmt_prop
+R80237 Cminorgenproof.Out_normal
+R80170 Cminorgenproof.exec_stmt
+R80194 Cminorgenproof.Out_normal
+R80155 Cminorgenproof.outcome
+R80143 Mem.mem
+R80143 Mem.mem
+R80122 Cminorgenproof.stmtlist
+R80103 Cminorgenproof.stmt
+R80093 Mem.mem
+R80081 Cminorgenproof.env
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R80745 Cminor.exec_Scons_continue
+R80745 Cminor.exec_Scons_continue
+R80820 Mem.inject_incr_trans
+R80820 Mem.inject_incr_trans
+R81086 Cminorgenproof.exec_stmtlist_prop
+R81110 Cminorgenproof.Scons
+R81064 Coq.Init.Logic "x <> y" type_scope
+R81067 Cminorgenproof.Out_normal
+R81026 Cminorgenproof.exec_stmt_prop
+R80992 Cminorgenproof.exec_stmt
+R80977 Cminorgenproof.outcome
+R80965 Mem.mem
+R80947 Cminorgenproof.stmtlist
+R80928 Cminorgenproof.stmt
+R80918 Mem.mem
+R80906 Cminorgenproof.env
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R81374 Cminor.exec_Scons_stop
+R81374 Cminor.exec_Scons_stop
+R81559 Cminorgenproof.eval_funcall_prop
+R81516 Cminorgenproof.eval_funcall
+R81606 Cminorplus.eval_funcall_ind5
+R82650 Cminorgenproof.transl_stmtlist_Scons_1_correct
+R82613 Cminorgenproof.transl_stmtlist_Scons_2_correct
+R82579 Cminorgenproof.transl_stmtlist_Snil_correct
+R82541 Cminorgenproof.transl_stmt_Sreturn_some_correct
+R82503 Cminorgenproof.transl_stmt_Sreturn_none_correct
+R82472 Cminorgenproof.transl_stmt_Sexit_correct
+R82440 Cminorgenproof.transl_stmt_Sblock_correct
+R82404 Cminorgenproof.transl_stmt_Sloop_exit_correct
+R82368 Cminorgenproof.transl_stmt_Sloop_loop_correct
+R82325 Cminorgenproof.transl_stmt_Sifthenelse_false_correct
+R82283 Cminorgenproof.transl_stmt_Sifthenelse_true_correct
+R82252 Cminorgenproof.transl_stmt_Sexpr_correct
+R82224 Cminorgenproof.transl_funcall_correct
+R82189 Cminorgenproof.transl_exprlist_Econs_correct
+R82155 Cminorgenproof.transl_exprlist_Enil_correct
+R82122 Cminorgenproof.transl_expr_Eletvar_correct
+R82092 Cminorgenproof.transl_expr_Elet_correct
+R82050 Cminorgenproof.transl_expr_Econdition_false_correct
+R82009 Cminorgenproof.transl_expr_Econdition_true_correct
+R81978 Cminorgenproof.transl_expr_Ecall_correct
+R81946 Cminorgenproof.transl_expr_Estore_correct
+R81915 Cminorgenproof.transl_expr_Eload_correct
+R81886 Cminorgenproof.transl_expr_Eop_correct
+R81846 Cminorgenproof.transl_expr_Eaddrof_global_correct
+R81807 Cminorgenproof.transl_expr_Eaddrof_local_correct
+R81774 Cminorgenproof.transl_expr_Eassign_correct
+R81744 Cminorgenproof.transl_expr_Evar_correct
+R81719 Cminorgenproof.exec_stmtlist_prop
+R81699 Cminorgenproof.exec_stmt_prop
+R81676 Cminorgenproof.eval_funcall_prop
+R81652 Cminorgenproof.eval_exprlist_prop
+R81632 Cminorgenproof.eval_expr_prop
+R82909 Cminorgenproof.match_globalenvs
+R82858 Coqlib.zlt
+R82867 Mem.nextblock
+R82899 Coq.Init.Datatypes.None
+R82883 Coq.Init.Datatypes.Some
+R82887 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R82812 Globalenvs.init_mem
+R82778 Globalenvs.init_mem
+R83012 Coqlib.zlt_true
+R83012 Coqlib.zlt_true
+R83048 Globalenvs.find_symbol_inv
+R83048 Globalenvs.find_symbol_inv
+R83099 Cminorgenproof.symbols_preserved
+R83099 Cminorgenproof.symbols_preserved
+R83146 Coqlib.zlt_true
+R83146 Coqlib.zlt_true
+R83176 Mem.nextblock_pos
+R83176 Mem.nextblock_pos
+R83287 Cminor.exec_program
+R83307 Values.Vint
+R83253 Cminorgenproof.exec_program
+R83274 Values.Vint
+R83383 Cminorgenproof.function_ptr_translated
+R83383 Cminorgenproof.function_ptr_translated
+R83455 Globalenvs.init_mem
+R83455 Globalenvs.init_mem
+R83505 Coqlib.zlt
+R83515 Mem.nextblock
+R83547 Coq.Init.Datatypes.None
+R83531 Coq.Init.Datatypes.Some
+R83535 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R83505 Coqlib.zlt
+R83515 Mem.nextblock
+R83547 Coq.Init.Datatypes.None
+R83531 Coq.Init.Datatypes.Some
+R83535 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R83571 Mem.mem_inject
+R83571 Mem.mem_inject
+R83637 Coqlib.zlt_false
+R83637 Coqlib.zlt_false
+R83668 Coqlib.zlt
+R83676 Mem.nextblock
+R83668 Coqlib.zlt
+R83676 Mem.nextblock
+R83856 Globalenvs.initmem_undef
+R83856 Globalenvs.initmem_undef
+R83966 Coqlib.zlt
+R83974 Mem.nextblock
+R83966 Coqlib.zlt
+R83974 Mem.nextblock
+R84022 Coqlib.zlt
+R84030 Mem.nextblock
+R84022 Coqlib.zlt
+R84030 Mem.nextblock
+R84105 Cminorgenproof.match_callstack
+R84146 Mem.nextblock
+R84131 Mem.nextblock
+R84123 Coq.Lists.List.nil
+R84105 Cminorgenproof.match_callstack
+R84146 Mem.nextblock
+R84131 Mem.nextblock
+R84123 Coq.Lists.List.nil
+R84195 Cminorgenproof.match_globalenvs_init
+R84195 Cminorgenproof.match_globalenvs_init
+R84249 Cminorgenproof.transl_function_correct
+R84352 Mem.val_nil_inject
+R84249 Cminorgenproof.transl_function_correct
+R84352 Mem.val_nil_inject
+R84517 AST.prog_main
+R84539 AST.prog_main
+R84517 AST.prog_main
+R84539 AST.prog_main
+R84572 Cminorgenproof.symbols_preserved
+R84572 Cminorgenproof.symbols_preserved
+R84635 Cminorgen.transl_function
+R84599 AST.transform_partial_program_main
+R84635 Cminorgen.transl_function
+R84599 AST.transform_partial_program_main
+R84716 Cminorgenproof.sig_transl_function
+R84716 Cminorgenproof.sig_transl_function
+R84754 Globalenvs.init_mem_transf_partial
+R84783 Cminorgen.transl_function
+R84754 Globalenvs.init_mem_transf_partial
+R84783 Cminorgen.transl_function
+FRegisters
+R130 Coq.NArith.BinPos.positive
+R171 Coqlib.peq
+R198 Maps.t
+R205 AST.typ
+R378 Coq.Init.Datatypes.None
+R394 Coq.Init.Datatypes.Some
+R404 Registers.get
+R339 Registers.t
+R313 Coq.Init.Datatypes.option
+R320 Registers.reg
+R509 Registers.t
+R543 Coq.Init.Datatypes.None
+R558 Coq.Init.Datatypes.Some
+R568 Registers.set
+R495 Registers.t
+R471 Coq.Init.Datatypes.option
+R478 Registers.reg
+R615 Registers.get
+R667 Coq.Lists.List.map
+R686 Registers.get
+R745 Registers.set
+FRTL
+R273 Coq.NArith.BinPos.positive
+R324 RTL.node
+R385 RTL.node
+R378 Registers.reg
+R366 Coq.Lists.List.list
+R371 Registers.reg
+R353 Op.operation
+R465 RTL.node
+R458 Registers.reg
+R446 Coq.Lists.List.list
+R451 Registers.reg
+R432 Op.addressing
+R416 AST.memory_chunk
+R546 RTL.node
+R539 Registers.reg
+R527 Coq.Lists.List.list
+R532 Registers.reg
+R513 Op.addressing
+R497 AST.memory_chunk
+R624 RTL.node
+R617 Registers.reg
+R605 Coq.Lists.List.list
+R610 Registers.reg
+R594 Coq.Init.Datatypes "x + y" type_scope
+R590 Registers.reg
+R596 AST.ident
+R577 AST.signature
+R688 RTL.node
+R680 RTL.node
+R668 Coq.Lists.List.list
+R673 Registers.reg
+R655 Op.condition
+R721 Coq.Init.Datatypes.option
+R728 Registers.reg
+R773 Maps.t
+R781 RTL.instruction
+R842 AST.signature
+R866 Coq.Lists.List.list
+R871 Registers.reg
+R892 Coq.ZArith.BinInt.Z
+R906 RTL.code
+R929 RTL.node
+R948 RTL.node
+R1004 Coq.Init.Logic "A \/ B" type_scope
+R987 Coqlib.Plt
+R1018 Coq.Init.Logic "x = y" type_scope
+R1014 Maps "a ! b"
+R1020 Coq.Init.Datatypes.None
+R980 RTL.node
+R1051 AST.program
+R1063 RTL.function
+R1093 Globalenvs.t
+R1100 RTL.function
+R1131 Registers.t
+R1140 Values.val
+R1238 RTL.regset
+R1214 Coq.Lists.List.list
+R1219 Registers.reg
+R1199 Coq.Lists.List.list
+R1204 Values.val
+R1275 Coq.Lists.List "x :: y" list_scope
+R1285 Coq.Lists.List "x :: y" list_scope
+R1294 Registers.set
+R1341 Registers.init
+R1353 Values.Vundef
+R1214 Coq.Lists.List.list
+R1219 Registers.reg
+R1199 Coq.Lists.List.list
+R1204 Values.val
+R1398 RTL.genv
+R1464 Coq.Init.Datatypes.option
+R1471 RTL.function
+R1504 Coq.Init.Datatypes.inl
+R1513 Globalenvs.find_funct
+R1534 Registers "a # b"
+R1541 Coq.Init.Datatypes.inr
+R1565 Globalenvs.find_symbol
+R1603 Coq.Init.Datatypes.None
+R1611 Coq.Init.Datatypes.None
+R1624 Coq.Init.Datatypes.Some
+R1634 Globalenvs.find_funct_ptr
+R1454 RTL.regset
+R1440 Coq.Init.Datatypes "x + y" type_scope
+R1436 Registers.reg
+R1442 AST.ident
+R1801 Mem.mem
+R1791 RTL.regset
+R1783 RTL.node
+R1754 Mem.mem
+R1744 RTL.regset
+R1736 RTL.node
+R1707 Values.val
+R1699 RTL.code
+R3498 Mem.mem
+R3488 RTL.regset
+R3480 RTL.node
+R3455 Mem.mem
+R3445 RTL.regset
+R3437 RTL.node
+R3412 Values.val
+R3404 RTL.code
+R4032 Mem.mem
+R4025 Values.val
+R3986 Mem.mem
+R3974 Coq.Lists.List.list
+R3979 Values.val
+R3962 RTL.function
+R1873 Coq.Init.Logic "x = y" type_scope
+R1869 Maps "a ! b"
+R1875 Coq.Init.Datatypes.Some
+R1880 RTL.Inop
+R2125 Registers "a # b <- c"
+R2074 Coq.Init.Logic "x = y" type_scope
+R2041 Op.eval_operation
+R2067 Registers "a ## b"
+R2076 Coq.Init.Datatypes.Some
+R2004 Coq.Init.Logic "x = y" type_scope
+R2000 Maps "a ! b"
+R2006 Coq.Init.Datatypes.Some
+R2011 RTL.Iop
+R2392 Registers "a # b <- c"
+R2341 Coq.Init.Logic "x = y" type_scope
+R2321 Mem.loadv
+R2343 Coq.Init.Datatypes.Some
+R2303 Coq.Init.Logic "x = y" type_scope
+R2267 Op.eval_addressing
+R2296 Registers "a ## b"
+R2305 Coq.Init.Datatypes.Some
+R2220 Coq.Init.Logic "x = y" type_scope
+R2216 Maps "a ! b"
+R2222 Coq.Init.Datatypes.Some
+R2227 RTL.Iload
+R2619 Coq.Init.Logic "x = y" type_scope
+R2591 Mem.storev
+R2614 Registers "a # b"
+R2621 Coq.Init.Datatypes.Some
+R2573 Coq.Init.Logic "x = y" type_scope
+R2537 Op.eval_addressing
+R2566 Registers "a ## b"
+R2575 Coq.Init.Datatypes.Some
+R2489 Coq.Init.Logic "x = y" type_scope
+R2485 Maps "a ! b"
+R2491 Coq.Init.Datatypes.Some
+R2496 RTL.Istore
+R2945 Registers "a # b <- c"
+R2886 Registers "a ## b"
+R2846 Coq.Init.Logic "x = y" type_scope
+R2851 RTL.fn_sig
+R2824 Coq.Init.Logic "x = y" type_scope
+R2803 RTL.find_function
+R2826 Coq.Init.Datatypes.Some
+R2759 Coq.Init.Logic "x = y" type_scope
+R2755 Maps "a ! b"
+R2761 Coq.Init.Datatypes.Some
+R2766 RTL.Icall
+R3115 Coq.Init.Logic "x = y" type_scope
+R3086 Op.eval_condition
+R3108 Registers "a ## b"
+R3117 Coq.Init.Datatypes.Some
+R3122 Coq.Init.Datatypes.true
+R3042 Coq.Init.Logic "x = y" type_scope
+R3038 Maps "a ! b"
+R3044 Coq.Init.Datatypes.Some
+R3049 RTL.Icond
+R3326 Coq.Init.Logic "x = y" type_scope
+R3297 Op.eval_condition
+R3319 Registers "a ## b"
+R3328 Coq.Init.Datatypes.Some
+R3333 Coq.Init.Datatypes.false
+R3253 Coq.Init.Logic "x = y" type_scope
+R3249 Maps "a ! b"
+R3255 Coq.Init.Datatypes.Some
+R3260 RTL.Icond
+R4433 Mem.free
+R4366 Coq.Init.Logic "x = y" type_scope
+R4368 Registers.regmap_optget
+R4385 Values.Vundef
+R4333 Coq.Init.Logic "x = y" type_scope
+R4329 Maps "a ! b"
+R4321 RTL.fn_code
+R4335 Coq.Init.Datatypes.Some
+R4340 RTL.Ireturn
+R4249 RTL.init_regs
+R4267 RTL.fn_params
+R4233 RTL.fn_entrypoint
+R4193 Values.Vptr
+R4202 Integers.zero
+R4183 RTL.fn_code
+R4147 Coq.Init.Logic "x = y" type_scope
+R4116 Mem.alloc
+R4133 RTL.fn_stacksize
+R4149 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R4805 RTL.exec_instrs
+R4761 RTL.exec_instrs
+R4718 RTL.exec_instr
+R4869 RTL.exec_trans
+R4869 RTL.exec_trans
+R4887 RTL.exec_one
+R4887 RTL.exec_one
+R5091 RTL.exec_instr
+R5070 Coq.Init.Logic "x = y" type_scope
+R5075 Registers "a # b <- c"
+R5052 Coq.Init.Logic "x = y" type_scope
+R5019 Op.eval_operation
+R5045 Registers "a ## b"
+R5054 Coq.Init.Datatypes.Some
+R4986 Coq.Init.Logic "x = y" type_scope
+R4982 Maps "a ! b"
+R4988 Coq.Init.Datatypes.Some
+R4993 RTL.Iop
+R5163 RTL.exec_Iop
+R5163 RTL.exec_Iop
+R5419 RTL.exec_instr
+R5398 Coq.Init.Logic "x = y" type_scope
+R5403 Registers "a # b <- c"
+R5380 Coq.Init.Logic "x = y" type_scope
+R5360 Mem.loadv
+R5382 Coq.Init.Datatypes.Some
+R5346 Coq.Init.Logic "x = y" type_scope
+R5310 Op.eval_addressing
+R5339 Registers "a ## b"
+R5348 Coq.Init.Datatypes.Some
+R5267 Coq.Init.Logic "x = y" type_scope
+R5263 Maps "a ! b"
+R5269 Coq.Init.Datatypes.Some
+R5274 RTL.Iload
+R5491 RTL.exec_Iload
+R5491 RTL.exec_Iload
+R5625 Coq.Init.Logic "x <> y" type_scope
+R5621 Maps "a ! b"
+R5628 Coq.Init.Datatypes.None
+R5578 RTL.exec_instr
+R5802 Coq.Init.Logic "x <> y" type_scope
+R5798 Maps "a ! b"
+R5805 Coq.Init.Datatypes.None
+R5786 Coq.Init.Logic "x <> y" type_scope
+R5781 Maps "a ! b"
+R5789 Coq.Init.Datatypes.None
+R5737 RTL.exec_instrs
+R5858 RTL.exec_instr_present
+R5858 RTL.exec_instr_present
+R6034 Coq.Init.Logic "'exists' x , p" type_scope
+R6044 Coq.Init.Logic "'exists' x , p" type_scope
+R6054 Coq.Init.Logic "'exists' x , p" type_scope
+R6109 Coq.Init.Logic "A /\ B" type_scope
+R6100 Coq.Init.Logic "x = y" type_scope
+R6066 Globalenvs.find_symbol
+R6089 AST.prog_main
+R6102 Coq.Init.Datatypes.Some
+R6148 Coq.Init.Logic "A /\ B" type_scope
+R6139 Coq.Init.Logic "x = y" type_scope
+R6114 Globalenvs.find_funct_ptr
+R6141 Coq.Init.Datatypes.Some
+R6194 Coq.Init.Logic "A /\ B" type_scope
+R6164 Coq.Init.Logic "x = y" type_scope
+R6156 RTL.fn_sig
+R6166 AST.mksignature
+R6183 Coq.Init.Datatypes.Some
+R6188 AST.Tint
+R6178 Coq.Lists.List.nil
+R6199 RTL.exec_function
+R6218 Coq.Lists.List.nil
+R6013 Globalenvs.init_mem
+R5981 Globalenvs.globalenv
+R5954 Values.val
+R5941 RTL.program
+R6322 Coq.Lists.List.list
+R6327 RTL.node
+R6354 Maps "a ! b"
+R6346 RTL.fn_code
+R6367 Coq.Init.Datatypes.None
+R6375 Coq.Lists.List.nil
+R6383 Coq.Init.Datatypes.Some
+R6420 RTL.Inop
+R6432 Coq.Lists.List "x :: y" list_scope
+R6435 Coq.Lists.List.nil
+R6447 RTL.Iop
+R6470 Coq.Lists.List "x :: y" list_scope
+R6473 Coq.Lists.List.nil
+R6485 RTL.Iload
+R6518 Coq.Lists.List "x :: y" list_scope
+R6521 Coq.Lists.List.nil
+R6533 RTL.Istore
+R6567 Coq.Lists.List "x :: y" list_scope
+R6570 Coq.Lists.List.nil
+R6582 RTL.Icall
+R6612 Coq.Lists.List "x :: y" list_scope
+R6615 Coq.Lists.List.nil
+R6627 RTL.Icond
+R6662 Coq.Lists.List "x :: y" list_scope
+R6671 Coq.Lists.List "x :: y" list_scope
+R6674 Coq.Lists.List.nil
+R6686 RTL.Ireturn
+R6704 Coq.Lists.List.nil
+R6314 RTL.node
+R6299 RTL.function
+R6844 Coq.Lists.List.In
+R6852 RTL.successors
+R6791 RTL.exec_instr
+R6808 RTL.fn_code
+R6923 RTL.fn_code
+R6923 RTL.fn_code
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R7087 RTL.instruction
+R7072 RTL.instruction
+R7064 RTL.node
+R7249 Coq.Init.Logic "A \/ B" type_scope
+R7235 Coqlib.Plt
+R7276 Coq.Init.Logic "x = y" type_scope
+R7271 Maps "a ! b"
+R7253 Maps.map
+R7278 Coq.Init.Datatypes.None
+R7228 RTL.node
+R7194 Coq.Init.Logic "A \/ B" type_scope
+R7180 Coqlib.Plt
+R7202 Coq.Init.Logic "x = y" type_scope
+R7198 Maps "a ! b"
+R7204 Coq.Init.Datatypes.None
+R7173 RTL.node
+R7151 RTL.node
+R7136 RTL.code
+R7359 Maps.gmap
+R7359 Maps.gmap
+R7445 RTL.function
+R7459 RTL.mkfunction
+R7604 RTL.transf_code_wf
+R7648 RTL.fn_code_wf
+R7634 RTL.fn_nextpc
+R7622 RTL.fn_code
+R7588 RTL.fn_nextpc
+R7566 RTL.fn_entrypoint
+R7529 Maps.map
+R7549 RTL.fn_code
+R7510 RTL.fn_stacksize
+R7492 RTL.fn_params
+R7477 RTL.fn_sig
+R7433 RTL.function
+FRTLgen
+R313 Coq.Lists.List.list
+R318 AST.ident
+R305 Cminor.expr
+R792 Coq.Lists.List.list
+R797 AST.ident
+R780 Cminor.condexpr
+R1039 Coq.Lists.List.list
+R1044 AST.ident
+R1027 Cminor.exprlist
+R346 Cminor.Evar
+R357 Coq.Lists.List.nil
+R365 Cminor.Eassign
+R384 Coq.Lists.List "x :: y" list_scope
+R406 Cminor.Eop
+R443 Cminor.Eload
+R483 Cminor.Estore
+R522 Coq.Lists.List "x ++ y" list_scope
+R544 Cminor.Ecall
+R575 Coq.Lists.List "x ++ y" list_scope
+R602 Cminor.Econdition
+R641 Coq.Lists.List "x ++ y" list_scope
+R659 Coq.Lists.List "x ++ y" list_scope
+R681 Cminor.Elet
+R708 Coq.Lists.List "x ++ y" list_scope
+R730 Cminor.Eletvar
+R743 Coq.Lists.List.nil
+R305 Cminor.expr
+R825 Cminor.CEtrue
+R835 Coq.Lists.List.nil
+R843 Cminor.CEfalse
+R854 Coq.Lists.List.nil
+R862 Cminor.CEcond
+R904 Cminor.CEcondition
+R950 Coq.Lists.List "x ++ y" list_scope
+R972 Coq.Lists.List "x ++ y" list_scope
+R780 Cminor.condexpr
+R1072 Cminor.Enil
+R1080 Coq.Lists.List.nil
+R1088 Cminor.Econs
+R1117 Coq.Lists.List "x ++ y" list_scope
+R1027 Cminor.exprlist
+R1234 Maps.t
+R1242 Registers.reg
+R1262 Coq.Lists.List.list
+R1267 Registers.reg
+R1320 Coq.NArith.BinPos.positive
+R1345 Coq.NArith.BinPos.positive
+R1366 RTL.code
+R1423 Coq.Init.Logic "A \/ B" type_scope
+R1404 Coqlib.Plt
+R1437 Coq.Init.Logic "x = y" type_scope
+R1433 Maps "a ! b"
+R1439 Coq.Init.Datatypes.None
+R1393 Coq.NArith.BinPos.positive
+R1570 RTLgen.state
+R1629 RTLgen.res
+R1620 RTLgen.state
+R1670 RTLgen.mon
+R1697 RTLgen.OK
+R1687 RTLgen.state
+R1734 RTLgen.mon
+R1761 RTLgen.Error
+R1751 RTLgen.state
+R1827 RTLgen.mon
+R1881 RTLgen.Error
+R1890 RTLgen.Error
+R1904 RTLgen.OK
+R1846 RTLgen.state
+R1818 RTLgen.mon
+R1802 RTLgen.mon
+R2002 RTLgen.mon
+R2013 RTLgen.bind
+R2043 Coq.Init.Datatypes.snd
+R2034 Coq.Init.Datatypes.fst
+R1993 RTLgen.mon
+R1966 RTLgen.mon
+R1973 Coq.Init.Datatypes "x * y" type_scope
+R2085 RTLgen.bind
+R2205 RTLgen.bind2
+R2384 Coq.Init.Logic "A \/ B" type_scope
+R2366 Coqlib.Plt
+R2416 Coq.Init.Logic "x = y" type_scope
+R2411 Maps "a ! b"
+R2388 Maps.empty
+R2400 RTL.instruction
+R2418 Coq.Init.Datatypes.None
+R2452 Maps.gempty
+R2452 Maps.gempty
+R2496 RTLgen.state
+R2507 RTLgen.mkstate
+R2563 RTLgen.init_state_wf
+R2538 Maps.empty
+R2550 RTL.instruction
+R2665 Coq.Init.Logic "A \/ B" type_scope
+R2648 Coqlib.Plt
+R2656 Coq.NArith.BinPos.Psucc
+R2699 Coq.Init.Logic "x = y" type_scope
+R2694 Maps "a ! b"
+R2669 Maps.set
+R2686 RTLgen.st_code
+R2701 Coq.Init.Datatypes.None
+R2630 RTLgen.st_nextnode
+R2730 Coqlib.peq
+R2730 Coqlib.peq
+R2772 Coqlib.Plt_succ
+R2772 Coqlib.Plt_succ
+R2792 Maps.gso
+R2792 Maps.gso
+R2817 RTLgen.st_wf
+R2817 RTLgen.st_wf
+R2851 Coqlib.Plt_trans_succ
+R2851 Coqlib.Plt_trans_succ
+R2943 RTLgen.mon
+R2947 RTL.node
+R3002 RTLgen.OK
+R3015 RTLgen.mkstate
+R3125 RTLgen.add_instr_wf
+R3081 Maps.set
+R3098 RTLgen.st_code
+R3055 Coq.NArith.BinPos.Psucc
+R3026 RTLgen.st_nextreg
+R2982 RTLgen.st_nextnode
+R2928 RTL.instruction
+R3218 Coq.Init.Logic "A \/ B" type_scope
+R3187 Coqlib.Plt
+R3195 Coq.NArith.BinPos.Psucc
+R3204 RTLgen.st_nextnode
+R3236 Coq.Init.Logic "x = y" type_scope
+R3232 Maps "a ! b"
+R3224 RTLgen.st_code
+R3238 Coq.Init.Datatypes.None
+R3267 RTLgen.st_wf
+R3267 RTLgen.st_wf
+R3301 Coqlib.Plt_trans_succ
+R3301 Coqlib.Plt_trans_succ
+R3371 RTLgen.mon
+R3375 RTL.node
+R3430 RTLgen.OK
+R3436 RTLgen.mkstate
+R3500 RTLgen.reserve_instr_wf
+R3472 RTLgen.st_code
+R3460 Coq.NArith.BinPos.Psucc
+R3447 RTLgen.st_nextreg
+R3410 RTLgen.st_nextnode
+R3627 Coq.Init.Logic "A \/ B" type_scope
+R3604 Coqlib.Plt
+R3614 RTLgen.st_nextnode
+R3661 Coq.Init.Logic "x = y" type_scope
+R3656 Maps "a ! b"
+R3631 Maps.set
+R3648 RTLgen.st_code
+R3663 Coq.Init.Datatypes.None
+R3564 Coqlib.Plt
+R3573 RTLgen.st_nextnode
+R3694 Coqlib.peq
+R3694 Coqlib.peq
+R3752 Maps.gso
+R3752 Maps.gso
+R3776 RTLgen.st_wf
+R3776 RTLgen.st_wf
+R3848 RTLgen.mon
+R3852 Coq.Init.Datatypes.unit
+R3881 Coqlib.plt
+R3890 RTLgen.st_nextnode
+R3914 Coq.Init.Specif.left
+R3934 RTLgen.OK
+R3941 RTLgen.mkstate
+R4056 RTLgen.update_instr_wf
+R4004 Maps.set
+R4021 RTLgen.st_code
+R3967 RTLgen.st_nextnode
+R3952 RTLgen.st_nextreg
+R3937 Coq.Init.Datatypes.tt
+R4090 Coq.Init.Specif.right
+R4109 RTLgen.Error
+R4115 Coq.Init.Datatypes.unit
+R3833 RTL.instruction
+R3823 RTL.node
+R4151 RTLgen.mon
+R4155 Registers.reg
+R4177 RTLgen.OK
+R4203 RTLgen.mkstate
+R4281 RTLgen.st_wf
+R4269 RTLgen.st_code
+R4253 RTLgen.st_nextnode
+R4212 Coq.NArith.BinPos.Psucc
+R4221 RTLgen.st_nextreg
+R4183 RTLgen.st_nextreg
+R4353 RTLgen.mapping
+R4366 RTLgen.mkmapping
+R4394 Coq.Lists.List.nil
+R4377 Maps.empty
+R4389 Registers.reg
+R4450 RTLgen.mon
+R4459 Coq.Init.Datatypes "x * y" type_scope
+R4455 Registers.reg
+R4461 RTLgen.mapping
+R4475 RTLgen "'do' X <- A ; B"
+R4483 RTLgen.new_reg
+R4497 RTLgen.ret
+R4501 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R4505 RTLgen.mkmapping
+R4577 RTLgen.map_letvars
+R4516 Maps.set
+R4538 RTLgen.map_vars
+R4441 AST.ident
+R4425 RTLgen.mapping
+R4682 RTLgen.mon
+R4696 Coq.Init.Datatypes "x * y" type_scope
+R4687 Coq.Lists.List.list
+R4692 Registers.reg
+R4698 RTLgen.mapping
+R4634 Coq.Lists.List.list
+R4639 AST.ident
+R4617 RTLgen.mapping
+R4733 Coq.Lists.List.nil
+R4740 RTLgen.ret
+R4744 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R4745 Coq.Lists.List.nil
+R4762 Coq.Lists.List "x :: y" list_scope
+R4777 RTLgen "'do' ( X , Y ) <- A ; B"
+R4817 RTLgen "'do' ( X , Y ) <- A ; B"
+R4834 RTLgen.add_var
+R4857 RTLgen.ret
+R4861 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R4865 Coq.Lists.List "x :: y" list_scope
+R4634 Coq.Lists.List.list
+R4639 AST.ident
+R4617 RTLgen.mapping
+R4937 RTLgen.mon
+R4941 Registers.reg
+R4956 Maps.get
+R4976 RTLgen.map_vars
+R4995 Coq.Init.Datatypes.None
+R5003 RTLgen.error
+R5009 Registers.reg
+R5017 Coq.Init.Datatypes.Some
+R5027 RTLgen.ret
+R4928 AST.ident
+R4912 RTLgen.mapping
+R5089 RTLgen.mapping
+R5102 RTLgen.mkmapping
+R5130 Coq.Lists.List "x :: y" list_scope
+R5138 RTLgen.map_letvars
+R5117 RTLgen.map_vars
+R5082 Registers.reg
+R5069 RTLgen.mapping
+R5205 RTLgen.mon
+R5209 Registers.reg
+R5224 Coq.Lists.List.nth_error
+R5244 RTLgen.map_letvars
+R5270 Coq.Init.Datatypes.None
+R5278 RTLgen.error
+R5284 Registers.reg
+R5292 Coq.Init.Datatypes.Some
+R5302 RTLgen.ret
+R5198 Coq.Init.Datatypes.nat
+R5183 RTLgen.mapping
+R5426 RTLgen.mon
+R5430 Registers.reg
+R5456 Cminor.Evar
+R5476 Coq.Lists.List.In_dec
+R5483 AST.ident_eq
+R5529 RTLgen.find_var
+R5510 RTLgen.new_reg
+R5549 Cminor.Eletvar
+R5568 RTLgen.find_letvar
+R5601 RTLgen.new_reg
+R5418 Cminor.expr
+R5402 Coq.Lists.List.list
+R5407 AST.ident
+R5387 RTLgen.mapping
+R5717 RTLgen.mon
+R5722 Coq.Lists.List.list
+R5727 Registers.reg
+R5674 Cminor.exprlist
+R5657 Coq.Lists.List.list
+R5662 AST.ident
+R5643 RTLgen.mapping
+R5755 Cminor.Enil
+R5769 RTLgen.ret
+R5773 Coq.Lists.List.nil
+R5781 Cminor.Econs
+R5801 RTLgen "'do' X <- A ; B"
+R5839 RTLgen "'do' X <- A ; B"
+R5848 RTLgen.alloc_reg
+R5875 RTLgen.ret
+R5882 Coq.Lists.List "x :: y" list_scope
+R5674 Cminor.exprlist
+R5657 Coq.Lists.List.list
+R5662 AST.ident
+R5643 RTLgen.mapping
+R6021 RTLgen.mon
+R6025 RTL.node
+R6038 Registers.eq
+R6072 RTLgen.add_instr
+R6083 RTL.Iop
+R6096 Coq.Lists.List "x :: y" list_scope
+R6098 Coq.Lists.List.nil
+R6087 Op.Omove
+R6058 RTLgen.ret
+R6013 RTL.node
+R6003 Registers.reg
+R6003 Registers.reg
+R6287 RTLgen.mon
+R6291 RTL.node
+R6248 RTL.node
+R6238 Registers.reg
+R6227 Cminor.expr
+R6190 Coq.Lists.List.list
+R6195 AST.ident
+R6175 RTLgen.mapping
+R7769 RTLgen.mon
+R7773 RTL.node
+R7729 RTL.node
+R7729 RTL.node
+R7704 Cminor.condexpr
+R7666 Coq.Lists.List.list
+R7671 AST.ident
+R7651 RTLgen.mapping
+R8353 RTLgen.mon
+R8357 RTL.node
+R8312 RTL.node
+R8297 Coq.Lists.List.list
+R8302 Registers.reg
+R8282 Cminor.exprlist
+R8243 Coq.Lists.List.list
+R8248 AST.ident
+R8228 RTLgen.mapping
+R6318 Cminor.Evar
+R6334 RTLgen "'do' X <- A ; B"
+R6342 RTLgen.find_var
+R6358 RTLgen.add_move
+R6379 Cminor.Eassign
+R6400 RTLgen "'do' X <- A ; B"
+R6408 RTLgen.find_var
+R6430 RTLgen "'do' X <- A ; B"
+R6439 RTLgen.add_move
+R6489 Cminor.Eop
+R6508 RTLgen "'do' X <- A ; B"
+R6517 RTLgen.alloc_regs
+R6546 RTLgen "'do' X <- A ; B"
+R6555 RTLgen.add_instr
+R6566 RTL.Iop
+R6630 Cminor.Eload
+R6659 RTLgen "'do' X <- A ; B"
+R6668 RTLgen.alloc_regs
+R6697 RTLgen "'do' X <- A ; B"
+R6706 RTLgen.add_instr
+R6717 RTL.Iload
+R6791 Cminor.Estore
+R6823 RTLgen "'do' X <- A ; B"
+R6832 RTLgen.alloc_regs
+R6861 RTLgen "'do' X <- A ; B"
+R6870 RTLgen.add_instr
+R6881 RTL.Istore
+R6916 RTLgen "'do' X <- A ; B"
+R7000 Cminor.Ecall
+R7024 RTLgen "'do' X <- A ; B"
+R7033 RTLgen.alloc_reg
+R7060 RTLgen "'do' X <- A ; B"
+R7072 RTLgen.alloc_regs
+R7101 RTLgen "'do' X <- A ; B"
+R7110 RTLgen.add_instr
+R7121 RTL.Icall
+R7132 Coq.Init.Datatypes.inl
+R7162 RTLgen "'do' X <- A ; B"
+R7249 Cminor.Econdition
+R7275 RTLgen "'do' X <- A ; B"
+R7323 RTLgen "'do' X <- A ; B"
+R7418 Cminor.Elet
+R7436 RTLgen "'do' X <- A ; B"
+R7445 RTLgen.new_reg
+R7460 RTLgen "'do' X <- A ; B"
+R7482 RTLgen.add_letvar
+R7553 Cminor.Eletvar
+R7572 RTLgen "'do' X <- A ; B"
+R7580 RTLgen.find_letvar
+R7599 RTLgen.add_move
+R6248 RTL.node
+R6238 Registers.reg
+R6227 Cminor.expr
+R6190 Coq.Lists.List.list
+R6195 AST.ident
+R6175 RTLgen.mapping
+R7800 Cminor.CEtrue
+R7816 RTLgen.ret
+R7830 Cminor.CEfalse
+R7847 RTLgen.ret
+R7862 Cminor.CEcond
+R7886 RTLgen "'do' X <- A ; B"
+R7895 RTLgen.alloc_regs
+R7924 RTLgen "'do' X <- A ; B"
+R7933 RTLgen.add_instr
+R7944 RTL.Icond
+R8019 Cminor.CEcondition
+R8046 RTLgen "'do' X <- A ; B"
+R8102 RTLgen "'do' X <- A ; B"
+R7729 RTL.node
+R7729 RTL.node
+R7704 Cminor.condexpr
+R7666 Coq.Lists.List.list
+R7671 AST.ident
+R7651 RTLgen.mapping
+R8389 Cminor.Enil
+R8395 Coq.Lists.List.nil
+R8408 RTLgen.ret
+R8419 Cminor.Econs
+R8433 Coq.Lists.List "x :: y" list_scope
+R8448 RTLgen "'do' X <- A ; B"
+R8536 RTLgen.error
+R8542 RTL.node
+R8312 RTL.node
+R8297 Coq.Lists.List.list
+R8302 Registers.reg
+R8282 Cminor.exprlist
+R8243 Coq.Lists.List.list
+R8248 AST.ident
+R8228 RTLgen.mapping
+R8673 Coq.Init.Datatypes.bool
+R8661 Cminor.stmtlist
+R8649 Cminor.stmtlist
+R8637 Cminor.condexpr
+R8877 RTLgen.mon
+R8881 RTL.node
+R8831 Coq.Init.Datatypes.option
+R8838 Registers.reg
+R8818 RTL.node
+R8800 Coq.Lists.List.list
+R8805 RTL.node
+R8764 RTL.node
+R8753 Cminor.stmt
+R8740 RTLgen.mapping
+R10250 RTLgen.mon
+R10254 RTL.node
+R10206 Coq.Init.Datatypes.option
+R10213 Registers.reg
+R10193 RTL.node
+R10175 Coq.Lists.List.list
+R10180 RTL.node
+R10142 RTL.node
+R10127 Cminor.stmtlist
+R10113 RTLgen.mapping
+R8908 Cminor.Sexpr
+R8960 RTLgen "'do' X <- A ; B"
+R8968 RTLgen.alloc_reg
+R8989 RTLgen.transl_expr
+R8936 RTLgen.mutated_expr
+R9020 Cminor.Sifthenelse
+R9099 RTLgen.more_likely
+R9337 RTLgen "'do' X <- A ; B"
+R9406 RTLgen "'do' X <- A ; B"
+R9475 RTLgen.transl_condition
+R9139 RTLgen "'do' X <- A ; B"
+R9208 RTLgen "'do' X <- A ; B"
+R9277 RTLgen.transl_condition
+R9067 RTLgen.mutated_condexpr
+R9520 Cminor.Sloop
+R9541 RTLgen "'do' X <- A ; B"
+R9553 RTLgen.reserve_instr
+R9574 RTLgen "'do' X <- A ; B"
+R9642 RTLgen "'do' X <- A ; B"
+R9650 RTLgen.update_instr
+R9670 RTL.Inop
+R9689 RTLgen.ret
+R9703 Cminor.Sblock
+R9758 Coq.Lists.List "x :: y" list_scope
+R9783 Cminor.Sexit
+R9806 Coq.Lists.List.nth_error
+R9838 Coq.Init.Datatypes.None
+R9846 RTLgen.error
+R9852 RTL.node
+R9865 Coq.Init.Datatypes.Some
+R9876 RTLgen.ret
+R9897 Cminor.Sreturn
+R9951 Coq.Init.Datatypes.None
+R9957 Coq.Init.Datatypes.None
+R9965 RTLgen.ret
+R9982 Coq.Init.Datatypes.Some
+R9990 Coq.Init.Datatypes.Some
+R10000 RTLgen.transl_expr
+R10017 RTLgen.mutated_expr
+R10058 RTLgen.error
+R10064 RTL.node
+R8831 Coq.Init.Datatypes.option
+R8838 Registers.reg
+R8818 RTL.node
+R8800 Coq.Lists.List.list
+R8805 RTL.node
+R8764 RTL.node
+R8753 Cminor.stmt
+R8740 RTLgen.mapping
+R10282 Cminor.Snil
+R10290 RTLgen.ret
+R10301 Cminor.Scons
+R10322 RTLgen "'do' X <- A ; B"
+R10206 Coq.Init.Datatypes.option
+R10213 Registers.reg
+R10193 RTL.node
+R10175 Coq.Lists.List.list
+R10180 RTL.node
+R10142 RTL.node
+R10127 Cminor.stmtlist
+R10113 RTLgen.mapping
+R10509 Coq.Init.Datatypes.option
+R10516 Registers.reg
+R10536 AST.sig_res
+R10554 Coq.Init.Datatypes.None
+R10562 Coq.Init.Datatypes.None
+R10571 Coq.Init.Datatypes.Some
+R10582 Coq.Init.Datatypes.Some
+R10502 Registers.reg
+R10486 AST.signature
+R10643 RTLgen.mon
+R10653 Coq.Init.Datatypes "x * y" type_scope
+R10648 RTL.node
+R10655 Coq.Lists.List.list
+R10660 Registers.reg
+R10670 RTLgen "'do' ( X , Y ) <- A ; B"
+R10692 RTLgen.add_vars
+R10717 Cminor.fn_params
+R10701 RTLgen.init_mapping
+R10738 RTLgen "'do' ( X , Y ) <- A ; B"
+R10758 RTLgen.add_vars
+R10775 Cminor.fn_vars
+R10794 RTLgen "'do' X <- A ; B"
+R10805 RTLgen.new_reg
+R10865 RTLgen "'do' X <- A ; B"
+R10876 RTLgen.add_instr
+R10887 RTL.Ireturn
+R10905 RTLgen "'do' X <- A ; B"
+R10918 RTLgen.transl_stmtlist
+R10963 Coq.Lists.List.nil
+R10942 Cminor.fn_body
+R10981 RTLgen.ret
+R10985 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R10829 RTLgen.ret_reg
+R10840 Cminor.fn_sig
+R10624 Cminor.function
+R11055 Coq.Init.Datatypes.option
+R11062 RTL.function
+R11086 RTLgen.transl_fun
+R11099 RTLgen.init_state
+R11119 RTLgen.Error
+R11128 Coq.Init.Datatypes.None
+R11137 RTLgen.OK
+R11140 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R11169 Coq.Init.Datatypes.Some
+R11175 RTL.mkfunction
+R11335 RTLgen.st_wf
+R11311 RTLgen.st_nextnode
+R11276 RTLgen.st_code
+R11243 Cminor.fn_stackspace
+R11201 Cminor.fn_sig
+R11036 Cminor.function
+R11399 Coq.Init.Datatypes.option
+R11406 RTL.program
+R11423 AST.transform_partial_program
+R11449 RTLgen.transl_function
+R11381 Cminor.program
+FRTLgenproof1
+R469 Coq.Init.Logic "x = y" type_scope
+R455 RTLgen.bind
+R471 RTLgen.OK
+R794 Coq.Init.Logic "x = y" type_scope
+R779 RTLgen.bind2
+R796 RTLgen.OK
+R1261 Coq.Init.Logic "x = y" type_scope
+R1251 RTLgen.error
+R1263 RTLgen.OK
+R1331 Coq.Init.Logic "x = y" type_scope
+R1323 RTLgen.ret
+R1333 RTLgen.OK
+R1399 Coq.Init.Logic "x = y" type_scope
+R1391 RTLgen.Error
+R1401 RTLgen.OK
+R1462 Coq.Init.Logic "x = y" type_scope
+R1455 RTLgen.OK
+R1464 RTLgen.OK
+R878 Coq.Init.Logic.refl_equal
+R534 Coq.Init.Logic.refl_equal
+R1631 Coq.Init.Logic "x = y" type_scope
+R1617 RTLgen.bind
+R1633 RTLgen.OK
+R1691 Coq.Init.Logic "x = y" type_scope
+R1676 RTLgen.bind2
+R1693 RTLgen.OK
+R1746 Coq.Init.Logic "x = y" type_scope
+R1736 RTLgen.error
+R1748 RTLgen.OK
+R1796 Coq.Init.Logic "x = y" type_scope
+R1788 RTLgen.ret
+R1798 RTLgen.OK
+R1846 Coq.Init.Logic "x = y" type_scope
+R1838 RTLgen.Error
+R1848 RTLgen.OK
+R1895 Coq.Init.Logic "x = y" type_scope
+R1888 RTLgen.OK
+R1897 RTLgen.OK
+R1954 Coq.Init.Logic "x = y" type_scope
+R1956 RTLgen.OK
+R2021 Coq.Init.Logic "x = y" type_scope
+R2023 RTLgen.OK
+R2086 Coq.Init.Logic "x = y" type_scope
+R2088 RTLgen.OK
+R2149 Coq.Init.Logic "x = y" type_scope
+R2151 RTLgen.OK
+R2210 Coq.Init.Logic "x = y" type_scope
+R2212 RTLgen.OK
+R2269 Coq.Init.Logic "x = y" type_scope
+R2271 RTLgen.OK
+R2326 Coq.Init.Logic "x = y" type_scope
+R2328 RTLgen.OK
+R2485 RTLgen.state
+R2476 RTLgen.state
+R2696 Coq.Init.Logic "x = y" type_scope
+R2692 Maps "a ! b"
+R2684 RTLgen.st_code
+R2710 Maps "a ! b"
+R2702 RTLgen.st_code
+R2653 Coqlib.Plt
+R2664 RTLgen.st_nextnode
+R2598 Coqlib.Ple
+R2622 RTLgen.st_nextreg
+R2606 RTLgen.st_nextreg
+R2553 Coqlib.Ple
+R2578 RTLgen.st_nextnode
+R2561 RTLgen.st_nextnode
+R2541 RTLgen.state
+R2541 RTLgen.state
+R2776 RTLgenproof1.state_incr
+R2815 RTLgenproof1.state_incr_intro
+R2815 RTLgenproof1.state_incr_intro
+R2841 Coqlib.Ple_refl
+R2841 Coqlib.Ple_refl
+R2857 Coqlib.Ple_refl
+R2857 Coqlib.Ple_refl
+R2899 RTLgenproof1.state_incr_refl
+R3006 RTLgenproof1.state_incr
+R2986 RTLgenproof1.state_incr
+R2966 RTLgenproof1.state_incr
+R3074 RTLgenproof1.state_incr_intro
+R3074 RTLgenproof1.state_incr_intro
+R3116 RTLgen.st_nextnode
+R3100 Coqlib.Ple_trans
+R3116 RTLgen.st_nextnode
+R3100 Coqlib.Ple_trans
+R3170 RTLgen.st_nextreg
+R3154 Coqlib.Ple_trans
+R3170 RTLgen.st_nextreg
+R3154 Coqlib.Ple_trans
+R3234 Maps "a ! b"
+R3226 RTLgen.st_code
+R3234 Maps "a ! b"
+R3226 RTLgen.st_code
+R3281 RTLgen.st_nextnode
+R3258 Coqlib.Plt_Ple_trans
+R3281 RTLgen.st_nextnode
+R3258 Coqlib.Plt_Ple_trans
+R3337 RTLgenproof1.state_incr_trans
+R3473 RTLgenproof1.state_incr
+R3451 RTLgenproof1.state_incr
+R3431 RTLgenproof1.state_incr
+R3411 RTLgenproof1.state_incr
+R3665 RTLgenproof1.state_incr
+R3643 RTLgenproof1.state_incr
+R3623 RTLgenproof1.state_incr
+R3603 RTLgenproof1.state_incr
+R3583 RTLgenproof1.state_incr
+R3882 RTLgenproof1.state_incr
+R3860 RTLgenproof1.state_incr
+R3840 RTLgenproof1.state_incr
+R3818 RTLgenproof1.state_incr
+R3798 RTLgenproof1.state_incr
+R3778 RTLgenproof1.state_incr
+R4122 RTLgenproof1.state_incr
+R4100 RTLgenproof1.state_incr
+R4080 RTLgenproof1.state_incr
+R4060 RTLgenproof1.state_incr
+R4038 RTLgenproof1.state_incr
+R4018 RTLgenproof1.state_incr
+R3998 RTLgenproof1.state_incr
+R4387 RTLgenproof1.state_incr
+R4367 RTLgenproof1.state_incr
+R4345 RTLgenproof1.state_incr
+R4325 RTLgenproof1.state_incr
+R4305 RTLgenproof1.state_incr
+R4283 RTLgenproof1.state_incr
+R4263 RTLgenproof1.state_incr
+R4243 RTLgenproof1.state_incr
+R4534 Coq.Init.Logic "A \/ B" type_scope
+R4527 Coq.Init.Logic "x = y" type_scope
+R4523 Maps "a ! b"
+R4515 RTLgen.st_code
+R4529 Coq.Init.Datatypes.None
+R4553 Coq.Init.Logic "x = y" type_scope
+R4549 Maps "a ! b"
+R4541 RTLgen.st_code
+R4567 Maps "a ! b"
+R4559 RTLgen.st_code
+R4480 RTLgen.state
+R4480 RTLgen.state
+R4637 RTLgenproof1.state_extends
+R4617 RTLgenproof1.state_incr
+R4721 Coqlib.plt
+R4732 RTLgen.st_nextnode
+R4721 Coqlib.plt
+R4732 RTLgen.st_nextnode
+R4797 RTLgen.st_wf
+R4797 RTLgen.st_wf
+R4855 RTLgenproof1.state_incr_extends
+R4921 RTLgen.state
+R4944 RTLgenproof1.state_extends
+R5078 Coq.Init.Logic "x <> y" type_scope
+R5074 Maps "a ! b"
+R5081 Coq.Init.Datatypes.None
+R5032 RTL.exec_instr
+R5271 Coq.Init.Logic "x = y" type_scope
+R5267 Maps "a ! b"
+R5259 RTLgen.st_code
+R5285 Maps "a ! b"
+R5277 RTLgen.st_code
+R5201 RTL.exec_instr
+R5219 RTLgen.st_code
+R5339 RTLgenproof1.exec_instr_not_halt
+R5339 RTLgenproof1.exec_instr_not_halt
+R5547 RTL.exec_instr
+R5534 Coq.Init.Logic "x = y" type_scope
+R5530 Maps "a ! b"
+R5538 Maps "a ! b"
+R5473 RTL.exec_instr
+R5627 RTL.exec_Inop
+R5627 RTL.exec_Inop
+R5658 RTL.exec_Iop
+R5658 RTL.exec_Iop
+R5707 RTL.exec_Iload
+R5707 RTL.exec_Iload
+R5774 RTL.exec_Istore
+R5774 RTL.exec_Istore
+R5850 RTL.exec_Icall
+R5850 RTL.exec_Icall
+R5908 RTL.exec_Icond_true
+R5908 RTL.exec_Icond_true
+R5972 RTL.exec_Icond_false
+R5972 RTL.exec_Icond_false
+R6151 RTL.exec_instr
+R6169 RTLgen.st_code
+R6097 RTL.exec_instr
+R6115 RTLgen.st_code
+R6255 RTLgen.st_code
+R6226 RTLgenproof1.exec_instr_extends_rec
+R6255 RTLgen.st_code
+R6226 RTLgenproof1.exec_instr_extends_rec
+R6301 RTLgenproof1.exec_instr_in_s2
+R6301 RTLgenproof1.exec_instr_in_s2
+R6473 RTL.exec_instrs
+R6492 RTLgen.st_code
+R6453 Coq.Init.Logic "x = y" type_scope
+R6459 RTLgen.st_code
+R6405 RTL.exec_instrs
+R6564 RTL.exec_refl
+R6564 RTL.exec_refl
+R6583 RTL.exec_one
+R6583 RTL.exec_one
+R6599 RTLgenproof1.exec_instr_extends
+R6599 RTLgenproof1.exec_instr_extends
+R6654 RTL.exec_trans
+R6654 RTL.exec_trans
+R6815 RTL.exec_instrs
+R6834 RTLgen.st_code
+R6758 RTL.exec_instrs
+R6777 RTLgen.st_code
+R6923 RTLgen.st_code
+R6893 RTLgenproof1.exec_instrs_extends_rec
+R6923 RTLgen.st_code
+R6893 RTLgenproof1.exec_instrs_extends_rec
+R7015 RTLgen.state
+R7039 RTLgenproof1.state_incr
+R7174 RTL.exec_instr
+R7192 RTLgen.st_code
+R7118 RTL.exec_instr
+R7136 RTLgen.st_code
+R7251 RTLgenproof1.exec_instr_extends
+R7251 RTLgenproof1.exec_instr_extends
+R7287 RTLgenproof1.state_incr_extends
+R7287 RTLgenproof1.state_incr_extends
+R7445 RTL.exec_instrs
+R7464 RTLgen.st_code
+R7388 RTL.exec_instrs
+R7407 RTLgen.st_code
+R7523 RTLgenproof1.exec_instrs_extends
+R7523 RTLgenproof1.exec_instrs_extends
+R7560 RTLgenproof1.state_incr_extends
+R7560 RTLgenproof1.state_incr_extends
+R7707 Coqlib.Plt
+R7716 RTLgen.st_nextreg
+R7687 RTLgen.state
+R7678 Registers.reg
+R7783 Coq.Init.Logic "~ x" type_scope
+R7785 Coqlib.Plt
+R7794 RTLgen.st_nextreg
+R7764 RTLgen.state
+R7755 Registers.reg
+R7887 Coq.Init.Logic.False
+R7870 RTLgenproof1.reg_fresh
+R7851 RTLgenproof1.reg_bounded
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R7979 RTLgenproof1.bounded_fresh_absurd
+R8098 Coq.Init.Logic "x <> y" type_scope
+R8077 RTLgenproof1.reg_fresh
+R8057 RTLgenproof1.reg_bounded
+R8179 RTLgenproof1.bounded_fresh_different
+R8294 RTLgenproof1.reg_bounded
+R8274 RTLgenproof1.reg_bounded
+R8254 RTLgenproof1.state_incr
+R8416 RTLgen.st_nextreg
+R8396 Coqlib.Plt_Ple_trans
+R8416 RTLgen.st_nextreg
+R8396 Coqlib.Plt_Ple_trans
+R8456 RTLgenproof1.reg_bounded_incr
+R8559 RTLgenproof1.reg_fresh
+R8541 RTLgenproof1.reg_fresh
+R8521 RTLgenproof1.state_incr
+R8699 RTLgen.st_nextreg
+R8679 Coqlib.Plt_Ple_trans
+R8699 RTLgen.st_nextreg
+R8679 Coqlib.Plt_Ple_trans
+R8740 RTLgenproof1.reg_fresh_decr
+R8813 RTLgen.mapping
+R8826 RTLgen.state
+R8929 RTLgenproof1.reg_bounded
+R8917 Coq.Init.Logic "x = y" type_scope
+R8913 Maps "a ! b"
+R8904 RTLgen.map_vars
+R8919 Coq.Init.Datatypes.Some
+R9015 RTLgenproof1.reg_bounded
+R8991 Coq.Lists.List.In
+R8999 RTLgen.map_letvars
+R9145 Coq.Init.Logic "x = y" type_scope
+R9129 Coq.Init.Logic "x = y" type_scope
+R9124 Maps "a ! b"
+R9115 RTLgen.map_vars
+R9131 Coq.Init.Datatypes.Some
+R9100 Coq.Init.Logic "x = y" type_scope
+R9095 Maps "a ! b"
+R9086 RTLgen.map_vars
+R9102 Coq.Init.Datatypes.Some
+R9252 Coq.Init.Logic.False
+R9228 Coq.Lists.List.In
+R9236 RTLgen.map_letvars
+R9216 Coq.Init.Logic "x = y" type_scope
+R9212 Maps "a ! b"
+R9203 RTLgen.map_vars
+R9218 Coq.Init.Datatypes.Some
+R9277 RTLgenproof1.map_wf_var_bounded
+R9309 RTLgenproof1.map_wf_letvar_bounded
+R9344 RTLgenproof1.map_wf_inj
+R9355 RTLgenproof1.map_wf_disj
+R9449 RTLgenproof1.map_wf
+R9434 RTLgenproof1.map_wf
+R9414 RTLgenproof1.state_incr
+R9485 RTLgenproof1.mk_map_wf
+R9485 RTLgenproof1.mk_map_wf
+R9539 RTLgenproof1.map_wf_incr
+R9651 Coq.Init.Logic "A \/ B" type_scope
+R9616 Coq.Init.Logic "'exists' x , p" type_scope
+R9643 Coq.Init.Logic "x = y" type_scope
+R9639 Maps "a ! b"
+R9630 RTLgen.map_vars
+R9645 Coq.Init.Datatypes.Some
+R9656 Coq.Lists.List.In
+R9664 RTLgen.map_letvars
+R9598 Registers.reg
+R9585 RTLgen.mapping
+R9756 Coq.Init.Logic "'exists' x , p" type_scope
+R9777 Coq.Init.Logic "A /\ B" type_scope
+R9767 Coq.Lists.List.In
+R9798 Coq.Init.Logic "x = y" type_scope
+R9794 Maps "a ! b"
+R9785 RTLgen.map_vars
+R9800 Coq.Init.Datatypes.Some
+R9739 Registers.reg
+R9723 Coq.Lists.List.list
+R9728 AST.ident
+R9708 RTLgen.mapping
+R9925 RTLgenproof1.state_incr
+R9912 Coq.Init.Logic "x = y" type_scope
+R9897 RTLgen.add_instr
+R9914 RTLgen.OK
+R9998 RTLgenproof1.state_incr_intro
+R9998 RTLgenproof1.state_incr_intro
+R10031 Coqlib.Ple_succ
+R10031 Coqlib.Ple_succ
+R10049 Coqlib.Ple_refl
+R10049 Coqlib.Ple_refl
+R10075 Maps.gso
+R10092 Coqlib.Plt_ne
+R10075 Maps.gso
+R10092 Coqlib.Plt_ne
+R10124 RTLgenproof1.add_instr_incr
+R10232 Coq.Init.Logic "x = y" type_scope
+R10229 Maps "a ! b"
+R10221 RTLgen.st_code
+R10234 Coq.Init.Datatypes.Some
+R10204 Coq.Init.Logic "x = y" type_scope
+R10189 RTLgen.add_instr
+R10206 RTLgen.OK
+R10313 Maps.gss
+R10313 Maps.gss
+R10342 RTLgenproof1.add_instr_at
+R10472 Coq.Init.Logic "x = y" type_scope
+R10469 Maps "a ! b"
+R10461 RTLgen.st_code
+R10435 RTLgenproof1.state_incr
+R10424 Coq.Init.Logic "x <> y" type_scope
+R10427 Coq.Init.Datatypes.None
+R10415 Coq.Init.Logic "x = y" type_scope
+R10412 Maps "a ! b"
+R10404 RTLgen.st_code
+R10540 RTLgen.st_wf
+R10540 RTLgen.st_wf
+R10677 RTLgenproof1.state_incr
+R10664 Coq.Init.Logic "x = y" type_scope
+R10647 RTLgen.reserve_instr
+R10666 RTLgen.OK
+R10750 RTLgenproof1.state_incr_intro
+R10750 RTLgenproof1.state_incr_intro
+R10783 Coqlib.Ple_succ
+R10783 Coqlib.Ple_succ
+R10801 Coqlib.Ple_refl
+R10801 Coqlib.Ple_refl
+R10969 RTLgenproof1.state_incr
+R10954 Coq.Init.Logic "x = y" type_scope
+R10934 RTLgen.update_instr
+R10956 RTLgen.OK
+R10912 RTLgenproof1.state_incr
+R10897 Coq.Init.Logic "x = y" type_scope
+R10880 RTLgen.reserve_instr
+R10899 RTLgen.OK
+R11064 Coqlib.plt
+R11071 RTLgen.st_nextnode
+R11064 Coqlib.plt
+R11071 RTLgen.st_nextnode
+R11142 RTLgenproof1.state_incr_intro
+R11142 RTLgenproof1.state_incr_intro
+R11175 Coqlib.Plt_Ple
+R11175 Coqlib.Plt_Ple
+R11210 RTLgen.st_nextnode
+R11190 Coqlib.Plt_Ple_trans
+R11210 RTLgen.st_nextnode
+R11190 Coqlib.Plt_Ple_trans
+R11252 Coqlib.Plt_succ
+R11252 Coqlib.Plt_succ
+R11340 Maps.gso
+R11340 Maps.gso
+R11405 Coqlib.Plt_trans_succ
+R11405 Coqlib.Plt_trans_succ
+R11450 Coqlib.Plt_ne
+R11450 Coqlib.Plt_ne
+R11647 RTLgenproof1.state_extends
+R11632 Coq.Init.Logic "x = y" type_scope
+R11612 RTLgen.update_instr
+R11634 RTLgen.OK
+R11590 RTLgenproof1.state_incr
+R11575 Coq.Init.Logic "x = y" type_scope
+R11558 RTLgen.reserve_instr
+R11577 RTLgen.OK
+R11723 Coqlib.peq
+R11723 Coqlib.peq
+R11824 RTLgen.st_wf
+R11824 RTLgen.st_wf
+R11871 Coqlib.Plt_strict
+R11871 Coqlib.Plt_strict
+R11942 Coqlib.Plt_succ
+R11942 Coqlib.Plt_succ
+R11998 Coqlib.plt
+R12008 RTLgen.st_nextnode
+R11998 Coqlib.plt
+R12008 RTLgen.st_nextnode
+R12079 Maps.gso
+R12079 Maps.gso
+R12164 RTLgenproof1.state_incr
+R12151 Coq.Init.Logic "x = y" type_scope
+R12140 RTLgen.new_reg
+R12153 RTLgen.OK
+R12237 RTLgenproof1.state_incr_intro
+R12237 RTLgenproof1.state_incr_intro
+R12270 Coqlib.Ple_refl
+R12270 Coqlib.Ple_refl
+R12286 Coqlib.Ple_succ
+R12286 Coqlib.Ple_succ
+R12320 RTLgenproof1.new_reg_incr
+R12408 RTLgenproof1.reg_bounded
+R12395 Coq.Init.Logic "x = y" type_scope
+R12384 RTLgen.new_reg
+R12397 RTLgen.OK
+R12539 Coqlib.Plt_succ
+R12539 Coqlib.Plt_succ
+R12567 RTLgenproof1.new_reg_bounded
+R12656 RTLgenproof1.reg_fresh
+R12643 Coq.Init.Logic "x = y" type_scope
+R12632 RTLgen.new_reg
+R12645 RTLgen.OK
+R12764 Coqlib.Plt_strict
+R12764 Coqlib.Plt_strict
+R12797 RTLgenproof1.new_reg_fresh
+R12895 RTLgenproof1.reg_bounded
+R12877 RTLgenproof1.reg_in_map
+R12863 RTLgenproof1.map_wf
+R13020 RTLgenproof1.reg_in_map_bounded
+R13134 Coq.Init.Logic "~ x" type_scope
+R13136 RTLgenproof1.reg_in_map
+R13119 RTLgenproof1.map_wf
+R13106 Coq.Init.Logic "x = y" type_scope
+R13095 RTLgen.new_reg
+R13108 RTLgen.OK
+R13218 RTLgenproof1.new_reg_not_in_map
+R13316 RTLgenproof1.reg_in_map
+R13291 RTLgenproof1.mutated_reg
+R13422 RTLgenproof1.mutated_reg_in_map
+R13541 Coq.Init.Logic "~ x" type_scope
+R13543 RTLgenproof1.mutated_reg
+R13526 RTLgenproof1.map_wf
+R13513 Coq.Init.Logic "x = y" type_scope
+R13502 RTLgen.new_reg
+R13515 RTLgen.OK
+R13609 RTLgenproof1.mutated_reg_in_map
+R13609 RTLgenproof1.mutated_reg_in_map
+R13655 RTLgenproof1.new_reg_not_in_map
+R13655 RTLgenproof1.new_reg_not_in_map
+R13710 RTLgenproof1.new_reg_not_mutated
+R13819 RTLgenproof1.map_wf
+R13826 RTLgen.init_mapping
+R13885 RTLgenproof1.mk_map_wf
+R13885 RTLgenproof1.mk_map_wf
+R13921 Maps.gempty
+R13921 Maps.gempty
+R13981 Maps.gempty
+R13981 Maps.gempty
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R14115 RTLgenproof1.state_incr
+R14102 Coq.Init.Logic "x = y" type_scope
+R14081 RTLgen.find_var
+R14104 RTLgen.OK
+R14195 Maps "a ! b"
+R14183 RTLgen.map_vars
+R14195 Maps "a ! b"
+R14183 RTLgen.map_vars
+R14282 RTLgenproof1.find_var_incr
+R14407 RTLgenproof1.reg_in_map
+R14390 RTLgenproof1.map_wf
+R14377 Coq.Init.Logic "x = y" type_scope
+R14356 RTLgen.find_var
+R14379 RTLgen.OK
+R14489 Maps "a ! b"
+R14480 RTLgen.map_vars
+R14489 Maps "a ! b"
+R14480 RTLgen.map_vars
+R14610 RTLgenproof1.find_var_in_map
+R14738 RTLgenproof1.reg_bounded
+R14721 RTLgenproof1.map_wf
+R14708 Coq.Init.Logic "x = y" type_scope
+R14687 RTLgen.find_var
+R14710 RTLgen.OK
+R14800 RTLgenproof1.find_var_bounded
+R14961 Coq.Init.Logic "~ x" type_scope
+R14963 RTLgenproof1.mutated_reg
+R14941 Coq.Init.Logic "~ x" type_scope
+R14943 Coq.Lists.List.In
+R14922 RTLgenproof1.map_wf
+R14907 Coq.Init.Logic "x = y" type_scope
+R14886 RTLgen.find_var
+R14909 RTLgen.OK
+R15053 Maps "a ! b"
+R15044 RTLgen.map_vars
+R15053 Maps "a ! b"
+R15044 RTLgen.map_vars
+R15172 Coq.Init.Logic "x = y" type_scope
+R15172 Coq.Init.Logic "x = y" type_scope
+R15262 RTLgenproof1.find_var_not_mutated
+R15379 RTLgenproof1.state_incr
+R15366 Coq.Init.Logic "x = y" type_scope
+R15343 RTLgen.find_letvar
+R15368 RTLgen.OK
+R15450 Coq.Lists.List.nth_error
+R15461 RTLgen.map_letvars
+R15450 Coq.Lists.List.nth_error
+R15461 RTLgen.map_letvars
+R15563 RTLgenproof1.find_letvar_incr
+R15695 RTLgenproof1.reg_in_map
+R15678 RTLgenproof1.map_wf
+R15665 Coq.Init.Logic "x = y" type_scope
+R15642 RTLgen.find_letvar
+R15667 RTLgen.OK
+R15768 Coq.Lists.List.nth_error
+R15779 RTLgen.map_letvars
+R15768 Coq.Lists.List.nth_error
+R15779 RTLgen.map_letvars
+R15864 Coqlib.nth_error_in
+R15864 Coqlib.nth_error_in
+R15932 RTLgenproof1.find_letvar_in_map
+R16067 RTLgenproof1.reg_bounded
+R16050 RTLgenproof1.map_wf
+R16037 Coq.Init.Logic "x = y" type_scope
+R16014 RTLgen.find_letvar
+R16039 RTLgen.OK
+R16129 RTLgenproof1.find_letvar_bounded
+R16277 Coq.Init.Logic "~ x" type_scope
+R16279 RTLgenproof1.mutated_reg
+R16258 RTLgenproof1.map_wf
+R16243 Coq.Init.Logic "x = y" type_scope
+R16220 RTLgen.find_letvar
+R16245 RTLgen.OK
+R16358 Coq.Lists.List.nth_error
+R16369 RTLgen.map_letvars
+R16358 Coq.Lists.List.nth_error
+R16369 RTLgen.map_letvars
+R16555 RTLgenproof1.find_letvar_not_mutated
+R16688 RTLgenproof1.reg_bounded
+R16667 Coq.Init.Logic "x = y" type_scope
+R16646 RTLgen.add_var
+R16669 RTLgen.OK
+R16672 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R16879 RTLgenproof1.state_incr
+R16865 Coq.Init.Logic "x = y" type_scope
+R16845 RTLgen.add_var
+R16867 RTLgen.OK
+R16980 RTLgenproof1.add_var_incr
+R17110 RTLgenproof1.map_wf
+R17093 RTLgenproof1.map_wf
+R17073 Coq.Init.Logic "x = y" type_scope
+R17053 RTLgen.add_var
+R17075 RTLgen.OK
+R17078 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R17213 RTLgenproof1.mk_map_wf
+R17213 RTLgenproof1.mk_map_wf
+R17256 Maps.gsspec
+R17256 Maps.gsspec
+R17279 Coqlib.peq
+R17279 Coqlib.peq
+R17429 Maps.gsspec
+R17429 Maps.gsspec
+R17429 Maps.gsspec
+R17429 Maps.gsspec
+R17453 Coqlib.peq
+R17474 Coqlib.peq
+R17453 Coqlib.peq
+R17474 Coqlib.peq
+R17474 Coqlib.peq
+R17665 Coqlib.peq
+R17665 Coqlib.peq
+R17706 Maps.gss
+R17706 Maps.gss
+R17793 Maps.gso
+R17793 Maps.gso
+R17845 RTLgenproof1.add_var_wf
+R17979 Coq.Init.Logic "x = y" type_scope
+R17973 Maps "a ! b"
+R17964 RTLgen.map_vars
+R17981 Coq.Init.Datatypes.Some
+R17938 Coq.Init.Logic "x = y" type_scope
+R17918 RTLgen.add_var
+R17940 RTLgen.OK
+R17943 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R18087 Maps.gss
+R18087 Maps.gss
+R18190 RTLgenproof1.state_incr
+R18177 Coq.Init.Logic "x = y" type_scope
+R18155 RTLgen.add_vars
+R18179 RTLgen.OK
+R18510 RTLgenproof1.reg_bounded
+R18499 Coq.Lists.List.In
+R18465 Coq.Init.Logic "x = y" type_scope
+R18442 RTLgen.add_vars
+R18467 RTLgen.OK
+R18470 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R18699 RTLgenproof1.add_var_bounded
+R18699 RTLgenproof1.add_var_bounded
+R18744 RTLgenproof1.reg_bounded_incr
+R18744 RTLgenproof1.reg_bounded_incr
+R18918 RTLgenproof1.map_wf
+R18901 RTLgenproof1.map_wf
+R18878 Coq.Init.Logic "x = y" type_scope
+R18856 RTLgen.add_vars
+R18880 RTLgen.OK
+R18883 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R19110 RTLgenproof1.add_var_wf
+R19110 RTLgenproof1.add_var_wf
+R19187 RTLgenproof1.add_vars_wf
+R19312 RTLgenproof1.map_wf
+R19320 RTLgen.add_letvar
+R19287 Coq.Init.Logic "~ x" type_scope
+R19289 RTLgenproof1.reg_in_map
+R19266 RTLgenproof1.reg_bounded
+R19248 RTLgenproof1.map_wf
+R19383 RTLgenproof1.mk_map_wf
+R19383 RTLgenproof1.mk_map_wf
+R19410 RTLgenproof1.map_wf_var_bounded
+R19410 RTLgenproof1.map_wf_var_bounded
+R19498 RTLgenproof1.map_wf_letvar_bounded
+R19498 RTLgenproof1.map_wf_letvar_bounded
+R19537 RTLgenproof1.map_wf_inj
+R19537 RTLgenproof1.map_wf_inj
+R19640 RTLgenproof1.map_wf_disj
+R19640 RTLgenproof1.map_wf_disj
+R19800 RTLgenproof1.state_incr
+R19787 Coq.Init.Logic "x = y" type_scope
+R19764 RTLgen.alloc_reg
+R19789 RTLgen.OK
+R19906 Coq.Lists.List.In_dec
+R19913 AST.ident_eq
+R19906 Coq.Lists.List.In_dec
+R19913 AST.ident_eq
+R19965 RTLgenproof1.alloc_reg_incr
+R20098 RTLgenproof1.reg_bounded
+R20085 Coq.Init.Logic "x = y" type_scope
+R20062 RTLgen.alloc_reg
+R20087 RTLgen.OK
+R20043 RTLgenproof1.map_wf
+R20204 Coq.Lists.List.In_dec
+R20211 AST.ident_eq
+R20204 Coq.Lists.List.In_dec
+R20211 AST.ident_eq
+R20263 RTLgenproof1.alloc_reg_bounded
+R20423 Coq.Init.Logic "A \/ B" type_scope
+R20406 RTLgenproof1.reg_in_map
+R20426 RTLgenproof1.reg_fresh
+R20391 Coq.Init.Logic "x = y" type_scope
+R20369 RTLgen.alloc_reg
+R20393 RTLgen.OK
+R20351 RTLgenproof1.map_wf
+R20543 Coq.Lists.List.In_dec
+R20550 AST.ident_eq
+R20543 Coq.Lists.List.In_dec
+R20550 AST.ident_eq
+R20732 Registers.reg
+R20724 Cminor.expr
+R20710 Coq.Lists.List.list
+R20715 AST.ident
+R20699 RTLgen.mapping
+R20690 RTLgen.state
+R20885 Cminor.Evar
+R20842 Coq.Init.Logic "x = y" type_scope
+R20838 Maps "a ! b"
+R20829 RTLgen.map_vars
+R20844 Coq.Init.Datatypes.Some
+R20808 Coq.Init.Logic "~ x" type_scope
+R20810 Coq.Lists.List.In
+R21030 Cminor.Eletvar
+R20987 Coq.Init.Logic "x = y" type_scope
+R20955 Coq.Lists.List.nth_error
+R20970 RTLgen.map_letvars
+R20989 Coq.Init.Datatypes.Some
+R21130 RTLgenproof1.reg_bounded
+R21101 Coq.Init.Logic "~ x" type_scope
+R21103 RTLgenproof1.reg_in_map
+R21297 RTLgenproof1.target_reg_ok
+R21263 RTLgenproof1.target_reg_ok
+R21241 RTLgenproof1.state_incr
+R21367 RTLgenproof1.target_reg_immut_var
+R21367 RTLgenproof1.target_reg_immut_var
+R21403 RTLgenproof1.target_reg_letvar
+R21403 RTLgenproof1.target_reg_letvar
+R21436 RTLgenproof1.target_reg_other
+R21436 RTLgenproof1.target_reg_other
+R21489 RTLgenproof1.target_reg_ok_incr
+R21619 RTLgenproof1.reg_bounded
+R21586 RTLgenproof1.target_reg_ok
+R21568 RTLgenproof1.map_wf
+R21709 RTLgenproof1.target_reg_bounded
+R21843 Coq.Init.Logic "~ x" type_scope
+R21845 RTLgenproof1.mutated_reg
+R21810 RTLgenproof1.target_reg_ok
+R21792 RTLgenproof1.map_wf
+R21987 Coq.Init.Logic "x = y" type_scope
+R21987 Coq.Init.Logic "x = y" type_scope
+R22048 Coq.Lists.List.In
+R22054 RTLgen.map_letvars
+R22048 Coq.Lists.List.In
+R22054 RTLgen.map_letvars
+R22172 RTLgenproof1.target_reg_not_mutated
+R22317 RTLgenproof1.target_reg_ok
+R22302 Coq.Init.Logic "x = y" type_scope
+R22279 RTLgen.alloc_reg
+R22304 RTLgen.OK
+R22260 RTLgenproof1.map_wf
+R22431 RTLgenproof1.target_reg_other
+R22431 RTLgenproof1.target_reg_other
+R22431 RTLgenproof1.target_reg_other
+R22431 RTLgenproof1.target_reg_other
+R22431 RTLgenproof1.target_reg_other
+R22431 RTLgenproof1.target_reg_other
+R22431 RTLgenproof1.target_reg_other
+R22431 RTLgenproof1.target_reg_other
+R22431 RTLgenproof1.target_reg_other
+R22431 RTLgenproof1.target_reg_other
+R22495 Coq.Lists.List.In_dec
+R22502 AST.ident_eq
+R22495 Coq.Lists.List.In_dec
+R22502 AST.ident_eq
+R22535 RTLgenproof1.target_reg_other
+R22535 RTLgenproof1.target_reg_other
+R22578 RTLgenproof1.target_reg_immut_var
+R22578 RTLgenproof1.target_reg_immut_var
+R22661 Maps "a ! b"
+R22649 RTLgen.map_vars
+R22661 Maps "a ! b"
+R22649 RTLgen.map_vars
+R22721 RTLgenproof1.target_reg_letvar
+R22721 RTLgenproof1.target_reg_letvar
+R22786 Coq.Lists.List.nth_error
+R22797 RTLgen.map_letvars
+R22786 Coq.Lists.List.nth_error
+R22797 RTLgen.map_letvars
+R22883 RTLgenproof1.alloc_reg_target_ok
+R23005 RTLgenproof1.state_incr
+R22991 Coq.Init.Logic "x = y" type_scope
+R22966 RTLgen.alloc_regs
+R22993 RTLgen.OK
+R23161 RTLgenproof1.alloc_regs_incr
+R23324 RTLgenproof1.reg_bounded
+R23313 Coq.Lists.List.In
+R23287 Coq.Init.Logic "x = y" type_scope
+R23262 RTLgen.alloc_regs
+R23289 RTLgen.OK
+R23243 RTLgenproof1.map_wf
+R23542 RTLgenproof1.alloc_regs_bounded
+R23730 Coq.Init.Logic "A \/ B" type_scope
+R23713 RTLgenproof1.reg_in_map
+R23733 RTLgenproof1.reg_fresh
+R23702 Coq.Lists.List.In
+R23676 Coq.Init.Logic "x = y" type_scope
+R23652 RTLgen.alloc_regs
+R23678 RTLgen.OK
+R23634 RTLgenproof1.map_wf
+R23851 Coq.Lists.List.in_inv
+R23851 Coq.Lists.List.in_inv
+R23897 RTLgenproof1.map_wf
+R23897 RTLgenproof1.map_wf
+R23938 RTLgenproof1.alloc_reg_fresh_or_in_map
+R23938 RTLgenproof1.alloc_reg_fresh_or_in_map
+R24141 Coq.Lists.List.list
+R24146 Registers.reg
+R24129 Cminor.exprlist
+R24115 Coq.Lists.List.list
+R24120 AST.ident
+R24104 RTLgen.mapping
+R24095 RTLgen.state
+R24242 Coq.Lists.List.nil
+R24237 Cminor.Enil
+R24466 Coq.Lists.List "x :: y" list_scope
+R24451 Cminor.Econs
+R24348 RTLgenproof1.target_reg_ok
+R24325 Coq.Init.Logic "A \/ B" type_scope
+R24308 RTLgenproof1.reg_in_map
+R24328 Coq.Init.Logic "~ x" type_scope
+R24330 Coq.Lists.List.In
+R24603 RTLgenproof1.target_regs_ok
+R24581 RTLgenproof1.state_incr
+R24531 RTLgenproof1.target_regs_ok
+R24674 RTLgenproof1.target_regs_nil
+R24674 RTLgenproof1.target_regs_nil
+R24700 RTLgenproof1.target_regs_cons
+R24700 RTLgenproof1.target_regs_cons
+R24754 RTLgenproof1.target_regs_ok_incr
+R24912 RTLgenproof1.reg_bounded
+R24901 Coq.Lists.List.In
+R24873 RTLgenproof1.map_wf
+R24837 RTLgenproof1.target_regs_ok
+R25056 RTLgenproof1.target_regs_bounded
+R25218 Coq.Init.Logic "~ x" type_scope
+R25220 RTLgenproof1.mutated_reg
+R25207 Coq.Lists.List.In
+R25179 RTLgenproof1.map_wf
+R25143 RTLgenproof1.target_regs_ok
+R25371 RTLgenproof1.target_regs_not_mutated
+R25523 RTLgenproof1.target_regs_ok
+R25507 Coq.Init.Logic "x = y" type_scope
+R25482 RTLgen.alloc_regs
+R25509 RTLgen.OK
+R25463 RTLgenproof1.map_wf
+R25625 RTLgenproof1.target_regs_nil
+R25625 RTLgenproof1.target_regs_nil
+R25686 RTLgenproof1.target_regs_cons
+R25686 RTLgenproof1.target_regs_cons
+R25738 RTLgenproof1.map_wf
+R25738 RTLgenproof1.map_wf
+R25778 RTLgenproof1.alloc_reg_fresh_or_in_map
+R25778 RTLgenproof1.alloc_reg_fresh_or_in_map
+R25912 RTLgenproof1.alloc_regs_target_ok
+R26049 Coq.Init.Datatypes.option
+R26056 Registers.reg
+R26038 RTLgen.mapping
+R26029 RTLgen.state
+R26141 Coq.Init.Datatypes.None
+R26267 Coq.Init.Datatypes.Some
+R26221 RTLgenproof1.reg_bounded
+R26198 Coq.Init.Logic "~ x" type_scope
+R26200 RTLgenproof1.reg_in_map
+R26379 RTLgenproof1.return_reg_ok
+R26350 RTLgenproof1.return_reg_ok
+R26328 RTLgenproof1.state_incr
+R26498 RTLgenproof1.return_reg_ok_incr
+R26623 RTLgenproof1.return_reg_ok
+R26645 RTLgen.ret_reg
+R26604 RTLgenproof1.map_wf
+R26589 Coq.Init.Logic "x = y" type_scope
+R26578 RTLgen.new_reg
+R26591 RTLgen.OK
+R26704 AST.sig_res
+R26704 AST.sig_res
+R26874 RTLgen.mapping
+R26887 Cminor.env
+R26904 Cminor.letenv
+R26924 RTL.regset
+R27018 Coq.Init.Logic "'exists' x , p" type_scope
+R27055 Coq.Init.Logic "A /\ B" type_scope
+R27046 Coq.Init.Logic "x = y" type_scope
+R27042 Maps "a ! b"
+R27033 RTLgen.map_vars
+R27048 Coq.Init.Datatypes.Some
+R27063 Coq.Init.Logic "x = y" type_scope
+R27060 Registers "a # b"
+R27006 Coq.Init.Logic "x = y" type_scope
+R27002 Maps "a ! b"
+R27008 Coq.Init.Datatypes.Some
+R27115 Coq.Init.Logic "x = y" type_scope
+R27093 Registers "a ## b"
+R27101 RTLgen.map_letvars
+R27274 Coq.Init.Logic "x = y" type_scope
+R27271 Registers "a # b"
+R27255 Coq.Init.Logic "x = y" type_scope
+R27251 Maps "a ! b"
+R27257 Coq.Init.Datatypes.Some
+R27223 RTLgenproof1.match_env
+R27208 Coq.Init.Logic "x = y" type_scope
+R27189 RTLgen.find_var
+R27210 RTLgen.OK
+R27345 Maps "a ! b"
+R27336 RTLgen.map_vars
+R27345 Maps "a ! b"
+R27336 RTLgen.map_vars
+R27411 RTLgenproof1.me_vars
+R27411 RTLgenproof1.me_vars
+R27565 RTLgenproof1.match_env_find_reg
+R27726 RTLgenproof1.match_env
+R27713 Coq.Init.Logic "x = y" type_scope
+R27710 Registers "a # b"
+R27717 Registers "a # b"
+R27686 RTLgenproof1.reg_in_map
+R27647 RTLgenproof1.match_env
+R27773 RTLgenproof1.mk_match_env
+R27773 RTLgenproof1.mk_match_env
+R27819 RTLgenproof1.me_vars
+R27819 RTLgenproof1.me_vars
+R27961 Registers "a ## b"
+R27965 RTLgen.map_letvars
+R27961 Registers "a ## b"
+R27965 RTLgen.map_letvars
+R27991 Coqlib.list_map_exten
+R27991 Coqlib.list_map_exten
+R28060 RTLgenproof1.me_letvars
+R28060 RTLgenproof1.me_letvars
+R28198 RTLgenproof1.match_env
+R28220 Registers "a # b <- c"
+R28173 Coq.Init.Logic "~ x" type_scope
+R28175 RTLgenproof1.reg_in_map
+R28146 RTLgenproof1.match_env
+R28253 RTLgenproof1.match_env_invariant
+R28253 RTLgenproof1.match_env_invariant
+R28304 Registers.eq
+R28304 Registers.eq
+R28361 Registers.gso
+R28361 Registers.gso
+R28397 RTLgenproof1.match_env_update_temp
+R28628 RTLgenproof1.match_env
+R28643 Maps.set
+R28615 Coq.Init.Logic "x = y" type_scope
+R28612 Registers "a # b"
+R28619 Registers "a # b"
+R28601 Coq.Init.Logic "x <> y" type_scope
+R28579 Coq.Init.Logic "x = y" type_scope
+R28576 Registers "a # b"
+R28546 RTLgenproof1.match_env
+R28531 Coq.Init.Logic "x = y" type_scope
+R28513 RTLgen.find_var
+R28533 RTLgen.OK
+R28495 RTLgenproof1.map_wf
+R28753 Maps "a ! b"
+R28741 RTLgen.map_vars
+R28753 Maps "a ! b"
+R28741 RTLgen.map_vars
+R28798 RTLgenproof1.mk_match_env
+R28798 RTLgenproof1.mk_match_env
+R28837 Coqlib.peq
+R28837 Coqlib.peq
+R28879 Maps.gss
+R28879 Maps.gss
+R28966 Maps.gso
+R28966 Maps.gso
+R28996 RTLgenproof1.me_vars
+R28996 RTLgenproof1.me_vars
+R29179 Registers "a ## b"
+R29183 RTLgen.map_letvars
+R29179 Registers "a ## b"
+R29183 RTLgen.map_letvars
+R29209 Coqlib.list_map_exten
+R29209 Coqlib.list_map_exten
+R29310 RTLgenproof1.me_letvars
+R29310 RTLgenproof1.me_letvars
+R29454 RTLgenproof1.match_env
+R29488 Coq.Lists.List "x :: y" list_scope
+R29465 RTLgen.add_letvar
+R29445 Coq.Init.Logic "x = y" type_scope
+R29442 Registers "a # b"
+R29413 RTLgenproof1.match_env
+R29550 RTLgenproof1.mk_match_env
+R29550 RTLgenproof1.mk_match_env
+R29588 RTLgenproof1.me_vars
+R29588 RTLgenproof1.me_vars
+R29631 RTLgenproof1.me_letvars
+R29631 RTLgenproof1.me_letvars
+R29783 RTLgenproof1.match_env
+R29753 RTLgenproof1.match_env
+R29737 Coq.Init.Logic "x = y" type_scope
+R29734 Registers "a # b"
+R29742 Registers "a # b"
+R29830 RTLgenproof1.mk_match_env
+R29830 RTLgenproof1.mk_match_env
+R29866 RTLgenproof1.me_vars
+R29866 RTLgenproof1.me_vars
+R29985 Registers "a ## b"
+R29989 RTLgen.map_letvars
+R29985 Registers "a ## b"
+R29989 RTLgen.map_letvars
+R30015 Coqlib.list_map_exten
+R30015 Coqlib.list_map_exten
+R30077 RTLgenproof1.me_letvars
+R30077 RTLgenproof1.me_letvars
+R30221 Coq.Init.Logic "x = y" type_scope
+R30208 RTLgen.map_letvars
+R30229 RTLgen.map_letvars
+R30179 Coq.Init.Logic "x = y" type_scope
+R30161 RTLgen.add_var
+R30181 RTLgen.OK
+R30184 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R30439 Coq.Init.Logic "x = y" type_scope
+R30426 RTLgen.map_letvars
+R30447 RTLgen.map_letvars
+R30396 Coq.Init.Logic "x = y" type_scope
+R30376 RTLgen.add_vars
+R30398 RTLgen.OK
+R30401 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R30586 RTLgen.map_letvars
+R30586 RTLgen.map_letvars
+R30622 RTLgenproof1.add_var_letenv
+R30622 RTLgenproof1.add_var_letenv
+R30729 RTLgenproof1.match_env
+R30766 Registers.init
+R30778 Values.Vundef
+R30761 Coq.Lists.List.nil
+R30744 Maps.empty
+R30756 Values.val
+R30718 Coq.Init.Logic "x = y" type_scope
+R30705 RTLgen.map_letvars
+R30720 Coq.Lists.List.nil
+R30810 RTLgenproof1.mk_match_env
+R30810 RTLgenproof1.mk_match_env
+R30842 Maps.gempty
+R30842 Maps.gempty
+R31084 Coq.Init.Logic "A /\ B" type_scope
+R31026 RTLgenproof1.match_env
+R31065 RTL.init_regs
+R31060 Coq.Lists.List.nil
+R31042 Cminor.set_params
+R31136 Coq.Init.Logic "x = y" type_scope
+R31132 Registers "a # b"
+R31117 RTL.init_regs
+R31138 Values.Vundef
+R31098 RTLgenproof1.reg_fresh
+R31002 Coq.Init.Logic "x = y" type_scope
+R30974 RTLgen.add_vars
+R30983 RTLgen.init_mapping
+R31004 RTLgen.OK
+R31007 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R31255 RTLgenproof1.match_env_empty
+R31255 RTLgenproof1.match_env_empty
+R31306 Registers.gi
+R31306 Registers.gi
+R31470 Coq.Init.Logic "x = y" type_scope
+R31453 RTLgen.map_letvars
+R31472 Coq.Lists.List.nil
+R31470 Coq.Init.Logic "x = y" type_scope
+R31453 RTLgen.map_letvars
+R31472 Coq.Lists.List.nil
+R31494 RTLgen.map_letvars
+R31494 RTLgen.map_letvars
+R31519 RTLgenproof1.add_var_letenv
+R31519 RTLgenproof1.add_var_letenv
+R31559 RTLgen.map_letvars
+R31571 RTLgen.init_mapping
+R31559 RTLgen.map_letvars
+R31571 RTLgen.init_mapping
+R31595 RTLgenproof1.add_vars_letenv
+R31595 RTLgenproof1.add_vars_letenv
+R31694 Coq.Lists.List.nil
+R31694 Coq.Lists.List.nil
+R31794 Maps.gsspec
+R31814 Coqlib.peq
+R31794 Maps.gsspec
+R31794 Maps.gsspec
+R31794 Maps.gsspec
+R31814 Coqlib.peq
+R31866 Registers.gi
+R31866 Registers.gi
+R31901 RTLgenproof1.me_vars
+R31901 RTLgenproof1.me_vars
+R31985 RTL.init_regs
+R31995 Coq.Lists.List.nil
+R32008 Registers.init
+R32020 Values.Vundef
+R31985 RTL.init_regs
+R31995 Coq.Lists.List.nil
+R32008 Registers.init
+R32020 Values.Vundef
+R32111 Registers.gi
+R32111 Registers.gi
+R32270 Maps.gsspec
+R32290 Coqlib.peq
+R32270 Maps.gsspec
+R32270 Maps.gsspec
+R32270 Maps.gsspec
+R32290 Coqlib.peq
+R32342 Registers.gss
+R32342 Registers.gss
+R32378 RTLgenproof1.me_vars
+R32378 RTLgenproof1.me_vars
+R32459 Registers.gso
+R32459 Registers.gso
+R32485 RTLgenproof1.bounded_fresh_different
+R32485 RTLgenproof1.bounded_fresh_different
+R32533 RTLgenproof1.map_wf
+R32533 RTLgenproof1.map_wf
+R32555 RTLgenproof1.add_vars_wf
+R32555 RTLgenproof1.add_vars_wf
+R32581 RTLgenproof1.init_mapping_wf
+R32581 RTLgenproof1.init_mapping_wf
+R32679 Registers.gso
+R32679 Registers.gso
+R32730 Coq.Init.Logic.sym_not_equal
+R32730 Coq.Init.Logic.sym_not_equal
+R32985 RTLgenproof1.match_env
+R33001 Cminor.set_locals
+R32961 Coq.Init.Logic "x = y" type_scope
+R32941 RTLgen.add_vars
+R32963 RTLgen.OK
+R32966 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R32926 Coq.Init.Logic "x = y" type_scope
+R32923 Registers "a # b"
+R32928 Values.Vundef
+R32903 RTLgenproof1.reg_fresh
+R32864 RTLgenproof1.match_env
+R32812 RTLgenproof1.map_wf
+R33164 RTLgenproof1.match_env
+R33177 Cminor.set_locals
+R33164 RTLgenproof1.match_env
+R33177 Cminor.set_locals
+R33338 Maps.gsspec
+R33338 Maps.gsspec
+R33338 Maps.gsspec
+R33338 Maps.gsspec
+R33361 Coqlib.peq
+R33361 Coqlib.peq
+R33453 RTLgenproof1.reg_fresh_decr
+R33453 RTLgenproof1.reg_fresh_decr
+R33486 RTLgenproof1.add_vars_incr
+R33486 RTLgenproof1.add_vars_incr
+R33536 RTLgenproof1.me_vars
+R33536 RTLgenproof1.me_vars
+R33569 RTLgenproof1.me_letvars
+R33569 RTLgenproof1.me_letvars
+R33800 RTLgenproof1.match_env
+R33878 RTL.init_regs
+R33873 Coq.Lists.List.nil
+R33816 Cminor.set_locals
+R33833 Cminor.set_params
+R33773 Coq.Init.Logic "x = y" type_scope
+R33751 RTLgen.add_vars
+R33775 RTLgen.OK
+R33778 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R33722 Coq.Init.Logic "x = y" type_scope
+R33690 RTLgen.add_vars
+R33699 RTLgen.init_mapping
+R33724 RTLgen.OK
+R33727 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R33938 RTLgenproof1.match_set_params_init_regs
+R33938 RTLgenproof1.match_set_params_init_regs
+R34012 RTLgenproof1.match_set_locals
+R34012 RTLgenproof1.match_set_locals
+R34046 RTLgenproof1.add_vars_wf
+R34046 RTLgenproof1.add_vars_wf
+R34072 RTLgenproof1.init_mapping_wf
+R34072 RTLgenproof1.init_mapping_wf
+R34243 RTLgenproof1.state_incr
+R34227 Coq.Init.Logic "x = y" type_scope
+R34207 RTLgen.add_move
+R34229 RTLgen.OK
+R34312 Registers.eq
+R34312 Registers.eq
+R34418 RTLgenproof1.add_move_incr
+R35907 Coq.Init.Logic "A /\ B" type_scope
+R35898 Cminor.expr
+R35947 Coq.Init.Logic "A /\ B" type_scope
+R35932 Cminor.condexpr
+R35972 Cminor.exprlist
+R35863 Cminor.Econs
+R35840 Cminor.exprlist
+R35807 Cminor.expr
+R35780 Cminor.Enil
+R35745 Cminor.CEcondition
+R35722 Cminor.condexpr
+R35683 Cminor.condexpr
+R35637 Cminor.condexpr
+R35602 Cminor.CEcond
+R35579 Cminor.exprlist
+R35563 Op.condition
+R35532 Cminor.CEfalse
+R35512 Cminor.CEtrue
+R35487 Cminor.Eletvar
+R35479 Coq.Init.Datatypes.nat
+R35445 Cminor.Elet
+R35428 Cminor.expr
+R35403 Cminor.expr
+R35361 Cminor.Econdition
+R35344 Cminor.expr
+R35311 Cminor.expr
+R35266 Cminor.condexpr
+R35229 Cminor.Ecall
+R35207 Cminor.exprlist
+R35173 Cminor.expr
+R35157 AST.signature
+R35116 Cminor.Estore
+R35099 Cminor.expr
+R35060 Cminor.exprlist
+R35043 Op.addressing
+R35024 AST.memory_chunk
+R34987 Cminor.Eload
+R34957 Cminor.exprlist
+R34940 Op.addressing
+R34921 AST.memory_chunk
+R34888 Cminor.Eop
+R34866 Cminor.exprlist
+R34850 Op.operation
+R34813 Cminor.Eassign
+R34796 Cminor.expr
+R34784 AST.ident
+R34752 Cminor.Evar
+R34742 AST.ident
+R34704 Cminor.exprlist
+R34671 Cminor.condexpr
+R34651 Cminor.expr
+R36021 RTLgenproof1.expr_ind3
+R36021 RTLgenproof1.expr_ind3
+R36069 RTLgenproof1.condexpr_ind3
+R36069 RTLgenproof1.condexpr_ind3
+R36114 RTLgenproof1.exprlist_ind3
+R36114 RTLgenproof1.exprlist_ind3
+R36287 RTLgenproof1.state_incr
+R36273 Coq.Init.Logic "x = y" type_scope
+R36243 RTLgen.transl_expr
+R36275 RTLgen.OK
+R36193 Cminor.expr
+R36463 RTLgenproof1.state_incr
+R36449 Coq.Init.Logic "x = y" type_scope
+R36407 RTLgen.transl_condition
+R36451 RTLgen.OK
+R36346 Cminor.condexpr
+R36625 RTLgenproof1.state_incr
+R36611 Coq.Init.Logic "x = y" type_scope
+R36576 RTLgen.transl_exprlist
+R36613 RTLgen.OK
+R36522 Cminor.exprlist
+R36722 Coq.Init.Logic "A /\ B" type_scope
+R36699 RTLgenproof1.transl_expr_incr_pred
+R36768 Coq.Init.Logic "A /\ B" type_scope
+R36740 RTLgenproof1.transl_condition_incr_pred
+R36787 RTLgenproof1.transl_exprlist_incr_pred
+R36833 RTLgenproof1.expr_condexpr_exprlist_ind
+R36833 RTLgenproof1.expr_condexpr_exprlist_ind
+R37108 RTLgenproof1.state_incr_trans3
+R37108 RTLgenproof1.state_incr_trans3
+R37181 RTLgenproof1.state_incr_trans4
+R37181 RTLgenproof1.state_incr_trans4
+R37501 RTLgenproof1.state_incr
+R37487 Coq.Init.Logic "x = y" type_scope
+R37457 RTLgen.transl_expr
+R37489 RTLgen.OK
+R37525 Coq.Init.Logic.proj1
+R37531 RTLgenproof1.transl_expr_condition_exprlist_incr
+R37698 RTLgenproof1.state_incr
+R37684 Coq.Init.Logic "x = y" type_scope
+R37642 RTLgen.transl_condition
+R37686 RTLgen.OK
+R37722 Coq.Init.Logic.proj1
+R37729 Coq.Init.Logic.proj2
+R37735 RTLgenproof1.transl_expr_condition_exprlist_incr
+R37889 RTLgenproof1.state_incr
+R37875 Coq.Init.Logic "x = y" type_scope
+R37840 RTLgen.transl_exprlist
+R37877 RTLgen.OK
+R37913 Coq.Init.Logic.proj2
+R37920 Coq.Init.Logic.proj2
+R37926 RTLgenproof1.transl_expr_condition_exprlist_incr
+R37979 RTLgenproof1.transl_expr_incr
+R37996 RTLgenproof1.transl_condition_incr
+R38018 RTLgenproof1.transl_exprlist_incr
+R38726 Coq.Init.Logic "A /\ B" type_scope
+R38717 Cminor.stmt
+R38751 Cminor.stmtlist
+R38682 Cminor.Scons
+R38659 Cminor.stmtlist
+R38626 Cminor.stmt
+R38599 Cminor.Snil
+R38574 Cminor.Sreturn
+R38558 Coq.Init.Datatypes.option
+R38565 Cminor.expr
+R38526 Cminor.Sexit
+R38518 Coq.Init.Datatypes.nat
+R38485 Cminor.Sblock
+R38464 Cminor.stmtlist
+R38432 Cminor.Sloop
+R38411 Cminor.stmtlist
+R38368 Cminor.Sifthenelse
+R38346 Cminor.stmtlist
+R38307 Cminor.stmtlist
+R38292 Cminor.condexpr
+R38259 Cminor.Sexpr
+R38250 Cminor.expr
+R38212 Cminor.stmtlist
+R38192 Cminor.stmt
+R38800 RTLgenproof1.stmt_ind2
+R38800 RTLgenproof1.stmt_ind2
+R38838 RTLgenproof1.stmtlist_ind2
+R38838 RTLgenproof1.stmtlist_ind2
+R39030 RTLgenproof1.state_incr
+R39014 Coq.Init.Logic "x = y" type_scope
+R38974 RTLgen.transl_stmt
+R39016 RTLgen.OK
+R38914 Cminor.stmt
+R39214 RTLgenproof1.state_incr
+R39198 Coq.Init.Logic "x = y" type_scope
+R39153 RTLgen.transl_stmtlist
+R39200 RTLgen.OK
+R39089 Cminor.stmtlist
+R39301 Coq.Init.Logic "A /\ B" type_scope
+R39278 RTLgenproof1.transl_stmt_incr_pred
+R39320 RTLgenproof1.transl_stmtlist_incr_pred
+R39366 RTLgenproof1.stmt_stmtlist_ind
+R39366 RTLgenproof1.stmt_stmtlist_ind
+R39596 RTLgen.more_likely
+R39596 RTLgen.more_likely
+R39697 RTL.Inop
+R39667 RTLgenproof1.update_instr_incr
+R39697 RTL.Inop
+R39667 RTLgenproof1.update_instr_incr
+R39757 Coq.Lists.List.nth_error
+R39757 Coq.Lists.List.nth_error
+R40085 RTLgenproof1.state_incr
+R40069 Coq.Init.Logic "x = y" type_scope
+R40029 RTLgen.transl_stmt
+R40071 RTLgen.OK
+R40109 Coq.Init.Logic.proj1
+R40115 RTLgenproof1.transl_stmt_stmtlist_incr
+R40280 RTLgenproof1.state_incr
+R40264 Coq.Init.Logic "x = y" type_scope
+R40219 RTLgen.transl_stmtlist
+R40266 RTLgen.OK
+R40304 Coq.Init.Logic.proj2
+R40310 RTLgenproof1.transl_stmt_stmtlist_incr
+R40352 RTLgenproof1.transl_stmt_incr
+R40369 RTLgenproof1.transl_stmtlist_incr
+FRTLgenproof
+R381 Cminor.program
+R413 RTL.program
+R465 Coq.Init.Logic "x = y" type_scope
+R445 RTLgen.transl_program
+R467 Coq.Init.Datatypes.Some
+R489 Cminor.genv
+R504 Globalenvs.globalenv
+R535 RTL.genv
+R547 Globalenvs.globalenv
+R639 Coq.Init.Logic "x = y" type_scope
+R616 Globalenvs.find_symbol
+R641 Globalenvs.find_symbol
+R608 AST.ident
+R742 RTLgen.transl_function
+R705 Globalenvs.find_symbol_transf_partial
+R742 RTLgen.transl_function
+R705 Globalenvs.find_symbol_transf_partial
+R895 Coq.Init.Logic "'exists' x , p" type_scope
+R944 Coq.Init.Logic "A /\ B" type_scope
+R934 Coq.Init.Logic "x = y" type_scope
+R908 Globalenvs.find_funct_ptr
+R936 Coq.Init.Datatypes.Some
+R965 Coq.Init.Logic "x = y" type_scope
+R947 RTLgen.transl_function
+R967 Coq.Init.Datatypes.Some
+R881 Coq.Init.Logic "x = y" type_scope
+R856 Globalenvs.find_funct_ptr
+R883 Coq.Init.Datatypes.Some
+R836 Cminor.function
+R825 Values.block
+R1012 Globalenvs.find_funct_ptr_transf_partial
+R1047 RTLgen.transl_function
+R1012 Globalenvs.find_funct_ptr_transf_partial
+R1047 RTLgen.transl_function
+R1082 RTLgen.transl_function
+R1082 RTLgen.transl_function
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R1287 Coq.Init.Logic "'exists' x , p" type_scope
+R1332 Coq.Init.Logic "A /\ B" type_scope
+R1322 Coq.Init.Logic "x = y" type_scope
+R1300 Globalenvs.find_funct
+R1324 Coq.Init.Datatypes.Some
+R1353 Coq.Init.Logic "x = y" type_scope
+R1335 RTLgen.transl_function
+R1355 Coq.Init.Datatypes.Some
+R1273 Coq.Init.Logic "x = y" type_scope
+R1252 Globalenvs.find_funct
+R1275 Coq.Init.Datatypes.Some
+R1232 Cminor.function
+R1223 Values.val
+R1400 Globalenvs.find_funct_transf_partial
+R1431 RTLgen.transl_function
+R1400 Globalenvs.find_funct_transf_partial
+R1431 RTLgen.transl_function
+R1466 RTLgen.transl_function
+R1466 RTLgen.transl_function
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R1676 Coq.Init.Logic "'exists' x , p" type_scope
+R1740 Coq.Init.Logic "A /\ B" type_scope
+R1690 RTL.exec_instrs
+R1710 RTLgen.st_code
+R1760 Coq.Init.Logic "A /\ B" type_scope
+R1752 Coq.Init.Logic "x = y" type_scope
+R1748 Registers "a # b"
+R1756 Registers "a # b"
+R1793 Coq.Init.Logic "x = y" type_scope
+R1790 Registers "a # b"
+R1797 Registers "a # b"
+R1778 Coq.Init.Logic "x <> y" type_scope
+R1660 Coq.Init.Logic "x = y" type_scope
+R1640 RTLgen.add_move
+R1662 RTLgen.OK
+R1853 Registers.eq
+R1853 Registers.eq
+R1946 RTL.exec_refl
+R1946 RTL.exec_refl
+R1995 Registers "a # b <- c"
+R2005 Registers "a # b"
+R1995 Registers "a # b <- c"
+R2005 Registers "a # b"
+R2027 RTL.exec_one
+R2027 RTL.exec_one
+R2044 RTL.exec_Iop
+R2044 RTL.exec_Iop
+R2103 Registers.gss
+R2103 Registers.gss
+R2132 Registers.gso
+R2132 Registers.gso
+R2604 Coq.Init.Logic "'exists' x , p" type_scope
+R2673 Coq.Init.Logic "A /\ B" type_scope
+R2621 RTL.exec_instrs
+R2641 RTLgen.st_code
+R2702 Coq.Init.Logic "A /\ B" type_scope
+R2676 RTLgenproof1.match_env
+R2718 Coq.Init.Logic "A /\ B" type_scope
+R2712 Coq.Init.Logic "x = y" type_scope
+R2708 Registers "a # b"
+R2837 Coq.Init.Logic "x = y" type_scope
+R2834 Registers "a # b"
+R2841 Registers "a # b"
+R2810 Coq.Init.Logic "A \/ B" type_scope
+R2793 RTLgenproof1.reg_in_map
+R2815 Coq.Init.Logic "x <> y" type_scope
+R2758 Coq.Init.Logic "~ x" type_scope
+R2760 RTLgenproof1.mutated_reg
+R2739 RTLgenproof1.reg_bounded
+R2571 RTLgenproof1.target_reg_ok
+R2534 Coq.Lists.List.incl
+R2540 RTLgen.mutated_expr
+R2501 RTLgenproof1.match_env
+R2480 Coq.Init.Logic "x = y" type_scope
+R2450 RTLgen.transl_expr
+R2482 RTLgen.OK
+R2427 RTLgenproof1.map_wf
+R2368 Values.val
+R2359 Mem.mem
+R2349 Cminor.env
+R2313 Cminor.expr
+R2304 Mem.mem
+R2295 Cminor.env
+R2283 Cminor.letenv
+R2273 Values.val
+R3244 Coq.Init.Logic "'exists' x , p" type_scope
+R3313 Coq.Init.Logic "A /\ B" type_scope
+R3261 RTL.exec_instrs
+R3281 RTLgen.st_code
+R3342 Coq.Init.Logic "A /\ B" type_scope
+R3316 RTLgenproof1.match_env
+R3360 Coq.Init.Logic "A /\ B" type_scope
+R3353 Coq.Init.Logic "x = y" type_scope
+R3348 Registers "a ## b"
+R3482 Coq.Init.Logic "x = y" type_scope
+R3479 Registers "a # b"
+R3486 Registers "a # b"
+R3452 Coq.Init.Logic "A \/ B" type_scope
+R3435 RTLgenproof1.reg_in_map
+R3455 Coq.Init.Logic "~ x" type_scope
+R3457 Coq.Lists.List.In
+R3400 Coq.Init.Logic "~ x" type_scope
+R3402 RTLgenproof1.mutated_reg
+R3381 RTLgenproof1.reg_bounded
+R3209 RTLgenproof1.target_regs_ok
+R3167 Coq.Lists.List.incl
+R3173 RTLgen.mutated_exprlist
+R3134 RTLgenproof1.match_env
+R3113 Coq.Init.Logic "x = y" type_scope
+R3078 RTLgen.transl_exprlist
+R3115 RTLgen.OK
+R3055 RTLgenproof1.map_wf
+R2991 Coq.Lists.List.list
+R2996 Values.val
+R2981 Mem.mem
+R2971 Cminor.env
+R2931 Cminor.exprlist
+R2921 Mem.mem
+R2912 Cminor.env
+R2900 Cminor.letenv
+R2890 Values.val
+R3856 Coq.Init.Logic "'exists' x , p" type_scope
+R3953 Coq.Init.Logic "A /\ B" type_scope
+R3873 RTL.exec_instrs
+R3893 RTLgen.st_code
+R3982 Coq.Init.Logic "A /\ B" type_scope
+R3956 RTLgenproof1.match_env
+R4065 Coq.Init.Logic "x = y" type_scope
+R4062 Registers "a # b"
+R4069 Registers "a # b"
+R4023 Coq.Init.Logic "~ x" type_scope
+R4025 RTLgenproof1.mutated_reg
+R4004 RTLgenproof1.reg_bounded
+R3822 Coq.Lists.List.incl
+R3828 RTLgen.mutated_condexpr
+R3789 RTLgenproof1.match_env
+R3768 Coq.Init.Logic "x = y" type_scope
+R3726 RTLgen.transl_condition
+R3770 RTLgen.OK
+R3703 RTLgenproof1.map_wf
+R3636 Coq.Init.Datatypes.bool
+R3626 Mem.mem
+R3616 Cminor.env
+R3576 Cminor.condexpr
+R3567 Mem.mem
+R3558 Cminor.env
+R3546 Cminor.letenv
+R3536 Values.val
+R4211 Cminor.Out_normal
+R4231 Coq.Init.Logic "x = y" type_scope
+R4240 Cminor.Out_exit
+R4273 Coq.Init.Logic "x = y" type_scope
+R4254 Coq.Lists.List.nth_error
+R4275 Coq.Init.Datatypes.Some
+R4287 Cminor.Out_return
+R4308 Coq.Init.Logic "x = y" type_scope
+R4174 RTL.node
+R4163 RTL.node
+R4145 Coq.Lists.List.list
+R4150 RTL.node
+R4130 RTL.node
+R4109 Cminor.outcome
+R4426 Coq.Init.Datatypes.None
+R4434 Coq.Init.Logic.True
+R4443 Coq.Init.Datatypes.Some
+R4458 Coq.Init.Logic "x = y" type_scope
+R4455 Registers "a # b"
+R4389 Values.val
+R4373 Coq.Init.Datatypes.option
+R4380 Registers.reg
+R4358 RTL.regset
+R4584 Cminor.Out_normal
+R4598 Coq.Init.Logic.True
+R4607 Cminor.Out_exit
+R4621 Coq.Init.Logic.True
+R4630 Cminor.Out_return
+R4685 Coq.Init.Datatypes.None
+R4691 Coq.Init.Datatypes.None
+R4699 Coq.Init.Logic.True
+R4712 Coq.Init.Datatypes.Some
+R4720 Coq.Init.Datatypes.Some
+R4735 Coq.Init.Logic "x = y" type_scope
+R4732 Registers "a # b"
+R4755 Coq.Init.Logic.False
+R4545 RTL.regset
+R4528 Coq.Init.Datatypes.option
+R4535 Registers.reg
+R4512 Cminor.outcome
+R5167 Coq.Init.Logic "'exists' x , p" type_scope
+R5236 Coq.Init.Logic "A /\ B" type_scope
+R5184 RTL.exec_instrs
+R5204 RTLgen.st_code
+R5266 Coq.Init.Logic "A /\ B" type_scope
+R5239 RTLgenproof1.match_env
+R5256 Coq.Lists.List.nil
+R5269 RTLgenproof.match_return_outcome
+R5138 RTLgenproof1.return_reg_ok
+R5089 RTLgenproof.outcome_node
+R5055 RTLgenproof1.match_env
+R5071 Coq.Lists.List.nil
+R5034 Coq.Init.Logic "x = y" type_scope
+R4991 RTLgen.transl_stmt
+R5036 RTLgen.OK
+R4968 RTLgenproof1.map_wf
+R4889 Cminor.outcome
+R4878 Mem.mem
+R4868 Cminor.env
+R4845 Cminor.stmt
+R4836 Mem.mem
+R4827 Cminor.env
+R4818 Values.val
+R5707 Coq.Init.Logic "'exists' x , p" type_scope
+R5776 Coq.Init.Logic "A /\ B" type_scope
+R5724 RTL.exec_instrs
+R5744 RTLgen.st_code
+R5806 Coq.Init.Logic "A /\ B" type_scope
+R5779 RTLgenproof1.match_env
+R5796 Coq.Lists.List.nil
+R5809 RTLgenproof.match_return_outcome
+R5678 RTLgenproof1.return_reg_ok
+R5629 RTLgenproof.outcome_node
+R5595 RTLgenproof1.match_env
+R5611 Coq.Lists.List.nil
+R5574 Coq.Init.Logic "x = y" type_scope
+R5526 RTLgen.transl_stmtlist
+R5576 RTLgen.OK
+R5503 RTLgenproof1.map_wf
+R5424 Cminor.outcome
+R5413 Mem.mem
+R5403 Cminor.env
+R5376 Cminor.stmtlist
+R5366 Mem.mem
+R5357 Cminor.env
+R5348 Values.val
+R6020 RTL.exec_function
+R6006 Coq.Init.Logic "x = y" type_scope
+R5988 RTLgen.transl_function
+R6008 Coq.Init.Datatypes.Some
+R5952 Values.val
+R5940 Mem.mem
+R5922 Coq.Lists.List.list
+R5927 Values.val
+R5897 Cminor.function
+R5888 Mem.mem
+R6249 RTLgenproof.transl_expr_correct
+R6280 Cminor.Evar
+R6235 Coq.Init.Logic "x = y" type_scope
+R6231 Maps "a ! b"
+R6237 Coq.Init.Datatypes.Some
+R6222 Values.val
+R6211 AST.ident
+R6201 Mem.mem
+R6192 Cminor.env
+R6180 Cminor.letenv
+R6170 Values.val
+R6401 Maps "a ! b"
+R6389 RTLgen.map_vars
+R6401 Maps "a ! b"
+R6389 RTLgen.map_vars
+R6470 RTLgenproof.add_move_correct
+R6470 RTLgenproof.add_move_correct
+R6723 RTLgenproof1.match_env_exten
+R6723 RTLgenproof1.match_env_exten
+R6764 Registers.eq
+R6764 Registers.eq
+R6889 RTLgenproof1.match_env_invariant
+R6889 RTLgenproof1.match_env_invariant
+R7083 Registers.eq
+R7083 Registers.eq
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R7593 RTLgenproof.transl_expr_correct
+R7624 Cminor.Eop
+R7579 Coq.Init.Logic "x = y" type_scope
+R7552 Op.eval_operation
+R7581 Coq.Init.Datatypes.Some
+R7501 RTLgenproof.transl_exprlist_correct
+R7457 Cminor.eval_exprlist
+R7449 Values.val
+R7426 Coq.Lists.List.list
+R7431 Values.val
+R7415 Mem.mem
+R7404 Cminor.env
+R7388 Cminor.exprlist
+R7362 Op.operation
+R7351 Mem.mem
+R7341 Cminor.env
+R7328 Cminor.letenv
+R7317 Values.val
+R7775 RTLgenproof1.target_regs_ok
+R7775 RTLgenproof1.target_regs_ok
+R7841 RTLgenproof1.map_wf
+R7841 RTLgenproof1.map_wf
+R7982 Registers "a # b <- c"
+R7982 Registers "a # b <- c"
+R8020 RTL.exec_trans
+R8020 RTL.exec_trans
+R8053 RTLgenproof1.exec_instrs_incr
+R8053 RTLgenproof1.exec_instrs_incr
+R8104 RTL.exec_one
+R8121 RTL.exec_Iop
+R8104 RTL.exec_one
+R8121 RTL.exec_Iop
+R8173 Op.eval_operation_preserved
+R8214 RTL.function
+R8198 Cminor.function
+R8173 Op.eval_operation_preserved
+R8214 RTL.function
+R8198 Cminor.function
+R8259 RTLgenproof.symbols_preserved
+R8259 RTLgenproof.symbols_preserved
+R8367 Registers.gss
+R8367 Registers.gss
+R8414 Registers.gso
+R8414 Registers.gso
+R8476 Coq.Lists.List.In_dec
+R8483 Registers.eq
+R8476 Coq.Lists.List.In_dec
+R8483 Registers.eq
+R8517 RTLgenproof1.alloc_regs_fresh_or_in_map
+R8517 RTLgenproof1.alloc_regs_fresh_or_in_map
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R8971 RTLgenproof.transl_expr_correct
+R9017 Maps.set
+R9002 Cminor.Eassign
+R8926 RTLgenproof.transl_expr_correct
+R8888 Cminor.eval_expr
+R8880 Values.val
+R8865 Mem.mem
+R8854 Cminor.env
+R8842 Cminor.expr
+R8830 AST.ident
+R8814 Mem.mem
+R8804 Cminor.env
+R8791 Cminor.letenv
+R8780 Values.val
+R9144 RTLgenproof1.map_wf
+R9144 RTLgenproof1.map_wf
+R9193 Coq.Lists.List.incl
+R9199 RTLgen.mutated_expr
+R9193 Coq.Lists.List.incl
+R9199 RTLgen.mutated_expr
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R9279 RTLgenproof1.target_reg_ok
+R9279 RTLgenproof1.target_reg_ok
+R9334 RTLgenproof1.target_reg_other
+R9334 RTLgenproof1.target_reg_other
+R9482 RTLgenproof.add_move_correct
+R9482 RTLgenproof.add_move_correct
+R9604 RTL.exec_trans
+R9604 RTL.exec_trans
+R9636 RTLgenproof1.exec_instrs_incr
+R9636 RTLgenproof1.exec_instrs_incr
+R9727 RTLgenproof1.match_env_update_var
+R9727 RTLgenproof1.match_env_update_var
+R9813 Registers.eq
+R9813 Registers.eq
+R9925 Registers "a # b"
+R9925 Registers "a # b"
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R10089 Maps "a ! b"
+R10077 RTLgen.map_vars
+R10089 Maps "a ! b"
+R10077 RTLgen.map_vars
+R10576 RTLgenproof.transl_expr_correct
+R10607 Cminor.Eload
+R10562 Coq.Init.Logic "x = y" type_scope
+R10541 Mem.loadv
+R10564 Coq.Init.Datatypes.Some
+R10527 Coq.Init.Logic "x = y" type_scope
+R10497 Op.eval_addressing
+R10529 Coq.Init.Datatypes.Some
+R10446 RTLgenproof.transl_exprlist_correct
+R10402 Cminor.eval_exprlist
+R10394 Values.val
+R10380 Coq.Lists.List.list
+R10385 Values.val
+R10364 Values.val
+R10354 Mem.mem
+R10343 Cminor.env
+R10327 Cminor.exprlist
+R10304 Op.addressing
+R10282 AST.memory_chunk
+R10264 Mem.mem
+R10254 Cminor.env
+R10241 Cminor.letenv
+R10230 Values.val
+R10746 RTLgenproof1.map_wf
+R10746 RTLgenproof1.map_wf
+R10795 RTLgenproof1.target_regs_ok
+R10795 RTLgenproof1.target_regs_ok
+R10957 Registers "a # b <- c"
+R10957 Registers "a # b <- c"
+R10995 RTL.exec_trans
+R10995 RTL.exec_trans
+R11028 RTLgenproof1.exec_instrs_incr
+R11028 RTLgenproof1.exec_instrs_incr
+R11079 RTL.exec_one
+R11079 RTL.exec_one
+R11096 RTL.exec_Iload
+R11096 RTL.exec_Iload
+R11151 Op.eval_addressing_preserved
+R11151 Op.eval_addressing_preserved
+R11209 RTLgenproof.symbols_preserved
+R11209 RTLgenproof.symbols_preserved
+R11272 RTLgenproof1.match_env_update_temp
+R11272 RTLgenproof1.match_env_update_temp
+R11362 Registers.gss
+R11362 Registers.gss
+R11409 Registers.gso
+R11409 Registers.gso
+R11475 Coq.Lists.List.In_dec
+R11482 Registers.eq
+R11475 Coq.Lists.List.In_dec
+R11482 Registers.eq
+R11510 RTLgenproof1.alloc_regs_fresh_or_in_map
+R11510 RTLgenproof1.alloc_regs_fresh_or_in_map
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R12199 RTLgenproof.transl_expr_correct
+R12230 Cminor.Estore
+R12184 Coq.Init.Logic "x = y" type_scope
+R12160 Mem.storev
+R12186 Coq.Init.Datatypes.Some
+R12145 Coq.Init.Logic "x = y" type_scope
+R12115 Op.eval_addressing
+R12147 Coq.Init.Datatypes.Some
+R12068 RTLgenproof.transl_expr_correct
+R12028 Cminor.eval_expr
+R11977 RTLgenproof.transl_exprlist_correct
+R11933 Cminor.eval_exprlist
+R11925 Values.val
+R11916 Values.val
+R11901 Mem.mem
+R11901 Mem.mem
+R11887 Cminor.env
+R11871 Coq.Lists.List.list
+R11876 Values.val
+R11855 Mem.mem
+R11844 Cminor.env
+R11832 Cminor.expr
+R11817 Cminor.exprlist
+R11794 Op.addressing
+R11772 AST.memory_chunk
+R11754 Mem.mem
+R11744 Cminor.env
+R11731 Cminor.letenv
+R11720 Values.val
+R12373 RTLgenproof1.map_wf
+R12373 RTLgenproof1.map_wf
+R12400 RTLgenproof1.map_wf_incr
+R12400 RTLgenproof1.map_wf_incr
+R12431 RTLgenproof1.state_incr_trans2
+R12431 RTLgenproof1.state_incr_trans2
+R12511 Coq.Lists.List.incl
+R12517 RTLgen.mutated_exprlist
+R12511 Coq.Lists.List.incl
+R12517 RTLgen.mutated_exprlist
+R12579 RTLgenproof1.target_regs_ok
+R12579 RTLgenproof1.target_regs_ok
+R12623 RTLgenproof1.target_regs_ok_incr
+R12623 RTLgenproof1.target_regs_ok_incr
+R12784 RTLgenproof1.map_wf
+R12784 RTLgenproof1.map_wf
+R12833 Coq.Lists.List.incl
+R12839 RTLgen.mutated_expr
+R12833 Coq.Lists.List.incl
+R12839 RTLgen.mutated_expr
+R12896 RTLgenproof1.target_reg_ok
+R12896 RTLgenproof1.target_reg_ok
+R12953 RTLgenproof1.target_reg_other
+R12953 RTLgenproof1.target_reg_other
+R13129 RTL.exec_trans
+R13129 RTL.exec_trans
+R13162 RTLgenproof1.exec_instrs_incr
+R13162 RTLgenproof1.exec_instrs_incr
+R13214 RTL.exec_trans
+R13214 RTL.exec_trans
+R13247 RTLgenproof1.exec_instrs_incr
+R13247 RTLgenproof1.exec_instrs_incr
+R13298 RTL.exec_one
+R13298 RTL.exec_one
+R13315 RTL.exec_Istore
+R13315 RTL.exec_Istore
+R13362 Coq.Init.Logic "x = y" type_scope
+R13358 Registers "a ## b"
+R13367 Registers "a ## b"
+R13362 Coq.Init.Logic "x = y" type_scope
+R13358 Registers "a ## b"
+R13367 Registers "a ## b"
+R13383 Coqlib.list_map_exten
+R13383 Coqlib.list_map_exten
+R13486 RTLgenproof1.alloc_regs_fresh_or_in_map
+R13486 RTLgenproof1.alloc_regs_fresh_or_in_map
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R13571 Coq.Init.Logic.sym_not_equal
+R13571 Coq.Init.Logic.sym_not_equal
+R13597 RTLgenproof1.bounded_fresh_different
+R13597 RTLgenproof1.bounded_fresh_different
+R13713 Op.eval_addressing_preserved
+R13713 Op.eval_addressing_preserved
+R13771 RTLgenproof.symbols_preserved
+R13771 RTLgenproof.symbols_preserved
+R13944 Registers "a # b"
+R13944 Registers "a # b"
+R13972 RTLgenproof1.reg_bounded_incr
+R13972 RTLgenproof1.reg_bounded_incr
+R14063 RTLgenproof1.reg_bounded_incr
+R14063 RTLgenproof1.reg_bounded_incr
+R14096 RTLgenproof1.state_incr_trans2
+R14096 RTLgenproof1.state_incr_trans2
+R14175 Coq.Lists.List.In_dec
+R14182 Registers.eq
+R14175 Coq.Lists.List.In_dec
+R14182 Registers.eq
+R14213 RTLgenproof1.alloc_regs_fresh_or_in_map
+R14213 RTLgenproof1.alloc_regs_fresh_or_in_map
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R14916 RTLgenproof.transl_expr_correct
+R14947 Cminor.Ecall
+R14868 RTLgenproof.transl_function_correct
+R14828 Cminor.eval_funcall
+R14817 Coq.Init.Logic "x = y" type_scope
+R14801 Cminor.fn_sig
+R14787 Coq.Init.Logic "x = y" type_scope
+R14765 Globalenvs.find_funct
+R14789 Coq.Init.Datatypes.Some
+R14709 RTLgenproof.transl_exprlist_correct
+R14660 Cminor.eval_exprlist
+R14614 RTLgenproof.transl_expr_correct
+R14575 Cminor.eval_expr
+R14555 Cminor.function
+R14545 Values.val
+R14527 Coq.Lists.List.list
+R14532 Values.val
+R14508 Values.val
+R14497 Mem.mem
+R14497 Mem.mem
+R14497 Mem.mem
+R14480 Cminor.env
+R14480 Cminor.env
+R14456 Cminor.exprlist
+R14444 Cminor.expr
+R14428 AST.signature
+R14411 Mem.mem
+R14401 Cminor.env
+R14388 Cminor.letenv
+R14377 Values.val
+R15064 Coq.Lists.List.incl
+R15070 RTLgen.mutated_expr
+R15064 Coq.Lists.List.incl
+R15070 RTLgen.mutated_expr
+R15128 Coq.Lists.List.incl
+R15134 RTLgen.mutated_exprlist
+R15128 Coq.Lists.List.incl
+R15134 RTLgen.mutated_exprlist
+R15196 RTLgenproof1.map_wf
+R15196 RTLgenproof1.map_wf
+R15222 RTLgenproof1.map_wf_incr
+R15222 RTLgenproof1.map_wf_incr
+R15253 RTLgenproof1.state_incr_trans3
+R15253 RTLgenproof1.state_incr_trans3
+R15335 RTLgenproof1.target_reg_ok
+R15335 RTLgenproof1.target_reg_ok
+R15377 RTLgenproof1.target_reg_ok_incr
+R15377 RTLgenproof1.target_reg_ok_incr
+R15415 RTLgenproof1.state_incr_trans2
+R15415 RTLgenproof1.state_incr_trans2
+R15623 RTLgenproof1.map_wf
+R15623 RTLgenproof1.map_wf
+R15649 RTLgenproof1.map_wf_incr
+R15649 RTLgenproof1.map_wf_incr
+R15680 RTLgenproof1.state_incr_trans2
+R15680 RTLgenproof1.state_incr_trans2
+R15759 RTLgenproof1.target_regs_ok
+R15759 RTLgenproof1.target_regs_ok
+R15802 RTLgenproof1.target_regs_ok_incr
+R15802 RTLgenproof1.target_regs_ok_incr
+R15992 RTLgenproof.functions_translated
+R15992 RTLgenproof.functions_translated
+R16100 RTL.exec_instrs
+R16169 Registers "a # b <- c"
+R16117 RTLgen.st_code
+R16100 RTL.exec_instrs
+R16169 Registers "a # b <- c"
+R16117 RTLgen.st_code
+R16195 RTL.exec_one
+R16195 RTL.exec_one
+R16212 RTL.exec_Icall
+R16212 RTL.exec_Icall
+R16262 Registers "a # b"
+R16262 Registers "a # b"
+R16340 RTLgenproof1.reg_bounded_incr
+R16340 RTLgenproof1.reg_bounded_incr
+R16391 RTLgenproof1.target_reg_not_mutated
+R16391 RTLgenproof1.target_reg_not_mutated
+R16479 RTLgenproof1.map_wf
+R16479 RTLgenproof1.map_wf
+R16520 Coq.Lists.List.In_dec
+R16527 Registers.eq
+R16520 Coq.Lists.List.In_dec
+R16527 Registers.eq
+R16555 RTLgenproof1.alloc_regs_fresh_or_in_map
+R16555 RTLgenproof1.alloc_regs_fresh_or_in_map
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R16649 RTLgenproof1.bounded_fresh_absurd
+R16649 RTLgenproof1.bounded_fresh_absurd
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R16774 RTLgen.transl_fun
+R16787 RTLgen.init_state
+R16774 RTLgen.transl_fun
+R16787 RTLgen.init_state
+R16937 Registers "a # b <- c"
+R16937 Registers "a # b <- c"
+R16978 RTL.exec_trans
+R16978 RTL.exec_trans
+R17011 RTLgenproof1.exec_instrs_incr
+R17011 RTLgenproof1.exec_instrs_incr
+R17063 RTL.exec_trans
+R17063 RTL.exec_trans
+R17096 RTLgenproof1.exec_instrs_incr
+R17096 RTLgenproof1.exec_instrs_incr
+R17183 RTLgenproof1.match_env_update_temp
+R17183 RTLgenproof1.match_env_update_temp
+R17275 Registers.gss
+R17275 Registers.gss
+R17324 Registers.gso
+R17324 Registers.gso
+R17353 Registers "a # b"
+R17353 Registers "a # b"
+R17387 RTLgenproof1.reg_bounded_incr
+R17387 RTLgenproof1.reg_bounded_incr
+R17423 RTLgenproof1.state_incr_trans2
+R17423 RTLgenproof1.state_incr_trans2
+R17521 RTLgenproof1.map_wf
+R17521 RTLgenproof1.map_wf
+R17564 Coq.Lists.List.In_dec
+R17571 Registers.eq
+R17564 Coq.Lists.List.In_dec
+R17571 Registers.eq
+R17602 RTLgenproof1.alloc_regs_fresh_or_in_map
+R17602 RTLgenproof1.alloc_regs_fresh_or_in_map
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R17699 RTLgenproof1.bounded_fresh_absurd
+R17699 RTLgenproof1.bounded_fresh_absurd
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R17802 RTLgenproof1.reg_bounded_incr
+R17802 RTLgenproof1.reg_bounded_incr
+R17837 RTLgenproof1.state_incr_trans3
+R17837 RTLgenproof1.state_incr_trans3
+R17929 Registers.eq
+R17929 Registers.eq
+R17974 RTLgenproof1.alloc_reg_fresh_or_in_map
+R17974 RTLgenproof1.alloc_reg_fresh_or_in_map
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R18560 RTLgenproof.transl_expr_correct
+R18591 Cminor.Econdition
+R18492 RTLgenproof.transl_expr_correct
+R18431 Cminor.eval_expr
+R18380 RTLgenproof.transl_condition_correct
+R18337 Cminor.eval_condexpr
+R18329 Values.val
+R18318 Mem.mem
+R18307 Cminor.env
+R18295 Coq.Init.Datatypes.bool
+R18279 Mem.mem
+R18268 Cminor.env
+R18256 Cminor.expr
+R18256 Cminor.expr
+R18239 Cminor.condexpr
+R18224 Mem.mem
+R18214 Cminor.env
+R18201 Cminor.letenv
+R18190 Values.val
+R18730 RTLgenproof1.map_wf
+R18730 RTLgenproof1.map_wf
+R18756 RTLgenproof1.map_wf_incr
+R18756 RTLgenproof1.map_wf_incr
+R18821 Coq.Lists.List.incl
+R18827 RTLgen.mutated_condexpr
+R18821 Coq.Lists.List.incl
+R18827 RTLgen.mutated_condexpr
+R18991 RTLgenproof1.map_wf
+R18991 RTLgenproof1.map_wf
+R19040 Coq.Lists.List.incl
+R19046 RTLgen.mutated_expr
+R19040 Coq.Lists.List.incl
+R19046 RTLgen.mutated_expr
+R19103 RTLgenproof1.target_reg_ok
+R19103 RTLgenproof1.target_reg_ok
+R19160 RTLgenproof1.target_reg_other
+R19160 RTLgenproof1.target_reg_other
+R19338 RTL.exec_trans
+R19338 RTL.exec_trans
+R19371 RTLgenproof1.exec_instrs_incr
+R19371 RTLgenproof1.exec_instrs_incr
+R19548 Registers "a # b"
+R19548 Registers "a # b"
+R19621 RTLgenproof1.reg_bounded_incr
+R19621 RTLgenproof1.reg_bounded_incr
+R19654 RTLgenproof1.state_incr_trans
+R19654 RTLgenproof1.state_incr_trans
+R19726 Coq.Lists.List.incl
+R19732 RTLgen.mutated_expr
+R19726 Coq.Lists.List.incl
+R19732 RTLgen.mutated_expr
+R19789 RTLgenproof1.target_reg_ok
+R19789 RTLgenproof1.target_reg_ok
+R19845 RTLgenproof1.target_reg_other
+R19845 RTLgenproof1.target_reg_other
+R20010 RTL.exec_trans
+R20010 RTL.exec_trans
+R20043 RTLgenproof1.exec_instrs_incr
+R20043 RTLgenproof1.exec_instrs_incr
+R20220 Registers "a # b"
+R20220 Registers "a # b"
+R20293 RTLgenproof1.reg_bounded_incr
+R20293 RTLgenproof1.reg_bounded_incr
+R20326 RTLgenproof1.state_incr_trans2
+R20326 RTLgenproof1.state_incr_trans2
+R20758 RTLgenproof.transl_expr_correct
+R20789 Cminor.Elet
+R20702 RTLgenproof.transl_expr_correct
+R20729 Coq.Lists.List "x :: y" list_scope
+R20653 Cminor.eval_expr
+R20673 Coq.Lists.List "x :: y" list_scope
+R20607 RTLgenproof.transl_expr_correct
+R20568 Cminor.eval_expr
+R20560 Values.val
+R20549 Mem.mem
+R20538 Cminor.env
+R20522 Values.val
+R20511 Mem.mem
+R20500 Cminor.env
+R20488 Cminor.expr
+R20488 Cminor.expr
+R20471 Mem.mem
+R20461 Cminor.env
+R20448 Cminor.letenv
+R20437 Values.val
+R20910 RTLgenproof1.map_wf
+R20910 RTLgenproof1.map_wf
+R20959 Coq.Lists.List.incl
+R20965 RTLgen.mutated_expr
+R20959 Coq.Lists.List.incl
+R20965 RTLgen.mutated_expr
+R21022 RTLgenproof1.target_reg_ok
+R21022 RTLgenproof1.target_reg_ok
+R21062 RTLgenproof1.target_reg_other
+R21062 RTLgenproof1.target_reg_other
+R21212 RTLgenproof1.map_wf
+R21220 RTLgen.add_letvar
+R21212 RTLgenproof1.map_wf
+R21220 RTLgen.add_letvar
+R21252 RTLgenproof1.add_letvar_wf
+R21252 RTLgenproof1.add_letvar_wf
+R21301 Coq.Lists.List.incl
+R21307 RTLgen.mutated_expr
+R21301 Coq.Lists.List.incl
+R21307 RTLgen.mutated_expr
+R21363 RTLgenproof1.match_env
+R21399 Coq.Lists.List "x :: y" list_scope
+R21374 RTLgen.add_letvar
+R21363 RTLgenproof1.match_env
+R21399 Coq.Lists.List "x :: y" list_scope
+R21374 RTLgen.add_letvar
+R21420 RTLgenproof1.match_env_letvar
+R21420 RTLgenproof1.match_env_letvar
+R21466 RTLgenproof1.target_reg_ok
+R21484 RTLgen.add_letvar
+R21466 RTLgenproof1.target_reg_ok
+R21484 RTLgen.add_letvar
+R21536 RTLgenproof1.target_reg_other
+R21536 RTLgenproof1.target_reg_other
+R21679 RTLgenproof1.bounded_fresh_absurd
+R21679 RTLgenproof1.bounded_fresh_absurd
+R21949 RTL.exec_trans
+R21949 RTL.exec_trans
+R21982 RTLgenproof1.exec_instrs_incr
+R21982 RTLgenproof1.exec_instrs_incr
+R22067 RTLgenproof1.mk_match_env
+R22067 RTLgenproof1.mk_match_env
+R22088 RTLgenproof1.me_vars
+R22088 RTLgenproof1.me_vars
+R22125 RTLgenproof1.me_letvars
+R22125 RTLgenproof1.me_letvars
+R22285 Registers "a # b"
+R22285 Registers "a # b"
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R22569 RTLgenproof1.bounded_fresh_absurd
+R22569 RTLgenproof1.bounded_fresh_absurd
+R22797 RTLgenproof.transl_expr_correct
+R22828 Cminor.Eletvar
+R22783 Coq.Init.Logic "x = y" type_scope
+R22768 Coq.Lists.List.nth_error
+R22785 Coq.Init.Datatypes.Some
+R22760 Values.val
+R22750 Coq.Init.Datatypes.nat
+R22740 Mem.mem
+R22725 Cminor.env
+R22710 Coq.Lists.List.list
+R22715 Values.val
+R22699 Values.val
+R22964 Coq.Lists.List.nth_error
+R22975 RTLgen.map_letvars
+R22964 Coq.Lists.List.nth_error
+R22975 RTLgen.map_letvars
+R23058 RTLgenproof.add_move_correct
+R23058 RTLgenproof.add_move_correct
+R23234 Coq.Init.Logic "x = y" type_scope
+R23234 Coq.Init.Logic "x = y" type_scope
+R23270 RTLgenproof1.match_env_exten
+R23270 RTLgenproof1.match_env_exten
+R23312 Registers.eq
+R23312 Registers.eq
+R23368 RTLgenproof1.match_env_invariant
+R23368 RTLgenproof1.match_env_invariant
+R23528 RTLgenproof1.me_letvars
+R23528 RTLgenproof1.me_letvars
+R23576 Registers.reg
+R23562 Coq.NArith.BinPos.positive
+R23576 Registers.reg
+R23562 Coq.NArith.BinPos.positive
+R23591 Coqlib.list_map_nth
+R23591 Coqlib.list_map_nth
+R23692 Coq.Init.Logic "x = y" type_scope
+R23692 Coq.Init.Logic "x = y" type_scope
+R23728 Registers.eq
+R23728 Registers.eq
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R23941 RTLgenproof.transl_condition_correct
+R23987 Coq.Init.Datatypes.true
+R23976 Cminor.CEtrue
+R23933 Mem.mem
+R23923 Cminor.env
+R23910 Cminor.letenv
+R23899 Values.val
+R24085 RTL.exec_refl
+R24085 RTL.exec_refl
+R24221 RTLgenproof.transl_condition_correct
+R24268 Coq.Init.Datatypes.false
+R24256 Cminor.CEfalse
+R24213 Mem.mem
+R24203 Cminor.env
+R24190 Cminor.letenv
+R24179 Values.val
+R24367 RTL.exec_refl
+R24367 RTL.exec_refl
+R24728 RTLgenproof.transl_condition_correct
+R24764 Cminor.CEcond
+R24713 Coq.Init.Logic "x = y" type_scope
+R24690 Op.eval_condition
+R24716 Coq.Init.Datatypes.Some
+R24639 RTLgenproof.transl_exprlist_correct
+R24595 Cminor.eval_exprlist
+R24586 Coq.Init.Datatypes.bool
+R24571 Coq.Lists.List.list
+R24576 Values.val
+R24560 Mem.mem
+R24544 Cminor.env
+R24528 Cminor.exprlist
+R24511 Op.condition
+R24494 Mem.mem
+R24484 Cminor.env
+R24471 Cminor.letenv
+R24460 Values.val
+R24882 RTLgenproof1.map_wf
+R24882 RTLgenproof1.map_wf
+R24946 RTLgenproof1.target_regs_ok
+R24946 RTLgenproof1.target_regs_ok
+R25138 RTL.exec_trans
+R25138 RTL.exec_trans
+R25171 RTLgenproof1.exec_instrs_incr
+R25171 RTLgenproof1.exec_instrs_incr
+R25222 RTL.exec_one
+R25222 RTL.exec_one
+R25256 RTL.exec_Icond_true
+R25256 RTL.exec_Icond_true
+R25328 RTL.exec_Icond_false
+R25328 RTL.exec_Icond_false
+R25501 Coq.Lists.List.In_dec
+R25508 Registers.eq
+R25501 Coq.Lists.List.In_dec
+R25508 Registers.eq
+R25536 RTLgenproof1.alloc_regs_fresh_or_in_map
+R25536 RTLgenproof1.alloc_regs_fresh_or_in_map
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R26089 RTLgenproof.transl_condition_correct
+R26125 Cminor.CEcondition
+R26014 RTLgenproof.transl_condition_correct
+R25947 Cminor.eval_condexpr
+R25895 RTLgenproof.transl_condition_correct
+R25851 Cminor.eval_condexpr
+R25842 Coq.Init.Datatypes.bool
+R25830 Mem.mem
+R25819 Cminor.env
+R25807 Coq.Init.Datatypes.bool
+R25790 Mem.mem
+R25779 Cminor.env
+R25763 Cminor.condexpr
+R25763 Cminor.condexpr
+R25763 Cminor.condexpr
+R25745 Mem.mem
+R25735 Cminor.env
+R25722 Cminor.letenv
+R25711 Values.val
+R26264 RTLgenproof1.map_wf
+R26264 RTLgenproof1.map_wf
+R26313 Coq.Lists.List.incl
+R26319 RTLgen.mutated_condexpr
+R26313 Coq.Lists.List.incl
+R26319 RTLgen.mutated_condexpr
+R26484 RTLgenproof1.map_wf
+R26484 RTLgenproof1.map_wf
+R26533 Coq.Lists.List.incl
+R26539 RTLgen.mutated_condexpr
+R26533 Coq.Lists.List.incl
+R26539 RTLgen.mutated_condexpr
+R26702 RTL.exec_trans
+R26702 RTL.exec_trans
+R26735 RTLgenproof1.exec_instrs_incr
+R26735 RTLgenproof1.exec_instrs_incr
+R26840 Registers "a # b"
+R26840 Registers "a # b"
+R26929 Coq.Lists.List.incl
+R26935 RTLgen.mutated_condexpr
+R26929 Coq.Lists.List.incl
+R26935 RTLgen.mutated_condexpr
+R27096 RTL.exec_trans
+R27096 RTL.exec_trans
+R27129 RTLgenproof1.exec_instrs_incr
+R27129 RTLgenproof1.exec_instrs_incr
+R27234 Registers "a # b"
+R27234 Registers "a # b"
+R27405 RTLgenproof.transl_exprlist_correct
+R27448 Coq.Lists.List.nil
+R27439 Cminor.Enil
+R27397 Mem.mem
+R27387 Cminor.env
+R27374 Cminor.letenv
+R27363 Values.val
+R27582 RTL.exec_refl
+R27582 RTL.exec_refl
+R28047 RTLgenproof.transl_exprlist_correct
+R28103 Coq.Lists.List "x :: y" list_scope
+R28082 Cminor.Econs
+R27994 RTLgenproof.transl_exprlist_correct
+R27948 Cminor.eval_exprlist
+R27903 RTLgenproof.transl_expr_correct
+R27865 Cminor.eval_expr
+R27852 Coq.Lists.List.list
+R27857 Values.val
+R27841 Mem.mem
+R27830 Cminor.env
+R27819 Values.val
+R27804 Mem.mem
+R27793 Cminor.env
+R27777 Cminor.exprlist
+R27765 Cminor.expr
+R27750 Mem.mem
+R27740 Cminor.env
+R27727 Cminor.letenv
+R27716 Values.val
+R28252 Coq.Lists.List.incl
+R28258 RTLgen.mutated_expr
+R28252 Coq.Lists.List.incl
+R28258 RTLgen.mutated_expr
+R28315 Coq.Lists.List.incl
+R28321 RTLgen.mutated_exprlist
+R28315 Coq.Lists.List.incl
+R28321 RTLgen.mutated_exprlist
+R28383 RTLgenproof1.map_wf
+R28383 RTLgenproof1.map_wf
+R28432 RTLgenproof1.target_reg_ok
+R28432 RTLgenproof1.target_reg_ok
+R28717 RTL.exec_trans
+R28717 RTL.exec_trans
+R28750 RTLgenproof1.exec_instrs_incr
+R28750 RTLgenproof1.exec_instrs_incr
+R29037 Registers "a # b"
+R29037 Registers "a # b"
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R29163 Coq.Init.Logic.sym_not_equal
+R29163 Coq.Init.Logic.sym_not_equal
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R29704 RTLgenproof.transl_function_correct
+R29739 Mem.free
+R29641 Cminor.outcome_result_value
+R29685 AST.sig_res
+R29669 Cminor.fn_sig
+R29566 RTLgenproof.transl_stmtlist_correct
+R29615 Cminor.fn_body
+R29591 Values.Vptr
+R29599 Integers.zero
+R29498 Cminor.exec_stmtlist
+R29540 Cminor.fn_body
+R29516 Values.Vptr
+R29524 Integers.zero
+R29489 Coq.Init.Logic "x = y" type_scope
+R29419 Cminor.set_locals
+R29450 Cminor.set_params
+R29468 Cminor.fn_params
+R29431 Cminor.fn_vars
+R29403 Coq.Init.Logic "x = y" type_scope
+R29371 Mem.alloc
+R29386 Cminor.fn_stackspace
+R29405 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R29363 Values.val
+R29346 Cminor.outcome
+R29329 Mem.mem
+R29318 Cminor.env
+R29318 Cminor.env
+R29303 Values.block
+R29292 Mem.mem
+R29271 Coq.Lists.List.list
+R29276 Values.val
+R29245 Cminor.function
+R29235 Mem.mem
+R29842 RTLgen.transl_fun
+R29855 RTLgen.init_state
+R29842 RTLgen.transl_fun
+R29855 RTLgen.init_state
+R30026 RTL.init_regs
+R30026 RTL.init_regs
+R30060 RTLgenproof1.match_env
+R30075 Coq.Lists.List.nil
+R30060 RTLgenproof1.match_env
+R30075 Coq.Lists.List.nil
+R30122 RTLgenproof1.match_init_env_init_reg
+R30122 RTLgenproof1.match_init_env_init_reg
+R30171 RTLgenproof.outcome_node
+R30190 Coq.Lists.List.nil
+R30171 RTLgenproof.outcome_node
+R30190 Coq.Lists.List.nil
+R30309 RTLgenproof1.map_wf
+R30309 RTLgenproof1.map_wf
+R30333 RTLgenproof1.add_vars_wf
+R30333 RTLgenproof1.add_vars_wf
+R30368 RTLgenproof1.add_vars_wf
+R30368 RTLgenproof1.add_vars_wf
+R30400 RTLgenproof1.init_mapping_wf
+R30400 RTLgenproof1.init_mapping_wf
+R30433 RTLgenproof1.map_wf
+R30433 RTLgenproof1.map_wf
+R30456 RTLgenproof1.map_wf_incr
+R30456 RTLgenproof1.map_wf_incr
+R30483 RTLgenproof1.state_incr_trans
+R30483 RTLgenproof1.state_incr_trans
+R30556 RTLgenproof1.return_reg_ok
+R30577 RTLgen.ret_reg
+R30586 Cminor.fn_sig
+R30556 RTLgenproof1.return_reg_ok
+R30577 RTLgen.ret_reg
+R30586 Cminor.fn_sig
+R30616 RTLgenproof1.return_reg_ok_incr
+R30616 RTLgenproof1.return_reg_ok_incr
+R30670 RTLgenproof1.new_reg_return_ok
+R30670 RTLgenproof1.new_reg_return_ok
+R30836 RTLgen.ret_reg
+R30845 Cminor.fn_sig
+R30810 RTL.exec_funct
+R30836 RTLgen.ret_reg
+R30845 Cminor.fn_sig
+R30810 RTL.exec_funct
+R30967 RTLgenproof1.instr_at_incr
+R30967 RTLgenproof1.instr_at_incr
+R31161 AST.sig_res
+R31170 Cminor.fn_sig
+R31161 AST.sig_res
+R31170 Cminor.fn_sig
+R31607 RTLgenproof.transl_stmt_correct
+R31650 Cminor.Out_normal
+R31635 Cminor.Sexpr
+R31561 RTLgenproof.transl_expr_correct
+R31584 Coq.Lists.List.nil
+R31522 Cminor.eval_expr
+R31538 Coq.Lists.List.nil
+R31514 Values.val
+R31504 Mem.mem
+R31493 Cminor.env
+R31476 Cminor.expr
+R31466 Mem.mem
+R31456 Cminor.env
+R31446 Values.val
+R31786 RTLgenproof1.map_wf
+R31786 RTLgenproof1.map_wf
+R31834 RTLgenproof1.target_reg_ok
+R31856 RTLgen.mutated_expr
+R31834 RTLgenproof1.target_reg_ok
+R31856 RTLgen.mutated_expr
+R31941 Coq.Lists.List.incl_refl
+R31952 RTLgen.mutated_expr
+R31941 Coq.Lists.List.incl_refl
+R31952 RTLgen.mutated_expr
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R32486 RTLgenproof.transl_stmt_correct
+R32514 Cminor.Sifthenelse
+R32412 RTLgenproof.transl_stmtlist_correct
+R32345 Cminor.exec_stmtlist
+R32293 RTLgenproof.transl_condition_correct
+R32321 Coq.Lists.List.nil
+R32249 Cminor.eval_condexpr
+R32269 Coq.Lists.List.nil
+R32237 Cminor.outcome
+R32225 Mem.mem
+R32214 Cminor.env
+R32202 Coq.Init.Datatypes.bool
+R32186 Mem.mem
+R32175 Cminor.env
+R32159 Cminor.stmtlist
+R32159 Cminor.stmtlist
+R32134 Cminor.condexpr
+R32124 Mem.mem
+R32114 Cminor.env
+R32104 Values.val
+R32613 RTLgen.more_likely
+R32613 RTLgen.more_likely
+R32684 RTLgenproof1.map_wf
+R32684 RTLgenproof1.map_wf
+R32764 Coq.Lists.List.incl_refl
+R32764 Coq.Lists.List.incl_refl
+R32845 RTLgenproof1.map_wf
+R32845 RTLgenproof1.map_wf
+R32894 RTLgenproof1.return_reg_ok
+R32894 RTLgenproof1.return_reg_ok
+R33063 RTL.exec_trans
+R33063 RTL.exec_trans
+R33093 RTLgenproof1.exec_instrs_incr
+R33093 RTLgenproof1.exec_instrs_incr
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R33279 RTL.exec_trans
+R33279 RTL.exec_trans
+R33309 RTLgenproof1.exec_instrs_incr
+R33309 RTLgenproof1.exec_instrs_incr
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R33391 RTLgenproof1.map_wf
+R33391 RTLgenproof1.map_wf
+R33471 Coq.Lists.List.incl_refl
+R33471 Coq.Lists.List.incl_refl
+R33657 RTL.exec_trans
+R33657 RTL.exec_trans
+R33687 RTLgenproof1.exec_instrs_incr
+R33687 RTLgenproof1.exec_instrs_incr
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R33768 RTLgenproof1.map_wf
+R33768 RTLgenproof1.map_wf
+R33817 RTLgenproof1.return_reg_ok
+R33817 RTLgenproof1.return_reg_ok
+R33986 RTL.exec_trans
+R33986 RTL.exec_trans
+R34016 RTLgenproof1.exec_instrs_incr
+R34016 RTLgenproof1.exec_instrs_incr
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R34461 RTLgenproof.transl_stmt_correct
+R34489 Cminor.Sloop
+R34406 RTLgenproof.transl_stmt_correct
+R34436 Cminor.Sloop
+R34358 Cminor.exec_stmt
+R34381 Cminor.Sloop
+R34302 RTLgenproof.transl_stmtlist_correct
+R34342 Cminor.Out_normal
+R34253 Cminor.exec_stmtlist
+R34286 Cminor.Out_normal
+R34241 Cminor.outcome
+R34224 Mem.mem
+R34213 Cminor.env
+R34202 Mem.mem
+R34191 Cminor.env
+R34170 Cminor.stmtlist
+R34159 Mem.mem
+R34149 Cminor.env
+R34139 Values.val
+R34620 RTLgenproof1.map_wf
+R34620 RTLgenproof1.map_wf
+R34642 RTLgenproof1.map_wf_incr
+R34642 RTLgenproof1.map_wf_incr
+R34671 RTLgenproof1.reserve_instr_incr
+R34671 RTLgenproof1.reserve_instr_incr
+R34728 RTLgenproof.outcome_node
+R34741 Cminor.Out_normal
+R34728 RTLgenproof.outcome_node
+R34741 Cminor.Out_normal
+R34815 RTLgenproof1.return_reg_ok
+R34815 RTLgenproof1.return_reg_ok
+R34852 RTLgenproof1.return_reg_ok_incr
+R34852 RTLgenproof1.return_reg_ok_incr
+R34888 RTLgenproof1.reserve_instr_incr
+R34888 RTLgenproof1.reserve_instr_incr
+R35142 RTL.exec_trans
+R35142 RTL.exec_trans
+R35162 RTLgenproof1.exec_instrs_extends
+R35162 RTLgenproof1.exec_instrs_extends
+R35201 RTLgenproof1.update_instr_extends
+R35201 RTLgenproof1.update_instr_extends
+R35285 RTL.exec_trans
+R35285 RTL.exec_trans
+R35320 RTL.exec_one
+R35320 RTL.exec_one
+R35336 RTL.exec_Inop
+R35336 RTL.exec_Inop
+R35396 Coqlib.plt
+R35403 RTLgen.st_nextnode
+R35396 Coqlib.plt
+R35403 RTLgen.st_nextnode
+R35470 Maps.gss
+R35470 Maps.gss
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R35762 RTLgenproof.transl_stmt_correct
+R35790 Cminor.Sloop
+R35743 Coq.Init.Logic "x <> y" type_scope
+R35746 Cminor.Out_normal
+R35690 RTLgenproof.transl_stmtlist_correct
+R35648 Cminor.exec_stmtlist
+R35636 Cminor.outcome
+R35624 Mem.mem
+R35613 Cminor.env
+R35592 Cminor.stmtlist
+R35581 Mem.mem
+R35571 Cminor.env
+R35561 Values.val
+R35905 RTLgenproof1.map_wf
+R35905 RTLgenproof1.map_wf
+R35927 RTLgenproof1.map_wf_incr
+R35927 RTLgenproof1.map_wf_incr
+R35956 RTLgenproof1.reserve_instr_incr
+R35956 RTLgenproof1.reserve_instr_incr
+R36011 RTLgenproof.outcome_node
+R36011 RTLgenproof.outcome_node
+R36140 RTLgenproof1.return_reg_ok
+R36140 RTLgenproof1.return_reg_ok
+R36177 RTLgenproof1.return_reg_ok_incr
+R36177 RTLgenproof1.return_reg_ok_incr
+R36213 RTLgenproof1.reserve_instr_incr
+R36213 RTLgenproof1.reserve_instr_incr
+R36376 RTLgenproof1.exec_instrs_extends
+R36376 RTLgenproof1.exec_instrs_extends
+R36415 RTLgenproof1.update_instr_extends
+R36415 RTLgenproof1.update_instr_extends
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R36734 RTLgenproof.transl_stmt_correct
+R36780 Cminor.outcome_block
+R36762 Cminor.Sblock
+R36685 RTLgenproof.transl_stmtlist_correct
+R36643 Cminor.exec_stmtlist
+R36631 Cminor.outcome
+R36619 Mem.mem
+R36608 Cminor.env
+R36587 Cminor.stmtlist
+R36576 Mem.mem
+R36566 Cminor.env
+R36556 Values.val
+R36860 RTLgenproof.outcome_node
+R36890 Coq.Lists.List "x :: y" list_scope
+R36860 RTLgenproof.outcome_node
+R36890 Coq.Lists.List "x :: y" list_scope
+R37416 RTLgenproof.transl_stmt_correct
+R37458 Cminor.Out_exit
+R37444 Cminor.Sexit
+R37408 Coq.Init.Datatypes.nat
+R37398 Mem.mem
+R37388 Cminor.env
+R37378 Values.val
+R37534 Coq.Lists.List.nth_error
+R37534 Coq.Lists.List.nth_error
+R37620 Coq.Init.Logic "x = y" type_scope
+R37620 Coq.Init.Logic "x = y" type_scope
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R37679 RTL.exec_refl
+R37679 RTL.exec_refl
+R37799 RTLgenproof.transl_stmt_correct
+R37846 Cminor.Out_return
+R37857 Coq.Init.Datatypes.None
+R37827 Cminor.Sreturn
+R37835 Coq.Init.Datatypes.None
+R37791 Mem.mem
+R37781 Cminor.env
+R37771 Values.val
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R38014 RTL.exec_refl
+R38014 RTL.exec_refl
+R38246 RTLgenproof.transl_stmt_correct
+R38299 Cminor.Out_return
+R38311 Coq.Init.Datatypes.Some
+R38274 Cminor.Sreturn
+R38283 Coq.Init.Datatypes.Some
+R38200 RTLgenproof.transl_expr_correct
+R38223 Coq.Lists.List.nil
+R38161 Cminor.eval_expr
+R38177 Coq.Lists.List.nil
+R38153 Values.val
+R38143 Mem.mem
+R38132 Cminor.env
+R38115 Cminor.expr
+R38105 Mem.mem
+R38095 Cminor.env
+R38085 Values.val
+R38415 RTLgenproof1.target_reg_ok
+R38436 RTLgen.mutated_expr
+R38415 RTLgenproof1.target_reg_ok
+R38436 RTLgen.mutated_expr
+R38481 RTLgenproof1.target_reg_other
+R38481 RTLgenproof1.target_reg_other
+R38549 Coq.Lists.List.incl_refl
+R38549 Coq.Lists.List.incl_refl
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R38756 RTLgenproof.transl_stmtlist_correct
+R38796 Cminor.Out_normal
+R38787 Cminor.Snil
+R38748 Mem.mem
+R38738 Cminor.env
+R38728 Values.val
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R38953 RTL.exec_refl
+R38953 RTL.exec_refl
+R39345 RTLgenproof.transl_stmtlist_correct
+R39377 Cminor.Scons
+R39294 RTLgenproof.transl_stmtlist_correct
+R39250 Cminor.exec_stmtlist
+R39199 RTLgenproof.transl_stmt_correct
+R39234 Cminor.Out_normal
+R39155 Cminor.exec_stmt
+R39183 Cminor.Out_normal
+R39143 Cminor.outcome
+R39131 Mem.mem
+R39115 Cminor.env
+R39104 Mem.mem
+R39093 Cminor.env
+R39077 Cminor.stmtlist
+R39060 Cminor.stmt
+R39050 Mem.mem
+R39040 Cminor.env
+R39030 Values.val
+R39483 RTLgenproof1.map_wf
+R39483 RTLgenproof1.map_wf
+R39532 RTLgenproof.outcome_node
+R39545 Cminor.Out_normal
+R39532 RTLgenproof.outcome_node
+R39545 Cminor.Out_normal
+R39607 RTLgenproof1.return_reg_ok
+R39607 RTLgenproof1.return_reg_ok
+R39876 RTL.exec_trans
+R39876 RTL.exec_trans
+R39909 RTLgenproof1.exec_instrs_incr
+R39909 RTLgenproof1.exec_instrs_incr
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R40263 RTLgenproof.transl_stmtlist_correct
+R40295 Cminor.Scons
+R40244 Coq.Init.Logic "x <> y" type_scope
+R40247 Cminor.Out_normal
+R40196 RTLgenproof.transl_stmt_correct
+R40159 Cminor.exec_stmt
+R40147 Cminor.outcome
+R40135 Mem.mem
+R40124 Cminor.env
+R40108 Cminor.stmtlist
+R40091 Cminor.stmt
+R40081 Mem.mem
+R40071 Cminor.env
+R40061 Values.val
+R40414 RTLgenproof1.map_wf
+R40414 RTLgenproof1.map_wf
+R40463 RTLgenproof.outcome_node
+R40463 RTLgenproof.outcome_node
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R40554 RTLgenproof1.return_reg_ok
+R40554 RTLgenproof1.return_reg_ok
+R41165 RTLgenproof.transl_function_correct
+R41126 Cminor.eval_funcall
+R41217 RTLgenproof.eval_funcall_ind_6
+R42272 RTLgenproof.transl_stmtlist_Scons_stop_correct
+R42229 RTLgenproof.transl_stmtlist_Scons_continue_correct
+R42196 RTLgenproof.transl_stmtlist_Snil_correct
+R42159 RTLgenproof.transl_stmt_Sreturn_some_correct
+R42122 RTLgenproof.transl_stmt_Sreturn_none_correct
+R42092 RTLgenproof.transl_stmt_Sexit_correct
+R42061 RTLgenproof.transl_stmt_Sblock_correct
+R42026 RTLgenproof.transl_stmt_Sloop_stop_correct
+R41991 RTLgenproof.transl_stmt_Sloop_loop_correct
+R41955 RTLgenproof.transl_stmt_Sifthenelse_correct
+R41925 RTLgenproof.transl_stmt_Sexpr_correct
+R41898 RTLgenproof.transl_funcall_correct
+R41864 RTLgenproof.transl_exprlist_Econs_correct
+R41831 RTLgenproof.transl_exprlist_Enil_correct
+R41790 RTLgenproof.transl_condition_CEcondition_correct
+R41754 RTLgenproof.transl_condition_CEcond_correct
+R41717 RTLgenproof.transl_condition_CEfalse_correct
+R41681 RTLgenproof.transl_condition_CEtrue_correct
+R41649 RTLgenproof.transl_expr_Eletvar_correct
+R41620 RTLgenproof.transl_expr_Elet_correct
+R41585 RTLgenproof.transl_expr_Econdition_correct
+R41555 RTLgenproof.transl_expr_Ecall_correct
+R41524 RTLgenproof.transl_expr_Estore_correct
+R41494 RTLgenproof.transl_expr_Eload_correct
+R41466 RTLgenproof.transl_expr_Eop_correct
+R41434 RTLgenproof.transl_expr_Eassign_correct
+R41405 RTLgenproof.transl_expr_Evar_correct
+R41376 RTLgenproof.transl_stmtlist_correct
+R41352 RTLgenproof.transl_stmt_correct
+R41324 RTLgenproof.transl_function_correct
+R41296 RTLgenproof.transl_exprlist_correct
+R41267 RTLgenproof.transl_condition_correct
+R41243 RTLgenproof.transl_expr_correct
+R42395 RTL.exec_program
+R42363 Cminor.exec_program
+R42355 Values.val
+R42491 RTLgenproof.function_ptr_translated
+R42491 RTLgenproof.function_ptr_translated
+R42612 RTLgenproof.symbols_preserved
+R42612 RTLgenproof.symbols_preserved
+R42643 AST.prog_main
+R42666 AST.prog_main
+R42643 AST.prog_main
+R42666 AST.prog_main
+R42752 RTLgen.transl_function
+R42716 AST.transform_partial_program_main
+R42752 RTLgen.transl_function
+R42716 AST.transform_partial_program_main
+R42872 RTLgen.transl_fun
+R42885 RTLgen.init_state
+R42872 RTLgen.transl_fun
+R42885 RTLgen.init_state
+R43017 Globalenvs.init_mem_transf_partial
+R43046 RTLgen.transl_function
+R43017 Globalenvs.init_mem_transf_partial
+R43046 RTLgen.transl_function
+R43085 RTLgenproof.transl_function_correctness
+R43085 RTLgenproof.transl_function_correctness
+FRTLtyping
+R185 AST.typ
+R178 Registers.reg
+R224 RTLtyping.regenv
+R248 RTL.function
+R280 RTL.instruction
+R348 RTL.Inop
+R433 RTL.Iop
+R447 Coq.Lists.List "x :: y" list_scope
+R450 Coq.Lists.List.nil
+R437 Op.Omove
+R406 Coq.Init.Logic "x = y" type_scope
+R511 RTL.Iop
+R522 Coq.Lists.List.nil
+R515 Op.Oundef
+R685 RTL.Iop
+R643 Coq.Init.Logic "x = y" type_scope
+R614 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R615 Coq.Lists.List.map
+R645 Op.type_of_operation
+R595 Coq.Init.Logic "x <> y" type_scope
+R598 Op.Oundef
+R580 Coq.Init.Logic "x <> y" type_scope
+R583 Op.Omove
+R862 RTL.Iload
+R821 Coq.Init.Logic "x = y" type_scope
+R823 Op.type_of_chunk
+R778 Coq.Init.Logic "x = y" type_scope
+R760 Coq.Lists.List.map
+R780 Op.type_of_addressing
+R1050 RTL.Istore
+R1009 Coq.Init.Logic "x = y" type_scope
+R1011 Op.type_of_chunk
+R966 Coq.Init.Logic "x = y" type_scope
+R948 Coq.Lists.List.map
+R968 Op.type_of_addressing
+R1330 RTL.Icall
+R1251 Coq.Init.Logic "x = y" type_scope
+R1264 AST.sig_res
+R1278 Coq.Init.Datatypes.None
+R1286 AST.Tint
+R1293 Coq.Init.Datatypes.Some
+R1217 Coq.Init.Logic "x = y" type_scope
+R1199 Coq.Lists.List.map
+R1224 AST.sig_args
+R1148 Coq.Init.Datatypes.inl
+R1163 Coq.Init.Logic "x = y" type_scope
+R1165 AST.Tint
+R1172 Coq.Init.Datatypes.inr
+R1181 Coq.Init.Logic.True
+R1468 RTL.Icond
+R1424 Coq.Init.Logic "x = y" type_scope
+R1406 Coq.Lists.List.map
+R1426 Op.type_of_condition
+R1603 RTL.Ireturn
+R1557 Coq.Init.Logic "x = y" type_scope
+R1535 Coqlib.option_map
+R1575 AST.sig_res
+R1566 RTL.fn_sig
+R1661 RTLtyping.regenv
+R1673 RTL.function
+R1760 Coq.Init.Logic "x = y" type_scope
+R1733 Coq.Lists.List.map
+R1749 RTL.fn_params
+R1774 AST.sig_args
+R1765 RTL.fn_sig
+R1807 Coqlib.list_norepet
+R1823 RTL.fn_params
+R1904 RTLtyping.wt_instr
+R1888 Coq.Init.Logic "x = y" type_scope
+R1884 Maps "a ! b"
+R1876 RTL.fn_code
+R1890 Coq.Init.Datatypes.Some
+R2107 AST.typ
+R2129 Registers.reg
+R2174 RTLtyping.myT
+R2215 Coq.Init.Specif "{ A } + { B }" type_scope
+R2217 Coq.Init.Logic "x = y" type_scope
+R2223 Coq.Init.Logic "x <> y" type_scope
+R2211 RTLtyping.T
+R2211 RTLtyping.T
+R2287 Coq.Init.Specif.right
+R2320 Coq.Init.Specif.left
+R2287 Coq.Init.Specif.right
+R2287 Coq.Init.Specif.right
+R2287 Coq.Init.Specif.right
+R2287 Coq.Init.Specif.right
+R2320 Coq.Init.Specif.left
+R2320 Coq.Init.Specif.left
+R2385 Coq.Init.Specif.right
+R2416 Coq.Init.Specif.left
+R2385 Coq.Init.Specif.right
+R2385 Coq.Init.Specif.right
+R2385 Coq.Init.Specif.right
+R2385 Coq.Init.Specif.right
+R2416 Coq.Init.Specif.left
+R2416 Coq.Init.Specif.left
+R2445 Coqlib.peq
+R2445 Coqlib.peq
+R2485 Coq.Init.Specif.left
+R2497 Coq.Init.Logic.refl_equal
+R2485 Coq.Init.Specif.left
+R2497 Coq.Init.Logic.refl_equal
+R2519 Coq.Init.Specif.right
+R2519 Coq.Init.Specif.right
+R2595 RTLtyping.T
+R2640 Coq.NArith.BinPos.positive
+R2675 RTLtyping.tTy
+R2679 AST.Tint
+R2687 Coq.NArith.BinPos.xH
+R2696 RTLtyping.tTy
+R2700 AST.Tfloat
+R2710 Coq.NArith.BinPos.xI
+R2713 Coq.NArith.BinPos.xH
+R2722 RTLtyping.tReg
+R2732 Coq.NArith.BinPos.xO
+R2629 RTLtyping.T
+R2783 RTLtyping.elt
+R2813 Coq.NArith.BinPos.xH
+R2819 RTLtyping.tTy
+R2823 AST.Tint
+R2834 Coq.NArith.BinPos.xI
+R2842 RTLtyping.tTy
+R2846 AST.Tfloat
+R2859 Coq.NArith.BinPos.xO
+R2867 RTLtyping.tReg
+R2771 Coq.NArith.BinPos.positive
+R2946 Coq.Init.Logic "x = y" type_scope
+R2928 RTLtyping.decode
+R2936 RTLtyping.encode
+R2919 RTLtyping.T
+R3093 Coq.Init.Logic "x = y" type_scope
+R3077 Coq.Init.Logic "x = y" type_scope
+R3068 RTLtyping.encode
+R3079 RTLtyping.encode
+R3058 RTLtyping.T
+R3058 RTLtyping.T
+R3258 Maps.t
+R3266 Coq.NArith.BinPos.positive
+R3298 Maps.empty
+R3310 Coq.NArith.BinPos.positive
+R3364 Coqlib.option_map
+R3383 Maps.get
+R3394 RTLtyping.encode
+R3375 RTLtyping.decode
+R3354 RTLtyping.T
+R3344 RTLtyping.elt
+R3458 Maps.set
+R3482 RTLtyping.encode
+R3469 RTLtyping.encode
+R3448 RTLtyping.T
+R3438 RTLtyping.elt
+R3438 RTLtyping.elt
+R3550 Coq.Init.Logic "x = y" type_scope
+R3538 RTLtyping.get
+R3544 RTLtyping.empty
+R3552 Coq.Init.Datatypes.None
+R3532 RTLtyping.elt
+R3620 Maps.gempty
+R3620 Maps.gempty
+R3730 Coq.Init.Logic "x = y" type_scope
+R3712 RTLtyping.get
+R3719 RTLtyping.add
+R3732 Coq.Init.Datatypes.Some
+R3708 RTLtyping.T
+R3698 RTLtyping.elt
+R3698 RTLtyping.elt
+R3801 Maps.gss
+R3801 Maps.gss
+R3831 RTLtyping.encode_decode
+R3831 RTLtyping.encode_decode
+R3943 Coq.Init.Logic "x = y" type_scope
+R3925 RTLtyping.get
+R3932 RTLtyping.add
+R3945 RTLtyping.get
+R3917 Coq.Init.Logic "x <> y" type_scope
+R3911 RTLtyping.T
+R3901 RTLtyping.elt
+R3901 RTLtyping.elt
+R3901 RTLtyping.elt
+R4015 Maps.gso
+R4015 Maps.gso
+R4058 RTLtyping.encode_injective
+R4058 RTLtyping.encode_injective
+R4162 RTLtyping.identify
+R4195 RTLtyping.tTy
+R4199 AST.Tfloat
+R4184 RTLtyping.tTy
+R4188 AST.Tint
+R4174 RTLtyping.empty
+R4351 RTLtyping.T
+R4314 Coq.Lists.List.list
+R4300 Coq.Lists.List.list
+R4288 RTLtyping.T
+R4259 RTLtyping.T
+R4241 RTLtyping.T
+R4385 Coq.Lists.List "x :: y" list_scope
+R4393 Coq.Lists.List "x :: y" list_scope
+R4434 Coq.Lists.List.nil
+R4439 Coq.Lists.List.nil
+R4463 RTLtyping.error
+R4314 Coq.Lists.List.list
+R4300 Coq.Lists.List.list
+R4288 RTLtyping.T
+R4259 RTLtyping.T
+R4241 RTLtyping.T
+R4638 RTLtyping.T
+R4670 Coq.Init.Datatypes.Some
+R4678 Coq.Init.Datatypes.Some
+R4703 Coq.Init.Datatypes.None
+R4709 Coq.Init.Datatypes.None
+R4734 RTLtyping.error
+R4602 Coq.Init.Datatypes.option
+R4586 Coq.Init.Datatypes.option
+R4574 RTLtyping.T
+R4536 RTLtyping.T
+R4518 RTLtyping.T
+R4781 Coq.Init.Datatypes.bool
+R4815 AST.Tint
+R4821 AST.Tint
+R4829 Coq.Init.Datatypes.true
+R4838 AST.Tfloat
+R4846 AST.Tfloat
+R4856 Coq.Init.Datatypes.true
+R4873 Coq.Init.Datatypes.false
+R4774 AST.typ
+R4774 AST.typ
+R4947 RTLtyping.identify
+R4971 RTLtyping.tTy
+R4962 RTLtyping.tReg
+R4937 AST.typ
+R4927 Registers.reg
+R4916 RTLtyping.T
+R5057 Coq.Init.Datatypes.inl
+R5066 RTLtyping.identify
+R5090 RTLtyping.tTy
+R5094 AST.Tint
+R5081 RTLtyping.tReg
+R5104 Coq.Init.Datatypes.inr
+R5025 Coq.Init.Datatypes "x + y" type_scope
+R5022 Registers.reg
+R5026 AST.ident
+R5009 RTLtyping.T
+R5184 AST.sig_res
+R5198 Coq.Init.Datatypes.None
+R5206 AST.Tint
+R5213 Coq.Init.Datatypes.Some
+R5157 AST.signature
+R5349 RTL.Inop
+R5365 RTL.Iop
+R5369 Op.Omove
+R5379 Coq.Lists.List "x :: y" list_scope
+R5382 Coq.Lists.List.nil
+R5395 RTLtyping.identify
+R5420 RTLtyping.tReg
+R5410 RTLtyping.tReg
+R5433 RTL.Iop
+R5437 Op.Omove
+R5452 RTLtyping.error
+R5462 RTL.Iop
+R5466 Op.Oundef
+R5473 Coq.Lists.List.nil
+R5490 RTL.Iop
+R5494 Op.Oundef
+R5510 RTLtyping.error
+R5520 RTL.Iop
+R5570 Op.type_of_operation
+R5644 RTLtyping.fold2
+R5650 RTLtyping.type_rtl_arg
+R5610 RTLtyping.type_rtl_arg
+R5682 RTL.Iload
+R5779 RTLtyping.fold2
+R5807 Op.type_of_addressing
+R5785 RTLtyping.type_rtl_arg
+R5730 RTLtyping.type_rtl_arg
+R5749 Op.type_of_chunk
+R5836 RTL.Istore
+R5932 RTLtyping.fold2
+R5960 Op.type_of_addressing
+R5938 RTLtyping.type_rtl_arg
+R5883 RTLtyping.type_rtl_arg
+R5902 Op.type_of_chunk
+R5989 RTL.Icall
+R6122 RTLtyping.fold2
+R6155 AST.sig_args
+R6128 RTLtyping.type_rtl_arg
+R6071 RTLtyping.type_rtl_arg
+R6091 RTLtyping.type_of_sig_res
+R6033 RTLtyping.type_rtl_ros
+R6169 RTL.Icond
+R6198 RTLtyping.fold2
+R6225 Op.type_of_condition
+R6204 RTLtyping.type_rtl_arg
+R6253 RTL.Ireturn
+R6266 RTLtyping.option_fold2
+R6279 RTLtyping.type_rtl_arg
+R5314 RTL.instruction
+R5299 Coq.NArith.BinPos.positive
+R5288 RTLtyping.T
+R5267 Coq.Init.Datatypes.option
+R5274 AST.typ
+R6356 RTLtyping.eq
+R6387 RTLtyping.repr
+R6398 RTLtyping.tTy
+R6402 AST.Tfloat
+R6366 RTLtyping.repr
+R6377 RTLtyping.tReg
+R6432 AST.Tint
+R6418 AST.Tfloat
+R6343 Registers.reg
+R6332 RTLtyping.T
+R6493 Coq.Init.Datatypes.bool
+R6470 Coq.Lists.List.list
+R6475 Registers.reg
+R6460 Registers.reg
+R6520 Coq.Lists.List.nil
+R6527 Coq.Init.Datatypes.false
+R6539 Coq.Lists.List "x :: y" list_scope
+R6553 Coqlib.peq
+R6566 Coq.Init.Datatypes.true
+R6470 Coq.Lists.List.list
+R6475 Registers.reg
+R6460 Registers.reg
+R6630 Coq.Init.Datatypes.bool
+R6618 Coq.Lists.List.list
+R6623 Registers.reg
+R6657 Coq.Lists.List.nil
+R6664 Coq.Init.Datatypes.false
+R6676 Coq.Lists.List "x :: y" list_scope
+R6701 Coq.Bool.Bool "x || y" bool_scope
+R6687 RTLtyping.member
+R6618 Coq.Lists.List.list
+R6623 Registers.reg
+R6956 RTLtyping.repet
+R6965 RTL.fn_params
+R7004 RTLtyping.eq
+R7038 RTLtyping.repr
+R7050 RTLtyping.tTy
+R7054 AST.Tfloat
+R7014 RTLtyping.repr
+R7026 RTLtyping.tTy
+R7030 AST.Tint
+R7086 Coq.Init.Datatypes.Some
+R7092 RTLtyping.mk_env
+R7072 Coq.Init.Datatypes.None
+R6985 Coq.Init.Datatypes.None
+R6890 RTLtyping.fold2
+R6938 AST.sig_args
+R6929 RTL.fn_sig
+R6915 RTL.fn_params
+R6896 RTLtyping.type_rtl_arg
+R6782 Maps.fold
+R6866 RTLtyping.empty
+R6857 RTL.fn_code
+R6794 RTLtyping.type_rtl_instr
+R6821 AST.sig_res
+R6812 RTL.fn_sig
+R6757 RTL.function
+R7294 Coq.Init.Logic "x <> y" type_scope
+R7273 RTLtyping.repr
+R7284 RTLtyping.tTy
+R7288 AST.Tint
+R7297 RTLtyping.repr
+R7308 RTLtyping.tTy
+R7312 AST.Tfloat
+R7262 RTLtyping.T
+R7482 Coq.Init.Logic "x = y" type_scope
+R7412 RTLtyping.eq
+R7445 RTLtyping.repr
+R7456 RTLtyping.tTy
+R7460 AST.Tfloat
+R7422 RTLtyping.repr
+R7433 RTLtyping.tTy
+R7437 AST.Tint
+R7390 RTLtyping.consistent
+R7360 RTLtyping.T
+R7554 RTLtyping.eq
+R7587 RTLtyping.repr
+R7598 RTLtyping.tTy
+R7602 AST.Tfloat
+R7564 RTLtyping.repr
+R7575 RTLtyping.tTy
+R7579 AST.Tint
+R7554 RTLtyping.eq
+R7587 RTLtyping.repr
+R7598 RTLtyping.tTy
+R7602 AST.Tfloat
+R7564 RTLtyping.repr
+R7575 RTLtyping.tTy
+R7579 AST.Tint
+R7725 Coq.Init.Logic "x = y" type_scope
+R7699 RTLtyping.eq
+R7666 RTLtyping.myT
+R7767 RTLtyping.eq
+R7767 RTLtyping.eq
+R7848 RTLtyping.consistent
+R7859 RTLtyping.error
+R7904 RTLtyping.consistent
+R7915 RTLtyping.error
+R7904 RTLtyping.consistent
+R7915 RTLtyping.error
+R8000 RTLtyping.sameclass_identify_1
+R8000 RTLtyping.sameclass_identify_1
+R8119 Coq.Init.Logic "x = y" type_scope
+R8106 Coq.Init.Logic "x = y" type_scope
+R8096 RTLtyping.teq
+R8108 Coq.Init.Datatypes.true
+R8090 AST.typ
+R8090 AST.typ
+R8327 Coq.Init.Logic "x = y" type_scope
+R8313 RTLtyping.repr
+R8329 RTLtyping.repr
+R8294 Coq.Init.Logic "x = y" type_scope
+R8280 RTLtyping.repr
+R8296 RTLtyping.repr
+R8270 RTLtyping.myT
+R8270 RTLtyping.myT
+R8237 RTLtyping.T
+R8237 RTLtyping.T
+R8388 RTLtyping.included
+R8381 RTLtyping.T
+R8535 RTLtyping.included
+R8517 RTLtyping.included
+R8499 RTLtyping.included
+R8490 RTLtyping.T
+R8490 RTLtyping.T
+R8490 RTLtyping.T
+R8685 RTLtyping.consistent
+R8668 RTLtyping.consistent
+R8650 RTLtyping.included
+R8641 RTLtyping.T
+R8641 RTLtyping.T
+R8870 RTLtyping.included
+R8882 RTLtyping.identify
+R8864 RTLtyping.myT
+R8864 RTLtyping.myT
+R8849 RTLtyping.T
+R8950 RTLtyping.sameclass_identify_2
+R8950 RTLtyping.sameclass_identify_2
+R9139 Coq.Init.Logic "x = y" type_scope
+R9096 RTLtyping.repr
+R9126 RTLtyping.tReg
+R9105 RTLtyping.type_rtl_arg
+R9141 RTLtyping.repr
+R9171 RTLtyping.tTy
+R9150 RTLtyping.type_rtl_arg
+R9059 RTLtyping.consistent
+R9071 RTLtyping.type_rtl_arg
+R9051 AST.typ
+R9041 Registers.reg
+R9030 RTLtyping.T
+R9237 RTLtyping.sameclass_identify_1
+R9237 RTLtyping.sameclass_identify_1
+R9413 Coq.Init.Logic "x = y" type_scope
+R9383 RTLtyping.mk_env
+R9391 RTLtyping.type_rtl_arg
+R9348 RTLtyping.consistent
+R9360 RTLtyping.type_rtl_arg
+R9340 AST.typ
+R9330 Registers.reg
+R9319 RTLtyping.T
+R9471 RTLtyping.type_arg_correct_1
+R9471 RTLtyping.type_arg_correct_1
+R9517 RTLtyping.consistent_not_eq
+R9517 RTLtyping.consistent_not_eq
+R9556 RTLtyping.eq
+R9566 RTLtyping.repr
+R9601 RTLtyping.tTy
+R9605 AST.Tfloat
+R9575 RTLtyping.type_rtl_arg
+R9592 AST.Tfloat
+R9556 RTLtyping.eq
+R9566 RTLtyping.repr
+R9601 RTLtyping.tTy
+R9605 AST.Tfloat
+R9575 RTLtyping.type_rtl_arg
+R9592 AST.Tfloat
+R9717 RTLtyping.included
+R9729 RTLtyping.type_rtl_arg
+R9711 AST.typ
+R9701 Registers.reg
+R9690 RTLtyping.T
+R9806 RTLtyping.included_identify
+R9806 RTLtyping.included_identify
+R9936 RTLtyping.consistent
+R9901 RTLtyping.consistent
+R9913 RTLtyping.type_rtl_arg
+R9893 AST.typ
+R9883 Registers.reg
+R9872 RTLtyping.T
+R10013 RTLtyping.type_rtl_arg
+R9981 RTLtyping.included_consistent
+R10013 RTLtyping.type_rtl_arg
+R9981 RTLtyping.included_consistent
+R10044 RTLtyping.type_arg_included
+R10044 RTLtyping.type_arg_included
+R10208 RTLtyping.included
+R10220 RTLtyping.fold2
+R10226 RTLtyping.type_rtl_arg
+R10163 RTLtyping.consistent
+R10175 RTLtyping.fold2
+R10181 RTLtyping.type_rtl_arg
+R10154 RTLtyping.T
+R10139 Coq.Lists.List.list
+R10144 AST.typ
+R10123 Coq.Lists.List.list
+R10128 Registers.reg
+R10326 RTLtyping.included_refl
+R10326 RTLtyping.included_refl
+R10363 RTLtyping.error_inconsistent
+R10363 RTLtyping.error_inconsistent
+R10411 RTLtyping.error_inconsistent
+R10411 RTLtyping.error_inconsistent
+R10501 RTLtyping.type_rtl_arg
+R10474 RTLtyping.included_trans
+R10501 RTLtyping.type_rtl_arg
+R10474 RTLtyping.included_trans
+R10532 RTLtyping.type_arg_included
+R10532 RTLtyping.type_arg_included
+R10709 RTLtyping.consistent
+R10666 RTLtyping.consistent
+R10678 RTLtyping.fold2
+R10684 RTLtyping.type_rtl_arg
+R10657 RTLtyping.T
+R10642 Coq.Lists.List.list
+R10647 AST.typ
+R10626 Coq.Lists.List.list
+R10631 Registers.reg
+R10755 RTLtyping.included_consistent
+R10780 RTLtyping.type_args_included
+R10755 RTLtyping.included_consistent
+R10780 RTLtyping.type_args_included
+R11001 Coq.Init.Logic "x = y" type_scope
+R10956 Coq.Lists.List.map
+R10961 RTLtyping.mk_env
+R10969 RTLtyping.fold2
+R10975 RTLtyping.type_rtl_arg
+R10911 RTLtyping.consistent
+R10923 RTLtyping.fold2
+R10929 RTLtyping.type_rtl_arg
+R10902 RTLtyping.T
+R10887 Coq.Lists.List.list
+R10892 AST.typ
+R10871 Coq.Lists.List.list
+R10876 Registers.reg
+R11114 RTLtyping.error_inconsistent
+R11114 RTLtyping.error_inconsistent
+R11191 RTLtyping.error_inconsistent
+R11191 RTLtyping.error_inconsistent
+R11266 RTLtyping.type_rtl_arg
+R11266 RTLtyping.type_rtl_arg
+R11338 RTLtyping.type_args_included
+R11375 RTLtyping.tTy
+R11379 AST.Tint
+R11366 RTLtyping.tReg
+R11338 RTLtyping.type_args_included
+R11375 RTLtyping.tTy
+R11379 AST.Tint
+R11366 RTLtyping.tReg
+R11399 RTLtyping.consistent_not_eq
+R11399 RTLtyping.consistent_not_eq
+R11434 RTLtyping.type_arg_correct_1
+R11434 RTLtyping.type_arg_correct_1
+R11464 RTLtyping.type_args_extends
+R11464 RTLtyping.type_args_extends
+R11529 RTLtyping.type_args_included
+R11566 RTLtyping.tTy
+R11570 AST.Tfloat
+R11557 RTLtyping.tReg
+R11529 RTLtyping.type_args_included
+R11566 RTLtyping.tTy
+R11570 AST.Tfloat
+R11557 RTLtyping.tReg
+R11592 RTLtyping.equal_eq
+R11592 RTLtyping.equal_eq
+R11618 RTLtyping.type_arg_correct_1
+R11618 RTLtyping.type_arg_correct_1
+R11648 RTLtyping.type_args_extends
+R11648 RTLtyping.type_args_extends
+R11888 Coq.Init.Logic "x = y" type_scope
+R11861 Coq.Lists.List.map
+R11877 RTL.fn_params
+R11902 AST.sig_args
+R11893 RTL.fn_sig
+R11845 Coq.Init.Logic "x = y" type_scope
+R11825 RTLtyping.type_rtl_function
+R11847 Coq.Init.Datatypes.Some
+R11814 RTLtyping.regenv
+R11798 RTL.function
+R11985 RTLtyping.repet
+R11985 RTLtyping.repet
+R12049 Maps.fold
+R12102 RTLtyping.empty
+R12061 RTLtyping.type_rtl_instr
+R12077 AST.sig_res
+R12049 Maps.fold
+R12102 RTLtyping.empty
+R12061 RTLtyping.type_rtl_instr
+R12077 AST.sig_res
+R12139 RTLtyping.consistent
+R12151 RTLtyping.fold2
+R12183 AST.sig_args
+R12157 RTLtyping.type_rtl_arg
+R12139 RTLtyping.consistent
+R12151 RTLtyping.fold2
+R12183 AST.sig_args
+R12157 RTLtyping.type_rtl_arg
+R12229 RTLtyping.repr
+R12238 RTLtyping.fold2
+R12270 AST.sig_args
+R12244 RTLtyping.type_rtl_arg
+R12229 RTLtyping.repr
+R12238 RTLtyping.fold2
+R12270 AST.sig_args
+R12244 RTLtyping.type_rtl_arg
+R12321 RTLtyping.eq
+R12349 RTLtyping.tTy
+R12353 AST.Tfloat
+R12334 RTLtyping.tTy
+R12338 AST.Tint
+R12321 RTLtyping.eq
+R12349 RTLtyping.tTy
+R12353 AST.Tfloat
+R12334 RTLtyping.tTy
+R12338 AST.Tint
+R12437 RTLtyping.type_args_correct
+R12437 RTLtyping.type_args_correct
+R12510 RTLtyping.equal_eq
+R12510 RTLtyping.equal_eq
+R12674 Coq.Init.Logic "~ x" type_scope
+R12675 Coq.Lists.List.In
+R12663 Coq.Init.Logic "x = y" type_scope
+R12652 RTLtyping.member
+R12665 Coq.Init.Datatypes.false
+R12646 Registers.reg
+R12631 Coq.Lists.List.list
+R12636 Registers.reg
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R12749 Coqlib.peq
+R12749 Coqlib.peq
+R12933 Coqlib.list_norepet
+R12922 Coq.Init.Logic "x = y" type_scope
+R12914 RTLtyping.repet
+R12924 Coq.Init.Datatypes.false
+R12903 Coq.Lists.List.list
+R12908 Registers.reg
+R13002 Coqlib.list_norepet_nil
+R13019 Registers.reg
+R13002 Coqlib.list_norepet_nil
+R13019 Registers.reg
+R13036 Coq.Bool.Bool.orb_false_elim
+R13065 RTLtyping.repet
+R13052 RTLtyping.member
+R13036 Coq.Bool.Bool.orb_false_elim
+R13065 RTLtyping.repet
+R13052 RTLtyping.member
+R13097 Coqlib.list_norepet_cons
+R13097 Coqlib.list_norepet_cons
+R13128 RTLtyping.member_correct
+R13128 RTLtyping.member_correct
+R13291 Coqlib.list_norepet
+R13307 RTL.fn_params
+R13275 Coq.Init.Logic "x = y" type_scope
+R13255 RTLtyping.type_rtl_function
+R13277 Coq.Init.Datatypes.Some
+R13244 RTLtyping.regenv
+R13228 RTL.function
+R13410 Coq.Init.Logic "x = y" type_scope
+R13394 RTLtyping.repet
+R13412 Coq.Init.Datatypes.false
+R13410 Coq.Init.Logic "x = y" type_scope
+R13394 RTLtyping.repet
+R13412 Coq.Init.Datatypes.false
+R13438 RTLtyping.repet_correct
+R13438 RTLtyping.repet_correct
+R13474 RTLtyping.repet
+R13474 RTLtyping.repet
+R13648 Coq.Init.Logic "'exists' x : t , p" type_scope
+R13808 Coq.Init.Logic "A /\ B" type_scope
+R13673 RTLtyping.included
+R13683 Maps.fold
+R13772 RTLtyping.empty
+R13763 RTL.fn_code
+R13695 RTLtyping.type_rtl_instr
+R13722 AST.sig_res
+R13713 RTL.fn_sig
+R13834 Coq.Init.Logic "A /\ B" type_scope
+R13815 Coq.Init.Logic "x = y" type_scope
+R13817 RTLtyping.mk_env
+R13837 RTLtyping.consistent
+R13660 RTLtyping.T
+R13632 Coq.Init.Logic "x = y" type_scope
+R13612 RTLtyping.type_rtl_function
+R13634 Coq.Init.Datatypes.Some
+R13601 RTLtyping.regenv
+R13584 RTL.function
+R13896 Maps.fold
+R13985 RTLtyping.empty
+R13976 RTL.fn_code
+R13908 RTLtyping.type_rtl_instr
+R13935 AST.sig_res
+R13926 RTL.fn_sig
+R13896 Maps.fold
+R13985 RTLtyping.empty
+R13976 RTL.fn_code
+R13908 RTLtyping.type_rtl_instr
+R13935 AST.sig_res
+R13926 RTL.fn_sig
+R14066 RTLtyping.repet
+R14075 RTL.fn_params
+R14066 RTLtyping.repet
+R14075 RTL.fn_params
+R14139 RTLtyping.fold2
+R14187 AST.sig_args
+R14178 RTL.fn_sig
+R14164 RTL.fn_params
+R14145 RTLtyping.type_rtl_arg
+R14139 RTLtyping.fold2
+R14187 AST.sig_args
+R14178 RTL.fn_sig
+R14164 RTL.fn_params
+R14145 RTLtyping.type_rtl_arg
+R14245 RTLtyping.eq
+R14279 RTLtyping.repr
+R14291 RTLtyping.tTy
+R14295 AST.Tfloat
+R14255 RTLtyping.repr
+R14267 RTLtyping.tTy
+R14271 AST.Tint
+R14245 RTLtyping.eq
+R14279 RTLtyping.repr
+R14291 RTLtyping.tTy
+R14295 AST.Tfloat
+R14255 RTLtyping.repr
+R14267 RTLtyping.tTy
+R14271 AST.Tint
+R14350 RTLtyping.equal_eq
+R14350 RTLtyping.equal_eq
+R14405 RTLtyping.consistent_not_eq
+R14405 RTLtyping.consistent_not_eq
+R14439 Coq.Init.Logic.conj
+R14439 Coq.Init.Logic.conj
+R14470 RTLtyping.type_args_included
+R14470 RTLtyping.type_args_included
+R14510 Coq.Init.Logic.conj
+R14510 Coq.Init.Logic.conj
+R14737 Coq.Init.Logic "x = y" type_scope
+R14684 RTLtyping.fold2
+R14704 RTLtyping.type_rtl_arg
+R14690 RTLtyping.type_rtl_arg
+R14743 RTLtyping.fold2
+R14792 Coq.Init.Datatypes.fst
+R14763 RTLtyping.type_rtl_arg
+R14781 Coq.Init.Datatypes.snd
+R14749 RTLtyping.type_rtl_arg
+R14641 Coq.Init.Datatypes "x * y" type_scope
+R14632 Coq.Lists.List.list
+R14637 AST.typ
+R14643 AST.typ
+R14622 Registers.reg
+R14607 Coq.Lists.List.list
+R14612 Registers.reg
+R14596 RTLtyping.T
+R14830 Coq.Init.Datatypes.surjective_pairing
+R14830 Coq.Init.Datatypes.surjective_pairing
+R15044 RTLtyping.included
+R15056 RTLtyping.fold2
+R15076 RTLtyping.type_rtl_arg
+R15062 RTLtyping.type_rtl_arg
+R14980 RTLtyping.consistent
+R14992 RTLtyping.fold2
+R15012 RTLtyping.type_rtl_arg
+R14998 RTLtyping.type_rtl_arg
+R14972 AST.typ
+R14962 Registers.reg
+R14951 RTLtyping.T
+R14936 Coq.Lists.List.list
+R14941 AST.typ
+R14920 Coq.Lists.List.list
+R14925 Registers.reg
+R15158 RTLtyping.type_rtl_arg
+R15131 RTLtyping.included_trans
+R15158 RTLtyping.type_rtl_arg
+R15131 RTLtyping.included_trans
+R15187 RTLtyping.type_arg_included
+R15187 RTLtyping.type_arg_included
+R15214 RTLtyping.type_args_included
+R15214 RTLtyping.type_args_included
+R15468 RTLtyping.included
+R15480 RTLtyping.fold2
+R15500 RTLtyping.type_rtl_arg
+R15514 RTLtyping.type_rtl_ros
+R15486 RTLtyping.type_rtl_arg
+R15385 RTLtyping.consistent
+R15397 RTLtyping.fold2
+R15417 RTLtyping.type_rtl_arg
+R15431 RTLtyping.type_rtl_ros
+R15403 RTLtyping.type_rtl_arg
+R15374 Coq.Init.Datatypes "x + y" type_scope
+R15371 Registers.reg
+R15375 AST.ident
+R15350 AST.typ
+R15340 Registers.reg
+R15329 RTLtyping.T
+R15314 Coq.Lists.List.list
+R15319 AST.typ
+R15298 Coq.Lists.List.list
+R15303 Registers.reg
+R15599 RTLtyping.type_rtl_ros
+R15572 RTLtyping.included_trans
+R15599 RTLtyping.type_rtl_ros
+R15572 RTLtyping.included_trans
+R15665 RTLtyping.included_identify
+R15665 RTLtyping.included_identify
+R15692 RTLtyping.included_refl
+R15692 RTLtyping.included_refl
+R15715 RTLtyping.type_args_res_included
+R15715 RTLtyping.type_args_res_included
+R15903 RTLtyping.included
+R15915 RTLtyping.type_rtl_instr
+R15857 RTLtyping.consistent
+R15869 RTLtyping.type_rtl_instr
+R15842 Coq.Init.Datatypes.option
+R15849 AST.typ
+R15826 RTLtyping.T
+R15808 RTL.instruction
+R15793 Coq.NArith.BinPos.positive
+R16011 RTLtyping.type_args_res_included
+R16011 RTLtyping.type_args_res_included
+R16011 RTLtyping.type_args_res_included
+R16011 RTLtyping.type_args_res_included
+R16011 RTLtyping.type_args_res_included
+R16011 RTLtyping.type_args_res_included
+R16011 RTLtyping.type_args_res_included
+R16011 RTLtyping.type_args_res_included
+R16051 RTLtyping.included_refl
+R16051 RTLtyping.included_refl
+R16117 RTLtyping.type_args_res_included
+R16117 RTLtyping.type_args_res_included
+R16117 RTLtyping.type_args_res_included
+R16117 RTLtyping.type_args_res_included
+R16117 RTLtyping.type_args_res_included
+R16117 RTLtyping.type_args_res_included
+R16117 RTLtyping.type_args_res_included
+R16117 RTLtyping.type_args_res_included
+R16117 RTLtyping.type_args_res_included
+R16117 RTLtyping.type_args_res_included
+R16117 RTLtyping.type_args_res_included
+R16117 RTLtyping.type_args_res_included
+R16117 RTLtyping.type_args_res_included
+R16117 RTLtyping.type_args_res_included
+R16117 RTLtyping.type_args_res_included
+R16117 RTLtyping.type_args_res_included
+R16117 RTLtyping.type_args_res_included
+R16117 RTLtyping.type_args_res_included
+R16117 RTLtyping.type_args_res_included
+R16117 RTLtyping.type_args_res_included
+R16117 RTLtyping.type_args_res_included
+R16117 RTLtyping.type_args_res_included
+R16117 RTLtyping.type_args_res_included
+R16117 RTLtyping.type_args_res_included
+R16117 RTLtyping.type_args_res_included
+R16117 RTLtyping.type_args_res_included
+R16117 RTLtyping.type_args_res_included
+R16117 RTLtyping.type_args_res_included
+R16117 RTLtyping.type_args_res_included
+R16117 RTLtyping.type_args_res_included
+R16117 RTLtyping.type_args_res_included
+R16117 RTLtyping.type_args_res_included
+R16117 RTLtyping.type_args_res_included
+R16117 RTLtyping.type_args_res_included
+R16117 RTLtyping.type_args_res_included
+R16117 RTLtyping.type_args_res_included
+R16117 RTLtyping.type_args_res_included
+R16117 RTLtyping.type_args_res_included
+R16117 RTLtyping.type_args_res_included
+R16117 RTLtyping.type_args_res_included
+R16117 RTLtyping.type_args_res_included
+R16117 RTLtyping.type_args_res_included
+R16117 RTLtyping.type_args_res_included
+R16117 RTLtyping.type_args_res_included
+R16117 RTLtyping.type_args_res_included
+R16198 RTLtyping.error_inconsistent
+R16198 RTLtyping.error_inconsistent
+R16275 RTLtyping.included_identify
+R16275 RTLtyping.included_identify
+R16304 RTLtyping.error_inconsistent
+R16304 RTLtyping.error_inconsistent
+R16381 RTLtyping.included_refl
+R16381 RTLtyping.included_refl
+R16406 RTLtyping.error_inconsistent
+R16406 RTLtyping.error_inconsistent
+R16442 RTLtyping.type_args_res_ros_included
+R16442 RTLtyping.type_args_res_ros_included
+R16486 RTLtyping.type_args_included
+R16486 RTLtyping.type_args_included
+R16581 RTLtyping.error_inconsistent
+R16581 RTLtyping.error_inconsistent
+R16581 RTLtyping.error_inconsistent
+R16581 RTLtyping.error_inconsistent
+R16581 RTLtyping.error_inconsistent
+R16624 RTLtyping.type_arg_included
+R16624 RTLtyping.type_arg_included
+R16653 RTLtyping.included_refl
+R16653 RTLtyping.included_refl
+R16877 RTLtyping.consistent
+R16786 RTLtyping.consistent
+R16804 Coq.Lists.List.fold_left
+R16826 RTLtyping.type_rtl_instr
+R16859 Coq.Init.Datatypes.snd
+R16851 Coq.Init.Datatypes.fst
+R16771 Coq.Init.Datatypes.option
+R16778 AST.typ
+R16755 RTLtyping.T
+R16719 Coq.Lists.List.list
+R16734 Coq.Init.Datatypes "x * y" type_scope
+R16725 Coq.NArith.BinPos.positive
+R16736 RTL.instruction
+R16982 RTLtyping.type_rtl_instr
+R17015 Coq.Init.Datatypes.snd
+R17007 Coq.Init.Datatypes.fst
+R16944 RTLtyping.included_consistent
+R16982 RTLtyping.type_rtl_instr
+R17015 Coq.Init.Datatypes.snd
+R17007 Coq.Init.Datatypes.fst
+R16944 RTLtyping.included_consistent
+R17033 RTLtyping.type_instr_included
+R17033 RTLtyping.type_instr_included
+R17347 RTLtyping.included
+R17368 Coq.Lists.List.fold_left
+R17390 RTLtyping.type_rtl_instr
+R17423 Coq.Init.Datatypes.snd
+R17415 Coq.Init.Datatypes.fst
+R17256 RTLtyping.consistent
+R17274 Coq.Lists.List.fold_left
+R17296 RTLtyping.type_rtl_instr
+R17329 Coq.Init.Datatypes.snd
+R17321 Coq.Init.Datatypes.fst
+R17241 Coq.Init.Datatypes.option
+R17248 AST.typ
+R17225 RTLtyping.T
+R17189 Coq.Lists.List.list
+R17204 Coq.Init.Datatypes "x * y" type_scope
+R17195 Coq.NArith.BinPos.positive
+R17206 RTL.instruction
+R17488 RTLtyping.included_refl
+R17488 RTLtyping.included_refl
+R17547 RTLtyping.type_rtl_instr
+R17580 Coq.Init.Datatypes.snd
+R17572 Coq.Init.Datatypes.fst
+R17519 RTLtyping.included_trans
+R17547 RTLtyping.type_rtl_instr
+R17580 Coq.Init.Datatypes.snd
+R17572 Coq.Init.Datatypes.fst
+R17519 RTLtyping.included_trans
+R17600 RTLtyping.type_instr_included
+R17600 RTLtyping.type_instr_included
+R17631 RTLtyping.type_instrs_extends
+R17631 RTLtyping.type_instrs_extends
+R17912 Coq.Init.Logic "'exists' x : t , p" type_scope
+R17984 Coq.Init.Logic "A /\ B" type_scope
+R17937 RTLtyping.consistent
+R17949 RTLtyping.type_rtl_instr
+R17987 RTLtyping.included
+R18048 Maps.fold
+R18060 RTLtyping.type_rtl_instr
+R17997 RTLtyping.type_rtl_instr
+R17923 RTLtyping.T
+R17898 Coq.Init.Logic "x = y" type_scope
+R17894 Maps "a ! b"
+R17900 Coq.Init.Datatypes.Some
+R17877 RTL.instruction
+R17862 Coq.NArith.BinPos.positive
+R17791 RTLtyping.consistent
+R17803 Maps.fold
+R17815 RTLtyping.type_rtl_instr
+R17782 RTLtyping.T
+R17770 RTL.code
+R17753 Coq.Init.Datatypes.option
+R17760 AST.typ
+R18123 Maps.fold_spec
+R18123 Maps.fold_spec
+R18152 Maps.fold_spec
+R18152 Maps.fold_spec
+R18190 Maps.elements_correct
+R18190 Maps.elements_correct
+R18322 Maps.elements
+R18322 Maps.elements
+R18365 Coq.Lists.List.In
+R18376 Coq.Lists.List.nil
+R18368 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R18365 Coq.Lists.List.In
+R18376 Coq.Lists.List.nil
+R18368 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R18392 Coq.Lists.List.in_nil
+R18392 Coq.Lists.List.in_nil
+R18547 Coq.Init.Logic.conj
+R18547 Coq.Init.Logic.conj
+R18563 RTLtyping.type_instrs_extends
+R18563 RTLtyping.type_instrs_extends
+R18637 RTLtyping.type_instrs_included
+R18637 RTLtyping.type_instrs_included
+R18824 Coq.Init.Logic "A \/ B" type_scope
+R18797 Coq.Init.Logic "x = y" type_scope
+R18778 RTLtyping.repr
+R18789 RTLtyping.tReg
+R18799 RTLtyping.repr
+R18810 RTLtyping.tTy
+R18814 AST.Tfloat
+R18846 Coq.Init.Logic "x = y" type_scope
+R18827 RTLtyping.repr
+R18838 RTLtyping.tReg
+R18848 RTLtyping.repr
+R18859 RTLtyping.tTy
+R18863 AST.Tint
+R18768 Registers.reg
+R18757 RTLtyping.T
+R18942 RTL.Inop
+R18952 Coq.Init.Logic.True
+R18961 RTL.Iop
+R18965 Op.Omove
+R18975 Coq.Lists.List "x :: y" list_scope
+R18978 Coq.Lists.List.nil
+R19011 Coq.Init.Logic "x = y" type_scope
+R18991 RTLtyping.repr
+R19002 RTLtyping.tReg
+R19013 RTLtyping.repr
+R19024 RTLtyping.tReg
+R19037 RTL.Iop
+R19041 Op.Oundef
+R19057 Coq.Init.Logic.True
+R19066 RTL.Iop
+R19106 Coq.Init.Logic "A /\ B" type_scope
+R19094 RTLtyping.mapped
+R19138 RTLtyping.mapped
+R19125 Coq.Lists.List.In
+R19120 Registers.reg
+R19153 RTL.Iload
+R19197 Coq.Init.Logic "A /\ B" type_scope
+R19185 RTLtyping.mapped
+R19229 RTLtyping.mapped
+R19216 Coq.Lists.List.In
+R19211 Registers.reg
+R19244 RTL.Istore
+R19289 Coq.Init.Logic "A /\ B" type_scope
+R19277 RTLtyping.mapped
+R19321 RTLtyping.mapped
+R19308 Coq.Lists.List.In
+R19303 Registers.reg
+R19336 RTL.Icall
+R19424 Coq.Init.Logic "A /\ B" type_scope
+R19382 Coq.Init.Datatypes.inl
+R19391 RTLtyping.mapped
+R19409 Coq.Init.Logic.True
+R19439 Coq.Init.Logic "A /\ B" type_scope
+R19427 RTLtyping.mapped
+R19471 RTLtyping.mapped
+R19458 Coq.Lists.List.In
+R19453 Registers.reg
+R19486 RTL.Icond
+R19541 RTLtyping.mapped
+R19528 Coq.Lists.List.In
+R19523 Registers.reg
+R19556 RTL.Ireturn
+R19564 Coq.Init.Datatypes.None
+R19572 Coq.Init.Logic.True
+R19581 RTL.Ireturn
+R19590 Coq.Init.Datatypes.Some
+R19601 RTLtyping.mapped
+R18907 RTL.instruction
+R18896 RTLtyping.T
+R19689 RTLtyping.mapped
+R19697 RTLtyping.type_rtl_arg
+R19681 AST.typ
+R19671 Registers.reg
+R19660 RTLtyping.T
+R19806 RTLtyping.sameclass_identify_1
+R19806 RTLtyping.sameclass_identify_1
+R19845 RTLtyping.sameclass_identify_1
+R19845 RTLtyping.sameclass_identify_1
+R19961 RTLtyping.mapped
+R19969 RTLtyping.type_rtl_arg
+R19946 RTLtyping.mapped
+R19938 AST.typ
+R19928 Registers.reg
+R19928 Registers.reg
+R19914 RTLtyping.T
+R20082 RTLtyping.sameclass_identify_2
+R20082 RTLtyping.sameclass_identify_2
+R20128 RTLtyping.sameclass_identify_2
+R20128 RTLtyping.sameclass_identify_2
+R20318 RTLtyping.mapped
+R20326 RTLtyping.fold2
+R20332 RTLtyping.type_rtl_arg
+R20300 RTLtyping.mapped
+R20255 RTLtyping.consistent
+R20267 RTLtyping.fold2
+R20273 RTLtyping.type_rtl_arg
+R20247 Registers.reg
+R20236 RTLtyping.T
+R20221 Coq.Lists.List.list
+R20226 AST.typ
+R20205 Coq.Lists.List.list
+R20210 Registers.reg
+R20434 RTLtyping.error_inconsistent
+R20434 RTLtyping.error_inconsistent
+R20506 RTLtyping.error_inconsistent
+R20506 RTLtyping.error_inconsistent
+R20506 RTLtyping.error_inconsistent
+R20569 RTLtyping.type_arg_mapped
+R20569 RTLtyping.type_arg_mapped
+R20747 RTLtyping.mapped
+R20755 RTLtyping.fold2
+R20761 RTLtyping.type_rtl_arg
+R20736 Coq.Lists.List.In
+R20680 RTLtyping.consistent
+R20692 RTLtyping.fold2
+R20698 RTLtyping.type_rtl_arg
+R20671 RTLtyping.T
+R20656 Coq.Lists.List.list
+R20661 AST.typ
+R20640 Coq.Lists.List.list
+R20645 Registers.reg
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R20888 RTLtyping.error_inconsistent
+R20888 RTLtyping.error_inconsistent
+R20974 RTLtyping.type_args_mapped
+R20974 RTLtyping.type_args_mapped
+R21006 RTLtyping.type_arg_complete
+R21006 RTLtyping.type_arg_complete
+R21216 RTLtyping.mapped
+R21224 RTLtyping.fold2
+R21244 RTLtyping.type_rtl_arg
+R21230 RTLtyping.type_rtl_arg
+R21152 RTLtyping.consistent
+R21164 RTLtyping.fold2
+R21184 RTLtyping.type_rtl_arg
+R21170 RTLtyping.type_rtl_arg
+R21144 AST.typ
+R21134 Registers.reg
+R21119 Coq.Lists.List.list
+R21124 AST.typ
+R21103 Coq.Lists.List.list
+R21108 Registers.reg
+R21091 RTLtyping.T
+R21299 RTLtyping.type_args_mapped
+R21299 RTLtyping.type_args_mapped
+R21331 RTLtyping.type_arg_complete
+R21331 RTLtyping.type_arg_complete
+R21589 Coq.Init.Logic "A /\ B" type_scope
+R21526 RTLtyping.mapped
+R21534 RTLtyping.fold2
+R21554 RTLtyping.type_rtl_arg
+R21540 RTLtyping.type_rtl_arg
+R21616 RTLtyping.mapped
+R21624 RTLtyping.fold2
+R21644 RTLtyping.type_rtl_arg
+R21630 RTLtyping.type_rtl_arg
+R21604 Coq.Lists.List.In
+R21462 RTLtyping.consistent
+R21474 RTLtyping.fold2
+R21494 RTLtyping.type_rtl_arg
+R21480 RTLtyping.type_rtl_arg
+R21454 AST.typ
+R21444 Registers.reg
+R21429 Coq.Lists.List.list
+R21434 AST.typ
+R21413 Coq.Lists.List.list
+R21418 Registers.reg
+R21401 RTLtyping.T
+R21801 Coq.Init.Logic.conj
+R21801 Coq.Init.Logic.conj
+R21815 RTLtyping.type_res_complete
+R21815 RTLtyping.type_res_complete
+R21848 RTLtyping.type_args_complete
+R21848 RTLtyping.type_args_complete
+R22116 RTLtyping.mapped
+R22124 RTLtyping.fold2
+R22144 RTLtyping.type_rtl_arg
+R22190 RTLtyping.type_rtl_ros
+R22206 Coq.Init.Datatypes.inl
+R22210 AST.ident
+R22130 RTLtyping.type_rtl_arg
+R21984 RTLtyping.consistent
+R21996 RTLtyping.fold2
+R22016 RTLtyping.type_rtl_arg
+R22066 RTLtyping.type_rtl_ros
+R22082 Coq.Init.Datatypes.inl
+R22086 AST.ident
+R22002 RTLtyping.type_rtl_arg
+R21976 AST.typ
+R21966 Registers.reg
+R21966 Registers.reg
+R21948 Coq.Lists.List.list
+R21953 AST.typ
+R21932 Coq.Lists.List.list
+R21937 Registers.reg
+R21920 RTLtyping.T
+R22262 RTLtyping.type_args_mapped
+R22262 RTLtyping.type_args_mapped
+R22294 RTLtyping.type_arg_mapped
+R22294 RTLtyping.type_arg_mapped
+R22368 RTLtyping.sameclass_identify_1
+R22368 RTLtyping.sameclass_identify_1
+R22626 Coq.Init.Logic "x = y" type_scope
+R22569 RTLtyping.mk_env
+R22577 RTLtyping.fold2
+R22597 RTLtyping.type_rtl_arg
+R22583 RTLtyping.type_rtl_arg
+R22505 RTLtyping.consistent
+R22517 RTLtyping.fold2
+R22537 RTLtyping.type_rtl_arg
+R22523 RTLtyping.type_rtl_arg
+R22497 AST.typ
+R22487 Registers.reg
+R22472 Coq.Lists.List.list
+R22477 AST.typ
+R22456 Coq.Lists.List.list
+R22461 Registers.reg
+R22444 RTLtyping.T
+R22676 RTLtyping.type_args_included
+R22713 RTLtyping.tTy
+R22704 RTLtyping.tReg
+R22676 RTLtyping.type_args_included
+R22713 RTLtyping.tTy
+R22704 RTLtyping.tReg
+R22744 RTLtyping.consistent_not_eq
+R22744 RTLtyping.consistent_not_eq
+R22777 RTLtyping.equal_eq
+R22777 RTLtyping.equal_eq
+R22822 RTLtyping.sameclass_identify_1
+R22822 RTLtyping.sameclass_identify_1
+R23216 Coq.Init.Logic "x = y" type_scope
+R23094 RTLtyping.mk_env
+R23102 RTLtyping.fold2
+R23122 RTLtyping.type_rtl_arg
+R23168 RTLtyping.type_rtl_ros
+R23184 Coq.Init.Datatypes.inl
+R23188 AST.ident
+R23108 RTLtyping.type_rtl_arg
+R23218 AST.Tint
+R22962 RTLtyping.consistent
+R22974 RTLtyping.fold2
+R22994 RTLtyping.type_rtl_arg
+R23044 RTLtyping.type_rtl_ros
+R23060 Coq.Init.Datatypes.inl
+R23064 AST.ident
+R22980 RTLtyping.type_rtl_arg
+R22954 AST.typ
+R22944 Registers.reg
+R22944 Registers.reg
+R22926 Coq.Lists.List.list
+R22931 AST.typ
+R22910 Coq.Lists.List.list
+R22915 Registers.reg
+R22898 RTLtyping.T
+R23269 RTLtyping.type_args_included
+R23307 RTLtyping.tTy
+R23311 AST.Tint
+R23297 RTLtyping.tReg
+R23269 RTLtyping.type_args_included
+R23307 RTLtyping.tTy
+R23311 AST.Tint
+R23297 RTLtyping.tReg
+R23327 RTLtyping.consistent_not_eq
+R23327 RTLtyping.consistent_not_eq
+R23363 RTLtyping.type_arg_included
+R23428 RTLtyping.tTy
+R23432 AST.Tint
+R23418 RTLtyping.tReg
+R23382 RTLtyping.type_rtl_ros
+R23398 Coq.Init.Datatypes.inl
+R23402 AST.ident
+R23363 RTLtyping.type_arg_included
+R23428 RTLtyping.tTy
+R23432 AST.Tint
+R23418 RTLtyping.tReg
+R23382 RTLtyping.type_rtl_ros
+R23398 Coq.Init.Datatypes.inl
+R23402 AST.ident
+R23465 RTLtyping.sameclass_identify_1
+R23465 RTLtyping.sameclass_identify_1
+R23754 Coq.Init.Logic "A /\ B" type_scope
+R23682 RTLtyping.wt_instr
+R23692 RTLtyping.mk_env
+R23700 RTLtyping.type_rtl_instr
+R23727 AST.sig_res
+R23718 RTL.fn_sig
+R23757 RTLtyping.definite
+R23767 RTLtyping.type_rtl_instr
+R23794 AST.sig_res
+R23785 RTL.fn_sig
+R23618 RTLtyping.consistent
+R23630 RTLtyping.type_rtl_instr
+R23657 AST.sig_res
+R23648 RTL.fn_sig
+R23604 Coq.Init.Logic "x = y" type_scope
+R23600 Maps "a ! b"
+R23606 Coq.Init.Datatypes.Some
+R23586 Coq.NArith.BinPos.positive
+R23567 RTL.instruction
+R23556 RTL.code
+R23541 RTL.function
+R23530 RTLtyping.T
+R23923 Coq.Init.Logic.conj
+R23923 Coq.Init.Logic.conj
+R23941 RTLtyping.wt_Inop
+R23941 RTLtyping.wt_Inop
+R24000 Coq.Init.Logic.conj
+R24027 RTLtyping.wt_Iop
+R24082 RTLtyping.type_args_correct
+R24135 RTLtyping.type_res_correct
+R24207 RTLtyping.type_args_res_complete
+R24000 Coq.Init.Logic.conj
+R24027 RTLtyping.wt_Iop
+R24082 RTLtyping.type_args_correct
+R24000 Coq.Init.Logic.conj
+R24027 RTLtyping.wt_Iop
+R24082 RTLtyping.type_args_correct
+R24135 RTLtyping.type_res_correct
+R24207 RTLtyping.type_args_res_complete
+R24000 Coq.Init.Logic.conj
+R24027 RTLtyping.wt_Iop
+R24082 RTLtyping.type_args_correct
+R24135 RTLtyping.type_res_correct
+R24207 RTLtyping.type_args_res_complete
+R24000 Coq.Init.Logic.conj
+R24027 RTLtyping.wt_Iop
+R24082 RTLtyping.type_args_correct
+R24135 RTLtyping.type_res_correct
+R24207 RTLtyping.type_args_res_complete
+R24000 Coq.Init.Logic.conj
+R24027 RTLtyping.wt_Iop
+R24082 RTLtyping.type_args_correct
+R24135 RTLtyping.type_res_correct
+R24207 RTLtyping.type_args_res_complete
+R24000 Coq.Init.Logic.conj
+R24027 RTLtyping.wt_Iop
+R24082 RTLtyping.type_args_correct
+R24000 Coq.Init.Logic.conj
+R24027 RTLtyping.wt_Iop
+R24082 RTLtyping.type_args_correct
+R24135 RTLtyping.type_res_correct
+R24207 RTLtyping.type_args_res_complete
+R24000 Coq.Init.Logic.conj
+R24027 RTLtyping.wt_Iop
+R24082 RTLtyping.type_args_correct
+R24135 RTLtyping.type_res_correct
+R24207 RTLtyping.type_args_res_complete
+R24000 Coq.Init.Logic.conj
+R24027 RTLtyping.wt_Iop
+R24082 RTLtyping.type_args_correct
+R24135 RTLtyping.type_res_correct
+R24207 RTLtyping.type_args_res_complete
+R24000 Coq.Init.Logic.conj
+R24027 RTLtyping.wt_Iop
+R24082 RTLtyping.type_args_correct
+R24135 RTLtyping.type_res_correct
+R24207 RTLtyping.type_args_res_complete
+R24000 Coq.Init.Logic.conj
+R24027 RTLtyping.wt_Iop
+R24082 RTLtyping.type_args_correct
+R24135 RTLtyping.type_res_correct
+R24207 RTLtyping.type_args_res_complete
+R24000 Coq.Init.Logic.conj
+R24027 RTLtyping.wt_Iop
+R24082 RTLtyping.type_args_correct
+R24135 RTLtyping.type_res_correct
+R24207 RTLtyping.type_args_res_complete
+R24000 Coq.Init.Logic.conj
+R24027 RTLtyping.wt_Iop
+R24082 RTLtyping.type_args_correct
+R24135 RTLtyping.type_res_correct
+R24207 RTLtyping.type_args_res_complete
+R24000 Coq.Init.Logic.conj
+R24027 RTLtyping.wt_Iop
+R24082 RTLtyping.type_args_correct
+R24135 RTLtyping.type_res_correct
+R24207 RTLtyping.type_args_res_complete
+R24000 Coq.Init.Logic.conj
+R24027 RTLtyping.wt_Iop
+R24082 RTLtyping.type_args_correct
+R24135 RTLtyping.type_res_correct
+R24207 RTLtyping.type_args_res_complete
+R24000 Coq.Init.Logic.conj
+R24027 RTLtyping.wt_Iop
+R24082 RTLtyping.type_args_correct
+R24135 RTLtyping.type_res_correct
+R24207 RTLtyping.type_args_res_complete
+R24000 Coq.Init.Logic.conj
+R24027 RTLtyping.wt_Iop
+R24082 RTLtyping.type_args_correct
+R24135 RTLtyping.type_res_correct
+R24207 RTLtyping.type_args_res_complete
+R24000 Coq.Init.Logic.conj
+R24027 RTLtyping.wt_Iop
+R24082 RTLtyping.type_args_correct
+R24135 RTLtyping.type_res_correct
+R24207 RTLtyping.type_args_res_complete
+R24000 Coq.Init.Logic.conj
+R24027 RTLtyping.wt_Iop
+R24082 RTLtyping.type_args_correct
+R24135 RTLtyping.type_res_correct
+R24207 RTLtyping.type_args_res_complete
+R24000 Coq.Init.Logic.conj
+R24027 RTLtyping.wt_Iop
+R24082 RTLtyping.type_args_correct
+R24135 RTLtyping.type_res_correct
+R24207 RTLtyping.type_args_res_complete
+R24000 Coq.Init.Logic.conj
+R24027 RTLtyping.wt_Iop
+R24082 RTLtyping.type_args_correct
+R24135 RTLtyping.type_res_correct
+R24207 RTLtyping.type_args_res_complete
+R24000 Coq.Init.Logic.conj
+R24027 RTLtyping.wt_Iop
+R24082 RTLtyping.type_args_correct
+R24135 RTLtyping.type_res_correct
+R24207 RTLtyping.type_args_res_complete
+R24000 Coq.Init.Logic.conj
+R24027 RTLtyping.wt_Iop
+R24082 RTLtyping.type_args_correct
+R24135 RTLtyping.type_res_correct
+R24207 RTLtyping.type_args_res_complete
+R24000 Coq.Init.Logic.conj
+R24027 RTLtyping.wt_Iop
+R24082 RTLtyping.type_args_correct
+R24135 RTLtyping.type_res_correct
+R24207 RTLtyping.type_args_res_complete
+R24000 Coq.Init.Logic.conj
+R24027 RTLtyping.wt_Iop
+R24082 RTLtyping.type_args_correct
+R24135 RTLtyping.type_res_correct
+R24207 RTLtyping.type_args_res_complete
+R24000 Coq.Init.Logic.conj
+R24027 RTLtyping.wt_Iop
+R24082 RTLtyping.type_args_correct
+R24135 RTLtyping.type_res_correct
+R24207 RTLtyping.type_args_res_complete
+R24000 Coq.Init.Logic.conj
+R24027 RTLtyping.wt_Iop
+R24082 RTLtyping.type_args_correct
+R24135 RTLtyping.type_res_correct
+R24207 RTLtyping.type_args_res_complete
+R24000 Coq.Init.Logic.conj
+R24027 RTLtyping.wt_Iop
+R24082 RTLtyping.type_args_correct
+R24135 RTLtyping.type_res_correct
+R24207 RTLtyping.type_args_res_complete
+R24000 Coq.Init.Logic.conj
+R24027 RTLtyping.wt_Iop
+R24082 RTLtyping.type_args_correct
+R24135 RTLtyping.type_res_correct
+R24207 RTLtyping.type_args_res_complete
+R24000 Coq.Init.Logic.conj
+R24027 RTLtyping.wt_Iop
+R24082 RTLtyping.type_args_correct
+R24135 RTLtyping.type_res_correct
+R24207 RTLtyping.type_args_res_complete
+R24000 Coq.Init.Logic.conj
+R24027 RTLtyping.wt_Iop
+R24082 RTLtyping.type_args_correct
+R24135 RTLtyping.type_res_correct
+R24207 RTLtyping.type_args_res_complete
+R24000 Coq.Init.Logic.conj
+R24027 RTLtyping.wt_Iop
+R24082 RTLtyping.type_args_correct
+R24135 RTLtyping.type_res_correct
+R24207 RTLtyping.type_args_res_complete
+R24000 Coq.Init.Logic.conj
+R24027 RTLtyping.wt_Iop
+R24082 RTLtyping.type_args_correct
+R24135 RTLtyping.type_res_correct
+R24207 RTLtyping.type_args_res_complete
+R24000 Coq.Init.Logic.conj
+R24027 RTLtyping.wt_Iop
+R24082 RTLtyping.type_args_correct
+R24135 RTLtyping.type_res_correct
+R24207 RTLtyping.type_args_res_complete
+R24000 Coq.Init.Logic.conj
+R24027 RTLtyping.wt_Iop
+R24082 RTLtyping.type_args_correct
+R24135 RTLtyping.type_res_correct
+R24207 RTLtyping.type_args_res_complete
+R24000 Coq.Init.Logic.conj
+R24027 RTLtyping.wt_Iop
+R24082 RTLtyping.type_args_correct
+R24135 RTLtyping.type_res_correct
+R24207 RTLtyping.type_args_res_complete
+R24000 Coq.Init.Logic.conj
+R24027 RTLtyping.wt_Iop
+R24082 RTLtyping.type_args_correct
+R24135 RTLtyping.type_res_correct
+R24207 RTLtyping.type_args_res_complete
+R24000 Coq.Init.Logic.conj
+R24027 RTLtyping.wt_Iop
+R24082 RTLtyping.type_args_correct
+R24135 RTLtyping.type_res_correct
+R24207 RTLtyping.type_args_res_complete
+R24000 Coq.Init.Logic.conj
+R24027 RTLtyping.wt_Iop
+R24082 RTLtyping.type_args_correct
+R24135 RTLtyping.type_res_correct
+R24207 RTLtyping.type_args_res_complete
+R24000 Coq.Init.Logic.conj
+R24027 RTLtyping.wt_Iop
+R24082 RTLtyping.type_args_correct
+R24135 RTLtyping.type_res_correct
+R24207 RTLtyping.type_args_res_complete
+R24000 Coq.Init.Logic.conj
+R24027 RTLtyping.wt_Iop
+R24082 RTLtyping.type_args_correct
+R24135 RTLtyping.type_res_correct
+R24207 RTLtyping.type_args_res_complete
+R24000 Coq.Init.Logic.conj
+R24027 RTLtyping.wt_Iop
+R24082 RTLtyping.type_args_correct
+R24135 RTLtyping.type_res_correct
+R24207 RTLtyping.type_args_res_complete
+R24000 Coq.Init.Logic.conj
+R24027 RTLtyping.wt_Iop
+R24082 RTLtyping.type_args_correct
+R24135 RTLtyping.type_res_correct
+R24207 RTLtyping.type_args_res_complete
+R24000 Coq.Init.Logic.conj
+R24027 RTLtyping.wt_Iop
+R24082 RTLtyping.type_args_correct
+R24135 RTLtyping.type_res_correct
+R24207 RTLtyping.type_args_res_complete
+R24290 RTLtyping.error_inconsistent
+R24290 RTLtyping.error_inconsistent
+R24358 RTLtyping.error_inconsistent
+R24358 RTLtyping.error_inconsistent
+R24397 Coq.Init.Logic.conj
+R24397 Coq.Init.Logic.conj
+R24415 RTLtyping.wt_Iopmove
+R24415 RTLtyping.wt_Iopmove
+R24475 RTLtyping.sameclass_identify_1
+R24475 RTLtyping.sameclass_identify_1
+R24545 RTLtyping.sameclass_identify_1
+R24545 RTLtyping.sameclass_identify_1
+R24634 RTLtyping.error_inconsistent
+R24634 RTLtyping.error_inconsistent
+R24673 Coq.Init.Logic.conj
+R24673 Coq.Init.Logic.conj
+R24685 RTLtyping.wt_Iopundef
+R24685 RTLtyping.wt_Iopundef
+R24755 Coq.Init.Logic.conj
+R24755 Coq.Init.Logic.conj
+R24773 RTLtyping.wt_Iload
+R24773 RTLtyping.wt_Iload
+R24799 RTLtyping.type_args_correct
+R24799 RTLtyping.type_args_correct
+R24850 RTLtyping.type_res_correct
+R24850 RTLtyping.type_res_correct
+R24908 RTLtyping.type_args_res_complete
+R24908 RTLtyping.type_args_res_complete
+R24975 Coq.Init.Logic.conj
+R24975 Coq.Init.Logic.conj
+R24993 RTLtyping.wt_Istore
+R24993 RTLtyping.wt_Istore
+R25020 RTLtyping.type_args_correct
+R25020 RTLtyping.type_args_correct
+R25071 RTLtyping.type_res_correct
+R25071 RTLtyping.type_res_correct
+R25129 RTLtyping.type_args_res_complete
+R25129 RTLtyping.type_args_res_complete
+R25195 Coq.Init.Logic.conj
+R25195 Coq.Init.Logic.conj
+R25213 RTLtyping.wt_Icall
+R25213 RTLtyping.wt_Icall
+R25255 RTLtyping.type_ros_correct
+R25255 RTLtyping.type_ros_correct
+R25292 RTLtyping.type_args_correct
+R25292 RTLtyping.type_args_correct
+R25330 RTLtyping.type_of_sig_res
+R25330 RTLtyping.type_of_sig_res
+R25356 RTLtyping.type_res_correct
+R25356 RTLtyping.type_res_correct
+R25412 Coq.Init.Logic.conj
+R25412 Coq.Init.Logic.conj
+R25432 RTLtyping.type_ros_complete
+R25432 RTLtyping.type_ros_complete
+R25471 RTLtyping.type_args_res_complete
+R25471 RTLtyping.type_args_res_complete
+R25514 Coq.Init.Logic.conj
+R25514 Coq.Init.Logic.conj
+R25541 RTLtyping.type_args_res_complete
+R25541 RTLtyping.type_args_res_complete
+R25600 Coq.Init.Logic.conj
+R25600 Coq.Init.Logic.conj
+R25618 RTLtyping.wt_Icond
+R25618 RTLtyping.wt_Icond
+R25642 RTLtyping.type_args_correct
+R25642 RTLtyping.type_args_correct
+R25692 RTLtyping.type_args_complete
+R25692 RTLtyping.type_args_complete
+R25777 Coq.Init.Logic.conj
+R25777 Coq.Init.Logic.conj
+R25796 RTLtyping.wt_Ireturn
+R25796 RTLtyping.wt_Ireturn
+R25838 AST.sig_res
+R25829 RTL.fn_sig
+R25838 AST.sig_res
+R25829 RTL.fn_sig
+R25886 RTLtyping.type_arg_correct
+R25886 RTLtyping.type_arg_correct
+R25926 RTLtyping.error_inconsistent
+R25926 RTLtyping.error_inconsistent
+R25980 AST.sig_res
+R25971 RTL.fn_sig
+R25980 AST.sig_res
+R25971 RTL.fn_sig
+R26026 RTLtyping.type_arg_complete
+R26026 RTLtyping.type_arg_complete
+R26061 RTLtyping.error_inconsistent
+R26061 RTLtyping.error_inconsistent
+R26099 Coq.Init.Logic.conj
+R26099 Coq.Init.Logic.conj
+R26117 RTLtyping.wt_Ireturn
+R26117 RTLtyping.wt_Ireturn
+R26158 AST.sig_res
+R26149 RTL.fn_sig
+R26158 AST.sig_res
+R26149 RTL.fn_sig
+R26203 RTLtyping.error_inconsistent
+R26203 RTLtyping.error_inconsistent
+R26428 Coq.Init.Logic "x = y" type_scope
+R26416 RTLtyping.mk_env
+R26430 RTLtyping.mk_env
+R26397 RTLtyping.consistent
+R26377 RTLtyping.included
+R26360 RTLtyping.mapped
+R26352 Registers.reg
+R26341 RTLtyping.T
+R26341 RTLtyping.T
+R26560 RTLtyping.equal_eq
+R26578 RTLtyping.equal_eq
+R26560 RTLtyping.equal_eq
+R26578 RTLtyping.equal_eq
+R26605 RTLtyping.consistent_not_eq
+R26605 RTLtyping.consistent_not_eq
+R26639 RTLtyping.consistent_not_eq
+R26639 RTLtyping.consistent_not_eq
+R26678 RTLtyping.included_consistent
+R26678 RTLtyping.included_consistent
+R26917 Coq.Init.Logic "x = y" type_scope
+R26898 Coq.Lists.List.map
+R26903 RTLtyping.mk_env
+R26919 Coq.Lists.List.map
+R26924 RTLtyping.mk_env
+R26877 RTLtyping.consistent
+R26857 RTLtyping.included
+R26839 RTLtyping.mapped
+R26828 Coq.Lists.List.In
+R26804 Coq.Lists.List.list
+R26809 Registers.reg
+R26792 RTLtyping.T
+R26792 RTLtyping.T
+R26996 RTLtyping.mapped_included_consistent
+R26996 RTLtyping.mapped_included_consistent
+R27214 RTLtyping.mapped
+R27195 RTLtyping.mapped
+R27175 RTLtyping.included
+R27167 Registers.reg
+R27156 RTLtyping.T
+R27156 RTLtyping.T
+R27526 Coq.Init.Logic "A /\ B" type_scope
+R27514 RTLtyping.mapped
+R27550 RTLtyping.mapped
+R27540 Coq.Lists.List.In
+R27470 Coq.Init.Logic "A /\ B" type_scope
+R27458 RTLtyping.mapped
+R27494 RTLtyping.mapped
+R27484 Coq.Lists.List.In
+R27438 RTLtyping.included
+R27425 Coq.Lists.List.list
+R27430 Registers.reg
+R27415 Registers.reg
+R27404 RTLtyping.T
+R27404 RTLtyping.T
+R27608 Coq.Init.Logic.conj
+R27608 Coq.Init.Logic.conj
+R27623 RTLtyping.included_mapped
+R27623 RTLtyping.included_mapped
+R27674 RTLtyping.included_mapped
+R27674 RTLtyping.included_mapped
+R27831 RTLtyping.definite
+R27814 RTLtyping.definite
+R27796 RTLtyping.included
+R27780 RTL.instruction
+R27769 RTLtyping.T
+R27769 RTLtyping.T
+R27907 RTLtyping.included_mapped_forall
+R27907 RTLtyping.included_mapped_forall
+R27907 RTLtyping.included_mapped_forall
+R27907 RTLtyping.included_mapped_forall
+R27907 RTLtyping.included_mapped_forall
+R27907 RTLtyping.included_mapped_forall
+R27907 RTLtyping.included_mapped_forall
+R27907 RTLtyping.included_mapped_forall
+R27976 RTLtyping.included_mapped_forall
+R27976 RTLtyping.included_mapped_forall
+R27976 RTLtyping.included_mapped_forall
+R27976 RTLtyping.included_mapped_forall
+R27976 RTLtyping.included_mapped_forall
+R27976 RTLtyping.included_mapped_forall
+R27976 RTLtyping.included_mapped_forall
+R27976 RTLtyping.included_mapped_forall
+R27976 RTLtyping.included_mapped_forall
+R27976 RTLtyping.included_mapped_forall
+R27976 RTLtyping.included_mapped_forall
+R27976 RTLtyping.included_mapped_forall
+R27976 RTLtyping.included_mapped_forall
+R27976 RTLtyping.included_mapped_forall
+R27976 RTLtyping.included_mapped_forall
+R27976 RTLtyping.included_mapped_forall
+R27976 RTLtyping.included_mapped_forall
+R27976 RTLtyping.included_mapped_forall
+R27976 RTLtyping.included_mapped_forall
+R27976 RTLtyping.included_mapped_forall
+R27976 RTLtyping.included_mapped_forall
+R27976 RTLtyping.included_mapped_forall
+R27976 RTLtyping.included_mapped_forall
+R27976 RTLtyping.included_mapped_forall
+R27976 RTLtyping.included_mapped_forall
+R27976 RTLtyping.included_mapped_forall
+R27976 RTLtyping.included_mapped_forall
+R27976 RTLtyping.included_mapped_forall
+R27976 RTLtyping.included_mapped_forall
+R27976 RTLtyping.included_mapped_forall
+R27976 RTLtyping.included_mapped_forall
+R27976 RTLtyping.included_mapped_forall
+R27976 RTLtyping.included_mapped_forall
+R27976 RTLtyping.included_mapped_forall
+R27976 RTLtyping.included_mapped_forall
+R27976 RTLtyping.included_mapped_forall
+R27976 RTLtyping.included_mapped_forall
+R27976 RTLtyping.included_mapped_forall
+R27976 RTLtyping.included_mapped_forall
+R27976 RTLtyping.included_mapped_forall
+R27976 RTLtyping.included_mapped_forall
+R27976 RTLtyping.included_mapped_forall
+R27976 RTLtyping.included_mapped_forall
+R27976 RTLtyping.included_mapped_forall
+R27976 RTLtyping.included_mapped_forall
+R28049 RTLtyping.included_mapped_forall
+R28049 RTLtyping.included_mapped_forall
+R28116 RTLtyping.included_mapped_forall
+R28116 RTLtyping.included_mapped_forall
+R28202 Coq.Init.Logic.conj
+R28202 Coq.Init.Logic.conj
+R28217 RTLtyping.included_mapped
+R28217 RTLtyping.included_mapped
+R28255 RTLtyping.included_mapped_forall
+R28255 RTLtyping.included_mapped_forall
+R28320 Coq.Init.Logic.conj
+R28320 Coq.Init.Logic.conj
+R28341 RTLtyping.included_mapped_forall
+R28341 RTLtyping.included_mapped_forall
+R28398 RTLtyping.included_mapped
+R28398 RTLtyping.included_mapped
+R28463 RTLtyping.included_mapped
+R28463 RTLtyping.included_mapped
+R28662 RTLtyping.wt_instr
+R28672 RTLtyping.mk_env
+R28641 RTLtyping.consistent
+R28622 RTLtyping.definite
+R28592 RTLtyping.wt_instr
+R28602 RTLtyping.mk_env
+R28572 RTLtyping.included
+R28556 RTL.instruction
+R28545 RTLtyping.T
+R28545 RTLtyping.T
+R28526 RTL.function
+R28796 RTLtyping.wt_Inop
+R28796 RTLtyping.wt_Inop
+R28816 RTLtyping.wt_Iopmove
+R28816 RTLtyping.wt_Iopmove
+R28881 RTLtyping.wt_Iopundef
+R28881 RTLtyping.wt_Iopundef
+R28905 RTLtyping.wt_Iop
+R28905 RTLtyping.wt_Iop
+R29021 RTLtyping.mapped_included_consistent
+R29080 RTLtyping.mapped_list_included
+R29021 RTLtyping.mapped_included_consistent
+R29021 RTLtyping.mapped_included_consistent
+R29021 RTLtyping.mapped_included_consistent
+R29021 RTLtyping.mapped_included_consistent
+R29021 RTLtyping.mapped_included_consistent
+R29021 RTLtyping.mapped_included_consistent
+R29021 RTLtyping.mapped_included_consistent
+R29021 RTLtyping.mapped_included_consistent
+R29021 RTLtyping.mapped_included_consistent
+R29021 RTLtyping.mapped_included_consistent
+R29021 RTLtyping.mapped_included_consistent
+R29021 RTLtyping.mapped_included_consistent
+R29021 RTLtyping.mapped_included_consistent
+R29021 RTLtyping.mapped_included_consistent
+R29021 RTLtyping.mapped_included_consistent
+R29021 RTLtyping.mapped_included_consistent
+R29021 RTLtyping.mapped_included_consistent
+R29021 RTLtyping.mapped_included_consistent
+R29021 RTLtyping.mapped_included_consistent
+R29021 RTLtyping.mapped_included_consistent
+R29021 RTLtyping.mapped_included_consistent
+R29021 RTLtyping.mapped_included_consistent
+R29021 RTLtyping.mapped_included_consistent
+R29021 RTLtyping.mapped_included_consistent
+R29021 RTLtyping.mapped_included_consistent
+R29021 RTLtyping.mapped_included_consistent
+R29021 RTLtyping.mapped_included_consistent
+R29021 RTLtyping.mapped_included_consistent
+R29021 RTLtyping.mapped_included_consistent
+R29021 RTLtyping.mapped_included_consistent
+R29021 RTLtyping.mapped_included_consistent
+R29021 RTLtyping.mapped_included_consistent
+R29021 RTLtyping.mapped_included_consistent
+R29021 RTLtyping.mapped_included_consistent
+R29021 RTLtyping.mapped_included_consistent
+R29021 RTLtyping.mapped_included_consistent
+R29021 RTLtyping.mapped_included_consistent
+R29021 RTLtyping.mapped_included_consistent
+R29021 RTLtyping.mapped_included_consistent
+R29021 RTLtyping.mapped_included_consistent
+R29021 RTLtyping.mapped_included_consistent
+R29021 RTLtyping.mapped_included_consistent
+R29080 RTLtyping.mapped_list_included
+R29080 RTLtyping.mapped_list_included
+R29080 RTLtyping.mapped_list_included
+R29080 RTLtyping.mapped_list_included
+R29080 RTLtyping.mapped_list_included
+R29080 RTLtyping.mapped_list_included
+R29080 RTLtyping.mapped_list_included
+R29080 RTLtyping.mapped_list_included
+R29080 RTLtyping.mapped_list_included
+R29080 RTLtyping.mapped_list_included
+R29080 RTLtyping.mapped_list_included
+R29080 RTLtyping.mapped_list_included
+R29080 RTLtyping.mapped_list_included
+R29080 RTLtyping.mapped_list_included
+R29080 RTLtyping.mapped_list_included
+R29080 RTLtyping.mapped_list_included
+R29080 RTLtyping.mapped_list_included
+R29080 RTLtyping.mapped_list_included
+R29080 RTLtyping.mapped_list_included
+R29080 RTLtyping.mapped_list_included
+R29080 RTLtyping.mapped_list_included
+R29080 RTLtyping.mapped_list_included
+R29080 RTLtyping.mapped_list_included
+R29080 RTLtyping.mapped_list_included
+R29080 RTLtyping.mapped_list_included
+R29080 RTLtyping.mapped_list_included
+R29080 RTLtyping.mapped_list_included
+R29080 RTLtyping.mapped_list_included
+R29080 RTLtyping.mapped_list_included
+R29080 RTLtyping.mapped_list_included
+R29080 RTLtyping.mapped_list_included
+R29080 RTLtyping.mapped_list_included
+R29080 RTLtyping.mapped_list_included
+R29080 RTLtyping.mapped_list_included
+R29080 RTLtyping.mapped_list_included
+R29080 RTLtyping.mapped_list_included
+R29080 RTLtyping.mapped_list_included
+R29080 RTLtyping.mapped_list_included
+R29080 RTLtyping.mapped_list_included
+R29080 RTLtyping.mapped_list_included
+R29080 RTLtyping.mapped_list_included
+R29080 RTLtyping.mapped_list_included
+R29132 RTLtyping.wt_Iload
+R29132 RTLtyping.wt_Iload
+R29157 RTLtyping.mapped_list_included
+R29157 RTLtyping.mapped_list_included
+R29213 RTLtyping.mapped_included_consistent
+R29213 RTLtyping.mapped_included_consistent
+R29273 RTLtyping.wt_Istore
+R29273 RTLtyping.wt_Istore
+R29299 RTLtyping.mapped_list_included
+R29299 RTLtyping.mapped_list_included
+R29355 RTLtyping.mapped_included_consistent
+R29355 RTLtyping.mapped_included_consistent
+R29446 RTLtyping.wt_Icall
+R29446 RTLtyping.wt_Icall
+R29446 RTLtyping.wt_Icall
+R29471 RTLtyping.mapped_included_consistent
+R29471 RTLtyping.mapped_included_consistent
+R29535 RTLtyping.mapped_list_included
+R29535 RTLtyping.mapped_list_included
+R29591 RTLtyping.mapped_included_consistent
+R29591 RTLtyping.mapped_included_consistent
+R29667 RTLtyping.mapped_list_included
+R29667 RTLtyping.mapped_list_included
+R29723 RTLtyping.mapped_included_consistent
+R29723 RTLtyping.mapped_included_consistent
+R29783 RTLtyping.wt_Icond
+R29783 RTLtyping.wt_Icond
+R29802 RTLtyping.mapped_list_included
+R29802 RTLtyping.mapped_list_included
+R29854 RTLtyping.wt_Ireturn
+R29854 RTLtyping.wt_Ireturn
+R29910 AST.sig_res
+R29901 RTL.fn_sig
+R29910 AST.sig_res
+R29901 RTL.fn_sig
+R29910 AST.sig_res
+R29901 RTL.fn_sig
+R29980 RTLtyping.mapped_included_consistent
+R29980 RTLtyping.mapped_included_consistent
+R30186 RTLtyping.wt_instr
+R30174 Coq.Init.Logic "x = y" type_scope
+R30170 Maps "a ! b"
+R30162 RTL.fn_code
+R30176 Coq.Init.Datatypes.Some
+R30130 Coq.Init.Logic "x = y" type_scope
+R30110 RTLtyping.type_rtl_function
+R30132 Coq.Init.Datatypes.Some
+R30099 RTLtyping.regenv
+R30083 RTL.function
+R30235 RTLtyping.step1
+R30235 RTLtyping.step1
+R30337 RTLtyping.step2
+R30350 RTLtyping.included_consistent
+R30337 RTLtyping.step2
+R30350 RTLtyping.included_consistent
+R30433 RTLtyping.step3
+R30433 RTLtyping.step3
+R30480 RTLtyping.step4
+R30480 RTLtyping.step4
+R30516 RTLtyping.step4
+R30516 RTLtyping.step4
+R30553 RTLtyping.included_consistent
+R30553 RTLtyping.included_consistent
+R30599 RTLtyping.definite_included
+R30599 RTLtyping.definite_included
+R30789 RTLtyping.wt_function
+R30775 Coq.Init.Logic "x = y" type_scope
+R30755 RTLtyping.type_rtl_function
+R30777 Coq.Init.Datatypes.Some
+R30744 RTLtyping.regenv
+R30728 RTL.function
+R30840 RTLtyping.mk_wt_function
+R30993 RTLtyping.type_rtl_function_instrs
+R30927 RTLtyping.type_rtl_function_norepet
+R30862 RTLtyping.type_rtl_function_params
+R30840 RTLtyping.mk_wt_function
+R30993 RTLtyping.type_rtl_function_instrs
+R30927 RTLtyping.type_rtl_function_norepet
+R30862 RTLtyping.type_rtl_function_params
+R31142 Coq.Init.Logic "x <> y" type_scope
+R31122 RTLtyping.type_rtl_function
+R31145 Coq.Init.Datatypes.None
+R31094 Coq.Lists.List.In
+R31105 AST.prog_funct
+R31097 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R31061 RTL.program
+R31408 Values.has_type
+R31424 Registers "a # b"
+R31378 RTL.regset
+R31365 RTLtyping.regenv
+R31535 RTLtyping.wt_regset
+R31552 Registers "a # b <- c"
+R31507 Values.has_type
+R31485 RTLtyping.wt_regset
+R31603 Registers.gsspec
+R31603 Registers.gsspec
+R31626 Coqlib.peq
+R31626 Coqlib.peq
+R31759 Values.has_type_list
+R31787 Coq.Lists.List.map
+R31780 Registers "a ## b"
+R31726 RTLtyping.wt_regset
+R31971 RTLtyping.wt_regset
+R31986 RTL.init_regs
+R31925 Values.has_type_list
+R31949 Coq.Lists.List.map
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R32085 Registers.gi
+R32085 Registers.gi
+R32118 RTLtyping.wt_regset_assign
+R32118 RTLtyping.wt_regset_assign
+FKildall
+R96 Coq.Init.Datatypes.nat
+R303 Coq.Init.Datatypes.option
+R311 Maps.t
+R318 Kildall.t
+R274 Coq.Lists.List.list
+R289 Coq.Init.Datatypes "x * y" type_scope
+R280 Coq.NArith.BinPos.positive
+R291 Kildall.t
+R262 Kildall.t
+R255 Kildall.t
+R243 Coq.NArith.BinPos.positive
+R226 Coq.NArith.BinPos.positive
+R204 Coq.Lists.List.list
+R209 Coq.NArith.BinPos.positive
+R192 Coq.NArith.BinPos.positive
+R528 Kildall.ge
+R553 Maps "a !! b"
+R536 Maps "a !! b"
+R501 Coq.Lists.List.In
+R484 Coqlib.Plt
+R466 Coq.Init.Logic "x = y" type_scope
+R419 Kildall.fixpoint
+R468 Coq.Init.Datatypes.Some
+R745 Kildall.ge
+R753 Maps "a !! b"
+R716 Coq.Lists.List.In
+R719 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R698 Coq.Init.Logic "x = y" type_scope
+R651 Kildall.fixpoint
+R700 Coq.Init.Datatypes.Some
+R960 Coq.Lists.List.list
+R965 Coq.NArith.BinPos.positive
+R948 Coq.NArith.BinPos.positive
+R993 Coq.NArith.BinPos.positive
+R1039 Kildall.t
+R1032 Kildall.t
+R1020 Coq.NArith.BinPos.positive
+R1066 Coq.Lists.List.list
+R1081 Coq.Init.Datatypes "x * y" type_scope
+R1072 Coq.NArith.BinPos.positive
+R1083 Kildall.t
+R1131 Maps.t
+R1138 Kildall.t
+R1151 Coq.Lists.List.list
+R1156 Coq.NArith.BinPos.positive
+R1223 Maps.t
+R1230 Kildall.t
+R1198 Coq.Lists.List.list
+R1213 Coq.Init.Datatypes "x * y" type_scope
+R1204 Coq.NArith.BinPos.positive
+R1215 Kildall.t
+R1257 Coq.Lists.List.nil
+R1270 Maps.init
+R1280 Kildall.bot
+R1297 Coq.Lists.List "x :: y" list_scope
+R1290 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R1344 Maps.set
+R1356 Kildall.lub
+R1363 Maps "a !! b"
+R1198 Coq.Lists.List.list
+R1213 Coq.Init.Datatypes "x * y" type_scope
+R1204 Coq.NArith.BinPos.positive
+R1215 Kildall.t
+R1412 Coqlib.positive_rec
+R1447 Coq.Lists.List.cons
+R1452 Coq.NArith.BinPos.positive
+R1441 Coq.Lists.List.nil
+R1426 Coq.Lists.List.list
+R1431 Coq.NArith.BinPos.positive
+R1500 Kildall.mkstate
+R1537 Kildall.start_state_wrk
+R1509 Kildall.start_state_in
+R1625 Coq.Lists.List.In_dec
+R1637 Coqlib.peq
+R1663 Coq.Lists.List "x :: y" list_scope
+R1602 Coq.Lists.List.list
+R1607 Coq.NArith.BinPos.positive
+R1586 Coq.NArith.BinPos.positive
+R1804 Kildall.eq
+R1835 Kildall.mkstate
+R1872 Kildall.add_to_worklist
+R1893 Kildall.st_wrk
+R1844 Maps.set
+R1863 Kildall.st_in
+R1781 Kildall.lub
+R1760 Maps "a !! b"
+R1754 Kildall.st_in
+R1724 Coq.NArith.BinPos.positive
+R1715 Kildall.t
+R1702 Kildall.state
+R2024 Kildall.state
+R1963 Coq.Lists.List.list
+R1968 Coq.NArith.BinPos.positive
+R1950 Kildall.t
+R1937 Kildall.state
+R2056 Coq.Lists.List.nil
+R2071 Coq.Lists.List "x :: y" list_scope
+R2102 Kildall.propagate_succ
+R1963 Coq.Lists.List.list
+R1968 Coq.NArith.BinPos.positive
+R1950 Kildall.t
+R1937 Kildall.state
+R2240 Coq.Init.Datatypes.option
+R2248 Maps.t
+R2255 Kildall.t
+R2221 Kildall.state
+R2212 Coq.Init.Datatypes.nat
+R2282 Coq.Init.Datatypes.O
+R2287 Coq.Init.Datatypes.None
+R2296 Coq.Init.Datatypes.S
+R2318 Kildall.st_wrk
+R2339 Coq.Lists.List.nil
+R2356 Coq.Init.Datatypes.Some
+R2364 Kildall.st_in
+R2381 Coq.Lists.List "x :: y" list_scope
+R2424 Kildall.propagate_succ_list
+R2515 Maps "a !! b"
+R2509 Kildall.st_in
+R2459 Kildall.mkstate
+R2470 Kildall.st_in
+R2221 Kildall.state
+R2212 Coq.Init.Datatypes.nat
+R2591 Kildall.iterate
+R2614 Kildall.start_state
+R2599 Kildall.num_iterations
+R2711 Kildall.ge
+R2726 Maps "a !! b"
+R2719 Maps "a !! b"
+R2677 Maps.t
+R2684 Kildall.t
+R2677 Maps.t
+R2684 Kildall.t
+R2766 Kildall.in_incr
+R2822 Kildall.ge_refl
+R2822 Kildall.ge_refl
+R2920 Kildall.in_incr
+R2901 Kildall.in_incr
+R2882 Kildall.in_incr
+R2995 Maps "a !! b"
+R2976 Kildall.ge_trans
+R2995 Maps "a !! b"
+R2976 Kildall.ge_trans
+R3060 Kildall.in_incr
+R3106 Kildall.st_in
+R3080 Kildall.propagate_succ
+R3072 Kildall.st_in
+R3178 Kildall.eq
+R3198 Kildall.lub
+R3214 Maps "a !! b"
+R3208 Kildall.st_in
+R3193 Maps "a !! b"
+R3187 Kildall.st_in
+R3178 Kildall.eq
+R3198 Kildall.lub
+R3214 Maps "a !! b"
+R3208 Kildall.st_in
+R3193 Maps "a !! b"
+R3187 Kildall.st_in
+R3240 Kildall.ge_refl
+R3240 Kildall.ge_refl
+R3266 Coqlib.peq
+R3266 Coqlib.peq
+R3304 Maps.gss
+R3304 Maps.gss
+R3320 Kildall.ge_lub_left
+R3320 Kildall.ge_lub_left
+R3345 Maps.gso
+R3345 Maps.gso
+R3367 Kildall.ge_refl
+R3367 Kildall.ge_refl
+R3441 Kildall.in_incr
+R3496 Kildall.st_in
+R3461 Kildall.propagate_succ_list
+R3453 Kildall.st_in
+R3553 Kildall.in_incr_refl
+R3553 Kildall.in_incr_refl
+R3621 Kildall.st_in
+R3595 Kildall.propagate_succ
+R3575 Kildall.in_incr_trans
+R3621 Kildall.st_in
+R3595 Kildall.propagate_succ
+R3575 Kildall.in_incr_trans
+R3638 Kildall.propagate_succ_incr
+R3638 Kildall.propagate_succ_incr
+R3742 Kildall.in_incr
+R3754 Kildall.st_in
+R3726 Coq.Init.Logic "x = y" type_scope
+R3713 Kildall.iterate
+R3728 Coq.Init.Datatypes.Some
+R3849 Kildall.st_wrk
+R3849 Kildall.st_wrk
+R3917 Kildall.ge_refl
+R3917 Kildall.ge_refl
+R4103 Kildall.st_in
+R3968 Kildall.propagate_succ_list
+R4055 Maps "a !! b"
+R4047 Kildall.st_in
+R3989 Kildall.mkstate
+R3998 Kildall.st_in
+R3944 Kildall.in_incr_trans
+R4103 Kildall.st_in
+R3968 Kildall.propagate_succ_list
+R4055 Maps "a !! b"
+R4047 Kildall.st_in
+R3989 Kildall.mkstate
+R3998 Kildall.st_in
+R3944 Kildall.in_incr_trans
+R4137 Kildall.st_in
+R4144 Kildall.mkstate
+R4153 Kildall.st_in
+R4121 Kildall.st_in
+R4137 Kildall.st_in
+R4144 Kildall.mkstate
+R4153 Kildall.st_in
+R4121 Kildall.st_in
+R4176 Kildall.propagate_succ_list_incr
+R4176 Kildall.propagate_succ_list_incr
+R4287 Kildall.in_incr
+R4296 Kildall.start_state_in
+R4273 Coq.Init.Logic "x = y" type_scope
+R4264 Kildall.fixpoint
+R4275 Coq.Init.Datatypes.Some
+R4419 Kildall.st_in
+R4406 Kildall.start_state
+R4373 Kildall.start_state_in
+R4419 Kildall.st_in
+R4406 Kildall.start_state
+R4373 Kildall.start_state_in
+R4453 Kildall.num_iterations
+R4435 Kildall.iterate_incr
+R4453 Kildall.num_iterations
+R4435 Kildall.iterate_incr
+R4604 Coq.Init.Logic "A \/ B" type_scope
+R4587 Coq.Lists.List.In
+R4596 Kildall.st_wrk
+R4660 Kildall.ge
+R4699 Maps "a !! b"
+R4693 Kildall.st_in
+R4675 Maps "a !! b"
+R4669 Kildall.st_in
+R4620 Coq.Lists.List.In
+R4568 Coqlib.Plt
+R4537 Kildall.state
+R4733 Kildall.good_state
+R4744 Kildall.start_state
+R4884 Coqlib.positive_Peano_ind
+R4884 Coqlib.positive_Peano_ind
+R4972 Coqlib.positive_rec_succ
+R4972 Coqlib.positive_rec_succ
+R5000 Coqlib.Plt_succ_inv
+R5000 Coqlib.Plt_succ_inv
+R5125 Coq.Lists.List.In
+R5131 Kildall.add_to_worklist
+R5204 Coq.Lists.List.In_dec
+R5211 Coqlib.peq
+R5204 Coq.Lists.List.In_dec
+R5211 Coqlib.peq
+R5304 Coq.Lists.List.In
+R5311 Kildall.add_to_worklist
+R5291 Coq.Lists.List.In
+R5384 Coq.Lists.List.In_dec
+R5391 Coqlib.peq
+R5384 Coq.Lists.List.In_dec
+R5391 Coqlib.peq
+R5542 Coq.Init.Logic "A /\ B" type_scope
+R5518 Kildall.ge
+R5534 Maps "a !! b"
+R5528 Kildall.st_in
+R5583 Coq.Init.Logic "x = y" type_scope
+R5579 Maps "a !! b"
+R5573 Kildall.st_in
+R5595 Maps "a !! b"
+R5589 Kildall.st_in
+R5560 Coq.Init.Logic "x <> y" type_scope
+R5489 Kildall.propagate_succ
+R5656 Kildall.eq
+R5678 Kildall.lub
+R5693 Maps "a !! b"
+R5685 Kildall.st_in
+R5670 Maps "a !! b"
+R5662 Kildall.st_in
+R5656 Kildall.eq
+R5678 Kildall.lub
+R5693 Maps "a !! b"
+R5685 Kildall.st_in
+R5670 Maps "a !! b"
+R5662 Kildall.st_in
+R5742 Kildall.lub_commut
+R5742 Kildall.lub_commut
+R5762 Kildall.ge_lub_left
+R5762 Kildall.ge_lub_left
+R5811 Maps.gss
+R5811 Maps.gss
+R5829 Kildall.lub_commut
+R5829 Kildall.lub_commut
+R5849 Kildall.ge_lub_left
+R5849 Kildall.ge_lub_left
+R5882 Maps.gso
+R5882 Maps.gso
+R6063 Coq.Init.Logic "A /\ B" type_scope
+R6040 Kildall.ge
+R6056 Maps "a !! b"
+R6050 Kildall.st_in
+R6026 Coq.Lists.List.In
+R6103 Coq.Init.Logic "x = y" type_scope
+R6099 Maps "a !! b"
+R6093 Kildall.st_in
+R6115 Maps "a !! b"
+R6109 Kildall.st_in
+R6071 Coq.Init.Logic "~ x" type_scope
+R6073 Coq.Lists.List.In
+R5975 Kildall.propagate_succ_list
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R6194 Kildall.propagate_succ
+R6194 Kildall.propagate_succ
+R6251 Kildall.propagate_succ_charact
+R6251 Kildall.propagate_succ_charact
+R6401 Maps "a !! b"
+R6395 Kildall.st_in
+R6369 Kildall.propagate_succ
+R6352 Kildall.ge_trans
+R6401 Maps "a !! b"
+R6395 Kildall.st_in
+R6369 Kildall.propagate_succ
+R6352 Kildall.ge_trans
+R6414 Kildall.propagate_succ_list_incr
+R6414 Kildall.propagate_succ_list_incr
+R6517 Maps "a !! b"
+R6511 Kildall.st_in
+R6485 Kildall.propagate_succ
+R6517 Maps "a !! b"
+R6511 Kildall.st_in
+R6485 Kildall.propagate_succ
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R6621 Coq.Lists.List.incl
+R6665 Kildall.st_wrk
+R6639 Kildall.propagate_succ
+R6630 Kildall.st_wrk
+R6723 Kildall.eq
+R6745 Kildall.lub
+R6760 Maps "a !! b"
+R6752 Kildall.st_in
+R6737 Maps "a !! b"
+R6729 Kildall.st_in
+R6723 Kildall.eq
+R6745 Kildall.lub
+R6760 Maps "a !! b"
+R6752 Kildall.st_in
+R6737 Maps "a !! b"
+R6729 Kildall.st_in
+R6789 Coq.Lists.List.incl_refl
+R6789 Coq.Lists.List.incl_refl
+R6828 Kildall.add_to_worklist_2
+R6828 Kildall.add_to_worklist_2
+R6925 Coq.Lists.List.incl
+R6978 Kildall.st_wrk
+R6943 Kildall.propagate_succ_list
+R6934 Kildall.st_wrk
+R7036 Coq.Lists.List.incl_refl
+R7036 Coq.Lists.List.incl_refl
+R7097 Kildall.st_wrk
+R7071 Kildall.propagate_succ
+R7055 Coq.Lists.List.incl_tran
+R7097 Kildall.st_wrk
+R7071 Kildall.propagate_succ
+R7055 Coq.Lists.List.incl_tran
+R7114 Kildall.propagate_succ_incr_worklist
+R7114 Kildall.propagate_succ_incr_worklist
+R7277 Coq.Init.Logic "A \/ B" type_scope
+R7259 Coq.Lists.List.In
+R7269 Kildall.st_wrk
+R7295 Coq.Init.Logic "x = y" type_scope
+R7291 Maps "a !! b"
+R7285 Kildall.st_in
+R7307 Maps "a !! b"
+R7301 Kildall.st_in
+R7230 Kildall.propagate_succ
+R7368 Kildall.eq
+R7390 Kildall.lub
+R7405 Maps "a !! b"
+R7397 Kildall.st_in
+R7382 Maps "a !! b"
+R7374 Kildall.st_in
+R7368 Kildall.eq
+R7390 Kildall.lub
+R7405 Maps "a !! b"
+R7397 Kildall.st_in
+R7382 Maps "a !! b"
+R7374 Kildall.st_in
+R7449 Coqlib.peq
+R7449 Coqlib.peq
+R7496 Kildall.add_to_worklist_1
+R7496 Kildall.add_to_worklist_1
+R7537 Maps.gso
+R7537 Maps.gso
+R7696 Coq.Init.Logic "A \/ B" type_scope
+R7678 Coq.Lists.List.In
+R7688 Kildall.st_wrk
+R7714 Coq.Init.Logic "x = y" type_scope
+R7710 Maps "a !! b"
+R7704 Kildall.st_in
+R7726 Maps "a !! b"
+R7720 Kildall.st_in
+R7640 Kildall.propagate_succ_list
+R7795 Kildall.propagate_succ_records_changes
+R7795 Kildall.propagate_succ_records_changes
+R7860 Kildall.propagate_succ_list_incr_worklist
+R7860 Kildall.propagate_succ_list_incr_worklist
+R8020 Kildall.good_state
+R8032 Kildall.propagate_succ_list
+R8131 Maps "a !! b"
+R8125 Kildall.st_in
+R8053 Kildall.mkstate
+R8065 Kildall.st_in
+R8001 Kildall.good_state
+R7985 Coq.Init.Logic "x = y" type_scope
+R7977 Kildall.st_wrk
+R7989 Coq.Lists.List "x :: y" list_scope
+R8280 Maps "a !! b"
+R8274 Kildall.st_in
+R8280 Maps "a !! b"
+R8274 Kildall.st_in
+R8317 Kildall.propagate_succ_list_records_changes
+R8384 Kildall.mkstate
+R8396 Kildall.st_in
+R8317 Kildall.propagate_succ_list_records_changes
+R8384 Kildall.mkstate
+R8396 Kildall.st_in
+R8494 Coqlib.peq
+R8494 Coqlib.peq
+R8557 Kildall.propagate_succ_list_charact
+R8615 Kildall.mkstate
+R8627 Kildall.st_in
+R8557 Kildall.propagate_succ_list_charact
+R8615 Kildall.mkstate
+R8627 Kildall.st_in
+R8778 Kildall.propagate_succ_list_incr_worklist
+R8778 Kildall.propagate_succ_list_incr_worklist
+R8923 Coq.Lists.List.In_dec
+R8930 Coqlib.peq
+R8923 Coq.Lists.List.In_dec
+R8930 Coqlib.peq
+R9059 Maps "a !! b"
+R9053 Kildall.st_in
+R9033 Kildall.ge_trans
+R9059 Maps "a !! b"
+R9053 Kildall.st_in
+R9033 Kildall.ge_trans
+R9124 Maps "a !! b"
+R9118 Kildall.st_in
+R9093 Kildall.mkstate
+R9105 Kildall.st_in
+R9083 Maps "a !! b"
+R9077 Kildall.st_in
+R9124 Maps "a !! b"
+R9118 Kildall.st_in
+R9093 Kildall.mkstate
+R9105 Kildall.st_in
+R9083 Maps "a !! b"
+R9077 Kildall.st_in
+R9137 Kildall.propagate_succ_list_incr
+R9137 Kildall.propagate_succ_list_incr
+R9245 Kildall.propagate_succ_list_charact
+R9303 Kildall.mkstate
+R9315 Kildall.st_in
+R9245 Kildall.propagate_succ_list_charact
+R9303 Kildall.mkstate
+R9315 Kildall.st_in
+R9525 Kildall.ge
+R9550 Maps "a !! b"
+R9533 Maps "a !! b"
+R9500 Coq.Lists.List.In
+R9483 Coqlib.Plt
+R9467 Coq.Init.Logic "x = y" type_scope
+R9450 Kildall.iterate
+R9469 Coq.Init.Datatypes.Some
+R9431 Kildall.good_state
+R9651 Kildall.st_wrk
+R9651 Kildall.st_wrk
+R9801 Kildall.propagate_succ_list
+R9872 Maps "a !! b"
+R9866 Kildall.st_in
+R9822 Kildall.mkstate
+R9834 Kildall.st_in
+R9801 Kildall.propagate_succ_list
+R9872 Maps "a !! b"
+R9866 Kildall.st_in
+R9822 Kildall.mkstate
+R9834 Kildall.st_in
+R9903 Kildall.step_state_good
+R9903 Kildall.step_state_good
+R10066 Kildall.ge
+R10091 Maps "a !! b"
+R10074 Maps "a !! b"
+R10041 Coq.Lists.List.In
+R10024 Coqlib.Plt
+R10008 Coq.Init.Logic "x = y" type_scope
+R9999 Kildall.fixpoint
+R10010 Coq.Init.Datatypes.Some
+R10161 Kildall.num_iterations
+R10176 Kildall.start_state
+R10139 Kildall.iterate_solution
+R10161 Kildall.num_iterations
+R10176 Kildall.start_state
+R10139 Kildall.iterate_solution
+R10197 Kildall.start_state_good
+R10197 Kildall.start_state_good
+R10306 Kildall.ge
+R10329 Maps "a !! b"
+R10312 Kildall.start_state_in
+R10288 Coq.Lists.List.In
+R10291 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R10422 Maps.gss
+R10422 Maps.gss
+R10440 Kildall.lub_commut
+R10440 Kildall.lub_commut
+R10460 Kildall.ge_lub_left
+R10460 Kildall.ge_lub_left
+R10497 Maps.gsspec
+R10497 Maps.gsspec
+R10516 Coqlib.peq
+R10516 Coqlib.peq
+R10584 Maps "a !! b"
+R10567 Kildall.start_state_in
+R10550 Kildall.ge_trans
+R10584 Maps "a !! b"
+R10567 Kildall.start_state_in
+R10550 Kildall.ge_trans
+R10598 Kildall.ge_lub_left
+R10598 Kildall.ge_lub_left
+R10729 Kildall.ge
+R10737 Maps "a !! b"
+R10702 Coq.Lists.List.In
+R10705 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R10686 Coq.Init.Logic "x = y" type_scope
+R10677 Kildall.fixpoint
+R10688 Coq.Init.Datatypes.Some
+R10812 Maps "a !! b"
+R10786 Kildall.start_state_in
+R10769 Kildall.ge_trans
+R10812 Maps "a !! b"
+R10786 Kildall.start_state_in
+R10769 Kildall.ge_trans
+R10826 Kildall.fixpoint_incr
+R10826 Kildall.fixpoint_incr
+R10855 Kildall.start_state_in_entry
+R10855 Kildall.start_state_in_entry
+R11028 Coq.Lists.List.list
+R11033 Coq.NArith.BinPos.positive
+R11016 Coq.NArith.BinPos.positive
+R11061 Coq.NArith.BinPos.positive
+R11234 Maps.t
+R11242 Coq.Lists.List.list
+R11247 Coq.NArith.BinPos.positive
+R11177 Coq.Lists.List.list
+R11182 Coq.NArith.BinPos.positive
+R11158 Coq.NArith.BinPos.positive
+R11103 Maps.t
+R11111 Coq.Lists.List.list
+R11116 Coq.NArith.BinPos.positive
+R11284 Coq.Lists.List.nil
+R11303 Coq.Lists.List "x :: y" list_scope
+R11335 Maps.set
+R11353 Coq.Lists.List "x :: y" list_scope
+R11360 Maps "a !! b"
+R11177 Coq.Lists.List.list
+R11182 Coq.NArith.BinPos.positive
+R11158 Coq.NArith.BinPos.positive
+R11103 Maps.t
+R11111 Coq.Lists.List.list
+R11116 Coq.NArith.BinPos.positive
+R11500 Coq.Lists.List.In
+R11537 Maps "a !! b"
+R11506 Kildall.add_successors
+R11465 Coq.Init.Logic "A \/ B" type_scope
+R11452 Coq.Lists.List.In
+R11461 Maps "a !! b"
+R11478 Coq.Init.Logic "A /\ B" type_scope
+R11471 Coq.Init.Logic "x = y" type_scope
+R11481 Coq.Lists.List.In
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R11622 Maps.gsspec
+R11622 Maps.gsspec
+R11641 Coqlib.peq
+R11641 Coqlib.peq
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R11825 Maps.t
+R11833 Coq.Lists.List.list
+R11838 Coq.NArith.BinPos.positive
+R11853 Coqlib.positive_rec
+R11926 Kildall.add_successors
+R11892 Maps.init
+R11902 Coq.Lists.List.nil
+R11867 Maps.t
+R11875 Coq.Lists.List.list
+R11880 Coq.NArith.BinPos.positive
+R12071 Coq.Lists.List.In
+R12093 Maps "a !! b"
+R12076 Kildall.make_predecessors
+R12046 Coq.Lists.List.In
+R12027 Coqlib.Plt
+R12159 Coqlib.positive_Peano_ind
+R12159 Coqlib.positive_Peano_ind
+R12239 Coqlib.positive_rec_succ
+R12239 Coqlib.positive_rec_succ
+R12266 Kildall.add_successors_correct
+R12266 Kildall.add_successors_correct
+R12298 Coqlib.Plt_succ_inv
+R12298 Coqlib.Plt_succ_inv
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R12637 Coq.Init.Datatypes.option
+R12645 Maps.t
+R12652 Kildall.t
+R12608 Coq.Lists.List.list
+R12623 Coq.Init.Datatypes "x * y" type_scope
+R12614 Coq.NArith.BinPos.positive
+R12625 Kildall.t
+R12596 Kildall.t
+R12589 Kildall.t
+R12577 Coq.NArith.BinPos.positive
+R12560 Coq.NArith.BinPos.positive
+R12538 Coq.Lists.List.list
+R12543 Coq.NArith.BinPos.positive
+R12526 Coq.NArith.BinPos.positive
+R12879 Kildall.ge
+R12904 Maps "a !! b"
+R12887 Maps "a !! b"
+R12852 Coq.Lists.List.In
+R12835 Coqlib.Plt
+R12818 Coqlib.Plt
+R12800 Coq.Init.Logic "x = y" type_scope
+R12753 Kildall.fixpoint
+R12802 Coq.Init.Datatypes.Some
+R13096 Kildall.ge
+R13104 Maps "a !! b"
+R13067 Coq.Lists.List.In
+R13070 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R13049 Coq.Init.Logic "x = y" type_scope
+R13002 Kildall.fixpoint
+R13051 Coq.Init.Datatypes.Some
+R13364 Coq.Lists.List.list
+R13369 Coq.NArith.BinPos.positive
+R13352 Coq.NArith.BinPos.positive
+R13397 Coq.NArith.BinPos.positive
+R13443 Kildall.t
+R13436 Kildall.t
+R13424 Coq.NArith.BinPos.positive
+R13470 Coq.Lists.List.list
+R13485 Coq.Init.Datatypes "x * y" type_scope
+R13476 Coq.NArith.BinPos.positive
+R13487 Kildall.t
+R13573 Kildall.fixpoint
+R13599 Maps "a !! b"
+R13531 Kildall.make_predecessors
+R13766 Kildall.ge
+R13791 Maps "a !! b"
+R13774 Maps "a !! b"
+R13741 Coq.Lists.List.In
+R13722 Coqlib.Plt
+R13705 Coqlib.Plt
+R13689 Coq.Init.Logic "x = y" type_scope
+R13680 Kildall.fixpoint
+R13691 Coq.Init.Datatypes.Some
+R13897 Maps "a !! b"
+R13861 Kildall.make_predecessors
+R13820 Kildall.fixpoint_solution
+R13897 Maps "a !! b"
+R13861 Kildall.make_predecessors
+R13820 Kildall.fixpoint_solution
+R13957 Kildall.make_predecessors_correct
+R13957 Kildall.make_predecessors_correct
+R14092 Kildall.ge
+R14100 Maps "a !! b"
+R14065 Coq.Lists.List.In
+R14068 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R14049 Coq.Init.Logic "x = y" type_scope
+R14040 Kildall.fixpoint
+R14051 Coq.Init.Datatypes.Some
+R14204 Maps "a !! b"
+R14168 Kildall.make_predecessors
+R14130 Kildall.fixpoint_entry
+R14204 Maps "a !! b"
+R14168 Kildall.make_predecessors
+R14130 Kildall.fixpoint_entry
+R14422 Kildall.t
+R14417 Kildall.t
+R14449 Kildall.t
+R14483 Kildall.ge
+R14486 Kildall.top
+R14525 Kildall.ge
+R14758 Coq.Init.Datatypes.option
+R14766 Maps.t
+R14773 Kildall.t
+R14742 Coq.NArith.BinPos.positive
+R14730 Kildall.t
+R14723 Kildall.t
+R14711 Coq.NArith.BinPos.positive
+R14694 Coq.NArith.BinPos.positive
+R14672 Coq.Lists.List.list
+R14677 Coq.NArith.BinPos.positive
+R14660 Coq.NArith.BinPos.positive
+R14981 Kildall.ge
+R15006 Maps "a !! b"
+R14989 Maps "a !! b"
+R14954 Coq.Lists.List.In
+R14937 Coqlib.Plt
+R14919 Coq.Init.Logic "x = y" type_scope
+R14873 Kildall.fixpoint
+R14921 Coq.Init.Datatypes.Some
+R15179 Coq.Init.Logic "x = y" type_scope
+R15166 Maps "a !! b"
+R15181 Kildall.top
+R15145 Coq.Init.Logic "x = y" type_scope
+R15099 Kildall.fixpoint
+R15147 Coq.Init.Datatypes.Some
+R15452 Maps "a !! b"
+R15429 Coq.Init.Logic "x = y" type_scope
+R15383 Kildall.fixpoint
+R15431 Coq.Init.Datatypes.Some
+R15306 Kildall.top
+R15286 Kildall.t
+R15658 Coq.Lists.List.list
+R15663 Coq.NArith.BinPos.positive
+R15646 Coq.NArith.BinPos.positive
+R15691 Coq.NArith.BinPos.positive
+R15737 Kildall.t
+R15730 Kildall.t
+R15718 Coq.NArith.BinPos.positive
+R15763 Coq.NArith.BinPos.positive
+R15785 Kildall.t
+R15817 Kildall.top
+R15914 Coq.Init.Datatypes.bool
+R15902 Coq.NArith.BinPos.positive
+R15941 Maps.t
+R15948 Kildall.t
+R15995 Kildall.result
+R16011 Coq.Lists.List.list
+R16016 Coq.NArith.BinPos.positive
+R16140 Kildall.state
+R16112 Kildall.state
+R16102 Kildall.t
+R16083 Coq.Lists.List.list
+R16088 Coq.NArith.BinPos.positive
+R16068 Kildall.bbmap
+R16172 Coq.Lists.List.nil
+R16189 Coq.Lists.List "x :: y" list_scope
+R16317 Kildall.mkstate
+R16375 Coq.Lists.List "x :: y" list_scope
+R16382 Kildall.st_wrk
+R16326 Maps.set
+R16344 Kildall.st_in
+R16112 Kildall.state
+R16102 Kildall.t
+R16083 Coq.Lists.List.list
+R16088 Coq.NArith.BinPos.positive
+R16068 Kildall.bbmap
+R16480 Coq.Init.Datatypes.option
+R16487 Kildall.result
+R16452 Kildall.state
+R16440 Kildall.bbmap
+R16430 Coq.Init.Datatypes.nat
+R16520 Coq.Init.Datatypes.O
+R16525 Coq.Init.Datatypes.None
+R16534 Coq.Init.Datatypes.S
+R16559 Kildall.st_wrk
+R16580 Coq.Lists.List.nil
+R16587 Coq.Init.Datatypes.Some
+R16596 Kildall.st_in
+R16614 Coq.Lists.List "x :: y" list_scope
+R16637 Coqlib.plt
+R16887 Kildall.mkstate
+R16899 Kildall.st_in
+R16699 Kildall.propagate_successors
+R16819 Kildall.mkstate
+R16831 Kildall.st_in
+R16795 Maps "a !! b"
+R16789 Kildall.st_in
+R16452 Kildall.state
+R16440 Kildall.bbmap
+R16430 Coq.Init.Datatypes.nat
+R17014 Coq.Init.Datatypes.bool
+R17035 Maps "a !! b"
+R17049 Coq.Lists.List.nil
+R17056 Coq.Init.Datatypes.true
+R17104 Coq.Lists.List "x :: y" list_scope
+R17107 Coq.Lists.List.nil
+R17124 Coqlib.peq
+R17157 Coqlib.peq
+R17190 Coq.Init.Datatypes.false
+R17180 Coq.Init.Datatypes.true
+R17138 Coq.Init.Datatypes.true
+R17202 Coq.Lists.List "x :: y" list_scope
+R17207 Coq.Lists.List "x :: y" list_scope
+R17215 Coq.Init.Datatypes.true
+R17002 Coq.NArith.BinPos.positive
+R16973 Maps.t
+R16981 Coq.Lists.List.list
+R16986 Coq.NArith.BinPos.positive
+R17257 Kildall.bbmap
+R17268 Kildall.is_basic_block_head
+R17289 Kildall.make_predecessors
+R17371 Coq.Lists.List.list
+R17376 Coq.NArith.BinPos.positive
+R17390 Coqlib.positive_rec
+R17457 Coq.Lists.List "x :: y" list_scope
+R17419 Coq.Lists.List.nil
+R17404 Coq.Lists.List.list
+R17409 Coq.NArith.BinPos.positive
+R17362 Kildall.bbmap
+R17503 Coq.Init.Datatypes.option
+R17510 Kildall.result
+R17553 Kildall.analyze
+R17580 Kildall.mkstate
+R17607 Kildall.basic_block_list
+R17589 Maps.init
+R17599 Kildall.top
+R17561 Kildall.num_iterations
+R17532 Kildall.basic_block_map
+R17683 Kildall.make_predecessors
+R17806 Coq.Lists.List.In
+R17823 Maps "a !! b"
+R17811 Kildall.predecessors
+R17783 Coq.Lists.List.In
+R17766 Coqlib.Plt
+R17873 Kildall.make_predecessors_correct
+R17873 Kildall.make_predecessors_correct
+R18082 Coq.Init.Logic "x = y" type_scope
+R18064 Kildall.basic_block_map
+R18084 Coq.Init.Datatypes.true
+R18053 Coq.Init.Logic "x <> y" type_scope
+R18024 Coq.Lists.List.In
+R18006 Coqlib.Plt
+R17980 Coq.Lists.List.In
+R17962 Coqlib.Plt
+R18118 Coq.Lists.List.In
+R18136 Maps "a !! b"
+R18124 Kildall.predecessors
+R18118 Coq.Lists.List.In
+R18136 Maps "a !! b"
+R18124 Kildall.predecessors
+R18148 Kildall.predecessors_correct
+R18148 Kildall.predecessors_correct
+R18186 Coq.Lists.List.In
+R18204 Maps "a !! b"
+R18192 Kildall.predecessors
+R18186 Coq.Lists.List.In
+R18204 Maps "a !! b"
+R18192 Kildall.predecessors
+R18216 Kildall.predecessors_correct
+R18216 Kildall.predecessors_correct
+R18298 Kildall.predecessors
+R18298 Kildall.predecessors
+R18336 Maps "a !! b"
+R18324 Kildall.predecessors
+R18336 Maps "a !! b"
+R18324 Kildall.predecessors
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R18522 Coq.Init.Logic "x = y" type_scope
+R18504 Kildall.basic_block_map
+R18524 Coq.Init.Datatypes.true
+R18481 Coq.Lists.List.In
+R18464 Coqlib.Plt
+R18599 Kildall.predecessors
+R18599 Kildall.predecessors
+R18628 Kildall.predecessors_correct
+R18628 Kildall.predecessors_correct
+R18691 Maps "a !! b"
+R18679 Kildall.predecessors
+R18691 Maps "a !! b"
+R18679 Kildall.predecessors
+R18741 Coqlib.peq_true
+R18741 Coqlib.peq_true
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R18897 Coq.Init.Logic "A /\ B" type_scope
+R18890 Coq.Init.Logic "x = y" type_scope
+R18886 Maps "a !! b"
+R18880 Kildall.st_in
+R18892 Kildall.top
+R18866 Coq.Init.Logic "x = y" type_scope
+R18848 Kildall.basic_block_map
+R18868 Coq.Init.Datatypes.true
+R18952 Coq.Init.Logic "A \/ B" type_scope
+R18935 Coq.Lists.List.In
+R18944 Kildall.st_wrk
+R19008 Kildall.ge
+R19047 Maps "a !! b"
+R19041 Kildall.st_in
+R19023 Maps "a !! b"
+R19017 Kildall.st_in
+R18969 Coq.Lists.List.In
+R18915 Coqlib.Plt
+R18818 Kildall.state
+R19119 Coq.Lists.List.incl
+R19181 Kildall.st_wrk
+R19144 Kildall.propagate_successors
+R19128 Kildall.st_wrk
+R19239 Coq.Lists.List.incl_refl
+R19239 Coq.Lists.List.incl_refl
+R19299 Coq.Lists.List "x :: y" list_scope
+R19302 Kildall.st_wrk
+R19281 Coq.Lists.List.incl_tran
+R19299 Coq.Lists.List "x :: y" list_scope
+R19302 Kildall.st_wrk
+R19281 Coq.Lists.List.incl_tran
+R19322 Coq.Lists.List.incl_tl
+R19322 Coq.Lists.List.incl_tl
+R19337 Coq.Lists.List.incl_refl
+R19337 Coq.Lists.List.incl_refl
+R19363 Kildall.mkstate
+R19400 Coq.Lists.List "x :: y" list_scope
+R19403 Kildall.st_wrk
+R19372 Maps.set
+R19386 Kildall.st_in
+R19363 Kildall.mkstate
+R19400 Coq.Lists.List "x :: y" list_scope
+R19403 Kildall.st_wrk
+R19372 Maps.set
+R19386 Kildall.st_in
+R19449 Kildall.st_wrk
+R19429 Coq.Lists.List "x :: y" list_scope
+R19432 Kildall.st_wrk
+R19449 Kildall.st_wrk
+R19429 Coq.Lists.List "x :: y" list_scope
+R19432 Kildall.st_wrk
+R19662 Coq.Init.Logic "A /\ B" type_scope
+R19641 Coq.Init.Logic "A /\ B" type_scope
+R19623 Coq.Lists.List.In
+R19633 Kildall.st_wrk
+R19659 Coq.Init.Logic "x = y" type_scope
+R19655 Maps "a !! b"
+R19649 Kildall.st_in
+R19612 Coq.Init.Logic "x = y" type_scope
+R19614 Coq.Init.Datatypes.false
+R19593 Coq.Lists.List.In
+R19713 Coq.Init.Logic "x = y" type_scope
+R19709 Maps "a !! b"
+R19703 Kildall.st_in
+R19725 Maps "a !! b"
+R19719 Kildall.st_in
+R19680 Coq.Init.Logic "A \/ B" type_scope
+R19668 Coq.Init.Logic "~ x" type_scope
+R19669 Coq.Lists.List.In
+R19688 Coq.Init.Logic "x = y" type_scope
+R19690 Coq.Init.Datatypes.true
+R19552 Kildall.propagate_successors
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R20007 Kildall.mkstate
+R20044 Coq.Lists.List "x :: y" list_scope
+R20047 Kildall.st_wrk
+R20016 Maps.set
+R20030 Kildall.st_in
+R20007 Kildall.mkstate
+R20044 Coq.Lists.List "x :: y" list_scope
+R20047 Kildall.st_wrk
+R20016 Maps.set
+R20030 Kildall.st_in
+R20160 Kildall.propagate_successors_charact1
+R20160 Kildall.propagate_successors_charact1
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R20213 Coq.Lists.List.In_dec
+R20220 Coqlib.peq
+R20213 Coq.Lists.List.In_dec
+R20220 Coqlib.peq
+R20302 Maps.gss
+R20302 Maps.gss
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R20374 Maps.gso
+R20374 Maps.gso
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R20587 Kildall.state_invariant
+R20609 Kildall.propagate_successors
+R20735 Kildall.mkstate
+R20702 Maps "a !! b"
+R20630 Kildall.basic_block_map
+R20540 Kildall.state_invariant
+R20557 Kildall.mkstate
+R20573 Coq.Lists.List "x :: y" list_scope
+R20520 Coqlib.Plt
+R20859 Maps "a !! b"
+R20859 Maps "a !! b"
+R20880 Kildall.propagate_successors_charact1
+R20961 Kildall.mkstate
+R20910 Kildall.basic_block_map
+R20880 Kildall.propagate_successors_charact1
+R20961 Kildall.mkstate
+R20910 Kildall.basic_block_map
+R20994 Kildall.propagate_successors_charact2
+R21075 Kildall.mkstate
+R21024 Kildall.basic_block_map
+R20994 Kildall.propagate_successors_charact2
+R21075 Kildall.mkstate
+R21024 Kildall.basic_block_map
+R21108 Kildall.propagate_successors
+R21181 Kildall.mkstate
+R21129 Kildall.basic_block_map
+R21108 Kildall.propagate_successors
+R21181 Kildall.mkstate
+R21129 Kildall.basic_block_map
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R21411 Coqlib.peq
+R21411 Coqlib.peq
+R21505 Maps "a !! b"
+R21499 Kildall.st_in
+R21519 Maps "a !! b"
+R21505 Maps "a !! b"
+R21499 Kildall.st_in
+R21519 Maps "a !! b"
+R21544 Kildall.basic_block_map
+R21544 Kildall.basic_block_map
+R21611 Kildall.top_ge
+R21611 Kildall.top_ge
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R21679 Kildall.refl_ge
+R21679 Kildall.refl_ge
+R21751 Coq.Lists.List.In_dec
+R21758 Coqlib.peq
+R21751 Coq.Lists.List.In_dec
+R21758 Coqlib.peq
+R21805 Kildall.no_self_loop
+R21805 Kildall.no_self_loop
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R22093 Coq.Init.Logic "x = y" type_scope
+R22089 Maps "a !! b"
+R22083 Kildall.st_in
+R22098 Maps "a !! b"
+R22055 Coq.Lists.List.In
+R22093 Coq.Init.Logic "x = y" type_scope
+R22089 Maps "a !! b"
+R22083 Kildall.st_in
+R22098 Maps "a !! b"
+R22055 Coq.Lists.List.In
+R22425 Coq.Lists.List.In_dec
+R22432 Coqlib.peq
+R22425 Coq.Lists.List.In_dec
+R22432 Coqlib.peq
+R22480 Kildall.multiple_predecessors
+R22480 Kildall.multiple_predecessors
+R22543 Coq.Lists.List.In_dec
+R22550 Coqlib.peq
+R22543 Coq.Lists.List.In_dec
+R22550 Coqlib.peq
+R22690 Kildall.basic_block_map
+R22690 Kildall.basic_block_map
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R23169 Kildall.state_invariant
+R23186 Kildall.mkstate
+R23122 Kildall.state_invariant
+R23139 Kildall.mkstate
+R23155 Coq.Lists.List "x :: y" list_scope
+R23099 Coq.Init.Logic "~ x" type_scope
+R23101 Coqlib.Plt
+R23523 Kildall.state_invariant
+R23540 Kildall.mkstate
+R23552 Coq.Lists.List.nil
+R23499 Kildall.state_invariant
+R23483 Coq.Init.Logic "x = y" type_scope
+R23450 Kildall.analyze
+R23464 Kildall.basic_block_map
+R23485 Coq.Init.Datatypes.Some
+R23734 Coqlib.plt
+R23734 Coqlib.plt
+R23790 Kildall.propagate_successors_invariant
+R23790 Kildall.propagate_successors_invariant
+R23860 Kildall.discard_top_worklist_invariant
+R23860 Kildall.discard_top_worklist_invariant
+R23938 Kildall.state_invariant
+R23955 Kildall.mkstate
+R23982 Kildall.basic_block_list
+R23999 Kildall.basic_block_map
+R23964 Maps.init
+R23974 Kildall.top
+R24057 Maps.gi
+R24057 Maps.gi
+R24098 Maps.gi
+R24098 Maps.gi
+R24098 Maps.gi
+R24098 Maps.gi
+R24113 Kildall.top_ge
+R24113 Kildall.top_ge
+R24243 Kildall.ge
+R24268 Maps "a !! b"
+R24251 Maps "a !! b"
+R24218 Coq.Lists.List.In
+R24201 Coqlib.Plt
+R24185 Coq.Init.Logic "x = y" type_scope
+R24176 Kildall.fixpoint
+R24187 Coq.Init.Datatypes.Some
+R24322 Kildall.state_invariant
+R24339 Kildall.mkstate
+R24351 Coq.Lists.List.nil
+R24322 Kildall.state_invariant
+R24339 Kildall.mkstate
+R24351 Coq.Lists.List.nil
+R24367 Kildall.analyze_invariant
+R24367 Kildall.analyze_invariant
+R24399 Kildall.initial_state_invariant
+R24399 Kildall.initial_state_invariant
+R24590 Coq.Init.Logic "x = y" type_scope
+R24577 Maps "a !! b"
+R24592 Kildall.top
+R24558 Coq.Init.Logic "x = y" type_scope
+R24549 Kildall.fixpoint
+R24560 Coq.Init.Datatypes.Some
+R24647 Kildall.state_invariant
+R24664 Kildall.mkstate
+R24676 Coq.Lists.List.nil
+R24647 Kildall.state_invariant
+R24664 Kildall.mkstate
+R24676 Coq.Lists.List.nil
+R24692 Kildall.analyze_invariant
+R24692 Kildall.analyze_invariant
+R24724 Kildall.initial_state_invariant
+R24724 Kildall.initial_state_invariant
+R24840 Kildall.predecessors
+R24840 Kildall.predecessors
+R24879 Maps "a !! b"
+R24867 Kildall.predecessors
+R24879 Maps "a !! b"
+R24867 Kildall.predecessors
+R24924 Coqlib.peq
+R24924 Coqlib.peq
+R24955 Coqlib.peq_true
+R24955 Coqlib.peq_true
+R25045 Maps "a !! b"
+R25039 Kildall.st_in
+R25003 Kildall.state
+R25142 Kildall.Pstate
+R25150 Kildall.propagate_successors
+R25127 Kildall.Pstate
+R25306 Maps.gsspec
+R25306 Maps.gsspec
+R25325 Coqlib.peq
+R25325 Coqlib.peq
+R25482 Maps "a !! b"
+R25449 Kildall.Pstate
+R25432 Coq.Init.Logic "x = y" type_scope
+R25412 Kildall.analyze
+R25434 Coq.Init.Datatypes.Some
+R25568 Kildall.st_wrk
+R25568 Kildall.st_wrk
+R25622 Coqlib.plt
+R25622 Coqlib.plt
+R25680 Kildall.propagate_successors_P
+R25680 Kildall.propagate_successors_P
+R25858 Maps "a !! b"
+R25839 Coq.Init.Logic "x = y" type_scope
+R25830 Kildall.fixpoint
+R25841 Coq.Init.Datatypes.Some
+R25910 Kildall.analyze_P
+R25910 Kildall.analyze_P
+R25957 Maps.gi
+R25957 Maps.gi
+FConstprop
+R372 Integers.int
+R393 Floats.float
+R425 Integers.int
+R416 AST.ident
+R498 Constprop.approx
+R535 Coq.Init.Specif "{ A } + { B }" type_scope
+R537 Coq.Init.Logic "x = y" type_scope
+R545 Coq.Init.Logic "x <> y" type_scope
+R531 Constprop.t
+R531 Constprop.t
+R591 Integers.eq_dec
+R591 Integers.eq_dec
+R613 Floats.eq_dec
+R613 Floats.eq_dec
+R637 Integers.eq_dec
+R637 Integers.eq_dec
+R659 AST.ident_eq
+R659 AST.ident_eq
+R727 Coq.Init.Logic "A \/ B" type_scope
+R717 Coq.Init.Logic "x = y" type_scope
+R719 Constprop.Unknown
+R742 Coq.Init.Logic "A \/ B" type_scope
+R732 Coq.Init.Logic "x = y" type_scope
+R734 Constprop.Novalue
+R747 Coq.Init.Logic "x = y" type_scope
+R698 Constprop.t
+R698 Constprop.t
+R779 Constprop.ge
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R877 Constprop.ge
+R867 Constprop.ge
+R857 Constprop.ge
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R958 Constprop.Novalue
+R987 Constprop.Unknown
+R1022 Constprop.ge
+R1027 Constprop.bot
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R1101 Constprop.ge
+R1104 Constprop.top
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R1182 Constprop.t
+R1194 Constprop.eq
+R1239 Constprop.Novalue
+R1264 Constprop.Novalue
+R1291 Constprop.Unknown
+R1177 Constprop.t
+R1177 Constprop.t
+R1348 Coq.Init.Logic "x = y" type_scope
+R1340 Constprop.lub
+R1350 Constprop.lub
+R1402 Constprop.eq
+R1417 Constprop.eq
+R1402 Constprop.eq
+R1417 Constprop.eq
+R1417 Constprop.eq
+R1524 Constprop.ge
+R1528 Constprop.lub
+R1583 Constprop.eq
+R1583 Constprop.eq
+R1609 Constprop.ge_refl
+R1609 Constprop.ge_refl
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R2407 Coq.Lists.List.list
+R2412 Constprop.approx
+R2391 Op.condition
+R2533 Coq.Lists.List "x :: y" list_scope
+R2528 Constprop.I
+R2541 Coq.Lists.List "x :: y" list_scope
+R2536 Constprop.I
+R2544 Coq.Lists.List.nil
+R2518 Op.Ccomp
+R2655 Coq.Lists.List "x :: y" list_scope
+R2650 Constprop.I
+R2663 Coq.Lists.List "x :: y" list_scope
+R2658 Constprop.I
+R2666 Coq.Lists.List.nil
+R2639 Op.Ccompu
+R2780 Coq.Lists.List "x :: y" list_scope
+R2775 Constprop.I
+R2783 Coq.Lists.List.nil
+R2760 Op.Ccompimm
+R2898 Coq.Lists.List "x :: y" list_scope
+R2893 Constprop.I
+R2901 Coq.Lists.List.nil
+R2877 Op.Ccompuimm
+R3012 Coq.Lists.List "x :: y" list_scope
+R3007 Constprop.F
+R3020 Coq.Lists.List "x :: y" list_scope
+R3015 Constprop.F
+R3023 Coq.Lists.List.nil
+R2996 Op.Ccompf
+R3137 Coq.Lists.List "x :: y" list_scope
+R3132 Constprop.F
+R3145 Coq.Lists.List "x :: y" list_scope
+R3140 Constprop.F
+R3148 Coq.Lists.List.nil
+R3118 Op.Cnotcompf
+R3259 Coq.Lists.List "x :: y" list_scope
+R3254 Constprop.I
+R3262 Coq.Lists.List.nil
+R3240 Op.Cmaskzero
+R3376 Coq.Lists.List "x :: y" list_scope
+R3371 Constprop.I
+R3379 Coq.Lists.List.nil
+R3354 Op.Cmasknotzero
+R3455 Coq.Lists.List.list
+R3460 Constprop.approx
+R3439 Op.condition
+R3627 Constprop.eval_static_condition_cases
+R3670 Op.Ccomp
+R3684 Coq.Lists.List "x :: y" list_scope
+R3679 Constprop.I
+R3692 Coq.Lists.List "x :: y" list_scope
+R3687 Constprop.I
+R3695 Coq.Lists.List.nil
+R3708 Constprop.eval_static_condition_case1
+R3748 Op.Ccompu
+R3763 Coq.Lists.List "x :: y" list_scope
+R3758 Constprop.I
+R3771 Coq.Lists.List "x :: y" list_scope
+R3766 Constprop.I
+R3774 Coq.Lists.List.nil
+R3787 Constprop.eval_static_condition_case2
+R3827 Op.Ccompimm
+R3846 Coq.Lists.List "x :: y" list_scope
+R3841 Constprop.I
+R3849 Coq.Lists.List.nil
+R3862 Constprop.eval_static_condition_case3
+R3901 Op.Ccompuimm
+R3921 Coq.Lists.List "x :: y" list_scope
+R3916 Constprop.I
+R3924 Coq.Lists.List.nil
+R3937 Constprop.eval_static_condition_case4
+R3976 Op.Ccompf
+R3991 Coq.Lists.List "x :: y" list_scope
+R3986 Constprop.F
+R3999 Coq.Lists.List "x :: y" list_scope
+R3994 Constprop.F
+R4002 Coq.Lists.List.nil
+R4015 Constprop.eval_static_condition_case5
+R4055 Op.Cnotcompf
+R4073 Coq.Lists.List "x :: y" list_scope
+R4068 Constprop.F
+R4081 Coq.Lists.List "x :: y" list_scope
+R4076 Constprop.F
+R4084 Coq.Lists.List.nil
+R4097 Constprop.eval_static_condition_case6
+R4137 Op.Cmaskzero
+R4155 Coq.Lists.List "x :: y" list_scope
+R4150 Constprop.I
+R4158 Coq.Lists.List.nil
+R4171 Constprop.eval_static_condition_case7
+R4208 Op.Cmasknotzero
+R4229 Coq.Lists.List "x :: y" list_scope
+R4224 Constprop.I
+R4232 Coq.Lists.List.nil
+R4245 Constprop.eval_static_condition_case8
+R4300 Constprop.eval_static_condition_default
+R3575 Coq.Lists.List.list
+R3580 Constprop.approx
+R3559 Op.condition
+R4426 Constprop.eval_static_condition_match
+R4471 Constprop.eval_static_condition_case1
+R4516 Coq.Init.Datatypes.Some
+R4521 Integers.cmp
+R4542 Constprop.eval_static_condition_case2
+R4587 Coq.Init.Datatypes.Some
+R4592 Integers.cmpu
+R4614 Constprop.eval_static_condition_case3
+R4658 Coq.Init.Datatypes.Some
+R4663 Integers.cmp
+R4683 Constprop.eval_static_condition_case4
+R4727 Coq.Init.Datatypes.Some
+R4732 Integers.cmpu
+R4753 Constprop.eval_static_condition_case5
+R4798 Coq.Init.Datatypes.Some
+R4803 Floats.cmp
+R4826 Constprop.eval_static_condition_case6
+R4871 Coq.Init.Datatypes.Some
+R4876 Coq.Bool.Bool.negb
+R4881 Floats.cmp
+R4905 Constprop.eval_static_condition_case7
+R4947 Coq.Init.Datatypes.Some
+R4952 Integers.eq
+R4974 Integers.zero
+R4960 Integers.and
+R4988 Constprop.eval_static_condition_case8
+R5030 Coq.Init.Datatypes.Some
+R5035 Coq.Bool.Bool.negb
+R5040 Integers.eq
+R5062 Integers.zero
+R5048 Integers.and
+R5077 Constprop.eval_static_condition_default
+R5124 Coq.Init.Datatypes.None
+R4402 Coq.Lists.List.list
+R4407 Constprop.approx
+R4386 Op.condition
+R8057 Coq.Lists.List.list
+R8062 Constprop.approx
+R8041 Op.operation
+R8173 Coq.Lists.List "x :: y" list_scope
+R8175 Coq.Lists.List.nil
+R8163 Op.Omove
+R8278 Coq.Lists.List.nil
+R8264 Op.Ointconst
+R8383 Coq.Lists.List.nil
+R8367 Op.Ofloatconst
+R8492 Coq.Lists.List.nil
+R8474 Op.Oaddrsymbol
+R8602 Coq.Lists.List "x :: y" list_scope
+R8597 Constprop.I
+R8605 Coq.Lists.List.nil
+R8582 Op.Ocast8signed
+R8716 Coq.Lists.List "x :: y" list_scope
+R8711 Constprop.I
+R8719 Coq.Lists.List.nil
+R8695 Op.Ocast16signed
+R8824 Coq.Lists.List "x :: y" list_scope
+R8819 Constprop.I
+R8832 Coq.Lists.List "x :: y" list_scope
+R8827 Constprop.I
+R8835 Coq.Lists.List.nil
+R8812 Op.Oadd
+R8946 Coq.Lists.List "x :: y" list_scope
+R8938 Constprop.S
+R8954 Coq.Lists.List "x :: y" list_scope
+R8949 Constprop.I
+R8957 Coq.Lists.List.nil
+R8931 Op.Oadd
+R9067 Coq.Lists.List "x :: y" list_scope
+R9062 Constprop.I
+R9070 Coq.Lists.List.nil
+R9050 Op.Oaddimm
+R9186 Coq.Lists.List "x :: y" list_scope
+R9178 Constprop.S
+R9189 Coq.Lists.List.nil
+R9166 Op.Oaddimm
+R9295 Coq.Lists.List "x :: y" list_scope
+R9290 Constprop.I
+R9303 Coq.Lists.List "x :: y" list_scope
+R9298 Constprop.I
+R9306 Coq.Lists.List.nil
+R9283 Op.Osub
+R9418 Coq.Lists.List "x :: y" list_scope
+R9410 Constprop.S
+R9426 Coq.Lists.List "x :: y" list_scope
+R9421 Constprop.I
+R9429 Coq.Lists.List.nil
+R9403 Op.Osub
+R9539 Coq.Lists.List "x :: y" list_scope
+R9534 Constprop.I
+R9542 Coq.Lists.List.nil
+R9522 Op.Osubimm
+R9648 Coq.Lists.List "x :: y" list_scope
+R9643 Constprop.I
+R9656 Coq.Lists.List "x :: y" list_scope
+R9651 Constprop.I
+R9659 Coq.Lists.List.nil
+R9636 Op.Omul
+R9769 Coq.Lists.List "x :: y" list_scope
+R9764 Constprop.I
+R9772 Coq.Lists.List.nil
+R9752 Op.Omulimm
+R9878 Coq.Lists.List "x :: y" list_scope
+R9873 Constprop.I
+R9886 Coq.Lists.List "x :: y" list_scope
+R9881 Constprop.I
+R9889 Coq.Lists.List.nil
+R9866 Op.Odiv
+R9996 Coq.Lists.List "x :: y" list_scope
+R9991 Constprop.I
+R10004 Coq.Lists.List "x :: y" list_scope
+R9999 Constprop.I
+R10007 Coq.Lists.List.nil
+R9983 Op.Odivu
+R10113 Coq.Lists.List "x :: y" list_scope
+R10108 Constprop.I
+R10121 Coq.Lists.List "x :: y" list_scope
+R10116 Constprop.I
+R10124 Coq.Lists.List.nil
+R10101 Op.Oand
+R10234 Coq.Lists.List "x :: y" list_scope
+R10229 Constprop.I
+R10237 Coq.Lists.List.nil
+R10217 Op.Oandimm
+R10342 Coq.Lists.List "x :: y" list_scope
+R10337 Constprop.I
+R10350 Coq.Lists.List "x :: y" list_scope
+R10345 Constprop.I
+R10353 Coq.Lists.List.nil
+R10331 Op.Oor
+R10462 Coq.Lists.List "x :: y" list_scope
+R10457 Constprop.I
+R10465 Coq.Lists.List.nil
+R10446 Op.Oorimm
+R10571 Coq.Lists.List "x :: y" list_scope
+R10566 Constprop.I
+R10579 Coq.Lists.List "x :: y" list_scope
+R10574 Constprop.I
+R10582 Coq.Lists.List.nil
+R10559 Op.Oxor
+R10692 Coq.Lists.List "x :: y" list_scope
+R10687 Constprop.I
+R10695 Coq.Lists.List.nil
+R10675 Op.Oxorimm
+R10802 Coq.Lists.List "x :: y" list_scope
+R10797 Constprop.I
+R10810 Coq.Lists.List "x :: y" list_scope
+R10805 Constprop.I
+R10813 Coq.Lists.List.nil
+R10789 Op.Onand
+R10919 Coq.Lists.List "x :: y" list_scope
+R10914 Constprop.I
+R10927 Coq.Lists.List "x :: y" list_scope
+R10922 Constprop.I
+R10930 Coq.Lists.List.nil
+R10907 Op.Onor
+R11037 Coq.Lists.List "x :: y" list_scope
+R11032 Constprop.I
+R11045 Coq.Lists.List "x :: y" list_scope
+R11040 Constprop.I
+R11048 Coq.Lists.List.nil
+R11024 Op.Onxor
+R11154 Coq.Lists.List "x :: y" list_scope
+R11149 Constprop.I
+R11162 Coq.Lists.List "x :: y" list_scope
+R11157 Constprop.I
+R11165 Coq.Lists.List.nil
+R11142 Op.Oshl
+R11271 Coq.Lists.List "x :: y" list_scope
+R11266 Constprop.I
+R11279 Coq.Lists.List "x :: y" list_scope
+R11274 Constprop.I
+R11282 Coq.Lists.List.nil
+R11259 Op.Oshr
+R11392 Coq.Lists.List "x :: y" list_scope
+R11387 Constprop.I
+R11395 Coq.Lists.List.nil
+R11375 Op.Oshrimm
+R11506 Coq.Lists.List "x :: y" list_scope
+R11501 Constprop.I
+R11509 Coq.Lists.List.nil
+R11488 Op.Oshrximm
+R11616 Coq.Lists.List "x :: y" list_scope
+R11611 Constprop.I
+R11624 Coq.Lists.List "x :: y" list_scope
+R11619 Constprop.I
+R11627 Coq.Lists.List.nil
+R11603 Op.Oshru
+R11755 Coq.Lists.List "x :: y" list_scope
+R11750 Constprop.I
+R11758 Coq.Lists.List.nil
+R11730 Op.Orolm
+R11862 Coq.Lists.List "x :: y" list_scope
+R11857 Constprop.F
+R11865 Coq.Lists.List.nil
+R11849 Op.Onegf
+R11969 Coq.Lists.List "x :: y" list_scope
+R11964 Constprop.F
+R11972 Coq.Lists.List.nil
+R11956 Op.Oabsf
+R12079 Coq.Lists.List "x :: y" list_scope
+R12074 Constprop.F
+R12087 Coq.Lists.List "x :: y" list_scope
+R12082 Constprop.F
+R12090 Coq.Lists.List.nil
+R12066 Op.Oaddf
+R12197 Coq.Lists.List "x :: y" list_scope
+R12192 Constprop.F
+R12205 Coq.Lists.List "x :: y" list_scope
+R12200 Constprop.F
+R12208 Coq.Lists.List.nil
+R12184 Op.Osubf
+R12315 Coq.Lists.List "x :: y" list_scope
+R12310 Constprop.F
+R12323 Coq.Lists.List "x :: y" list_scope
+R12318 Constprop.F
+R12326 Coq.Lists.List.nil
+R12302 Op.Omulf
+R12433 Coq.Lists.List "x :: y" list_scope
+R12428 Constprop.F
+R12441 Coq.Lists.List "x :: y" list_scope
+R12436 Constprop.F
+R12444 Coq.Lists.List.nil
+R12420 Op.Odivf
+R12557 Coq.Lists.List "x :: y" list_scope
+R12552 Constprop.F
+R12565 Coq.Lists.List "x :: y" list_scope
+R12560 Constprop.F
+R12573 Coq.Lists.List "x :: y" list_scope
+R12568 Constprop.F
+R12576 Coq.Lists.List.nil
+R12541 Op.Omuladdf
+R12689 Coq.Lists.List "x :: y" list_scope
+R12684 Constprop.F
+R12697 Coq.Lists.List "x :: y" list_scope
+R12692 Constprop.F
+R12705 Coq.Lists.List "x :: y" list_scope
+R12700 Constprop.F
+R12708 Coq.Lists.List.nil
+R12673 Op.Omulsubf
+R12821 Coq.Lists.List "x :: y" list_scope
+R12816 Constprop.F
+R12824 Coq.Lists.List.nil
+R12799 Op.Osingleoffloat
+R12934 Coq.Lists.List "x :: y" list_scope
+R12929 Constprop.F
+R12937 Coq.Lists.List.nil
+R12915 Op.Ointoffloat
+R13047 Coq.Lists.List "x :: y" list_scope
+R13042 Constprop.I
+R13050 Coq.Lists.List.nil
+R13028 Op.Ofloatofint
+R13161 Coq.Lists.List "x :: y" list_scope
+R13156 Constprop.I
+R13164 Coq.Lists.List.nil
+R13141 Op.Ofloatofintu
+R13257 Op.Ocmp
+R13339 Coq.Lists.List.list
+R13344 Constprop.approx
+R13323 Op.operation
+R13505 Constprop.eval_static_operation_cases
+R13548 Op.Omove
+R13557 Coq.Lists.List "x :: y" list_scope
+R13559 Coq.Lists.List.nil
+R13572 Constprop.eval_static_operation_case1
+R13607 Op.Ointconst
+R13620 Coq.Lists.List.nil
+R13633 Constprop.eval_static_operation_case2
+R13667 Op.Ofloatconst
+R13682 Coq.Lists.List.nil
+R13695 Constprop.eval_static_operation_case3
+R13729 Op.Oaddrsymbol
+R13746 Coq.Lists.List.nil
+R13759 Constprop.eval_static_operation_case4
+R13795 Op.Ocast8signed
+R13814 Coq.Lists.List "x :: y" list_scope
+R13809 Constprop.I
+R13817 Coq.Lists.List.nil
+R13830 Constprop.eval_static_operation_case6
+R13865 Op.Ocast16signed
+R13885 Coq.Lists.List "x :: y" list_scope
+R13880 Constprop.I
+R13888 Coq.Lists.List.nil
+R13901 Constprop.eval_static_operation_case7
+R13936 Op.Oadd
+R13947 Coq.Lists.List "x :: y" list_scope
+R13942 Constprop.I
+R13955 Coq.Lists.List "x :: y" list_scope
+R13950 Constprop.I
+R13958 Coq.Lists.List.nil
+R13971 Constprop.eval_static_operation_case8
+R14009 Op.Oadd
+R14023 Coq.Lists.List "x :: y" list_scope
+R14015 Constprop.S
+R14031 Coq.Lists.List "x :: y" list_scope
+R14026 Constprop.I
+R14034 Coq.Lists.List.nil
+R14047 Constprop.eval_static_operation_case9
+R14088 Op.Oaddimm
+R14104 Coq.Lists.List "x :: y" list_scope
+R14099 Constprop.I
+R14107 Coq.Lists.List.nil
+R14120 Constprop.eval_static_operation_case11
+R14158 Op.Oaddimm
+R14177 Coq.Lists.List "x :: y" list_scope
+R14169 Constprop.S
+R14180 Coq.Lists.List.nil
+R14193 Constprop.eval_static_operation_case12
+R14234 Op.Osub
+R14245 Coq.Lists.List "x :: y" list_scope
+R14240 Constprop.I
+R14253 Coq.Lists.List "x :: y" list_scope
+R14248 Constprop.I
+R14256 Coq.Lists.List.nil
+R14269 Constprop.eval_static_operation_case13
+R14308 Op.Osub
+R14322 Coq.Lists.List "x :: y" list_scope
+R14314 Constprop.S
+R14330 Coq.Lists.List "x :: y" list_scope
+R14325 Constprop.I
+R14333 Coq.Lists.List.nil
+R14346 Constprop.eval_static_operation_case14
+R14388 Op.Osubimm
+R14404 Coq.Lists.List "x :: y" list_scope
+R14399 Constprop.I
+R14407 Coq.Lists.List.nil
+R14420 Constprop.eval_static_operation_case15
+R14458 Op.Omul
+R14469 Coq.Lists.List "x :: y" list_scope
+R14464 Constprop.I
+R14477 Coq.Lists.List "x :: y" list_scope
+R14472 Constprop.I
+R14480 Coq.Lists.List.nil
+R14493 Constprop.eval_static_operation_case16
+R14532 Op.Omulimm
+R14548 Coq.Lists.List "x :: y" list_scope
+R14543 Constprop.I
+R14551 Coq.Lists.List.nil
+R14564 Constprop.eval_static_operation_case17
+R14602 Op.Odiv
+R14613 Coq.Lists.List "x :: y" list_scope
+R14608 Constprop.I
+R14621 Coq.Lists.List "x :: y" list_scope
+R14616 Constprop.I
+R14624 Coq.Lists.List.nil
+R14637 Constprop.eval_static_operation_case18
+R14676 Op.Odivu
+R14688 Coq.Lists.List "x :: y" list_scope
+R14683 Constprop.I
+R14696 Coq.Lists.List "x :: y" list_scope
+R14691 Constprop.I
+R14699 Coq.Lists.List.nil
+R14712 Constprop.eval_static_operation_case19
+R14751 Op.Oand
+R14762 Coq.Lists.List "x :: y" list_scope
+R14757 Constprop.I
+R14770 Coq.Lists.List "x :: y" list_scope
+R14765 Constprop.I
+R14773 Coq.Lists.List.nil
+R14786 Constprop.eval_static_operation_case20
+R14825 Op.Oandimm
+R14841 Coq.Lists.List "x :: y" list_scope
+R14836 Constprop.I
+R14844 Coq.Lists.List.nil
+R14857 Constprop.eval_static_operation_case21
+R14895 Op.Oor
+R14905 Coq.Lists.List "x :: y" list_scope
+R14900 Constprop.I
+R14913 Coq.Lists.List "x :: y" list_scope
+R14908 Constprop.I
+R14916 Coq.Lists.List.nil
+R14929 Constprop.eval_static_operation_case22
+R14968 Op.Oorimm
+R14983 Coq.Lists.List "x :: y" list_scope
+R14978 Constprop.I
+R14986 Coq.Lists.List.nil
+R14999 Constprop.eval_static_operation_case23
+R15037 Op.Oxor
+R15048 Coq.Lists.List "x :: y" list_scope
+R15043 Constprop.I
+R15056 Coq.Lists.List "x :: y" list_scope
+R15051 Constprop.I
+R15059 Coq.Lists.List.nil
+R15072 Constprop.eval_static_operation_case24
+R15111 Op.Oxorimm
+R15127 Coq.Lists.List "x :: y" list_scope
+R15122 Constprop.I
+R15130 Coq.Lists.List.nil
+R15143 Constprop.eval_static_operation_case25
+R15181 Op.Onand
+R15193 Coq.Lists.List "x :: y" list_scope
+R15188 Constprop.I
+R15201 Coq.Lists.List "x :: y" list_scope
+R15196 Constprop.I
+R15204 Coq.Lists.List.nil
+R15217 Constprop.eval_static_operation_case26
+R15256 Op.Onor
+R15267 Coq.Lists.List "x :: y" list_scope
+R15262 Constprop.I
+R15275 Coq.Lists.List "x :: y" list_scope
+R15270 Constprop.I
+R15278 Coq.Lists.List.nil
+R15291 Constprop.eval_static_operation_case27
+R15330 Op.Onxor
+R15342 Coq.Lists.List "x :: y" list_scope
+R15337 Constprop.I
+R15350 Coq.Lists.List "x :: y" list_scope
+R15345 Constprop.I
+R15353 Coq.Lists.List.nil
+R15366 Constprop.eval_static_operation_case28
+R15405 Op.Oshl
+R15416 Coq.Lists.List "x :: y" list_scope
+R15411 Constprop.I
+R15424 Coq.Lists.List "x :: y" list_scope
+R15419 Constprop.I
+R15427 Coq.Lists.List.nil
+R15440 Constprop.eval_static_operation_case29
+R15479 Op.Oshr
+R15490 Coq.Lists.List "x :: y" list_scope
+R15485 Constprop.I
+R15498 Coq.Lists.List "x :: y" list_scope
+R15493 Constprop.I
+R15501 Coq.Lists.List.nil
+R15514 Constprop.eval_static_operation_case30
+R15553 Op.Oshrimm
+R15569 Coq.Lists.List "x :: y" list_scope
+R15564 Constprop.I
+R15572 Coq.Lists.List.nil
+R15585 Constprop.eval_static_operation_case31
+R15623 Op.Oshrximm
+R15640 Coq.Lists.List "x :: y" list_scope
+R15635 Constprop.I
+R15643 Coq.Lists.List.nil
+R15656 Constprop.eval_static_operation_case32
+R15694 Op.Oshru
+R15706 Coq.Lists.List "x :: y" list_scope
+R15701 Constprop.I
+R15714 Coq.Lists.List "x :: y" list_scope
+R15709 Constprop.I
+R15717 Coq.Lists.List.nil
+R15730 Constprop.eval_static_operation_case33
+R15769 Op.Orolm
+R15793 Coq.Lists.List "x :: y" list_scope
+R15788 Constprop.I
+R15796 Coq.Lists.List.nil
+R15809 Constprop.eval_static_operation_case34
+R15857 Op.Onegf
+R15869 Coq.Lists.List "x :: y" list_scope
+R15864 Constprop.F
+R15872 Coq.Lists.List.nil
+R15885 Constprop.eval_static_operation_case35
+R15921 Op.Oabsf
+R15933 Coq.Lists.List "x :: y" list_scope
+R15928 Constprop.F
+R15936 Coq.Lists.List.nil
+R15949 Constprop.eval_static_operation_case36
+R15985 Op.Oaddf
+R15997 Coq.Lists.List "x :: y" list_scope
+R15992 Constprop.F
+R16005 Coq.Lists.List "x :: y" list_scope
+R16000 Constprop.F
+R16008 Coq.Lists.List.nil
+R16021 Constprop.eval_static_operation_case37
+R16060 Op.Osubf
+R16072 Coq.Lists.List "x :: y" list_scope
+R16067 Constprop.F
+R16080 Coq.Lists.List "x :: y" list_scope
+R16075 Constprop.F
+R16083 Coq.Lists.List.nil
+R16096 Constprop.eval_static_operation_case38
+R16135 Op.Omulf
+R16147 Coq.Lists.List "x :: y" list_scope
+R16142 Constprop.F
+R16155 Coq.Lists.List "x :: y" list_scope
+R16150 Constprop.F
+R16158 Coq.Lists.List.nil
+R16171 Constprop.eval_static_operation_case39
+R16210 Op.Odivf
+R16222 Coq.Lists.List "x :: y" list_scope
+R16217 Constprop.F
+R16230 Coq.Lists.List "x :: y" list_scope
+R16225 Constprop.F
+R16233 Coq.Lists.List.nil
+R16246 Constprop.eval_static_operation_case40
+R16285 Op.Omuladdf
+R16300 Coq.Lists.List "x :: y" list_scope
+R16295 Constprop.F
+R16308 Coq.Lists.List "x :: y" list_scope
+R16303 Constprop.F
+R16316 Coq.Lists.List "x :: y" list_scope
+R16311 Constprop.F
+R16319 Coq.Lists.List.nil
+R16332 Constprop.eval_static_operation_case41
+R16374 Op.Omulsubf
+R16389 Coq.Lists.List "x :: y" list_scope
+R16384 Constprop.F
+R16397 Coq.Lists.List "x :: y" list_scope
+R16392 Constprop.F
+R16405 Coq.Lists.List "x :: y" list_scope
+R16400 Constprop.F
+R16408 Coq.Lists.List.nil
+R16421 Constprop.eval_static_operation_case42
+R16463 Op.Osingleoffloat
+R16484 Coq.Lists.List "x :: y" list_scope
+R16479 Constprop.F
+R16487 Coq.Lists.List.nil
+R16500 Constprop.eval_static_operation_case43
+R16536 Op.Ointoffloat
+R16554 Coq.Lists.List "x :: y" list_scope
+R16549 Constprop.F
+R16557 Coq.Lists.List.nil
+R16570 Constprop.eval_static_operation_case44
+R16606 Op.Ofloatofint
+R16624 Coq.Lists.List "x :: y" list_scope
+R16619 Constprop.I
+R16627 Coq.Lists.List.nil
+R16640 Constprop.eval_static_operation_case45
+R16676 Op.Ofloatofintu
+R16695 Coq.Lists.List "x :: y" list_scope
+R16690 Constprop.I
+R16698 Coq.Lists.List.nil
+R16711 Constprop.eval_static_operation_case46
+R16747 Op.Ocmp
+R16767 Constprop.eval_static_operation_case47
+R16821 Constprop.eval_static_operation_default
+R13455 Coq.Lists.List.list
+R13460 Constprop.approx
+R13439 Op.operation
+R16943 Constprop.eval_static_operation_match
+R16986 Constprop.eval_static_operation_case1
+R17033 Constprop.eval_static_operation_case2
+R17072 Constprop.I
+R17080 Constprop.eval_static_operation_case3
+R17119 Constprop.F
+R17127 Constprop.eval_static_operation_case4
+R17168 Constprop.S
+R17178 Constprop.eval_static_operation_case6
+R17218 Constprop.I
+R17220 Integers.cast8signed
+R17244 Constprop.eval_static_operation_case7
+R17284 Constprop.I
+R17286 Integers.cast16signed
+R17311 Constprop.eval_static_operation_case8
+R17354 Constprop.I
+R17356 Integers.add
+R17375 Constprop.eval_static_operation_case9
+R17421 Constprop.S
+R17427 Integers.add
+R17446 Constprop.eval_static_operation_case11
+R17489 Constprop.I
+R17492 Integers.add
+R17510 Constprop.eval_static_operation_case12
+R17556 Constprop.S
+R17562 Integers.add
+R17580 Constprop.eval_static_operation_case13
+R17624 Constprop.I
+R17626 Integers.sub
+R17645 Constprop.eval_static_operation_case14
+R17692 Constprop.S
+R17698 Integers.sub
+R17717 Constprop.eval_static_operation_case15
+R17760 Constprop.I
+R17763 Integers.sub
+R17781 Constprop.eval_static_operation_case16
+R17825 Constprop.I
+R17827 Integers.mul
+R17846 Constprop.eval_static_operation_case17
+R17889 Constprop.I
+R17891 Integers.mul
+R17909 Constprop.eval_static_operation_case18
+R17956 Integers.eq
+R17966 Integers.zero
+R17993 Constprop.I
+R17995 Integers.divs
+R17980 Constprop.Unknown
+R18015 Constprop.eval_static_operation_case19
+R18062 Integers.eq
+R18072 Integers.zero
+R18099 Constprop.I
+R18101 Integers.divu
+R18086 Constprop.Unknown
+R18121 Constprop.eval_static_operation_case20
+R18165 Constprop.I
+R18167 Integers.and
+R18186 Constprop.eval_static_operation_case21
+R18229 Constprop.I
+R18231 Integers.and
+R18249 Constprop.eval_static_operation_case22
+R18293 Constprop.I
+R18295 Integers.or
+R18313 Constprop.eval_static_operation_case23
+R18356 Constprop.I
+R18358 Integers.or
+R18375 Constprop.eval_static_operation_case24
+R18419 Constprop.I
+R18421 Integers.xor
+R18440 Constprop.eval_static_operation_case25
+R18483 Constprop.I
+R18485 Integers.xor
+R18503 Constprop.eval_static_operation_case26
+R18547 Constprop.I
+R18549 Integers.xor
+R18573 Integers.mone
+R18558 Integers.and
+R18587 Constprop.eval_static_operation_case27
+R18631 Constprop.I
+R18633 Integers.xor
+R18656 Integers.mone
+R18642 Integers.or
+R18670 Constprop.eval_static_operation_case28
+R18714 Constprop.I
+R18716 Integers.xor
+R18740 Integers.mone
+R18725 Integers.xor
+R18754 Constprop.eval_static_operation_case29
+R18801 Integers.ltu
+R18813 Integers.repr
+R18853 Constprop.Unknown
+R18831 Constprop.I
+R18833 Integers.shl
+R18865 Constprop.eval_static_operation_case30
+R18912 Integers.ltu
+R18924 Integers.repr
+R18964 Constprop.Unknown
+R18942 Constprop.I
+R18944 Integers.shr
+R18976 Constprop.eval_static_operation_case31
+R19022 Integers.ltu
+R19033 Integers.repr
+R19072 Constprop.Unknown
+R19051 Constprop.I
+R19053 Integers.shr
+R19084 Constprop.eval_static_operation_case32
+R19130 Integers.ltu
+R19141 Integers.repr
+R19181 Constprop.Unknown
+R19159 Constprop.I
+R19161 Integers.shrx
+R19193 Constprop.eval_static_operation_case33
+R19240 Integers.ltu
+R19252 Integers.repr
+R19293 Constprop.Unknown
+R19270 Constprop.I
+R19272 Integers.shru
+R19305 Constprop.eval_static_operation_case34
+R19358 Constprop.I
+R19360 Integers.rolm
+R19389 Constprop.eval_static_operation_case35
+R19430 Constprop.F
+R19432 Floats.neg
+R19450 Constprop.eval_static_operation_case36
+R19491 Constprop.F
+R19493 Floats.abs
+R19511 Constprop.eval_static_operation_case37
+R19555 Constprop.F
+R19557 Floats.add
+R19578 Constprop.eval_static_operation_case38
+R19622 Constprop.F
+R19624 Floats.sub
+R19645 Constprop.eval_static_operation_case39
+R19689 Constprop.F
+R19691 Floats.mul
+R19712 Constprop.eval_static_operation_case40
+R19756 Constprop.F
+R19758 Floats.div
+R19779 Constprop.eval_static_operation_case41
+R19826 Constprop.F
+R19828 Floats.add
+R19839 Floats.mul
+R19864 Constprop.eval_static_operation_case42
+R19911 Constprop.F
+R19913 Floats.sub
+R19924 Floats.mul
+R19949 Constprop.eval_static_operation_case43
+R19990 Constprop.F
+R19992 Floats.singleoffloat
+R20020 Constprop.eval_static_operation_case44
+R20061 Constprop.I
+R20063 Floats.intoffloat
+R20088 Constprop.eval_static_operation_case45
+R20129 Constprop.F
+R20131 Floats.floatofint
+R20156 Constprop.eval_static_operation_case46
+R20197 Constprop.F
+R20199 Floats.floatofintu
+R20225 Constprop.eval_static_operation_case47
+R20274 Constprop.eval_static_condition
+R20314 Coq.Init.Datatypes.None
+R20322 Constprop.Unknown
+R20338 Coq.Init.Datatypes.Some
+R20348 Constprop.I
+R20373 Integers.zero
+R20360 Integers.one
+R20397 Constprop.eval_static_operation_default
+R20442 Constprop.Unknown
+R16919 Coq.Lists.List.list
+R16924 Constprop.approx
+R16903 Op.operation
+R20515 Coq.Lists.List.map
+R20534 Constprop.get
+R20505 Constprop.t
+R20486 Coq.Lists.List.list
+R20491 Registers.reg
+R20636 Maps "a ! b"
+R20628 RTL.fn_code
+R20649 Coq.Init.Datatypes.None
+R20668 Coq.Init.Datatypes.Some
+R20705 RTL.Inop
+R20740 RTL.Iop
+R20844 Constprop.set
+R20780 Constprop.eval_static_operation
+R20806 Constprop.approx_regs
+R20871 RTL.Iload
+R20912 Constprop.set
+R20922 Constprop.Unknown
+R20945 RTL.Istore
+R21002 RTL.Icall
+R21040 Constprop.set
+R21050 Constprop.Unknown
+R21073 RTL.Icond
+R21128 RTL.Ireturn
+R20609 Constprop.t
+R20594 RTL.node
+R20579 RTL.function
+R21252 Coq.Init.Datatypes.option
+R21260 Maps.t
+R21267 Constprop.t
+R21277 Constprop.fixpoint
+R21374 Coq.Lists.List "x :: y" list_scope
+R21347 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R21351 RTL.fn_entrypoint
+R21367 Constprop.top
+R21377 Coq.Lists.List.nil
+R21319 Constprop.transfer
+R21307 RTL.fn_nextpc
+R21290 RTL.successors
+R21237 RTL.function
+R21456 Constprop.t
+R21491 Coq.Init.Datatypes.option
+R21498 Integers.int
+R21513 Constprop.get
+R21533 Constprop.I
+R21540 Coq.Init.Datatypes.Some
+R21554 Coq.Init.Datatypes.None
+R21484 Registers.reg
+R21619 Coq.Lists.List.list
+R21624 Registers.reg
+R21606 Op.condition
+R21725 Coq.Lists.List "x :: y" list_scope
+R21731 Coq.Lists.List "x :: y" list_scope
+R21734 Coq.Lists.List.nil
+R21712 Op.Ccomp
+R21827 Coq.Lists.List "x :: y" list_scope
+R21833 Coq.Lists.List "x :: y" list_scope
+R21836 Coq.Lists.List.nil
+R21813 Op.Ccompu
+R22031 Constprop.cond_strength_reduction_cases
+R22074 Op.Ccomp
+R22086 Coq.Lists.List "x :: y" list_scope
+R22092 Coq.Lists.List "x :: y" list_scope
+R22095 Coq.Lists.List.nil
+R22108 Constprop.csr_case1
+R22130 Op.Ccompu
+R22143 Coq.Lists.List "x :: y" list_scope
+R22149 Coq.Lists.List "x :: y" list_scope
+R22152 Coq.Lists.List.nil
+R22165 Constprop.csr_case2
+R22205 Constprop.csr_default
+R21984 Coq.Lists.List.list
+R21989 Registers.reg
+R21968 Op.condition
+R22329 Coq.Init.Datatypes "x * y" type_scope
+R22319 Op.condition
+R22331 Coq.Lists.List.list
+R22336 Registers.reg
+R22351 Constprop.cond_strength_reduction_match
+R22400 Constprop.csr_case1
+R22444 Constprop.intval
+R22433 Constprop.intval
+R22467 Coq.Init.Datatypes.Some
+R22490 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R22491 Op.Ccompimm
+R22501 AST.swap_comparison
+R22526 Coq.Lists.List "x :: y" list_scope
+R22529 Coq.Lists.List.nil
+R22545 Coq.Init.Datatypes.Some
+R22565 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R22566 Op.Ccompimm
+R22583 Coq.Lists.List "x :: y" list_scope
+R22586 Coq.Lists.List.nil
+R22617 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R22644 Constprop.csr_case2
+R22688 Constprop.intval
+R22677 Constprop.intval
+R22711 Coq.Init.Datatypes.Some
+R22734 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R22735 Op.Ccompuimm
+R22746 AST.swap_comparison
+R22771 Coq.Lists.List "x :: y" list_scope
+R22774 Coq.Lists.List.nil
+R22790 Coq.Init.Datatypes.Some
+R22810 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R22811 Op.Ccompuimm
+R22829 Coq.Lists.List "x :: y" list_scope
+R22832 Coq.Lists.List.nil
+R22863 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R22890 Constprop.csr_default
+R22921 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R22307 Coq.Lists.List.list
+R22312 Registers.reg
+R22289 Op.condition
+R22991 Integers.eq
+R23000 Integers.zero
+R23041 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R23042 Op.Oaddimm
+R23055 Coq.Lists.List "x :: y" list_scope
+R23058 Coq.Lists.List.nil
+R23016 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R23017 Op.Omove
+R23026 Coq.Lists.List "x :: y" list_scope
+R23029 Coq.Lists.List.nil
+R22978 Registers.reg
+R22969 Integers.int
+R23114 Integers.eq
+R23123 Integers.zero
+R23164 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R23165 Op.Orolm
+R23174 Integers.shl
+R23182 Integers.mone
+R23197 Coq.Lists.List "x :: y" list_scope
+R23200 Coq.Lists.List.nil
+R23139 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R23140 Op.Omove
+R23149 Coq.Lists.List "x :: y" list_scope
+R23152 Coq.Lists.List.nil
+R23101 Registers.reg
+R23092 Integers.int
+R23256 Integers.eq
+R23265 Integers.zero
+R23306 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R23307 Op.Oshrimm
+R23320 Coq.Lists.List "x :: y" list_scope
+R23323 Coq.Lists.List.nil
+R23281 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R23282 Op.Omove
+R23291 Coq.Lists.List "x :: y" list_scope
+R23294 Coq.Lists.List.nil
+R23243 Registers.reg
+R23234 Integers.int
+R23380 Integers.eq
+R23389 Integers.zero
+R23430 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R23431 Op.Orolm
+R23464 Integers.shru
+R23473 Integers.mone
+R23438 Integers.sub
+R23447 Integers.repr
+R23488 Coq.Lists.List "x :: y" list_scope
+R23491 Coq.Lists.List.nil
+R23405 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R23406 Op.Omove
+R23415 Coq.Lists.List "x :: y" list_scope
+R23418 Coq.Lists.List.nil
+R23367 Registers.reg
+R23358 Integers.int
+R23547 Integers.eq
+R23556 Integers.zero
+R23610 Integers.eq
+R23619 Integers.one
+R23671 Integers.is_power2
+R23698 Coq.Init.Datatypes.Some
+R23708 Constprop.make_shlimm
+R23730 Coq.Init.Datatypes.None
+R23738 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R23739 Op.Omulimm
+R23752 Coq.Lists.List "x :: y" list_scope
+R23755 Coq.Lists.List.nil
+R23636 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R23637 Op.Omove
+R23646 Coq.Lists.List "x :: y" list_scope
+R23649 Coq.Lists.List.nil
+R23574 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R23575 Op.Ointconst
+R23585 Integers.zero
+R23595 Coq.Lists.List.nil
+R23534 Registers.reg
+R23525 Integers.int
+R23819 Integers.eq
+R23828 Integers.zero
+R23880 Integers.eq
+R23889 Integers.mone
+R23928 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R23929 Op.Oandimm
+R23942 Coq.Lists.List "x :: y" list_scope
+R23945 Coq.Lists.List.nil
+R23903 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R23904 Op.Omove
+R23913 Coq.Lists.List "x :: y" list_scope
+R23916 Coq.Lists.List.nil
+R23844 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R23845 Op.Ointconst
+R23855 Integers.zero
+R23865 Coq.Lists.List.nil
+R23806 Registers.reg
+R23797 Integers.int
+R24000 Integers.eq
+R24009 Integers.zero
+R24051 Integers.eq
+R24060 Integers.mone
+R24107 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R24108 Op.Oorimm
+R24120 Coq.Lists.List "x :: y" list_scope
+R24123 Coq.Lists.List.nil
+R24074 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R24075 Op.Ointconst
+R24085 Integers.mone
+R24095 Coq.Lists.List.nil
+R24023 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R24024 Op.Omove
+R24033 Coq.Lists.List "x :: y" list_scope
+R24036 Coq.Lists.List.nil
+R23987 Registers.reg
+R23978 Integers.int
+R24179 Integers.eq
+R24188 Integers.zero
+R24229 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R24230 Op.Oxorimm
+R24243 Coq.Lists.List "x :: y" list_scope
+R24246 Coq.Lists.List.nil
+R24204 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R24205 Op.Omove
+R24214 Coq.Lists.List "x :: y" list_scope
+R24217 Coq.Lists.List.nil
+R24166 Registers.reg
+R24157 Integers.int
+R24305 Coq.Lists.List.list
+R24310 Registers.reg
+R24292 Op.operation
+R24434 Coq.Lists.List "x :: y" list_scope
+R24440 Coq.Lists.List "x :: y" list_scope
+R24443 Coq.Lists.List.nil
+R24425 Op.Oadd
+R24385 Registers.reg
+R24375 Registers.reg
+R24558 Coq.Lists.List "x :: y" list_scope
+R24564 Coq.Lists.List "x :: y" list_scope
+R24567 Coq.Lists.List.nil
+R24549 Op.Osub
+R24509 Registers.reg
+R24499 Registers.reg
+R24682 Coq.Lists.List "x :: y" list_scope
+R24688 Coq.Lists.List "x :: y" list_scope
+R24691 Coq.Lists.List.nil
+R24673 Op.Omul
+R24633 Registers.reg
+R24623 Registers.reg
+R24806 Coq.Lists.List "x :: y" list_scope
+R24812 Coq.Lists.List "x :: y" list_scope
+R24815 Coq.Lists.List.nil
+R24797 Op.Odiv
+R24757 Registers.reg
+R24747 Registers.reg
+R24931 Coq.Lists.List "x :: y" list_scope
+R24937 Coq.Lists.List "x :: y" list_scope
+R24940 Coq.Lists.List.nil
+R24921 Op.Odivu
+R24881 Registers.reg
+R24871 Registers.reg
+R25055 Coq.Lists.List "x :: y" list_scope
+R25061 Coq.Lists.List "x :: y" list_scope
+R25064 Coq.Lists.List.nil
+R25046 Op.Oand
+R25006 Registers.reg
+R24996 Registers.reg
+R25178 Coq.Lists.List "x :: y" list_scope
+R25184 Coq.Lists.List "x :: y" list_scope
+R25187 Coq.Lists.List.nil
+R25170 Op.Oor
+R25130 Registers.reg
+R25120 Registers.reg
+R25302 Coq.Lists.List "x :: y" list_scope
+R25308 Coq.Lists.List "x :: y" list_scope
+R25311 Coq.Lists.List.nil
+R25293 Op.Oxor
+R25253 Registers.reg
+R25243 Registers.reg
+R25426 Coq.Lists.List "x :: y" list_scope
+R25432 Coq.Lists.List "x :: y" list_scope
+R25435 Coq.Lists.List.nil
+R25417 Op.Oshl
+R25377 Registers.reg
+R25367 Registers.reg
+R25551 Coq.Lists.List "x :: y" list_scope
+R25557 Coq.Lists.List "x :: y" list_scope
+R25560 Coq.Lists.List.nil
+R25542 Op.Oshr
+R25502 Registers.reg
+R25492 Registers.reg
+R25677 Coq.Lists.List "x :: y" list_scope
+R25683 Coq.Lists.List "x :: y" list_scope
+R25686 Coq.Lists.List.nil
+R25667 Op.Oshru
+R25627 Registers.reg
+R25617 Registers.reg
+R25804 Op.Ocmp
+R25758 Coq.Lists.List.list
+R25763 Registers.reg
+R25742 Op.condition
+R25886 Coq.Lists.List.list
+R25891 Registers.reg
+R25868 Op.operation
+R26052 Constprop.op_strength_reduction_cases
+R26095 Op.Oadd
+R26104 Coq.Lists.List "x :: y" list_scope
+R26110 Coq.Lists.List "x :: y" list_scope
+R26113 Coq.Lists.List.nil
+R26126 Constprop.op_strength_reduction_case1
+R26164 Op.Osub
+R26173 Coq.Lists.List "x :: y" list_scope
+R26179 Coq.Lists.List "x :: y" list_scope
+R26182 Coq.Lists.List.nil
+R26195 Constprop.op_strength_reduction_case2
+R26233 Op.Omul
+R26242 Coq.Lists.List "x :: y" list_scope
+R26248 Coq.Lists.List "x :: y" list_scope
+R26251 Coq.Lists.List.nil
+R26264 Constprop.op_strength_reduction_case3
+R26302 Op.Odiv
+R26311 Coq.Lists.List "x :: y" list_scope
+R26317 Coq.Lists.List "x :: y" list_scope
+R26320 Coq.Lists.List.nil
+R26333 Constprop.op_strength_reduction_case4
+R26371 Op.Odivu
+R26381 Coq.Lists.List "x :: y" list_scope
+R26387 Coq.Lists.List "x :: y" list_scope
+R26390 Coq.Lists.List.nil
+R26403 Constprop.op_strength_reduction_case5
+R26441 Op.Oand
+R26450 Coq.Lists.List "x :: y" list_scope
+R26456 Coq.Lists.List "x :: y" list_scope
+R26459 Coq.Lists.List.nil
+R26472 Constprop.op_strength_reduction_case6
+R26510 Op.Oor
+R26518 Coq.Lists.List "x :: y" list_scope
+R26524 Coq.Lists.List "x :: y" list_scope
+R26527 Coq.Lists.List.nil
+R26540 Constprop.op_strength_reduction_case7
+R26578 Op.Oxor
+R26587 Coq.Lists.List "x :: y" list_scope
+R26593 Coq.Lists.List "x :: y" list_scope
+R26596 Coq.Lists.List.nil
+R26609 Constprop.op_strength_reduction_case8
+R26647 Op.Oshl
+R26656 Coq.Lists.List "x :: y" list_scope
+R26662 Coq.Lists.List "x :: y" list_scope
+R26665 Coq.Lists.List.nil
+R26678 Constprop.op_strength_reduction_case9
+R26716 Op.Oshr
+R26725 Coq.Lists.List "x :: y" list_scope
+R26731 Coq.Lists.List "x :: y" list_scope
+R26734 Coq.Lists.List.nil
+R26747 Constprop.op_strength_reduction_case10
+R26786 Op.Oshru
+R26796 Coq.Lists.List "x :: y" list_scope
+R26802 Coq.Lists.List "x :: y" list_scope
+R26805 Coq.Lists.List.nil
+R26818 Constprop.op_strength_reduction_case11
+R26857 Op.Ocmp
+R26877 Constprop.op_strength_reduction_case12
+R26933 Constprop.op_strength_reduction_default
+R26003 Coq.Lists.List.list
+R26008 Registers.reg
+R25985 Op.operation
+R27056 Constprop.op_strength_reduction_match
+R27101 Constprop.op_strength_reduction_case1
+R27172 Constprop.intval
+R27161 Constprop.intval
+R27195 Coq.Init.Datatypes.Some
+R27208 Constprop.make_addimm
+R27236 Coq.Init.Datatypes.Some
+R27246 Constprop.make_addimm
+R27279 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R27304 Constprop.op_strength_reduction_case2
+R27375 Constprop.intval
+R27364 Constprop.intval
+R27398 Coq.Init.Datatypes.Some
+R27411 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R27412 Op.Osubimm
+R27426 Coq.Lists.List "x :: y" list_scope
+R27429 Coq.Lists.List.nil
+R27445 Coq.Init.Datatypes.Some
+R27455 Constprop.make_addimm
+R27468 Integers.neg
+R27498 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R27523 Constprop.op_strength_reduction_case3
+R27594 Constprop.intval
+R27583 Constprop.intval
+R27617 Coq.Init.Datatypes.Some
+R27630 Constprop.make_mulimm
+R27658 Coq.Init.Datatypes.Some
+R27668 Constprop.make_mulimm
+R27701 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R27726 Constprop.op_strength_reduction_case4
+R27786 Constprop.intval
+R27809 Coq.Init.Datatypes.Some
+R27835 Integers.is_power2
+R27868 Coq.Init.Datatypes.Some
+R27878 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R27879 Op.Oshrximm
+R27894 Coq.Lists.List "x :: y" list_scope
+R27897 Coq.Lists.List.nil
+R27914 Coq.Init.Datatypes.None
+R27924 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R27957 Coq.Init.Datatypes.None
+R27975 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R28000 Constprop.op_strength_reduction_case5
+R28061 Constprop.intval
+R28084 Coq.Init.Datatypes.Some
+R28110 Integers.is_power2
+R28143 Coq.Init.Datatypes.Some
+R28153 Constprop.make_shruimm
+R28183 Coq.Init.Datatypes.None
+R28193 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R28226 Coq.Init.Datatypes.None
+R28244 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R28269 Constprop.op_strength_reduction_case6
+R28340 Constprop.intval
+R28329 Constprop.intval
+R28363 Coq.Init.Datatypes.Some
+R28376 Constprop.make_andimm
+R28404 Coq.Init.Datatypes.Some
+R28414 Constprop.make_andimm
+R28447 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R28472 Constprop.op_strength_reduction_case7
+R28542 Constprop.intval
+R28531 Constprop.intval
+R28565 Coq.Init.Datatypes.Some
+R28578 Constprop.make_orimm
+R28605 Coq.Init.Datatypes.Some
+R28615 Constprop.make_orimm
+R28647 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R28672 Constprop.op_strength_reduction_case8
+R28743 Constprop.intval
+R28732 Constprop.intval
+R28766 Coq.Init.Datatypes.Some
+R28779 Constprop.make_xorimm
+R28807 Coq.Init.Datatypes.Some
+R28817 Constprop.make_xorimm
+R28850 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R28875 Constprop.op_strength_reduction_case9
+R28935 Constprop.intval
+R28958 Coq.Init.Datatypes.Some
+R28981 Integers.ltu
+R28992 Integers.repr
+R29052 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R29020 Constprop.make_shlimm
+R29076 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R29101 Constprop.op_strength_reduction_case10
+R29162 Constprop.intval
+R29185 Coq.Init.Datatypes.Some
+R29208 Integers.ltu
+R29219 Integers.repr
+R29279 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R29247 Constprop.make_shrimm
+R29303 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R29328 Constprop.op_strength_reduction_case11
+R29390 Constprop.intval
+R29413 Coq.Init.Datatypes.Some
+R29436 Integers.ltu
+R29447 Integers.repr
+R29508 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R29475 Constprop.make_shruimm
+R29532 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R29557 Constprop.op_strength_reduction_case12
+R29632 Constprop.cond_strength_reduction
+R29672 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R29673 Op.Ocmp
+R29693 Constprop.op_strength_reduction_default
+R29754 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R27035 Coq.Lists.List.list
+R27040 Registers.reg
+R27017 Op.operation
+R29847 Coq.Lists.List.list
+R29852 Registers.reg
+R29828 Op.addressing
+R29986 Coq.Lists.List "x :: y" list_scope
+R29992 Coq.Lists.List "x :: y" list_scope
+R29995 Coq.Lists.List.nil
+R29971 Op.Aindexed2
+R29928 Registers.reg
+R29918 Registers.reg
+R30142 Coq.Lists.List "x :: y" list_scope
+R30145 Coq.Lists.List.nil
+R30121 Op.Abased
+R30078 Registers.reg
+R30068 Integers.int
+R30055 AST.ident
+R30257 Coq.Lists.List "x :: y" list_scope
+R30260 Coq.Lists.List.nil
+R30241 Op.Aindexed
+R30341 Coq.Lists.List.list
+R30346 Registers.reg
+R30322 Op.addressing
+R30518 Constprop.addr_strength_reduction_cases
+R30563 Op.Aindexed2
+R30577 Coq.Lists.List "x :: y" list_scope
+R30583 Coq.Lists.List "x :: y" list_scope
+R30586 Coq.Lists.List.nil
+R30599 Constprop.addr_strength_reduction_case1
+R30639 Op.Abased
+R30659 Coq.Lists.List "x :: y" list_scope
+R30662 Coq.Lists.List.nil
+R30675 Constprop.addr_strength_reduction_case2
+R30721 Op.Aindexed
+R30736 Coq.Lists.List "x :: y" list_scope
+R30739 Coq.Lists.List.nil
+R30752 Constprop.addr_strength_reduction_case3
+R30811 Constprop.addr_strength_reduction_default
+R30467 Coq.Lists.List.list
+R30472 Registers.reg
+R30448 Op.addressing
+R30943 Constprop.addr_strength_reduction_match
+R30992 Constprop.addr_strength_reduction_case1
+R31076 Constprop.get
+R31059 Constprop.get
+R31105 Constprop.S
+R31116 Constprop.I
+R31124 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R31125 Op.Aglobal
+R31139 Integers.add
+R31155 Coq.Lists.List.nil
+R31168 Constprop.S
+R31184 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R31185 Op.Abased
+R31204 Coq.Lists.List "x :: y" list_scope
+R31207 Coq.Lists.List.nil
+R31220 Constprop.I
+R31226 Constprop.S
+R31239 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R31240 Op.Aglobal
+R31254 Integers.add
+R31270 Coq.Lists.List.nil
+R31283 Constprop.I
+R31294 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R31295 Op.Aindexed
+R31311 Coq.Lists.List "x :: y" list_scope
+R31314 Coq.Lists.List.nil
+R31330 Constprop.S
+R31343 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R31344 Op.Abased
+R31363 Coq.Lists.List "x :: y" list_scope
+R31366 Coq.Lists.List.nil
+R31382 Constprop.I
+R31390 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R31391 Op.Aindexed
+R31407 Coq.Lists.List "x :: y" list_scope
+R31410 Coq.Lists.List.nil
+R31431 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R31458 Constprop.addr_strength_reduction_case2
+R31528 Constprop.intval
+R31551 Coq.Init.Datatypes.Some
+R31561 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R31562 Op.Aglobal
+R31576 Integers.add
+R31592 Coq.Lists.List.nil
+R31610 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R31637 Constprop.addr_strength_reduction_case3
+R31702 Constprop.get
+R31731 Constprop.S
+R31745 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R31746 Op.Aglobal
+R31760 Integers.add
+R31776 Coq.Lists.List.nil
+R31794 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R31821 Constprop.addr_strength_reduction_default
+R31886 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R30922 Coq.Lists.List.list
+R30927 Registers.reg
+R30903 Op.addressing
+R32044 RTL.Iop
+R32077 Constprop.eval_static_operation
+R32103 Constprop.approx_regs
+R32141 Constprop.I
+R32158 RTL.Iop
+R32176 Coq.Lists.List.nil
+R32163 Op.Ointconst
+R32194 Constprop.F
+R32211 RTL.Iop
+R32231 Coq.Lists.List.nil
+R32216 Op.Ofloatconst
+R32249 Constprop.S
+R32273 RTL.Iop
+R32300 Coq.Lists.List.nil
+R32278 Op.Oaddrsymbol
+R32353 Constprop.op_strength_reduction
+R32403 RTL.Iop
+R32437 RTL.Iload
+R32496 Constprop.addr_strength_reduction
+R32546 RTL.Iload
+R32586 RTL.Istore
+R32646 Constprop.addr_strength_reduction
+R32696 RTL.Istore
+R32737 RTL.Icall
+R33022 RTL.Icall
+R32816 Coq.Init.Datatypes.inl
+R32843 Constprop.get
+R32877 Constprop.S
+R32894 Integers.eq
+R32905 Integers.zero
+R32919 Coq.Init.Datatypes.inr
+R32988 Coq.Init.Datatypes.inr
+R33052 RTL.Icond
+R33089 Constprop.eval_static_condition
+R33117 Constprop.approx_regs
+R33155 Coq.Init.Datatypes.Some
+R33198 RTL.Inop
+R33185 RTL.Inop
+R33214 Coq.Init.Datatypes.None
+R33254 Constprop.cond_strength_reduction
+R33308 RTL.Icond
+R32005 RTL.instruction
+R31992 Constprop.t
+R33433 RTL.code
+R33443 Maps.map
+R33470 Constprop.transf_instr
+R33490 Maps "a !! b"
+R33425 RTL.code
+R33404 Maps.t
+R33411 Constprop.t
+R33658 Coq.Init.Logic "A \/ B" type_scope
+R33631 Coqlib.Plt
+R33641 RTL.fn_nextpc
+R33698 Coq.Init.Logic "x = y" type_scope
+R33693 Maps "a ! b"
+R33662 Constprop.transf_code
+R33685 RTL.fn_code
+R33700 Coq.Init.Datatypes.None
+R33588 Coq.Init.Logic "A \/ B" type_scope
+R33567 Coqlib.Plt
+R33577 RTL.fn_nextpc
+R33606 Coq.Init.Logic "x = y" type_scope
+R33602 Maps "a ! b"
+R33594 RTL.fn_code
+R33608 Coq.Init.Datatypes.None
+R33798 Maps.gmap
+R33798 Maps.gmap
+R33906 RTL.function
+R33926 Constprop.analyze
+R33945 Coq.Init.Datatypes.None
+R33959 Coq.Init.Datatypes.Some
+R33981 RTL.mkfunction
+R34157 Constprop.transf_code_wf
+R34185 RTL.fn_code_wf
+R34137 RTL.fn_nextpc
+R34111 RTL.fn_entrypoint
+R34067 Constprop.transf_code
+R34090 RTL.fn_code
+R34044 RTL.fn_stacksize
+R34022 RTL.fn_params
+R34003 RTL.fn_sig
+R33894 RTL.function
+R34247 RTL.program
+R34260 AST.transform_program
+R34278 Constprop.transf_function
+R34236 RTL.program
+FConstpropproof
+R334 RTL.genv
+R419 Constprop.Unknown
+R430 Coq.Init.Logic.True
+R439 Constprop.I
+R448 Coq.Init.Logic "x = y" type_scope
+R450 Values.Vint
+R461 Constprop.F
+R470 Coq.Init.Logic "x = y" type_scope
+R472 Values.Vfloat
+R485 Constprop.S
+R499 Coq.Init.Logic "'exists' x , p" type_scope
+R543 Coq.Init.Logic "A /\ B" type_scope
+R534 Coq.Init.Logic "x = y" type_scope
+R509 Globalenvs.find_symbol
+R536 Coq.Init.Datatypes.Some
+R548 Coq.Init.Logic "x = y" type_scope
+R550 Values.Vptr
+R570 Coq.Init.Logic.False
+R385 Values.val
+R373 Constprop.approx
+R657 Constpropproof.val_match_approx
+R688 Registers "a # b"
+R675 Constprop.get
+R627 RTL.regset
+R617 Constprop.t
+R792 Constpropproof.val_match_approx
+R767 Constpropproof.val_match_approx
+R748 Constprop.ge
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R1033 Constpropproof.regs_match_approx
+R1006 Constpropproof.regs_match_approx
+R992 Constprop.ge
+R1149 Constprop.get
+R1115 Constpropproof.val_match_approx_increasing
+R1149 Constprop.get
+R1115 Constpropproof.val_match_approx_increasing
+R1285 Constpropproof.regs_match_approx
+R1321 Registers "a # b <- c"
+R1304 Constprop.set
+R1256 Constpropproof.regs_match_approx
+R1230 Constpropproof.val_match_approx
+R1369 Registers.gsspec
+R1369 Registers.gsspec
+R1393 Coqlib.peq
+R1393 Coqlib.peq
+R1431 Constprop.gss
+R1431 Constprop.gss
+R1454 Constprop.gso
+R1454 Constprop.gso
+R1522 Coq.Lists.List.list
+R1527 Values.val
+R1507 Coq.Lists.List.list
+R1512 Constprop.approx
+R1588 Coq.Lists.List.nil
+R1584 Coq.Lists.List.nil
+R1739 Coq.Lists.List "x :: y" list_scope
+R1729 Coq.Lists.List "x :: y" list_scope
+R1637 Constpropproof.val_match_approx
+R1826 Constpropproof.val_list_match_approx
+R1870 Registers "a ## b"
+R1849 Constprop.approx_regs
+R1797 Constpropproof.regs_match_approx
+R2008 Constpropproof.val_match_approx
+R2026 Constprop.I
+R2093 Constpropproof.val_match_approx
+R2111 Constprop.F
+R2178 Constpropproof.val_match_approx
+R2196 Constprop.S
+R2460 Constpropproof.val_list_match_approx
+R2482 Coq.Lists.List.nil
+R2525 Constpropproof.val_list_match_approx
+R2551 Coq.Lists.List "x :: y" list_scope
+R2812 Coq.Init.Logic "x = y" type_scope
+R2789 Op.eval_condition
+R2814 Coq.Init.Datatypes.Some
+R2775 Coq.Init.Logic "x = y" type_scope
+R2745 Constprop.eval_static_condition
+R2777 Coq.Init.Datatypes.Some
+R2712 Constpropproof.val_list_match_approx
+R2888 Constprop.eval_static_condition_match
+R2888 Constprop.eval_static_condition_match
+R3107 Constpropproof.val_match_approx
+R3125 Constprop.eval_static_operation
+R3093 Coq.Init.Logic "x = y" type_scope
+R3066 Op.eval_operation
+R3095 Coq.Init.Datatypes.Some
+R3033 Constpropproof.val_list_match_approx
+R3223 Constprop.eval_static_operation_match
+R3223 Constprop.eval_static_operation_match
+R3368 Globalenvs.find_symbol
+R3368 Globalenvs.find_symbol
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R3584 Integers.eq
+R3594 Integers.zero
+R3584 Integers.eq
+R3594 Integers.zero
+R3716 Integers.eq
+R3726 Integers.zero
+R3716 Integers.eq
+R3726 Integers.zero
+R3966 Integers.ltu
+R3978 Integers.repr
+R3966 Integers.ltu
+R3978 Integers.repr
+R4104 Integers.ltu
+R4116 Integers.repr
+R4104 Integers.ltu
+R4116 Integers.repr
+R4222 Integers.ltu
+R4233 Integers.repr
+R4222 Integers.ltu
+R4233 Integers.repr
+R4327 Integers.ltu
+R4338 Integers.repr
+R4327 Integers.ltu
+R4338 Integers.repr
+R4452 Integers.ltu
+R4464 Integers.repr
+R4452 Integers.ltu
+R4464 Integers.repr
+R4568 Constprop.eval_static_condition
+R4568 Constprop.eval_static_condition
+R4620 Constpropproof.eval_static_condition_correct
+R4620 Constpropproof.eval_static_condition_correct
+R4946 Constpropproof.regs_match_approx
+R4965 Constprop.transfer
+R4917 Constpropproof.regs_match_approx
+R4898 Coq.Init.Logic "x = y" type_scope
+R4903 RTL.fn_code
+R4853 RTL.exec_instr
+R5081 Constpropproof.regs_match_approx_update
+R5081 Constpropproof.regs_match_approx_update
+R5156 Registers "a ## b"
+R5116 Constpropproof.eval_static_operation_correct
+R5156 Registers "a ## b"
+R5116 Constpropproof.eval_static_operation_correct
+R5174 Constpropproof.approx_regs_val_list
+R5174 Constpropproof.approx_regs_val_list
+R5236 Constpropproof.regs_match_approx_update
+R5236 Constpropproof.regs_match_approx_update
+R5303 Constpropproof.regs_match_approx_update
+R5303 Constpropproof.regs_match_approx_update
+R5567 Constpropproof.regs_match_approx
+R5592 Maps "a !! b"
+R5529 Constpropproof.regs_match_approx
+R5554 Maps "a !! b"
+R5510 Coq.Init.Logic "x = y" type_scope
+R5515 RTL.fn_code
+R5465 RTL.exec_instr
+R5411 Coq.Init.Logic "x = y" type_scope
+R5401 Constprop.analyze
+R5413 Coq.Init.Datatypes.Some
+R5664 Constprop.transfer
+R5685 Maps "a !! b"
+R5629 Constpropproof.regs_match_approx_increasing
+R5664 Constprop.transfer
+R5685 Maps "a !! b"
+R5629 Constpropproof.regs_match_approx_increasing
+R5701 Constprop.fixpoint_solution
+R5701 Constprop.fixpoint_solution
+R5766 RTL.fn_code_wf
+R5766 RTL.fn_code_wf
+R5812 RTL.exec_instr_present
+R5812 RTL.exec_instr_present
+R5899 RTL.successors_correct
+R5899 RTL.successors_correct
+R5950 Constpropproof.transfer_correct
+R5950 Constpropproof.transfer_correct
+R6195 Constpropproof.regs_match_approx
+R6220 Maps "a !! b"
+R6157 Constpropproof.regs_match_approx
+R6182 Maps "a !! b"
+R6138 Coq.Init.Logic "x = y" type_scope
+R6143 RTL.fn_code
+R6092 RTL.exec_instrs
+R6038 Coq.Init.Logic "x = y" type_scope
+R6028 Constprop.analyze
+R6040 Coq.Init.Datatypes.Some
+R6300 Constpropproof.analyze_correct_1
+R6300 Constpropproof.analyze_correct_1
+R6421 Constpropproof.regs_match_approx
+R6446 Maps "a !! b"
+R6452 RTL.fn_entrypoint
+R6401 Coq.Init.Logic "x = y" type_scope
+R6391 Constprop.analyze
+R6403 Coq.Init.Datatypes.Some
+R6532 Constprop.top
+R6498 Constpropproof.regs_match_approx_increasing
+R6532 Constprop.top
+R6498 Constpropproof.regs_match_approx_increasing
+R6548 Constprop.fixpoint_entry
+R6548 Constprop.fixpoint_entry
+R6641 Constprop.get_top
+R6641 Constprop.get_top
+R6717 Constprop.t
+R6735 Values.val
+R6753 RTL.regset
+R6779 Constpropproof.regs_match_approx
+R6880 Coq.Init.Logic "x = y" type_scope
+R6877 Registers "a # b"
+R6882 Values.Vint
+R6863 Coq.Init.Logic "x = y" type_scope
+R6847 Constprop.intval
+R6865 Coq.Init.Datatypes.Some
+R6940 Constprop.get
+R6940 Constprop.get
+R7147 Constprop.cond_strength_reduction
+R7224 Coq.Init.Logic "x = y" type_scope
+R7193 Op.eval_condition
+R7216 Registers "a ## b"
+R7226 Op.eval_condition
+R7248 Registers "a ## b"
+R7313 Constprop.cond_strength_reduction_match
+R7313 Constprop.cond_strength_reduction_match
+R7373 Constprop.intval
+R7373 Constprop.intval
+R7418 Constpropproof.intval_correct
+R7418 Constpropproof.intval_correct
+R7456 Registers "a # b"
+R7456 Registers "a # b"
+R7476 Integers.swap_cmp
+R7476 Integers.swap_cmp
+R7533 Constprop.intval
+R7533 Constprop.intval
+R7578 Constpropproof.intval_correct
+R7578 Constpropproof.intval_correct
+R7626 Constprop.intval
+R7626 Constprop.intval
+R7671 Constpropproof.intval_correct
+R7671 Constpropproof.intval_correct
+R7709 Registers "a # b"
+R7709 Registers "a # b"
+R7729 Integers.swap_cmpu
+R7729 Integers.swap_cmpu
+R7787 Constprop.intval
+R7787 Constprop.intval
+R7832 Constpropproof.intval_correct
+R7832 Constpropproof.intval_correct
+R7947 Constprop.make_addimm
+R8065 Coq.Init.Logic "x = y" type_scope
+R8032 Op.eval_operation
+R8058 Registers "a ## b"
+R8067 Coq.Init.Datatypes.Some
+R8018 Coq.Init.Logic "x = y" type_scope
+R7968 Op.eval_operation
+R8000 Coq.Lists.List "x :: y" list_scope
+R7997 Registers "a # b"
+R8010 Coq.Lists.List "x :: y" list_scope
+R8003 Values.Vint
+R8013 Coq.Lists.List.nil
+R7989 Op.Oadd
+R8020 Coq.Init.Datatypes.Some
+R8126 Integers.eq_spec
+R8140 Integers.zero
+R8157 Integers.eq
+R8166 Integers.zero
+R8126 Integers.eq_spec
+R8140 Integers.zero
+R8157 Integers.eq
+R8166 Integers.zero
+R8225 Integers.add_zero
+R8225 Integers.add_zero
+R8266 Integers.add_zero
+R8266 Integers.add_zero
+R8380 Constprop.make_shlimm
+R8498 Coq.Init.Logic "x = y" type_scope
+R8465 Op.eval_operation
+R8491 Registers "a ## b"
+R8500 Coq.Init.Datatypes.Some
+R8451 Coq.Init.Logic "x = y" type_scope
+R8401 Op.eval_operation
+R8433 Coq.Lists.List "x :: y" list_scope
+R8430 Registers "a # b"
+R8443 Coq.Lists.List "x :: y" list_scope
+R8436 Values.Vint
+R8446 Coq.Lists.List.nil
+R8422 Op.Oshl
+R8453 Coq.Init.Datatypes.Some
+R8559 Integers.eq_spec
+R8573 Integers.zero
+R8590 Integers.eq
+R8599 Integers.zero
+R8559 Integers.eq_spec
+R8573 Integers.zero
+R8590 Integers.eq
+R8599 Integers.zero
+R8658 Integers.shl_zero
+R8658 Integers.shl_zero
+R8720 Integers.ltu
+R8731 Integers.repr
+R8720 Integers.ltu
+R8731 Integers.repr
+R8782 Integers.shl_rolm
+R8782 Integers.shl_rolm
+R8921 Constprop.make_shrimm
+R9039 Coq.Init.Logic "x = y" type_scope
+R9006 Op.eval_operation
+R9032 Registers "a ## b"
+R9041 Coq.Init.Datatypes.Some
+R8992 Coq.Init.Logic "x = y" type_scope
+R8942 Op.eval_operation
+R8974 Coq.Lists.List "x :: y" list_scope
+R8971 Registers "a # b"
+R8984 Coq.Lists.List "x :: y" list_scope
+R8977 Values.Vint
+R8987 Coq.Lists.List.nil
+R8963 Op.Oshr
+R8994 Coq.Init.Datatypes.Some
+R9100 Integers.eq_spec
+R9114 Integers.zero
+R9131 Integers.eq
+R9140 Integers.zero
+R9100 Integers.eq_spec
+R9114 Integers.zero
+R9131 Integers.eq
+R9140 Integers.zero
+R9199 Integers.shr_zero
+R9199 Integers.shr_zero
+R9314 Constprop.make_shruimm
+R9434 Coq.Init.Logic "x = y" type_scope
+R9401 Op.eval_operation
+R9427 Registers "a ## b"
+R9436 Coq.Init.Datatypes.Some
+R9387 Coq.Init.Logic "x = y" type_scope
+R9336 Op.eval_operation
+R9369 Coq.Lists.List "x :: y" list_scope
+R9366 Registers "a # b"
+R9379 Coq.Lists.List "x :: y" list_scope
+R9372 Values.Vint
+R9382 Coq.Lists.List.nil
+R9357 Op.Oshru
+R9389 Coq.Init.Datatypes.Some
+R9496 Integers.eq_spec
+R9510 Integers.zero
+R9527 Integers.eq
+R9536 Integers.zero
+R9496 Integers.eq_spec
+R9510 Integers.zero
+R9527 Integers.eq
+R9536 Integers.zero
+R9595 Integers.shru_zero
+R9595 Integers.shru_zero
+R9658 Integers.ltu
+R9669 Integers.repr
+R9658 Integers.ltu
+R9669 Integers.repr
+R9720 Integers.shru_rolm
+R9720 Integers.shru_rolm
+R9860 Constprop.make_mulimm
+R9978 Coq.Init.Logic "x = y" type_scope
+R9945 Op.eval_operation
+R9971 Registers "a ## b"
+R9980 Coq.Init.Datatypes.Some
+R9931 Coq.Init.Logic "x = y" type_scope
+R9881 Op.eval_operation
+R9913 Coq.Lists.List "x :: y" list_scope
+R9910 Registers "a # b"
+R9923 Coq.Lists.List "x :: y" list_scope
+R9916 Values.Vint
+R9926 Coq.Lists.List.nil
+R9902 Op.Omul
+R9933 Coq.Init.Datatypes.Some
+R10039 Integers.eq_spec
+R10053 Integers.zero
+R10070 Integers.eq
+R10079 Integers.zero
+R10039 Integers.eq_spec
+R10053 Integers.zero
+R10070 Integers.eq
+R10079 Integers.zero
+R10139 Integers.mul_zero
+R10139 Integers.mul_zero
+R10191 Integers.eq_spec
+R10205 Integers.one
+R10221 Integers.eq
+R10230 Integers.one
+R10191 Integers.eq_spec
+R10205 Integers.one
+R10221 Integers.eq
+R10230 Integers.one
+R10296 Integers.mul_one
+R10296 Integers.mul_one
+R10337 Integers.is_power2
+R10337 Integers.is_power2
+R10374 Op.eval_operation
+R10408 Coq.Lists.List "x :: y" list_scope
+R10404 Registers "a # b"
+R10418 Coq.Lists.List "x :: y" list_scope
+R10411 Values.Vint
+R10421 Coq.Lists.List.nil
+R10395 Op.Omul
+R10438 Op.eval_operation
+R10472 Coq.Lists.List "x :: y" list_scope
+R10468 Registers "a # b"
+R10482 Coq.Lists.List "x :: y" list_scope
+R10475 Values.Vint
+R10485 Coq.Lists.List.nil
+R10459 Op.Oshl
+R10374 Op.eval_operation
+R10408 Coq.Lists.List "x :: y" list_scope
+R10404 Registers "a # b"
+R10418 Coq.Lists.List "x :: y" list_scope
+R10411 Values.Vint
+R10421 Coq.Lists.List.nil
+R10395 Op.Omul
+R10438 Op.eval_operation
+R10472 Coq.Lists.List "x :: y" list_scope
+R10468 Registers "a # b"
+R10482 Coq.Lists.List "x :: y" list_scope
+R10475 Values.Vint
+R10485 Coq.Lists.List.nil
+R10459 Op.Oshl
+R10500 Constpropproof.make_shlimm_correct
+R10500 Constpropproof.make_shlimm_correct
+R10543 Integers.is_power2_range
+R10543 Integers.is_power2_range
+R10583 Coq.ZArith.BinInt.Z_of_nat
+R10592 Integers.wordsize
+R10583 Coq.ZArith.BinInt.Z_of_nat
+R10592 Integers.wordsize
+R10643 Registers "a # b"
+R10643 Registers "a # b"
+R10662 Integers.mul_pow2
+R10662 Integers.mul_pow2
+R10774 Constprop.make_andimm
+R10892 Coq.Init.Logic "x = y" type_scope
+R10859 Op.eval_operation
+R10885 Registers "a ## b"
+R10894 Coq.Init.Datatypes.Some
+R10845 Coq.Init.Logic "x = y" type_scope
+R10795 Op.eval_operation
+R10827 Coq.Lists.List "x :: y" list_scope
+R10824 Registers "a # b"
+R10837 Coq.Lists.List "x :: y" list_scope
+R10830 Values.Vint
+R10840 Coq.Lists.List.nil
+R10816 Op.Oand
+R10847 Coq.Init.Datatypes.Some
+R10953 Integers.eq_spec
+R10967 Integers.zero
+R10984 Integers.eq
+R10993 Integers.zero
+R10953 Integers.eq_spec
+R10967 Integers.zero
+R10984 Integers.eq
+R10993 Integers.zero
+R11052 Integers.and_zero
+R11052 Integers.and_zero
+R11097 Integers.eq_spec
+R11111 Integers.mone
+R11128 Integers.eq
+R11137 Integers.mone
+R11097 Integers.eq_spec
+R11111 Integers.mone
+R11128 Integers.eq
+R11137 Integers.mone
+R11196 Integers.and_mone
+R11196 Integers.and_mone
+R11308 Constprop.make_orimm
+R11424 Coq.Init.Logic "x = y" type_scope
+R11391 Op.eval_operation
+R11417 Registers "a ## b"
+R11426 Coq.Init.Datatypes.Some
+R11377 Coq.Init.Logic "x = y" type_scope
+R11328 Op.eval_operation
+R11359 Coq.Lists.List "x :: y" list_scope
+R11356 Registers "a # b"
+R11369 Coq.Lists.List "x :: y" list_scope
+R11362 Values.Vint
+R11372 Coq.Lists.List.nil
+R11349 Op.Oor
+R11379 Coq.Init.Datatypes.Some
+R11484 Integers.eq_spec
+R11498 Integers.zero
+R11515 Integers.eq
+R11524 Integers.zero
+R11484 Integers.eq_spec
+R11498 Integers.zero
+R11515 Integers.eq
+R11524 Integers.zero
+R11583 Integers.or_zero
+R11583 Integers.or_zero
+R11627 Integers.eq_spec
+R11641 Integers.mone
+R11658 Integers.eq
+R11667 Integers.mone
+R11627 Integers.eq_spec
+R11641 Integers.mone
+R11658 Integers.eq
+R11667 Integers.mone
+R11726 Integers.or_mone
+R11726 Integers.or_mone
+R11838 Constprop.make_xorimm
+R11956 Coq.Init.Logic "x = y" type_scope
+R11923 Op.eval_operation
+R11949 Registers "a ## b"
+R11958 Coq.Init.Datatypes.Some
+R11909 Coq.Init.Logic "x = y" type_scope
+R11859 Op.eval_operation
+R11891 Coq.Lists.List "x :: y" list_scope
+R11888 Registers "a # b"
+R11901 Coq.Lists.List "x :: y" list_scope
+R11894 Values.Vint
+R11904 Coq.Lists.List.nil
+R11880 Op.Oxor
+R11911 Coq.Init.Datatypes.Some
+R12017 Integers.eq_spec
+R12031 Integers.zero
+R12048 Integers.eq
+R12057 Integers.zero
+R12017 Integers.eq_spec
+R12031 Integers.zero
+R12048 Integers.eq
+R12057 Integers.zero
+R12116 Integers.xor_zero
+R12116 Integers.xor_zero
+R12244 Constprop.op_strength_reduction
+R12368 Coq.Init.Logic "x = y" type_scope
+R12333 Op.eval_operation
+R12360 Registers "a ## b"
+R12370 Coq.Init.Datatypes.Some
+R12319 Coq.Init.Logic "x = y" type_scope
+R12286 Op.eval_operation
+R12312 Registers "a ## b"
+R12321 Coq.Init.Datatypes.Some
+R12433 Constprop.op_strength_reduction_match
+R12485 Coq.Lists.List.map
+R12433 Constprop.op_strength_reduction_match
+R12485 Coq.Lists.List.map
+R12485 Coq.Lists.List.map
+R12485 Coq.Lists.List.map
+R12485 Coq.Lists.List.map
+R12485 Coq.Lists.List.map
+R12485 Coq.Lists.List.map
+R12485 Coq.Lists.List.map
+R12485 Coq.Lists.List.map
+R12485 Coq.Lists.List.map
+R12485 Coq.Lists.List.map
+R12485 Coq.Lists.List.map
+R12485 Coq.Lists.List.map
+R12485 Coq.Lists.List.map
+R12518 Constprop.intval
+R12518 Constprop.intval
+R12556 Constpropproof.intval_correct
+R12556 Constpropproof.intval_correct
+R12591 Op.eval_operation
+R12625 Coq.Lists.List "x :: y" list_scope
+R12618 Values.Vint
+R12636 Coq.Lists.List "x :: y" list_scope
+R12631 Registers "a # b"
+R12639 Coq.Lists.List.nil
+R12612 Op.Oadd
+R12656 Op.eval_operation
+R12691 Coq.Lists.List "x :: y" list_scope
+R12686 Registers "a # b"
+R12701 Coq.Lists.List "x :: y" list_scope
+R12694 Values.Vint
+R12704 Coq.Lists.List.nil
+R12677 Op.Oadd
+R12591 Op.eval_operation
+R12625 Coq.Lists.List "x :: y" list_scope
+R12618 Values.Vint
+R12636 Coq.Lists.List "x :: y" list_scope
+R12631 Registers "a # b"
+R12639 Coq.Lists.List.nil
+R12612 Op.Oadd
+R12656 Op.eval_operation
+R12691 Coq.Lists.List "x :: y" list_scope
+R12686 Registers "a # b"
+R12701 Coq.Lists.List "x :: y" list_scope
+R12694 Values.Vint
+R12704 Coq.Lists.List.nil
+R12677 Op.Oadd
+R12719 Constpropproof.make_addimm_correct
+R12719 Constpropproof.make_addimm_correct
+R12761 Registers "a # b"
+R12761 Registers "a # b"
+R12780 Integers.add_commut
+R12780 Integers.add_commut
+R12812 Constprop.intval
+R12812 Constprop.intval
+R12850 Constpropproof.intval_correct
+R12850 Constpropproof.intval_correct
+R12880 Constpropproof.make_addimm_correct
+R12880 Constpropproof.make_addimm_correct
+R12938 Constprop.intval
+R12938 Constprop.intval
+R12976 Constpropproof.intval_correct
+R12976 Constpropproof.intval_correct
+R13028 Constprop.intval
+R13028 Constprop.intval
+R13066 Constpropproof.intval_correct
+R13066 Constpropproof.intval_correct
+R13102 Op.eval_operation
+R13137 Coq.Lists.List "x :: y" list_scope
+R13132 Registers "a # b"
+R13147 Coq.Lists.List "x :: y" list_scope
+R13140 Values.Vint
+R13150 Coq.Lists.List.nil
+R13123 Op.Osub
+R13167 Op.eval_operation
+R13202 Coq.Lists.List "x :: y" list_scope
+R13197 Registers "a # b"
+R13222 Coq.Lists.List "x :: y" list_scope
+R13205 Values.Vint
+R13211 Integers.neg
+R13225 Coq.Lists.List.nil
+R13188 Op.Oadd
+R13102 Op.eval_operation
+R13137 Coq.Lists.List "x :: y" list_scope
+R13132 Registers "a # b"
+R13147 Coq.Lists.List "x :: y" list_scope
+R13140 Values.Vint
+R13150 Coq.Lists.List.nil
+R13123 Op.Osub
+R13167 Op.eval_operation
+R13202 Coq.Lists.List "x :: y" list_scope
+R13197 Registers "a # b"
+R13222 Coq.Lists.List "x :: y" list_scope
+R13205 Values.Vint
+R13211 Integers.neg
+R13225 Coq.Lists.List.nil
+R13188 Op.Oadd
+R13240 Constpropproof.make_addimm_correct
+R13240 Constpropproof.make_addimm_correct
+R13281 Registers "a # b"
+R13300 Integers.sub_add_opp
+R13281 Registers "a # b"
+R13300 Integers.sub_add_opp
+R13300 Integers.sub_add_opp
+R13361 Constprop.intval
+R13361 Constprop.intval
+R13399 Constpropproof.intval_correct
+R13399 Constpropproof.intval_correct
+R13434 Op.eval_operation
+R13468 Coq.Lists.List "x :: y" list_scope
+R13461 Values.Vint
+R13479 Coq.Lists.List "x :: y" list_scope
+R13474 Registers "a # b"
+R13482 Coq.Lists.List.nil
+R13455 Op.Omul
+R13499 Op.eval_operation
+R13534 Coq.Lists.List "x :: y" list_scope
+R13529 Registers "a # b"
+R13544 Coq.Lists.List "x :: y" list_scope
+R13537 Values.Vint
+R13547 Coq.Lists.List.nil
+R13520 Op.Omul
+R13434 Op.eval_operation
+R13468 Coq.Lists.List "x :: y" list_scope
+R13461 Values.Vint
+R13479 Coq.Lists.List "x :: y" list_scope
+R13474 Registers "a # b"
+R13482 Coq.Lists.List.nil
+R13455 Op.Omul
+R13499 Op.eval_operation
+R13534 Coq.Lists.List "x :: y" list_scope
+R13529 Registers "a # b"
+R13544 Coq.Lists.List "x :: y" list_scope
+R13537 Values.Vint
+R13547 Coq.Lists.List.nil
+R13520 Op.Omul
+R13562 Constpropproof.make_mulimm_correct
+R13562 Constpropproof.make_mulimm_correct
+R13604 Registers "a # b"
+R13604 Registers "a # b"
+R13623 Integers.mul_commut
+R13623 Integers.mul_commut
+R13655 Constprop.intval
+R13655 Constprop.intval
+R13693 Constpropproof.intval_correct
+R13693 Constpropproof.intval_correct
+R13723 Constpropproof.make_mulimm_correct
+R13723 Constpropproof.make_mulimm_correct
+R13781 Constprop.intval
+R13781 Constprop.intval
+R13818 Integers.is_power2
+R13818 Integers.is_power2
+R13855 Constpropproof.intval_correct
+R13855 Constpropproof.intval_correct
+R13920 Integers.eq
+R13929 Integers.zero
+R13920 Integers.eq
+R13929 Integers.zero
+R13970 Coq.ZArith.BinInt.Z_of_nat
+R13979 Integers.wordsize
+R13970 Coq.ZArith.BinInt.Z_of_nat
+R13979 Integers.wordsize
+R14002 Integers.is_power2_range
+R14002 Integers.is_power2_range
+R14043 Integers.divs_pow2
+R14043 Integers.divs_pow2
+R14133 Constprop.intval
+R14133 Constprop.intval
+R14170 Integers.is_power2
+R14170 Integers.is_power2
+R14207 Constpropproof.intval_correct
+R14207 Constpropproof.intval_correct
+R14241 Op.eval_operation
+R14277 Coq.Lists.List "x :: y" list_scope
+R14272 Registers "a # b"
+R14287 Coq.Lists.List "x :: y" list_scope
+R14280 Values.Vint
+R14290 Coq.Lists.List.nil
+R14262 Op.Odivu
+R14307 Op.eval_operation
+R14343 Coq.Lists.List "x :: y" list_scope
+R14338 Registers "a # b"
+R14354 Coq.Lists.List "x :: y" list_scope
+R14346 Values.Vint
+R14357 Coq.Lists.List.nil
+R14328 Op.Oshru
+R14241 Op.eval_operation
+R14277 Coq.Lists.List "x :: y" list_scope
+R14272 Registers "a # b"
+R14287 Coq.Lists.List "x :: y" list_scope
+R14280 Values.Vint
+R14290 Coq.Lists.List.nil
+R14262 Op.Odivu
+R14307 Op.eval_operation
+R14343 Coq.Lists.List "x :: y" list_scope
+R14338 Registers "a # b"
+R14354 Coq.Lists.List "x :: y" list_scope
+R14346 Values.Vint
+R14357 Coq.Lists.List.nil
+R14328 Op.Oshru
+R14372 Constpropproof.make_shruimm_correct
+R14372 Constpropproof.make_shruimm_correct
+R14415 Registers "a # b"
+R14415 Registers "a # b"
+R14445 Coq.ZArith.BinInt.Z_of_nat
+R14454 Integers.wordsize
+R14445 Coq.ZArith.BinInt.Z_of_nat
+R14454 Integers.wordsize
+R14477 Integers.is_power2_range
+R14477 Integers.is_power2_range
+R14521 Integers.eq_spec
+R14535 Integers.zero
+R14552 Integers.eq
+R14561 Integers.zero
+R14521 Integers.eq_spec
+R14535 Integers.zero
+R14552 Integers.eq
+R14561 Integers.zero
+R14617 Integers.divu_pow2
+R14617 Integers.divu_pow2
+R14700 Constprop.intval
+R14700 Constprop.intval
+R14738 Constpropproof.intval_correct
+R14738 Constpropproof.intval_correct
+R14773 Op.eval_operation
+R14807 Coq.Lists.List "x :: y" list_scope
+R14800 Values.Vint
+R14818 Coq.Lists.List "x :: y" list_scope
+R14813 Registers "a # b"
+R14821 Coq.Lists.List.nil
+R14794 Op.Oand
+R14838 Op.eval_operation
+R14873 Coq.Lists.List "x :: y" list_scope
+R14868 Registers "a # b"
+R14883 Coq.Lists.List "x :: y" list_scope
+R14876 Values.Vint
+R14886 Coq.Lists.List.nil
+R14859 Op.Oand
+R14773 Op.eval_operation
+R14807 Coq.Lists.List "x :: y" list_scope
+R14800 Values.Vint
+R14818 Coq.Lists.List "x :: y" list_scope
+R14813 Registers "a # b"
+R14821 Coq.Lists.List.nil
+R14794 Op.Oand
+R14838 Op.eval_operation
+R14873 Coq.Lists.List "x :: y" list_scope
+R14868 Registers "a # b"
+R14883 Coq.Lists.List "x :: y" list_scope
+R14876 Values.Vint
+R14886 Coq.Lists.List.nil
+R14859 Op.Oand
+R14901 Constpropproof.make_andimm_correct
+R14901 Constpropproof.make_andimm_correct
+R14943 Registers "a # b"
+R14943 Registers "a # b"
+R14962 Integers.and_commut
+R14962 Integers.and_commut
+R14994 Constprop.intval
+R14994 Constprop.intval
+R15032 Constpropproof.intval_correct
+R15032 Constpropproof.intval_correct
+R15062 Constpropproof.make_andimm_correct
+R15062 Constpropproof.make_andimm_correct
+R15119 Constprop.intval
+R15119 Constprop.intval
+R15157 Constpropproof.intval_correct
+R15157 Constpropproof.intval_correct
+R15192 Op.eval_operation
+R15225 Coq.Lists.List "x :: y" list_scope
+R15218 Values.Vint
+R15236 Coq.Lists.List "x :: y" list_scope
+R15231 Registers "a # b"
+R15239 Coq.Lists.List.nil
+R15213 Op.Oor
+R15256 Op.eval_operation
+R15290 Coq.Lists.List "x :: y" list_scope
+R15285 Registers "a # b"
+R15300 Coq.Lists.List "x :: y" list_scope
+R15293 Values.Vint
+R15303 Coq.Lists.List.nil
+R15277 Op.Oor
+R15192 Op.eval_operation
+R15225 Coq.Lists.List "x :: y" list_scope
+R15218 Values.Vint
+R15236 Coq.Lists.List "x :: y" list_scope
+R15231 Registers "a # b"
+R15239 Coq.Lists.List.nil
+R15213 Op.Oor
+R15256 Op.eval_operation
+R15290 Coq.Lists.List "x :: y" list_scope
+R15285 Registers "a # b"
+R15300 Coq.Lists.List "x :: y" list_scope
+R15293 Values.Vint
+R15303 Coq.Lists.List.nil
+R15277 Op.Oor
+R15318 Constpropproof.make_orimm_correct
+R15318 Constpropproof.make_orimm_correct
+R15359 Registers "a # b"
+R15359 Registers "a # b"
+R15378 Integers.or_commut
+R15378 Integers.or_commut
+R15409 Constprop.intval
+R15409 Constprop.intval
+R15447 Constpropproof.intval_correct
+R15447 Constpropproof.intval_correct
+R15477 Constpropproof.make_orimm_correct
+R15477 Constpropproof.make_orimm_correct
+R15534 Constprop.intval
+R15534 Constprop.intval
+R15572 Constpropproof.intval_correct
+R15572 Constpropproof.intval_correct
+R15607 Op.eval_operation
+R15641 Coq.Lists.List "x :: y" list_scope
+R15634 Values.Vint
+R15652 Coq.Lists.List "x :: y" list_scope
+R15647 Registers "a # b"
+R15655 Coq.Lists.List.nil
+R15628 Op.Oxor
+R15672 Op.eval_operation
+R15707 Coq.Lists.List "x :: y" list_scope
+R15702 Registers "a # b"
+R15717 Coq.Lists.List "x :: y" list_scope
+R15710 Values.Vint
+R15720 Coq.Lists.List.nil
+R15693 Op.Oxor
+R15607 Op.eval_operation
+R15641 Coq.Lists.List "x :: y" list_scope
+R15634 Values.Vint
+R15652 Coq.Lists.List "x :: y" list_scope
+R15647 Registers "a # b"
+R15655 Coq.Lists.List.nil
+R15628 Op.Oxor
+R15672 Op.eval_operation
+R15707 Coq.Lists.List "x :: y" list_scope
+R15702 Registers "a # b"
+R15717 Coq.Lists.List "x :: y" list_scope
+R15710 Values.Vint
+R15720 Coq.Lists.List.nil
+R15693 Op.Oxor
+R15735 Constpropproof.make_xorimm_correct
+R15735 Constpropproof.make_xorimm_correct
+R15777 Registers "a # b"
+R15777 Registers "a # b"
+R15796 Integers.xor_commut
+R15796 Integers.xor_commut
+R15828 Constprop.intval
+R15828 Constprop.intval
+R15866 Constpropproof.intval_correct
+R15866 Constpropproof.intval_correct
+R15896 Constpropproof.make_xorimm_correct
+R15896 Constpropproof.make_xorimm_correct
+R15954 Constprop.intval
+R15954 Constprop.intval
+R15991 Integers.ltu
+R16002 Integers.repr
+R15991 Integers.ltu
+R16002 Integers.repr
+R16036 Constpropproof.intval_correct
+R16036 Constpropproof.intval_correct
+R16065 Constpropproof.make_shlimm_correct
+R16065 Constpropproof.make_shlimm_correct
+R16137 Constprop.intval
+R16137 Constprop.intval
+R16174 Integers.ltu
+R16185 Integers.repr
+R16174 Integers.ltu
+R16185 Integers.repr
+R16219 Constpropproof.intval_correct
+R16219 Constpropproof.intval_correct
+R16248 Constpropproof.make_shrimm_correct
+R16248 Constpropproof.make_shrimm_correct
+R16321 Constprop.intval
+R16321 Constprop.intval
+R16358 Integers.ltu
+R16369 Integers.repr
+R16358 Integers.ltu
+R16369 Integers.repr
+R16403 Constpropproof.intval_correct
+R16403 Constpropproof.intval_correct
+R16432 Constpropproof.make_shruimm_correct
+R16432 Constpropproof.make_shruimm_correct
+R16509 Constpropproof.cond_strength_reduction_correct
+R16509 Constpropproof.cond_strength_reduction_correct
+R16560 Constprop.cond_strength_reduction
+R16560 Constprop.cond_strength_reduction
+R16717 Constpropproof.regs_match_approx
+R16774 Coq.Init.Logic "x = y" type_scope
+R16757 Constprop.get
+R16962 Constprop.addr_strength_reduction
+R17046 Coq.Init.Logic "x = y" type_scope
+R17008 Op.eval_addressing
+R17038 Registers "a ## b"
+R17048 Op.eval_addressing
+R17077 Registers "a ## b"
+R17216 Coq.Init.Logic "x = y" type_scope
+R17158 Op.eval_addressing
+R17194 Registers "a ## b"
+R17201 Coq.Lists.List "x :: y" list_scope
+R17207 Coq.Lists.List "x :: y" list_scope
+R17210 Coq.Lists.List.nil
+R17180 Op.Aindexed2
+R17222 Op.eval_addressing
+R17258 Registers "a ## b"
+R17265 Coq.Lists.List "x :: y" list_scope
+R17271 Coq.Lists.List "x :: y" list_scope
+R17274 Coq.Lists.List.nil
+R17244 Op.Aindexed2
+R17216 Coq.Init.Logic "x = y" type_scope
+R17158 Op.eval_addressing
+R17194 Registers "a ## b"
+R17201 Coq.Lists.List "x :: y" list_scope
+R17207 Coq.Lists.List "x :: y" list_scope
+R17210 Coq.Lists.List.nil
+R17180 Op.Aindexed2
+R17222 Op.eval_addressing
+R17258 Registers "a ## b"
+R17265 Coq.Lists.List "x :: y" list_scope
+R17271 Coq.Lists.List "x :: y" list_scope
+R17274 Coq.Lists.List.nil
+R17244 Op.Aindexed2
+R17311 Registers "a # b"
+R17329 Registers "a # b"
+R17351 Integers.add_commut
+R17311 Registers "a # b"
+R17329 Registers "a # b"
+R17329 Registers "a # b"
+R17329 Registers "a # b"
+R17329 Registers "a # b"
+R17351 Integers.add_commut
+R17351 Integers.add_commut
+R17500 Coq.Init.Logic "x = y" type_scope
+R17445 Op.eval_addressing
+R17484 Registers "a ## b"
+R17491 Coq.Lists.List "x :: y" list_scope
+R17494 Coq.Lists.List.nil
+R17468 Op.Aindexed
+R17506 Op.eval_addressing
+R17542 Registers "a ## b"
+R17549 Coq.Lists.List "x :: y" list_scope
+R17555 Coq.Lists.List "x :: y" list_scope
+R17558 Coq.Lists.List.nil
+R17528 Op.Aindexed2
+R17408 Constpropproof.val_match_approx
+R17433 Registers "a # b"
+R17426 Constprop.I
+R17500 Coq.Init.Logic "x = y" type_scope
+R17445 Op.eval_addressing
+R17484 Registers "a ## b"
+R17491 Coq.Lists.List "x :: y" list_scope
+R17494 Coq.Lists.List.nil
+R17468 Op.Aindexed
+R17506 Op.eval_addressing
+R17542 Registers "a ## b"
+R17549 Coq.Lists.List "x :: y" list_scope
+R17555 Coq.Lists.List "x :: y" list_scope
+R17558 Coq.Lists.List.nil
+R17528 Op.Aindexed2
+R17408 Constpropproof.val_match_approx
+R17433 Registers "a # b"
+R17426 Constprop.I
+R17732 Coq.Init.Logic "x = y" type_scope
+R17677 Op.eval_addressing
+R17716 Registers "a ## b"
+R17723 Coq.Lists.List "x :: y" list_scope
+R17726 Coq.Lists.List.nil
+R17700 Op.Aindexed
+R17738 Op.eval_addressing
+R17774 Registers "a ## b"
+R17781 Coq.Lists.List "x :: y" list_scope
+R17787 Coq.Lists.List "x :: y" list_scope
+R17790 Coq.Lists.List.nil
+R17760 Op.Aindexed2
+R17640 Constpropproof.val_match_approx
+R17665 Registers "a # b"
+R17658 Constprop.I
+R17732 Coq.Init.Logic "x = y" type_scope
+R17677 Op.eval_addressing
+R17716 Registers "a ## b"
+R17723 Coq.Lists.List "x :: y" list_scope
+R17726 Coq.Lists.List.nil
+R17700 Op.Aindexed
+R17738 Op.eval_addressing
+R17774 Registers "a ## b"
+R17781 Coq.Lists.List "x :: y" list_scope
+R17787 Coq.Lists.List "x :: y" list_scope
+R17790 Coq.Lists.List.nil
+R17760 Op.Aindexed2
+R17640 Constpropproof.val_match_approx
+R17665 Registers "a # b"
+R17658 Constprop.I
+R17975 Coq.Init.Logic "x = y" type_scope
+R17917 Op.eval_addressing
+R17959 Registers "a ## b"
+R17966 Coq.Lists.List "x :: y" list_scope
+R17969 Coq.Lists.List.nil
+R17940 Op.Abased
+R17981 Op.eval_addressing
+R18017 Registers "a ## b"
+R18024 Coq.Lists.List "x :: y" list_scope
+R18030 Coq.Lists.List "x :: y" list_scope
+R18033 Coq.Lists.List.nil
+R18003 Op.Aindexed2
+R17876 Constpropproof.val_match_approx
+R17906 Registers "a # b"
+R17894 Constprop.S
+R17975 Coq.Init.Logic "x = y" type_scope
+R17917 Op.eval_addressing
+R17959 Registers "a ## b"
+R17966 Coq.Lists.List "x :: y" list_scope
+R17969 Coq.Lists.List.nil
+R17940 Op.Abased
+R17981 Op.eval_addressing
+R18017 Registers "a ## b"
+R18024 Coq.Lists.List "x :: y" list_scope
+R18030 Coq.Lists.List "x :: y" list_scope
+R18033 Coq.Lists.List.nil
+R18003 Op.Aindexed2
+R17876 Constpropproof.val_match_approx
+R17906 Registers "a # b"
+R17894 Constprop.S
+R18249 Coq.Init.Logic "x = y" type_scope
+R18191 Op.eval_addressing
+R18233 Registers "a ## b"
+R18240 Coq.Lists.List "x :: y" list_scope
+R18243 Coq.Lists.List.nil
+R18214 Op.Abased
+R18255 Op.eval_addressing
+R18291 Registers "a ## b"
+R18298 Coq.Lists.List "x :: y" list_scope
+R18304 Coq.Lists.List "x :: y" list_scope
+R18307 Coq.Lists.List.nil
+R18277 Op.Aindexed2
+R18150 Constpropproof.val_match_approx
+R18180 Registers "a # b"
+R18168 Constprop.S
+R18249 Coq.Init.Logic "x = y" type_scope
+R18191 Op.eval_addressing
+R18233 Registers "a ## b"
+R18240 Coq.Lists.List "x :: y" list_scope
+R18243 Coq.Lists.List.nil
+R18214 Op.Abased
+R18255 Op.eval_addressing
+R18291 Registers "a ## b"
+R18298 Coq.Lists.List "x :: y" list_scope
+R18304 Coq.Lists.List "x :: y" list_scope
+R18307 Coq.Lists.List.nil
+R18277 Op.Aindexed2
+R18150 Constpropproof.val_match_approx
+R18180 Registers "a # b"
+R18168 Constprop.S
+R18527 Coq.Init.Logic "x = y" type_scope
+R18472 Op.eval_addressing
+R18523 Coq.Lists.List.nil
+R18495 Op.Aglobal
+R18507 Integers.add
+R18533 Op.eval_addressing
+R18569 Registers "a ## b"
+R18576 Coq.Lists.List "x :: y" list_scope
+R18582 Coq.Lists.List "x :: y" list_scope
+R18585 Coq.Lists.List.nil
+R18555 Op.Aindexed2
+R18436 Constpropproof.val_match_approx
+R18461 Registers "a # b"
+R18454 Constprop.I
+R18395 Constpropproof.val_match_approx
+R18425 Registers "a # b"
+R18413 Constprop.S
+R18527 Coq.Init.Logic "x = y" type_scope
+R18472 Op.eval_addressing
+R18523 Coq.Lists.List.nil
+R18495 Op.Aglobal
+R18507 Integers.add
+R18533 Op.eval_addressing
+R18569 Registers "a ## b"
+R18576 Coq.Lists.List "x :: y" list_scope
+R18582 Coq.Lists.List "x :: y" list_scope
+R18585 Coq.Lists.List.nil
+R18555 Op.Aindexed2
+R18436 Constpropproof.val_match_approx
+R18461 Registers "a # b"
+R18454 Constprop.I
+R18395 Constpropproof.val_match_approx
+R18425 Registers "a # b"
+R18413 Constprop.S
+R18733 Constprop.addr_strength_reduction_match
+R18733 Constprop.addr_strength_reduction_match
+R18812 Constprop.get
+R18848 Constprop.get
+R18812 Constprop.get
+R18848 Constprop.get
+R18848 Constprop.get
+R18848 Constprop.get
+R18848 Constprop.get
+R18848 Constprop.get
+R18934 Integers.add_commut
+R18934 Integers.add_commut
+R18992 Constprop.intval
+R18992 Constprop.intval
+R19037 Constpropproof.intval_correct
+R19037 Constpropproof.intval_correct
+R19102 Constprop.get
+R19102 Constprop.get
+R19328 RTL.program
+R19350 Constprop.transf_program
+R19381 Globalenvs.globalenv
+R19413 Globalenvs.globalenv
+R19505 Coq.Init.Logic "x = y" type_scope
+R19482 Globalenvs.find_symbol
+R19507 Globalenvs.find_symbol
+R19474 AST.ident
+R19537 Globalenvs.find_symbol_transf
+R19561 Constprop.transf_function
+R19709 Coq.Init.Logic "x = y" type_scope
+R19687 Globalenvs.find_funct
+R19711 Coq.Init.Datatypes.Some
+R19717 Constprop.transf_function
+R19673 Coq.Init.Logic "x = y" type_scope
+R19652 Globalenvs.find_funct
+R19675 Coq.Init.Datatypes.Some
+R19635 RTL.function
+R19626 Values.val
+R19745 Globalenvs.find_funct_transf
+R19772 Constprop.transf_function
+R19933 Coq.Init.Logic "x = y" type_scope
+R19907 Globalenvs.find_funct_ptr
+R19935 Coq.Init.Datatypes.Some
+R19941 Constprop.transf_function
+R19893 Coq.Init.Logic "x = y" type_scope
+R19868 Globalenvs.find_funct_ptr
+R19895 Coq.Init.Datatypes.Some
+R19851 RTL.function
+R19840 Values.block
+R19969 Globalenvs.find_funct_ptr_transf
+R20000 Constprop.transf_function
+R20272 Coq.Init.Logic "A /\ B" type_scope
+R20233 RTL.exec_instr
+R20427 RTL.exec_instr
+R20443 Constprop.transf_code
+R20387 Constpropproof.regs_match_approx
+R20415 Maps "a !! b"
+R20354 Coq.Init.Logic "x = y" type_scope
+R20344 Constprop.analyze
+R20356 Coq.Init.Datatypes.Some
+R20310 Coq.Init.Logic "x = y" type_scope
+R20315 RTL.fn_code
+R20216 Mem.mem
+R20203 RTL.regset
+R20191 RTL.node
+R20172 Mem.mem
+R20160 RTL.regset
+R20149 RTL.node
+R20131 Values.val
+R20120 RTL.code
+R20683 Coq.Init.Logic "A /\ B" type_scope
+R20643 RTL.exec_instrs
+R20838 RTL.exec_instrs
+R20855 Constprop.transf_code
+R20798 Constpropproof.regs_match_approx
+R20826 Maps "a !! b"
+R20765 Coq.Init.Logic "x = y" type_scope
+R20755 Constprop.analyze
+R20767 Coq.Init.Datatypes.Some
+R20721 Coq.Init.Logic "x = y" type_scope
+R20726 RTL.fn_code
+R20626 Mem.mem
+R20613 RTL.regset
+R20601 RTL.node
+R20582 Mem.mem
+R20570 RTL.regset
+R20559 RTL.node
+R20541 Values.val
+R20530 RTL.code
+R21025 RTL.exec_function
+R21044 Constprop.transf_function
+R21008 Mem.mem
+R20998 Values.val
+R20979 Mem.mem
+R20965 Coq.Lists.List.list
+R20970 Values.val
+R20944 RTL.function
+R21143 Coq.Init.Logic "x = y" type_scope
+R21126 Maps.get
+R21145 Coq.Init.Datatypes.Some
+R21179 Coq.Init.Logic "x = y" type_scope
+R21168 Constprop.analyze
+R21181 Coq.Init.Datatypes.Some
+R21242 Coq.Init.Logic "x = y" type_scope
+R21237 Maps "a ! b"
+R21216 Constprop.transf_code
+R21244 Coq.Init.Datatypes.Some
+R21249 Constprop.transf_instr
+R21269 Maps "a !! b"
+R21333 Maps.gmap
+R21501 Constpropproof.exec_function_prop
+R21463 RTL.exec_function
+R21553 RTL.exec_function_ind_3
+R21619 Constpropproof.exec_function_prop
+R21602 Constpropproof.exec_instrs_prop
+R21586 Constpropproof.exec_instr_prop
+R21553 RTL.exec_function_ind_3
+R21619 Constpropproof.exec_function_prop
+R21602 Constpropproof.exec_instrs_prop
+R21586 Constpropproof.exec_instr_prop
+R21715 RTL.exec_Inop
+R21715 RTL.exec_Inop
+R21748 RTL.exec_Inop
+R21748 RTL.exec_Inop
+R21824 RTL.exec_Iop
+R21824 RTL.exec_Iop
+R21865 Op.eval_operation_preserved
+R21890 Constpropproof.symbols_preserved
+R21865 Op.eval_operation_preserved
+R21890 Constpropproof.symbols_preserved
+R21926 Constprop.op_strength_reduction
+R21955 Maps "a !! b"
+R21926 Constprop.op_strength_reduction
+R21955 Maps "a !! b"
+R22040 Coq.Init.Logic "x = y" type_scope
+R22004 Op.eval_operation
+R22032 Registers "a ## b"
+R22042 Coq.Init.Datatypes.Some
+R22040 Coq.Init.Logic "x = y" type_scope
+R22004 Op.eval_operation
+R22032 Registers "a ## b"
+R22042 Coq.Init.Datatypes.Some
+R22064 Op.eval_operation_preserved
+R22089 Constpropproof.symbols_preserved
+R22064 Op.eval_operation_preserved
+R22089 Constpropproof.symbols_preserved
+R22126 Constpropproof.op_strength_reduction_correct
+R22166 Maps "a !! b"
+R22126 Constpropproof.op_strength_reduction_correct
+R22166 Maps "a !! b"
+R22257 Constpropproof.eval_static_operation_correct
+R22369 Constpropproof.approx_regs_val_list
+R22344 Registers "a ## b"
+R22312 Constprop.approx_regs
+R22336 Maps "a !! b"
+R22257 Constpropproof.eval_static_operation_correct
+R22369 Constpropproof.approx_regs_val_list
+R22344 Registers "a ## b"
+R22312 Constprop.approx_regs
+R22336 Maps "a !! b"
+R22421 Constprop.eval_static_operation
+R22447 Constprop.approx_regs
+R22471 Maps "a !! b"
+R22511 RTL.exec_Iop
+R22421 Constprop.eval_static_operation
+R22447 Constprop.approx_regs
+R22471 Maps "a !! b"
+R22511 RTL.exec_Iop
+R22511 RTL.exec_Iop
+R22511 RTL.exec_Iop
+R22511 RTL.exec_Iop
+R22511 RTL.exec_Iop
+R22624 Constpropproof.symbols_preserved
+R22624 Constpropproof.symbols_preserved
+R22736 RTL.exec_Iload
+R22736 RTL.exec_Iload
+R22767 Op.eval_addressing_preserved
+R22793 Constpropproof.symbols_preserved
+R22767 Op.eval_addressing_preserved
+R22793 Constpropproof.symbols_preserved
+R22829 Constprop.addr_strength_reduction
+R22860 Maps "a !! b"
+R22829 Constprop.addr_strength_reduction
+R22860 Maps "a !! b"
+R22952 Coq.Init.Logic "x = y" type_scope
+R22913 Op.eval_addressing
+R22944 Registers "a ## b"
+R22954 Coq.Init.Datatypes.Some
+R22952 Coq.Init.Logic "x = y" type_scope
+R22913 Op.eval_addressing
+R22944 Registers "a ## b"
+R22954 Coq.Init.Datatypes.Some
+R22976 Op.eval_addressing_preserved
+R23002 Constpropproof.symbols_preserved
+R22976 Op.eval_addressing_preserved
+R23002 Constpropproof.symbols_preserved
+R23039 Constpropproof.addr_strength_reduction_correct
+R23081 Maps "a !! b"
+R23039 Constpropproof.addr_strength_reduction_correct
+R23081 Maps "a !! b"
+R23181 RTL.exec_Iload
+R23181 RTL.exec_Iload
+R23264 RTL.exec_Istore
+R23264 RTL.exec_Istore
+R23295 Op.eval_addressing_preserved
+R23321 Constpropproof.symbols_preserved
+R23295 Op.eval_addressing_preserved
+R23321 Constpropproof.symbols_preserved
+R23357 Constprop.addr_strength_reduction
+R23388 Maps "a !! b"
+R23357 Constprop.addr_strength_reduction
+R23388 Maps "a !! b"
+R23480 Coq.Init.Logic "x = y" type_scope
+R23441 Op.eval_addressing
+R23472 Registers "a ## b"
+R23482 Coq.Init.Datatypes.Some
+R23480 Coq.Init.Logic "x = y" type_scope
+R23441 Op.eval_addressing
+R23472 Registers "a ## b"
+R23482 Coq.Init.Datatypes.Some
+R23504 Op.eval_addressing_preserved
+R23530 Constpropproof.symbols_preserved
+R23504 Op.eval_addressing_preserved
+R23530 Constpropproof.symbols_preserved
+R23567 Constpropproof.addr_strength_reduction_correct
+R23609 Maps "a !! b"
+R23567 Constpropproof.addr_strength_reduction_correct
+R23609 Maps "a !! b"
+R23708 RTL.exec_Istore
+R23708 RTL.exec_Istore
+R23778 Coq.Init.Logic "x = y" type_scope
+R23753 RTL.find_function
+R23780 Coq.Init.Datatypes.Some
+R23786 Constprop.transf_function
+R23778 Coq.Init.Logic "x = y" type_scope
+R23753 RTL.find_function
+R23780 Coq.Init.Datatypes.Some
+R23786 Constprop.transf_function
+R23868 Constpropproof.functions_translated
+R23868 Constpropproof.functions_translated
+R23901 Constpropproof.symbols_preserved
+R23901 Constpropproof.symbols_preserved
+R23930 Globalenvs.find_symbol
+R23930 Globalenvs.find_symbol
+R23962 Constpropproof.function_ptr_translated
+R23962 Constpropproof.function_ptr_translated
+R24013 Coq.Init.Logic "x = y" type_scope
+R24015 RTL.fn_sig
+R24023 Constprop.transf_function
+R24013 Coq.Init.Logic "x = y" type_scope
+R24015 RTL.fn_sig
+R24023 Constprop.transf_function
+R24092 Constprop.analyze
+R24092 Constprop.analyze
+R24165 RTL.exec_Icall
+R24165 RTL.exec_Icall
+R24226 Coq.Init.Datatypes.inl
+R24250 Constprop.get
+R24266 Maps "a !! b"
+R24288 Constprop.Novalue
+R24314 Constprop.Unknown
+R24340 Constprop.I
+R24362 Constprop.F
+R24384 Constprop.S
+R24401 Integers.eq
+R24412 Integers.zero
+R24426 Coq.Init.Datatypes.inr
+R24430 Registers.reg
+R24468 Coq.Init.Datatypes.inr
+R24226 Coq.Init.Datatypes.inl
+R24250 Constprop.get
+R24266 Maps "a !! b"
+R24288 Constprop.Novalue
+R24314 Constprop.Unknown
+R24340 Constprop.I
+R24362 Constprop.F
+R24384 Constprop.S
+R24401 Integers.eq
+R24412 Integers.zero
+R24426 Coq.Init.Datatypes.inr
+R24430 Registers.reg
+R24468 Coq.Init.Datatypes.inr
+R24509 RTL.exec_Icall
+R24509 RTL.exec_Icall
+R24574 Constprop.get
+R24589 Maps "a !! b"
+R24574 Constprop.get
+R24589 Maps "a !! b"
+R24624 Integers.eq_spec
+R24639 Integers.zero
+R24656 Integers.eq
+R24666 Integers.zero
+R24624 Integers.eq_spec
+R24639 Integers.zero
+R24656 Integers.eq
+R24666 Integers.zero
+R24758 Constpropproof.symbols_preserved
+R24758 Constpropproof.symbols_preserved
+R24850 Globalenvs.find_funct_find_funct_ptr
+R24850 Globalenvs.find_funct_find_funct_ptr
+R24957 RTL.exec_Icond_true
+R24957 RTL.exec_Icond_true
+R24991 Constprop.cond_strength_reduction
+R25022 Maps "a !! b"
+R24991 Constprop.cond_strength_reduction
+R25022 Maps "a !! b"
+R25106 Coq.Init.Logic "x = y" type_scope
+R25075 Op.eval_condition
+R25098 Registers "a ## b"
+R25108 Coq.Init.Datatypes.Some
+R25113 Coq.Init.Datatypes.true
+R25106 Coq.Init.Logic "x = y" type_scope
+R25075 Op.eval_condition
+R25098 Registers "a ## b"
+R25108 Coq.Init.Datatypes.Some
+R25113 Coq.Init.Datatypes.true
+R25136 Constpropproof.cond_strength_reduction_correct
+R25196 Maps "a !! b"
+R25136 Constpropproof.cond_strength_reduction_correct
+R25196 Maps "a !! b"
+R25269 Constprop.eval_static_condition
+R25297 Constprop.approx_regs
+R25321 Maps "a !! b"
+R25269 Constprop.eval_static_condition
+R25297 Constprop.approx_regs
+R25321 Maps "a !! b"
+R25360 Constpropproof.eval_static_condition_correct
+R25420 Constpropproof.approx_regs_val_list
+R25360 Constpropproof.eval_static_condition_correct
+R25420 Constpropproof.approx_regs_val_list
+R25489 Coq.Init.Datatypes.true
+R25489 Coq.Init.Datatypes.true
+R25509 RTL.exec_Inop
+R25509 RTL.exec_Inop
+R25556 RTL.exec_Icond_true
+R25556 RTL.exec_Icond_true
+R25651 RTL.exec_Icond_false
+R25651 RTL.exec_Icond_false
+R25686 Constprop.cond_strength_reduction
+R25717 Maps "a !! b"
+R25686 Constprop.cond_strength_reduction
+R25717 Maps "a !! b"
+R25801 Coq.Init.Logic "x = y" type_scope
+R25770 Op.eval_condition
+R25793 Registers "a ## b"
+R25803 Coq.Init.Datatypes.Some
+R25808 Coq.Init.Datatypes.false
+R25801 Coq.Init.Logic "x = y" type_scope
+R25770 Op.eval_condition
+R25793 Registers "a ## b"
+R25803 Coq.Init.Datatypes.Some
+R25808 Coq.Init.Datatypes.false
+R25832 Constpropproof.cond_strength_reduction_correct
+R25892 Maps "a !! b"
+R25832 Constpropproof.cond_strength_reduction_correct
+R25892 Maps "a !! b"
+R25965 Constprop.eval_static_condition
+R25993 Constprop.approx_regs
+R26017 Maps "a !! b"
+R25965 Constprop.eval_static_condition
+R25993 Constprop.approx_regs
+R26017 Maps "a !! b"
+R26056 Constpropproof.eval_static_condition_correct
+R26116 Constpropproof.approx_regs_val_list
+R26056 Constpropproof.eval_static_condition_correct
+R26116 Constpropproof.approx_regs_val_list
+R26185 Coq.Init.Datatypes.false
+R26185 Coq.Init.Datatypes.false
+R26206 RTL.exec_Inop
+R26206 RTL.exec_Inop
+R26253 RTL.exec_Icond_false
+R26253 RTL.exec_Icond_false
+R26308 RTL.exec_refl
+R26308 RTL.exec_refl
+R26333 RTL.exec_refl
+R26333 RTL.exec_refl
+R26390 RTL.exec_one
+R26390 RTL.exec_one
+R26422 RTL.exec_one
+R26422 RTL.exec_one
+R26517 RTL.exec_trans
+R26517 RTL.exec_trans
+R26567 RTL.exec_trans
+R26567 RTL.exec_trans
+R26642 Constpropproof.analyze_correct_2
+R26642 Constpropproof.analyze_correct_2
+R26741 Constprop.analyze
+R26741 Constprop.analyze
+R26785 RTL.exec_funct
+R26785 RTL.exec_funct
+R26853 Constpropproof.analyze_correct_3
+R26853 Constpropproof.analyze_correct_3
+R26916 RTL.exec_funct
+R26916 RTL.exec_funct
+R27017 RTL.exec_program
+R26994 RTL.exec_program
+R26986 Values.val
+R27120 Constprop.transf_function
+R27120 Constprop.transf_function
+R27191 AST.prog_main
+R27168 AST.prog_main
+R27191 AST.prog_main
+R27168 AST.prog_main
+R27218 Constpropproof.symbols_preserved
+R27218 Constpropproof.symbols_preserved
+R27258 Constpropproof.function_ptr_translated
+R27258 Constpropproof.function_ptr_translated
+R27351 Constprop.analyze
+R27351 Constprop.analyze
+R27384 Constpropproof.transf_funct_correct
+R27384 Constpropproof.transf_funct_correct
+R27447 Globalenvs.init_mem_transf
+R27447 Globalenvs.init_mem_transf
+FCSE
+R316 Coq.NArith.BinPos.positive
+R371 Coq.Lists.List.list
+R376 CSE.valnum
+R358 Op.operation
+R430 Coq.Lists.List.list
+R435 CSE.valnum
+R416 Op.addressing
+R400 AST.memory_chunk
+R495 Coq.Init.Specif "{ A } + { B }" type_scope
+R497 Coq.Init.Logic "x = y" type_scope
+R503 Coq.Init.Logic "x <> y" type_scope
+R486 CSE.valnum
+R486 CSE.valnum
+R511 Coqlib.peq
+R564 Coq.Init.Specif "{ A } + { B }" type_scope
+R566 Coq.Init.Logic "x = y" type_scope
+R572 Coq.Init.Logic "x <> y" type_scope
+R549 Coq.Lists.List.list
+R554 CSE.valnum
+R549 Coq.Lists.List.list
+R554 CSE.valnum
+R688 CSE.eq_valnum
+R688 CSE.eq_valnum
+R835 Coq.Init.Specif "{ A } + { B }" type_scope
+R837 Coq.Init.Logic "x = y" type_scope
+R843 Coq.Init.Logic "x <> y" type_scope
+R828 CSE.rhs
+R828 CSE.rhs
+R869 Integers.eq_dec
+R869 Integers.eq_dec
+R901 Floats.eq_dec
+R901 Floats.eq_dec
+R953 Coq.Init.Specif "{ A } + { B }" type_scope
+R955 Coq.Init.Logic "x = y" type_scope
+R961 Coq.Init.Logic "x <> y" type_scope
+R945 AST.ident
+R945 AST.ident
+R953 Coq.Init.Specif "{ A } + { B }" type_scope
+R955 Coq.Init.Logic "x = y" type_scope
+R961 Coq.Init.Logic "x <> y" type_scope
+R945 AST.ident
+R945 AST.ident
+R974 Coqlib.peq
+R974 Coqlib.peq
+R1015 Coq.Init.Specif "{ A } + { B }" type_scope
+R1017 Coq.Init.Logic "x = y" type_scope
+R1023 Coq.Init.Logic "x <> y" type_scope
+R1002 AST.comparison
+R1002 AST.comparison
+R1015 Coq.Init.Specif "{ A } + { B }" type_scope
+R1017 Coq.Init.Logic "x = y" type_scope
+R1023 Coq.Init.Logic "x <> y" type_scope
+R1002 AST.comparison
+R1002 AST.comparison
+R1082 Coq.Init.Specif "{ A } + { B }" type_scope
+R1084 Coq.Init.Logic "x = y" type_scope
+R1090 Coq.Init.Logic "x <> y" type_scope
+R1070 Op.condition
+R1070 Op.condition
+R1082 Coq.Init.Specif "{ A } + { B }" type_scope
+R1084 Coq.Init.Logic "x = y" type_scope
+R1090 Coq.Init.Logic "x <> y" type_scope
+R1070 Op.condition
+R1070 Op.condition
+R1149 Coq.Init.Specif "{ A } + { B }" type_scope
+R1151 Coq.Init.Logic "x = y" type_scope
+R1157 Coq.Init.Logic "x <> y" type_scope
+R1137 Op.operation
+R1137 Op.operation
+R1149 Coq.Init.Specif "{ A } + { B }" type_scope
+R1151 Coq.Init.Logic "x = y" type_scope
+R1157 Coq.Init.Logic "x <> y" type_scope
+R1137 Op.operation
+R1137 Op.operation
+R1219 Coq.Init.Specif "{ A } + { B }" type_scope
+R1221 Coq.Init.Logic "x = y" type_scope
+R1227 Coq.Init.Logic "x <> y" type_scope
+R1204 AST.memory_chunk
+R1204 AST.memory_chunk
+R1219 Coq.Init.Specif "{ A } + { B }" type_scope
+R1221 Coq.Init.Logic "x = y" type_scope
+R1227 Coq.Init.Logic "x <> y" type_scope
+R1204 AST.memory_chunk
+R1204 AST.memory_chunk
+R1287 Coq.Init.Specif "{ A } + { B }" type_scope
+R1289 Coq.Init.Logic "x = y" type_scope
+R1295 Coq.Init.Logic "x <> y" type_scope
+R1274 Op.addressing
+R1274 Op.addressing
+R1287 Coq.Init.Specif "{ A } + { B }" type_scope
+R1289 Coq.Init.Logic "x = y" type_scope
+R1295 Coq.Init.Logic "x <> y" type_scope
+R1274 Op.addressing
+R1274 Op.addressing
+R1332 CSE.eq_valnum
+R1332 CSE.eq_valnum
+R1363 CSE.eq_list_valnum
+R1363 CSE.eq_list_valnum
+R1463 CSE.valnum
+R1482 Coq.Lists.List.list
+R1495 Coq.Init.Datatypes "x * y" type_scope
+R1488 CSE.valnum
+R1497 CSE.rhs
+R1514 Maps.t
+R1522 CSE.valnum
+R1565 CSE.mknumbering
+R1593 Maps.empty
+R1605 CSE.valnum
+R1588 Coq.Lists.List.nil
+R1673 Coq.Init.Datatypes "x * y" type_scope
+R1663 CSE.numbering
+R1675 CSE.valnum
+R1693 Maps.get
+R1708 CSE.num_reg
+R1726 Coq.Init.Datatypes.Some
+R1736 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R1747 Coq.Init.Datatypes.None
+R1757 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R1758 CSE.mknumbering
+R1858 Maps.set
+R1886 CSE.num_reg
+R1873 CSE.num_next
+R1821 CSE.num_eqs
+R1771 Coq.NArith.BinPos.Psucc
+R1780 CSE.num_next
+R1915 CSE.num_next
+R1656 Registers.reg
+R1641 CSE.numbering
+R2030 Coq.Init.Datatypes "x * y" type_scope
+R2020 CSE.numbering
+R2032 Coq.Lists.List.list
+R2037 CSE.valnum
+R1975 Coq.Lists.List.list
+R1980 Registers.reg
+R1959 CSE.numbering
+R2067 Coq.Lists.List.nil
+R2080 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R2084 Coq.Lists.List.nil
+R2096 Coq.Lists.List "x :: y" list_scope
+R2127 CSE.valnum_reg
+R2195 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R2203 Coq.Lists.List "x :: y" list_scope
+R1975 Coq.Lists.List.list
+R1980 Registers.reg
+R1959 CSE.numbering
+R2270 Coq.Lists.List.list
+R2283 Coq.Init.Datatypes "x * y" type_scope
+R2276 CSE.valnum
+R2285 CSE.rhs
+R2247 Coq.Lists.List.list
+R2260 Coq.Init.Datatypes "x * y" type_scope
+R2253 CSE.valnum
+R2262 CSE.rhs
+R2314 Coq.Lists.List.nil
+R2321 Coq.Lists.List.nil
+R2345 Coq.Lists.List "x :: y" list_scope
+R2329 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R2333 CSE.Load
+R2382 Coq.Lists.List "x :: y" list_scope
+R2397 Coq.Lists.List "x :: y" list_scope
+R2247 Coq.Lists.List.list
+R2260 Coq.Init.Datatypes "x * y" type_scope
+R2253 CSE.valnum
+R2262 CSE.rhs
+R2527 Coq.Init.Datatypes.option
+R2534 CSE.valnum
+R2466 Coq.Lists.List.list
+R2479 Coq.Init.Datatypes "x * y" type_scope
+R2472 CSE.valnum
+R2481 CSE.rhs
+R2455 CSE.rhs
+R2565 Coq.Lists.List.nil
+R2572 Coq.Init.Datatypes.None
+R2589 Coq.Lists.List "x :: y" list_scope
+R2581 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R2609 CSE.eq_rhs
+R2626 Coq.Init.Datatypes.Some
+R2466 Coq.Lists.List.list
+R2479 Coq.Init.Datatypes "x * y" type_scope
+R2472 CSE.valnum
+R2481 CSE.rhs
+R2455 CSE.rhs
+R2725 CSE.numbering
+R2746 CSE.find_valnum_rhs
+R2768 CSE.num_eqs
+R2786 Coq.Init.Datatypes.Some
+R2805 CSE.mknumbering
+R2861 Maps.set
+R2882 CSE.num_reg
+R2833 CSE.num_eqs
+R2820 CSE.num_next
+R2896 Coq.Init.Datatypes.None
+R2910 CSE.mknumbering
+R3016 Maps.set
+R3045 CSE.num_reg
+R3032 CSE.num_next
+R2981 Coq.Lists.List "x :: y" list_scope
+R2962 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R2966 CSE.num_next
+R2987 CSE.num_eqs
+R2923 Coq.NArith.BinPos.Psucc
+R2932 CSE.num_next
+R2718 CSE.rhs
+R2708 Registers.reg
+R2692 CSE.numbering
+R3158 CSE.valnum_regs
+R3180 CSE.add_rhs
+R3195 CSE.Op
+R3127 Coq.Lists.List.list
+R3132 Registers.reg
+R3111 Op.operation
+R3101 Registers.reg
+R3085 CSE.numbering
+R3370 CSE.valnum_regs
+R3392 CSE.add_rhs
+R3407 CSE.Load
+R3339 Coq.Lists.List.list
+R3344 Registers.reg
+R3302 Op.addressing
+R3281 AST.memory_chunk
+R3247 Registers.reg
+R3231 CSE.numbering
+R3468 CSE.numbering
+R3483 CSE.mknumbering
+R3567 CSE.num_reg
+R3523 CSE.kill_load_eqs
+R3540 CSE.num_eqs
+R3498 CSE.num_next
+R3455 CSE.numbering
+R3630 Coq.Init.Datatypes.option
+R3637 Registers.reg
+R3646 Maps.fold
+R3765 Coq.Init.Datatypes.None
+R3756 CSE.num_reg
+R3718 Coqlib.peq
+R3732 Coq.Init.Datatypes.Some
+R3697 CSE.valnum
+R3688 Registers.reg
+R3672 Coq.Init.Datatypes.option
+R3679 Registers.reg
+R3620 CSE.valnum
+R3604 CSE.numbering
+R3819 Coq.Init.Datatypes.option
+R3826 Registers.reg
+R3841 CSE.find_valnum_rhs
+R3863 CSE.num_eqs
+R3881 Coq.Init.Datatypes.None
+R3889 Coq.Init.Datatypes.None
+R3898 Coq.Init.Datatypes.Some
+R3911 CSE.reg_valnum
+R3812 CSE.rhs
+R3796 CSE.numbering
+R4008 Coq.Init.Datatypes.option
+R4015 Registers.reg
+R4040 CSE.valnum_regs
+R4062 CSE.find_rhs
+R4075 CSE.Op
+R3996 Coq.Lists.List.list
+R4001 Registers.reg
+R3980 Op.operation
+R3964 CSE.numbering
+R4185 Coq.Init.Datatypes.option
+R4192 Registers.reg
+R4217 CSE.valnum_regs
+R4239 CSE.find_rhs
+R4252 CSE.Load
+R4173 Coq.Lists.List.list
+R4178 Registers.reg
+R4156 Op.addressing
+R4135 AST.memory_chunk
+R4116 CSE.numbering
+R4539 CSE.Op
+R4605 Coq.Init.Logic "x = y" type_scope
+R4557 Op.eval_operation
+R4582 Coq.Lists.List.map
+R4613 Coq.Init.Datatypes.Some
+R4639 CSE.Load
+R4667 Coq.Init.Logic "'exists' x , p" type_scope
+R4743 Coq.Init.Logic "A /\ B" type_scope
+R4734 Coq.Init.Logic "x = y" type_scope
+R4683 Op.eval_addressing
+R4711 Coq.Lists.List.map
+R4736 Coq.Init.Datatypes.Some
+R4768 Coq.Init.Logic "x = y" type_scope
+R4752 Mem.loadv
+R4770 Coq.Init.Datatypes.Some
+R4504 CSE.rhs
+R4491 CSE.valnum
+R4473 Mem.mem
+R4464 Values.val
+R4453 RTL.genv
+R4438 Values.val
+R4428 CSE.valnum
+R5027 Coq.Init.Logic "A /\ B" type_scope
+R4989 CSE.equation_holds
+R4955 Coq.Lists.List.In
+R4970 CSE.num_eqs
+R4958 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R5097 Coq.Init.Logic "x = y" type_scope
+R5094 Registers "a # b"
+R5079 Coq.Init.Logic "x = y" type_scope
+R5055 Maps.get
+R5070 CSE.num_reg
+R5081 Coq.Init.Datatypes.Some
+R4907 CSE.numbering
+R4898 Mem.mem
+R4886 RTL.regset
+R4876 Values.val
+R4865 RTL.genv
+R4852 Values.val
+R4842 CSE.valnum
+R5221 Coq.Init.Logic "'exists' x , p" type_scope
+R5239 CSE.numbering_holds
+R5198 CSE.numbering
+R5189 Mem.mem
+R5177 RTL.regset
+R5167 Values.val
+R5156 RTL.genv
+R5336 CSE.numbering_satisfiable
+R5369 CSE.empty_numbering
+R5439 Values.Vundef
+R5428 CSE.valnum
+R5439 Values.Vundef
+R5428 CSE.valnum
+R5490 Maps.gempty
+R5490 Maps.gempty
+R5567 CSE.numbering
+R5694 CSE.numbering_satisfiable
+R5651 CSE.numbering_satisfiable
+R5602 CSE.numbering
+R5602 CSE.numbering
+R5751 CSE.empty_numbering
+R5794 CSE.ge
+R5797 CSE.top
+R5856 CSE.empty_numbering_satisfiable
+R5856 CSE.empty_numbering_satisfiable
+R5919 CSE.ge
+R6133 Maps "a ! b"
+R6125 RTL.fn_code
+R6146 Coq.Init.Datatypes.None
+R6165 Coq.Init.Datatypes.Some
+R6202 RTL.Inop
+R6237 RTL.Iop
+R6268 CSE.add_op
+R6302 RTL.Iload
+R6343 CSE.add_load
+R6387 RTL.Istore
+R6429 CSE.kill_loads
+R6455 RTL.Icall
+R6493 CSE.empty_numbering
+R6517 RTL.Icond
+R6572 RTL.Ireturn
+R6100 CSE.numbering
+R6085 RTL.node
+R6070 RTL.function
+R6663 Maps.t
+R6670 CSE.numbering
+R6691 CSE.fixpoint
+R6777 RTL.fn_entrypoint
+R6762 CSE.transfer
+R6725 RTL.fn_nextpc
+R6708 RTL.successors
+R6801 Coq.Init.Datatypes.None
+R6809 Maps.init
+R6819 CSE.empty_numbering
+R6839 Coq.Init.Datatypes.Some
+R6648 RTL.function
+R6932 Coq.Init.Datatypes.bool
+R6960 Op.Omove
+R6969 Coq.Init.Datatypes.true
+R6978 Op.Ointconst
+R6993 Coq.Init.Datatypes.true
+R7002 Op.Oaddrsymbol
+R7021 Coq.Init.Datatypes.true
+R7030 Op.Oaddrstack
+R7046 Coq.Init.Datatypes.true
+R7055 Op.Oundef
+R7065 Coq.Init.Datatypes.true
+R7079 Coq.Init.Datatypes.false
+R6919 Op.operation
+R7179 RTL.Iop
+R7209 CSE.is_trivial_op
+R7256 CSE.find_op
+R7289 Coq.Init.Datatypes.None
+R7313 Coq.Init.Datatypes.Some
+R7323 RTL.Iop
+R7336 Coq.Lists.List "x :: y" list_scope
+R7339 Coq.Lists.List.nil
+R7327 Op.Omove
+R7366 RTL.Iload
+R7409 CSE.find_load
+R7450 Coq.Init.Datatypes.None
+R7472 Coq.Init.Datatypes.Some
+R7482 RTL.Iop
+R7495 Coq.Lists.List "x :: y" list_scope
+R7498 Coq.Lists.List.nil
+R7486 Op.Omove
+R7140 RTL.instruction
+R7121 CSE.numbering
+R7616 RTL.code
+R7626 Maps.map
+R7653 CSE.transf_instr
+R7673 Maps "a !! b"
+R7608 RTL.code
+R7581 Maps.t
+R7588 CSE.numbering
+R7841 Coq.Init.Logic "A \/ B" type_scope
+R7814 Coqlib.Plt
+R7824 RTL.fn_nextpc
+R7881 Coq.Init.Logic "x = y" type_scope
+R7876 Maps "a ! b"
+R7845 CSE.transf_code
+R7868 RTL.fn_code
+R7883 Coq.Init.Datatypes.None
+R7771 Coq.Init.Logic "A \/ B" type_scope
+R7750 Coqlib.Plt
+R7760 RTL.fn_nextpc
+R7789 Coq.Init.Logic "x = y" type_scope
+R7785 Maps "a ! b"
+R7777 RTL.fn_code
+R7791 Coq.Init.Datatypes.None
+R7981 Maps.gmap
+R7981 Maps.gmap
+R8089 RTL.function
+R8133 RTL.mkfunction
+R8309 CSE.transf_code_wf
+R8337 RTL.fn_code_wf
+R8289 RTL.fn_nextpc
+R8263 RTL.fn_entrypoint
+R8219 CSE.transf_code
+R8242 RTL.fn_code
+R8196 RTL.fn_stacksize
+R8174 RTL.fn_params
+R8155 RTL.fn_sig
+R8118 CSE.analyze
+R8077 RTL.function
+R8393 RTL.program
+R8406 AST.transform_program
+R8424 CSE.transf_function
+R8382 RTL.program
+FCSEproof
+R453 CSE.Op
+R486 Coqlib.Plt
+R475 Coq.Lists.List.In
+R501 CSE.Load
+R544 Coqlib.Plt
+R533 Coq.Lists.List.In
+R418 CSE.rhs
+R405 CSE.valnum
+R648 Coq.Init.Logic "A /\ B" type_scope
+R636 Coqlib.Plt
+R651 CSEproof.wf_rhs
+R619 CSE.rhs
+R606 CSE.valnum
+R593 CSE.valnum
+R792 Coq.Init.Logic "A /\ B" type_scope
+R763 CSEproof.wf_equation
+R778 CSE.num_next
+R737 Coq.Lists.List.In
+R751 CSE.num_eqs
+R740 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R852 Coqlib.Plt
+R861 CSE.num_next
+R840 Coq.Init.Logic "x = y" type_scope
+R816 Maps.get
+R831 CSE.num_reg
+R842 Coq.Init.Datatypes.Some
+R696 CSE.numbering
+R902 CSEproof.wf_numbering
+R915 CSE.empty_numbering
+R1007 Maps.gempty
+R1007 Maps.gempty
+R1136 CSEproof.wf_rhs
+R1117 CSEproof.wf_rhs
+R1096 Coqlib.Ple
+R1204 Coqlib.Plt_Ple_trans
+R1204 Coqlib.Plt_Ple_trans
+R1204 Coqlib.Plt_Ple_trans
+R1350 CSEproof.wf_equation
+R1323 CSEproof.wf_equation
+R1302 Coqlib.Ple
+R1425 Coqlib.Plt_Ple_trans
+R1425 Coqlib.Plt_Ple_trans
+R1465 CSEproof.wf_rhs_increasing
+R1465 CSEproof.wf_rhs_increasing
+R1615 Coq.Init.Logic "A /\ B" type_scope
+R1599 CSEproof.wf_numbering
+R1638 Coq.Init.Logic "A /\ B" type_scope
+R1618 Coqlib.Plt
+R1628 CSE.num_next
+R1641 Coqlib.Ple
+R1662 CSE.num_next
+R1648 CSE.num_next
+R1584 Coq.Init.Logic "x = y" type_scope
+R1569 CSE.valnum_reg
+R1586 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R1549 CSEproof.wf_numbering
+R1787 Maps "a ! b"
+R1778 CSE.num_reg
+R1787 Maps "a ! b"
+R1778 CSE.num_reg
+R1876 Coqlib.Ple_refl
+R1876 Coqlib.Ple_refl
+R2001 CSE.num_next
+R1972 CSEproof.wf_equation_increasing
+R2001 CSE.num_next
+R1972 CSEproof.wf_equation_increasing
+R2020 Coqlib.Ple_succ
+R2020 Coqlib.Ple_succ
+R2047 Maps.gsspec
+R2047 Maps.gsspec
+R2077 Coqlib.peq
+R2077 Coqlib.peq
+R2108 CSE.num_next
+R2108 CSE.num_next
+R2127 Coqlib.Plt_succ
+R2127 Coqlib.Plt_succ
+R2157 Coqlib.Plt_trans_succ
+R2157 Coqlib.Plt_trans_succ
+R2196 Coqlib.Plt_succ
+R2196 Coqlib.Plt_succ
+R2212 Coqlib.Ple_succ
+R2212 Coqlib.Ple_succ
+R2342 Coq.Init.Logic "A /\ B" type_scope
+R2326 CSEproof.wf_numbering
+R2388 Coq.Init.Logic "A /\ B" type_scope
+R2369 Coqlib.Plt
+R2379 CSE.num_next
+R2358 Coq.Lists.List.In
+R2395 Coqlib.Ple
+R2416 CSE.num_next
+R2402 CSE.num_next
+R2310 Coq.Init.Logic "x = y" type_scope
+R2293 CSE.valnum_regs
+R2312 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R2273 CSEproof.wf_numbering
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R2555 CSE.valnum_reg
+R2555 CSE.valnum_reg
+R2600 CSE.valnum_regs
+R2600 CSE.valnum_regs
+R2742 CSEproof.wf_valnum_reg
+R2742 CSEproof.wf_valnum_reg
+R2923 Coqlib.Plt_Ple_trans
+R2923 Coqlib.Plt_Ple_trans
+R2964 Coqlib.Ple_trans
+R2964 Coqlib.Ple_trans
+R3077 Coq.Lists.List.In
+R3080 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R3064 Coq.Init.Logic "x = y" type_scope
+R3041 CSE.find_valnum_rhs
+R3066 Coq.Init.Datatypes.Some
+R3168 CSE.eq_rhs
+R3168 CSE.eq_rhs
+R3331 CSEproof.wf_numbering
+R3345 CSE.add_rhs
+R3303 CSEproof.wf_rhs
+R3313 CSE.num_next
+R3283 CSEproof.wf_numbering
+R3420 CSE.find_valnum_rhs
+R3442 CSE.num_eqs
+R3420 CSE.find_valnum_rhs
+R3442 CSE.num_eqs
+R3513 Maps.gsspec
+R3513 Maps.gsspec
+R3533 Coqlib.peq
+R3533 Coqlib.peq
+R3596 CSEproof.find_valnum_rhs_correct
+R3596 CSEproof.find_valnum_rhs_correct
+R3728 Coqlib.Plt_succ
+R3728 Coqlib.Plt_succ
+R3770 CSE.num_next
+R3744 CSEproof.wf_rhs_increasing
+R3770 CSE.num_next
+R3744 CSEproof.wf_rhs_increasing
+R3789 Coqlib.Ple_succ
+R3789 Coqlib.Ple_succ
+R3844 CSE.num_next
+R3813 CSEproof.wf_equation_increasing
+R3844 CSE.num_next
+R3813 CSEproof.wf_equation_increasing
+R3861 Coqlib.Ple_succ
+R3861 Coqlib.Ple_succ
+R3899 Maps.gsspec
+R3899 Maps.gsspec
+R3919 Coqlib.peq
+R3919 Coqlib.peq
+R3966 Coqlib.Plt_succ
+R3966 Coqlib.Plt_succ
+R3991 Coqlib.Plt_trans_succ
+R3991 Coqlib.Plt_trans_succ
+R4081 CSEproof.wf_numbering
+R4095 CSE.add_op
+R4061 CSEproof.wf_numbering
+R4158 CSE.valnum_regs
+R4158 CSE.valnum_regs
+R4209 CSEproof.wf_valnum_regs
+R4209 CSEproof.wf_valnum_regs
+R4265 CSEproof.wf_add_rhs
+R4265 CSEproof.wf_add_rhs
+R4359 CSEproof.wf_numbering
+R4373 CSE.add_load
+R4339 CSEproof.wf_numbering
+R4448 CSE.valnum_regs
+R4448 CSE.valnum_regs
+R4499 CSEproof.wf_valnum_regs
+R4499 CSEproof.wf_valnum_regs
+R4555 CSEproof.wf_add_rhs
+R4555 CSEproof.wf_add_rhs
+R4680 Coq.Lists.List.incl
+R4695 Coq.Lists.List "x :: y" list_scope
+R4687 Coq.Lists.List "x :: y" list_scope
+R4666 Coq.Lists.List.incl
+R4655 Coq.Lists.List.list
+R4655 Coq.Lists.List.list
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R4797 Coq.Lists.List.incl
+R4808 CSE.kill_load_eqs
+R4879 Coq.Lists.List.incl_refl
+R4879 Coq.Lists.List.incl_refl
+R4922 CSEproof.incl_same_head
+R4922 CSEproof.incl_same_head
+R4960 Coq.Lists.List.incl_tl
+R4960 Coq.Lists.List.incl_tl
+R5032 CSEproof.wf_numbering
+R5046 CSE.kill_loads
+R5014 CSEproof.wf_numbering
+R5150 CSEproof.kill_load_eqs_incl
+R5150 CSEproof.kill_load_eqs_incl
+R5245 CSEproof.wf_numbering
+R5259 CSE.transfer
+R5227 CSEproof.wf_numbering
+R5335 Maps "a ! b"
+R5327 RTL.fn_code
+R5335 Maps "a ! b"
+R5327 RTL.fn_code
+R5375 CSEproof.wf_add_op
+R5375 CSEproof.wf_add_op
+R5400 CSEproof.wf_add_load
+R5400 CSEproof.wf_add_load
+R5427 CSEproof.wf_kill_loads
+R5427 CSEproof.wf_kill_loads
+R5456 CSEproof.wf_empty_numbering
+R5456 CSEproof.wf_empty_numbering
+R5517 CSEproof.wf_numbering
+R5540 Maps "a !! b"
+R5531 CSE.analyze
+R5590 CSE.fixpoint
+R5676 RTL.fn_entrypoint
+R5663 CSE.transfer
+R5622 RTL.fn_nextpc
+R5607 RTL.successors
+R5590 CSE.fixpoint
+R5676 RTL.fn_entrypoint
+R5663 CSE.transfer
+R5622 RTL.fn_nextpc
+R5607 RTL.successors
+R5761 CSEproof.wf_numbering
+R5724 CSE.fixpoint_invariant
+R5761 CSEproof.wf_numbering
+R5724 CSE.fixpoint_invariant
+R5791 CSEproof.wf_empty_numbering
+R5791 CSEproof.wf_empty_numbering
+R5823 CSEproof.wf_transfer
+R5823 CSEproof.wf_transfer
+R5856 Maps.gi
+R5856 Maps.gi
+R5871 CSEproof.wf_empty_numbering
+R5871 CSEproof.wf_empty_numbering
+R5968 CSE.valnum
+R5995 Coqlib.peq
+R6085 RTL.genv
+R6104 Values.val
+R6121 Mem.mem
+R6237 Coq.Init.Logic "x = y" type_scope
+R6215 Coqlib.Plt
+R6185 CSE.valnum
+R6173 Values.val
+R6163 CSE.valnum
+R6173 Values.val
+R6163 CSE.valnum
+R6292 CSEproof.valu_agree
+R6514 CSEproof.valu_agree
+R6491 Coqlib.Ple
+R6456 CSEproof.valu_agree
+R6421 CSEproof.valu_agree
+R6617 Coqlib.Plt_Ple_trans
+R6617 Coqlib.Plt_Ple_trans
+R6813 Coq.Init.Logic "x = y" type_scope
+R6800 Coq.Lists.List.map
+R6815 Coq.Lists.List.map
+R6783 Coqlib.Plt
+R6772 Coq.Lists.List.In
+R6728 CSEproof.valu_agree
+R6852 Coqlib.list_map_exten
+R6852 Coqlib.list_map_exten
+R7066 CSE.numbering_holds
+R7026 CSE.numbering_holds
+R7006 CSEproof.wf_numbering
+R6965 CSEproof.valu_agree
+R6991 CSE.num_next
+R7297 CSEproof.valu_agree_list
+R7328 CSE.num_next
+R7297 CSEproof.valu_agree_list
+R7328 CSE.num_next
+R7415 CSEproof.valu_agree_list
+R7446 CSE.num_next
+R7415 CSEproof.valu_agree_list
+R7446 CSE.num_next
+R7677 Coq.Init.Logic "'exists' x , p" type_scope
+R7731 Coq.Init.Logic "A /\ B" type_scope
+R7695 CSE.numbering_holds
+R7753 Coq.Init.Logic "A /\ B" type_scope
+R7746 Coq.Init.Logic "x = y" type_scope
+R7750 Registers "a # b"
+R7760 CSEproof.valu_agree
+R7786 CSE.num_next
+R7662 Coq.Init.Logic "x = y" type_scope
+R7647 CSE.valnum_reg
+R7664 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R7607 CSE.numbering_holds
+R7587 CSEproof.wf_numbering
+R7863 Maps "a ! b"
+R7855 CSE.num_reg
+R7863 Maps "a ! b"
+R7855 CSE.num_reg
+R8037 CSEproof.valu_agree_refl
+R8037 CSEproof.valu_agree_refl
+R8170 CSEproof.set
+R8194 Registers "a # b"
+R8182 CSE.num_next
+R8170 CSEproof.set
+R8194 Registers "a # b"
+R8182 CSE.num_next
+R8219 CSEproof.valu_agree
+R8245 CSE.num_next
+R8219 CSEproof.valu_agree
+R8245 CSE.num_next
+R8294 CSEproof.gso
+R8294 CSEproof.gso
+R8335 CSEproof.numbering_holds_exten
+R8335 CSEproof.numbering_holds_exten
+R8489 Maps.gsspec
+R8489 Maps.gsspec
+R8519 Coqlib.peq
+R8519 Coqlib.peq
+R8554 Coqlib.peq_true
+R8554 Coqlib.peq_true
+R8584 Coqlib.peq
+R8592 CSE.num_next
+R8584 Coqlib.peq
+R8592 CSE.num_next
+R8681 Coqlib.Plt_strict
+R8681 Coqlib.Plt_strict
+R8738 CSEproof.gss
+R8738 CSEproof.gss
+R8913 Coq.Init.Logic "'exists' x , p" type_scope
+R8967 Coq.Init.Logic "A /\ B" type_scope
+R8931 CSE.numbering_holds
+R9001 Coq.Init.Logic "A /\ B" type_scope
+R8992 Coq.Init.Logic "x = y" type_scope
+R8974 Coq.Lists.List.map
+R8996 Registers "a ## b"
+R9008 CSEproof.valu_agree
+R9034 CSE.num_next
+R8897 Coq.Init.Logic "x = y" type_scope
+R8880 CSE.valnum_regs
+R8899 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R8840 CSE.numbering_holds
+R8820 CSEproof.wf_numbering
+R9192 CSEproof.valu_agree_refl
+R9192 CSEproof.valu_agree_refl
+R9242 CSE.valnum_reg
+R9242 CSE.valnum_reg
+R9287 CSE.valnum_regs
+R9287 CSE.valnum_regs
+R9413 CSEproof.valnum_reg_holds
+R9413 CSEproof.valnum_reg_holds
+R9495 CSEproof.wf_valnum_reg
+R9495 CSEproof.wf_valnum_reg
+R9696 CSEproof.valu_agree_trans
+R9696 CSEproof.valu_agree_trans
+R9826 CSE.Op
+R9888 Coq.Init.Logic "x = y" type_scope
+R9845 Op.eval_operation
+R9870 Coq.Lists.List.map
+R9890 Coq.Init.Datatypes.Some
+R9901 CSE.Load
+R9929 Coq.Init.Logic "'exists' x , p" type_scope
+R10000 Coq.Init.Logic "A /\ B" type_scope
+R9991 Coq.Init.Logic "x = y" type_scope
+R9945 Op.eval_addressing
+R9973 Coq.Lists.List.map
+R9993 Coq.Init.Datatypes.Some
+R10025 Coq.Init.Logic "x = y" type_scope
+R10009 Mem.loadv
+R10027 Coq.Init.Datatypes.Some
+R9791 Values.val
+R9782 CSE.rhs
+R9772 Values.val
+R9762 CSE.valnum
+R10181 Coq.Init.Logic "x = y" type_scope
+R10130 CSE.equation_holds
+R10102 CSEproof.rhs_evals_to
+R10440 CSE.equation_holds
+R10456 CSEproof.set
+R10412 CSEproof.rhs_evals_to
+R10392 CSEproof.wf_rhs
+R10578 CSEproof.gss
+R10578 CSEproof.gss
+R10714 Coq.Init.Logic "x = y" type_scope
+R10684 Coq.Lists.List.map
+R10689 CSEproof.set
+R10716 Coq.Lists.List.map
+R10657 Coqlib.Plt
+R10646 Coq.Lists.List.In
+R10610 Coq.Lists.List.list
+R10615 CSE.valnum
+R10714 Coq.Init.Logic "x = y" type_scope
+R10684 Coq.Lists.List.map
+R10689 CSEproof.set
+R10716 Coq.Lists.List.map
+R10657 Coqlib.Plt
+R10646 Coq.Lists.List.In
+R10610 Coq.Lists.List.list
+R10615 CSE.valnum
+R10748 Coqlib.list_map_exten
+R10748 Coqlib.list_map_exten
+R10793 CSEproof.gso
+R10793 CSEproof.gso
+R10809 Coqlib.Plt_ne
+R10809 Coqlib.Plt_ne
+R11044 CSE.numbering_satisfiable
+R11088 CSE.add_rhs
+R11075 Registers "a # b <- c"
+R11015 CSEproof.rhs_evals_to
+R10975 CSE.numbering_holds
+R10947 CSEproof.wf_rhs
+R10957 CSE.num_next
+R10927 CSEproof.wf_numbering
+R11150 CSE.find_valnum_rhs
+R11172 CSE.num_eqs
+R11150 CSE.find_valnum_rhs
+R11172 CSE.num_eqs
+R11294 Registers.gsspec
+R11294 Registers.gsspec
+R11320 Maps.gsspec
+R11320 Maps.gsspec
+R11352 Coqlib.peq
+R11352 Coqlib.peq
+R11382 CSEproof.equation_evals_to_holds_1
+R11382 CSEproof.equation_evals_to_holds_1
+R11434 CSEproof.find_valnum_rhs_correct
+R11434 CSEproof.find_valnum_rhs_correct
+R11534 CSEproof.set
+R11546 CSE.num_next
+R11534 CSEproof.set
+R11546 CSE.num_next
+R11580 CSEproof.valu_agree
+R11606 CSE.num_next
+R11580 CSEproof.valu_agree
+R11606 CSE.num_next
+R11655 CSEproof.gso
+R11655 CSEproof.gso
+R11696 CSEproof.numbering_holds_exten
+R11696 CSEproof.numbering_holds_exten
+R11861 CSEproof.equation_evals_to_holds_2
+R11861 CSEproof.equation_evals_to_holds_2
+R11913 Registers.gsspec
+R11913 Registers.gsspec
+R11936 Maps.gsspec
+R11936 Maps.gsspec
+R11966 Coqlib.peq
+R11966 Coqlib.peq
+R12023 CSEproof.gss
+R12023 CSEproof.gss
+R12211 CSE.numbering_satisfiable
+R12256 CSE.add_op
+R12242 Registers "a # b <- c"
+R12197 Coq.Init.Logic "x = y" type_scope
+R12164 Op.eval_operation
+R12190 Registers "a ## b"
+R12199 Coq.Init.Datatypes.Some
+R12124 CSE.numbering_satisfiable
+R12104 CSEproof.wf_numbering
+R12337 CSE.valnum_regs
+R12337 CSE.valnum_regs
+R12390 CSEproof.valnum_regs_holds
+R12390 CSEproof.valnum_regs_holds
+R12471 CSEproof.wf_valnum_regs
+R12471 CSEproof.wf_valnum_regs
+R12528 CSEproof.add_rhs_satisfiable
+R12528 CSEproof.add_rhs_satisfiable
+R12803 CSE.numbering_satisfiable
+R12859 CSE.add_load
+R12840 Registers "a # b <- c"
+R12789 Coq.Init.Logic "x = y" type_scope
+R12773 Mem.loadv
+R12791 Coq.Init.Datatypes.Some
+R12759 Coq.Init.Logic "x = y" type_scope
+R12723 Op.eval_addressing
+R12752 Registers "a ## b"
+R12761 Coq.Init.Datatypes.Some
+R12683 CSE.numbering_satisfiable
+R12663 CSEproof.wf_numbering
+R12952 CSE.valnum_regs
+R12952 CSE.valnum_regs
+R13005 CSEproof.valnum_regs_holds
+R13005 CSEproof.valnum_regs_holds
+R13086 CSEproof.wf_valnum_regs
+R13086 CSEproof.wf_valnum_regs
+R13143 CSEproof.add_rhs_satisfiable
+R13143 CSEproof.add_rhs_satisfiable
+R13325 CSE.Op
+R13335 Coq.Init.Logic.True
+R13342 CSE.Load
+R13356 Coq.Init.Logic.False
+R13273 Coq.Lists.List.In
+R13286 CSE.kill_load_eqs
+R13276 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R13640 CSE.numbering_satisfiable
+R13675 CSE.kill_loads
+R13600 CSE.numbering_satisfiable
+R13748 CSEproof.kill_load_eqs_incl
+R13770 CSE.num_eqs
+R13748 CSEproof.kill_load_eqs_incl
+R13770 CSE.num_eqs
+R13863 CSEproof.kill_load_eqs_ops
+R13863 CSEproof.kill_load_eqs_ops
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R14040 Coq.Init.Logic "x = y" type_scope
+R14037 Maps "a ! b"
+R14029 CSE.num_reg
+R14042 Coq.Init.Datatypes.Some
+R14014 Coq.Init.Logic "x = y" type_scope
+R13999 CSE.reg_valnum
+R14016 Coq.Init.Datatypes.Some
+R14102 Maps.fold_spec
+R14102 Maps.fold_spec
+R14306 Coq.Init.Logic "A \/ B" type_scope
+R14294 Coq.Lists.List.In
+R14297 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R14314 Coq.Init.Logic "x = y" type_scope
+R14316 Coq.Init.Datatypes.Some
+R14277 Coq.Init.Logic "x = y" type_scope
+R14147 Coq.Lists.List.fold_left
+R14223 Coqlib.peq
+R14228 Coq.Init.Datatypes.snd
+R14242 Coq.Init.Datatypes.Some
+R14248 Coq.Init.Datatypes.fst
+R14198 Coq.Init.Datatypes "x * y" type_scope
+R14194 Registers.reg
+R14200 CSE.valnum
+R14178 Coq.Init.Datatypes.option
+R14185 Registers.reg
+R14279 Coq.Init.Datatypes.Some
+R14306 Coq.Init.Logic "A \/ B" type_scope
+R14294 Coq.Lists.List.In
+R14297 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R14314 Coq.Init.Logic "x = y" type_scope
+R14316 Coq.Init.Datatypes.Some
+R14277 Coq.Init.Logic "x = y" type_scope
+R14147 Coq.Lists.List.fold_left
+R14223 Coqlib.peq
+R14228 Coq.Init.Datatypes.snd
+R14242 Coq.Init.Datatypes.Some
+R14248 Coq.Init.Datatypes.fst
+R14198 Coq.Init.Datatypes "x * y" type_scope
+R14194 Registers.reg
+R14200 CSE.valnum
+R14178 Coq.Init.Datatypes.option
+R14185 Registers.reg
+R14279 Coq.Init.Datatypes.Some
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R14437 Coqlib.peq
+R14437 Coqlib.peq
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R14574 Maps.elements_complete
+R14574 Maps.elements_complete
+R14745 CSEproof.rhs_evals_to
+R14768 Registers "a # b"
+R14731 Coq.Init.Logic "x = y" type_scope
+R14717 CSE.find_rhs
+R14733 Coq.Init.Datatypes.Some
+R14678 CSE.numbering_holds
+R14840 CSE.find_valnum_rhs
+R14862 CSE.num_eqs
+R14840 CSE.find_valnum_rhs
+R14862 CSE.num_eqs
+R14895 CSEproof.find_valnum_rhs_correct
+R14895 CSEproof.find_valnum_rhs_correct
+R14950 CSEproof.reg_valnum_correct
+R14950 CSEproof.reg_valnum_correct
+R15277 Coq.Init.Logic "x = y" type_scope
+R15244 Op.eval_operation
+R15270 Registers "a ## b"
+R15279 Coq.Init.Datatypes.Some
+R15286 Registers "a # b"
+R15230 Coq.Init.Logic "x = y" type_scope
+R15212 CSE.find_op
+R15232 Coq.Init.Datatypes.Some
+R15172 CSE.numbering_satisfiable
+R15152 CSEproof.wf_numbering
+R15362 CSE.valnum_regs
+R15362 CSE.valnum_regs
+R15419 CSEproof.valnum_regs_holds
+R15419 CSEproof.valnum_regs_holds
+R15520 CSEproof.rhs_evals_to
+R15552 Registers "a # b"
+R15540 CSE.Op
+R15520 CSEproof.rhs_evals_to
+R15552 Registers "a # b"
+R15540 CSE.Op
+R15566 CSEproof.find_rhs_correct
+R15566 CSEproof.find_rhs_correct
+R15759 Coq.Init.Logic "'exists' x , p" type_scope
+R15816 Coq.Init.Logic "A /\ B" type_scope
+R15807 Coq.Init.Logic "x = y" type_scope
+R15771 Op.eval_addressing
+R15800 Registers "a ## b"
+R15809 Coq.Init.Datatypes.Some
+R15837 Coq.Init.Logic "x = y" type_scope
+R15821 Mem.loadv
+R15839 Coq.Init.Datatypes.Some
+R15846 Registers "a # b"
+R15745 Coq.Init.Logic "x = y" type_scope
+R15717 CSE.find_load
+R15747 Coq.Init.Datatypes.Some
+R15677 CSE.numbering_satisfiable
+R15657 CSEproof.wf_numbering
+R15924 CSE.valnum_regs
+R15924 CSE.valnum_regs
+R15981 CSEproof.valnum_regs_holds
+R15981 CSEproof.valnum_regs_holds
+R16082 CSEproof.rhs_evals_to
+R16124 Registers "a # b"
+R16102 CSE.Load
+R16082 CSEproof.rhs_evals_to
+R16124 Registers "a # b"
+R16102 CSE.Load
+R16138 CSEproof.find_rhs_correct
+R16138 CSEproof.find_rhs_correct
+R16381 CSE.numbering_satisfiable
+R16417 CSE.transfer
+R16341 CSE.numbering_satisfiable
+R16321 CSEproof.wf_numbering
+R16302 Coq.Init.Logic "x = y" type_scope
+R16307 RTL.fn_code
+R16257 RTL.exec_instr
+R16529 CSEproof.add_op_satisfiable
+R16529 CSEproof.add_op_satisfiable
+R16579 CSEproof.add_load_satisfiable
+R16579 CSEproof.add_load_satisfiable
+R16632 CSEproof.kill_load_satisfiable
+R16632 CSEproof.kill_load_satisfiable
+R16684 CSE.empty_numbering_satisfiable
+R16684 CSE.empty_numbering_satisfiable
+R16906 CSE.numbering_satisfiable
+R16951 Maps "a !! b"
+R16942 CSE.analyze
+R16852 CSE.numbering_satisfiable
+R16895 Maps "a !! b"
+R16886 CSE.analyze
+R16833 Coq.Init.Logic "x = y" type_scope
+R16838 RTL.fn_code
+R16788 RTL.exec_instr
+R17016 CSEproof.wf_analyze
+R17016 CSEproof.wf_analyze
+R17062 CSE.fixpoint
+R17148 RTL.fn_entrypoint
+R17135 CSE.transfer
+R17094 RTL.fn_nextpc
+R17079 RTL.successors
+R17062 CSE.fixpoint
+R17148 RTL.fn_entrypoint
+R17135 CSE.transfer
+R17094 RTL.fn_nextpc
+R17079 RTL.successors
+R17206 CSE.numbering_satisfiable
+R17242 CSE.transfer
+R17259 Maps "a !! b"
+R17206 CSE.numbering_satisfiable
+R17242 CSE.transfer
+R17259 Maps "a !! b"
+R17278 CSEproof.transfer_correct
+R17278 CSEproof.transfer_correct
+R17313 CSE.ge
+R17336 CSE.transfer
+R17353 Maps "a !! b"
+R17329 Maps "a !! b"
+R17313 CSE.ge
+R17336 CSE.transfer
+R17353 Maps "a !! b"
+R17329 Maps "a !! b"
+R17372 CSE.fixpoint_solution
+R17372 CSE.fixpoint_solution
+R17415 RTL.fn_code_wf
+R17415 RTL.fn_code_wf
+R17483 RTL.exec_instr_present
+R17483 RTL.exec_instr_present
+R17563 RTL.successors_correct
+R17563 RTL.successors_correct
+R17626 Maps.gi
+R17626 Maps.gi
+R17641 CSE.empty_numbering_satisfiable
+R17641 CSE.empty_numbering_satisfiable
+R17864 CSE.numbering_satisfiable
+R17909 Maps "a !! b"
+R17900 CSE.analyze
+R17810 CSE.numbering_satisfiable
+R17853 Maps "a !! b"
+R17844 CSE.analyze
+R17791 Coq.Init.Logic "x = y" type_scope
+R17796 RTL.fn_code
+R17745 RTL.exec_instrs
+R17970 CSEproof.analysis_correct_1
+R17970 CSEproof.analysis_correct_1
+R18069 CSE.numbering_satisfiable
+R18112 Maps "a !! b"
+R18119 RTL.fn_entrypoint
+R18103 CSE.analyze
+R18175 Maps "a !! b"
+R18182 RTL.fn_entrypoint
+R18166 CSE.analyze
+R18214 CSE.empty_numbering
+R18175 Maps "a !! b"
+R18182 RTL.fn_entrypoint
+R18166 CSE.analyze
+R18214 CSE.empty_numbering
+R18239 CSE.empty_numbering_satisfiable
+R18239 CSE.empty_numbering_satisfiable
+R18296 CSE.fixpoint
+R18382 RTL.fn_entrypoint
+R18369 CSE.transfer
+R18328 RTL.fn_nextpc
+R18313 RTL.successors
+R18296 CSE.fixpoint
+R18382 RTL.fn_entrypoint
+R18369 CSE.transfer
+R18328 RTL.fn_nextpc
+R18313 RTL.successors
+R18465 CSE.top
+R18444 CSE.empty_numbering
+R18465 CSE.top
+R18444 CSE.empty_numbering
+R18488 CSE.fixpoint_entry
+R18488 CSE.fixpoint_entry
+R18544 Maps.gi
+R18544 Maps.gi
+R18598 RTL.program
+R18620 CSE.transf_program
+R18651 Globalenvs.globalenv
+R18683 Globalenvs.globalenv
+R18775 Coq.Init.Logic "x = y" type_scope
+R18752 Globalenvs.find_symbol
+R18777 Globalenvs.find_symbol
+R18744 AST.ident
+R18807 Globalenvs.find_symbol_transf
+R18831 CSE.transf_function
+R18979 Coq.Init.Logic "x = y" type_scope
+R18957 Globalenvs.find_funct
+R18981 Coq.Init.Datatypes.Some
+R18987 CSE.transf_function
+R18943 Coq.Init.Logic "x = y" type_scope
+R18922 Globalenvs.find_funct
+R18945 Coq.Init.Datatypes.Some
+R18905 RTL.function
+R18896 Values.val
+R19015 Globalenvs.find_funct_transf
+R19042 CSE.transf_function
+R19200 Coq.Init.Logic "x = y" type_scope
+R19174 Globalenvs.find_funct_ptr
+R19202 Coq.Init.Datatypes.Some
+R19208 CSE.transf_function
+R19160 Coq.Init.Logic "x = y" type_scope
+R19135 Globalenvs.find_funct_ptr
+R19162 Coq.Init.Datatypes.Some
+R19118 RTL.function
+R19107 Values.block
+R19236 Globalenvs.find_funct_ptr_transf
+R19267 CSE.transf_function
+R19555 RTL.exec_instr
+R19571 CSE.transf_code
+R19584 CSE.analyze
+R19502 CSE.numbering_satisfiable
+R19545 Maps "a !! b"
+R19536 CSE.analyze
+R19468 Coq.Init.Logic "x = y" type_scope
+R19473 RTL.fn_code
+R19426 Mem.mem
+R19413 RTL.regset
+R19401 RTL.node
+R19382 Mem.mem
+R19370 RTL.regset
+R19359 RTL.node
+R19341 Values.val
+R19330 RTL.code
+R19887 RTL.exec_instrs
+R19904 CSE.transf_code
+R19917 CSE.analyze
+R19834 CSE.numbering_satisfiable
+R19877 Maps "a !! b"
+R19868 CSE.analyze
+R19800 Coq.Init.Logic "x = y" type_scope
+R19805 RTL.fn_code
+R19758 Mem.mem
+R19745 RTL.regset
+R19733 RTL.node
+R19714 Mem.mem
+R19702 RTL.regset
+R19691 RTL.node
+R19673 Values.val
+R19662 RTL.code
+R20078 RTL.exec_function
+R20097 CSE.transf_function
+R20061 Mem.mem
+R20051 Values.val
+R20032 Mem.mem
+R20018 Coq.Lists.List.list
+R20023 Values.val
+R19997 RTL.function
+R20196 Coq.Init.Logic "x = y" type_scope
+R20179 Maps.get
+R20198 Coq.Init.Datatypes.Some
+R20215 RTL.function
+R20274 Coq.Init.Logic "x = y" type_scope
+R20269 Maps "a ! b"
+R20244 CSE.transf_code
+R20257 CSE.analyze
+R20276 Coq.Init.Datatypes.Some
+R20281 CSE.transf_instr
+R20304 Maps "a !! b"
+R20295 CSE.analyze
+R20369 Maps.gmap
+R20540 CSEproof.exec_function_prop
+R20502 RTL.exec_function
+R20592 RTL.exec_function_ind_3
+R20658 CSEproof.exec_function_prop
+R20641 CSEproof.exec_instrs_prop
+R20625 CSEproof.exec_instr_prop
+R20592 RTL.exec_function_ind_3
+R20658 CSEproof.exec_function_prop
+R20641 CSEproof.exec_instrs_prop
+R20625 CSEproof.exec_instr_prop
+R20747 RTL.exec_Inop
+R20747 RTL.exec_Inop
+R20820 Coq.Init.Logic "x = y" type_scope
+R20786 Op.eval_operation
+R20813 Registers "a ## b"
+R20822 Coq.Init.Datatypes.Some
+R20820 Coq.Init.Logic "x = y" type_scope
+R20786 Op.eval_operation
+R20813 Registers "a ## b"
+R20822 Coq.Init.Datatypes.Some
+R20856 Op.eval_operation_preserved
+R20856 Op.eval_operation_preserved
+R20888 CSEproof.symbols_preserved
+R20888 CSEproof.symbols_preserved
+R20915 CSE.is_trivial_op
+R20915 CSE.is_trivial_op
+R20950 RTL.exec_Iop'
+R20950 RTL.exec_Iop'
+R20979 CSE.find_op
+R20997 Maps "a !! b"
+R20988 CSE.analyze
+R20979 CSE.find_op
+R20997 Maps "a !! b"
+R20988 CSE.analyze
+R21042 RTL.exec_Iop'
+R21042 RTL.exec_Iop'
+R21111 Coq.Init.Logic "x = y" type_scope
+R21078 Op.eval_operation
+R21104 Registers "a ## b"
+R21113 Coq.Init.Datatypes.Some
+R21120 Registers "a # b"
+R21111 Coq.Init.Logic "x = y" type_scope
+R21078 Op.eval_operation
+R21104 Registers "a ## b"
+R21113 Coq.Init.Datatypes.Some
+R21120 Registers "a # b"
+R21136 CSEproof.find_op_correct
+R21136 CSEproof.find_op_correct
+R21171 CSEproof.wf_analyze
+R21171 CSEproof.wf_analyze
+R21221 RTL.exec_Iop'
+R21221 RTL.exec_Iop'
+R21301 Coq.Init.Logic "x = y" type_scope
+R21264 Op.eval_addressing
+R21294 Registers "a ## b"
+R21303 Coq.Init.Datatypes.Some
+R21301 Coq.Init.Logic "x = y" type_scope
+R21264 Op.eval_addressing
+R21294 Registers "a ## b"
+R21303 Coq.Init.Datatypes.Some
+R21337 Op.eval_addressing_preserved
+R21337 Op.eval_addressing_preserved
+R21370 CSEproof.symbols_preserved
+R21370 CSEproof.symbols_preserved
+R21399 CSE.find_load
+R21419 Maps "a !! b"
+R21410 CSE.analyze
+R21399 CSE.find_load
+R21419 Maps "a !! b"
+R21410 CSE.analyze
+R21472 RTL.exec_Iop'
+R21472 RTL.exec_Iop'
+R21508 Coq.Init.Logic "'exists' x , p" type_scope
+R21580 Coq.Init.Logic "A /\ B" type_scope
+R21554 Coq.Init.Logic "x = y" type_scope
+R21518 Op.eval_addressing
+R21547 Registers "a ## b"
+R21556 Coq.Init.Datatypes.Some
+R21599 Coq.Init.Logic "x = y" type_scope
+R21583 Mem.loadv
+R21601 Coq.Init.Datatypes.Some
+R21608 Registers "a # b"
+R21508 Coq.Init.Logic "'exists' x , p" type_scope
+R21580 Coq.Init.Logic "A /\ B" type_scope
+R21554 Coq.Init.Logic "x = y" type_scope
+R21518 Op.eval_addressing
+R21547 Registers "a ## b"
+R21556 Coq.Init.Datatypes.Some
+R21599 Coq.Init.Logic "x = y" type_scope
+R21583 Mem.loadv
+R21601 Coq.Init.Datatypes.Some
+R21608 Registers "a # b"
+R21624 CSEproof.find_load_correct
+R21624 CSEproof.find_load_correct
+R21661 CSEproof.wf_analyze
+R21661 CSEproof.wf_analyze
+R21739 RTL.exec_Iload'
+R21739 RTL.exec_Iload'
+R21822 Coq.Init.Logic "x = y" type_scope
+R21785 Op.eval_addressing
+R21815 Registers "a ## b"
+R21824 Coq.Init.Datatypes.Some
+R21822 Coq.Init.Logic "x = y" type_scope
+R21785 Op.eval_addressing
+R21815 Registers "a ## b"
+R21824 Coq.Init.Datatypes.Some
+R21858 Op.eval_addressing_preserved
+R21858 Op.eval_addressing_preserved
+R21891 CSEproof.symbols_preserved
+R21891 CSEproof.symbols_preserved
+R21926 RTL.exec_Istore
+R21926 RTL.exec_Istore
+R21996 Coq.Init.Logic "x = y" type_scope
+R21971 RTL.find_function
+R21998 Coq.Init.Datatypes.Some
+R22004 CSE.transf_function
+R21996 Coq.Init.Logic "x = y" type_scope
+R21971 RTL.find_function
+R21998 Coq.Init.Datatypes.Some
+R22004 CSE.transf_function
+R22073 CSEproof.functions_translated
+R22073 CSEproof.functions_translated
+R22113 CSEproof.symbols_preserved
+R22113 CSEproof.symbols_preserved
+R22142 Globalenvs.find_symbol
+R22142 Globalenvs.find_symbol
+R22176 CSEproof.funct_ptr_translated
+R22176 CSEproof.funct_ptr_translated
+R22256 CSE.transf_function
+R22234 RTL.exec_Icall
+R22256 CSE.transf_function
+R22234 RTL.exec_Icall
+R22319 RTL.exec_Icond_true
+R22319 RTL.exec_Icond_true
+R22380 RTL.exec_Icond_false
+R22380 RTL.exec_Icond_false
+R22427 RTL.exec_refl
+R22427 RTL.exec_refl
+R22458 RTL.exec_one
+R22458 RTL.exec_one
+R22497 RTL.exec_trans
+R22497 RTL.exec_trans
+R22542 CSEproof.analysis_correct_N
+R22542 CSEproof.analysis_correct_N
+R22626 RTL.exec_funct
+R22626 RTL.exec_funct
+R22680 CSEproof.analysis_correct_entry
+R22680 CSEproof.analysis_correct_entry
+R22793 RTL.exec_program
+R22770 RTL.exec_program
+R22762 Values.val
+R22904 CSE.transf_function
+R22904 CSE.transf_function
+R22975 AST.prog_main
+R22952 AST.prog_main
+R22975 AST.prog_main
+R22952 AST.prog_main
+R23002 CSEproof.symbols_preserved
+R23002 CSEproof.symbols_preserved
+R23048 CSEproof.funct_ptr_translated
+R23048 CSEproof.funct_ptr_translated
+R23138 CSE.analyze
+R23138 CSE.analyze
+R23171 CSEproof.transf_function_correct
+R23171 CSEproof.transf_function_correct
+R23237 Globalenvs.init_mem_transf
+R23237 Globalenvs.init_mem_transf
+FLocations
+R1102 Coq.Init.Specif "{ A } + { B }" type_scope
+R1106 Coq.Init.Logic "x = y" type_scope
+R1118 Coq.Init.Logic "x <> y" type_scope
+R1095 Locations.mreg
+R1095 Locations.mreg
+R1188 AST.typ
+R1214 Locations.R3
+R1220 AST.Tint
+R1228 Locations.R4
+R1234 AST.Tint
+R1242 Locations.R5
+R1248 AST.Tint
+R1256 Locations.R6
+R1262 AST.Tint
+R1271 Locations.R7
+R1277 AST.Tint
+R1285 Locations.R8
+R1291 AST.Tint
+R1299 Locations.R9
+R1305 AST.Tint
+R1313 Locations.R10
+R1320 AST.Tint
+R1329 Locations.R13
+R1336 AST.Tint
+R1343 Locations.R14
+R1350 AST.Tint
+R1357 Locations.R15
+R1364 AST.Tint
+R1371 Locations.R16
+R1378 AST.Tint
+R1387 Locations.R17
+R1394 AST.Tint
+R1401 Locations.R18
+R1408 AST.Tint
+R1415 Locations.R19
+R1422 AST.Tint
+R1429 Locations.R20
+R1436 AST.Tint
+R1445 Locations.R21
+R1452 AST.Tint
+R1459 Locations.R22
+R1466 AST.Tint
+R1473 Locations.R23
+R1480 AST.Tint
+R1487 Locations.R24
+R1494 AST.Tint
+R1503 Locations.R25
+R1510 AST.Tint
+R1517 Locations.R26
+R1524 AST.Tint
+R1531 Locations.R27
+R1538 AST.Tint
+R1545 Locations.R28
+R1552 AST.Tint
+R1561 Locations.R29
+R1568 AST.Tint
+R1575 Locations.R30
+R1582 AST.Tint
+R1589 Locations.R31
+R1596 AST.Tint
+R1605 Locations.F1
+R1611 AST.Tfloat
+R1621 Locations.F2
+R1627 AST.Tfloat
+R1637 Locations.F3
+R1643 AST.Tfloat
+R1653 Locations.F4
+R1659 AST.Tfloat
+R1670 Locations.F5
+R1676 AST.Tfloat
+R1686 Locations.F6
+R1692 AST.Tfloat
+R1702 Locations.F7
+R1708 AST.Tfloat
+R1718 Locations.F8
+R1724 AST.Tfloat
+R1735 Locations.F9
+R1741 AST.Tfloat
+R1751 Locations.F10
+R1758 AST.Tfloat
+R1767 Locations.F14
+R1774 AST.Tfloat
+R1783 Locations.F15
+R1790 AST.Tfloat
+R1801 Locations.F16
+R1808 AST.Tfloat
+R1817 Locations.F17
+R1824 AST.Tfloat
+R1833 Locations.F18
+R1840 AST.Tfloat
+R1849 Locations.F19
+R1856 AST.Tfloat
+R1867 Locations.F20
+R1874 AST.Tfloat
+R1883 Locations.F21
+R1890 AST.Tfloat
+R1899 Locations.F22
+R1906 AST.Tfloat
+R1915 Locations.F23
+R1922 AST.Tfloat
+R1933 Locations.F24
+R1940 AST.Tfloat
+R1949 Locations.F25
+R1956 AST.Tfloat
+R1965 Locations.F26
+R1972 AST.Tfloat
+R1981 Locations.F27
+R1988 AST.Tfloat
+R1999 Locations.F28
+R2006 AST.Tfloat
+R2015 Locations.F29
+R2022 AST.Tfloat
+R2031 Locations.F30
+R2038 AST.Tfloat
+R2047 Locations.F31
+R2054 AST.Tfloat
+R2065 Locations.IT1
+R2072 AST.Tint
+R2079 Locations.IT2
+R2086 AST.Tint
+R2093 Locations.IT3
+R2100 AST.Tint
+R2109 Locations.FT1
+R2116 AST.Tfloat
+R2125 Locations.FT2
+R2132 AST.Tfloat
+R2141 Locations.FT3
+R2148 AST.Tfloat
+R1181 Locations.mreg
+R2224 Coq.NArith.BinPos.positive
+R2255 Locations.R3
+R2266 Locations.R4
+R2277 Locations.R5
+R2288 Locations.R6
+R2300 Locations.R7
+R2311 Locations.R8
+R2322 Locations.R9
+R2333 Locations.R10
+R2346 Locations.R13
+R2357 Locations.R14
+R2369 Locations.R15
+R2381 Locations.R16
+R2395 Locations.R17
+R2407 Locations.R18
+R2419 Locations.R19
+R2431 Locations.R20
+R2445 Locations.R21
+R2457 Locations.R22
+R2469 Locations.R23
+R2481 Locations.R24
+R2495 Locations.R25
+R2507 Locations.R26
+R2519 Locations.R27
+R2531 Locations.R28
+R2545 Locations.R29
+R2557 Locations.R30
+R2569 Locations.R31
+R2583 Locations.F1
+R2595 Locations.F2
+R2607 Locations.F3
+R2619 Locations.F4
+R2632 Locations.F5
+R2644 Locations.F6
+R2656 Locations.F7
+R2668 Locations.F8
+R2681 Locations.F9
+R2693 Locations.F10
+R2705 Locations.F14
+R2717 Locations.F15
+R2731 Locations.F16
+R2743 Locations.F17
+R2755 Locations.F18
+R2767 Locations.F19
+R2781 Locations.F20
+R2793 Locations.F21
+R2805 Locations.F22
+R2817 Locations.F23
+R2831 Locations.F24
+R2843 Locations.F25
+R2855 Locations.F26
+R2867 Locations.F27
+R2881 Locations.F28
+R2893 Locations.F29
+R2905 Locations.F30
+R2917 Locations.F31
+R2931 Locations.IT1
+R2943 Locations.IT2
+R2955 Locations.IT3
+R2969 Locations.FT1
+R2981 Locations.FT2
+R2993 Locations.FT3
+R2217 Locations.mreg
+R3085 Coq.Init.Logic "x = y" type_scope
+R3063 Coq.Init.Logic "x = y" type_scope
+R3049 Locations.mreg_index
+R3065 Locations.mreg_index
+R3263 AST.typ
+R3258 Coq.ZArith.BinInt.Z
+R3294 AST.typ
+R3289 Coq.ZArith.BinInt.Z
+R3325 AST.typ
+R3320 Coq.ZArith.BinInt.Z
+R3371 AST.typ
+R3397 Locations.Local
+R3420 Locations.Incoming
+R3446 Locations.Outgoing
+R3364 Locations.slot
+R3511 Coq.Init.Specif "{ A } + { B }" type_scope
+R3514 Coq.Init.Logic "x = y" type_scope
+R3524 Coq.Init.Logic "x <> y" type_scope
+R3504 Locations.slot
+R3504 Locations.slot
+R3577 Coq.Init.Specif "{ A } + { B }" type_scope
+R3581 Coq.Init.Logic "x = y" type_scope
+R3593 Coq.Init.Logic "x <> y" type_scope
+R3571 AST.typ
+R3571 AST.typ
+R3577 Coq.Init.Specif "{ A } + { B }" type_scope
+R3581 Coq.Init.Logic "x = y" type_scope
+R3593 Coq.Init.Logic "x <> y" type_scope
+R3571 AST.typ
+R3571 AST.typ
+R3634 Coqlib.zeq
+R3634 Coqlib.zeq
+R3724 Coq.ZArith.BinInt.Z
+R3745 AST.Tint
+R3757 AST.Tfloat
+R3717 AST.typ
+R3827 Coq.ZArith.BinInt "x > y" Z_scope
+R3815 Locations.typesize
+R3809 AST.typ
+R3922 Locations.mreg
+R3941 Locations.slot
+R3997 AST.typ
+R4027 Locations.R
+R4034 Locations.mreg_type
+R4052 Locations.S
+R4059 Locations.slot_type
+R3990 Locations.loc
+R4112 Coq.Init.Specif "{ A } + { B }" type_scope
+R4115 Coq.Init.Logic "x = y" type_scope
+R4125 Coq.Init.Logic "x <> y" type_scope
+R4106 Locations.loc
+R4106 Locations.loc
+R4168 Locations.mreg_eq
+R4168 Locations.mreg_eq
+R4183 Locations.slot_eq
+R4183 Locations.slot_eq
+R4269 Locations.R
+R4275 Locations.R
+R4286 Coq.Init.Logic "x <> y" type_scope
+R4298 Locations.S
+R4301 Locations.Local
+R4315 Locations.S
+R4318 Locations.Local
+R4351 Coq.Init.Logic "A \/ B" type_scope
+R4345 Coq.Init.Logic "x <> y" type_scope
+R4357 Coq.Init.Logic "x <> y" type_scope
+R4369 Locations.S
+R4372 Locations.Incoming
+R4389 Locations.S
+R4392 Locations.Incoming
+R4442 Coq.Init.Logic "A \/ B" type_scope
+R4436 Coq.ZArith.BinInt "x <= y" Z_scope
+R4422 Coq.ZArith.BinInt "x + y" Z_scope
+R4424 Locations.typesize
+R4462 Coq.ZArith.BinInt "x <= y" Z_scope
+R4448 Coq.ZArith.BinInt "x + y" Z_scope
+R4450 Locations.typesize
+R4474 Locations.S
+R4477 Locations.Outgoing
+R4494 Locations.S
+R4497 Locations.Outgoing
+R4547 Coq.Init.Logic "A \/ B" type_scope
+R4541 Coq.ZArith.BinInt "x <= y" Z_scope
+R4527 Coq.ZArith.BinInt "x + y" Z_scope
+R4529 Locations.typesize
+R4567 Coq.ZArith.BinInt "x <= y" Z_scope
+R4553 Coq.ZArith.BinInt "x + y" Z_scope
+R4555 Locations.typesize
+R4595 Coq.Init.Logic.True
+R4226 Locations.loc
+R4226 Locations.loc
+R4647 Coq.Init.Logic "~ x" type_scope
+R4649 Locations.diff
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R4752 Locations.typesize_pos
+R4752 Locations.typesize_pos
+R4793 Locations.typesize_pos
+R4793 Locations.typesize_pos
+R4882 Coq.Init.Logic "x <> y" type_scope
+R4865 Locations.diff
+R4938 Locations.same_not_diff
+R4938 Locations.same_not_diff
+R5017 Locations.diff
+R5003 Locations.diff
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R5210 Coq.Init.Datatypes.bool
+R5225 Coqlib.zeq
+R5274 AST.Tint
+R5282 Coq.Init.Datatypes.false
+R5294 AST.Tfloat
+R5307 Coqlib.zeq
+R5315 Coq.ZArith.BinInt "x + y" Z_scope
+R5338 Coq.Init.Datatypes.false
+R5328 Coq.Init.Datatypes.true
+R5240 Coq.Init.Datatypes.true
+R5205 Coq.ZArith.BinInt.Z
+R5205 Coq.ZArith.BinInt.Z
+R5192 AST.typ
+R5394 Coq.Init.Datatypes.bool
+R5430 Locations.S
+R5433 Locations.Incoming
+R5450 Locations.S
+R5453 Locations.Incoming
+R5501 Coq.Bool.Bool "x || y" bool_scope
+R5480 Locations.overlap_aux
+R5504 Locations.overlap_aux
+R5531 Locations.S
+R5534 Locations.Outgoing
+R5551 Locations.S
+R5554 Locations.Outgoing
+R5602 Coq.Bool.Bool "x || y" bool_scope
+R5581 Locations.overlap_aux
+R5605 Locations.overlap_aux
+R5640 Coq.Init.Datatypes.false
+R5387 Locations.loc
+R5387 Locations.loc
+R5747 Coq.Init.Logic "~ x" type_scope
+R5772 Coq.Init.Logic "A \/ B" type_scope
+R5766 Coq.ZArith.BinInt "x <= y" Z_scope
+R5752 Coq.ZArith.BinInt "x + y" Z_scope
+R5754 Locations.typesize
+R5792 Coq.ZArith.BinInt "x <= y" Z_scope
+R5778 Coq.ZArith.BinInt "x + y" Z_scope
+R5780 Locations.typesize
+R5733 Coq.Init.Logic "x = y" type_scope
+R5712 Locations.overlap_aux
+R5735 Coq.Init.Datatypes.true
+R5846 Locations.typesize_pos
+R5846 Locations.typesize_pos
+R5887 Locations.typesize_pos
+R5887 Locations.typesize_pos
+R5946 Coqlib.zeq
+R5946 Coqlib.zeq
+R6022 Coqlib.zeq
+R6030 Coq.ZArith.BinInt "x + y" Z_scope
+R6022 Coqlib.zeq
+R6030 Coq.ZArith.BinInt "x + y" Z_scope
+R6193 Coq.Init.Logic "~ x" type_scope
+R6218 Coq.Init.Logic "A \/ B" type_scope
+R6212 Coq.ZArith.BinInt "x <= y" Z_scope
+R6198 Coq.ZArith.BinInt "x + y" Z_scope
+R6200 Locations.typesize
+R6238 Coq.ZArith.BinInt "x <= y" Z_scope
+R6224 Coq.ZArith.BinInt "x + y" Z_scope
+R6226 Locations.typesize
+R6179 Coq.Init.Logic "x = y" type_scope
+R6158 Locations.overlap_aux
+R6181 Coq.Init.Datatypes.true
+R6279 Locations.overlap_aux_true_1
+R6279 Locations.overlap_aux_true_1
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R6401 Coq.Init.Logic "~ x" type_scope
+R6403 Locations.diff
+R6391 Coq.Init.Logic "x = y" type_scope
+R6377 Locations.overlap
+R6393 Coq.Init.Datatypes.true
+R6590 Coq.Bool.Bool.orb_true_elim
+R6590 Coq.Bool.Bool.orb_true_elim
+R6629 Locations.overlap_aux_true_1
+R6629 Locations.overlap_aux_true_1
+R6665 Locations.overlap_aux_true_2
+R6665 Locations.overlap_aux_true_2
+R6701 Coq.Bool.Bool.orb_true_elim
+R6701 Coq.Bool.Bool.orb_true_elim
+R6740 Locations.overlap_aux_true_1
+R6740 Locations.overlap_aux_true_1
+R6776 Locations.overlap_aux_true_2
+R6776 Locations.overlap_aux_true_2
+R6950 Coq.Init.Logic "A \/ B" type_scope
+R6944 Coq.ZArith.BinInt "x <= y" Z_scope
+R6930 Coq.ZArith.BinInt "x + y" Z_scope
+R6932 Locations.typesize
+R6970 Coq.ZArith.BinInt "x <= y" Z_scope
+R6956 Coq.ZArith.BinInt "x + y" Z_scope
+R6958 Locations.typesize
+R6912 Coq.Init.Logic "x = y" type_scope
+R6888 Coq.Bool.Bool "x || y" bool_scope
+R6867 Locations.overlap_aux
+R6891 Locations.overlap_aux
+R6914 Coq.Init.Datatypes.false
+R7034 Coq.Bool.Bool.orb_false_elim
+R7034 Coq.Bool.Bool.orb_false_elim
+R7114 Coqlib.zeq
+R7114 Coqlib.zeq
+R7169 Coqlib.zeq
+R7169 Coqlib.zeq
+R7272 Coqlib.zeq
+R7280 Coq.ZArith.BinInt "x + y" Z_scope
+R7272 Coqlib.zeq
+R7280 Coq.ZArith.BinInt "x + y" Z_scope
+R7329 Coqlib.zeq
+R7337 Coq.ZArith.BinInt "x + y" Z_scope
+R7329 Coqlib.zeq
+R7337 Coq.ZArith.BinInt "x + y" Z_scope
+R7386 Coqlib.zeq
+R7394 Coq.ZArith.BinInt "x + y" Z_scope
+R7386 Coqlib.zeq
+R7394 Coq.ZArith.BinInt "x + y" Z_scope
+R7443 Coqlib.zeq
+R7451 Coq.ZArith.BinInt "x + y" Z_scope
+R7443 Coqlib.zeq
+R7451 Coq.ZArith.BinInt "x + y" Z_scope
+R7579 Locations.diff
+R7568 Coq.Init.Logic "x = y" type_scope
+R7554 Locations.overlap
+R7570 Coq.Init.Datatypes.false
+R7545 Coq.Init.Logic "x <> y" type_scope
+R7746 Coqlib.zeq
+R7746 Coqlib.zeq
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R7829 Locations.overlap_aux_false_1
+R7829 Locations.overlap_aux_false_1
+R7870 Locations.overlap_aux_false_1
+R7870 Locations.overlap_aux_false_1
+R7940 Coq.Lists.List.list
+R7945 Locations.loc
+R7930 Locations.loc
+R7996 Coq.Lists.List.nil
+R8003 Coq.Init.Logic.True
+R8017 Coq.Lists.List "x :: y" list_scope
+R8036 Coq.Init.Logic "A /\ B" type_scope
+R8026 Locations.diff
+R7940 Coq.Lists.List.list
+R7945 Locations.loc
+R7930 Locations.loc
+R8113 Coq.Init.Logic "~ x" type_scope
+R8115 Coq.Lists.List.In
+R8099 Locations.notin
+R8246 Locations.same_not_diff
+R8246 Locations.same_not_diff
+R8377 Locations.diff
+R8365 Coq.Lists.List.In
+R8353 Coq.Lists.List.In
+R8315 Coq.Lists.List.list
+R8320 Locations.loc
+R8315 Coq.Lists.List.list
+R8320 Locations.loc
+R8467 Locations.disjoint
+R8442 Locations.disjoint
+R8454 Coq.Lists.List "x :: y" list_scope
+R8628 Locations.disjoint
+R8603 Locations.disjoint
+R8618 Coq.Lists.List "x :: y" list_scope
+R8770 Locations.disjoint
+R8752 Locations.disjoint
+R8830 Locations.diff_sym
+R8830 Locations.diff_sym
+R8925 Locations.diff
+R8913 Coq.Lists.List.In
+R8898 Locations.notin
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R9138 Locations.disjoint
+R9123 Locations.notin
+R9112 Coq.Lists.List.In
+R9261 Locations.in_notin_diff
+R9261 Locations.in_notin_diff
+R9449 Locations.notin
+R9438 Coq.Lists.List.In
+R9420 Locations.disjoint
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R9645 Coq.Lists.List.list
+R9650 Locations.loc
+R9696 Coq.Lists.List.nil
+R9779 Coq.Lists.List "x :: y" list_scope
+R9738 Locations.notin
+R9886 Coq.Init.Logic "A \/ B" type_scope
+R9882 Coq.Init.Logic "x = y" type_scope
+R9889 Locations.diff
+R9868 Coq.Lists.List.In
+R9847 Coq.Lists.List.In
+R9821 Coq.Lists.List.list
+R9826 Locations.loc
+R9821 Coq.Lists.List.list
+R9826 Locations.loc
+R9980 Values.val
+R9973 Locations.loc
+R10015 Locations.t
+R10028 Locations.loc
+R10008 Values.val
+R10075 Values.val
+R10070 Locations.t
+R10061 Locations.loc
+R10132 Locations.t
+R10166 Locations.eq
+R10192 Locations.overlap
+R10213 Values.Vundef
+R10149 Locations.loc
+R10127 Locations.t
+R10118 Values.val
+R10109 Locations.loc
+R10272 Coq.Init.Logic "x = y" type_scope
+R10259 Locations.set
+R10316 Locations.eq
+R10316 Locations.eq
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R10403 Coq.Init.Logic "x = y" type_scope
+R10390 Locations.set
+R10373 Locations.diff
+R10449 Locations.eq
+R10449 Locations.eq
+R10488 Locations.same_not_diff
+R10488 Locations.same_not_diff
+R10525 Locations.overlap
+R10525 Locations.overlap
+R10560 Locations.overlap_not_diff
+R10560 Locations.overlap_not_diff
+FConventions
+R144 Coq.Lists.List "x :: y" list_scope
+R141 Locations.R3
+R150 Coq.Lists.List "x :: y" list_scope
+R147 Locations.R4
+R156 Coq.Lists.List "x :: y" list_scope
+R153 Locations.R5
+R162 Coq.Lists.List "x :: y" list_scope
+R159 Locations.R6
+R168 Coq.Lists.List "x :: y" list_scope
+R165 Locations.R7
+R174 Coq.Lists.List "x :: y" list_scope
+R171 Locations.R8
+R180 Coq.Lists.List "x :: y" list_scope
+R177 Locations.R9
+R187 Coq.Lists.List "x :: y" list_scope
+R183 Locations.R10
+R195 Coq.Lists.List "x :: y" list_scope
+R192 Locations.F1
+R201 Coq.Lists.List "x :: y" list_scope
+R198 Locations.F2
+R207 Coq.Lists.List "x :: y" list_scope
+R204 Locations.F3
+R213 Coq.Lists.List "x :: y" list_scope
+R210 Locations.F4
+R219 Coq.Lists.List "x :: y" list_scope
+R216 Locations.F5
+R225 Coq.Lists.List "x :: y" list_scope
+R222 Locations.F6
+R231 Coq.Lists.List "x :: y" list_scope
+R228 Locations.F7
+R237 Coq.Lists.List "x :: y" list_scope
+R234 Locations.F8
+R243 Coq.Lists.List "x :: y" list_scope
+R240 Locations.F9
+R250 Coq.Lists.List "x :: y" list_scope
+R246 Locations.F10
+R253 Coq.Lists.List.nil
+R293 Coq.Lists.List.map
+R304 Conventions.destroyed_at_call_regs
+R302 Locations.R
+R370 Coq.Lists.List "x :: y" list_scope
+R366 Locations.R13
+R377 Coq.Lists.List "x :: y" list_scope
+R373 Locations.R14
+R384 Coq.Lists.List "x :: y" list_scope
+R380 Locations.R15
+R391 Coq.Lists.List "x :: y" list_scope
+R387 Locations.R16
+R398 Coq.Lists.List "x :: y" list_scope
+R394 Locations.R17
+R405 Coq.Lists.List "x :: y" list_scope
+R401 Locations.R18
+R412 Coq.Lists.List "x :: y" list_scope
+R408 Locations.R19
+R419 Coq.Lists.List "x :: y" list_scope
+R415 Locations.R20
+R426 Coq.Lists.List "x :: y" list_scope
+R422 Locations.R21
+R433 Coq.Lists.List "x :: y" list_scope
+R429 Locations.R22
+R443 Coq.Lists.List "x :: y" list_scope
+R439 Locations.R23
+R450 Coq.Lists.List "x :: y" list_scope
+R446 Locations.R24
+R457 Coq.Lists.List "x :: y" list_scope
+R453 Locations.R25
+R464 Coq.Lists.List "x :: y" list_scope
+R460 Locations.R26
+R471 Coq.Lists.List "x :: y" list_scope
+R467 Locations.R27
+R478 Coq.Lists.List "x :: y" list_scope
+R474 Locations.R28
+R485 Coq.Lists.List "x :: y" list_scope
+R481 Locations.R29
+R492 Coq.Lists.List "x :: y" list_scope
+R488 Locations.R30
+R499 Coq.Lists.List "x :: y" list_scope
+R495 Locations.R31
+R502 Coq.Lists.List.nil
+R551 Coq.Lists.List "x :: y" list_scope
+R547 Locations.F14
+R558 Coq.Lists.List "x :: y" list_scope
+R554 Locations.F15
+R565 Coq.Lists.List "x :: y" list_scope
+R561 Locations.F16
+R572 Coq.Lists.List "x :: y" list_scope
+R568 Locations.F17
+R579 Coq.Lists.List "x :: y" list_scope
+R575 Locations.F18
+R586 Coq.Lists.List "x :: y" list_scope
+R582 Locations.F19
+R593 Coq.Lists.List "x :: y" list_scope
+R589 Locations.F20
+R600 Coq.Lists.List "x :: y" list_scope
+R596 Locations.F21
+R607 Coq.Lists.List "x :: y" list_scope
+R603 Locations.F22
+R617 Coq.Lists.List "x :: y" list_scope
+R613 Locations.F23
+R624 Coq.Lists.List "x :: y" list_scope
+R620 Locations.F24
+R631 Coq.Lists.List "x :: y" list_scope
+R627 Locations.F25
+R638 Coq.Lists.List "x :: y" list_scope
+R634 Locations.F26
+R645 Coq.Lists.List "x :: y" list_scope
+R641 Locations.F27
+R652 Coq.Lists.List "x :: y" list_scope
+R648 Locations.F28
+R659 Coq.Lists.List "x :: y" list_scope
+R655 Locations.F29
+R666 Coq.Lists.List "x :: y" list_scope
+R662 Locations.F30
+R673 Coq.Lists.List "x :: y" list_scope
+R669 Locations.F31
+R676 Coq.Lists.List.nil
+R747 Locations.R13
+R759 Locations.R14
+R771 Locations.R15
+R783 Locations.R16
+R796 Locations.R17
+R808 Locations.R18
+R820 Locations.R19
+R832 Locations.R20
+R845 Locations.R21
+R857 Locations.R22
+R869 Locations.R23
+R881 Locations.R24
+R895 Locations.R25
+R907 Locations.R26
+R919 Locations.R27
+R931 Locations.R28
+R945 Locations.R29
+R957 Locations.R30
+R969 Locations.R31
+R719 Locations.mreg
+R1064 Locations.F14
+R1076 Locations.F15
+R1088 Locations.F16
+R1100 Locations.F17
+R1113 Locations.F18
+R1125 Locations.F19
+R1137 Locations.F20
+R1149 Locations.F21
+R1162 Locations.F22
+R1174 Locations.F23
+R1186 Locations.F24
+R1198 Locations.F25
+R1212 Locations.F26
+R1224 Locations.F27
+R1236 Locations.F28
+R1248 Locations.F29
+R1262 Locations.F30
+R1274 Locations.F31
+R1036 Locations.mreg
+R1353 Coq.Init.Logic "A \/ B" type_scope
+R1349 Coq.Init.Logic "x = y" type_scope
+R1488 Coq.Init.Logic.False
+R1606 Coq.Init.Logic "A \/ B" type_scope
+R1602 Coq.Init.Logic "x = y" type_scope
+R1649 Coq.Init.Logic "A \/ B" type_scope
+R1645 Coq.Init.Logic "x = y" type_scope
+R1678 Coq.Init.Logic.False
+R1759 Coq.Init.Logic.False
+R1749 Coq.Init.Logic "A \/ B" type_scope
+R1745 Coq.Init.Logic "x = y" type_scope
+R1877 Coq.Init.Logic.False
+R1868 Coq.Init.Logic.False
+R2013 Coq.ZArith.BinInt "x >= y" Z_scope
+R1989 Conventions.index_int_callee_save
+R1960 Coq.Lists.List.In
+R1965 Conventions.int_callee_save_regs
+R2200 Coq.ZArith.BinInt "x >= y" Z_scope
+R2174 Conventions.index_float_callee_save
+R2143 Coq.Lists.List.In
+R2148 Conventions.float_callee_save_regs
+R2363 Coq.Lists.List.In
+R2368 Conventions.int_callee_save_regs
+R2355 Coq.ZArith.BinInt "x >= y" Z_scope
+R2331 Conventions.index_int_callee_save
+R2540 Coq.Lists.List.In
+R2545 Conventions.float_callee_save_regs
+R2532 Coq.ZArith.BinInt "x >= y" Z_scope
+R2506 Conventions.index_float_callee_save
+R2793 Coq.Init.Logic "x <> y" type_scope
+R2768 Conventions.index_int_callee_save
+R2796 Conventions.index_int_callee_save
+R2757 Coq.Init.Logic "x <> y" type_scope
+R2722 Coq.Lists.List.In
+R2728 Conventions.int_callee_save_regs
+R2690 Coq.Lists.List.In
+R2696 Conventions.int_callee_save_regs
+R3096 Coq.Init.Logic "x <> y" type_scope
+R3069 Conventions.index_float_callee_save
+R3099 Conventions.index_float_callee_save
+R3058 Coq.Init.Logic "x <> y" type_scope
+R3021 Coq.Lists.List.In
+R3027 Conventions.float_callee_save_regs
+R2987 Coq.Lists.List.In
+R2993 Conventions.float_callee_save_regs
+R3280 Coqlib.list_disjoint
+R3315 Conventions.float_callee_save_regs
+R3294 Conventions.int_callee_save_regs
+R3449 Coq.Lists.List "x :: y" list_scope
+R3443 Locations.R
+R3445 Locations.IT1
+R3458 Coq.Lists.List "x :: y" list_scope
+R3452 Locations.R
+R3454 Locations.IT2
+R3467 Coq.Lists.List "x :: y" list_scope
+R3461 Locations.R
+R3463 Locations.IT3
+R3476 Coq.Lists.List "x :: y" list_scope
+R3470 Locations.R
+R3472 Locations.FT1
+R3485 Coq.Lists.List "x :: y" list_scope
+R3479 Locations.R
+R3481 Locations.FT2
+R3494 Coq.Lists.List "x :: y" list_scope
+R3488 Locations.R
+R3490 Locations.FT3
+R3497 Coq.Lists.List.nil
+R3600 Coq.Init.Logic "A \/ B" type_scope
+R3571 Coq.Init.Logic "A \/ B" type_scope
+R3550 Coq.Lists.List.In
+R3559 Conventions.temporaries
+R3554 Locations.R
+R3574 Coq.Lists.List.In
+R3583 Conventions.destroyed_at_call
+R3578 Locations.R
+R3634 Coq.Init.Logic "A \/ B" type_scope
+R3608 Coq.Lists.List.In
+R3613 Conventions.int_callee_save_regs
+R3637 Coq.Lists.List.In
+R3642 Conventions.float_callee_save_regs
+R3943 Coq.Init.Logic "~ x" type_scope
+R3945 Coq.Lists.List.In
+R3950 Conventions.int_callee_save_regs
+R3906 Coq.Init.Logic "A \/ B" type_scope
+R3885 Coq.Lists.List.In
+R3894 Conventions.temporaries
+R3889 Locations.R
+R3909 Coq.Lists.List.In
+R3918 Conventions.destroyed_at_call
+R3913 Locations.R
+R4217 Coq.Init.Logic "~ x" type_scope
+R4219 Coq.Lists.List.In
+R4224 Conventions.float_callee_save_regs
+R4180 Coq.Init.Logic "A \/ B" type_scope
+R4159 Coq.Lists.List.In
+R4168 Conventions.temporaries
+R4163 Locations.R
+R4183 Coq.Lists.List.In
+R4192 Conventions.destroyed_at_call
+R4187 Locations.R
+R4460 Coq.Init.Logic "x = y" type_scope
+R4448 Locations.mreg_type
+R4462 AST.Tint
+R4419 Coq.Lists.List.In
+R4424 Conventions.int_callee_save_regs
+R4605 Coq.Init.Logic "x = y" type_scope
+R4593 Locations.mreg_type
+R4607 AST.Tfloat
+R4562 Coq.Lists.List.In
+R4567 Conventions.float_callee_save_regs
+R4708 Coqlib.list_norepet
+R4721 Coq.Lists.List.nil
+R4764 Coqlib.list_norepet
+R4781 Coq.Lists.List "x :: y" list_scope
+R4803 Coqlib.list_norepet_cons
+R4740 Coqlib.list_norepet_nil
+R4905 Coqlib.list_norepet
+R4918 Conventions.int_callee_save_regs
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R5028 Coqlib.list_norepet
+R5041 Conventions.float_callee_save_regs
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R5184 Locations.R
+R5191 Coq.Init.Logic "~ x" type_scope
+R5193 Coq.Lists.List.In
+R5198 Conventions.temporaries
+R5215 Locations.S
+R5218 Locations.Local
+R5239 Coq.ZArith.BinInt "x >= y" Z_scope
+R5248 Locations.S
+R5251 Locations.Incoming
+R5268 Coq.Init.Logic.False
+R5278 Locations.S
+R5281 Locations.Outgoing
+R5298 Coq.Init.Logic.False
+R5150 Locations.loc
+R5387 Conventions.loc_acceptable
+R5376 Coq.Lists.List.In
+R5344 Coq.Lists.List.list
+R5349 Locations.loc
+R5472 Locations.notin
+R5484 Conventions.temporaries
+R5452 Conventions.loc_acceptable
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R5647 Conventions.temporaries_not_acceptable
+R5757 Locations.disjoint
+R5773 Conventions.temporaries
+R5735 Conventions.locs_acceptable
+R5809 Locations.notin_disjoint
+R5809 Locations.notin_disjoint
+R5845 Conventions.temporaries_not_acceptable
+R5845 Conventions.temporaries_not_acceptable
+R5925 Locations.mreg
+R5944 AST.sig_res
+R5962 Coq.Init.Datatypes.None
+R5970 Locations.R3
+R5977 Coq.Init.Datatypes.Some
+R5982 AST.Tint
+R5990 Locations.R3
+R5997 Coq.Init.Datatypes.Some
+R6002 AST.Tfloat
+R6012 Locations.F1
+R5912 AST.signature
+R6089 Coq.Init.Logic "x = y" type_scope
+R6062 Locations.mreg_type
+R6073 Conventions.loc_result
+R6104 AST.sig_res
+R6118 Coq.Init.Datatypes.None
+R6126 AST.Tint
+R6133 Coq.Init.Datatypes.Some
+R6200 AST.sig_res
+R6200 AST.sig_res
+R6317 Coq.Lists.List.In
+R6339 Conventions.destroyed_at_call
+R6321 Locations.R
+R6324 Conventions.loc_result
+R6305 AST.signature
+R6406 AST.sig_res
+R6406 AST.sig_res
+R6517 Coq.Lists.List.nil
+R6524 Coq.Lists.List.nil
+R6533 Coq.Lists.List "x :: y" list_scope
+R6488 Coq.Lists.List.list
+R6493 Locations.mreg
+R6600 Coq.Lists.List.nil
+R6607 Coq.Lists.List.nil
+R6616 Coq.Lists.List "x :: y" list_scope
+R6619 Coq.Lists.List.nil
+R6626 Coq.Lists.List.nil
+R6636 Coq.Lists.List "x :: y" list_scope
+R6643 Coq.Lists.List "x :: y" list_scope
+R6571 Coq.Lists.List.list
+R6576 Locations.mreg
+R6774 Coq.Lists.List.list
+R6779 Locations.loc
+R6756 Coq.ZArith.BinInt.Z
+R6735 Coq.Lists.List.list
+R6740 Locations.mreg
+R6716 Coq.Lists.List.list
+R6721 Locations.mreg
+R6698 Coq.Lists.List.list
+R6703 AST.typ
+R6807 Coq.Lists.List.nil
+R6814 Coq.Lists.List.nil
+R6827 Coq.Lists.List "x :: y" list_scope
+R6822 AST.Tint
+R6935 Coq.Lists.List "x :: y" list_scope
+R6868 Coq.Lists.List.nil
+R6875 Locations.S
+R6878 Locations.Outgoing
+R6891 AST.Tint
+R6910 Coq.Lists.List "x :: y" list_scope
+R6918 Locations.R
+R6991 Coq.ZArith.BinInt "x + y" Z_scope
+R6967 Conventions.drop1
+R7007 Coq.Lists.List "x :: y" list_scope
+R7000 AST.Tfloat
+R7117 Coq.Lists.List "x :: y" list_scope
+R7048 Coq.Lists.List.nil
+R7055 Locations.S
+R7058 Locations.Outgoing
+R7071 AST.Tfloat
+R7092 Coq.Lists.List "x :: y" list_scope
+R7100 Locations.R
+R7181 Coq.ZArith.BinInt "x + y" Z_scope
+R7163 Conventions.drop1
+R7149 Conventions.drop2
+R6756 Coq.ZArith.BinInt.Z
+R6735 Coq.Lists.List.list
+R6740 Locations.mreg
+R6716 Coq.Lists.List.list
+R6721 Locations.mreg
+R6698 Coq.Lists.List.list
+R6703 AST.typ
+R7228 Coq.Lists.List "x :: y" list_scope
+R7225 Locations.R3
+R7234 Coq.Lists.List "x :: y" list_scope
+R7231 Locations.R4
+R7240 Coq.Lists.List "x :: y" list_scope
+R7237 Locations.R5
+R7246 Coq.Lists.List "x :: y" list_scope
+R7243 Locations.R6
+R7252 Coq.Lists.List "x :: y" list_scope
+R7249 Locations.R7
+R7258 Coq.Lists.List "x :: y" list_scope
+R7255 Locations.R8
+R7264 Coq.Lists.List "x :: y" list_scope
+R7261 Locations.R9
+R7271 Coq.Lists.List "x :: y" list_scope
+R7267 Locations.R10
+R7274 Coq.Lists.List.nil
+R7315 Coq.Lists.List "x :: y" list_scope
+R7312 Locations.F1
+R7321 Coq.Lists.List "x :: y" list_scope
+R7318 Locations.F2
+R7327 Coq.Lists.List "x :: y" list_scope
+R7324 Locations.F3
+R7333 Coq.Lists.List "x :: y" list_scope
+R7330 Locations.F4
+R7339 Coq.Lists.List "x :: y" list_scope
+R7336 Locations.F5
+R7345 Coq.Lists.List "x :: y" list_scope
+R7342 Locations.F6
+R7351 Coq.Lists.List "x :: y" list_scope
+R7348 Locations.F7
+R7357 Coq.Lists.List "x :: y" list_scope
+R7354 Locations.F8
+R7363 Coq.Lists.List "x :: y" list_scope
+R7360 Locations.F9
+R7370 Coq.Lists.List "x :: y" list_scope
+R7366 Locations.F10
+R7373 Coq.Lists.List.nil
+R7421 Coq.Lists.List.list
+R7426 Locations.loc
+R7435 Conventions.loc_arguments_rec
+R7481 Conventions.float_param_regs
+R7466 Conventions.int_param_regs
+R7456 AST.sig_args
+R7408 AST.signature
+R7548 Coq.ZArith.BinInt.Z
+R7536 Coq.Lists.List.list
+R7541 AST.typ
+R7574 Coq.Lists.List.nil
+R7592 Coq.Lists.List "x :: y" list_scope
+R7587 AST.Tint
+R7604 Coq.ZArith.BinInt "x + y" Z_scope
+R7640 Coq.Lists.List "x :: y" list_scope
+R7633 AST.Tfloat
+R7652 Coq.ZArith.BinInt "x + y" Z_scope
+R7536 Coq.Lists.List.list
+R7541 AST.typ
+R7728 Coq.ZArith.BinInt.Z
+R7735 Conventions.size_arguments_rec
+R7757 AST.sig_args
+R7715 AST.signature
+R7842 Locations.R
+R7849 Coq.Init.Logic "~ x" type_scope
+R7851 Coq.Lists.List.In
+R7856 Conventions.temporaries
+R7873 Locations.S
+R7876 Locations.Outgoing
+R7900 Coq.ZArith.BinInt "x >= y" Z_scope
+R7914 Coq.Init.Logic.False
+R7808 Locations.loc
+R7979 Coq.Lists.List.In
+R7961 Coq.Lists.List.In
+R7967 Conventions.drop1
+R8110 Coq.Lists.List.In
+R8092 Coq.Lists.List.In
+R8098 Conventions.drop2
+R8348 Locations.R
+R8366 Coq.Init.Logic "A \/ B" type_scope
+R8355 Coq.Lists.List.In
+R8369 Coq.Lists.List.In
+R8384 Locations.S
+R8387 Locations.Outgoing
+R8413 Coq.ZArith.BinInt "x >= y" Z_scope
+R8424 Locations.S
+R8431 Coq.Init.Logic.False
+R8281 Coq.Lists.List.In
+R8287 Conventions.loc_arguments_rec
+R8474 Conventions.loc_arguments_rec
+R8474 Conventions.loc_arguments_rec
+R8474 Conventions.loc_arguments_rec
+R8673 Conventions.drop1_incl
+R8673 Conventions.drop1_incl
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R8871 Conventions.drop2_incl
+R8871 Conventions.drop2_incl
+R8905 Conventions.drop1_incl
+R8905 Conventions.drop1_incl
+R9063 Conventions.loc_argument_acceptable
+R9037 Coq.Lists.List.In
+R9043 Conventions.loc_arguments
+R9029 Locations.loc
+R9014 AST.signature
+R9143 Conventions.loc_arguments_rec_charact
+R9143 Conventions.loc_arguments_rec_charact
+R9364 Conventions.loc_arguments_acceptable
+R9449 Coqlib.list_norepet
+R9463 Conventions.drop1
+R9431 Coqlib.list_norepet
+R9598 Coqlib.list_norepet
+R9612 Conventions.drop2
+R9580 Coqlib.list_norepet
+R9850 Locations.notin
+R9867 Conventions.loc_arguments_rec
+R9861 Locations.R
+R9831 Coq.Init.Logic "~ x" type_scope
+R9833 Coq.Lists.List.In
+R9814 Coq.Init.Logic "~ x" type_scope
+R9816 Coq.Lists.List.In
+R10096 Conventions.drop1_incl
+R10096 Conventions.drop1_incl
+R10235 Conventions.drop2_incl
+R10235 Conventions.drop2_incl
+R10283 Conventions.drop1_incl
+R10283 Conventions.drop1_incl
+R10386 Locations.notin
+R10418 Conventions.loc_arguments_rec
+R10397 Locations.S
+R10400 Locations.Local
+R10745 Locations.notin
+R10780 Conventions.loc_arguments_rec
+R10756 Locations.S
+R10759 Locations.Outgoing
+R10733 Coq.ZArith.BinInt "x <= y" Z_scope
+R10718 Coq.ZArith.BinInt "x + y" Z_scope
+R10720 Locations.typesize
+R11061 Locations.norepet
+R11074 Conventions.loc_arguments
+R11049 AST.signature
+R11226 Locations.norepet
+R11239 Conventions.loc_arguments_rec
+R11193 Coqlib.list_disjoint
+R11167 Coqlib.list_norepet
+R11141 Coqlib.list_norepet
+R11226 Locations.norepet
+R11239 Conventions.loc_arguments_rec
+R11193 Coqlib.list_disjoint
+R11167 Coqlib.list_norepet
+R11141 Coqlib.list_norepet
+R11382 Conventions.loc_arguments_rec_notin_outgoing
+R11382 Conventions.loc_arguments_rec_notin_outgoing
+R11438 Conventions.loc_arguments_rec_notin_reg
+R11438 Conventions.loc_arguments_rec_notin_reg
+R11529 Coq.Lists.List "x :: y" list_scope
+R11501 Coqlib.list_disjoint_notin
+R11529 Coq.Lists.List "x :: y" list_scope
+R11501 Coqlib.list_disjoint_notin
+R11579 Conventions.drop1_norepet
+R11579 Conventions.drop1_norepet
+R11638 Conventions.drop1_incl
+R11638 Conventions.drop1_incl
+R11689 Conventions.loc_arguments_rec_notin_outgoing
+R11689 Conventions.loc_arguments_rec_notin_outgoing
+R11745 Conventions.loc_arguments_rec_notin_reg
+R11745 Conventions.loc_arguments_rec_notin_reg
+R11818 Conventions.drop2_incl
+R11818 Conventions.drop2_incl
+R11913 Conventions.drop2_norepet
+R11913 Conventions.drop2_norepet
+R11940 Conventions.drop1_norepet
+R11940 Conventions.drop1_norepet
+R11992 Conventions.drop2_incl
+R11992 Conventions.drop2_incl
+R12016 Conventions.drop1_incl
+R12016 Conventions.drop1_incl
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R12352 Coq.ZArith.BinInt "x <= y" Z_scope
+R12338 Coq.ZArith.BinInt "x + y" Z_scope
+R12340 Locations.typesize
+R12355 Conventions.size_arguments
+R12286 Coq.Lists.List.In
+R12312 Conventions.loc_arguments
+R12290 Locations.S
+R12293 Locations.Outgoing
+R12278 AST.typ
+R12270 Coq.ZArith.BinInt.Z
+R12253 AST.signature
+R12435 Coq.ZArith.BinInt "x >= y" Z_scope
+R12412 Conventions.size_arguments_rec
+R12435 Coq.ZArith.BinInt "x >= y" Z_scope
+R12412 Conventions.size_arguments_rec
+R12493 Conventions.size_arguments_rec
+R12493 Conventions.size_arguments_rec
+R12493 Conventions.size_arguments_rec
+R12689 Coq.ZArith.BinInt "x <= y" Z_scope
+R12675 Coq.ZArith.BinInt "x + y" Z_scope
+R12677 Locations.typesize
+R12722 Coq.ZArith.BinInt "x - y" Z_scope
+R12715 Coq.ZArith.BinInt "x + y" Z_scope
+R12692 Conventions.size_arguments_rec
+R12598 Coq.Lists.List.In
+R12624 Conventions.loc_arguments_rec
+R12602 Locations.S
+R12605 Locations.Outgoing
+R12689 Coq.ZArith.BinInt "x <= y" Z_scope
+R12675 Coq.ZArith.BinInt "x + y" Z_scope
+R12677 Locations.typesize
+R12722 Coq.ZArith.BinInt "x - y" Z_scope
+R12715 Coq.ZArith.BinInt "x + y" Z_scope
+R12692 Conventions.size_arguments_rec
+R12598 Coq.Lists.List.In
+R12624 Conventions.loc_arguments_rec
+R12602 Locations.S
+R12605 Locations.Outgoing
+R12751 Conventions.loc_arguments_rec
+R12751 Conventions.loc_arguments_rec
+R12751 Conventions.loc_arguments_rec
+R12823 Conventions.size_arguments_rec
+R12823 Conventions.size_arguments_rec
+R12967 Locations.typesize
+R12967 Locations.typesize
+R13132 Locations.typesize
+R13132 Locations.typesize
+R13199 Conventions.size_arguments
+R13244 Coq.ZArith.BinInt "x - y" Z_scope
+R13240 Coq.ZArith.BinInt "x + y" Z_scope
+R13223 Conventions.size_arguments
+R13199 Conventions.size_arguments
+R13244 Coq.ZArith.BinInt "x - y" Z_scope
+R13240 Coq.ZArith.BinInt "x + y" Z_scope
+R13223 Conventions.size_arguments
+R13386 Locations.disjoint
+R13419 Conventions.temporaries
+R13400 Conventions.loc_arguments
+R13484 Conventions.loc_arguments_rec_charact
+R13484 Conventions.loc_arguments_rec_charact
+R13685 Conventions.loc_arguments_not_temporaries
+R14027 Locations.notin
+R14040 Conventions.loc_arguments
+R14005 Conventions.loc_acceptable
+R13972 Locations.notin
+R13984 Conventions.destroyed_at_call
+R14119 Conventions.loc_arguments_rec_notin_reg
+R14119 Conventions.loc_arguments_rec_notin_reg
+R14163 Locations.notin_not_in
+R14163 Locations.notin_not_in
+R14272 Locations.notin_not_in
+R14272 Locations.notin_not_in
+R14421 Conventions.loc_arguments_rec_notin_local
+R14421 Conventions.loc_arguments_rec_notin_local
+R14470 Conventions.arguments_not_preserved
+R14578 Coq.Init.Logic "x = y" type_scope
+R14546 Coq.Lists.List.length
+R14559 Conventions.loc_arguments
+R14580 Coq.Lists.List.length
+R14597 AST.sig_args
+R14709 Coq.Init.Logic "x = y" type_scope
+R14657 Coq.Lists.List.length
+R14670 Conventions.loc_arguments_rec
+R14711 Coq.Lists.List.length
+R14709 Coq.Init.Logic "x = y" type_scope
+R14657 Coq.Lists.List.length
+R14670 Conventions.loc_arguments_rec
+R14711 Coq.Lists.List.length
+R14925 Coq.Init.Logic "x = y" type_scope
+R14887 Coq.Lists.List.map
+R14906 Conventions.loc_arguments
+R14896 Locations.type
+R14932 AST.sig_args
+R15156 Coq.Init.Logic "x = y" type_scope
+R15098 Coq.Lists.List.map
+R15117 Conventions.loc_arguments_rec
+R15107 Locations.type
+R15081 Coq.Init.Logic "x = y" type_scope
+R15069 Locations.mreg_type
+R15083 AST.Tfloat
+R15055 Coq.Lists.List.In
+R15029 Coq.Init.Logic "x = y" type_scope
+R15017 Locations.mreg_type
+R15031 AST.Tint
+R15003 Coq.Lists.List.In
+R15156 Coq.Init.Logic "x = y" type_scope
+R15098 Coq.Lists.List.map
+R15117 Conventions.loc_arguments_rec
+R15107 Locations.type
+R15081 Coq.Init.Logic "x = y" type_scope
+R15069 Locations.mreg_type
+R15083 AST.Tfloat
+R15055 Coq.Lists.List.In
+R15029 Coq.Init.Logic "x = y" type_scope
+R15017 Locations.mreg_type
+R15031 AST.Tint
+R15003 Coq.Lists.List.In
+R15232 Coq.Init.Logic.f_equal2
+R15243 Coq.Lists.List.cons
+R15248 AST.typ
+R15232 Coq.Init.Logic.f_equal2
+R15243 Coq.Lists.List.cons
+R15248 AST.typ
+R15232 Coq.Init.Logic.f_equal2
+R15243 Coq.Lists.List.cons
+R15248 AST.typ
+R15361 Conventions.drop1_incl
+R15361 Conventions.drop1_incl
+R15492 Conventions.drop2_incl
+R15492 Conventions.drop2_incl
+R15537 Conventions.drop1_incl
+R15537 Conventions.drop1_incl
+R15756 Locations.no_overlap
+R15777 Conventions.loc_arguments
+R15730 Conventions.locs_acceptable
+R15873 Conventions.loc_arguments_acceptable
+R15873 Conventions.loc_arguments_acceptable
+R15956 Locations.mreg_eq
+R15956 Locations.mreg_eq
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R16156 Locations.loc
+R16182 Locations.S
+R16185 Locations.Outgoing
+R16203 Locations.S
+R16206 Locations.Incoming
+R16149 Locations.loc
+R16286 Coq.Lists.List.map
+R16318 Conventions.loc_arguments
+R16295 Conventions.parameter_of_argument
+R16270 AST.signature
+R16417 Coq.Init.Logic "x = y" type_scope
+R16378 Coq.Lists.List.map
+R16397 Conventions.loc_parameters
+R16387 Locations.type
+R16424 AST.sig_args
+R16485 Coqlib.list_map_compose
+R16485 Coqlib.list_map_compose
+R16517 Conventions.loc_arguments_type
+R16517 Conventions.loc_arguments_type
+R16545 Coqlib.list_map_exten
+R16545 Coqlib.list_map_exten
+R16682 Locations.disjoint
+R16716 Conventions.temporaries
+R16696 Conventions.loc_parameters
+R16797 Coqlib.list_in_map_inv
+R16797 Coqlib.list_in_map_inv
+R16855 Conventions.loc_arguments_not_temporaries
+R16855 Conventions.loc_arguments_not_temporaries
+R17107 Locations.no_overlap
+R17123 Conventions.loc_parameters
+R17079 Conventions.locs_acceptable
+R17230 Coqlib.list_in_map_inv
+R17230 Coqlib.list_in_map_inv
+R17304 Conventions.loc_arguments_acceptable
+R17304 Conventions.loc_arguments_acceptable
+R17410 Locations.mreg_eq
+R17410 Locations.mreg_eq
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+FLTL
+R401 Coq.NArith.BinPos.positive
+R459 Locations.mreg
+R451 Locations.slot
+R505 Locations.slot
+R497 Locations.mreg
+R563 Locations.mreg
+R550 Coq.Lists.List.list
+R555 Locations.mreg
+R537 Op.operation
+R640 Locations.mreg
+R627 Coq.Lists.List.list
+R632 Locations.mreg
+R613 Op.addressing
+R597 AST.memory_chunk
+R718 Locations.mreg
+R705 Coq.Lists.List.list
+R710 Locations.mreg
+R691 Op.addressing
+R675 AST.memory_chunk
+R770 Coq.Init.Datatypes "x + y" type_scope
+R765 Locations.mreg
+R772 AST.ident
+R752 AST.signature
+R807 LTL.node
+R866 LTL.node
+R858 LTL.node
+R845 Coq.Lists.List.list
+R850 Locations.mreg
+R832 Op.condition
+R925 Maps.t
+R933 LTL.block
+R988 AST.signature
+R1015 Coq.ZArith.BinInt.Z
+R1029 LTL.code
+R1052 LTL.node
+R1124 Coq.Init.Logic "A \/ B" type_scope
+R1095 Coqlib.Plt
+R1103 Coq.NArith.BinPos.Psucc
+R1138 Coq.Init.Logic "x = y" type_scope
+R1134 Maps "a ! b"
+R1140 Coq.Init.Datatypes.None
+R1088 LTL.node
+R1171 AST.program
+R1183 LTL.function
+R1213 Globalenvs.t
+R1220 LTL.function
+R1251 Locations.t
+R1319 LTL.locset
+R1370 Locations.R
+R1385 Locations.R
+R1396 Locations.S
+R1399 Locations.Local
+R1416 Values.Vundef
+R1429 Locations.S
+R1432 Locations.Incoming
+R1460 Locations.S
+R1463 Locations.Outgoing
+R1487 Locations.S
+R1490 Locations.Outgoing
+R1510 Values.Vundef
+R1339 Locations.loc
+R1309 LTL.locset
+R1576 LTL.locset
+R1627 Locations.R
+R1645 Coq.Lists.List.In_dec
+R1665 Conventions.temporaries
+R1660 Locations.R
+R1652 Locations.eq
+R1733 Coq.Lists.List.In_dec
+R1753 Conventions.destroyed_at_call
+R1748 Locations.R
+R1740 Locations.eq
+R1842 Locations.R
+R1806 Locations.R
+R1712 Locations.R
+R1853 Locations.S
+R1868 Locations.S
+R1596 Locations.loc
+R1566 LTL.locset
+R1566 LTL.locset
+R1896 LTL.genv
+R1963 Coq.Init.Datatypes.option
+R1970 LTL.function
+R2003 Coq.Init.Datatypes.inl
+R2012 Globalenvs.find_funct
+R2036 Locations.R
+R2046 Coq.Init.Datatypes.inr
+R2070 Globalenvs.find_symbol
+R2108 Coq.Init.Datatypes.None
+R2116 Coq.Init.Datatypes.None
+R2129 Coq.Init.Datatypes.Some
+R2139 Globalenvs.find_funct_ptr
+R1953 LTL.locset
+R1939 Coq.Init.Datatypes "x + y" type_scope
+R1934 Locations.mreg
+R1941 AST.ident
+R2232 Coq.Lists.List.list
+R2237 Values.val
+R2246 Coq.Lists.List.map
+R2269 Locations.R
+R2222 LTL.locset
+R2206 Coq.Lists.List.list
+R2211 Locations.mreg
+R2316 LTL.node
+R2472 Mem.mem
+R2462 LTL.locset
+R2453 LTL.block
+R2424 Mem.mem
+R2414 LTL.locset
+R2405 LTL.block
+R2376 Values.val
+R3879 Mem.mem
+R3869 LTL.locset
+R3860 LTL.block
+R3835 Mem.mem
+R3825 LTL.locset
+R3816 LTL.block
+R3791 Values.val
+R4401 Mem.mem
+R4391 LTL.locset
+R4380 LTL.outcome
+R4356 Mem.mem
+R4346 LTL.locset
+R4337 LTL.block
+R4313 Values.val
+R5303 Mem.mem
+R5293 LTL.locset
+R5282 LTL.outcome
+R5257 Mem.mem
+R5247 LTL.locset
+R5239 LTL.node
+R5214 Values.val
+R5206 LTL.code
+R5895 Mem.mem
+R5885 LTL.locset
+R5846 Mem.mem
+R5836 LTL.locset
+R5824 LTL.function
+R2603 Locations.set
+R2625 Locations.S
+R2615 Locations.R
+R2557 LTL.Bgetstack
+R2754 Locations.set
+R2777 Locations.R
+R2766 Locations.S
+R2708 LTL.Bsetstack
+R2969 Locations.set
+R2981 Locations.R
+R2922 LTL.Bop
+R2889 Coq.Init.Logic "x = y" type_scope
+R2847 Op.eval_operation
+R2872 LTL.reglist
+R2891 Coq.Init.Datatypes.Some
+R3235 Locations.set
+R3247 Locations.R
+R3178 LTL.Bload
+R3145 Coq.Init.Logic "x = y" type_scope
+R3129 Mem.loadv
+R3147 Coq.Init.Datatypes.Some
+R3111 Coq.Init.Logic "x = y" type_scope
+R3066 Op.eval_addressing
+R3094 LTL.reglist
+R3113 Coq.Init.Datatypes.Some
+R3461 LTL.Bstore
+R3427 Coq.Init.Logic "x = y" type_scope
+R3397 Mem.storev
+R3419 Locations.R
+R3429 Coq.Init.Datatypes.Some
+R3379 Coq.Init.Logic "x = y" type_scope
+R3334 Op.eval_addressing
+R3362 LTL.reglist
+R3381 Coq.Init.Datatypes.Some
+R3749 LTL.return_regs
+R3704 LTL.Bcall
+R3630 Coq.Init.Logic "x = y" type_scope
+R3635 LTL.fn_sig
+R3608 Coq.Init.Logic "x = y" type_scope
+R3587 LTL.find_function
+R3610 Coq.Init.Datatypes.Some
+R4541 LTL.Cont
+R4494 LTL.Bgoto
+R4784 LTL.Cont
+R4741 Coq.Init.Logic "x = y" type_scope
+R4702 Op.eval_condition
+R4723 LTL.reglist
+R4743 Coq.Init.Datatypes.Some
+R4748 Coq.Init.Datatypes.true
+R4658 LTL.Bcond
+R5032 LTL.Cont
+R4988 Coq.Init.Logic "x = y" type_scope
+R4949 Op.eval_condition
+R4970 LTL.reglist
+R4990 Coq.Init.Datatypes.Some
+R4995 Coq.Init.Datatypes.false
+R4905 LTL.Bcond
+R5173 LTL.Return
+R5128 LTL.Breturn
+R5399 LTL.Cont
+R5485 Coq.Init.Logic "x = y" type_scope
+R5481 Maps "a ! b"
+R5487 Coq.Init.Datatypes.Some
+R5690 LTL.Cont
+R6162 Mem.free
+R6113 LTL.Return
+R6096 LTL.call_regs
+R6080 LTL.fn_entrypoint
+R6040 Values.Vptr
+R6049 Integers.zero
+R6030 LTL.fn_code
+R5994 Coq.Init.Logic "x = y" type_scope
+R5967 Mem.alloc
+R5980 LTL.fn_stacksize
+R5996 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R6311 Coq.Init.Logic "'exists' x , p" type_scope
+R6321 Coq.Init.Logic "'exists' x , p" type_scope
+R6331 Coq.Init.Logic "'exists' x , p" type_scope
+R6342 Coq.Init.Logic "'exists' x , p" type_scope
+R6397 Coq.Init.Logic "A /\ B" type_scope
+R6388 Coq.Init.Logic "x = y" type_scope
+R6354 Globalenvs.find_symbol
+R6377 AST.prog_main
+R6390 Coq.Init.Datatypes.Some
+R6437 Coq.Init.Logic "A /\ B" type_scope
+R6428 Coq.Init.Logic "x = y" type_scope
+R6402 Globalenvs.find_funct_ptr
+R6430 Coq.Init.Datatypes.Some
+R6483 Coq.Init.Logic "A /\ B" type_scope
+R6453 Coq.Init.Logic "x = y" type_scope
+R6445 LTL.fn_sig
+R6455 AST.mksignature
+R6472 Coq.Init.Datatypes.Some
+R6477 AST.Tint
+R6467 Coq.Lists.List.nil
+R6536 Coq.Init.Logic "A /\ B" type_scope
+R6488 LTL.exec_function
+R6508 Locations.init
+R6520 Values.Vundef
+R6584 Coq.Init.Logic "x = y" type_scope
+R6545 Locations.R
+R6548 Conventions.loc_result
+R6574 LTL.fn_sig
+R6290 Globalenvs.init_mem
+R6258 Globalenvs.globalenv
+R6231 Values.val
+R6218 LTL.program
+R6633 LTL.genv
+R6655 LTL.code
+R6702 Coq.Init.Logic "A \/ B" type_scope
+R6694 Coq.Init.Logic "x = y" type_scope
+R6690 Maps "a ! b"
+R6698 Maps "a ! b"
+R6711 Coq.Init.Logic "x = y" type_scope
+R6707 Maps "a ! b"
+R6713 Coq.Init.Datatypes.None
+R6832 LTL.exec_blocks
+R6784 LTL.exec_blocks
+R6907 LTL.exec_blocks_refl
+R6907 LTL.exec_blocks_refl
+R6933 LTL.exec_blocks_one
+R6933 LTL.exec_blocks_one
+R7017 LTL.exec_blocks_trans
+R7017 LTL.exec_blocks_trans
+R7154 Coq.Lists.List.list
+R7159 LTL.node
+R7145 LTL.block
+R7186 LTL.Bgetstack
+R7226 LTL.Bsetstack
+R7266 LTL.Bop
+R7308 LTL.Bload
+R7360 LTL.Bstore
+R7413 LTL.Bcall
+R7453 LTL.Bgoto
+R7466 Coq.Lists.List "x :: y" list_scope
+R7469 Coq.Lists.List.nil
+R7477 LTL.Bcond
+R7512 Coq.Lists.List "x :: y" list_scope
+R7521 Coq.Lists.List "x :: y" list_scope
+R7524 Coq.Lists.List.nil
+R7532 LTL.Breturn
+R7543 Coq.Lists.List.nil
+R7145 LTL.block
+R7604 Coq.Lists.List.list
+R7609 LTL.node
+R7636 Maps "a ! b"
+R7628 LTL.fn_code
+R7649 Coq.Init.Datatypes.None
+R7657 Coq.Lists.List.nil
+R7665 Coq.Init.Datatypes.Some
+R7675 LTL.successors_aux
+R7596 LTL.node
+R7581 LTL.function
+R7824 Coq.Init.Logic "x = y" type_scope
+R7807 LTL.successors_aux
+R7826 LTL.successors_aux
+R7767 LTL.exec_instrs
+R7941 LTL.successors_aux
+R7941 LTL.successors_aux
+R8116 Coq.Lists.List.In
+R8124 LTL.successors
+R8069 LTL.exec_block
+R8094 LTL.Cont
+R8055 Coq.Init.Logic "x = y" type_scope
+R8051 Maps "a ! b"
+R8043 LTL.fn_code
+R8057 Coq.Init.Datatypes.Some
+R8214 LTL.successors_aux_invariant
+R8214 LTL.successors_aux_invariant
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R8287 LTL.successors_aux_invariant
+R8287 LTL.successors_aux_invariant
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R8360 LTL.successors_aux_invariant
+R8360 LTL.successors_aux_invariant
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+FLTLtyping
+R213 LTL.function
+R280 Locations.Local
+R298 Coq.ZArith.BinInt "x <= y" Z_scope
+R309 Locations.Outgoing
+R330 Coq.ZArith.BinInt "x <= y" Z_scope
+R341 Locations.Incoming
+R369 Coq.Init.Logic "A /\ B" type_scope
+R362 Coq.ZArith.BinInt "x <= y" Z_scope
+R390 Coq.ZArith.BinInt "x <= y" Z_scope
+R376 Coq.ZArith.BinInt "x + y" Z_scope
+R378 Locations.typesize
+R393 Conventions.size_arguments
+R415 LTL.fn_sig
+R252 Locations.slot
+R452 LTL.block
+R602 LTL.Bgetstack
+R548 LTLtyping.slot_bounded
+R525 Coq.Init.Logic "x = y" type_scope
+R513 Locations.slot_type
+R527 Locations.mreg_type
+R812 LTL.Bsetstack
+R758 LTLtyping.slot_bounded
+R735 Coq.Init.Logic "x = y" type_scope
+R723 Locations.slot_type
+R737 Locations.mreg_type
+R676 Locations.Incoming
+R692 Coq.Init.Logic.False
+R705 Coq.Init.Logic.True
+R938 LTL.Bop
+R952 Coq.Lists.List "x :: y" list_scope
+R955 Coq.Lists.List.nil
+R942 Op.Omove
+R885 Coq.Init.Logic "x = y" type_scope
+R872 Locations.mreg_type
+R887 Locations.mreg_type
+R1036 LTL.Bop
+R1047 Coq.Lists.List.nil
+R1040 Op.Oundef
+R1242 LTL.Bop
+R1180 Coq.Init.Logic "x = y" type_scope
+R1139 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R1140 Coq.Lists.List.map
+R1149 Locations.mreg_type
+R1165 Locations.mreg_type
+R1182 Op.type_of_operation
+R1120 Coq.Init.Logic "x <> y" type_scope
+R1123 Op.Oundef
+R1105 Coq.Init.Logic "x <> y" type_scope
+R1108 Op.Omove
+R1451 LTL.Bload
+R1390 Coq.Init.Logic "x = y" type_scope
+R1376 Locations.mreg_type
+R1392 Op.type_of_chunk
+R1341 Coq.Init.Logic "x = y" type_scope
+R1317 Coq.Lists.List.map
+R1326 Locations.mreg_type
+R1343 Op.type_of_addressing
+R1671 LTL.Bstore
+R1610 Coq.Init.Logic "x = y" type_scope
+R1596 Locations.mreg_type
+R1612 Op.type_of_chunk
+R1561 Coq.Init.Logic "x = y" type_scope
+R1537 Coq.Lists.List.map
+R1546 Locations.mreg_type
+R1563 Op.type_of_addressing
+R1843 LTL.Bcall
+R1760 Coq.Init.Datatypes.inl
+R1781 Coq.Init.Logic "x = y" type_scope
+R1769 Locations.mreg_type
+R1783 AST.Tint
+R1795 Coq.Init.Logic.True
+R1908 LTL.Bgoto
+R2042 LTL.Bcond
+R1998 Coq.Init.Logic "x = y" type_scope
+R1974 Coq.Lists.List.map
+R1983 Locations.mreg_type
+R2000 Op.type_of_condition
+R2103 LTL.Breturn
+R2218 LTLtyping.wt_block
+R2206 Coq.Init.Logic "x = y" type_scope
+R2202 Maps "a ! b"
+R2194 LTL.fn_code
+R2208 Coq.Init.Datatypes.Some
+R2156 LTL.function
+R2320 LTLtyping.wt_function
+R2292 Coq.Lists.List.In
+R2303 AST.prog_funct
+R2295 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R2259 LTL.program
+FInterfGraph
+R213 Registers.reg
+R246 Coq.Init.Logic "x = y" type_scope
+R238 InterfGraph.t
+R238 InterfGraph.t
+R268 Coqlib.Plt
+R304 InterfGraph.eq
+R301 InterfGraph.t
+R320 Coq.Init.Logic.refl_equal
+R331 InterfGraph.t
+R377 InterfGraph.eq
+R367 InterfGraph.eq
+R364 InterfGraph.t
+R364 InterfGraph.t
+R393 Coq.Init.Logic.sym_equal
+R403 InterfGraph.t
+R462 InterfGraph.eq
+R452 InterfGraph.eq
+R442 InterfGraph.eq
+R439 InterfGraph.t
+R439 InterfGraph.t
+R439 InterfGraph.t
+R478 Coq.Init.Logic.trans_equal
+R490 InterfGraph.t
+R549 InterfGraph.lt
+R539 InterfGraph.lt
+R529 InterfGraph.lt
+R526 InterfGraph.t
+R526 InterfGraph.t
+R526 InterfGraph.t
+R563 Coqlib.Plt_trans
+R618 Coq.Init.Logic "~ x" type_scope
+R620 InterfGraph.eq
+R608 InterfGraph.lt
+R605 InterfGraph.t
+R605 InterfGraph.t
+R634 Coqlib.Plt_ne
+R674 FSetInterface.Compare
+R685 InterfGraph.eq
+R682 InterfGraph.lt
+R671 InterfGraph.t
+R671 InterfGraph.t
+R716 Coqlib.plt
+R716 Coqlib.plt
+R741 FSetInterface.Lt
+R741 FSetInterface.Lt
+R759 Coqlib.peq
+R759 Coqlib.peq
+R784 FSetInterface.Eq
+R784 FSetInterface.Eq
+R802 FSetInterface.Gt
+R802 FSetInterface.Gt
+R846 Coq.Init.Logic "x <> y" type_scope
+R839 Coq.ZArith.BinInt.Zpos
+R849 Coq.ZArith.BinInt.Zpos
+R846 Coq.Init.Logic "x <> y" type_scope
+R839 Coq.ZArith.BinInt.Zpos
+R849 Coq.ZArith.BinInt.Zpos
+R1005 Coq.Init.Logic "x = y" type_scope
+R997 InterfGraph.t
+R997 InterfGraph.t
+R1036 Coqlib.Plt
+R1030 InterfGraph.t
+R1030 InterfGraph.t
+R1096 InterfGraph.eq
+R1093 InterfGraph.t
+R1112 Coq.Init.Logic.refl_equal
+R1123 InterfGraph.t
+R1169 InterfGraph.eq
+R1159 InterfGraph.eq
+R1156 InterfGraph.t
+R1156 InterfGraph.t
+R1185 Coq.Init.Logic.sym_equal
+R1195 InterfGraph.t
+R1254 InterfGraph.eq
+R1244 InterfGraph.eq
+R1234 InterfGraph.eq
+R1231 InterfGraph.t
+R1231 InterfGraph.t
+R1231 InterfGraph.t
+R1270 Coq.Init.Logic.trans_equal
+R1282 InterfGraph.t
+R1342 InterfGraph.lt
+R1332 InterfGraph.lt
+R1322 InterfGraph.lt
+R1319 InterfGraph.t
+R1319 InterfGraph.t
+R1319 InterfGraph.t
+R1385 Coqlib.Plt_trans
+R1385 Coqlib.Plt_trans
+R1453 Coq.Init.Logic "~ x" type_scope
+R1455 InterfGraph.eq
+R1443 InterfGraph.lt
+R1440 InterfGraph.t
+R1440 InterfGraph.t
+R1531 Coqlib.Plt_strict
+R1531 Coqlib.Plt_strict
+R1604 FSetInterface.Compare
+R1615 InterfGraph.eq
+R1612 InterfGraph.lt
+R1601 InterfGraph.t
+R1601 InterfGraph.t
+R1646 InterfGraph.compare
+R1646 InterfGraph.compare
+R1706 FSetInterface.Lt
+R1706 FSetInterface.Lt
+R1728 FSetInterface.Eq
+R1728 FSetInterface.Eq
+R1780 FSetInterface.Gt
+R1780 FSetInterface.Gt
+R1896 Coq.Init.Datatypes "x * y" type_scope
+R1959 Coq.Init.Logic "A /\ B" type_scope
+R1952 Coq.Init.Datatypes.fst
+R1944 Coq.Init.Datatypes.fst
+R1976 Coq.Init.Datatypes.snd
+R1968 Coq.Init.Datatypes.snd
+R1930 InterfGraph.t
+R1930 InterfGraph.t
+R2015 InterfGraph.eq
+R2012 InterfGraph.t
+R2100 InterfGraph.eq
+R2090 InterfGraph.eq
+R2087 InterfGraph.t
+R2087 InterfGraph.t
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R2213 InterfGraph.eq
+R2203 InterfGraph.eq
+R2193 InterfGraph.eq
+R2190 InterfGraph.t
+R2190 InterfGraph.t
+R2190 InterfGraph.t
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R2321 Coq.Init.Logic "A \/ B" type_scope
+R2314 Coq.Init.Datatypes.fst
+R2306 Coq.Init.Datatypes.fst
+R2348 Coq.Init.Logic "A /\ B" type_scope
+R2341 Coq.Init.Datatypes.fst
+R2333 Coq.Init.Datatypes.fst
+R2365 Coq.Init.Datatypes.snd
+R2357 Coq.Init.Datatypes.snd
+R2292 InterfGraph.t
+R2292 InterfGraph.t
+R2430 InterfGraph.lt
+R2420 InterfGraph.lt
+R2410 InterfGraph.lt
+R2407 InterfGraph.t
+R2407 InterfGraph.t
+R2407 InterfGraph.t
+R2525 Coq.Init.Datatypes.fst
+R2525 Coq.Init.Datatypes.fst
+R2593 Coq.Init.Datatypes.fst
+R2585 Coq.Init.Datatypes.fst
+R2593 Coq.Init.Datatypes.fst
+R2585 Coq.Init.Datatypes.fst
+R2695 Coq.Init.Datatypes.fst
+R2695 Coq.Init.Datatypes.fst
+R2751 Coq.Init.Datatypes.fst
+R2743 Coq.Init.Datatypes.fst
+R2751 Coq.Init.Datatypes.fst
+R2743 Coq.Init.Datatypes.fst
+R2801 Coq.Init.Datatypes.fst
+R2801 Coq.Init.Datatypes.fst
+R2892 Coq.Init.Datatypes.fst
+R2884 Coq.Init.Datatypes.fst
+R2892 Coq.Init.Datatypes.fst
+R2884 Coq.Init.Datatypes.fst
+R2994 Coq.Init.Datatypes.fst
+R2994 Coq.Init.Datatypes.fst
+R3069 Coq.Init.Datatypes.fst
+R3061 Coq.Init.Datatypes.fst
+R3069 Coq.Init.Datatypes.fst
+R3061 Coq.Init.Datatypes.fst
+R3119 Coq.Init.Datatypes.fst
+R3119 Coq.Init.Datatypes.fst
+R3225 Coq.Init.Datatypes.fst
+R3225 Coq.Init.Datatypes.fst
+R3264 Coq.Init.Datatypes.snd
+R3264 Coq.Init.Datatypes.snd
+R3328 Coq.Init.Logic "~ x" type_scope
+R3330 InterfGraph.eq
+R3318 InterfGraph.lt
+R3315 InterfGraph.t
+R3315 InterfGraph.t
+R3538 FSetInterface.Compare
+R3549 InterfGraph.eq
+R3546 InterfGraph.lt
+R3535 InterfGraph.t
+R3535 InterfGraph.t
+R3601 Coq.Init.Datatypes.fst
+R3593 Coq.Init.Datatypes.fst
+R3601 Coq.Init.Datatypes.fst
+R3593 Coq.Init.Datatypes.fst
+R3625 FSetInterface.Lt
+R3625 FSetInterface.Lt
+R3673 Coq.Init.Datatypes.snd
+R3665 Coq.Init.Datatypes.snd
+R3673 Coq.Init.Datatypes.snd
+R3665 Coq.Init.Datatypes.snd
+R3697 FSetInterface.Lt
+R3697 FSetInterface.Lt
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R3728 FSetInterface.Eq
+R3728 FSetInterface.Eq
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R3752 FSetInterface.Gt
+R3752 FSetInterface.Gt
+R3811 FSetInterface.Gt
+R3811 FSetInterface.Gt
+R3993 Locations.mreg
+R4021 Locations.mreg_index
+R4059 Locations.mreg_index_inj
+R4094 Locations.mreg_eq
+R4487 InterfGraph.t
+R4519 InterfGraph.t
+R4549 InterfGraph.t
+R4579 InterfGraph.t
+R4639 Coqlib.plt
+R4664 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R4652 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R4626 Registers.reg
+R4626 Registers.reg
+R4701 InterfGraph.mkgraph
+R4768 InterfGraph.empty
+R4752 InterfGraph.empty
+R4725 InterfGraph.empty
+R4709 InterfGraph.empty
+R4836 InterfGraph.mkgraph
+R4968 InterfGraph.pref_reg_mreg
+R4941 InterfGraph.pref_reg_reg
+R4911 InterfGraph.interf_reg_mreg
+R4845 InterfGraph.add
+R4881 InterfGraph.interf_reg_reg
+R4860 InterfGraph.ordered_pair
+R4824 InterfGraph.graph
+R4815 Registers.reg
+R4815 Registers.reg
+R5048 InterfGraph.mkgraph
+R5169 InterfGraph.pref_reg_mreg
+R5142 InterfGraph.pref_reg_reg
+R5086 InterfGraph.add
+R5111 InterfGraph.interf_reg_mreg
+R5101 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R5059 InterfGraph.interf_reg_reg
+R5036 InterfGraph.graph
+R5026 Locations.mreg
+R5017 Registers.reg
+R5233 InterfGraph.mkgraph
+R5365 InterfGraph.pref_reg_mreg
+R5301 InterfGraph.add
+R5337 InterfGraph.pref_reg_reg
+R5316 InterfGraph.ordered_pair
+R5273 InterfGraph.interf_reg_mreg
+R5244 InterfGraph.interf_reg_reg
+R5221 InterfGraph.graph
+R5212 Registers.reg
+R5212 Registers.reg
+R5443 InterfGraph.mkgraph
+R5538 InterfGraph.add
+R5563 InterfGraph.pref_reg_mreg
+R5553 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R5513 InterfGraph.pref_reg_reg
+R5483 InterfGraph.interf_reg_mreg
+R5454 InterfGraph.interf_reg_reg
+R5431 InterfGraph.graph
+R5421 Locations.mreg
+R5412 Registers.reg
+R5636 InterfGraph.In
+R5671 InterfGraph.interf_reg_reg
+R5650 InterfGraph.ordered_pair
+R5617 InterfGraph.graph
+R5608 Registers.reg
+R5608 Registers.reg
+R5757 InterfGraph.In
+R5781 InterfGraph.interf_reg_mreg
+R5771 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R5738 InterfGraph.graph
+R5728 Locations.mreg
+R5719 Registers.reg
+R5870 Coq.Init.Logic "A \/ B" type_scope
+R5861 Coq.Init.Logic "x = y" type_scope
+R5844 InterfGraph.ordered_pair
+R5863 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R5890 Coq.Init.Logic "x = y" type_scope
+R5873 InterfGraph.ordered_pair
+R5892 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R5946 Coqlib.plt
+R5946 Coqlib.plt
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R6031 Coq.Init.Logic "x = y" type_scope
+R6014 InterfGraph.ordered_pair
+R6033 InterfGraph.ordered_pair
+R6097 Coqlib.plt
+R6097 Coqlib.plt
+R6122 Coqlib.plt
+R6122 Coqlib.plt
+R6194 Coqlib.plt
+R6194 Coqlib.plt
+R6236 Coq.Init.Logic "x = y" type_scope
+R6229 Coq.ZArith.BinInt.Zpos
+R6238 Coq.ZArith.BinInt.Zpos
+R6236 Coq.Init.Logic "x = y" type_scope
+R6229 Coq.ZArith.BinInt.Zpos
+R6238 Coq.ZArith.BinInt.Zpos
+R6348 InterfGraph.interfere
+R6329 InterfGraph.interfere
+R6410 InterfGraph.ordered_pair_sym
+R6410 InterfGraph.ordered_pair_sym
+R6538 Coq.Init.Logic "A /\ B" type_scope
+R6522 InterfGraph.interfere
+R6502 InterfGraph.interfere
+R6583 InterfGraph.interfere_mreg
+R6558 InterfGraph.interfere_mreg
+R6470 InterfGraph.graph
+R6470 InterfGraph.graph
+R6691 InterfGraph.graph_incl
+R6671 InterfGraph.graph_incl
+R6651 InterfGraph.graph_incl
+R6839 InterfGraph.interfere
+R6854 InterfGraph.add_interf
+R6935 InterfGraph.add_1
+R6935 InterfGraph.add_1
+R6963 InterfGraph.eq_refl
+R6963 InterfGraph.eq_refl
+R7032 InterfGraph.graph_incl
+R7046 InterfGraph.add_interf
+R7144 InterfGraph.add_2
+R7144 InterfGraph.add_2
+R7236 InterfGraph.interfere_mreg
+R7256 InterfGraph.add_interf_mreg
+R7352 InterfGraph.add_1
+R7352 InterfGraph.add_1
+R7381 InterfGraph.eq_refl
+R7381 InterfGraph.eq_refl
+R7456 InterfGraph.graph_incl
+R7470 InterfGraph.add_interf_mreg
+R7594 InterfGraph.add_2
+R7594 InterfGraph.add_2
+R7665 InterfGraph.graph_incl
+R7679 InterfGraph.add_pref
+R7799 InterfGraph.graph_incl
+R7813 InterfGraph.add_pref_mreg
+R7935 Registers.t
+R7949 InterfGraph.fold
+R8060 InterfGraph.fold
+R8154 Registers.empty
+R8131 InterfGraph.interf_reg_mreg
+R8097 Registers.add
+R8109 Coq.Init.Datatypes.fst
+R8039 InterfGraph.interf_reg_reg
+R7983 Registers.add
+R8006 Registers.add
+R8018 Coq.Init.Datatypes.snd
+R7995 Coq.Init.Datatypes.fst
+R7926 InterfGraph.graph
+R8265 Coq.Init.Logic "x = y" type_scope
+R8234 Registers.mem
+R8248 Registers.add
+R8267 Coq.Init.Datatypes.true
+R8224 Coq.Init.Logic "x = y" type_scope
+R8209 Registers.mem
+R8226 Coq.Init.Datatypes.true
+R8296 Registers.eq
+R8296 Registers.eq
+R8335 Registers.mem_add_same
+R8335 Registers.mem_add_same
+R8366 Registers.mem_add_other
+R8366 Registers.mem_add_other
+R8597 Coq.Init.Logic "x = y" type_scope
+R8482 Registers.mem
+R8500 Coq.Lists.List.fold_right
+R8537 Registers.add
+R8560 Registers.add
+R8572 Coq.Init.Datatypes.snd
+R8549 Coq.Init.Datatypes.fst
+R8599 Coq.Init.Datatypes.true
+R8470 Coq.Init.Logic "x = y" type_scope
+R8455 Registers.mem
+R8472 Coq.Init.Datatypes.true
+R8658 InterfGraph.mem_add_tail
+R8658 InterfGraph.mem_add_tail
+R8678 InterfGraph.mem_add_tail
+R8678 InterfGraph.mem_add_tail
+R8942 Coq.Init.Logic "A /\ B" type_scope
+R8935 Coq.Init.Logic "x = y" type_scope
+R8918 Registers.mem
+R8937 Coq.Init.Datatypes.true
+R8962 Coq.Init.Logic "x = y" type_scope
+R8945 Registers.mem
+R8964 Coq.Init.Datatypes.true
+R8817 Coq.Lists.List.fold_right
+R8854 Registers.add
+R8877 Registers.add
+R8889 Coq.Init.Datatypes.snd
+R8866 Coq.Init.Datatypes.fst
+R8763 FSetInterface.InList
+R8787 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R8770 InterfGraph.eq
+R9121 Registers.mem_add_same
+R9121 Registers.mem_add_same
+R9151 InterfGraph.mem_add_tail
+R9151 InterfGraph.mem_add_tail
+R9171 Registers.mem_add_same
+R9171 Registers.mem_add_same
+R9261 InterfGraph.mem_add_tail
+R9261 InterfGraph.mem_add_tail
+R9261 InterfGraph.mem_add_tail
+R9261 InterfGraph.mem_add_tail
+R9261 InterfGraph.mem_add_tail
+R9261 InterfGraph.mem_add_tail
+R9261 InterfGraph.mem_add_tail
+R9261 InterfGraph.mem_add_tail
+R9261 InterfGraph.mem_add_tail
+R9261 InterfGraph.mem_add_tail
+R9261 InterfGraph.mem_add_tail
+R9495 Coq.Init.Logic "x = y" type_scope
+R9478 Registers.mem
+R9497 Coq.Init.Datatypes.true
+R9401 Coq.Lists.List.fold_right
+R9438 Registers.add
+R9450 Coq.Init.Datatypes.fst
+R9346 FSetInterface.InList
+R9371 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R9353 InterfGraph.eq
+R9637 Registers.mem_add_same
+R9637 Registers.mem_add_same
+R9667 InterfGraph.mem_add_tail
+R9667 InterfGraph.mem_add_tail
+R9852 Coq.Init.Logic "A /\ B" type_scope
+R9845 Coq.Init.Logic "x = y" type_scope
+R9811 Registers.mem
+R9826 InterfGraph.all_interf_regs
+R9847 Coq.Init.Datatypes.true
+R9891 Coq.Init.Logic "x = y" type_scope
+R9857 Registers.mem
+R9872 InterfGraph.all_interf_regs
+R9893 Coq.Init.Datatypes.true
+R9765 InterfGraph.In
+R9790 InterfGraph.interf_reg_reg
+R9778 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R9955 InterfGraph.fold_1
+R10201 Registers.add
+R10224 Registers.add
+R10236 Coq.Init.Datatypes.snd
+R10213 Coq.Init.Datatypes.fst
+R10182 Registers.t
+R10159 InterfGraph.elt
+R10000 InterfGraph.fold
+R10128 Registers.empty
+R10109 InterfGraph.interf_reg_mreg
+R10083 Registers.add
+R10095 Coq.Init.Datatypes.fst
+R10061 Registers.t
+R10037 InterfGraph.elt
+R9979 InterfGraph.interf_reg_reg
+R9955 InterfGraph.fold_1
+R10201 Registers.add
+R10224 Registers.add
+R10236 Coq.Init.Datatypes.snd
+R10213 Coq.Init.Datatypes.fst
+R10182 Registers.t
+R10159 InterfGraph.elt
+R10000 InterfGraph.fold
+R10128 Registers.empty
+R10109 InterfGraph.interf_reg_mreg
+R10083 Registers.add
+R10095 Coq.Init.Datatypes.fst
+R10061 Registers.t
+R10037 InterfGraph.elt
+R9979 InterfGraph.interf_reg_reg
+R10301 InterfGraph.all_interf_regs_correct_aux_2
+R10301 InterfGraph.all_interf_regs_correct_aux_2
+R10345 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R10345 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R10513 Coq.Init.Logic "x = y" type_scope
+R10479 Registers.mem
+R10494 InterfGraph.all_interf_regs
+R10515 Coq.Init.Datatypes.true
+R10430 InterfGraph.In
+R10457 InterfGraph.interf_reg_mreg
+R10444 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R10576 InterfGraph.fold_1
+R10822 Registers.add
+R10845 Registers.add
+R10857 Coq.Init.Datatypes.snd
+R10834 Coq.Init.Datatypes.fst
+R10803 Registers.t
+R10780 InterfGraph.elt
+R10621 InterfGraph.fold
+R10749 Registers.empty
+R10730 InterfGraph.interf_reg_mreg
+R10704 Registers.add
+R10716 Coq.Init.Datatypes.fst
+R10682 Registers.t
+R10658 InterfGraph.elt
+R10600 InterfGraph.interf_reg_reg
+R10576 InterfGraph.fold_1
+R10822 Registers.add
+R10845 Registers.add
+R10857 Coq.Init.Datatypes.snd
+R10834 Coq.Init.Datatypes.fst
+R10803 Registers.t
+R10780 InterfGraph.elt
+R10621 InterfGraph.fold
+R10749 Registers.empty
+R10730 InterfGraph.interf_reg_mreg
+R10704 Registers.add
+R10716 Coq.Init.Datatypes.fst
+R10682 Registers.t
+R10658 InterfGraph.elt
+R10600 InterfGraph.interf_reg_reg
+R10922 InterfGraph.all_interf_regs_correct_aux_1
+R10922 InterfGraph.all_interf_regs_correct_aux_1
+R10967 InterfGraph.fold_1
+R11086 Registers.add
+R11098 Coq.Init.Datatypes.fst
+R11067 Registers.t
+R11043 InterfGraph.elt
+R11013 Registers.empty
+R10992 InterfGraph.interf_reg_mreg
+R10967 InterfGraph.fold_1
+R11086 Registers.add
+R11098 Coq.Init.Datatypes.fst
+R11067 Registers.t
+R11043 InterfGraph.elt
+R11013 Registers.empty
+R10992 InterfGraph.interf_reg_mreg
+R11142 Registers.t
+R11123 Maps.t
+R11131 Coq.Init.Datatypes.unit
+R11142 Registers.t
+R11123 Maps.t
+R11131 Coq.Init.Datatypes.unit
+R11206 InterfGraph.all_interf_regs_correct_aux_3
+R11206 InterfGraph.all_interf_regs_correct_aux_3
+R11260 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R11260 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+FColoring
+R423 InterfGraph.graph
+R434 Registers.fold
+R479 InterfGraph.add_interf
+R415 InterfGraph.graph
+R401 Registers.t
+R389 Registers.reg
+R377 Coq.Init.Datatypes.bool
+R370 Registers.reg
+R584 InterfGraph.graph
+R595 Coloring.add_interf_live
+R628 Registers.eq
+R657 Coq.Init.Datatypes.true
+R646 Coq.Init.Datatypes.false
+R576 InterfGraph.graph
+R562 Registers.t
+R550 Registers.reg
+R755 InterfGraph.graph
+R766 Coloring.add_interf_live
+R806 Registers.eq
+R845 Registers.eq
+R874 Coq.Init.Datatypes.true
+R863 Coq.Init.Datatypes.false
+R824 Coq.Init.Datatypes.false
+R747 InterfGraph.graph
+R733 Registers.t
+R721 Registers.reg
+R721 Registers.reg
+R980 InterfGraph.graph
+R991 Coq.Lists.List.fold_left
+R1023 Registers.fold
+R1047 InterfGraph.add_interf_mreg
+R972 InterfGraph.graph
+R957 Coq.Lists.List.list
+R962 Locations.mreg
+R935 Registers.t
+R1186 InterfGraph.graph
+R1163 InterfGraph.graph
+R1149 Coq.Lists.List.list
+R1154 Locations.loc
+R1132 Coq.Lists.List.list
+R1137 Registers.reg
+R1226 Coq.Lists.List "x :: y" list_scope
+R1236 Coq.Lists.List "x :: y" list_scope
+R1295 Locations.R
+R1303 InterfGraph.add_pref_mreg
+R1163 InterfGraph.graph
+R1149 Coq.Lists.List.list
+R1154 Locations.loc
+R1132 Coq.Lists.List.list
+R1137 Registers.reg
+R1441 InterfGraph.graph
+R1452 Coq.Lists.List.fold_left
+R1479 Coloring.add_interf_op
+R1433 InterfGraph.graph
+R1419 Registers.t
+R1402 Coq.Lists.List.list
+R1407 Registers.reg
+R1592 InterfGraph.graph
+R1568 InterfGraph.graph
+R1554 Coq.Lists.List.list
+R1559 Registers.reg
+R1625 Coq.Lists.List.nil
+R1641 Coq.Lists.List "x :: y" list_scope
+R1686 Coq.Lists.List.fold_left
+R1726 Registers.eq
+R1750 InterfGraph.add_interf
+R1568 InterfGraph.graph
+R1554 Coq.Lists.List.list
+R1559 Registers.reg
+R1888 InterfGraph.graph
+R1916 RTL.Iop
+R1946 Registers.mem
+R1985 Op.is_move_operation
+R2026 Coq.Init.Datatypes.Some
+R2050 InterfGraph.add_pref
+R2068 Coloring.add_interf_move
+R2110 Coq.Init.Datatypes.None
+R2130 Coloring.add_interf_op
+R2184 RTL.Iload
+R2224 Registers.mem
+R2255 Coloring.add_interf_op
+R2297 RTL.Icall
+R2331 Coloring.add_prefs_call
+R2380 InterfGraph.add_pref_mreg
+R2426 Coloring.add_interf_op
+R2462 Coloring.add_interf_call
+R2517 Conventions.destroyed_at_call_regs
+R2493 Registers.remove
+R2399 Conventions.loc_result
+R2352 Conventions.loc_arguments
+R2549 RTL.Ireturn
+R2558 Coq.Init.Datatypes.Some
+R2575 InterfGraph.add_pref_mreg
+R2592 Conventions.loc_result
+R1879 InterfGraph.graph
+R1865 Registers.t
+R1845 RTL.instruction
+R1830 AST.signature
+R2697 InterfGraph.graph
+R2708 Maps.fold
+R2799 InterfGraph.empty_graph
+R2786 RTL.fn_code
+R2738 Coloring.add_edges_instr
+R2771 Maps "a !! b"
+R2757 RTL.fn_sig
+R2678 Maps.t
+R2685 Registers.t
+R2661 RTL.function
+R2898 Coloring.add_prefs_call
+R2960 Coloring.add_interf_params
+R2999 Coloring.add_interf_entry
+R3045 Coloring.add_edges_instrs
+R3019 RTL.fn_params
+R2981 RTL.fn_params
+R2928 Conventions.loc_parameters
+R2946 RTL.fn_sig
+R2916 RTL.fn_params
+R2883 Registers.t
+R2858 Maps.t
+R2865 Registers.t
+R2841 RTL.function
+R3189 Locations.loc
+R3182 Registers.reg
+R3169 Registers.t
+R3159 RTLtyping.regenv
+R3150 InterfGraph.graph
+R3138 RTL.function
+R3324 InterfGraph.for_all
+R3449 InterfGraph.interf_reg_reg
+R3369 Locations.eq
+R3409 Coq.Init.Datatypes.snd
+R3387 Coq.Init.Datatypes.fst
+R3436 Coq.Init.Datatypes.true
+R3425 Coq.Init.Datatypes.false
+R3314 Locations.loc
+R3307 Registers.reg
+R3289 InterfGraph.graph
+R3534 InterfGraph.for_all
+R3656 InterfGraph.interf_reg_mreg
+R3581 Locations.eq
+R3612 Locations.R
+R3615 Coq.Init.Datatypes.snd
+R3599 Coq.Init.Datatypes.fst
+R3643 Coq.Init.Datatypes.true
+R3632 Coq.Init.Datatypes.false
+R3524 Locations.loc
+R3517 Registers.reg
+R3499 InterfGraph.graph
+R3735 AST.Tint
+R3741 AST.Tint
+R3749 Coq.Init.Datatypes.true
+R3758 AST.Tfloat
+R3766 AST.Tfloat
+R3776 Coq.Init.Datatypes.true
+R3793 Coq.Init.Datatypes.false
+R3703 AST.typ
+R3703 AST.typ
+R3867 Locations.R
+R3883 Coq.Lists.List.In_dec
+R3899 Conventions.temporaries
+R3890 Locations.eq
+R3927 Coq.Init.Datatypes.true
+R3916 Coq.Init.Datatypes.false
+R3936 Locations.S
+R3939 Locations.Local
+R3964 Coqlib.zlt
+R3990 Coq.Init.Datatypes.true
+R3979 Coq.Init.Datatypes.false
+R4009 Coq.Init.Datatypes.false
+R3840 Locations.loc
+R4108 Registers.for_all
+R4172 Coq.Bool.Bool.andb
+R4200 Coloring.same_typ
+R4218 Locations.type
+R4178 Coloring.loc_is_acceptable
+R4098 Locations.loc
+R4091 Registers.reg
+R4072 RTLtyping.regenv
+R4056 Registers.t
+R4342 Coq.Bool.Bool.andb
+R4385 Coq.Bool.Bool.andb
+R4434 Coloring.check_coloring_3
+R4391 Coloring.check_coloring_2
+R4348 Coloring.check_coloring_1
+R4332 Locations.loc
+R4325 Registers.reg
+R4304 Registers.t
+R4291 RTLtyping.regenv
+R4278 InterfGraph.graph
+R4647 Registers.mem
+R4709 AST.Tint
+R4717 Locations.R
+R4719 Locations.R3
+R4724 AST.Tfloat
+R4734 Locations.R
+R4736 Locations.F1
+R4616 Registers.t
+R4603 RTLtyping.regenv
+R4592 Locations.loc
+R4585 Registers.reg
+R5007 Coloring.check_coloring
+R5095 Coq.Init.Datatypes.None
+R5047 Coq.Init.Datatypes.Some
+R5053 Coloring.alloc_of_coloring
+R4973 Coloring.graph_coloring
+R4934 InterfGraph.all_interf_regs
+R4893 Coloring.interf_graph
+R4871 RTLtyping.regenv
+R4855 Registers.t
+R4830 Maps.t
+R4837 Registers.t
+R4813 RTL.function
+FColoringproof
+R298 InterfGraph.graph_incl
+R427 InterfGraph.graph_incl
+R445 Coq.Lists.List.fold_left
+R495 InterfGraph.add_interf
+R407 Coq.Init.Datatypes.bool
+R400 Registers.reg
+R585 Coloringproof.graph_incl_refl
+R585 Coloringproof.graph_incl_refl
+R650 InterfGraph.add_interf
+R610 InterfGraph.graph_incl_trans
+R650 InterfGraph.add_interf
+R610 InterfGraph.graph_incl_trans
+R705 InterfGraph.add_interf_incl
+R705 InterfGraph.add_interf_incl
+R730 Coloringproof.graph_incl_refl
+R730 Coloringproof.graph_incl_refl
+R843 InterfGraph.graph_incl
+R857 Coloring.add_interf_live
+R823 Coq.Init.Datatypes.bool
+R816 Registers.reg
+R942 Registers.fold_spec
+R942 Registers.fold_spec
+R968 Coloringproof.add_interf_live_incl_aux
+R968 Coloringproof.add_interf_live_incl_aux
+R1102 InterfGraph.interfere
+R1123 Coq.Lists.List.fold_left
+R1173 InterfGraph.add_interf
+R1090 Coq.Init.Logic "x = y" type_scope
+R1092 Coq.Init.Datatypes.true
+R1067 Coq.Lists.List.In
+R1328 Coloringproof.add_interf_live_incl_aux
+R1370 InterfGraph.add_interf
+R1328 Coloringproof.add_interf_live_incl_aux
+R1370 InterfGraph.add_interf
+R1425 InterfGraph.add_interf_correct
+R1425 InterfGraph.add_interf_correct
+R1587 InterfGraph.interfere
+R1604 Coloring.add_interf_live
+R1575 Coq.Init.Logic "x = y" type_scope
+R1577 Coq.Init.Datatypes.true
+R1554 Coq.Init.Logic "x = y" type_scope
+R1536 Registers.mem
+R1556 Coq.Init.Datatypes.true
+R1690 Registers.fold_spec
+R1690 Registers.fold_spec
+R1716 Coloringproof.add_interf_live_correct_aux
+R1716 Coloringproof.add_interf_live_correct_aux
+R1759 Registers.elements_correct
+R1759 Registers.elements_correct
+R1846 InterfGraph.graph_incl
+R1860 Coloring.add_interf_op
+R1932 Coloringproof.add_interf_live_incl
+R1932 Coloringproof.add_interf_live_incl
+R2058 InterfGraph.interfere
+R2075 Coloring.add_interf_op
+R2046 Coq.Init.Logic "x <> y" type_scope
+R2032 Coq.Init.Logic "x = y" type_scope
+R2014 Registers.mem
+R2034 Coq.Init.Datatypes.true
+R2150 Coloringproof.add_interf_live_correct
+R2150 Coloringproof.add_interf_live_correct
+R2192 Registers.eq
+R2192 Registers.eq
+R2299 InterfGraph.graph_incl
+R2313 Coloring.add_interf_move
+R2393 Coloringproof.add_interf_live_incl
+R2393 Coloringproof.add_interf_live_incl
+R2537 InterfGraph.interfere
+R2554 Coloring.add_interf_move
+R2525 Coq.Init.Logic "x <> y" type_scope
+R2513 Coq.Init.Logic "x <> y" type_scope
+R2499 Coq.Init.Logic "x = y" type_scope
+R2481 Registers.mem
+R2501 Coq.Init.Datatypes.true
+R2637 Coloringproof.add_interf_live_correct
+R2637 Coloringproof.add_interf_live_correct
+R2679 Registers.eq
+R2679 Registers.eq
+R2727 Registers.eq
+R2727 Registers.eq
+R2837 InterfGraph.graph_incl
+R2855 Coq.Lists.List.fold_left
+R2882 InterfGraph.add_interf_mreg
+R2963 Coloringproof.graph_incl_refl
+R2963 Coloringproof.graph_incl_refl
+R3011 InterfGraph.add_interf_mreg
+R2988 InterfGraph.graph_incl_trans
+R3011 InterfGraph.add_interf_mreg
+R2988 InterfGraph.graph_incl_trans
+R3044 InterfGraph.add_interf_mreg_incl
+R3044 InterfGraph.add_interf_mreg_incl
+R3136 InterfGraph.graph_incl
+R3154 Registers.fold
+R3178 InterfGraph.add_interf_mreg
+R3236 Registers.fold_spec
+R3236 Registers.fold_spec
+R3260 Coloringproof.add_interf_call_incl_aux_1
+R3260 Coloringproof.add_interf_call_incl_aux_1
+R3351 InterfGraph.graph_incl
+R3365 Coloring.add_interf_call
+R3453 Coloringproof.graph_incl_refl
+R3453 Coloringproof.graph_incl_refl
+R3479 InterfGraph.graph_incl_trans
+R3479 InterfGraph.graph_incl_trans
+R3532 Coloringproof.add_interf_call_incl_aux_2
+R3532 Coloringproof.add_interf_call_incl_aux_2
+R3658 InterfGraph.interfere
+R3634 InterfGraph.interfere
+R3612 InterfGraph.graph_incl
+R3836 InterfGraph.interfere_mreg
+R3807 InterfGraph.interfere_mreg
+R3785 InterfGraph.graph_incl
+R3993 InterfGraph.interfere_mreg
+R4018 Coq.Lists.List.fold_left
+R4045 InterfGraph.add_interf_mreg
+R3978 Coq.Lists.List.In
+R4164 Coloringproof.interfere_mreg_incl
+R4164 Coloringproof.interfere_mreg_incl
+R4194 Coloringproof.add_interf_call_incl_aux_1
+R4194 Coloringproof.add_interf_call_incl_aux_1
+R4230 InterfGraph.add_interf_mreg_correct
+R4230 InterfGraph.add_interf_mreg_correct
+R4374 InterfGraph.interfere_mreg
+R4399 Registers.fold
+R4423 InterfGraph.add_interf_mreg
+R4362 Coq.Init.Logic "x = y" type_scope
+R4344 Registers.mem
+R4364 Coq.Init.Datatypes.true
+R4481 Registers.fold_spec
+R4481 Registers.fold_spec
+R4505 Coloringproof.add_interf_call_correct_aux_1
+R4505 Coloringproof.add_interf_call_correct_aux_1
+R4544 Registers.elements_correct
+R4544 Registers.elements_correct
+R4697 InterfGraph.interfere_mreg
+R4718 Coloring.add_interf_call
+R4676 Coq.Lists.List.In
+R4664 Coq.Init.Logic "x = y" type_scope
+R4646 Registers.mem
+R4666 Coq.Init.Datatypes.true
+R4847 Coloringproof.interfere_mreg_incl
+R4847 Coloringproof.interfere_mreg_incl
+R4876 Coloringproof.add_interf_call_incl
+R4876 Coloringproof.add_interf_call_incl
+R4906 Coloringproof.add_interf_call_correct_aux_2
+R4906 Coloringproof.add_interf_call_correct_aux_2
+R5027 InterfGraph.graph_incl
+R5041 Coloring.add_prefs_call
+R5137 Coloringproof.graph_incl_refl
+R5137 Coloringproof.graph_incl_refl
+R5137 Coloringproof.graph_incl_refl
+R5137 Coloringproof.graph_incl_refl
+R5137 Coloringproof.graph_incl_refl
+R5178 InterfGraph.graph_incl_trans
+R5178 InterfGraph.graph_incl_trans
+R5220 InterfGraph.add_pref_mreg_incl
+R5220 InterfGraph.add_pref_mreg_incl
+R5309 InterfGraph.graph_incl
+R5323 Coloring.add_interf_entry
+R5431 Coloringproof.graph_incl_refl
+R5431 Coloringproof.graph_incl_refl
+R5457 InterfGraph.graph_incl_trans
+R5457 InterfGraph.graph_incl_trans
+R5498 Coloringproof.add_interf_op_incl
+R5498 Coloringproof.add_interf_op_incl
+R5651 InterfGraph.interfere
+R5668 Coloring.add_interf_entry
+R5640 Coq.Init.Logic "x <> y" type_scope
+R5625 Coq.Init.Logic "x = y" type_scope
+R5606 Registers.mem
+R5627 Coq.Init.Datatypes.true
+R5588 Coq.Lists.List.In
+R5833 Coloring.add_interf_op
+R5812 Coloringproof.interfere_incl
+R5833 Coloring.add_interf_op
+R5812 Coloringproof.interfere_incl
+R5868 Coloringproof.add_interf_entry_incl
+R5868 Coloringproof.add_interf_entry_incl
+R5906 InterfGraph.interfere_sym
+R5906 InterfGraph.interfere_sym
+R5927 Coloringproof.add_interf_op_correct
+R5927 Coloringproof.add_interf_op_correct
+R6024 InterfGraph.graph_incl
+R6041 Coq.Lists.List.fold_left
+R6077 Registers.eq
+R6101 InterfGraph.add_interf
+R6179 Coloringproof.graph_incl_refl
+R6179 Coloringproof.graph_incl_refl
+R6205 InterfGraph.graph_incl_trans
+R6205 InterfGraph.graph_incl_trans
+R6246 Registers.eq
+R6246 Registers.eq
+R6275 Coloringproof.graph_incl_refl
+R6275 Coloringproof.graph_incl_refl
+R6298 InterfGraph.add_interf_incl
+R6298 InterfGraph.add_interf_incl
+R6368 InterfGraph.graph_incl
+R6382 Coloring.add_interf_params
+R6453 Coloringproof.graph_incl_refl
+R6453 Coloringproof.graph_incl_refl
+R6479 InterfGraph.graph_incl_trans
+R6479 InterfGraph.graph_incl_trans
+R6520 Coloringproof.add_interf_params_incl_aux
+R6520 Coloringproof.add_interf_params_incl_aux
+R6642 InterfGraph.interfere
+R6662 Coq.Lists.List.fold_left
+R6698 Registers.eq
+R6722 InterfGraph.add_interf
+R6631 Coq.Init.Logic "x <> y" type_scope
+R6614 Coq.Lists.List.In
+R6845 InterfGraph.interfere_sym
+R6845 InterfGraph.interfere_sym
+R6867 Coloringproof.interfere_incl
+R6867 Coloringproof.interfere_incl
+R6891 Coloringproof.add_interf_params_incl_aux
+R6891 Coloringproof.add_interf_params_incl_aux
+R6928 Registers.eq
+R6928 Registers.eq
+R6970 InterfGraph.add_interf_correct
+R6970 InterfGraph.add_interf_correct
+R7098 InterfGraph.interfere
+R7115 Coloring.add_interf_params
+R7087 Coq.Init.Logic "x <> y" type_scope
+R7072 Coq.Lists.List.In
+R7060 Coq.Lists.List.In
+R7272 Coloringproof.interfere_incl
+R7272 Coloringproof.interfere_incl
+R7294 Coloringproof.add_interf_params_incl
+R7294 Coloringproof.add_interf_params_incl
+R7326 Coloringproof.add_interf_params_correct_aux
+R7326 Coloringproof.add_interf_params_correct_aux
+R7380 InterfGraph.interfere_sym
+R7380 InterfGraph.interfere_sym
+R7404 Coloringproof.interfere_incl
+R7404 Coloringproof.interfere_incl
+R7426 Coloringproof.add_interf_params_incl
+R7426 Coloringproof.add_interf_params_incl
+R7458 Coloringproof.add_interf_params_correct_aux
+R7458 Coloringproof.add_interf_params_correct_aux
+R7566 InterfGraph.graph_incl
+R7580 Coloring.add_edges_instr
+R7684 Coloringproof.graph_incl_refl
+R7684 Coloringproof.graph_incl_refl
+R7684 Coloringproof.graph_incl_refl
+R7684 Coloringproof.graph_incl_refl
+R7684 Coloringproof.graph_incl_refl
+R7684 Coloringproof.graph_incl_refl
+R7684 Coloringproof.graph_incl_refl
+R7684 Coloringproof.graph_incl_refl
+R7709 Registers.mem
+R7709 Registers.mem
+R7741 Op.is_move_operation
+R7741 Op.is_move_operation
+R7774 InterfGraph.graph_incl_trans
+R7805 InterfGraph.add_pref_incl
+R7774 InterfGraph.graph_incl_trans
+R7805 InterfGraph.add_pref_incl
+R7829 Coloringproof.add_interf_move_incl
+R7829 Coloringproof.add_interf_move_incl
+R7859 Coloringproof.add_interf_op_incl
+R7859 Coloringproof.add_interf_op_incl
+R7887 Coloringproof.graph_incl_refl
+R7887 Coloringproof.graph_incl_refl
+R7912 Registers.mem
+R7912 Registers.mem
+R7940 Coloringproof.add_interf_op_incl
+R7940 Coloringproof.add_interf_op_incl
+R7968 Coloringproof.graph_incl_refl
+R7968 Coloringproof.graph_incl_refl
+R7994 InterfGraph.graph_incl_trans
+R8025 Coloringproof.add_prefs_call_incl
+R7994 InterfGraph.graph_incl_trans
+R8025 Coloringproof.add_prefs_call_incl
+R8056 InterfGraph.graph_incl_trans
+R8087 InterfGraph.add_pref_mreg_incl
+R8056 InterfGraph.graph_incl_trans
+R8087 InterfGraph.add_pref_mreg_incl
+R8117 InterfGraph.graph_incl_trans
+R8148 Coloringproof.add_interf_op_incl
+R8117 InterfGraph.graph_incl_trans
+R8148 Coloringproof.add_interf_op_incl
+R8177 Coloringproof.add_interf_call_incl
+R8177 Coloringproof.add_interf_call_incl
+R8221 InterfGraph.add_pref_mreg_incl
+R8221 InterfGraph.add_pref_mreg_incl
+R8249 Coloringproof.graph_incl_refl
+R8249 Coloringproof.graph_incl_refl
+R8390 RTL.Iop
+R8423 Op.is_move_operation
+R8462 Coq.Init.Datatypes.Some
+R8606 InterfGraph.interfere
+R8596 Coq.Init.Logic "x <> y" type_scope
+R8584 Coq.Init.Logic "x <> y" type_scope
+R8562 Coq.Init.Logic "x = y" type_scope
+R8544 Registers.mem
+R8564 Coq.Init.Datatypes.true
+R8524 Coq.Init.Logic "x = y" type_scope
+R8504 Registers.mem
+R8526 Coq.Init.Datatypes.true
+R8632 Coq.Init.Datatypes.None
+R8760 InterfGraph.interfere
+R8750 Coq.Init.Logic "x <> y" type_scope
+R8728 Coq.Init.Logic "x = y" type_scope
+R8710 Registers.mem
+R8730 Coq.Init.Datatypes.true
+R8690 Coq.Init.Logic "x = y" type_scope
+R8670 Registers.mem
+R8692 Coq.Init.Datatypes.true
+R8792 RTL.Iload
+R8927 InterfGraph.interfere
+R8917 Coq.Init.Logic "x <> y" type_scope
+R8899 Coq.Init.Logic "x = y" type_scope
+R8881 Registers.mem
+R8901 Coq.Init.Datatypes.true
+R8865 Coq.Init.Logic "x = y" type_scope
+R8845 Registers.mem
+R8867 Coq.Init.Datatypes.true
+R8949 RTL.Icall
+R9122 Coq.Init.Logic "A /\ B" type_scope
+R9101 InterfGraph.interfere_mreg
+R9083 Coq.Init.Logic "x <> y" type_scope
+R9041 Coq.Lists.List.In
+R9047 Conventions.destroyed_at_call_regs
+R9023 Coq.Init.Logic "x = y" type_scope
+R9005 Registers.mem
+R9025 Coq.Init.Datatypes.true
+R9197 InterfGraph.interfere
+R9187 Coq.Init.Logic "x <> y" type_scope
+R9167 Coq.Init.Logic "x = y" type_scope
+R9149 Registers.mem
+R9169 Coq.Init.Datatypes.true
+R9231 Coq.Init.Logic.True
+R8350 InterfGraph.graph
+R8333 RTL.instruction
+R8315 Registers.t
+R9368 Coloringproof.correct_interf_instr
+R9328 Coloringproof.correct_interf_instr
+R9306 InterfGraph.graph_incl
+R9503 Op.is_move_operation
+R9503 Op.is_move_operation
+R9544 Coloringproof.interfere_incl
+R9544 Coloringproof.interfere_incl
+R9584 Coloringproof.interfere_incl
+R9584 Coloringproof.interfere_incl
+R9624 Coloringproof.interfere_incl
+R9624 Coloringproof.interfere_incl
+R9687 Coloringproof.interfere_mreg_incl
+R9687 Coloringproof.interfere_mreg_incl
+R9732 Coloringproof.interfere_incl
+R9732 Coloringproof.interfere_incl
+R9821 Coloringproof.correct_interf_instr
+R9854 Coloring.add_edges_instr
+R9995 Op.is_move_operation
+R9995 Op.is_move_operation
+R10047 Coloringproof.interfere_incl
+R10047 Coloringproof.interfere_incl
+R10072 InterfGraph.add_pref_incl
+R10072 InterfGraph.add_pref_incl
+R10093 Coloringproof.add_interf_move_correct
+R10093 Coloringproof.add_interf_move_correct
+R10143 Coloringproof.add_interf_op_correct
+R10143 Coloringproof.add_interf_op_correct
+R10201 Coloringproof.add_interf_op_correct
+R10201 Coloringproof.add_interf_op_correct
+R10286 Coloring.add_interf_call
+R10325 Conventions.destroyed_at_call_regs
+R10303 Registers.remove
+R10256 Coloringproof.interfere_mreg_incl
+R10286 Coloring.add_interf_call
+R10325 Conventions.destroyed_at_call_regs
+R10303 Registers.remove
+R10256 Coloringproof.interfere_mreg_incl
+R10361 InterfGraph.graph_incl_trans
+R10392 Coloringproof.add_prefs_call_incl
+R10361 InterfGraph.graph_incl_trans
+R10392 Coloringproof.add_prefs_call_incl
+R10423 InterfGraph.graph_incl_trans
+R10454 InterfGraph.add_pref_mreg_incl
+R10423 InterfGraph.graph_incl_trans
+R10454 InterfGraph.add_pref_mreg_incl
+R10483 Coloringproof.add_interf_op_incl
+R10483 Coloringproof.add_interf_op_incl
+R10511 Coloringproof.add_interf_call_correct
+R10511 Coloringproof.add_interf_call_correct
+R10552 Registers.mem_remove_other
+R10552 Registers.mem_remove_other
+R10593 Coloringproof.interfere_incl
+R10593 Coloringproof.interfere_incl
+R10618 InterfGraph.graph_incl_trans
+R10649 Coloringproof.add_prefs_call_incl
+R10618 InterfGraph.graph_incl_trans
+R10649 Coloringproof.add_prefs_call_incl
+R10679 InterfGraph.add_pref_mreg_incl
+R10679 InterfGraph.add_pref_mreg_incl
+R10707 Coloringproof.add_interf_op_correct
+R10707 Coloringproof.add_interf_op_correct
+R10805 InterfGraph.graph_incl
+R10823 Coq.Lists.List.fold_left
+R10899 Coloring.add_edges_instr
+R10932 Maps "a !! b"
+R10936 Coq.Init.Datatypes.fst
+R10920 Coq.Init.Datatypes.snd
+R10871 Coq.Init.Datatypes "x * y" type_scope
+R10862 Coq.NArith.BinPos.positive
+R10873 RTL.instruction
+R10850 InterfGraph.graph
+R11014 Coloringproof.graph_incl_refl
+R11014 Coloringproof.graph_incl_refl
+R11040 InterfGraph.graph_incl_trans
+R11040 InterfGraph.graph_incl_trans
+R11081 Coloringproof.add_edges_instr_incl
+R11081 Coloringproof.add_edges_instr_incl
+R11203 Coloringproof.correct_interf_instr
+R11240 Coq.Lists.List.fold_left
+R11316 Coloring.add_edges_instr
+R11349 Maps "a !! b"
+R11353 Coq.Init.Datatypes.fst
+R11337 Coq.Init.Datatypes.snd
+R11288 Coq.Init.Datatypes "x * y" type_scope
+R11279 Coq.NArith.BinPos.positive
+R11290 RTL.instruction
+R11267 InterfGraph.graph
+R11228 Maps "a !! b"
+R11180 Coq.Lists.List.In
+R11183 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R11475 Coloringproof.correct_interf_instr_incl
+R11475 Coloringproof.correct_interf_instr_incl
+R11510 Coloringproof.add_edges_instrs_incl_aux
+R11510 Coloringproof.add_edges_instrs_incl_aux
+R11545 Coloringproof.add_edges_instr_correct
+R11545 Coloringproof.add_edges_instr_correct
+R11669 Coloringproof.correct_interf_instr
+R11702 Coloring.add_edges_instrs
+R11694 Maps "a !! b"
+R11655 Coq.Init.Logic "x = y" type_scope
+R11651 Maps "a ! b"
+R11643 RTL.fn_code
+R11657 Coq.Init.Datatypes.Some
+R11782 Maps.fold_spec
+R11782 Maps.fold_spec
+R11807 Coloringproof.add_edges_instrs_correct_aux
+R11807 Coloringproof.add_edges_instrs_correct_aux
+R11845 Maps.elements_correct
+R11845 Maps.elements_correct
+R11970 Coloringproof.correct_interf_instr
+R12003 Coloring.interf_graph
+R11995 Maps "a !! b"
+R11956 Coq.Init.Logic "x = y" type_scope
+R11952 Maps "a ! b"
+R11944 RTL.fn_code
+R11958 Coq.Init.Datatypes.Some
+R12109 Coloring.add_edges_instrs
+R12077 Coloringproof.correct_interf_instr_incl
+R12109 Coloring.add_edges_instrs
+R12077 Coloringproof.correct_interf_instr_incl
+R12144 InterfGraph.graph_incl_trans
+R12175 Coloringproof.add_prefs_call_incl
+R12144 InterfGraph.graph_incl_trans
+R12175 Coloringproof.add_prefs_call_incl
+R12206 InterfGraph.graph_incl_trans
+R12237 Coloringproof.add_interf_params_incl
+R12206 InterfGraph.graph_incl_trans
+R12237 Coloringproof.add_interf_params_incl
+R12270 Coloringproof.add_interf_entry_incl
+R12270 Coloringproof.add_interf_entry_incl
+R12301 Coloringproof.add_edges_instrs_correct
+R12301 Coloringproof.add_edges_instrs_correct
+R12464 InterfGraph.interfere
+R12481 Coloring.interf_graph
+R12453 Coq.Init.Logic "x <> y" type_scope
+R12425 Coq.Lists.List.In
+R12434 RTL.fn_params
+R12400 Coq.Lists.List.In
+R12409 RTL.fn_params
+R12557 Coloringproof.interfere_incl
+R12557 Coloringproof.interfere_incl
+R12581 Coloringproof.add_prefs_call_incl
+R12581 Coloringproof.add_prefs_call_incl
+R12610 Coloringproof.add_interf_params_correct
+R12610 Coloringproof.add_interf_params_correct
+R12781 InterfGraph.interfere
+R12798 Coloring.interf_graph
+R12770 Coq.Init.Logic "x <> y" type_scope
+R12755 Coq.Init.Logic "x = y" type_scope
+R12735 Registers.mem
+R12757 Coq.Init.Datatypes.true
+R12710 Coq.Lists.List.In
+R12719 RTL.fn_params
+R12873 Coloringproof.interfere_incl
+R12873 Coloringproof.interfere_incl
+R12898 InterfGraph.graph_incl_trans
+R12929 Coloringproof.add_prefs_call_incl
+R12898 InterfGraph.graph_incl_trans
+R12929 Coloringproof.add_prefs_call_incl
+R12959 Coloringproof.add_interf_params_incl
+R12959 Coloringproof.add_interf_params_incl
+R12991 Coloringproof.add_interf_entry_correct
+R12991 Coloringproof.add_interf_entry_correct
+R13128 InterfGraph.graph
+R13149 RTLtyping.regenv
+R13175 Registers.t
+R13211 Locations.loc
+R13204 Registers.reg
+R13365 Coq.Init.Logic "x <> y" type_scope
+R13307 InterfGraph.In
+R13332 InterfGraph.interf_reg_reg
+R13320 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R13295 Coq.Init.Logic "x = y" type_scope
+R13267 Coloring.check_coloring_1
+R13297 Coq.Init.Datatypes.true
+R13434 FSetInterface.compat_bool
+R13498 Locations.eq
+R13538 Coq.Init.Datatypes.snd
+R13516 Coq.Init.Datatypes.fst
+R13583 Coq.Init.Datatypes.true
+R13572 Coq.Init.Datatypes.false
+R13460 InterfGraph.eq
+R13434 FSetInterface.compat_bool
+R13498 Locations.eq
+R13538 Coq.Init.Datatypes.snd
+R13516 Coq.Init.Datatypes.fst
+R13583 Coq.Init.Datatypes.true
+R13572 Coq.Init.Datatypes.false
+R13460 InterfGraph.eq
+R13715 InterfGraph.for_all_2
+R13715 InterfGraph.for_all_2
+R13761 Locations.eq
+R13761 Locations.eq
+R13992 Coq.Init.Logic "x <> y" type_scope
+R13995 Locations.R
+R13931 InterfGraph.In
+R13958 InterfGraph.interf_reg_mreg
+R13945 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R13919 Coq.Init.Logic "x = y" type_scope
+R13891 Coloring.check_coloring_2
+R13921 Coq.Init.Datatypes.true
+R14055 FSetInterface.compat_bool
+R14120 Locations.eq
+R14150 Locations.R
+R14153 Coq.Init.Datatypes.snd
+R14138 Coq.Init.Datatypes.fst
+R14198 Coq.Init.Datatypes.true
+R14187 Coq.Init.Datatypes.false
+R14081 InterfGraph.eq
+R14055 FSetInterface.compat_bool
+R14120 Locations.eq
+R14150 Locations.R
+R14153 Coq.Init.Datatypes.snd
+R14138 Coq.Init.Datatypes.fst
+R14198 Coq.Init.Datatypes.true
+R14187 Coq.Init.Datatypes.false
+R14081 InterfGraph.eq
+R14331 InterfGraph.for_all_2
+R14331 InterfGraph.for_all_2
+R14378 Locations.eq
+R14400 Locations.R
+R14378 Locations.eq
+R14400 Locations.R
+R14519 Coq.Init.Logic "x = y" type_scope
+R14506 Coq.Init.Logic "x = y" type_scope
+R14491 Coloring.same_typ
+R14508 Coq.Init.Datatypes.true
+R14660 Conventions.loc_acceptable
+R14650 Coq.Init.Logic "x = y" type_scope
+R14630 Coloring.loc_is_acceptable
+R14652 Coq.Init.Datatypes.true
+R14749 Coq.Lists.List.In_dec
+R14769 Conventions.temporaries
+R14764 Locations.R
+R14756 Locations.eq
+R14749 Coq.Lists.List.In_dec
+R14769 Conventions.temporaries
+R14764 Locations.R
+R14756 Locations.eq
+R14841 Coqlib.zlt
+R14841 Coqlib.zlt
+R15094 Coq.Init.Logic "A /\ B" type_scope
+R15066 Conventions.loc_acceptable
+R15103 Coq.Init.Logic "x = y" type_scope
+R15105 Locations.type
+R15054 Coq.Init.Logic "x = y" type_scope
+R15033 Registers.mem
+R15056 Coq.Init.Datatypes.true
+R15021 Coq.Init.Logic "x = y" type_scope
+R14983 Coloring.check_coloring_3
+R15023 Coq.Init.Datatypes.true
+R15184 Registers.for_all_spec
+R15184 Registers.for_all_spec
+R15228 Coq.Bool.Bool.andb_prop
+R15228 Coq.Bool.Bool.andb_prop
+R15270 Coloringproof.loc_is_acceptable_correct
+R15270 Coloringproof.loc_is_acceptable_correct
+R15311 Coloringproof.same_typ_correct
+R15311 Coloringproof.same_typ_correct
+R15404 InterfGraph.graph
+R15425 RTLtyping.regenv
+R15448 InterfGraph.all_interf_regs
+R15493 Locations.loc
+R15486 Registers.reg
+R15511 Coloring.alloc_of_coloring
+R15710 Coq.Init.Logic "x <> y" type_scope
+R15655 InterfGraph.In
+R15680 InterfGraph.interf_reg_reg
+R15668 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R15643 Coq.Init.Logic "x = y" type_scope
+R15605 Coloring.check_coloring
+R15645 Coq.Init.Datatypes.true
+R15797 Coq.Bool.Bool.andb_prop
+R15797 Coq.Bool.Bool.andb_prop
+R15837 InterfGraph.all_interf_regs_correct_1
+R15837 InterfGraph.all_interf_regs_correct_1
+R15939 Coloringproof.check_coloring_1_correct
+R15939 Coloringproof.check_coloring_1_correct
+R16140 Coq.Init.Logic "x <> y" type_scope
+R16143 Locations.R
+R16082 InterfGraph.In
+R16109 InterfGraph.interf_reg_mreg
+R16096 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R16070 Coq.Init.Logic "x = y" type_scope
+R16032 Coloring.check_coloring
+R16072 Coq.Init.Datatypes.true
+R16224 Coq.Bool.Bool.andb_prop
+R16224 Coq.Bool.Bool.andb_prop
+R16258 Coq.Bool.Bool.andb_prop
+R16258 Coq.Bool.Bool.andb_prop
+R16299 InterfGraph.all_interf_regs_correct_2
+R16299 InterfGraph.all_interf_regs_correct_2
+R16384 Coloringproof.check_coloring_2_correct
+R16384 Coloringproof.check_coloring_2_correct
+R16522 Conventions.loc_acceptable
+R16510 Coq.Init.Logic "x = y" type_scope
+R16472 Coloring.check_coloring
+R16512 Coq.Init.Datatypes.true
+R16622 Coq.Bool.Bool.andb_prop
+R16622 Coq.Bool.Bool.andb_prop
+R16656 Coq.Bool.Bool.andb_prop
+R16656 Coq.Bool.Bool.andb_prop
+R16693 Registers.mem
+R16693 Registers.mem
+R16737 Coloringproof.check_coloring_3_correct
+R16737 Coloringproof.check_coloring_3_correct
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R16942 Coq.Init.Logic "x = y" type_scope
+R16944 Locations.type
+R16924 Coq.Init.Logic "x = y" type_scope
+R16886 Coloring.check_coloring
+R16926 Coq.Init.Datatypes.true
+R17038 Coq.Bool.Bool.andb_prop
+R17038 Coq.Bool.Bool.andb_prop
+R17072 Coq.Bool.Bool.andb_prop
+R17072 Coq.Bool.Bool.andb_prop
+R17109 Registers.mem
+R17109 Registers.mem
+R17153 Coloringproof.check_coloring_3_correct
+R17153 Coloringproof.check_coloring_3_correct
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R17409 RTL.Iop
+R17442 Op.is_move_operation
+R17481 Coq.Init.Datatypes.Some
+R17641 Coq.Init.Logic "x <> y" type_scope
+R17623 Coq.Init.Logic "x <> y" type_scope
+R17611 Coq.Init.Logic "x <> y" type_scope
+R17589 Coq.Init.Logic "x = y" type_scope
+R17567 Registers.mem
+R17584 Maps "a !! b"
+R17591 Coq.Init.Datatypes.true
+R17547 Coq.Init.Logic "x = y" type_scope
+R17523 Registers.mem
+R17542 Maps "a !! b"
+R17549 Coq.Init.Datatypes.true
+R17662 Coq.Init.Datatypes.None
+R17806 Coq.Init.Logic "x <> y" type_scope
+R17788 Coq.Init.Logic "x <> y" type_scope
+R17766 Coq.Init.Logic "x = y" type_scope
+R17744 Registers.mem
+R17761 Maps "a !! b"
+R17768 Coq.Init.Datatypes.true
+R17724 Coq.Init.Logic "x = y" type_scope
+R17700 Registers.mem
+R17719 Maps "a !! b"
+R17726 Coq.Init.Datatypes.true
+R17833 RTL.Iload
+R17984 Coq.Init.Logic "x <> y" type_scope
+R17966 Coq.Init.Logic "x <> y" type_scope
+R17948 Coq.Init.Logic "x = y" type_scope
+R17926 Registers.mem
+R17943 Maps "a !! b"
+R17950 Coq.Init.Datatypes.true
+R17910 Coq.Init.Logic "x = y" type_scope
+R17886 Registers.mem
+R17905 Maps "a !! b"
+R17912 Coq.Init.Datatypes.true
+R18001 RTL.Icall
+R18159 Coq.Init.Logic "A /\ B" type_scope
+R18114 Coq.Init.Logic "~ x" type_scope
+R18116 Coq.Lists.List.In
+R18129 Conventions.destroyed_at_call
+R18096 Coq.Init.Logic "x <> y" type_scope
+R18076 Coq.Init.Logic "x = y" type_scope
+R18054 Registers.mem
+R18071 Maps "a !! b"
+R18078 Coq.Init.Datatypes.true
+R18246 Coq.Init.Logic "x <> y" type_scope
+R18228 Coq.Init.Logic "x <> y" type_scope
+R18208 Coq.Init.Logic "x = y" type_scope
+R18186 Registers.mem
+R18203 Maps "a !! b"
+R18210 Coq.Init.Datatypes.true
+R18275 Coq.Init.Logic.True
+R17363 RTL.instruction
+R17349 RTL.node
+R17334 Locations.loc
+R17327 Registers.reg
+R17302 Maps.t
+R17309 Registers.t
+R18330 RTL.function
+R18354 RTLtyping.regenv
+R18377 Maps.t
+R18384 Registers.t
+R18410 Registers.t
+R18443 Locations.loc
+R18436 Registers.reg
+R18458 Coloring.interf_graph
+R18500 InterfGraph.all_interf_regs
+R18535 Coloring.graph_coloring
+R18678 Coq.Init.Logic "A /\ B" type_scope
+R18671 Coq.Init.Logic "x = y" type_scope
+R18633 Coloring.check_coloring
+R18673 Coq.Init.Datatypes.true
+R18689 Coq.Init.Logic "x = y" type_scope
+R18691 Coloring.alloc_of_coloring
+R18615 Coq.Init.Logic "x = y" type_scope
+R18589 Coloring.regalloc
+R18617 Coq.Init.Datatypes.Some
+R18787 Coloring.check_coloring
+R18803 Coloring.interf_graph
+R18787 Coloring.check_coloring
+R18803 Coloring.interf_graph
+R19014 Conventions.loc_acceptable
+R18996 Coq.Init.Logic "x = y" type_scope
+R18970 Coloring.regalloc
+R18998 Coq.Init.Datatypes.Some
+R19063 Coloringproof.regalloc_ok
+R19063 Coloringproof.regalloc_ok
+R19123 Coloringproof.alloc_of_coloring_correct_3
+R19123 Coloringproof.alloc_of_coloring_correct_3
+R19257 Conventions.locs_acceptable
+R19274 Coq.Lists.List.map
+R19239 Coq.Init.Logic "x = y" type_scope
+R19213 Coloring.regalloc
+R19241 Coq.Init.Datatypes.Some
+R19332 Coqlib.list_in_map_inv
+R19332 Coqlib.list_in_map_inv
+R19394 Coloringproof.regalloc_acceptable
+R19394 Coloringproof.regalloc_acceptable
+R19537 Coq.Init.Logic "x = y" type_scope
+R19518 Locations.type
+R19500 Coq.Init.Logic "x = y" type_scope
+R19474 Coloring.regalloc
+R19502 Coq.Init.Datatypes.Some
+R19569 Coloringproof.regalloc_ok
+R19569 Coloringproof.regalloc_ok
+R19641 Coloringproof.alloc_of_coloring_correct_4
+R19641 Coloringproof.alloc_of_coloring_correct_4
+R19916 Coloringproof.correct_alloc_instr
+R19873 Coloringproof.correct_interf_instr
+R19898 Maps "a !! b"
+R19858 Coq.Init.Logic "x <> y" type_scope
+R19861 Locations.R
+R19822 InterfGraph.interfere_mreg
+R19788 Coq.Init.Logic "x <> y" type_scope
+R19758 InterfGraph.interfere
+R20081 Op.is_move_operation
+R20081 Op.is_move_operation
+R20207 Coqlib.list_in_map_inv
+R20223 Locations.R
+R20207 Coqlib.list_in_map_inv
+R20223 Locations.R
+R20481 Coloringproof.correct_alloc_instr
+R20463 Coq.Init.Logic "x = y" type_scope
+R20459 Maps "a ! b"
+R20451 RTL.fn_code
+R20465 Coq.Init.Datatypes.Some
+R20430 Coq.Init.Logic "x = y" type_scope
+R20404 Coloring.regalloc
+R20432 Coq.Init.Datatypes.Some
+R20545 Coloringproof.regalloc_ok
+R20545 Coloringproof.regalloc_ok
+R20577 Coloringproof.correct_interf_alloc_instr
+R20577 Coloringproof.correct_interf_alloc_instr
+R20663 InterfGraph.ordered_pair_charact
+R20663 InterfGraph.ordered_pair_charact
+R20707 Coloringproof.alloc_of_coloring_correct_1
+R20707 Coloringproof.alloc_of_coloring_correct_1
+R20774 Coq.Init.Logic.sym_not_equal
+R20774 Coq.Init.Logic.sym_not_equal
+R20797 Coloringproof.alloc_of_coloring_correct_1
+R20797 Coloringproof.alloc_of_coloring_correct_1
+R20902 Coloringproof.alloc_of_coloring_correct_2
+R20902 Coloringproof.alloc_of_coloring_correct_2
+R20965 Coloringproof.interf_graph_correct_1
+R20965 Coloringproof.interf_graph_correct_1
+R21106 Coqlib.list_norepet
+R21120 Coq.Lists.List.map
+R21138 RTL.fn_params
+R21074 Coqlib.list_norepet
+R21090 RTL.fn_params
+R21056 Coq.Init.Logic "x = y" type_scope
+R21030 Coloring.regalloc
+R21058 Coq.Init.Datatypes.Some
+R21174 Coloringproof.regalloc_ok
+R21174 Coloringproof.regalloc_ok
+R21206 Coqlib.list_map_norepet
+R21206 Coqlib.list_map_norepet
+R21277 InterfGraph.ordered_pair_charact
+R21277 InterfGraph.ordered_pair_charact
+R21319 Coloringproof.alloc_of_coloring_correct_1
+R21319 Coloringproof.alloc_of_coloring_correct_1
+R21403 InterfGraph.interfere
+R21403 InterfGraph.interfere
+R21440 Coloringproof.interf_graph_correct_2
+R21440 Coloringproof.interf_graph_correct_2
+R21478 Coq.Init.Logic.sym_not_equal
+R21478 Coq.Init.Logic.sym_not_equal
+R21501 Coloringproof.alloc_of_coloring_correct_1
+R21501 Coloringproof.alloc_of_coloring_correct_1
+R21585 InterfGraph.interfere
+R21585 InterfGraph.interfere
+R21622 Coloringproof.interf_graph_correct_2
+R21622 Coloringproof.interf_graph_correct_2
+R21826 Coq.Init.Logic "x <> y" type_scope
+R21806 Coq.Init.Logic "x <> y" type_scope
+R21791 Coq.Init.Logic "x = y" type_scope
+R21771 Registers.mem
+R21793 Coq.Init.Datatypes.true
+R21746 Coq.Lists.List.In
+R21755 RTL.fn_params
+R21728 Coq.Init.Logic "x = y" type_scope
+R21702 Coloring.regalloc
+R21730 Coq.Init.Datatypes.Some
+R21862 Coloringproof.regalloc_ok
+R21862 Coloringproof.regalloc_ok
+R21924 InterfGraph.ordered_pair_charact
+R21924 InterfGraph.ordered_pair_charact
+R21968 Coloringproof.alloc_of_coloring_correct_1
+R21968 Coloringproof.alloc_of_coloring_correct_1
+R22052 InterfGraph.interfere
+R22052 InterfGraph.interfere
+R22090 Coloringproof.interf_graph_correct_3
+R22090 Coloringproof.interf_graph_correct_3
+R22128 Coq.Init.Logic.sym_not_equal
+R22128 Coq.Init.Logic.sym_not_equal
+R22151 Coloringproof.alloc_of_coloring_correct_1
+R22151 Coloringproof.alloc_of_coloring_correct_1
+R22235 InterfGraph.interfere
+R22235 InterfGraph.interfere
+R22273 Coloringproof.interf_graph_correct_3
+R22273 Coloringproof.interf_graph_correct_3
+FParallelmove
+R393 Coq.Init.Logic.refl_equal
+R455 Coq.Arith.EqNat.beq_nat_eq
+R531 Coq.Init.Logic "x = y" type_scope
+R519 Coq.Arith.EqNat.beq_nat
+R533 Coq.Init.Datatypes.false
+R510 Coq.Init.Logic "x <> y" type_scope
+R502 Coq.Init.Datatypes.nat
+R502 Coq.Init.Datatypes.nat
+R575 Coq.Arith.EqNat.beq_nat
+R575 Coq.Arith.EqNat.beq_nat
+R634 Parallelmove.neq_is_neq
+R705 Coq.Init.Logic "x = y" type_scope
+R698 Coq.Lists.List "x ++ y" list_scope
+R701 Coq.Lists.List.nil
+R686 Coq.Lists.List.list
+R876 Coq.Init.Logic "x = y" type_scope
+R868 Coq.Lists.List "x ++ y" list_scope
+R863 Coq.Lists.List "x :: y" list_scope
+R880 Coq.Lists.List "x :: y" list_scope
+R887 Coq.Lists.List "x ++ y" list_scope
+R842 Coq.Lists.List.list
+R842 Coq.Lists.List.list
+R987 Coq.Init.Logic "x = y" type_scope
+R973 Coq.Lists.List "x ++ y" list_scope
+R980 Coq.Lists.List "x ++ y" list_scope
+R998 Coq.Lists.List "x ++ y" list_scope
+R993 Coq.Lists.List "x ++ y" list_scope
+R960 Coq.Lists.List.list
+R960 Coq.Lists.List.list
+R960 Coq.Lists.List.list
+R1172 Coq.Init.Logic "'exists' x : t , p" type_scope
+R1187 Coq.Init.Logic "'exists' x : t , p" type_scope
+R1223 Coq.Init.Logic "x = y" type_scope
+R1209 Coq.Lists.List "x ++ y" list_scope
+R1215 Coq.Lists.List "x :: y" list_scope
+R1218 Coq.Lists.List.nil
+R1227 Coq.Lists.List "x :: y" list_scope
+R1198 Coq.Lists.List.list
+R1152 Coq.Lists.List.list
+R1304 Coq.Lists.List.nil
+R1304 Coq.Lists.List.nil
+R1373 Coq.Lists.List "x ++ y" list_scope
+R1379 Coq.Lists.List "x :: y" list_scope
+R1382 Coq.Lists.List.nil
+R1373 Coq.Lists.List "x ++ y" list_scope
+R1379 Coq.Lists.List "x :: y" list_scope
+R1382 Coq.Lists.List.nil
+R1468 Coq.Init.Logic "'exists' x : t , p" type_scope
+R1483 Coq.Init.Logic "'exists' x : t , p" type_scope
+R1518 Coq.Init.Logic "x = y" type_scope
+R1505 Coq.Lists.List "x ++ y" list_scope
+R1511 Coq.Lists.List "x :: y" list_scope
+R1522 Coq.Lists.List "x :: y" list_scope
+R1494 Coq.Lists.List.list
+R1448 Coq.Lists.List.list
+R1448 Coq.Lists.List.list
+R1661 Coq.Lists.List "x ++ y" list_scope
+R1667 Coq.Lists.List "x :: y" list_scope
+R1661 Coq.Lists.List "x ++ y" list_scope
+R1667 Coq.Lists.List "x :: y" list_scope
+R1752 Coq.Init.Logic "'exists' x : t , p" type_scope
+R1767 Coq.Init.Logic "'exists' x : t , p" type_scope
+R1794 Coq.Init.Logic "x = y" type_scope
+R1789 Coq.Lists.List "x :: y" list_scope
+R1798 Coq.Lists.List "x ++ y" list_scope
+R1804 Coq.Lists.List "x :: y" list_scope
+R1807 Coq.Lists.List.nil
+R1778 Coq.Lists.List.list
+R1732 Coq.Lists.List.list
+R1884 Coq.Lists.List.nil
+R1884 Coq.Lists.List.nil
+R2007 Coq.Lists.List "x :: y" list_scope
+R2010 Coq.Lists.List.nil
+R2007 Coq.Lists.List "x :: y" list_scope
+R2010 Coq.Lists.List.nil
+R2051 Coq.Lists.List "x :: y" list_scope
+R2057 Coq.Lists.List "x :: y" list_scope
+R2051 Coq.Lists.List "x :: y" list_scope
+R2057 Coq.Lists.List "x :: y" list_scope
+R2097 Parallelmove.app_rewriter
+R2132 Locations.loc
+R2187 Locations.type
+R2203 AST.Tint
+R2211 Locations.R
+R2213 Locations.IT2
+R2219 AST.Tfloat
+R2229 Locations.R
+R2231 Locations.FT2
+R2167 Locations.loc
+R2296 Locations.diff
+R2308 Parallelmove.T
+R2277 Locations.loc
+R2340 Coq.Init.Datatypes "x * y" type_scope
+R2336 Parallelmove.Reg
+R2342 Parallelmove.Reg
+R2375 Coq.Lists.List.list
+R2380 Parallelmove.Move
+R2423 Coq.Init.Datatypes "x * y" type_scope
+R2416 Coq.Init.Datatypes "x * y" type_scope
+R2410 Parallelmove.Moves
+R2418 Parallelmove.Moves
+R2427 Parallelmove.Moves
+R2479 Parallelmove.Moves
+R2504 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R2505 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R2470 Parallelmove.State
+R2564 Parallelmove.Moves
+R2589 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R2590 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R2555 Parallelmove.State
+R2648 Parallelmove.Moves
+R2673 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R2674 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R2639 Parallelmove.State
+R2730 Parallelmove.Reg
+R2718 Parallelmove.Moves
+R2773 Coq.Lists.List.nil
+R2780 Coq.Init.Logic.True
+R2796 Coq.Lists.List "x :: y" list_scope
+R2789 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R2817 Coq.Init.Logic "A /\ B" type_scope
+R2804 Locations.diff
+R2730 Parallelmove.Reg
+R2718 Parallelmove.Moves
+R2924 Parallelmove.noRead
+R2935 Coq.Lists.List "x ++ y" list_scope
+R2908 Parallelmove.noRead
+R2893 Parallelmove.noRead
+R2886 Parallelmove.Reg
+R2874 Parallelmove.Moves
+R2874 Parallelmove.Moves
+R3079 Parallelmove.State
+R3070 Parallelmove.State
+R3190 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R3194 Coq.Lists.List "x ++ y" list_scope
+R3201 Coq.Lists.List.nil
+R3159 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R3163 Coq.Lists.List "x ++ y" list_scope
+R3174 Coq.Lists.List "x :: y" list_scope
+R3167 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R3182 Coq.Lists.List.nil
+R3141 Parallelmove.Moves
+R3141 Parallelmove.Moves
+R3141 Parallelmove.Moves
+R3125 Parallelmove.Reg
+R3303 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R3307 Coq.Lists.List "x ++ y" list_scope
+R3316 Coq.Lists.List "x :: y" list_scope
+R3319 Coq.Lists.List.nil
+R3277 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R3281 Coq.Lists.List "x ++ y" list_scope
+R3287 Coq.Lists.List "x :: y" list_scope
+R3295 Coq.Lists.List.nil
+R3259 Parallelmove.Move
+R3247 Parallelmove.Moves
+R3247 Parallelmove.Moves
+R3247 Parallelmove.Moves
+R3452 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R3456 Coq.Lists.List "x ++ y" list_scope
+R3470 Coq.Lists.List "x :: y" list_scope
+R3463 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R3481 Coq.Lists.List "x :: y" list_scope
+R3474 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R3406 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R3410 Coq.Lists.List "x ++ y" list_scope
+R3421 Coq.Lists.List "x :: y" list_scope
+R3414 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R3436 Coq.Lists.List "x :: y" list_scope
+R3429 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R3382 Parallelmove.Reg
+R3382 Parallelmove.Reg
+R3382 Parallelmove.Reg
+R3366 Parallelmove.Moves
+R3366 Parallelmove.Moves
+R3366 Parallelmove.Moves
+R3366 Parallelmove.Moves
+R3630 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R3647 Coq.Lists.List "x :: y" list_scope
+R3634 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R3653 Coq.Lists.List "x ++ y" list_scope
+R3667 Coq.Lists.List "x :: y" list_scope
+R3657 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R3658 Parallelmove.T
+R3670 Coq.Lists.List.nil
+R3688 Coq.Lists.List "x :: y" list_scope
+R3677 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R3682 Parallelmove.T
+R3575 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R3592 Coq.Lists.List "x :: y" list_scope
+R3579 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R3598 Coq.Lists.List "x ++ y" list_scope
+R3610 Coq.Lists.List "x :: y" list_scope
+R3602 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R3613 Coq.Lists.List.nil
+R3551 Parallelmove.Reg
+R3551 Parallelmove.Reg
+R3551 Parallelmove.Reg
+R3551 Parallelmove.Reg
+R3526 Parallelmove.Moves
+R3526 Parallelmove.Moves
+R3526 Parallelmove.Moves
+R3869 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R3875 Coq.Lists.List "x ++ y" list_scope
+R3888 Coq.Lists.List "x :: y" list_scope
+R3879 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R3891 Coq.Lists.List.nil
+R3906 Coq.Lists.List "x :: y" list_scope
+R3897 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R3817 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R3830 Coq.Lists.List "x :: y" list_scope
+R3821 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R3836 Coq.Lists.List "x ++ y" list_scope
+R3849 Coq.Lists.List "x :: y" list_scope
+R3840 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R3852 Coq.Lists.List.nil
+R3781 Locations.diff
+R3761 Parallelmove.noRead
+R3750 Parallelmove.Reg
+R3750 Parallelmove.Reg
+R3750 Parallelmove.Reg
+R3750 Parallelmove.Reg
+R3728 Parallelmove.Moves
+R3728 Parallelmove.Moves
+R3728 Parallelmove.Moves
+R4012 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R4016 Coq.Lists.List.nil
+R4028 Coq.Lists.List "x :: y" list_scope
+R4021 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R3990 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R4001 Coq.Lists.List "x :: y" list_scope
+R3994 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R4004 Coq.Lists.List.nil
+R3970 Parallelmove.noRead
+R3959 Parallelmove.Reg
+R3959 Parallelmove.Reg
+R3945 Parallelmove.Moves
+R3945 Parallelmove.Moves
+R4049 Parallelmove.step_nop
+R4058 Parallelmove.step_start
+R4069 Parallelmove.step_push
+R4079 Parallelmove.step_loop
+R4089 Parallelmove.step_pop
+R4098 Parallelmove.step_last
+R4131 Parallelmove.Moves
+R4165 Coq.Lists.List.nil
+R4172 Coq.Init.Logic.True
+R4188 Coq.Lists.List "x :: y" list_scope
+R4181 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R4223 Coq.Lists.List.nil
+R4230 Coq.Init.Logic.True
+R4253 Coq.Lists.List "x :: y" list_scope
+R4244 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R4269 Coq.Init.Logic "A /\ B" type_scope
+R4264 Coq.Init.Logic "x = y" type_scope
+R4131 Parallelmove.Moves
+R4362 Parallelmove.path
+R4344 Parallelmove.path
+R4352 Coq.Lists.List "x :: y" list_scope
+R4336 Parallelmove.Moves
+R4325 Parallelmove.Move
+R4525 Parallelmove.Reg
+R4513 Parallelmove.Moves
+R4568 Coq.Lists.List.nil
+R4575 Coq.Init.Logic.True
+R4591 Coq.Lists.List "x :: y" list_scope
+R4584 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R4612 Coq.Init.Logic "A /\ B" type_scope
+R4599 Locations.diff
+R4525 Parallelmove.Reg
+R4513 Parallelmove.Moves
+R4733 Parallelmove.noWrite
+R4745 Coq.Lists.List "x ++ y" list_scope
+R4701 Parallelmove.noWrite
+R4713 Coq.Lists.List "x ++ y" list_scope
+R4719 Coq.Lists.List "x :: y" list_scope
+R4694 Parallelmove.Reg
+R4683 Parallelmove.Move
+R4671 Parallelmove.Moves
+R4671 Parallelmove.Moves
+R4881 Parallelmove.app_cons
+R4899 Parallelmove.app_cons
+R4881 Parallelmove.app_cons
+R4899 Parallelmove.app_cons
+R5067 Locations.diff
+R5027 Parallelmove.noWrite
+R5039 Coq.Lists.List "x ++ y" list_scope
+R5052 Coq.Lists.List "x :: y" list_scope
+R5043 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R5020 Parallelmove.Reg
+R5020 Parallelmove.Reg
+R5020 Parallelmove.Reg
+R5001 Parallelmove.Moves
+R5001 Parallelmove.Moves
+R5198 Locations.diff_sym
+R5198 Locations.diff_sym
+R5240 Parallelmove.app_cons
+R5240 Parallelmove.app_cons
+R5413 Parallelmove.noWrite
+R5425 Coq.Lists.List "x :: y" list_scope
+R5432 Coq.Lists.List "x :: y" list_scope
+R5381 Parallelmove.noWrite
+R5393 Coq.Lists.List "x :: y" list_scope
+R5400 Coq.Lists.List "x :: y" list_scope
+R5374 Parallelmove.Reg
+R5363 Parallelmove.Move
+R5363 Parallelmove.Move
+R5347 Parallelmove.Moves
+R5652 Parallelmove.noWrite
+R5663 Coq.Lists.List "x :: y" list_scope
+R5670 Coq.Lists.List "x ++ y" list_scope
+R5619 Parallelmove.noWrite
+R5631 Coq.Lists.List "x ++ y" list_scope
+R5637 Coq.Lists.List "x :: y" list_scope
+R5612 Parallelmove.Reg
+R5600 Parallelmove.Move
+R5588 Parallelmove.Moves
+R5588 Parallelmove.Moves
+R5776 Parallelmove.app_cons
+R5794 Parallelmove.app_cons
+R5776 Parallelmove.app_cons
+R5794 Parallelmove.app_cons
+R5818 Parallelmove.noWrite_swap
+R5843 Parallelmove.app_cons
+R5818 Parallelmove.noWrite_swap
+R5843 Parallelmove.app_cons
+R5902 Parallelmove.noWrite
+R5902 Parallelmove.noWrite
+R6027 Parallelmove.noWrite
+R6039 Coq.Lists.List "x ++ y" list_scope
+R6045 Coq.Lists.List "x :: y" list_scope
+R5994 Parallelmove.noWrite
+R6005 Coq.Lists.List "x :: y" list_scope
+R6012 Coq.Lists.List "x ++ y" list_scope
+R5987 Parallelmove.Reg
+R5975 Parallelmove.Move
+R5963 Parallelmove.Moves
+R5963 Parallelmove.Moves
+R6342 Parallelmove.noWrite
+R6353 Coq.Lists.List "x ++ y" list_scope
+R6364 Coq.Lists.List "x :: y" list_scope
+R6357 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R6367 Coq.Lists.List.nil
+R6335 Parallelmove.Reg
+R6286 Parallelmove.noWrite
+R6297 Coq.Lists.List "x ++ y" list_scope
+R6308 Coq.Lists.List "x :: y" list_scope
+R6301 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R6311 Coq.Lists.List.nil
+R6279 Parallelmove.Reg
+R6279 Parallelmove.Reg
+R6279 Parallelmove.Reg
+R6263 Parallelmove.Moves
+R6529 Parallelmove.Moves
+R6563 Coq.Lists.List.nil
+R6570 Coq.Init.Logic.True
+R6586 Coq.Lists.List "x :: y" list_scope
+R6579 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R6606 Coq.Init.Logic "A /\ B" type_scope
+R6594 Parallelmove.noWrite
+R6529 Parallelmove.Moves
+R6722 Parallelmove.simpleDest
+R6737 Coq.Lists.List "x ++ y" list_scope
+R6689 Parallelmove.simpleDest
+R6704 Coq.Lists.List "x ++ y" list_scope
+R6710 Coq.Lists.List "x :: y" list_scope
+R6680 Parallelmove.Moves
+R6680 Parallelmove.Moves
+R6665 Parallelmove.Move
+R6871 Parallelmove.app_cons
+R6889 Parallelmove.app_cons
+R6871 Parallelmove.app_cons
+R6889 Parallelmove.app_cons
+R6956 Parallelmove.noWrite_pop
+R6956 Parallelmove.noWrite_pop
+R7069 Parallelmove.simpleDest
+R7045 Parallelmove.simpleDest
+R7059 Coq.Lists.List "x :: y" list_scope
+R7037 Parallelmove.Moves
+R7026 Parallelmove.Move
+R7223 Parallelmove.simpleDest
+R7197 Parallelmove.simpleDest
+R7212 Coq.Lists.List "x ++ y" list_scope
+R7189 Parallelmove.Moves
+R7189 Parallelmove.Moves
+R7313 Parallelmove.app_cons
+R7313 Parallelmove.app_cons
+R7352 Parallelmove.simpleDest_pop
+R7352 Parallelmove.simpleDest_pop
+R7477 Parallelmove.simpleDest
+R7492 Coq.Lists.List "x :: y" list_scope
+R7499 Coq.Lists.List "x :: y" list_scope
+R7444 Parallelmove.simpleDest
+R7459 Coq.Lists.List "x :: y" list_scope
+R7466 Coq.Lists.List "x :: y" list_scope
+R7435 Parallelmove.Moves
+R7424 Parallelmove.Move
+R7424 Parallelmove.Move
+R7621 Locations.diff_sym
+R7621 Locations.diff_sym
+R7741 Parallelmove.simpleDest
+R7756 Coq.Lists.List "x :: y" list_scope
+R7708 Parallelmove.simpleDest
+R7723 Coq.Lists.List "x :: y" list_scope
+R7730 Coq.Lists.List "x :: y" list_scope
+R7699 Parallelmove.Moves
+R7688 Parallelmove.Move
+R7688 Parallelmove.Move
+R7785 Parallelmove.simpleDest_pop
+R7811 Parallelmove.simpleDest_swap
+R7785 Parallelmove.simpleDest_pop
+R7811 Parallelmove.simpleDest_swap
+R7938 Parallelmove.simpleDest
+R7952 Coq.Lists.List "x :: y" list_scope
+R7959 Coq.Lists.List "x ++ y" list_scope
+R7905 Parallelmove.simpleDest
+R7920 Coq.Lists.List "x ++ y" list_scope
+R7926 Coq.Lists.List "x :: y" list_scope
+R7897 Parallelmove.Move
+R7885 Parallelmove.Moves
+R7885 Parallelmove.Moves
+R8044 Parallelmove.app_cons
+R8062 Parallelmove.app_cons
+R8044 Parallelmove.app_cons
+R8062 Parallelmove.app_cons
+R8122 Parallelmove.simpleDest_swap
+R8122 Parallelmove.simpleDest_swap
+R8169 Parallelmove.noWrite
+R8187 Coq.Lists.List "x :: y" list_scope
+R8178 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R8194 Coq.Lists.List "x ++ y" list_scope
+R8169 Parallelmove.noWrite
+R8187 Coq.Lists.List "x :: y" list_scope
+R8178 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R8194 Coq.Lists.List "x ++ y" list_scope
+R8212 Parallelmove.simpleDest
+R8233 Coq.Lists.List "x :: y" list_scope
+R8224 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R8240 Coq.Lists.List "x ++ y" list_scope
+R8212 Parallelmove.simpleDest
+R8233 Coq.Lists.List "x :: y" list_scope
+R8224 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R8240 Coq.Lists.List "x ++ y" list_scope
+R8331 Parallelmove.noWrite_movFront
+R8331 Parallelmove.noWrite_movFront
+R8457 Parallelmove.simpleDest
+R8472 Coq.Lists.List "x ++ y" list_scope
+R8478 Coq.Lists.List "x :: y" list_scope
+R8424 Parallelmove.simpleDest
+R8438 Coq.Lists.List "x :: y" list_scope
+R8445 Coq.Lists.List "x ++ y" list_scope
+R8416 Parallelmove.Move
+R8404 Parallelmove.Moves
+R8404 Parallelmove.Moves
+R8563 Parallelmove.app_cons
+R8563 Parallelmove.app_cons
+R8651 Parallelmove.noWrite_insert
+R8651 Parallelmove.noWrite_insert
+R8725 Locations.diff_sym
+R8725 Locations.diff_sym
+R8786 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R8765 Parallelmove.simpleDest_pop2
+R8786 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R8765 Parallelmove.simpleDest_pop2
+R8905 Parallelmove.simpleDest
+R8926 Coq.Lists.List "x ++ y" list_scope
+R8921 Coq.Lists.List "x ++ y" list_scope
+R8934 Coq.Lists.List "x :: y" list_scope
+R8937 Coq.Lists.List.nil
+R8872 Parallelmove.simpleDest
+R8887 Coq.Lists.List "x ++ y" list_scope
+R8893 Coq.Lists.List "x :: y" list_scope
+R8864 Parallelmove.Move
+R8852 Parallelmove.Moves
+R8852 Parallelmove.Moves
+R8966 Parallelmove.simpleDest_insert
+R8995 Coq.Lists.List.nil
+R8988 Coq.Lists.List "x ++ y" list_scope
+R8966 Parallelmove.simpleDest_insert
+R8995 Coq.Lists.List.nil
+R8988 Coq.Lists.List "x ++ y" list_scope
+R9011 Parallelmove.app_nil
+R9026 Parallelmove.simpleDest_movFront
+R9011 Parallelmove.app_nil
+R9026 Parallelmove.simpleDest_movFront
+R9168 Parallelmove.simpleDest
+R9189 Coq.Lists.List "x ++ y" list_scope
+R9184 Coq.Lists.List "x ++ y" list_scope
+R9197 Coq.Lists.List "x :: y" list_scope
+R9127 Parallelmove.simpleDest
+R9142 Coq.Lists.List "x ++ y" list_scope
+R9148 Coq.Lists.List "x :: y" list_scope
+R9155 Coq.Lists.List "x ++ y" list_scope
+R9119 Parallelmove.Move
+R9107 Parallelmove.Moves
+R9107 Parallelmove.Moves
+R9107 Parallelmove.Moves
+R9228 Parallelmove.simpleDest_insert
+R9250 Coq.Lists.List "x ++ y" list_scope
+R9228 Parallelmove.simpleDest_insert
+R9250 Coq.Lists.List "x ++ y" list_scope
+R9275 Parallelmove.app_app
+R9275 Parallelmove.app_app
+R9290 Parallelmove.simpleDest_movFront
+R9290 Parallelmove.simpleDest_movFront
+R9441 Parallelmove.simpleDest
+R9455 Coq.Lists.List "x ++ y" list_scope
+R9466 Coq.Lists.List "x :: y" list_scope
+R9459 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R9469 Coq.Lists.List.nil
+R9434 Parallelmove.Reg
+R9384 Parallelmove.simpleDest
+R9398 Coq.Lists.List "x ++ y" list_scope
+R9409 Coq.Lists.List "x :: y" list_scope
+R9402 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R9412 Coq.Lists.List.nil
+R9377 Parallelmove.Reg
+R9377 Parallelmove.Reg
+R9363 Parallelmove.Moves
+R9595 Parallelmove.noWrite_tmpLast
+R9595 Parallelmove.noWrite_tmpLast
+R9653 Parallelmove.Moves
+R9687 Coq.Lists.List.nil
+R9694 Coq.Init.Logic.True
+R9710 Coq.Lists.List "x :: y" list_scope
+R9703 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R9752 Coq.Init.Logic "A /\ B" type_scope
+R9736 Locations.diff
+R9748 Parallelmove.T
+R9792 Coq.Init.Logic "A /\ B" type_scope
+R9776 Locations.diff
+R9788 Parallelmove.T
+R9653 Parallelmove.Moves
+R9838 Parallelmove.Moves
+R9872 Coq.Lists.List.nil
+R9879 Coq.Init.Logic.True
+R9895 Coq.Lists.List "x :: y" list_scope
+R9888 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R9898 Coq.Lists.List.nil
+R9916 Locations.diff
+R9928 Parallelmove.T
+R9944 Coq.Lists.List "x :: y" list_scope
+R9937 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R9986 Coq.Init.Logic "A /\ B" type_scope
+R9970 Locations.diff
+R9982 Parallelmove.T
+R10026 Coq.Init.Logic "A /\ B" type_scope
+R10010 Locations.diff
+R10022 Parallelmove.T
+R9838 Parallelmove.Moves
+R10142 Parallelmove.noTmpLast
+R10156 Coq.Lists.List "x ++ y" list_scope
+R10162 Coq.Lists.List "x :: y" list_scope
+R10118 Parallelmove.noTmpLast
+R10131 Coq.Lists.List "x :: y" list_scope
+R10106 Parallelmove.noTmp
+R10098 Parallelmove.Move
+R10086 Parallelmove.Moves
+R10086 Parallelmove.Moves
+R10249 Coq.Lists.List "x ++ y" list_scope
+R10255 Coq.Lists.List "x :: y" list_scope
+R10249 Coq.Lists.List "x ++ y" list_scope
+R10255 Coq.Lists.List "x :: y" list_scope
+R10563 Parallelmove.noTmp
+R10531 Parallelmove.noTmpLast
+R10544 Coq.Lists.List "x ++ y" list_scope
+R10550 Coq.Lists.List "x :: y" list_scope
+R10553 Coq.Lists.List.nil
+R10524 Parallelmove.Move
+R10512 Parallelmove.Moves
+R10660 Parallelmove.app_cons
+R10660 Parallelmove.app_cons
+R10721 Coq.Lists.List "x ++ y" list_scope
+R10727 Coq.Lists.List "x :: y" list_scope
+R10730 Coq.Lists.List.nil
+R10721 Coq.Lists.List "x ++ y" list_scope
+R10727 Coq.Lists.List "x :: y" list_scope
+R10730 Coq.Lists.List.nil
+R10898 Coq.Lists.List.list
+R10903 Parallelmove.Reg
+R10889 Parallelmove.Moves
+R10927 Coq.Lists.List.nil
+R10934 Coq.Lists.List.nil
+R10949 Coq.Lists.List "x :: y" list_scope
+R10942 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R10959 Coq.Lists.List "x :: y" list_scope
+R10889 Parallelmove.Moves
+R11009 Coq.Lists.List.list
+R11014 Parallelmove.Reg
+R11000 Parallelmove.Moves
+R11038 Coq.Lists.List.nil
+R11045 Coq.Lists.List.nil
+R11060 Coq.Lists.List "x :: y" list_scope
+R11053 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R11070 Coq.Lists.List "x :: y" list_scope
+R11000 Parallelmove.Moves
+R11128 Coq.Lists.List.list
+R11133 Parallelmove.Reg
+R11118 Parallelmove.Reg
+R11176 Coq.Lists.List.nil
+R11183 Coq.Init.Logic.True
+R11194 Coq.Lists.List "x :: y" list_scope
+R11224 Coq.Init.Logic "A /\ B" type_scope
+R11209 Coq.Init.Logic "A \/ B" type_scope
+R11205 Coq.Init.Logic "x = y" type_scope
+R11212 Locations.diff
+R11128 Coq.Lists.List.list
+R11133 Parallelmove.Reg
+R11118 Parallelmove.Reg
+R11331 Parallelmove.noOverlap_aux
+R11348 Parallelmove.getdst
+R11311 Coq.Lists.List.In
+R11317 Parallelmove.getsrc
+R11281 Parallelmove.Moves
+R11425 Coq.Init.Logic "A /\ B" type_scope
+R11405 Parallelmove.path
+R11411 Parallelmove.StateBeing
+R11475 Coq.Init.Logic "A /\ B" type_scope
+R11432 Parallelmove.simpleDest
+R11458 Coq.Lists.List "x ++ y" list_scope
+R11444 Parallelmove.StateToMove
+R11461 Parallelmove.StateBeing
+R11525 Coq.Init.Logic "A /\ B" type_scope
+R11483 Parallelmove.noOverlap
+R11508 Coq.Lists.List "x ++ y" list_scope
+R11494 Parallelmove.StateToMove
+R11511 Parallelmove.StateBeing
+R11556 Coq.Init.Logic "A /\ B" type_scope
+R11534 Parallelmove.noTmp
+R11541 Parallelmove.StateToMove
+R11559 Parallelmove.noTmpLast
+R11570 Parallelmove.StateBeing
+R11385 Parallelmove.State
+R11610 Values.val
+R11635 LTL.locset
+R11683 Locations.get
+R11675 Parallelmove.Reg
+R11665 Parallelmove.Env
+R11753 Parallelmove.Env
+R11760 Locations.set
+R11744 Parallelmove.Value
+R11734 Parallelmove.Reg
+R11724 Parallelmove.Env
+R11830 Parallelmove.Env
+R11812 Parallelmove.Env
+R11800 Parallelmove.Moves
+R11854 Coq.Lists.List.nil
+R11874 Coq.Lists.List "x :: y" list_scope
+R11867 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R11926 Parallelmove.update
+R11939 Parallelmove.get
+R11812 Parallelmove.Env
+R11800 Parallelmove.Moves
+R12007 Parallelmove.Env
+R11989 Parallelmove.Env
+R11977 Parallelmove.Moves
+R12031 Coq.Lists.List.nil
+R12051 Coq.Lists.List "x :: y" list_scope
+R12044 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R12059 Parallelmove.update
+R12081 Parallelmove.get
+R11989 Parallelmove.Env
+R11977 Parallelmove.Moves
+R12186 Coq.Init.Logic "x = y" type_scope
+R12163 Parallelmove.get
+R12168 Parallelmove.update
+R12194 Locations.eq
+R12222 Locations.overlap
+R12257 Parallelmove.get
+R12245 Values.Vundef
+R12153 Parallelmove.Value
+R12143 Parallelmove.Reg
+R12143 Parallelmove.Reg
+R12129 Parallelmove.Env
+R12430 Coq.Init.Logic "x = y" type_scope
+R12407 Parallelmove.get
+R12412 Parallelmove.update
+R12398 Parallelmove.Value
+R12388 Parallelmove.Reg
+R12377 Parallelmove.Env
+R12466 Parallelmove.get_update
+R12466 Parallelmove.get_update
+R12499 Locations.eq
+R12499 Locations.eq
+R12665 Coq.Init.Logic "x = y" type_scope
+R12642 Parallelmove.get
+R12647 Parallelmove.update
+R12667 Parallelmove.get
+R12623 Locations.diff
+R12614 Parallelmove.Value
+R12604 Parallelmove.Reg
+R12604 Parallelmove.Reg
+R12590 Parallelmove.Env
+R12742 Locations.eq
+R12742 Locations.eq
+R12775 Coq.Init.Logic "x = y" type_scope
+R12789 Locations.diff_not_eq
+R12775 Coq.Init.Logic "x = y" type_scope
+R12789 Locations.diff_not_eq
+R12834 Locations.overlap
+R12834 Locations.overlap
+R12878 Locations.diff
+R12902 Locations.overlap_not_diff
+R12878 Locations.diff
+R12902 Locations.overlap_not_diff
+R13087 Coq.Init.Logic "x = y" type_scope
+R13064 Parallelmove.get
+R13069 Parallelmove.update
+R13089 Values.Vundef
+R13039 Coq.Init.Logic.not
+R13044 Locations.diff
+R13030 Coq.Init.Logic "x <> y" type_scope
+R13018 Parallelmove.Value
+R13008 Parallelmove.Reg
+R13008 Parallelmove.Reg
+R12994 Parallelmove.Env
+R13162 Locations.eq
+R13162 Locations.eq
+R13195 Coq.Init.Logic "x = y" type_scope
+R13195 Coq.Init.Logic "x = y" type_scope
+R13222 Locations.overlap
+R13222 Locations.overlap
+R13266 Locations.diff
+R13266 Locations.diff
+R13307 Locations.non_overlap_diff
+R13307 Locations.non_overlap_diff
+R13500 Coq.Init.Logic "x = y" type_scope
+R13466 Parallelmove.get
+R13471 Parallelmove.pexec
+R13481 Coq.Lists.List "x :: y" list_scope
+R13488 Coq.Lists.List "x :: y" list_scope
+R13502 Parallelmove.get
+R13507 Parallelmove.pexec
+R13517 Coq.Lists.List "x :: y" list_scope
+R13524 Coq.Lists.List "x :: y" list_scope
+R13458 Parallelmove.Reg
+R13448 Parallelmove.Env
+R13403 Parallelmove.simpleDest
+R13418 Coq.Lists.List "x :: y" list_scope
+R13425 Coq.Lists.List "x :: y" list_scope
+R13394 Parallelmove.Moves
+R13383 Parallelmove.Move
+R13383 Parallelmove.Move
+R13669 Locations.eq
+R13690 Locations.eq
+R13669 Locations.eq
+R13690 Locations.eq
+R13690 Locations.eq
+R13725 Coq.Init.Logic "x = y" type_scope
+R13741 Locations.diff_not_eq
+R13764 Locations.diff_sym
+R13725 Coq.Init.Logic "x = y" type_scope
+R13741 Locations.diff_not_eq
+R13764 Locations.diff_sym
+R13835 Locations.overlap
+R13835 Locations.overlap
+R13870 Locations.diff
+R13896 Locations.overlap_not_diff
+R13870 Locations.diff
+R13896 Locations.overlap_not_diff
+R13977 Parallelmove.get_update_id
+R14000 Parallelmove.get_update_diff
+R14031 Parallelmove.get_update_id
+R13977 Parallelmove.get_update_id
+R14000 Parallelmove.get_update_diff
+R14031 Parallelmove.get_update_id
+R14031 Parallelmove.get_update_id
+R14061 Locations.overlap
+R14061 Locations.overlap
+R14096 Locations.diff
+R14123 Locations.overlap_not_diff
+R14164 Locations.diff_sym
+R14096 Locations.diff
+R14123 Locations.overlap_not_diff
+R14164 Locations.diff_sym
+R14218 Parallelmove.get_update_id
+R14242 Parallelmove.get_update_diff
+R14269 Parallelmove.get_update_id
+R14300 Locations.diff_sym
+R14218 Parallelmove.get_update_id
+R14218 Parallelmove.get_update_id
+R14242 Parallelmove.get_update_diff
+R14269 Parallelmove.get_update_id
+R14300 Locations.diff_sym
+R14332 Locations.overlap
+R14360 Locations.overlap
+R14332 Locations.overlap
+R14360 Locations.overlap
+R14360 Locations.overlap
+R14404 Parallelmove.get_update_ndiff
+R14436 Locations.overlap_not_diff
+R14404 Parallelmove.get_update_ndiff
+R14404 Parallelmove.get_update_ndiff
+R14404 Parallelmove.get_update_ndiff
+R14404 Parallelmove.get_update_ndiff
+R14404 Parallelmove.get_update_ndiff
+R14404 Parallelmove.get_update_ndiff
+R14404 Parallelmove.get_update_ndiff
+R14436 Locations.overlap_not_diff
+R14436 Locations.overlap_not_diff
+R14436 Locations.overlap_not_diff
+R14436 Locations.overlap_not_diff
+R14436 Locations.overlap_not_diff
+R14489 Coq.Init.Logic "~ x" type_scope
+R14491 Locations.diff
+R14516 Locations.overlap_not_diff
+R14569 Parallelmove.get_update_ndiff
+R14489 Coq.Init.Logic "~ x" type_scope
+R14491 Locations.diff
+R14516 Locations.overlap_not_diff
+R14569 Parallelmove.get_update_ndiff
+R14602 Parallelmove.get_update_diff
+R14629 Parallelmove.get_update_ndiff
+R14660 Locations.non_overlap_diff
+R14602 Parallelmove.get_update_diff
+R14629 Parallelmove.get_update_ndiff
+R14660 Locations.non_overlap_diff
+R14694 Coq.Init.Logic "~ x" type_scope
+R14696 Locations.diff
+R14728 Locations.overlap_not_diff
+R14694 Coq.Init.Logic "~ x" type_scope
+R14696 Locations.diff
+R14728 Locations.overlap_not_diff
+R14762 Locations.diff
+R14794 Locations.non_overlap_diff
+R14762 Locations.diff
+R14794 Locations.non_overlap_diff
+R14839 Parallelmove.get_update_diff
+R14839 Parallelmove.get_update_diff
+R14878 Parallelmove.get_update_ndiff
+R14878 Parallelmove.get_update_ndiff
+R14878 Parallelmove.get_update_ndiff
+R14878 Parallelmove.get_update_ndiff
+R14878 Parallelmove.get_update_ndiff
+R14878 Parallelmove.get_update_ndiff
+R14878 Parallelmove.get_update_ndiff
+R14878 Parallelmove.get_update_ndiff
+R14908 Locations.diff
+R14940 Locations.non_overlap_diff
+R14908 Locations.diff
+R14940 Locations.non_overlap_diff
+R14974 Locations.diff
+R15006 Locations.non_overlap_diff
+R14974 Locations.diff
+R15006 Locations.non_overlap_diff
+R15059 Parallelmove.get_update_diff
+R15059 Parallelmove.get_update_diff
+R15059 Parallelmove.get_update_diff
+R15059 Parallelmove.get_update_diff
+R15059 Parallelmove.get_update_diff
+R15059 Parallelmove.get_update_diff
+R15059 Parallelmove.get_update_diff
+R15059 Parallelmove.get_update_diff
+R15059 Parallelmove.get_update_diff
+R15059 Parallelmove.get_update_diff
+R15243 Coq.Init.Logic "x = y" type_scope
+R15217 Parallelmove.get
+R15222 Parallelmove.pexec
+R15231 Coq.Lists.List "x :: y" list_scope
+R15245 Parallelmove.get
+R15250 Parallelmove.pexec
+R15259 Coq.Lists.List "x :: y" list_scope
+R15209 Parallelmove.Move
+R15172 Coq.Init.Logic "x = y" type_scope
+R15153 Parallelmove.get
+R15158 Parallelmove.pexec
+R15174 Parallelmove.get
+R15179 Parallelmove.pexec
+R15146 Parallelmove.Env
+R15136 Parallelmove.Reg
+R15124 Parallelmove.Moves
+R15124 Parallelmove.Moves
+R15366 Locations.eq
+R15386 Locations.overlap
+R15366 Locations.eq
+R15386 Locations.overlap
+R15386 Locations.overlap
+R15573 Coq.Init.Logic "x = y" type_scope
+R15539 Parallelmove.get
+R15544 Parallelmove.pexec
+R15553 Coq.Lists.List "x :: y" list_scope
+R15560 Coq.Lists.List "x ++ y" list_scope
+R15575 Parallelmove.get
+R15580 Parallelmove.pexec
+R15590 Coq.Lists.List "x ++ y" list_scope
+R15596 Coq.Lists.List "x :: y" list_scope
+R15531 Parallelmove.Reg
+R15521 Parallelmove.Env
+R15476 Parallelmove.simpleDest
+R15490 Coq.Lists.List "x :: y" list_scope
+R15497 Coq.Lists.List "x ++ y" list_scope
+R15468 Parallelmove.Move
+R15456 Parallelmove.Moves
+R15456 Parallelmove.Moves
+R15686 Parallelmove.app_cons
+R15686 Parallelmove.app_cons
+R15712 Parallelmove.pexec_swap
+R15738 Parallelmove.app_cons
+R15712 Parallelmove.pexec_swap
+R15738 Parallelmove.app_cons
+R15760 Parallelmove.pexec_add
+R15760 Parallelmove.pexec_add
+R15792 Parallelmove.simpleDest_pop2
+R15792 Parallelmove.simpleDest_pop2
+R15983 Coq.Init.Logic "x = y" type_scope
+R15949 Parallelmove.get
+R15954 Parallelmove.pexec
+R15964 Coq.Lists.List "x ++ y" list_scope
+R15970 Coq.Lists.List "x :: y" list_scope
+R15985 Parallelmove.get
+R15990 Parallelmove.pexec
+R15999 Coq.Lists.List "x :: y" list_scope
+R16006 Coq.Lists.List "x ++ y" list_scope
+R15941 Parallelmove.Reg
+R15931 Parallelmove.Env
+R15886 Parallelmove.simpleDest
+R15901 Coq.Lists.List "x ++ y" list_scope
+R15907 Coq.Lists.List "x :: y" list_scope
+R15878 Parallelmove.Move
+R15866 Parallelmove.Moves
+R15866 Parallelmove.Moves
+R16046 Parallelmove.pexec_movBack
+R16046 Parallelmove.pexec_movBack
+R16074 Parallelmove.simpleDest_movFront
+R16074 Parallelmove.simpleDest_movFront
+R16278 Coq.Init.Logic "x = y" type_scope
+R16236 Parallelmove.get
+R16241 Parallelmove.pexec
+R16264 Coq.Lists.List "x ++ y" list_scope
+R16252 Coq.Lists.List "x ++ y" list_scope
+R16258 Coq.Lists.List "x :: y" list_scope
+R16282 Parallelmove.get
+R16287 Parallelmove.pexec
+R16303 Coq.Lists.List "x ++ y" list_scope
+R16298 Coq.Lists.List "x ++ y" list_scope
+R16311 Coq.Lists.List "x :: y" list_scope
+R16228 Parallelmove.Reg
+R16218 Parallelmove.Env
+R16165 Parallelmove.simpleDest
+R16193 Coq.Lists.List "x ++ y" list_scope
+R16181 Coq.Lists.List "x ++ y" list_scope
+R16187 Coq.Lists.List "x :: y" list_scope
+R16157 Parallelmove.Move
+R16145 Parallelmove.Moves
+R16145 Parallelmove.Moves
+R16145 Parallelmove.Moves
+R16362 Parallelmove.app_app
+R16362 Parallelmove.app_app
+R16379 Parallelmove.app_cons
+R16379 Parallelmove.app_cons
+R16405 Parallelmove.pexec_movFront
+R16405 Parallelmove.pexec_movFront
+R16432 Parallelmove.simpleDest
+R16446 Coq.Lists.List "x :: y" list_scope
+R16453 Coq.Lists.List "x ++ y" list_scope
+R16460 Coq.Lists.List "x ++ y" list_scope
+R16432 Parallelmove.simpleDest
+R16446 Coq.Lists.List "x :: y" list_scope
+R16453 Coq.Lists.List "x ++ y" list_scope
+R16460 Coq.Lists.List "x ++ y" list_scope
+R16479 Parallelmove.app_app
+R16479 Parallelmove.app_app
+R16499 Parallelmove.pexec_movFront
+R16499 Parallelmove.pexec_movFront
+R16527 Parallelmove.simpleDest_swap_app
+R16527 Parallelmove.simpleDest_swap_app
+R16560 Parallelmove.simpleDest_movFront
+R16560 Parallelmove.simpleDest_movFront
+R16637 Coq.Init.Specif "{ A } + { B }" type_scope
+R16640 Locations.diff
+R16661 Coq.Init.Logic.not
+R16666 Locations.diff
+R16630 Parallelmove.Reg
+R16630 Parallelmove.Reg
+R16698 Locations.eq
+R16698 Locations.eq
+R16752 Coq.Init.Logic "x = y" type_scope
+R16752 Coq.Init.Logic "x = y" type_scope
+R16770 Locations.diff_not_eq
+R16770 Locations.diff_not_eq
+R16808 Locations.overlap
+R16808 Locations.overlap
+R16846 Locations.overlap_not_diff
+R16846 Locations.overlap_not_diff
+R16893 Locations.non_overlap_diff
+R16893 Locations.non_overlap_diff
+R17041 Coq.Init.Logic "x = y" type_scope
+R17043 Parallelmove.get
+R17048 Parallelmove.pexec
+R17057 Parallelmove.update
+R17030 Parallelmove.Value
+R17020 Parallelmove.Env
+R16992 Parallelmove.noWrite
+R16985 Parallelmove.Reg
+R16973 Parallelmove.Moves
+R17134 Parallelmove.get_update_id
+R17134 Parallelmove.get_update_id
+R17223 Parallelmove.get_update_diff
+R17223 Parallelmove.get_update_diff
+R17369 Coq.Init.Logic "x = y" type_scope
+R17339 Parallelmove.get
+R17344 Parallelmove.pexec
+R17358 Coq.Lists.List "x :: y" list_scope
+R17351 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R17371 Parallelmove.get
+R17376 Parallelmove.pexec
+R17322 Locations.diff
+R17315 Parallelmove.Reg
+R17305 Parallelmove.Env
+R17295 Parallelmove.Reg
+R17283 Parallelmove.Moves
+R17420 Parallelmove.get_update_diff
+R17420 Parallelmove.get_update_diff
+R17506 Parallelmove.noWrite
+R17477 Parallelmove.simpleDest
+R17496 Coq.Lists.List "x :: y" list_scope
+R17489 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R17910 Coq.Init.Logic "x = y" type_scope
+R17892 Parallelmove.get
+R17897 Parallelmove.pexec
+R17912 Parallelmove.get
+R17885 Parallelmove.Env
+R17845 Parallelmove.simpleDest
+R17864 Coq.Lists.List "x :: y" list_scope
+R17857 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R17838 Parallelmove.Reg
+R17838 Parallelmove.Reg
+R17824 Parallelmove.Moves
+R18063 Locations.eq
+R18063 Locations.eq
+R18095 Coq.Init.Logic "x = y" type_scope
+R18108 Locations.diff_not_eq
+R18095 Coq.Init.Logic "x = y" type_scope
+R18108 Locations.diff_not_eq
+R18156 Parallelmove.get_update_diff
+R18156 Parallelmove.get_update_diff
+R18260 Parallelmove.noOverlap
+R18270 Coq.Lists.List.nil
+R18441 Coq.Lists.List.In
+R18447 Parallelmove.getsrc
+R18458 Coq.Lists.List "x ++ y" list_scope
+R18464 Coq.Lists.List "x :: y" list_scope
+R18412 Coq.Lists.List.In
+R18418 Parallelmove.getsrc
+R18429 Coq.Lists.List "x ++ y" list_scope
+R18405 Parallelmove.Reg
+R18393 Parallelmove.Moves
+R18393 Parallelmove.Moves
+R18378 Parallelmove.Move
+R18704 Coq.Init.Logic "x = y" type_scope
+R18672 Parallelmove.getdst
+R18683 Coq.Lists.List "x ++ y" list_scope
+R18696 Coq.Lists.List "x :: y" list_scope
+R18687 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R18716 Coq.Lists.List "x ++ y" list_scope
+R18706 Parallelmove.getdst
+R18723 Coq.Lists.List "x :: y" list_scope
+R18726 Parallelmove.getdst
+R18662 Parallelmove.Moves
+R18662 Parallelmove.Moves
+R18648 Parallelmove.Reg
+R18648 Parallelmove.Reg
+R18900 Coq.Init.Logic "x = y" type_scope
+R18882 Parallelmove.getdst
+R18893 Coq.Lists.List "x ++ y" list_scope
+R18912 Coq.Lists.List "x ++ y" list_scope
+R18902 Parallelmove.getdst
+R18915 Parallelmove.getdst
+R18873 Parallelmove.Moves
+R18873 Parallelmove.Moves
+R19104 Parallelmove.noOverlap_aux
+R19075 Parallelmove.noOverlap_aux
+R19094 Coq.Lists.List "x :: y" list_scope
+R19063 Coq.Lists.List.list
+R19068 Parallelmove.Reg
+R19053 Parallelmove.Reg
+R19053 Parallelmove.Reg
+R19300 Parallelmove.noOverlap_aux
+R19320 Coq.Lists.List "x ++ y" list_scope
+R19262 Parallelmove.noOverlap_aux
+R19282 Coq.Lists.List "x ++ y" list_scope
+R19288 Coq.Lists.List "x :: y" list_scope
+R19250 Coq.Lists.List.list
+R19255 Parallelmove.Reg
+R19250 Coq.Lists.List.list
+R19255 Parallelmove.Reg
+R19236 Parallelmove.Reg
+R19236 Parallelmove.Reg
+R19409 Coq.Lists.List.app
+R19409 Coq.Lists.List.app
+R19409 Coq.Lists.List.app
+R19428 Parallelmove.noOverlap_auxpop
+R19428 Parallelmove.noOverlap_auxpop
+R19473 Parallelmove.app_cons
+R19473 Parallelmove.app_cons
+R19603 Parallelmove.noOverlap
+R19580 Parallelmove.noOverlap
+R19593 Coq.Lists.List "x :: y" list_scope
+R19572 Parallelmove.Moves
+R19561 Parallelmove.Move
+R19649 Parallelmove.noOverlap_nil
+R19649 Parallelmove.noOverlap_nil
+R19919 Parallelmove.noOverlap
+R19933 Coq.Lists.List "x ++ y" list_scope
+R19887 Parallelmove.noOverlap
+R19901 Coq.Lists.List "x ++ y" list_scope
+R19907 Coq.Lists.List "x :: y" list_scope
+R19878 Parallelmove.Moves
+R19878 Parallelmove.Moves
+R19863 Parallelmove.Move
+R20016 Parallelmove.noOverlap_pop
+R20016 Parallelmove.noOverlap_pop
+R20047 Parallelmove.app_cons
+R20047 Parallelmove.app_cons
+R20211 Parallelmove.getsrc_add
+R20211 Parallelmove.getsrc_add
+R20311 Parallelmove.getdst_app
+R20329 Parallelmove.noOverlap_auxPop
+R20311 Parallelmove.getdst_app
+R20329 Parallelmove.noOverlap_auxPop
+R20372 Parallelmove.getdst_add
+R20372 Parallelmove.getdst_add
+R20727 Parallelmove.noOverlap
+R20702 Parallelmove.noOverlap
+R20716 Coq.Lists.List "x ++ y" list_scope
+R20694 Parallelmove.Moves
+R20694 Parallelmove.Moves
+R20816 Parallelmove.app_cons
+R20816 Parallelmove.app_cons
+R20855 Parallelmove.noOverlap_pop
+R20855 Parallelmove.noOverlap_pop
+R20989 Coq.Init.Logic "x = y" type_scope
+R20958 Parallelmove.get
+R20963 Parallelmove.pexec
+R20972 Parallelmove.update
+R20991 Parallelmove.get
+R20996 Parallelmove.pexec
+R20943 Parallelmove.noRead
+R20926 Locations.diff
+R21053 Parallelmove.get_update_diff
+R21053 Parallelmove.get_update_diff
+R21113 Locations.eq
+R21113 Locations.eq
+R21160 Parallelmove.get_update_id
+R21160 Parallelmove.get_update_id
+R21160 Parallelmove.get_update_id
+R21160 Parallelmove.get_update_id
+R21184 Parallelmove.get_update_diff
+R21213 Locations.diff_sym
+R21184 Parallelmove.get_update_diff
+R21213 Locations.diff_sym
+R21248 Parallelmove.diff_dec
+R21248 Parallelmove.diff_dec
+R21287 Parallelmove.get_update_diff
+R21287 Parallelmove.get_update_diff
+R21287 Parallelmove.get_update_diff
+R21287 Parallelmove.get_update_diff
+R21287 Parallelmove.get_update_diff
+R21287 Parallelmove.get_update_diff
+R21359 Parallelmove.get_update_ndiff
+R21359 Parallelmove.get_update_ndiff
+R21359 Parallelmove.get_update_ndiff
+R21359 Parallelmove.get_update_ndiff
+R21359 Parallelmove.get_update_ndiff
+R21359 Parallelmove.get_update_ndiff
+R21359 Parallelmove.get_update_ndiff
+R21359 Parallelmove.get_update_ndiff
+R21585 Coq.Init.Logic "x = y" type_scope
+R21545 Parallelmove.get
+R21550 Parallelmove.pexec
+R21571 Parallelmove.sexec
+R21564 Coq.Lists.List "x :: y" list_scope
+R21557 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R21589 Parallelmove.get
+R21594 Parallelmove.pexec
+R21603 Parallelmove.sexec
+R21617 Coq.Lists.List "x :: y" list_scope
+R21610 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R21524 Coq.Init.Logic "A \/ B" type_scope
+R21520 Coq.Init.Logic "x = y" type_scope
+R21527 Locations.diff
+R21511 Parallelmove.Reg
+R21501 Parallelmove.Env
+R21460 Parallelmove.simpleDest
+R21479 Coq.Lists.List "x :: y" list_scope
+R21472 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R21445 Parallelmove.noRead
+R21438 Parallelmove.Reg
+R21438 Parallelmove.Reg
+R21424 Parallelmove.Moves
+R21424 Parallelmove.Moves
+R21692 Parallelmove.get_update_id
+R21692 Parallelmove.get_update_id
+R21722 Parallelmove.sD_pexec
+R21753 Parallelmove.get_update_id
+R21722 Parallelmove.sD_pexec
+R21753 Parallelmove.get_update_id
+R21782 Parallelmove.pexec_update
+R21782 Parallelmove.pexec_update
+R21810 Parallelmove.get_update_diff
+R21810 Parallelmove.get_update_diff
+R21884 Parallelmove.pexec
+R21923 Parallelmove.sexec
+R21930 Parallelmove.StateDone
+R21905 Coq.Lists.List "x ++ y" list_scope
+R21891 Parallelmove.StateToMove
+R21908 Parallelmove.StateBeing
+R21873 Parallelmove.Env
+R21861 Parallelmove.State
+R22033 Coq.Init.Logic "x = y" type_scope
+R22024 Parallelmove.get
+R22035 Parallelmove.get
+R22006 Parallelmove.notemporary
+R22000 Parallelmove.Reg
+R21977 Parallelmove.Env
+R21977 Parallelmove.Env
+R22096 Parallelmove.noOverlap
+R22114 Coq.Lists.List "x :: y" list_scope
+R22107 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R22132 Coq.Lists.List "x ++ y" list_scope
+R22118 Parallelmove.StateToMove
+R22135 Parallelmove.StateBeing
+R22083 Parallelmove.State
+R22073 Parallelmove.Reg
+R22258 Parallelmove.noOverlap_aux
+R22277 Coq.Lists.List "x :: y" list_scope
+R22284 Coq.Lists.List "x ++ y" list_scope
+R22220 Parallelmove.noOverlap_aux
+R22240 Coq.Lists.List "x ++ y" list_scope
+R22246 Coq.Lists.List "x :: y" list_scope
+R22213 Parallelmove.Reg
+R22213 Parallelmove.Reg
+R22196 Coq.Lists.List.list
+R22201 Parallelmove.Reg
+R22196 Coq.Lists.List.list
+R22201 Parallelmove.Reg
+R22338 Parallelmove.noOverlap_aux
+R22338 Parallelmove.noOverlap_aux
+R22338 Parallelmove.noOverlap_aux
+R22493 Parallelmove.noOverlap_auxpop
+R22493 Parallelmove.noOverlap_auxpop
+R22596 Parallelmove.noRead
+R22606 Parallelmove.T
+R22574 Parallelmove.noTmp
+R22916 Parallelmove.noRead
+R22897 Locations.diff
+R22864 Parallelmove.path
+R22872 Coq.Lists.List "x ++ y" list_scope
+R22885 Coq.Lists.List "x :: y" list_scope
+R22876 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R22888 Coq.Lists.List.nil
+R22810 Parallelmove.simpleDest
+R22831 Coq.Lists.List "x :: y" list_scope
+R22822 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R22837 Coq.Lists.List "x ++ y" list_scope
+R22850 Coq.Lists.List "x :: y" list_scope
+R22841 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R22853 Coq.Lists.List.nil
+R22803 Parallelmove.Reg
+R22803 Parallelmove.Reg
+R22803 Parallelmove.Reg
+R22803 Parallelmove.Reg
+R22781 Parallelmove.Moves
+R22781 Parallelmove.Moves
+R23034 Parallelmove.app_cons
+R23034 Parallelmove.app_cons
+R23085 Coq.Lists.List "x ++ y" list_scope
+R23098 Coq.Lists.List "x :: y" list_scope
+R23089 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R23101 Coq.Lists.List.nil
+R23085 Coq.Lists.List "x ++ y" list_scope
+R23098 Coq.Lists.List "x :: y" list_scope
+R23089 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R23101 Coq.Lists.List.nil
+R23370 Parallelmove.simpleDest_pop
+R23385 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R23402 Parallelmove.simpleDest_swap
+R23370 Parallelmove.simpleDest_pop
+R23385 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R23402 Parallelmove.simpleDest_swap
+R23432 Parallelmove.path_pop
+R23441 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R23432 Parallelmove.path_pop
+R23441 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R23556 Parallelmove.noOverlap
+R23570 Coq.Lists.List "x :: y" list_scope
+R23577 Coq.Lists.List "x :: y" list_scope
+R23524 Parallelmove.noOverlap
+R23538 Coq.Lists.List "x :: y" list_scope
+R23545 Coq.Lists.List "x :: y" list_scope
+R23515 Parallelmove.Moves
+R23504 Parallelmove.Move
+R23504 Parallelmove.Move
+R23717 Coq.Init.Logic "A \/ B" type_scope
+R23712 Coq.Init.Logic "x = y" type_scope
+R23730 Coq.Init.Logic "A \/ B" type_scope
+R23725 Coq.Init.Logic "x = y" type_scope
+R23733 Coq.Lists.List.In
+R23740 Parallelmove.getsrc
+R23717 Coq.Init.Logic "A \/ B" type_scope
+R23712 Coq.Init.Logic "x = y" type_scope
+R23730 Coq.Init.Logic "A \/ B" type_scope
+R23725 Coq.Init.Logic "x = y" type_scope
+R23733 Coq.Lists.List.In
+R23740 Parallelmove.getsrc
+R24065 Coq.Init.Logic "x = y" type_scope
+R24033 Parallelmove.getsrc
+R24044 Coq.Lists.List "x ++ y" list_scope
+R24057 Coq.Lists.List "x :: y" list_scope
+R24048 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R24077 Coq.Lists.List "x ++ y" list_scope
+R24067 Parallelmove.getsrc
+R24084 Coq.Lists.List "x :: y" list_scope
+R24087 Parallelmove.getsrc
+R24023 Parallelmove.Moves
+R24023 Parallelmove.Moves
+R24009 Parallelmove.Reg
+R24009 Parallelmove.Reg
+R24261 Coq.Init.Logic "x = y" type_scope
+R24243 Parallelmove.getsrc
+R24254 Coq.Lists.List "x ++ y" list_scope
+R24273 Coq.Lists.List "x ++ y" list_scope
+R24263 Parallelmove.getsrc
+R24276 Parallelmove.getsrc
+R24234 Parallelmove.Moves
+R24234 Parallelmove.Moves
+R24479 Coq.Lists.List.In
+R24485 Parallelmove.getsrc
+R24496 Coq.Lists.List "x ++ y" list_scope
+R24502 Coq.Lists.List "x :: y" list_scope
+R24443 Coq.Lists.List.In
+R24449 Parallelmove.getsrc
+R24459 Coq.Lists.List "x :: y" list_scope
+R24466 Coq.Lists.List "x ++ y" list_scope
+R24436 Parallelmove.Reg
+R24424 Parallelmove.Moves
+R24424 Parallelmove.Moves
+R24409 Parallelmove.Move
+R24623 Parallelmove.getsrc_add1
+R24623 Parallelmove.getsrc_add1
+R24649 Coq.Lists.List.in_or_app
+R24674 Coq.Lists.List "x :: y" list_scope
+R24677 Parallelmove.getsrc
+R24660 Parallelmove.getsrc
+R24649 Coq.Lists.List.in_or_app
+R24674 Coq.Lists.List "x :: y" list_scope
+R24677 Parallelmove.getsrc
+R24660 Parallelmove.getsrc
+R24709 Coq.Lists.List.in_eq
+R24709 Coq.Lists.List.in_eq
+R24728 Parallelmove.getsrc_add
+R24728 Parallelmove.getsrc_add
+R24848 Parallelmove.noOverlap
+R24861 Coq.Lists.List "x :: y" list_scope
+R24868 Coq.Lists.List "x ++ y" list_scope
+R24816 Parallelmove.noOverlap
+R24830 Coq.Lists.List "x ++ y" list_scope
+R24836 Coq.Lists.List "x :: y" list_scope
+R24808 Parallelmove.Move
+R24796 Parallelmove.Moves
+R24796 Parallelmove.Moves
+R24938 Parallelmove.getdst_add
+R24956 Parallelmove.getdst
+R24972 Parallelmove.getdst_app
+R24938 Parallelmove.getdst_add
+R24956 Parallelmove.getdst
+R24972 Parallelmove.getdst_app
+R24998 Parallelmove.noOverlapaux_swap2
+R24998 Parallelmove.noOverlapaux_swap2
+R25037 Parallelmove.Ingetsrc_swap
+R25037 Parallelmove.Ingetsrc_swap
+R25299 Coq.Init.Logic "x = y" type_scope
+R25250 Parallelmove.get
+R25255 Parallelmove.pexec
+R25285 Parallelmove.sexec
+R25264 Coq.Lists.List "x ++ y" list_scope
+R25275 Coq.Lists.List "x :: y" list_scope
+R25268 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R25278 Coq.Lists.List.nil
+R25303 Parallelmove.get
+R25308 Parallelmove.pexec
+R25340 Parallelmove.sexec
+R25356 Coq.Lists.List "x :: y" list_scope
+R25347 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R25351 Parallelmove.T
+R25317 Coq.Lists.List "x ++ y" list_scope
+R25330 Coq.Lists.List "x :: y" list_scope
+R25321 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R25322 Parallelmove.T
+R25333 Coq.Lists.List.nil
+R25229 Coq.Init.Logic "A \/ B" type_scope
+R25225 Coq.Init.Logic "x = y" type_scope
+R25232 Locations.diff
+R25205 Parallelmove.notemporary
+R25198 Parallelmove.Reg
+R25188 Parallelmove.Env
+R25164 Parallelmove.noTmp
+R25126 Parallelmove.simpleDest
+R25140 Coq.Lists.List "x ++ y" list_scope
+R25151 Coq.Lists.List "x :: y" list_scope
+R25144 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R25154 Coq.Lists.List.nil
+R25119 Parallelmove.Reg
+R25119 Parallelmove.Reg
+R25105 Parallelmove.Moves
+R25105 Parallelmove.Moves
+R25400 Parallelmove.pexec_movFront
+R25400 Parallelmove.pexec_movFront
+R25400 Parallelmove.pexec_movFront
+R25400 Parallelmove.pexec_movFront
+R25400 Parallelmove.pexec_movFront
+R25400 Parallelmove.pexec_movFront
+R25439 Parallelmove.app_nil
+R25439 Parallelmove.app_nil
+R25439 Parallelmove.app_nil
+R25439 Parallelmove.app_nil
+R25501 Parallelmove.get_update_id
+R25501 Parallelmove.get_update_id
+R25501 Parallelmove.get_update_id
+R25501 Parallelmove.get_update_id
+R25501 Parallelmove.get_update_id
+R25539 Parallelmove.get_update_diff
+R25539 Parallelmove.get_update_diff
+R25539 Parallelmove.get_update_diff
+R25539 Parallelmove.get_update_diff
+R25539 Parallelmove.get_update_diff
+R25539 Parallelmove.get_update_diff
+R25571 Parallelmove.pexec_update
+R25571 Parallelmove.pexec_update
+R25597 Locations.diff_sym
+R25597 Locations.diff_sym
+R25652 Parallelmove.noTmp_noReadTmp
+R25652 Parallelmove.noTmp_noReadTmp
+R25682 Parallelmove.simpleDest_tmpLast
+R25682 Parallelmove.simpleDest_tmpLast
+R25975 Coq.Init.Logic "x = y" type_scope
+R25926 Parallelmove.get
+R25931 Parallelmove.pexec
+R25961 Parallelmove.sexec
+R25940 Coq.Lists.List "x ++ y" list_scope
+R25951 Coq.Lists.List "x :: y" list_scope
+R25944 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R25954 Coq.Lists.List.nil
+R25979 Parallelmove.get
+R25984 Parallelmove.pexec
+R26016 Parallelmove.sexec
+R26032 Coq.Lists.List "x :: y" list_scope
+R26023 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R26027 Parallelmove.T
+R25993 Coq.Lists.List "x ++ y" list_scope
+R26006 Coq.Lists.List "x :: y" list_scope
+R25997 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R25998 Parallelmove.T
+R26009 Coq.Lists.List.nil
+R25905 Coq.Init.Logic "A \/ B" type_scope
+R25901 Coq.Init.Logic "x = y" type_scope
+R25908 Locations.diff
+R25881 Parallelmove.notemporary
+R25874 Parallelmove.Reg
+R25864 Parallelmove.Env
+R25815 Parallelmove.noTmpLast
+R25828 Coq.Lists.List "x ++ y" list_scope
+R25839 Coq.Lists.List "x :: y" list_scope
+R25832 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R25842 Coq.Lists.List.nil
+R25777 Parallelmove.simpleDest
+R25791 Coq.Lists.List "x ++ y" list_scope
+R25802 Coq.Lists.List "x :: y" list_scope
+R25795 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R25805 Coq.Lists.List.nil
+R25770 Parallelmove.Reg
+R25770 Parallelmove.Reg
+R25756 Parallelmove.Moves
+R25756 Parallelmove.Moves
+R26066 Parallelmove.step_inv_loop_aux
+R26066 Parallelmove.step_inv_loop_aux
+R26098 Parallelmove.noTmpLast_popBack
+R26118 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R26098 Parallelmove.noTmpLast_popBack
+R26118 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R26431 Coq.Init.Logic "x = y" type_scope
+R26413 Parallelmove.get
+R26418 Parallelmove.exec
+R26433 Parallelmove.get
+R26438 Parallelmove.exec
+R26385 Coq.Init.Logic "A \/ B" type_scope
+R26381 Coq.Init.Logic "x = y" type_scope
+R26388 Locations.diff
+R26368 Coq.Lists.List.In
+R26333 Parallelmove.notemporary
+R26230 Parallelmove.getdst
+R26277 Coq.Lists.List "x ++ y" list_scope
+R26261 Coq.Lists.List "x ++ y" list_scope
+R26246 Parallelmove.StateToMove
+R26264 Parallelmove.StateBeing
+R26298 Coq.Lists.List "x ++ y" list_scope
+R26283 Parallelmove.StateToMove
+R26301 Parallelmove.StateBeing
+R26204 Parallelmove.Reg
+R26194 Parallelmove.Env
+R26169 Parallelmove.State
+R26169 Parallelmove.State
+R26548 Coq.Init.Logic "x = y" type_scope
+R26540 Parallelmove.get
+R26550 Parallelmove.get
+R26555 Parallelmove.pexec
+R26533 Parallelmove.Env
+R26506 Parallelmove.noWrite
+R26499 Parallelmove.Reg
+R26487 Parallelmove.Moves
+R26736 Locations.eq
+R26736 Locations.eq
+R26774 Coq.Init.Logic "x = y" type_scope
+R26792 Locations.diff_not_eq
+R26774 Coq.Init.Logic "x = y" type_scope
+R26792 Locations.diff_not_eq
+R26835 Locations.overlap
+R26835 Locations.overlap
+R26869 Locations.diff
+R26897 Locations.overlap_not_diff
+R26869 Locations.diff
+R26897 Locations.overlap_not_diff
+R27062 Parallelmove.sameExec
+R27047 Parallelmove.stepInv
+R27033 Parallelmove.step
+R27025 Parallelmove.State
+R27025 Parallelmove.State
+R27217 Parallelmove.app_nil
+R27217 Parallelmove.app_nil
+R27217 Parallelmove.app_nil
+R27217 Parallelmove.app_nil
+R27217 Parallelmove.app_nil
+R27217 Parallelmove.app_nil
+R27217 Parallelmove.app_nil
+R27217 Parallelmove.app_nil
+R27217 Parallelmove.app_nil
+R27217 Parallelmove.app_nil
+R27217 Parallelmove.app_nil
+R27273 Parallelmove.pexec_movFront
+R27273 Parallelmove.pexec_movFront
+R27308 Locations.eq
+R27308 Locations.eq
+R27351 Parallelmove.get_update_id
+R27372 Parallelmove.get_noWrite
+R27391 Parallelmove.sD_nW
+R27412 Parallelmove.simpleDest_movFront
+R27351 Parallelmove.get_update_id
+R27372 Parallelmove.get_noWrite
+R27391 Parallelmove.sD_nW
+R27412 Parallelmove.simpleDest_movFront
+R27487 Coq.Init.Logic "x = y" type_scope
+R27522 Parallelmove.get_update_diff
+R27551 Locations.diff_sym
+R27487 Coq.Init.Logic "x = y" type_scope
+R27522 Parallelmove.get_update_diff
+R27551 Locations.diff_sym
+R27597 Parallelmove.getdst_app
+R27624 Coq.Lists.List.in_or_app
+R27647 Coq.Lists.List.in_or_app
+R27597 Parallelmove.getdst_app
+R27597 Parallelmove.getdst_app
+R27597 Parallelmove.getdst_app
+R27597 Parallelmove.getdst_app
+R27624 Coq.Lists.List.in_or_app
+R27647 Coq.Lists.List.in_or_app
+R27695 Parallelmove.pexec_movFront
+R27695 Parallelmove.pexec_movFront
+R27695 Parallelmove.pexec_movFront
+R27695 Parallelmove.pexec_movFront
+R27695 Parallelmove.pexec_movFront
+R27695 Parallelmove.pexec_movFront
+R27726 Parallelmove.app_nil
+R27726 Parallelmove.app_nil
+R27747 Parallelmove.simpleDest_movBack
+R27747 Parallelmove.simpleDest_movBack
+R27779 Parallelmove.pexec_mov
+R27779 Parallelmove.pexec_mov
+R27815 Parallelmove.app_cons
+R27833 Parallelmove.app_app
+R27815 Parallelmove.app_cons
+R27833 Parallelmove.app_app
+R27815 Parallelmove.app_cons
+R27833 Parallelmove.app_app
+R27815 Parallelmove.app_cons
+R27849 Parallelmove.step_inv_loop
+R27849 Parallelmove.step_inv_loop
+R27889 Parallelmove.app_app
+R27906 Parallelmove.app_cons
+R27889 Parallelmove.app_app
+R27906 Parallelmove.app_cons
+R27942 Parallelmove.app_app
+R27959 Parallelmove.app_cons
+R27942 Parallelmove.app_app
+R27959 Parallelmove.app_cons
+R27942 Parallelmove.app_app
+R27982 Parallelmove.noTmp_app
+R27982 Parallelmove.noTmp_app
+R28074 Locations.diff_sym
+R28074 Locations.diff_sym
+R28128 Parallelmove.getdst_app
+R28128 Parallelmove.getdst_app
+R28128 Parallelmove.getdst_app
+R28128 Parallelmove.getdst_app
+R28128 Parallelmove.getdst_app
+R28128 Parallelmove.getdst_app
+R28128 Parallelmove.getdst_app
+R28154 Coq.Lists.List.in_or_app
+R28177 Coq.Lists.List.in_or_app
+R28215 Coq.Lists.List.in_or_app
+R28154 Coq.Lists.List.in_or_app
+R28177 Coq.Lists.List.in_or_app
+R28215 Coq.Lists.List.in_or_app
+R28264 Parallelmove.pexec_movFront
+R28292 Parallelmove.pexec_push
+R28264 Parallelmove.pexec_movFront
+R28292 Parallelmove.pexec_push
+R28316 Parallelmove.noRead_app
+R28316 Parallelmove.noRead_app
+R28340 Parallelmove.noRead_app
+R28340 Parallelmove.noRead_app
+R28359 Parallelmove.noRead_by_path
+R28359 Parallelmove.noRead_by_path
+R28405 Parallelmove.simpleDest_right
+R28405 Parallelmove.simpleDest_right
+R28439 Parallelmove.path_pop
+R28448 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R28439 Parallelmove.path_pop
+R28448 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R28486 Locations.diff_sym
+R28486 Locations.diff_sym
+R28521 Parallelmove.simpleDest_movFront
+R28521 Parallelmove.simpleDest_movFront
+R28651 Locations.diff_sym
+R28651 Locations.diff_sym
+R28699 Parallelmove.getdst_app
+R28699 Parallelmove.getdst_app
+R28699 Parallelmove.getdst_app
+R28699 Parallelmove.getdst_app
+R28699 Parallelmove.getdst_app
+R28699 Parallelmove.getdst_app
+R28699 Parallelmove.getdst_app
+R28725 Coq.Lists.List.in_or_app
+R28748 Coq.Lists.List.in_or_app
+R28725 Coq.Lists.List.in_or_app
+R28748 Coq.Lists.List.in_or_app
+R28796 Parallelmove.pexec_movFront
+R28796 Parallelmove.pexec_movFront
+R28826 Parallelmove.app_nil
+R28826 Parallelmove.app_nil
+R28847 Parallelmove.pexec_push
+R28847 Parallelmove.pexec_push
+R28877 Parallelmove.app_nil
+R28877 Parallelmove.app_nil
+R28897 Parallelmove.simpleDest_movFront
+R28897 Parallelmove.simpleDest_movFront
+R28991 Locations.diff_sym
+R28991 Locations.diff_sym
+R29039 Parallelmove.getdst_app
+R29065 Coq.Lists.List.in_or_app
+R29088 Coq.Lists.List.in_or_app
+R29039 Parallelmove.getdst_app
+R29039 Parallelmove.getdst_app
+R29039 Parallelmove.getdst_app
+R29065 Coq.Lists.List.in_or_app
+R29088 Coq.Lists.List.in_or_app
+R29222 Parallelmove.path
+R29230 Coq.Lists.List "x ++ y" list_scope
+R29243 Coq.Lists.List "x :: y" list_scope
+R29234 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R29235 Parallelmove.T
+R29246 Coq.Lists.List.nil
+R29190 Parallelmove.path
+R29198 Coq.Lists.List "x ++ y" list_scope
+R29209 Coq.Lists.List "x :: y" list_scope
+R29202 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R29212 Coq.Lists.List.nil
+R29181 Parallelmove.Moves
+R29171 Parallelmove.Reg
+R29171 Parallelmove.Reg
+R29340 Parallelmove.app_cons
+R29340 Parallelmove.app_cons
+R29340 Parallelmove.app_cons
+R29340 Parallelmove.app_cons
+R29528 Parallelmove.path
+R29534 Parallelmove.StateBeing
+R29513 Parallelmove.stepInv
+R29499 Parallelmove.step
+R29491 Parallelmove.State
+R29491 Parallelmove.State
+R29791 Parallelmove.app_cons
+R29812 Parallelmove.app_cons
+R29791 Parallelmove.app_cons
+R29812 Parallelmove.app_cons
+R29829 Parallelmove.path_tmpLast
+R29829 Parallelmove.path_tmpLast
+R29867 Parallelmove.path_pop
+R29867 Parallelmove.path_pop
+R29966 Parallelmove.simpleDest
+R29993 Coq.Lists.List "x ++ y" list_scope
+R29978 Parallelmove.StateToMove
+R29996 Parallelmove.StateBeing
+R29951 Parallelmove.stepInv
+R29937 Parallelmove.step
+R29928 Parallelmove.State
+R29928 Parallelmove.State
+R30171 Parallelmove.app_nil
+R30171 Parallelmove.app_nil
+R30171 Parallelmove.app_nil
+R30171 Parallelmove.app_nil
+R30171 Parallelmove.app_nil
+R30171 Parallelmove.app_nil
+R30171 Parallelmove.app_nil
+R30171 Parallelmove.app_nil
+R30171 Parallelmove.app_nil
+R30171 Parallelmove.app_nil
+R30171 Parallelmove.app_nil
+R30213 Parallelmove.simpleDest_Pop
+R30228 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R30213 Parallelmove.simpleDest_Pop
+R30228 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R30255 Parallelmove.simpleDest_movBack
+R30255 Parallelmove.simpleDest_movBack
+R30293 Parallelmove.simpleDest_insert
+R30323 Parallelmove.app_app
+R30338 Parallelmove.simpleDest_movFront
+R30293 Parallelmove.simpleDest_insert
+R30323 Parallelmove.app_app
+R30338 Parallelmove.simpleDest_movFront
+R30370 Parallelmove.app_cons
+R30388 Parallelmove.app_app
+R30370 Parallelmove.app_cons
+R30388 Parallelmove.app_app
+R30437 Parallelmove.app_cons
+R30464 Parallelmove.app_app
+R30437 Parallelmove.app_cons
+R30437 Parallelmove.app_cons
+R30437 Parallelmove.app_cons
+R30464 Parallelmove.app_app
+R30464 Parallelmove.app_app
+R30464 Parallelmove.app_app
+R30486 Parallelmove.simpleDest_tmpLast
+R30508 Coq.Lists.List "x ++ y" list_scope
+R30525 Coq.Lists.List "x :: y" list_scope
+R30512 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R30486 Parallelmove.simpleDest_tmpLast
+R30508 Coq.Lists.List "x ++ y" list_scope
+R30525 Coq.Lists.List "x :: y" list_scope
+R30512 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R30566 Parallelmove.simpleDest_Pop
+R30566 Parallelmove.simpleDest_Pop
+R30594 Parallelmove.app_nil
+R30629 Parallelmove.simpleDest_Pop
+R30594 Parallelmove.app_nil
+R30629 Parallelmove.simpleDest_Pop
+R30733 Parallelmove.noTmp
+R30743 Coq.Lists.List "x ++ y" list_scope
+R30705 Parallelmove.noTmp
+R30715 Coq.Lists.List "x ++ y" list_scope
+R30721 Coq.Lists.List "x :: y" list_scope
+R30697 Parallelmove.Moves
+R30697 Parallelmove.Moves
+R30682 Parallelmove.Move
+R30877 Parallelmove.app_cons
+R30895 Parallelmove.app_cons
+R30877 Parallelmove.app_cons
+R30895 Parallelmove.app_cons
+R31045 Parallelmove.noTmp
+R31052 Parallelmove.StateToMove
+R31030 Parallelmove.stepInv
+R31016 Parallelmove.step
+R31008 Parallelmove.State
+R31008 Parallelmove.State
+R31268 Parallelmove.noTmp_pop
+R31268 Parallelmove.noTmp_pop
+R31268 Parallelmove.noTmp_pop
+R31268 Parallelmove.noTmp_pop
+R31268 Parallelmove.noTmp_pop
+R31268 Parallelmove.noTmp_pop
+R31268 Parallelmove.noTmp_pop
+R31348 Parallelmove.noTmpLast
+R31336 Parallelmove.noTmp
+R31328 Parallelmove.Moves
+R31615 Parallelmove.noTmpLast
+R31592 Parallelmove.noTmpLast
+R31605 Coq.Lists.List "x :: y" list_scope
+R31584 Parallelmove.Moves
+R31573 Parallelmove.Move
+R31821 Parallelmove.noTmpLast
+R31835 Coq.Lists.List "x ++ y" list_scope
+R31789 Parallelmove.noTmpLast
+R31803 Coq.Lists.List "x ++ y" list_scope
+R31809 Coq.Lists.List "x :: y" list_scope
+R31780 Parallelmove.Moves
+R31780 Parallelmove.Moves
+R31765 Parallelmove.Move
+R32031 Parallelmove.app_cons
+R32031 Parallelmove.app_cons
+R32031 Parallelmove.app_cons
+R32031 Parallelmove.app_cons
+R32179 Parallelmove.app_cons
+R32197 Parallelmove.app_cons
+R32179 Parallelmove.app_cons
+R32197 Parallelmove.app_cons
+R32362 Parallelmove.noTmpLast
+R32375 Coq.Lists.List "x :: y" list_scope
+R32345 Parallelmove.noTmpLast
+R32318 Parallelmove.noTmp
+R32328 Coq.Lists.List "x ++ y" list_scope
+R32334 Coq.Lists.List "x :: y" list_scope
+R32309 Parallelmove.Moves
+R32309 Parallelmove.Moves
+R32309 Parallelmove.Moves
+R32291 Parallelmove.Move
+R32523 Parallelmove.app_cons
+R32523 Parallelmove.app_cons
+R32738 Parallelmove.noTmpLast
+R32751 Coq.Lists.List "x ++ y" list_scope
+R32764 Coq.Lists.List "x :: y" list_scope
+R32755 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R32756 Parallelmove.T
+R32767 Coq.Lists.List.nil
+R32701 Parallelmove.noTmpLast
+R32714 Coq.Lists.List "x ++ y" list_scope
+R32725 Coq.Lists.List "x :: y" list_scope
+R32718 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R32728 Coq.Lists.List.nil
+R32692 Parallelmove.Moves
+R32682 Parallelmove.Reg
+R32682 Parallelmove.Reg
+R32853 Parallelmove.app_cons
+R32871 Parallelmove.app_cons
+R32853 Parallelmove.app_cons
+R32871 Parallelmove.app_cons
+R32981 Parallelmove.app_cons
+R32999 Parallelmove.app_cons
+R32981 Parallelmove.app_cons
+R32999 Parallelmove.app_cons
+R33153 Parallelmove.noTmpLast
+R33164 Parallelmove.StateBeing
+R33138 Parallelmove.stepInv
+R33124 Parallelmove.step
+R33116 Parallelmove.State
+R33116 Parallelmove.State
+R33366 Parallelmove.noTmpLast_push
+R33366 Parallelmove.noTmpLast_push
+R33404 Parallelmove.noTmpLast_push
+R33419 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R33404 Parallelmove.noTmpLast_push
+R33419 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R33466 Parallelmove.app_cons
+R33487 Parallelmove.app_cons
+R33503 Parallelmove.noTmpLast_tmpLast
+R33466 Parallelmove.app_cons
+R33487 Parallelmove.app_cons
+R33503 Parallelmove.noTmpLast_tmpLast
+R33529 Parallelmove.noTmpLast_pop
+R33543 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R33529 Parallelmove.noTmpLast_pop
+R33543 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R33673 Parallelmove.noOverlap_aux
+R33693 Coq.Lists.List "x ++ y" list_scope
+R33699 Coq.Lists.List "x :: y" list_scope
+R33635 Parallelmove.noOverlap_aux
+R33654 Coq.Lists.List "x :: y" list_scope
+R33661 Coq.Lists.List "x ++ y" list_scope
+R33628 Parallelmove.Reg
+R33628 Parallelmove.Reg
+R33611 Coq.Lists.List.list
+R33616 Parallelmove.Reg
+R33611 Coq.Lists.List.list
+R33616 Parallelmove.Reg
+R34004 Parallelmove.app_cons
+R34004 Parallelmove.app_cons
+R34025 Parallelmove.noOverlap_auxpop
+R34025 Parallelmove.noOverlap_auxpop
+R34211 Coq.Lists.List.In
+R34217 Parallelmove.getsrc
+R34227 Coq.Lists.List "x :: y" list_scope
+R34234 Coq.Lists.List "x ++ y" list_scope
+R34175 Coq.Lists.List.In
+R34181 Parallelmove.getsrc
+R34192 Coq.Lists.List "x ++ y" list_scope
+R34198 Coq.Lists.List "x :: y" list_scope
+R34168 Parallelmove.Reg
+R34156 Parallelmove.Moves
+R34156 Parallelmove.Moves
+R34141 Parallelmove.Move
+R34576 Parallelmove.noOverlap
+R34590 Coq.Lists.List "x ++ y" list_scope
+R34596 Coq.Lists.List "x :: y" list_scope
+R34544 Parallelmove.noOverlap
+R34557 Coq.Lists.List "x :: y" list_scope
+R34564 Coq.Lists.List "x ++ y" list_scope
+R34536 Parallelmove.Move
+R34524 Parallelmove.Moves
+R34524 Parallelmove.Moves
+R34650 Parallelmove.getdst_add
+R34668 Parallelmove.getdst
+R34685 Parallelmove.getdst_app
+R34650 Parallelmove.getdst_add
+R34668 Parallelmove.getdst
+R34685 Parallelmove.getdst_app
+R34711 Parallelmove.noOverlapaux_insert
+R34711 Parallelmove.noOverlapaux_insert
+R34832 Parallelmove.getsrc
+R34832 Parallelmove.getsrc
+R34852 Parallelmove.Ingetsrc_swap2
+R34867 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R34852 Parallelmove.Ingetsrc_swap2
+R34867 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R35001 Parallelmove.noOverlap
+R35021 Coq.Lists.List "x ++ y" list_scope
+R35016 Coq.Lists.List "x ++ y" list_scope
+R35029 Coq.Lists.List "x :: y" list_scope
+R35032 Coq.Lists.List.nil
+R34969 Parallelmove.noOverlap
+R34983 Coq.Lists.List "x ++ y" list_scope
+R34989 Coq.Lists.List "x :: y" list_scope
+R34961 Parallelmove.Move
+R34949 Parallelmove.Moves
+R34949 Parallelmove.Moves
+R35061 Parallelmove.noOverlap_insert
+R35089 Coq.Lists.List.nil
+R35082 Coq.Lists.List "x ++ y" list_scope
+R35061 Parallelmove.noOverlap_insert
+R35089 Coq.Lists.List.nil
+R35082 Coq.Lists.List "x ++ y" list_scope
+R35105 Parallelmove.app_nil
+R35120 Parallelmove.noOverlap_movFront
+R35105 Parallelmove.app_nil
+R35120 Parallelmove.noOverlap_movFront
+R35241 Parallelmove.noOverlap
+R35254 Coq.Lists.List "x ++ y" list_scope
+R35265 Coq.Lists.List "x :: y" list_scope
+R35258 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R35268 Coq.Lists.List.nil
+R35213 Parallelmove.noOverlap
+R35231 Coq.Lists.List "x :: y" list_scope
+R35224 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R35206 Parallelmove.Reg
+R35206 Parallelmove.Reg
+R35192 Parallelmove.Moves
+R35322 Parallelmove.noOverlap_insert
+R35322 Parallelmove.noOverlap_insert
+R35348 Parallelmove.app_nil
+R35348 Parallelmove.app_nil
+R35465 Parallelmove.noOverlap
+R35483 Coq.Lists.List "x :: y" list_scope
+R35476 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R35428 Parallelmove.noOverlap
+R35441 Coq.Lists.List "x ++ y" list_scope
+R35452 Coq.Lists.List "x :: y" list_scope
+R35445 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R35455 Coq.Lists.List.nil
+R35421 Parallelmove.Reg
+R35421 Parallelmove.Reg
+R35407 Parallelmove.Moves
+R35548 Coq.Init.Logic "x = y" type_scope
+R35543 Coq.Lists.List "x :: y" list_scope
+R35536 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R35557 Coq.Lists.List "x :: y" list_scope
+R35550 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R35563 Coq.Lists.List "x ++ y" list_scope
+R35566 Coq.Lists.List.nil
+R35548 Coq.Init.Logic "x = y" type_scope
+R35543 Coq.Lists.List "x :: y" list_scope
+R35536 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R35557 Coq.Lists.List "x :: y" list_scope
+R35550 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R35563 Coq.Lists.List "x ++ y" list_scope
+R35566 Coq.Lists.List.nil
+R35600 Parallelmove.noOverlap_movFront
+R35600 Parallelmove.noOverlap_movFront
+R35634 Parallelmove.app_nil
+R35634 Parallelmove.app_nil
+R35746 Parallelmove.notemporary
+R35709 Parallelmove.noTmpLast
+R35722 Coq.Lists.List "x ++ y" list_scope
+R35733 Coq.Lists.List "x :: y" list_scope
+R35726 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R35736 Coq.Lists.List.nil
+R35702 Parallelmove.Reg
+R35702 Parallelmove.Reg
+R35688 Parallelmove.Moves
+R35858 Parallelmove.app_cons
+R35858 Parallelmove.app_cons
+R35894 Parallelmove.noTmpLast_pop
+R35894 Parallelmove.noTmpLast_pop
+R36021 Parallelmove.noOverlap_aux
+R36041 Coq.Lists.List "x ++ y" list_scope
+R35998 Parallelmove.noOverlap_aux
+R35976 Parallelmove.noOverlap_aux
+R35969 Parallelmove.Reg
+R36293 Parallelmove.noOverlap_aux
+R36314 Parallelmove.getdst
+R36308 Parallelmove.T
+R36281 Parallelmove.noTmp
+R36275 Parallelmove.Reg
+R36611 Parallelmove.noTmp
+R36621 Coq.Lists.List "x ++ y" list_scope
+R36598 Parallelmove.noTmp
+R36586 Parallelmove.noTmp
+R36812 Parallelmove.noOverlap
+R36838 Coq.Lists.List "x ++ y" list_scope
+R36823 Parallelmove.StateToMove
+R36841 Parallelmove.StateBeing
+R36797 Parallelmove.stepInv
+R36783 Parallelmove.step
+R36774 Parallelmove.State
+R36774 Parallelmove.State
+R37016 Parallelmove.app_nil
+R37084 Parallelmove.noOverlap_Pop
+R37016 Parallelmove.app_nil
+R37016 Parallelmove.app_nil
+R37016 Parallelmove.app_nil
+R37016 Parallelmove.app_nil
+R37016 Parallelmove.app_nil
+R37016 Parallelmove.app_nil
+R37016 Parallelmove.app_nil
+R37016 Parallelmove.app_nil
+R37016 Parallelmove.app_nil
+R37016 Parallelmove.app_nil
+R37084 Parallelmove.noOverlap_Pop
+R37084 Parallelmove.noOverlap_Pop
+R37084 Parallelmove.noOverlap_Pop
+R37084 Parallelmove.noOverlap_Pop
+R37084 Parallelmove.noOverlap_Pop
+R37084 Parallelmove.noOverlap_Pop
+R37119 Parallelmove.noOverlap_movBack
+R37119 Parallelmove.noOverlap_movBack
+R37150 Parallelmove.noOverlap_insert
+R37179 Parallelmove.app_app
+R37194 Parallelmove.noOverlap_movFront
+R37226 Parallelmove.app_cons
+R37244 Parallelmove.app_app
+R37150 Parallelmove.noOverlap_insert
+R37179 Parallelmove.app_app
+R37194 Parallelmove.noOverlap_movFront
+R37226 Parallelmove.app_cons
+R37244 Parallelmove.app_app
+R37293 Parallelmove.app_cons
+R37320 Parallelmove.app_app
+R37360 Parallelmove.noOverlap_movBack0
+R37293 Parallelmove.app_cons
+R37293 Parallelmove.app_cons
+R37293 Parallelmove.app_cons
+R37320 Parallelmove.app_app
+R37320 Parallelmove.app_app
+R37320 Parallelmove.app_app
+R37360 Parallelmove.noOverlap_movBack0
+R37388 Parallelmove.noOverlap
+R37407 Coq.Lists.List "x :: y" list_scope
+R37399 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R37413 Coq.Lists.List "x ++ y" list_scope
+R37430 Coq.Lists.List "x :: y" list_scope
+R37417 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R37448 Parallelmove.noOverlap_Front0
+R37388 Parallelmove.noOverlap
+R37407 Coq.Lists.List "x :: y" list_scope
+R37399 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R37413 Coq.Lists.List "x ++ y" list_scope
+R37430 Coq.Lists.List "x :: y" list_scope
+R37417 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R37448 Parallelmove.noOverlap_Front0
+R37679 Coq.Lists.List "x ++ y" list_scope
+R37691 Coq.Lists.List "x :: y" list_scope
+R37683 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R37694 Coq.Lists.List.nil
+R37679 Coq.Lists.List "x ++ y" list_scope
+R37691 Coq.Lists.List "x :: y" list_scope
+R37683 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R37694 Coq.Lists.List.nil
+R37714 Coq.Lists.List.app_eq_nil
+R37736 Coq.Lists.List "x :: y" list_scope
+R37728 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R37739 Coq.Lists.List.nil
+R37714 Coq.Lists.List.app_eq_nil
+R37736 Coq.Lists.List "x :: y" list_scope
+R37728 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R37739 Coq.Lists.List.nil
+R37897 Parallelmove.noTmpL_diff
+R37897 Parallelmove.noTmpL_diff
+R37982 Parallelmove.noTmP_noOverlap_aux
+R38009 Parallelmove.noTmp_append
+R38041 Parallelmove.app_cons
+R38086 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R38063 Parallelmove.noTmpLast_popBack
+R37982 Parallelmove.noTmP_noOverlap_aux
+R38009 Parallelmove.noTmp_append
+R38041 Parallelmove.app_cons
+R38086 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R38063 Parallelmove.noTmpLast_popBack
+R38113 Parallelmove.app_nil
+R38134 Parallelmove.noOverlap_Pop
+R38148 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R38113 Parallelmove.app_nil
+R38134 Parallelmove.noOverlap_Pop
+R38148 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R38245 Parallelmove.stepInv
+R38230 Parallelmove.stepInv
+R38216 Parallelmove.step
+R38208 Parallelmove.State
+R38208 Parallelmove.State
+R38311 Parallelmove.step_inv_path
+R38311 Parallelmove.step_inv_path
+R38346 Parallelmove.step_inv_simpleDest
+R38346 Parallelmove.step_inv_simpleDest
+R38387 Parallelmove.step_inv_noOverlap
+R38387 Parallelmove.step_inv_noOverlap
+R38427 Parallelmove.step_inv_noTmp
+R38427 Parallelmove.step_inv_noTmp
+R38463 Parallelmove.step_inv_noTmpLast
+R38463 Parallelmove.step_inv_noTmpLast
+R38544 Coq.Init.Logic "~ x" type_scope
+R38547 Coq.Init.Logic "'exists' x : t , p" type_scope
+R38566 Parallelmove.step
+R38558 Parallelmove.State
+R38527 Parallelmove.State
+R38607 Parallelmove.State
+R38598 Parallelmove.State
+R38651 Parallelmove.State
+R38718 Parallelmove.step
+R38710 Parallelmove.State
+R38710 Parallelmove.State
+R38710 Parallelmove.State
+R38775 Parallelmove.stepp_refl
+R38786 Parallelmove.stepp_trans
+R38885 Parallelmove.stepp
+R38869 Parallelmove.stepp
+R38854 Parallelmove.stepp
+R38846 Parallelmove.State
+R38846 Parallelmove.State
+R38846 Parallelmove.State
+R39024 Parallelmove.stepp
+R39009 Parallelmove.step
+R39001 Parallelmove.State
+R39001 Parallelmove.State
+R39130 Parallelmove.stepInv
+R39115 Parallelmove.stepInv
+R39100 Parallelmove.stepp
+R39092 Parallelmove.State
+R39092 Parallelmove.State
+R39229 Parallelmove.step_inv
+R39229 Parallelmove.step_inv
+R39338 Parallelmove.notemporary
+R39301 Parallelmove.noTmpLast
+R39314 Coq.Lists.List "x ++ y" list_scope
+R39325 Coq.Lists.List "x :: y" list_scope
+R39318 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R39328 Coq.Lists.List.nil
+R39453 Parallelmove.noTmpLast
+R39473 Coq.Lists.List "x :: y" list_scope
+R39464 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R39479 Coq.Lists.List "x ++ y" list_scope
+R39490 Coq.Lists.List "x :: y" list_scope
+R39483 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R39493 Coq.Lists.List.nil
+R39453 Parallelmove.noTmpLast
+R39473 Coq.Lists.List "x :: y" list_scope
+R39464 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R39479 Coq.Lists.List "x ++ y" list_scope
+R39490 Coq.Lists.List "x :: y" list_scope
+R39483 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R39493 Coq.Lists.List.nil
+R39553 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R39534 Parallelmove.noTmpLast_pop
+R39553 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R39534 Parallelmove.noTmpLast_pop
+R39694 Parallelmove.NoOverlap
+R39675 Parallelmove.NoOverlap
+R39661 Parallelmove.stepInv
+R39644 Parallelmove.notemporary
+R39630 Parallelmove.step
+R39619 Parallelmove.State
+R39619 Parallelmove.State
+R39941 Parallelmove.app_nil
+R39977 Parallelmove.app_cons
+R40028 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R40002 Parallelmove.noOverlap_Pop
+R39941 Parallelmove.app_nil
+R39941 Parallelmove.app_nil
+R39941 Parallelmove.app_nil
+R39977 Parallelmove.app_cons
+R39977 Parallelmove.app_cons
+R39977 Parallelmove.app_cons
+R40028 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R40002 Parallelmove.noOverlap_Pop
+R40062 Parallelmove.app_nil
+R40087 Coq.Lists.List.app_ass
+R40115 Parallelmove.app_cons
+R40142 Coq.Lists.List.ass_app
+R40157 Parallelmove.noOverlap_movBack
+R40062 Parallelmove.app_nil
+R40062 Parallelmove.app_nil
+R40087 Coq.Lists.List.app_ass
+R40115 Parallelmove.app_cons
+R40115 Parallelmove.app_cons
+R40115 Parallelmove.app_cons
+R40142 Coq.Lists.List.ass_app
+R40157 Parallelmove.noOverlap_movBack
+R40206 Coq.Lists.List.app_ass
+R40243 Parallelmove.app_cons
+R40206 Coq.Lists.List.app_ass
+R40206 Coq.Lists.List.app_ass
+R40206 Coq.Lists.List.app_ass
+R40243 Parallelmove.app_cons
+R40243 Parallelmove.app_cons
+R40243 Parallelmove.app_cons
+R40243 Parallelmove.app_cons
+R40269 Coq.Lists.List.ass_app
+R40284 Parallelmove.noOverlap_insert
+R40310 Coq.Lists.List.app_ass
+R40326 Parallelmove.noOverlap_movFront
+R40269 Coq.Lists.List.ass_app
+R40284 Parallelmove.noOverlap_insert
+R40310 Coq.Lists.List.app_ass
+R40326 Parallelmove.noOverlap_movFront
+R40378 Parallelmove.app_cons
+R40404 Coq.Lists.List.ass_app
+R40420 Parallelmove.noOverlap_movBack0
+R40378 Parallelmove.app_cons
+R40378 Parallelmove.app_cons
+R40378 Parallelmove.app_cons
+R40378 Parallelmove.app_cons
+R40378 Parallelmove.app_cons
+R40404 Coq.Lists.List.ass_app
+R40420 Parallelmove.noOverlap_movBack0
+R40477 Coq.Lists.List.app_ass
+R40477 Coq.Lists.List.app_ass
+R40510 Parallelmove.noOverlap
+R40529 Coq.Lists.List "x :: y" list_scope
+R40521 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R40545 Coq.Lists.List "x ++ y" list_scope
+R40541 Coq.Lists.List "x :: y" list_scope
+R40534 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R40564 Coq.Lists.List "x :: y" list_scope
+R40551 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R40582 Parallelmove.noOverlap_Front0
+R40510 Parallelmove.noOverlap
+R40529 Coq.Lists.List "x :: y" list_scope
+R40521 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R40545 Coq.Lists.List "x ++ y" list_scope
+R40541 Coq.Lists.List "x :: y" list_scope
+R40534 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R40564 Coq.Lists.List "x :: y" list_scope
+R40551 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R40582 Parallelmove.noOverlap_Front0
+R40647 Coq.Lists.List.app_ass
+R40647 Coq.Lists.List.app_ass
+R40647 Coq.Lists.List.app_ass
+R40771 Parallelmove.notemporary
+R40771 Parallelmove.notemporary
+R40795 Parallelmove.noTmpLast
+R40824 Coq.Lists.List "x ++ y" list_scope
+R40820 Coq.Lists.List "x :: y" list_scope
+R40807 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R40838 Coq.Lists.List "x :: y" list_scope
+R40830 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R40841 Coq.Lists.List.nil
+R40866 Parallelmove.noTmpLast_lastnoTmp
+R40900 Coq.Lists.List "x :: y" list_scope
+R40887 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R40795 Parallelmove.noTmpLast
+R40824 Coq.Lists.List "x ++ y" list_scope
+R40820 Coq.Lists.List "x :: y" list_scope
+R40807 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R40838 Coq.Lists.List "x :: y" list_scope
+R40830 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R40841 Coq.Lists.List.nil
+R40866 Parallelmove.noTmpLast_lastnoTmp
+R40900 Coq.Lists.List "x :: y" list_scope
+R40887 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R41070 Parallelmove.noTmP_noOverlap_aux
+R41070 Parallelmove.noTmP_noOverlap_aux
+R41103 Parallelmove.noTmp_append
+R41103 Parallelmove.noTmp_append
+R41131 Parallelmove.noTmpLast
+R41160 Coq.Lists.List "x ++ y" list_scope
+R41156 Coq.Lists.List "x :: y" list_scope
+R41143 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R41174 Coq.Lists.List "x :: y" list_scope
+R41166 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R41177 Coq.Lists.List.nil
+R41231 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R41201 Parallelmove.noTmpLast_popBack
+R41131 Parallelmove.noTmpLast
+R41160 Coq.Lists.List "x ++ y" list_scope
+R41156 Coq.Lists.List "x :: y" list_scope
+R41143 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R41174 Coq.Lists.List "x :: y" list_scope
+R41166 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R41177 Coq.Lists.List.nil
+R41231 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R41201 Parallelmove.noTmpLast_popBack
+R41334 Parallelmove.noOverlap
+R41357 Coq.Lists.List "x ++ y" list_scope
+R41353 Coq.Lists.List "x :: y" list_scope
+R41346 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R41372 Coq.Lists.List "x :: y" list_scope
+R41363 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R41378 Coq.Lists.List "x ++ y" list_scope
+R41391 Coq.Lists.List "x :: y" list_scope
+R41382 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R41394 Coq.Lists.List.nil
+R41334 Parallelmove.noOverlap
+R41357 Coq.Lists.List "x ++ y" list_scope
+R41353 Coq.Lists.List "x :: y" list_scope
+R41346 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R41372 Coq.Lists.List "x :: y" list_scope
+R41363 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R41378 Coq.Lists.List "x ++ y" list_scope
+R41391 Coq.Lists.List "x :: y" list_scope
+R41382 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R41394 Coq.Lists.List.nil
+R41422 Parallelmove.noOverlap
+R41445 Coq.Lists.List "x ++ y" list_scope
+R41441 Coq.Lists.List "x :: y" list_scope
+R41434 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R41453 Coq.Lists.List "x ++ y" list_scope
+R41466 Coq.Lists.List "x :: y" list_scope
+R41457 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R41469 Coq.Lists.List.nil
+R41486 Parallelmove.noOverlap_Pop
+R41500 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R41422 Parallelmove.noOverlap
+R41445 Coq.Lists.List "x ++ y" list_scope
+R41441 Coq.Lists.List "x :: y" list_scope
+R41434 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R41453 Coq.Lists.List "x ++ y" list_scope
+R41466 Coq.Lists.List "x :: y" list_scope
+R41457 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R41469 Coq.Lists.List.nil
+R41486 Parallelmove.noOverlap_Pop
+R41500 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R41536 Parallelmove.app_cons
+R41553 Parallelmove.noOverlap_Pop
+R41536 Parallelmove.app_cons
+R41536 Parallelmove.app_cons
+R41536 Parallelmove.app_cons
+R41553 Parallelmove.noOverlap_Pop
+R41694 Coq.Lists.List.In
+R41700 Parallelmove.getdst
+R41723 Coq.Lists.List "x ++ y" list_scope
+R41708 Parallelmove.StateToMove
+R41726 Parallelmove.StateBeing
+R41641 Coq.Lists.List.In
+R41647 Parallelmove.getdst
+R41670 Coq.Lists.List "x ++ y" list_scope
+R41655 Parallelmove.StateToMove
+R41673 Parallelmove.StateBeing
+R41626 Parallelmove.step
+R41615 Parallelmove.State
+R41615 Parallelmove.State
+R41853 Parallelmove.getdst_app
+R41889 Parallelmove.app_nil
+R41913 Coq.Lists.List.in_or_app
+R41853 Parallelmove.getdst_app
+R41853 Parallelmove.getdst_app
+R41853 Parallelmove.getdst_app
+R41853 Parallelmove.getdst_app
+R41853 Parallelmove.getdst_app
+R41889 Parallelmove.app_nil
+R41889 Parallelmove.app_nil
+R41889 Parallelmove.app_nil
+R41913 Coq.Lists.List.in_or_app
+R41930 Coq.Lists.List.in_app_or
+R41953 Parallelmove.getdst
+R41941 Parallelmove.getdst
+R41930 Coq.Lists.List.in_app_or
+R41953 Parallelmove.getdst
+R41941 Parallelmove.getdst
+R42030 Parallelmove.getdst_app
+R42090 Parallelmove.app_nil
+R42113 Coq.Lists.List.in_or_app
+R42030 Parallelmove.getdst_app
+R42030 Parallelmove.getdst_app
+R42030 Parallelmove.getdst_app
+R42030 Parallelmove.getdst_app
+R42030 Parallelmove.getdst_app
+R42090 Parallelmove.app_nil
+R42090 Parallelmove.app_nil
+R42113 Coq.Lists.List.in_or_app
+R42130 Coq.Lists.List.in_app_or
+R42169 Coq.Lists.List "x :: y" list_scope
+R42172 Coq.Lists.List.nil
+R42151 Coq.Lists.List "x ++ y" list_scope
+R42141 Parallelmove.getdst
+R42154 Parallelmove.getdst
+R42130 Coq.Lists.List.in_app_or
+R42169 Coq.Lists.List "x :: y" list_scope
+R42172 Coq.Lists.List.nil
+R42151 Coq.Lists.List "x ++ y" list_scope
+R42141 Parallelmove.getdst
+R42154 Parallelmove.getdst
+R42200 Coq.Lists.List.in_app_or
+R42223 Parallelmove.getdst
+R42211 Parallelmove.getdst
+R42200 Coq.Lists.List.in_app_or
+R42223 Parallelmove.getdst
+R42211 Parallelmove.getdst
+R42375 Parallelmove.getdst_app
+R42411 Parallelmove.app_nil
+R42435 Coq.Lists.List.in_or_app
+R42375 Parallelmove.getdst_app
+R42375 Parallelmove.getdst_app
+R42375 Parallelmove.getdst_app
+R42375 Parallelmove.getdst_app
+R42375 Parallelmove.getdst_app
+R42411 Parallelmove.app_nil
+R42435 Coq.Lists.List.in_or_app
+R42452 Coq.Lists.List.in_app_or
+R42491 Coq.Lists.List "x :: y" list_scope
+R42497 Coq.Lists.List "x :: y" list_scope
+R42500 Parallelmove.getdst
+R42473 Coq.Lists.List "x ++ y" list_scope
+R42463 Parallelmove.getdst
+R42476 Parallelmove.getdst
+R42452 Coq.Lists.List.in_app_or
+R42491 Coq.Lists.List "x :: y" list_scope
+R42497 Coq.Lists.List "x :: y" list_scope
+R42500 Parallelmove.getdst
+R42473 Coq.Lists.List "x ++ y" list_scope
+R42463 Parallelmove.getdst
+R42476 Parallelmove.getdst
+R42535 Coq.Lists.List.in_app_or
+R42558 Parallelmove.getdst
+R42546 Parallelmove.getdst
+R42535 Coq.Lists.List.in_app_or
+R42558 Parallelmove.getdst
+R42546 Parallelmove.getdst
+R42598 Coq.Lists.List.in_or_app
+R42598 Coq.Lists.List.in_or_app
+R42639 Coq.Lists.List.in_or_app
+R42639 Coq.Lists.List.in_or_app
+R42711 Coq.Lists.List.in_or_app
+R42711 Coq.Lists.List.in_or_app
+R42848 Parallelmove.getdst_app
+R42848 Parallelmove.getdst_app
+R42848 Parallelmove.getdst_app
+R42848 Parallelmove.getdst_app
+R42848 Parallelmove.getdst_app
+R42848 Parallelmove.getdst_app
+R42895 Parallelmove.getdst_app
+R42895 Parallelmove.getdst_app
+R42895 Parallelmove.getdst_app
+R42895 Parallelmove.getdst_app
+R42895 Parallelmove.getdst_app
+R42895 Parallelmove.getdst_app
+R42929 Coq.Lists.List.in_app_or
+R42960 Coq.Lists.List "x ++ y" list_scope
+R42951 Parallelmove.getdst
+R42967 Coq.Lists.List "x :: y" list_scope
+R42970 Coq.Lists.List.nil
+R42940 Parallelmove.getdst
+R43000 Coq.Lists.List.in_or_app
+R42929 Coq.Lists.List.in_app_or
+R42960 Coq.Lists.List "x ++ y" list_scope
+R42951 Parallelmove.getdst
+R42967 Coq.Lists.List "x :: y" list_scope
+R42970 Coq.Lists.List.nil
+R42940 Parallelmove.getdst
+R43000 Coq.Lists.List.in_or_app
+R43000 Coq.Lists.List.in_or_app
+R43023 Coq.Lists.List.in_app_or
+R43048 Coq.Lists.List "x :: y" list_scope
+R43051 Coq.Lists.List.nil
+R43034 Parallelmove.getdst
+R43023 Coq.Lists.List.in_app_or
+R43048 Coq.Lists.List "x :: y" list_scope
+R43051 Coq.Lists.List.nil
+R43034 Parallelmove.getdst
+R43100 Coq.Lists.List.in_or_app
+R43100 Coq.Lists.List.in_or_app
+R43160 Coq.Lists.List.in_or_app
+R43160 Coq.Lists.List.in_or_app
+R43213 Parallelmove.app_nil
+R43239 Parallelmove.getdst_app
+R43213 Parallelmove.app_nil
+R43239 Parallelmove.getdst_app
+R43239 Parallelmove.getdst_app
+R43273 Coq.Lists.List.in_or_app
+R43273 Coq.Lists.List.in_or_app
+R43386 Parallelmove.sameExec
+R43371 Parallelmove.stepInv
+R43356 Parallelmove.stepp
+R43348 Parallelmove.State
+R43348 Parallelmove.State
+R43493 Parallelmove.sameExec
+R43526 Parallelmove.step_sameExec
+R43493 Parallelmove.sameExec
+R43526 Parallelmove.step_sameExec
+R43652 Parallelmove.step_inv
+R43652 Parallelmove.step_inv
+R43726 Parallelmove.getdst_app
+R43753 Coq.Lists.List.in_or_app
+R43726 Parallelmove.getdst_app
+R43726 Parallelmove.getdst_app
+R43726 Parallelmove.getdst_app
+R43726 Parallelmove.getdst_app
+R43726 Parallelmove.getdst_app
+R43726 Parallelmove.getdst_app
+R43726 Parallelmove.getdst_app
+R43753 Coq.Lists.List.in_or_app
+R43771 Coq.Lists.List.in_app_or
+R43864 Coq.Lists.List "x ++ y" list_scope
+R43840 Parallelmove.getdst
+R43848 Parallelmove.StateToMove
+R43867 Parallelmove.getdst
+R43875 Parallelmove.StateBeing
+R43809 Coq.Lists.List "x ++ y" list_scope
+R43785 Parallelmove.getdst
+R43793 Parallelmove.StateToMove
+R43812 Parallelmove.getdst
+R43820 Parallelmove.StateBeing
+R43771 Coq.Lists.List.in_app_or
+R43864 Coq.Lists.List "x ++ y" list_scope
+R43840 Parallelmove.getdst
+R43848 Parallelmove.StateToMove
+R43867 Parallelmove.getdst
+R43875 Parallelmove.StateBeing
+R43809 Coq.Lists.List "x ++ y" list_scope
+R43785 Parallelmove.getdst
+R43793 Parallelmove.StateToMove
+R43812 Parallelmove.getdst
+R43820 Parallelmove.StateBeing
+R43920 Parallelmove.step_inv_getdst
+R43962 Parallelmove.getdst_app
+R43920 Parallelmove.step_inv_getdst
+R43962 Parallelmove.getdst_app
+R43962 Parallelmove.getdst_app
+R43962 Parallelmove.getdst_app
+R44058 Parallelmove.getdst_app
+R44085 Coq.Lists.List.in_or_app
+R44058 Parallelmove.getdst_app
+R44058 Parallelmove.getdst_app
+R44058 Parallelmove.getdst_app
+R44058 Parallelmove.getdst_app
+R44058 Parallelmove.getdst_app
+R44058 Parallelmove.getdst_app
+R44058 Parallelmove.getdst_app
+R44085 Coq.Lists.List.in_or_app
+R44103 Coq.Lists.List.in_app_or
+R44196 Coq.Lists.List "x ++ y" list_scope
+R44172 Parallelmove.getdst
+R44180 Parallelmove.StateToMove
+R44199 Parallelmove.getdst
+R44207 Parallelmove.StateBeing
+R44141 Coq.Lists.List "x ++ y" list_scope
+R44117 Parallelmove.getdst
+R44125 Parallelmove.StateToMove
+R44144 Parallelmove.getdst
+R44152 Parallelmove.StateBeing
+R44103 Coq.Lists.List.in_app_or
+R44196 Coq.Lists.List "x ++ y" list_scope
+R44172 Parallelmove.getdst
+R44180 Parallelmove.StateToMove
+R44199 Parallelmove.getdst
+R44207 Parallelmove.StateBeing
+R44141 Coq.Lists.List "x ++ y" list_scope
+R44117 Parallelmove.getdst
+R44125 Parallelmove.StateToMove
+R44144 Parallelmove.getdst
+R44152 Parallelmove.StateBeing
+R44252 Parallelmove.step_inv_getdst
+R44294 Parallelmove.getdst_app
+R44252 Parallelmove.step_inv_getdst
+R44294 Parallelmove.getdst_app
+R44294 Parallelmove.getdst_app
+R44294 Parallelmove.getdst_app
+R44370 Parallelmove.State
+R44361 Parallelmove.State
+R44466 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R44470 Coq.Lists.List.nil
+R44444 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R44452 Coq.Lists.List "x :: y" list_scope
+R44445 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R44458 Coq.Lists.List.nil
+R44429 Parallelmove.Moves
+R44429 Parallelmove.Moves
+R44417 Parallelmove.Reg
+R44577 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R44588 Coq.Lists.List "x :: y" list_scope
+R44581 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R44591 Coq.Lists.List.nil
+R44555 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R44563 Coq.Lists.List "x :: y" list_scope
+R44556 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R44569 Coq.Lists.List.nil
+R44540 Coq.Init.Logic "x <> y" type_scope
+R44527 Parallelmove.Reg
+R44527 Parallelmove.Reg
+R44513 Parallelmove.Moves
+R44513 Parallelmove.Moves
+R44746 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R44750 Coq.Lists.List "x ++ y" list_scope
+R44764 Coq.Lists.List "x :: y" list_scope
+R44757 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R44775 Coq.Lists.List "x :: y" list_scope
+R44768 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R44700 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R44704 Coq.Lists.List "x ++ y" list_scope
+R44715 Coq.Lists.List "x :: y" list_scope
+R44708 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R44730 Coq.Lists.List "x :: y" list_scope
+R44723 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R44666 Parallelmove.noRead
+R44655 Parallelmove.Reg
+R44655 Parallelmove.Reg
+R44655 Parallelmove.Reg
+R44639 Parallelmove.Moves
+R44639 Parallelmove.Moves
+R44639 Parallelmove.Moves
+R44639 Parallelmove.Moves
+R44937 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R44943 Coq.Lists.List "x ++ y" list_scope
+R44957 Coq.Lists.List "x :: y" list_scope
+R44947 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R44948 Parallelmove.T
+R44960 Coq.Lists.List.nil
+R44974 Coq.Lists.List "x :: y" list_scope
+R44966 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R44989 Coq.Lists.List "x :: y" list_scope
+R44978 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R44983 Parallelmove.T
+R44887 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R44899 Coq.Lists.List "x :: y" list_scope
+R44891 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R44905 Coq.Lists.List "x ++ y" list_scope
+R44917 Coq.Lists.List "x :: y" list_scope
+R44909 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R44920 Coq.Lists.List.nil
+R44853 Parallelmove.noRead
+R44842 Parallelmove.Reg
+R44842 Parallelmove.Reg
+R44842 Parallelmove.Reg
+R44825 Parallelmove.Moves
+R44825 Parallelmove.Moves
+R44825 Parallelmove.Moves
+R45173 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R45179 Coq.Lists.List "x ++ y" list_scope
+R45192 Coq.Lists.List "x :: y" list_scope
+R45183 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R45195 Coq.Lists.List.nil
+R45210 Coq.Lists.List "x :: y" list_scope
+R45201 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R45121 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R45134 Coq.Lists.List "x :: y" list_scope
+R45125 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R45140 Coq.Lists.List "x ++ y" list_scope
+R45153 Coq.Lists.List "x :: y" list_scope
+R45144 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R45156 Coq.Lists.List.nil
+R45084 Locations.diff
+R45064 Parallelmove.noRead
+R45053 Parallelmove.Reg
+R45053 Parallelmove.Reg
+R45053 Parallelmove.Reg
+R45053 Parallelmove.Reg
+R45031 Parallelmove.Moves
+R45031 Parallelmove.Moves
+R45031 Parallelmove.Moves
+R45318 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R45322 Coq.Lists.List.nil
+R45334 Coq.Lists.List "x :: y" list_scope
+R45327 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R45296 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R45307 Coq.Lists.List "x :: y" list_scope
+R45300 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R45310 Coq.Lists.List.nil
+R45275 Parallelmove.noRead
+R45264 Parallelmove.Reg
+R45264 Parallelmove.Reg
+R45250 Parallelmove.Moves
+R45250 Parallelmove.Moves
+R45355 Parallelmove.dstep_nop
+R45365 Parallelmove.dstep_start
+R45377 Parallelmove.dstep_push
+R45403 Parallelmove.dstep_pop_loop
+R45418 Parallelmove.dstep_pop
+R45428 Parallelmove.dstep_last
+R45516 Parallelmove.stepp
+R45501 Parallelmove.stepInv
+R45486 Parallelmove.dstep
+R45478 Parallelmove.State
+R45478 Parallelmove.State
+R45599 Parallelmove.stepp
+R45636 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R45640 Coq.Lists.List.nil
+R45605 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R45610 Coq.Lists.List "x ++ y" list_scope
+R45606 Coq.Lists.List.nil
+R45621 Coq.Lists.List "x :: y" list_scope
+R45614 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R45628 Coq.Lists.List.nil
+R45656 Parallelmove.step_stepp
+R45676 Parallelmove.step_nop
+R45687 Coq.Lists.List.nil
+R45599 Parallelmove.stepp
+R45636 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R45640 Coq.Lists.List.nil
+R45605 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R45610 Coq.Lists.List "x ++ y" list_scope
+R45606 Coq.Lists.List.nil
+R45621 Coq.Lists.List "x :: y" list_scope
+R45614 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R45628 Coq.Lists.List.nil
+R45656 Parallelmove.step_stepp
+R45676 Parallelmove.step_nop
+R45687 Coq.Lists.List.nil
+R45703 Parallelmove.stepp
+R45740 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R45751 Coq.Lists.List "x :: y" list_scope
+R45744 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R45754 Coq.Lists.List.nil
+R45709 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R45714 Coq.Lists.List "x ++ y" list_scope
+R45710 Coq.Lists.List.nil
+R45725 Coq.Lists.List "x :: y" list_scope
+R45718 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R45732 Coq.Lists.List.nil
+R45771 Parallelmove.step_stepp
+R45790 Parallelmove.step_start
+R45801 Coq.Lists.List.nil
+R45703 Parallelmove.stepp
+R45740 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R45751 Coq.Lists.List "x :: y" list_scope
+R45744 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R45754 Coq.Lists.List.nil
+R45709 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R45714 Coq.Lists.List "x ++ y" list_scope
+R45710 Coq.Lists.List.nil
+R45725 Coq.Lists.List "x :: y" list_scope
+R45718 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R45732 Coq.Lists.List.nil
+R45771 Parallelmove.step_stepp
+R45790 Parallelmove.step_start
+R45801 Coq.Lists.List.nil
+R45819 Parallelmove.stepp_trans
+R45942 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R45948 Coq.Lists.List "x ++ y" list_scope
+R45962 Coq.Lists.List "x :: y" list_scope
+R45952 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R45953 Parallelmove.T
+R45965 Coq.Lists.List.nil
+R45979 Coq.Lists.List "x :: y" list_scope
+R45971 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R45994 Coq.Lists.List "x :: y" list_scope
+R45983 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R45988 Parallelmove.T
+R45880 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R45892 Coq.Lists.List "x :: y" list_scope
+R45884 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R45898 Coq.Lists.List "x ++ y" list_scope
+R45912 Coq.Lists.List "x :: y" list_scope
+R45902 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R45903 Parallelmove.T
+R45915 Coq.Lists.List.nil
+R45933 Coq.Lists.List "x :: y" list_scope
+R45922 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R45927 Parallelmove.T
+R45834 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R45846 Coq.Lists.List "x :: y" list_scope
+R45838 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R45852 Coq.Lists.List "x ++ y" list_scope
+R45864 Coq.Lists.List "x :: y" list_scope
+R45856 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R45867 Coq.Lists.List.nil
+R45819 Parallelmove.stepp_trans
+R45942 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R45948 Coq.Lists.List "x ++ y" list_scope
+R45962 Coq.Lists.List "x :: y" list_scope
+R45952 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R45953 Parallelmove.T
+R45965 Coq.Lists.List.nil
+R45979 Coq.Lists.List "x :: y" list_scope
+R45971 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R45994 Coq.Lists.List "x :: y" list_scope
+R45983 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R45988 Parallelmove.T
+R45880 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R45892 Coq.Lists.List "x :: y" list_scope
+R45884 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R45898 Coq.Lists.List "x ++ y" list_scope
+R45912 Coq.Lists.List "x :: y" list_scope
+R45902 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R45903 Parallelmove.T
+R45915 Coq.Lists.List.nil
+R45933 Coq.Lists.List "x :: y" list_scope
+R45922 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R45927 Parallelmove.T
+R45834 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R45846 Coq.Lists.List "x :: y" list_scope
+R45838 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R45852 Coq.Lists.List "x ++ y" list_scope
+R45864 Coq.Lists.List "x :: y" list_scope
+R45856 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R45867 Coq.Lists.List.nil
+R46015 Parallelmove.step_stepp
+R46033 Parallelmove.step_pop
+R46015 Parallelmove.step_stepp
+R46033 Parallelmove.step_pop
+R46167 Coq.Lists.List "x ++ y" list_scope
+R46179 Coq.Lists.List "x :: y" list_scope
+R46171 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R46182 Coq.Lists.List.nil
+R46167 Coq.Lists.List "x ++ y" list_scope
+R46179 Coq.Lists.List "x :: y" list_scope
+R46171 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R46182 Coq.Lists.List.nil
+R46306 Parallelmove.stepInv
+R46291 Parallelmove.stepInv
+R46276 Parallelmove.dstep
+R46268 Parallelmove.State
+R46268 Parallelmove.State
+R46340 Parallelmove.stepp_inv
+R46340 Parallelmove.stepp_inv
+R46370 Parallelmove.dstep_step
+R46370 Parallelmove.dstep_step
+R46423 Parallelmove.State
+R46414 Parallelmove.State
+R46468 Parallelmove.State
+R46537 Parallelmove.dstep
+R46529 Parallelmove.State
+R46529 Parallelmove.State
+R46529 Parallelmove.State
+R46597 Parallelmove.dstepp_refl
+R46609 Parallelmove.dstepp_trans
+R46702 Parallelmove.stepp
+R46685 Parallelmove.dstepp
+R46671 Parallelmove.stepInv
+R46663 Parallelmove.State
+R46663 Parallelmove.State
+R46786 Parallelmove.stepp_transitive
+R46786 Parallelmove.stepp_transitive
+R46826 Parallelmove.dstep_step
+R46826 Parallelmove.dstep_step
+R46871 Parallelmove.dstep_inv
+R46871 Parallelmove.dstep_inv
+R46981 Parallelmove.sameExec
+R46966 Parallelmove.stepInv
+R46950 Parallelmove.dstepp
+R46942 Parallelmove.State
+R46942 Parallelmove.State
+R47018 Parallelmove.stepp_sameExec
+R47018 Parallelmove.stepp_sameExec
+R47046 Parallelmove.dstepp_stepp
+R47046 Parallelmove.dstepp_stepp
+R47141 Coq.Init.Datatypes.option
+R47161 Coq.Init.Datatypes "x * y" type_scope
+R47156 Coq.Init.Datatypes "x * y" type_scope
+R47150 Parallelmove.Moves
+R47158 Parallelmove.Reg
+R47165 Parallelmove.Moves
+R47122 Parallelmove.Reg
+R47110 Parallelmove.Moves
+R47199 Coq.Lists.List "x :: y" list_scope
+R47192 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R47221 Parallelmove.diff_dec
+R47246 Coq.Init.Specif.right
+R47257 Coq.Init.Datatypes.Some
+R47262 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R47263 Coq.Lists.List.nil
+R47285 Coq.Init.Specif.left
+R47347 Coq.Init.Datatypes.Some
+R47353 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R47370 Coq.Init.Datatypes.Some
+R47375 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R47383 Coq.Lists.List "x :: y" list_scope
+R47376 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R47411 Coq.Init.Datatypes.None
+R47419 Coq.Init.Datatypes.None
+R47451 Coq.Lists.List.nil
+R47458 Coq.Init.Datatypes.None
+R47122 Parallelmove.Reg
+R47110 Parallelmove.Moves
+R47527 Coq.Init.Datatypes.option
+R47547 Coq.Init.Datatypes "x * y" type_scope
+R47542 Coq.Init.Datatypes "x * y" type_scope
+R47536 Parallelmove.Moves
+R47544 Parallelmove.Reg
+R47551 Parallelmove.Moves
+R47508 Parallelmove.Reg
+R47496 Parallelmove.Moves
+R47585 Coq.Lists.List "x :: y" list_scope
+R47578 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R47607 Locations.eq
+R47630 Coq.Init.Specif.left
+R47640 Coq.Init.Datatypes.Some
+R47645 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R47646 Coq.Lists.List.nil
+R47668 Coq.Init.Specif.right
+R47730 Coq.Init.Datatypes.Some
+R47736 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R47753 Coq.Init.Datatypes.Some
+R47758 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R47766 Coq.Lists.List "x :: y" list_scope
+R47759 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R47794 Coq.Init.Datatypes.None
+R47802 Coq.Init.Datatypes.None
+R47834 Coq.Lists.List.nil
+R47841 Coq.Init.Datatypes.None
+R47508 Parallelmove.Reg
+R47496 Parallelmove.Moves
+R47870 Parallelmove.Move
+R47878 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R47879 Locations.R
+R47881 Locations.IT1
+R47886 Locations.R
+R47888 Locations.IT1
+R47924 Parallelmove.Move
+R47915 Parallelmove.Moves
+R47948 Coq.Lists.List.nil
+R47955 Parallelmove.def
+R47978 Coq.Lists.List "x :: y" list_scope
+R47981 Coq.Lists.List.nil
+R48009 Coq.Lists.List "x :: y" list_scope
+R47915 Parallelmove.Moves
+R48074 Parallelmove.Moves
+R48065 Parallelmove.Moves
+R48100 Coq.Lists.List.nil
+R48107 Coq.Lists.List.nil
+R48118 Coq.Lists.List "x :: y" list_scope
+R48121 Coq.Lists.List.nil
+R48128 Coq.Lists.List.nil
+R48139 Coq.Lists.List "x :: y" list_scope
+R48153 Coq.Lists.List "x :: y" list_scope
+R48065 Parallelmove.Moves
+R48221 Parallelmove.Moves
+R48212 Parallelmove.Moves
+R48247 Coq.Lists.List.nil
+R48254 Coq.Lists.List.nil
+R48264 Coq.Lists.List "x :: y" list_scope
+R48267 Coq.Lists.List.nil
+R48295 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R48314 Coq.Lists.List "x :: y" list_scope
+R48305 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R48306 Parallelmove.T
+R48317 Coq.Lists.List.nil
+R48331 Coq.Lists.List "x :: y" list_scope
+R48344 Coq.Lists.List "x :: y" list_scope
+R48212 Parallelmove.Moves
+R48407 Coq.Init.Logic.refl_equal
+R48491 Parallelmove.State
+R48522 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R48523 Coq.Lists.List.nil
+R48528 Coq.Lists.List.nil
+R48548 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R48556 Coq.Lists.List "x :: y" list_scope
+R48549 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R48563 Coq.Lists.List.nil
+R48588 Parallelmove.diff_dec
+R48616 Coq.Init.Specif.right
+R48627 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R48632 Coq.Lists.List.nil
+R48651 Coq.Init.Specif.left
+R48661 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R48673 Coq.Lists.List "x :: y" list_scope
+R48666 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R48676 Coq.Lists.List.nil
+R48702 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R48713 Coq.Lists.List "x :: y" list_scope
+R48706 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R48739 Parallelmove.split_move
+R48769 Coq.Init.Datatypes.Some
+R48775 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R48803 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R48807 Coq.Lists.List "x ++ y" list_scope
+R48821 Coq.Lists.List "x :: y" list_scope
+R48814 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R48832 Coq.Lists.List "x :: y" list_scope
+R48825 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R48853 Coq.Init.Datatypes.None
+R48902 Coq.Lists.List.nil
+R48909 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R48913 Coq.Lists.List.nil
+R48925 Coq.Lists.List "x :: y" list_scope
+R48918 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R48976 Parallelmove.diff_dec
+R48988 Coq.Init.Datatypes.fst
+R48993 Parallelmove.last
+R49027 Coq.Init.Specif.right
+R49060 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R49064 Parallelmove.replace_last_s
+R49089 Coq.Lists.List "x :: y" list_scope
+R49082 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R49102 Coq.Lists.List "x :: y" list_scope
+R49093 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R49097 Parallelmove.T
+R49130 Coq.Init.Specif.left
+R49140 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R49154 Coq.Lists.List "x :: y" list_scope
+R49147 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R48482 Parallelmove.State
+R49253 Parallelmove.State
+R49284 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R49285 Coq.Lists.List.nil
+R49290 Coq.Lists.List.nil
+R49310 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R49318 Coq.Lists.List "x :: y" list_scope
+R49311 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R49325 Coq.Lists.List.nil
+R49350 Locations.eq
+R49376 Coq.Init.Specif.left
+R49386 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R49391 Coq.Lists.List.nil
+R49410 Coq.Init.Specif.right
+R49421 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R49433 Coq.Lists.List "x :: y" list_scope
+R49426 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R49436 Coq.Lists.List.nil
+R49462 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R49473 Coq.Lists.List "x :: y" list_scope
+R49466 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R49499 Parallelmove.split_move
+R49529 Coq.Init.Datatypes.Some
+R49535 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R49563 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R49567 Coq.Lists.List "x ++ y" list_scope
+R49581 Coq.Lists.List "x :: y" list_scope
+R49574 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R49592 Coq.Lists.List "x :: y" list_scope
+R49585 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R49613 Coq.Init.Datatypes.None
+R49662 Coq.Lists.List.nil
+R49669 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R49673 Coq.Lists.List.nil
+R49685 Coq.Lists.List "x :: y" list_scope
+R49678 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R49736 Locations.eq
+R49746 Coq.Init.Datatypes.fst
+R49751 Parallelmove.last
+R49785 Coq.Init.Specif.left
+R49817 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R49821 Parallelmove.replace_last_s
+R49846 Coq.Lists.List "x :: y" list_scope
+R49839 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R49859 Coq.Lists.List "x :: y" list_scope
+R49850 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R49854 Parallelmove.T
+R49887 Coq.Init.Specif.right
+R49898 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R49912 Coq.Lists.List "x :: y" list_scope
+R49905 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R49244 Parallelmove.State
+R50037 Coq.Init.Logic "x = y" type_scope
+R50032 Coq.Lists.List "x :: y" list_scope
+R50062 Coq.Lists.List "x ++ y" list_scope
+R50039 Parallelmove.head_but_last
+R50056 Coq.Lists.List "x :: y" list_scope
+R50080 Coq.Lists.List "x :: y" list_scope
+R50066 Parallelmove.last
+R50074 Coq.Lists.List "x :: y" list_scope
+R50083 Coq.Lists.List.nil
+R50021 Parallelmove.Move
+R50009 Parallelmove.Moves
+R50296 Parallelmove.noRead
+R50273 Coq.Init.Logic "x = y" type_scope
+R50258 Parallelmove.split_move
+R50275 Coq.Init.Datatypes.Some
+R50280 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R50221 Parallelmove.noOverlap
+R50234 Coq.Lists.List "x ++ y" list_scope
+R50245 Coq.Lists.List "x :: y" list_scope
+R50238 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R50248 Coq.Lists.List.nil
+R50214 Parallelmove.Reg
+R50214 Parallelmove.Reg
+R50214 Parallelmove.Reg
+R50198 Parallelmove.Moves
+R50198 Parallelmove.Moves
+R50198 Parallelmove.Moves
+R50411 Locations.eq
+R50411 Locations.eq
+R50473 Parallelmove.split_move
+R50473 Parallelmove.split_move
+R50567 Parallelmove.noOverlap
+R50592 Coq.Lists.List "x ++ y" list_scope
+R50588 Coq.Lists.List "x :: y" list_scope
+R50579 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R50605 Coq.Lists.List "x :: y" list_scope
+R50598 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R50608 Coq.Lists.List.nil
+R50567 Parallelmove.noOverlap
+R50592 Coq.Lists.List "x ++ y" list_scope
+R50588 Coq.Lists.List "x :: y" list_scope
+R50579 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R50605 Coq.Lists.List "x :: y" list_scope
+R50598 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R50608 Coq.Lists.List.nil
+R50634 Parallelmove.noOverlap
+R50652 Coq.Lists.List "x :: y" list_scope
+R50645 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R50665 Coq.Lists.List "x :: y" list_scope
+R50656 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R50634 Parallelmove.noOverlap
+R50652 Coq.Lists.List "x :: y" list_scope
+R50645 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R50665 Coq.Lists.List "x :: y" list_scope
+R50656 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R50680 Parallelmove.noOverlap_Front0
+R50680 Parallelmove.noOverlap_Front0
+R50924 Coq.Init.Logic "x = y" type_scope
+R50924 Coq.Init.Logic "x = y" type_scope
+R50942 Locations.diff_sym
+R50942 Locations.diff_sym
+R51022 Parallelmove.noOverlap_pop
+R51036 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R51022 Parallelmove.noOverlap_pop
+R51036 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R51221 Coq.Init.Logic "x = y" type_scope
+R51226 Coq.Lists.List "x ++ y" list_scope
+R51237 Coq.Lists.List "x :: y" list_scope
+R51230 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R51196 Coq.Init.Logic "x = y" type_scope
+R51181 Parallelmove.split_move
+R51198 Coq.Init.Datatypes.Some
+R51203 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R51144 Parallelmove.noOverlap
+R51157 Coq.Lists.List "x ++ y" list_scope
+R51168 Coq.Lists.List "x :: y" list_scope
+R51161 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R51171 Coq.Lists.List.nil
+R51137 Parallelmove.Reg
+R51137 Parallelmove.Reg
+R51137 Parallelmove.Reg
+R51121 Parallelmove.Moves
+R51121 Parallelmove.Moves
+R51121 Parallelmove.Moves
+R51355 Parallelmove.diff_dec
+R51355 Parallelmove.diff_dec
+R51385 Locations.eq
+R51385 Locations.eq
+R51414 Locations.diff
+R51414 Locations.diff
+R51453 Locations.same_not_diff
+R51453 Locations.same_not_diff
+R51480 Parallelmove.split_move
+R51480 Parallelmove.split_move
+R51568 Parallelmove.app_cons
+R51568 Parallelmove.app_cons
+R51637 Parallelmove.noOverlap_pop
+R51651 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R51637 Parallelmove.noOverlap_pop
+R51651 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R51674 Locations.eq
+R51674 Locations.eq
+R51742 Parallelmove.noOverlap_aux
+R51760 Parallelmove.getdst
+R51775 Coq.Lists.List "x :: y" list_scope
+R51768 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R51778 Coq.Lists.List.nil
+R51742 Parallelmove.noOverlap_aux
+R51760 Parallelmove.getdst
+R51775 Coq.Lists.List "x :: y" list_scope
+R51768 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R51778 Coq.Lists.List.nil
+R51841 Coq.Init.Logic "x = y" type_scope
+R51841 Coq.Init.Logic "x = y" type_scope
+R51862 Locations.diff
+R51890 Locations.diff_sym
+R51862 Locations.diff
+R51890 Locations.diff_sym
+R51935 Parallelmove.app_cons
+R51935 Parallelmove.app_cons
+R51960 Parallelmove.noOverlap
+R51973 Coq.Lists.List "x ++ y" list_scope
+R51986 Coq.Lists.List "x :: y" list_scope
+R51977 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R51997 Coq.Lists.List "x :: y" list_scope
+R51990 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R52000 Coq.Lists.List.nil
+R52022 Parallelmove.noOverlap_insert
+R51960 Parallelmove.noOverlap
+R51973 Coq.Lists.List "x ++ y" list_scope
+R51986 Coq.Lists.List "x :: y" list_scope
+R51977 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R51997 Coq.Lists.List "x :: y" list_scope
+R51990 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R52000 Coq.Lists.List.nil
+R52022 Parallelmove.noOverlap_insert
+R52022 Parallelmove.noOverlap_insert
+R52062 Parallelmove.noOverlap
+R52082 Coq.Lists.List "x :: y" list_scope
+R52073 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R52093 Coq.Lists.List "x :: y" list_scope
+R52086 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R52096 Coq.Lists.List.nil
+R52062 Parallelmove.noOverlap
+R52082 Coq.Lists.List "x :: y" list_scope
+R52073 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R52093 Coq.Lists.List "x :: y" list_scope
+R52086 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R52096 Coq.Lists.List.nil
+R52111 Parallelmove.noOverlap_right
+R52111 Parallelmove.noOverlap_right
+R52261 Coq.Init.Logic "x = y" type_scope
+R52261 Coq.Init.Logic "x = y" type_scope
+R52412 Coq.Init.Logic "x = y" type_scope
+R52388 Parallelmove.replace_last_s
+R52406 Coq.Lists.List "x :: y" list_scope
+R52416 Coq.Lists.List "x :: y" list_scope
+R52419 Parallelmove.replace_last_s
+R52377 Coq.Init.Logic "x <> y" type_scope
+R52380 Coq.Lists.List.nil
+R52366 Parallelmove.Moves
+R52355 Parallelmove.Move
+R52613 Coq.Init.Logic "x = y" type_scope
+R52575 Parallelmove.replace_last_s
+R52593 Coq.Lists.List "x ++ y" list_scope
+R52604 Coq.Lists.List "x :: y" list_scope
+R52597 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R52607 Coq.Lists.List.nil
+R52617 Coq.Lists.List "x ++ y" list_scope
+R52630 Coq.Lists.List "x :: y" list_scope
+R52621 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R52622 Parallelmove.T
+R52633 Coq.Lists.List.nil
+R52567 Parallelmove.Reg
+R52567 Parallelmove.Reg
+R52553 Parallelmove.Moves
+R52713 Coq.Lists.List.app_comm_cons
+R52713 Coq.Lists.List.app_comm_cons
+R52713 Coq.Lists.List.app_comm_cons
+R52713 Coq.Lists.List.app_comm_cons
+R52737 Parallelmove.cons_replace
+R52737 Parallelmove.cons_replace
+R52788 Coq.Lists.List.app_eq_nil
+R52809 Coq.Lists.List "x :: y" list_scope
+R52802 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R52812 Coq.Lists.List.nil
+R52788 Coq.Lists.List.app_eq_nil
+R52809 Coq.Lists.List "x :: y" list_scope
+R52802 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R52812 Coq.Lists.List.nil
+R52925 Coq.Init.Logic "x = y" type_scope
+R52902 Parallelmove.last
+R52910 Coq.Lists.List "x ++ y" list_scope
+R52916 Coq.Lists.List "x :: y" list_scope
+R52919 Coq.Lists.List.nil
+R52894 Parallelmove.Move
+R52882 Parallelmove.Moves
+R52983 Coq.Lists.List "x ++ y" list_scope
+R52989 Coq.Lists.List "x :: y" list_scope
+R52992 Coq.Lists.List.nil
+R52983 Coq.Lists.List "x ++ y" list_scope
+R52989 Coq.Lists.List "x :: y" list_scope
+R52992 Coq.Lists.List.nil
+R53012 Coq.Lists.List.app_eq_nil
+R53028 Coq.Lists.List "x :: y" list_scope
+R53031 Coq.Lists.List.nil
+R53012 Coq.Lists.List.app_eq_nil
+R53028 Coq.Lists.List "x :: y" list_scope
+R53031 Coq.Lists.List.nil
+R53191 Coq.Init.Logic "x = y" type_scope
+R53169 Parallelmove.last
+R53178 Coq.Lists.List "x :: y" list_scope
+R53184 Coq.Lists.List "x :: y" list_scope
+R53193 Parallelmove.last
+R53201 Coq.Lists.List "x :: y" list_scope
+R53161 Parallelmove.Move
+R53161 Parallelmove.Move
+R53146 Parallelmove.Moves
+R53380 Coq.Init.Logic "x = y" type_scope
+R53332 Parallelmove.stepf
+R53338 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R53349 Coq.Lists.List "x :: y" list_scope
+R53342 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R53355 Coq.Lists.List "x ++ y" list_scope
+R53367 Coq.Lists.List "x :: y" list_scope
+R53359 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R53370 Coq.Lists.List.nil
+R53384 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R53390 Coq.Lists.List "x ++ y" list_scope
+R53404 Coq.Lists.List "x :: y" list_scope
+R53394 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R53395 Parallelmove.T
+R53407 Coq.Lists.List.nil
+R53420 Coq.Lists.List "x :: y" list_scope
+R53413 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R53433 Coq.Lists.List "x :: y" list_scope
+R53424 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R53428 Parallelmove.T
+R53320 Coq.Init.Logic "x = y" type_scope
+R53305 Parallelmove.split_move
+R53322 Coq.Init.Datatypes.None
+R53298 Parallelmove.Reg
+R53298 Parallelmove.Reg
+R53298 Parallelmove.Reg
+R53281 Parallelmove.Moves
+R53281 Parallelmove.Moves
+R53281 Parallelmove.Moves
+R53484 Coq.Lists.List "x ++ y" list_scope
+R53496 Coq.Lists.List "x :: y" list_scope
+R53488 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R53499 Coq.Lists.List.nil
+R53484 Coq.Lists.List "x ++ y" list_scope
+R53496 Coq.Lists.List "x :: y" list_scope
+R53488 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R53499 Coq.Lists.List.nil
+R53563 Parallelmove.last_app
+R53588 Parallelmove.last_replace
+R53563 Parallelmove.last_app
+R53588 Parallelmove.last_replace
+R53608 Locations.eq
+R53608 Locations.eq
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R53836 Coq.Init.Logic "x = y" type_scope
+R53788 Parallelmove.stepf
+R53794 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R53805 Coq.Lists.List "x :: y" list_scope
+R53798 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R53811 Coq.Lists.List "x ++ y" list_scope
+R53823 Coq.Lists.List "x :: y" list_scope
+R53815 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R53826 Coq.Lists.List.nil
+R53840 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R53846 Coq.Lists.List "x ++ y" list_scope
+R53858 Coq.Lists.List "x :: y" list_scope
+R53850 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R53861 Coq.Lists.List.nil
+R53874 Coq.Lists.List "x :: y" list_scope
+R53867 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R53778 Coq.Init.Logic "x <> y" type_scope
+R53765 Coq.Init.Logic "x = y" type_scope
+R53750 Parallelmove.split_move
+R53767 Coq.Init.Datatypes.None
+R53743 Parallelmove.Reg
+R53743 Parallelmove.Reg
+R53743 Parallelmove.Reg
+R53743 Parallelmove.Reg
+R53724 Parallelmove.Moves
+R53724 Parallelmove.Moves
+R53724 Parallelmove.Moves
+R53924 Coq.Lists.List "x ++ y" list_scope
+R53936 Coq.Lists.List "x :: y" list_scope
+R53928 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R53939 Coq.Lists.List.nil
+R53924 Coq.Lists.List "x ++ y" list_scope
+R53936 Coq.Lists.List "x :: y" list_scope
+R53928 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R53939 Coq.Lists.List.nil
+R54003 Parallelmove.last_app
+R54003 Parallelmove.last_app
+R54026 Locations.eq
+R54026 Locations.eq
+R54056 Coq.Init.Logic "x = y" type_scope
+R54056 Coq.Init.Logic "x = y" type_scope
+R54190 Parallelmove.noOverlap
+R54204 Coq.Lists.List "x ++ y" list_scope
+R54210 Coq.Lists.List "x :: y" list_scope
+R54213 Coq.Lists.List.nil
+R54158 Parallelmove.noOverlap
+R54172 Coq.Lists.List "x ++ y" list_scope
+R54178 Coq.Lists.List "x :: y" list_scope
+R54302 Coq.Init.Logic "x = y" type_scope
+R54282 Coq.Lists.List "x ++ y" list_scope
+R54288 Coq.Lists.List "x :: y" list_scope
+R54294 Coq.Lists.List "x :: y" list_scope
+R54321 Coq.Lists.List "x ++ y" list_scope
+R54308 Coq.Lists.List "x ++ y" list_scope
+R54314 Coq.Lists.List "x :: y" list_scope
+R54317 Coq.Lists.List.nil
+R54329 Coq.Lists.List "x :: y" list_scope
+R54356 Coq.Lists.List.app_ass
+R54302 Coq.Init.Logic "x = y" type_scope
+R54282 Coq.Lists.List "x ++ y" list_scope
+R54288 Coq.Lists.List "x :: y" list_scope
+R54294 Coq.Lists.List "x :: y" list_scope
+R54321 Coq.Lists.List "x ++ y" list_scope
+R54308 Coq.Lists.List "x ++ y" list_scope
+R54314 Coq.Lists.List "x :: y" list_scope
+R54317 Coq.Lists.List.nil
+R54329 Coq.Lists.List "x :: y" list_scope
+R54356 Coq.Lists.List.app_ass
+R54419 Coq.Init.Logic "x = y" type_scope
+R54406 Coq.Lists.List "x ++ y" list_scope
+R54412 Coq.Lists.List "x :: y" list_scope
+R54438 Coq.Lists.List "x ++ y" list_scope
+R54425 Coq.Lists.List "x ++ y" list_scope
+R54431 Coq.Lists.List "x :: y" list_scope
+R54434 Coq.Lists.List.nil
+R54466 Coq.Lists.List.app_ass
+R54419 Coq.Init.Logic "x = y" type_scope
+R54406 Coq.Lists.List "x ++ y" list_scope
+R54412 Coq.Lists.List "x :: y" list_scope
+R54438 Coq.Lists.List "x ++ y" list_scope
+R54425 Coq.Lists.List "x ++ y" list_scope
+R54431 Coq.Lists.List "x :: y" list_scope
+R54434 Coq.Lists.List.nil
+R54466 Coq.Lists.List.app_ass
+R54517 Parallelmove.noOverlap_Pop
+R54517 Parallelmove.noOverlap_Pop
+R54665 Parallelmove.noRead
+R54628 Parallelmove.noOverlap
+R54641 Coq.Lists.List "x ++ y" list_scope
+R54652 Coq.Lists.List "x :: y" list_scope
+R54645 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R54655 Coq.Lists.List.nil
+R54618 Coq.Init.Logic "x = y" type_scope
+R54603 Parallelmove.split_move
+R54620 Coq.Init.Datatypes.None
+R54596 Parallelmove.Reg
+R54596 Parallelmove.Reg
+R54582 Parallelmove.Moves
+R54751 Locations.eq
+R54751 Locations.eq
+R54809 Parallelmove.split_move
+R54809 Parallelmove.split_move
+R54902 Parallelmove.noOverlap
+R54927 Coq.Lists.List "x ++ y" list_scope
+R54923 Coq.Lists.List "x :: y" list_scope
+R54914 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R54940 Coq.Lists.List "x :: y" list_scope
+R54933 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R54943 Coq.Lists.List.nil
+R54902 Parallelmove.noOverlap
+R54927 Coq.Lists.List "x ++ y" list_scope
+R54923 Coq.Lists.List "x :: y" list_scope
+R54914 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R54940 Coq.Lists.List "x :: y" list_scope
+R54933 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R54943 Coq.Lists.List.nil
+R54968 Parallelmove.noOverlap
+R54986 Coq.Lists.List "x :: y" list_scope
+R54979 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R54999 Coq.Lists.List "x :: y" list_scope
+R54990 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R54968 Parallelmove.noOverlap
+R54986 Coq.Lists.List "x :: y" list_scope
+R54979 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R54999 Coq.Lists.List "x :: y" list_scope
+R54990 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R55014 Parallelmove.noOverlap_Front0
+R55014 Parallelmove.noOverlap_Front0
+R55046 Parallelmove.noOverlap
+R55066 Coq.Lists.List "x :: y" list_scope
+R55057 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R55077 Coq.Lists.List "x :: y" list_scope
+R55070 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R55046 Parallelmove.noOverlap
+R55066 Coq.Lists.List "x :: y" list_scope
+R55057 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R55077 Coq.Lists.List "x :: y" list_scope
+R55070 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R55092 Parallelmove.noOverlap_swap
+R55092 Parallelmove.noOverlap_swap
+R55369 Coq.Init.Logic "x = y" type_scope
+R55369 Coq.Init.Logic "x = y" type_scope
+R55387 Locations.diff_sym
+R55387 Locations.diff_sym
+R55471 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R55452 Parallelmove.noOverlap_pop
+R55471 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R55452 Parallelmove.noOverlap_pop
+R55601 Coq.Init.Logic "A \/ B" type_scope
+R55597 Coq.Init.Logic "x = y" type_scope
+R55604 Locations.diff
+R55535 Parallelmove.noOverlap
+R55549 Coq.Lists.List "x ++ y" list_scope
+R55560 Coq.Lists.List "x :: y" list_scope
+R55553 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R55567 Coq.Lists.List "x ++ y" list_scope
+R55579 Coq.Lists.List "x :: y" list_scope
+R55571 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R55582 Coq.Lists.List.nil
+R55641 Parallelmove.noOverlap
+R55659 Coq.Lists.List "x :: y" list_scope
+R55652 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R55666 Coq.Lists.List "x ++ y" list_scope
+R55678 Coq.Lists.List "x :: y" list_scope
+R55670 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R55681 Coq.Lists.List.nil
+R55641 Parallelmove.noOverlap
+R55659 Coq.Lists.List "x :: y" list_scope
+R55652 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R55666 Coq.Lists.List "x ++ y" list_scope
+R55678 Coq.Lists.List "x :: y" list_scope
+R55670 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R55681 Coq.Lists.List.nil
+R55703 Parallelmove.noOverlap_right
+R55703 Parallelmove.noOverlap_right
+R55738 Parallelmove.noOverlap
+R55772 Coq.Lists.List "x ++ y" list_scope
+R55753 Coq.Lists.List "x ++ y" list_scope
+R55765 Coq.Lists.List "x :: y" list_scope
+R55757 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R55768 Coq.Lists.List.nil
+R55785 Coq.Lists.List "x :: y" list_scope
+R55778 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R55788 Coq.Lists.List.nil
+R55738 Parallelmove.noOverlap
+R55772 Coq.Lists.List "x ++ y" list_scope
+R55753 Coq.Lists.List "x ++ y" list_scope
+R55765 Coq.Lists.List "x :: y" list_scope
+R55757 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R55768 Coq.Lists.List.nil
+R55785 Coq.Lists.List "x :: y" list_scope
+R55778 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R55788 Coq.Lists.List.nil
+R55809 Parallelmove.noOverlap_movBack0
+R55832 Coq.Lists.List "x ++ y" list_scope
+R55844 Coq.Lists.List "x :: y" list_scope
+R55836 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R55847 Coq.Lists.List.nil
+R55809 Parallelmove.noOverlap_movBack0
+R55832 Coq.Lists.List "x ++ y" list_scope
+R55844 Coq.Lists.List "x :: y" list_scope
+R55836 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R55847 Coq.Lists.List.nil
+R55914 Coq.Init.Logic "x = y" type_scope
+R55893 Coq.Lists.List "x ++ y" list_scope
+R55874 Coq.Lists.List "x ++ y" list_scope
+R55886 Coq.Lists.List "x :: y" list_scope
+R55878 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R55889 Coq.Lists.List.nil
+R55906 Coq.Lists.List "x :: y" list_scope
+R55899 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R55909 Coq.Lists.List.nil
+R55921 Coq.Lists.List "x ++ y" list_scope
+R55940 Coq.Lists.List "x ++ y" list_scope
+R55934 Coq.Lists.List "x :: y" list_scope
+R55926 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R55937 Coq.Lists.List.nil
+R55953 Coq.Lists.List "x :: y" list_scope
+R55946 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R55956 Coq.Lists.List.nil
+R55914 Coq.Init.Logic "x = y" type_scope
+R55893 Coq.Lists.List "x ++ y" list_scope
+R55874 Coq.Lists.List "x ++ y" list_scope
+R55886 Coq.Lists.List "x :: y" list_scope
+R55878 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R55889 Coq.Lists.List.nil
+R55906 Coq.Lists.List "x :: y" list_scope
+R55899 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R55909 Coq.Lists.List.nil
+R55921 Coq.Lists.List "x ++ y" list_scope
+R55940 Coq.Lists.List "x ++ y" list_scope
+R55934 Coq.Lists.List "x :: y" list_scope
+R55926 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R55937 Coq.Lists.List.nil
+R55953 Coq.Lists.List "x :: y" list_scope
+R55946 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R55956 Coq.Lists.List.nil
+R55978 Coq.Lists.List.app_ass
+R55978 Coq.Lists.List.app_ass
+R56035 Parallelmove.noOverlap
+R56054 Coq.Lists.List "x :: y" list_scope
+R56046 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R56065 Coq.Lists.List "x :: y" list_scope
+R56058 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R56068 Coq.Lists.List.nil
+R56035 Parallelmove.noOverlap
+R56054 Coq.Lists.List "x :: y" list_scope
+R56046 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R56065 Coq.Lists.List "x :: y" list_scope
+R56058 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R56068 Coq.Lists.List.nil
+R56089 Parallelmove.noOverlap_right
+R56089 Parallelmove.noOverlap_right
+R56433 Parallelmove.dstep
+R56424 Coq.Init.Logic "x = y" type_scope
+R56415 Parallelmove.stepf
+R56368 Parallelmove.noOverlap
+R56394 Coq.Lists.List "x ++ y" list_scope
+R56379 Parallelmove.StateToMove
+R56397 Parallelmove.StateBeing
+R56345 Coq.Init.Logic "x <> y" type_scope
+R56348 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R56349 Coq.Lists.List.nil
+R56354 Coq.Lists.List.nil
+R56332 Parallelmove.Moves
+R56310 Parallelmove.State
+R56310 Parallelmove.State
+R56573 Locations.eq
+R56573 Locations.eq
+R56626 Parallelmove.dstep_nop
+R56626 Parallelmove.dstep_nop
+R56675 Parallelmove.dstep_start
+R56675 Parallelmove.dstep_start
+R56757 Parallelmove.split_move
+R56757 Parallelmove.split_move
+R56892 Parallelmove.unsplit_move
+R56908 Coq.Lists.List "x :: y" list_scope
+R56892 Parallelmove.unsplit_move
+R56908 Coq.Lists.List "x :: y" list_scope
+R56958 Parallelmove.dstep_push
+R56958 Parallelmove.dstep_push
+R57041 Parallelmove.splitSome
+R57060 Coq.Lists.List "x :: y" list_scope
+R57052 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R57041 Parallelmove.splitSome
+R57060 Coq.Lists.List "x :: y" list_scope
+R57052 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R57093 Parallelmove.noOverlap_head
+R57093 Parallelmove.noOverlap_head
+R57171 Parallelmove.noOverlap_head
+R57171 Parallelmove.noOverlap_head
+R57283 Parallelmove.dstep_last
+R57283 Parallelmove.dstep_last
+R57283 Parallelmove.dstep_last
+R57378 Parallelmove.splitNone
+R57378 Parallelmove.splitNone
+R57483 Parallelmove.rebuild_l
+R57483 Parallelmove.rebuild_l
+R57522 Parallelmove.last
+R57530 Coq.Lists.List "x :: y" list_scope
+R57522 Parallelmove.last
+R57530 Coq.Lists.List "x :: y" list_scope
+R57544 Locations.eq
+R57544 Locations.eq
+R57589 Parallelmove.head_but_last
+R57606 Coq.Lists.List "x :: y" list_scope
+R57704 Locations.eq
+R57589 Parallelmove.head_but_last
+R57606 Coq.Lists.List "x :: y" list_scope
+R57704 Locations.eq
+R57704 Locations.eq
+R57764 Parallelmove.dstep_pop_loop
+R57783 Coq.Lists.List.nil
+R57779 Coq.Lists.List.nil
+R57764 Parallelmove.dstep_pop_loop
+R57783 Coq.Lists.List.nil
+R57779 Coq.Lists.List.nil
+R57835 Parallelmove.dstep_pop_loop
+R57866 Coq.Lists.List.nil
+R57860 Coq.Lists.List "x :: y" list_scope
+R57851 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R57888 Coq.Lists.List.app
+R57931 Parallelmove.splitNone
+R57835 Parallelmove.dstep_pop_loop
+R57866 Coq.Lists.List.nil
+R57860 Coq.Lists.List "x :: y" list_scope
+R57851 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R57888 Coq.Lists.List.app
+R57931 Parallelmove.splitNone
+R58017 Coq.Lists.List "x ++ y" list_scope
+R57994 Parallelmove.head_but_last
+R58011 Coq.Lists.List "x :: y" list_scope
+R58029 Coq.Lists.List "x :: y" list_scope
+R58021 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R58032 Coq.Lists.List.nil
+R57973 Parallelmove.noOverlap_head
+R58017 Coq.Lists.List "x ++ y" list_scope
+R57994 Parallelmove.head_but_last
+R58011 Coq.Lists.List "x :: y" list_scope
+R58029 Coq.Lists.List "x :: y" list_scope
+R58021 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R58032 Coq.Lists.List.nil
+R57973 Parallelmove.noOverlap_head
+R58053 Parallelmove.stepf_popLoop
+R58053 Parallelmove.stepf_popLoop
+R58086 Parallelmove.dstep_pop_loop
+R58107 Coq.Lists.List "x :: y" list_scope
+R58161 Parallelmove.splitNone
+R58086 Parallelmove.dstep_pop_loop
+R58107 Coq.Lists.List "x :: y" list_scope
+R58161 Parallelmove.splitNone
+R58247 Coq.Lists.List "x ++ y" list_scope
+R58224 Parallelmove.head_but_last
+R58241 Coq.Lists.List "x :: y" list_scope
+R58259 Coq.Lists.List "x :: y" list_scope
+R58251 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R58262 Coq.Lists.List.nil
+R58203 Parallelmove.noOverlap_head
+R58247 Coq.Lists.List "x ++ y" list_scope
+R58224 Parallelmove.head_but_last
+R58241 Coq.Lists.List "x :: y" list_scope
+R58259 Coq.Lists.List "x :: y" list_scope
+R58251 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R58262 Coq.Lists.List.nil
+R58203 Parallelmove.noOverlap_head
+R58290 Locations.diff
+R58290 Locations.diff
+R58319 Coq.Init.Logic "A \/ B" type_scope
+R58315 Coq.Init.Logic "x = y" type_scope
+R58322 Locations.diff
+R58319 Coq.Init.Logic "A \/ B" type_scope
+R58315 Coq.Init.Logic "x = y" type_scope
+R58322 Locations.diff
+R58344 Parallelmove.noO_diff
+R58356 Parallelmove.head_but_last
+R58373 Coq.Lists.List "x :: y" list_scope
+R58344 Parallelmove.noO_diff
+R58356 Parallelmove.head_but_last
+R58373 Coq.Lists.List "x :: y" list_scope
+R58428 Coq.Init.Logic "x = y" type_scope
+R58428 Coq.Init.Logic "x = y" type_scope
+R58467 Parallelmove.stepf_pop
+R58467 Parallelmove.stepf_pop
+R58496 Parallelmove.dstep_pop
+R58509 Parallelmove.head_but_last
+R58526 Coq.Lists.List "x :: y" list_scope
+R58496 Parallelmove.dstep_pop
+R58509 Parallelmove.head_but_last
+R58526 Coq.Lists.List "x :: y" list_scope
+R58578 Parallelmove.splitNone
+R58578 Parallelmove.splitNone
+R58664 Coq.Lists.List "x ++ y" list_scope
+R58641 Parallelmove.head_but_last
+R58658 Coq.Lists.List "x :: y" list_scope
+R58676 Coq.Lists.List "x :: y" list_scope
+R58668 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R58679 Coq.Lists.List.nil
+R58620 Parallelmove.noOverlap_head
+R58664 Coq.Lists.List "x ++ y" list_scope
+R58641 Parallelmove.head_but_last
+R58658 Coq.Lists.List "x :: y" list_scope
+R58676 Coq.Lists.List "x :: y" list_scope
+R58668 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R58679 Coq.Lists.List.nil
+R58620 Parallelmove.noOverlap_head
+R58833 Parallelmove.dstep
+R58843 Parallelmove.stepf
+R58785 Parallelmove.noOverlap
+R58811 Coq.Lists.List "x ++ y" list_scope
+R58796 Parallelmove.StateToMove
+R58814 Parallelmove.StateBeing
+R58762 Coq.Init.Logic "x <> y" type_scope
+R58765 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R58766 Coq.Lists.List.nil
+R58771 Coq.Lists.List.nil
+R58749 Parallelmove.Moves
+R58727 Parallelmove.State
+R58884 Parallelmove.f2ind
+R58884 Parallelmove.f2ind
+R58989 Coq.Init.Logic "x = y" type_scope
+R58964 Coq.Lists.List.length
+R58975 Coq.Lists.List "x ++ y" list_scope
+R58981 Coq.Lists.List "x :: y" list_scope
+R59010 Coq.Init.Peano "x + y" nat_scope
+R58992 Coq.Lists.List.length
+R59003 Coq.Lists.List "x ++ y" list_scope
+R58955 Parallelmove.Move
+R58943 Parallelmove.Moves
+R58943 Parallelmove.Moves
+R59138 Coq.Init.Datatypes.nat
+R59201 Coq.Init.Peano "x + y" nat_scope
+R59190 Coq.Init.Peano "x * y" nat_scope
+R59192 Coq.Lists.List.length
+R59203 Coq.Lists.List.length
+R59129 Parallelmove.State
+R59349 Coq.Init.Peano "x < y" nat_scope
+R59337 Coq.Init.Peano "x + y" nat_scope
+R59325 Coq.Init.Peano "x * y" nat_scope
+R59327 Coq.Lists.List.length
+R59339 Coq.Lists.List.length
+R59365 Coq.Init.Peano "x + y" nat_scope
+R59353 Coq.Init.Peano "x * y" nat_scope
+R59355 Coq.Lists.List.length
+R59367 Coq.Lists.List.length
+R59285 Parallelmove.dstep
+R59304 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R59291 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R59276 Parallelmove.Moves
+R59276 Parallelmove.Moves
+R59260 Parallelmove.Moves
+R59260 Parallelmove.Moves
+R59260 Parallelmove.Moves
+R59260 Parallelmove.Moves
+R59459 Parallelmove.appcons_length
+R59459 Parallelmove.appcons_length
+R59520 Coq.Init.Logic "x = y" type_scope
+R59487 Coq.Lists.List.length
+R59497 Coq.Lists.List "x ++ y" list_scope
+R59511 Coq.Lists.List "x :: y" list_scope
+R59501 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R59502 Parallelmove.T
+R59514 Coq.Lists.List.nil
+R59522 Coq.Lists.List.length
+R59532 Coq.Lists.List "x ++ y" list_scope
+R59544 Coq.Lists.List "x :: y" list_scope
+R59536 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R59547 Coq.Lists.List.nil
+R59520 Coq.Init.Logic "x = y" type_scope
+R59487 Coq.Lists.List.length
+R59497 Coq.Lists.List "x ++ y" list_scope
+R59511 Coq.Lists.List "x :: y" list_scope
+R59501 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R59502 Parallelmove.T
+R59514 Coq.Lists.List.nil
+R59522 Coq.Lists.List.length
+R59532 Coq.Lists.List "x ++ y" list_scope
+R59544 Coq.Lists.List "x :: y" list_scope
+R59536 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R59547 Coq.Lists.List.nil
+R59611 Parallelmove.appcons_length
+R59611 Parallelmove.appcons_length
+R59611 Parallelmove.appcons_length
+R59611 Parallelmove.appcons_length
+R59709 Coq.Init.Peano "x < y" nat_scope
+R59699 Parallelmove.mesure
+R59711 Parallelmove.mesure
+R59682 Parallelmove.dstep
+R59674 Parallelmove.State
+R59674 Parallelmove.State
+R59821 Parallelmove.step_dec0
+R59821 Parallelmove.step_dec0
+R60039 Coq.Init.Peano "x < y" nat_scope
+R60029 Parallelmove.mesure
+R60041 Parallelmove.mesure
+R59954 Coq.Init.Logic "A /\ B" type_scope
+R59937 Coq.Init.Logic "x <> y" type_scope
+R59940 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R59941 Coq.Lists.List.nil
+R59946 Coq.Lists.List.nil
+R59924 Parallelmove.Moves
+R59975 Coq.Init.Logic "A /\ B" type_scope
+R59964 Coq.Init.Logic "x = y" type_scope
+R59966 Parallelmove.stepf
+R59978 Parallelmove.noOverlap
+R60004 Coq.Lists.List "x ++ y" list_scope
+R59989 Parallelmove.StateToMove
+R60007 Parallelmove.StateBeing
+R59902 Parallelmove.State
+R59902 Parallelmove.State
+R60097 Parallelmove.step_dec
+R60097 Parallelmove.step_dec
+R60113 Parallelmove.f2ind
+R60113 Parallelmove.f2ind
+R60322 Coq.Arith.Wf_nat.ltof
+R60329 Parallelmove.mesure
+R60218 Coq.Init.Logic "A /\ B" type_scope
+R60207 Coq.Init.Logic "x = y" type_scope
+R60209 Parallelmove.stepf
+R60266 Coq.Init.Logic "A /\ B" type_scope
+R60249 Coq.Init.Logic "x <> y" type_scope
+R60252 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R60253 Coq.Lists.List.nil
+R60258 Coq.Lists.List.nil
+R60236 Parallelmove.Moves
+R60273 Parallelmove.noOverlap
+R60299 Coq.Lists.List "x ++ y" list_scope
+R60284 Parallelmove.StateToMove
+R60302 Parallelmove.StateBeing
+R60195 Parallelmove.State
+R60195 Parallelmove.State
+R60396 Parallelmove.step_dec
+R60396 Parallelmove.step_dec
+R60412 Parallelmove.f2ind
+R60412 Parallelmove.f2ind
+R60532 Coq.Init.Logic "x = y" type_scope
+R60500 Parallelmove.replace_last_s
+R60518 Coq.Lists.List "x :: y" list_scope
+R60525 Coq.Lists.List "x :: y" list_scope
+R60536 Coq.Lists.List "x :: y" list_scope
+R60539 Parallelmove.replace_last_s
+R60558 Coq.Lists.List "x :: y" list_scope
+R60710 Coq.Init.Logic "x = y" type_scope
+R60684 Coq.Lists.List.length
+R60692 Parallelmove.replace_last_s
+R60712 Coq.Lists.List.length
+R60874 Coq.Init.Logic "x = y" type_scope
+R60856 Coq.Lists.List.length
+R60867 Coq.Lists.List "x ++ y" list_scope
+R60886 Coq.Init.Peano "x + y" nat_scope
+R60876 Coq.Lists.List.length
+R60888 Coq.Lists.List.length
+R60844 Coq.Lists.List.list
+R60844 Coq.Lists.List.list
+R61088 Coq.Init.Logic "x = y" type_scope
+R61079 Coq.Lists.List.length
+R61112 Coq.Init.Peano "x + y" nat_scope
+R61101 Coq.Init.Peano "x + y" nat_scope
+R61091 Coq.Lists.List.length
+R61103 Coq.Lists.List.length
+R61054 Coq.Init.Logic "x = y" type_scope
+R61039 Parallelmove.split_move
+R61056 Coq.Init.Datatypes.Some
+R61061 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R61032 Parallelmove.Reg
+R61032 Parallelmove.Reg
+R61018 Parallelmove.Moves
+R61018 Parallelmove.Moves
+R61018 Parallelmove.Moves
+R61219 Locations.eq
+R61219 Locations.eq
+R61284 Parallelmove.split_move
+R61284 Parallelmove.split_move
+R61581 Coq.Init.Peano "x < y" nat_scope
+R61563 Parallelmove.mesure
+R61571 Parallelmove.stepf
+R61583 Parallelmove.mesure
+R61538 Coq.Init.Logic "x <> y" type_scope
+R61541 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R61542 Coq.Lists.List.nil
+R61547 Coq.Lists.List.nil
+R61525 Parallelmove.Moves
+R61503 Parallelmove.State
+R61785 Locations.eq
+R61796 Coq.Init.Datatypes.fst
+R61801 Parallelmove.last
+R61809 Coq.Lists.List "x :: y" list_scope
+R61785 Locations.eq
+R61796 Coq.Init.Datatypes.fst
+R61801 Parallelmove.last
+R61809 Coq.Lists.List "x :: y" list_scope
+R61836 Parallelmove.length_replace
+R61836 Parallelmove.length_replace
+R61942 Locations.eq
+R61942 Locations.eq
+R62003 Locations.eq
+R62003 Locations.eq
+R62047 Parallelmove.split_move
+R62047 Parallelmove.split_move
+R62114 Parallelmove.split_length
+R62114 Parallelmove.split_length
+R62157 Parallelmove.length_app
+R62157 Parallelmove.length_app
+R62215 Locations.eq
+R62226 Coq.Init.Datatypes.fst
+R62231 Parallelmove.last
+R62239 Coq.Lists.List "x :: y" list_scope
+R62215 Locations.eq
+R62226 Coq.Init.Datatypes.fst
+R62231 Parallelmove.last
+R62239 Coq.Lists.List "x :: y" list_scope
+R62266 Parallelmove.length_replace
+R62266 Parallelmove.length_replace
+R62428 Coq.Arith.Wf_nat.ltof
+R62435 Parallelmove.mesure
+R62413 Coq.Init.Logic "x = y" type_scope
+R62415 Parallelmove.stepf
+R62387 Coq.Init.Logic "x <> y" type_scope
+R62390 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R62391 Coq.Lists.List.nil
+R62396 Coq.Lists.List.nil
+R62374 Parallelmove.Moves
+R62352 Parallelmove.State
+R62352 Parallelmove.State
+R62506 Parallelmove.stepf_dec0'
+R62506 Parallelmove.stepf_dec0'
+R62624 Coq.Init.Logic "x <> y" type_scope
+R62606 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R62609 Coq.Lists.List "x :: y" list_scope
+R62627 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R62628 Coq.Lists.List.nil
+R62633 Coq.Lists.List.nil
+R62591 Coq.Lists.List.list
+R62596 Parallelmove.Move
+R62591 Coq.Lists.List.list
+R62596 Parallelmove.Move
+R62591 Coq.Lists.List.list
+R62596 Parallelmove.Move
+R62591 Coq.Lists.List.list
+R62596 Parallelmove.Move
+R62570 Parallelmove.Move
+R62760 Coq.Init.Logic "x <> y" type_scope
+R62742 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R62749 Coq.Lists.List "x :: y" list_scope
+R62763 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R62764 Coq.Lists.List.nil
+R62769 Coq.Lists.List.nil
+R62727 Coq.Lists.List.list
+R62732 Parallelmove.Move
+R62727 Coq.Lists.List.list
+R62732 Parallelmove.Move
+R62727 Coq.Lists.List.list
+R62732 Parallelmove.Move
+R62727 Coq.Lists.List.list
+R62732 Parallelmove.Move
+R62706 Parallelmove.Move
+R62827 Parallelmove.disc1
+R62833 Parallelmove.disc2
+R62890 Parallelmove.sameExec
+R62881 Parallelmove.State
+R63048 Coq.Init.Specif "{ A } + { B }" type_scope
+R63051 Coq.Init.Logic "'exists' x : t , p" type_scope
+R63076 Coq.Init.Logic "x = y" type_scope
+R63078 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R63079 Coq.Lists.List.nil
+R63084 Coq.Lists.List.nil
+R63062 Coq.Lists.List.list
+R63067 Parallelmove.Move
+R63117 Coq.Init.Logic "x <> y" type_scope
+R63120 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R63121 Coq.Lists.List.nil
+R63126 Coq.Lists.List.nil
+R63038 Parallelmove.State
+R63275 Coq.Init.Wf.Fix
+R63428 Parallelmove.base_case_Pmov_dec
+R63465 Coq.Init.Specif.left
+R63489 Coq.Init.Specif.right
+R63517 Parallelmove.stepf_dec0'
+R63506 Parallelmove.stepf
+R63404 Parallelmove.State
+R63381 Coq.Arith.Wf_nat.ltof
+R63388 Parallelmove.mesure
+R63344 Parallelmove.State
+R63322 Parallelmove.State
+R63284 Coq.Arith.Wf_nat.well_founded_ltof
+R63304 Parallelmove.mesure
+R63586 Coq.Init.Logic "x = y" type_scope
+R63578 Parallelmove.Pmov
+R63649 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R63650 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R63651 Coq.Lists.List.nil
+R63656 Coq.Lists.List.nil
+R63724 Parallelmove.Pmov
+R63730 Parallelmove.stepf
+R63836 Coq.Init.Wf.Fix_eq
+R64020 Parallelmove.base_case_Pmov_dec
+R64064 Coq.Init.Specif.left
+R64095 Coq.Init.Specif.right
+R64123 Parallelmove.stepf_dec0'
+R64112 Parallelmove.stepf
+R63989 Parallelmove.State
+R63966 Coq.Arith.Wf_nat.ltof
+R63973 Parallelmove.mesure
+R63922 Parallelmove.State
+R63893 Parallelmove.State
+R63855 Coq.Arith.Wf_nat.well_founded_ltof
+R63875 Parallelmove.mesure
+R63836 Coq.Init.Wf.Fix_eq
+R64020 Parallelmove.base_case_Pmov_dec
+R64064 Coq.Init.Specif.left
+R64095 Coq.Init.Specif.right
+R64123 Parallelmove.stepf_dec0'
+R64112 Parallelmove.stepf
+R63989 Parallelmove.State
+R63966 Coq.Arith.Wf_nat.ltof
+R63973 Parallelmove.mesure
+R63922 Parallelmove.State
+R63893 Parallelmove.State
+R63855 Coq.Arith.Wf_nat.well_founded_ltof
+R63875 Parallelmove.mesure
+R64153 Parallelmove.Pmov
+R64153 Parallelmove.Pmov
+R64266 Coq.Init.Logic "x = y" type_scope
+R64235 Coq.Init.Specif.left
+R64249 Coq.Init.Specif.right
+R64451 Coq.Init.Logic "x = y" type_scope
+R64420 Coq.Init.Specif.left
+R64434 Coq.Init.Specif.right
+R64816 Parallelmove.sameExec
+R64797 Parallelmove.sameExec
+R64779 Parallelmove.sameExec
+R64726 Coq.Lists.List.In
+R64732 Parallelmove.getdst
+R64755 Coq.Lists.List "x ++ y" list_scope
+R64740 Parallelmove.StateToMove
+R64758 Parallelmove.StateBeing
+R64672 Coq.Lists.List.In
+R64678 Parallelmove.getdst
+R64701 Coq.Lists.List "x ++ y" list_scope
+R64686 Parallelmove.StateToMove
+R64704 Parallelmove.StateBeing
+R64606 Coq.Lists.List.In
+R64612 Parallelmove.getdst
+R64635 Coq.Lists.List "x ++ y" list_scope
+R64620 Parallelmove.StateToMove
+R64638 Parallelmove.StateBeing
+R64552 Coq.Lists.List.In
+R64558 Parallelmove.getdst
+R64581 Coq.Lists.List "x ++ y" list_scope
+R64566 Parallelmove.StateToMove
+R64584 Parallelmove.StateBeing
+R64530 Parallelmove.State
+R64530 Parallelmove.State
+R64530 Parallelmove.State
+R64895 Parallelmove.getdst_app
+R64895 Parallelmove.getdst_app
+R64895 Parallelmove.getdst_app
+R64895 Parallelmove.getdst_app
+R64895 Parallelmove.getdst_app
+R64895 Parallelmove.getdst_app
+R64895 Parallelmove.getdst_app
+R64895 Parallelmove.getdst_app
+R64895 Parallelmove.getdst_app
+R64895 Parallelmove.getdst_app
+R64895 Parallelmove.getdst_app
+R64895 Parallelmove.getdst_app
+R64895 Parallelmove.getdst_app
+R64895 Parallelmove.getdst_app
+R65087 Coq.Lists.List.in_or_app
+R65087 Coq.Lists.List.in_or_app
+R65110 Coq.Lists.List.in_app_or
+R65156 Coq.Lists.List "x ++ y" list_scope
+R65146 Parallelmove.getdst
+R65159 Parallelmove.getdst
+R65131 Coq.Lists.List "x ++ y" list_scope
+R65121 Parallelmove.getdst
+R65134 Parallelmove.getdst
+R65110 Coq.Lists.List.in_app_or
+R65156 Coq.Lists.List "x ++ y" list_scope
+R65146 Parallelmove.getdst
+R65159 Parallelmove.getdst
+R65131 Coq.Lists.List "x ++ y" list_scope
+R65121 Parallelmove.getdst
+R65134 Parallelmove.getdst
+R65208 Coq.Lists.List.in_or_app
+R65208 Coq.Lists.List.in_or_app
+R65231 Coq.Lists.List.in_app_or
+R65277 Coq.Lists.List "x ++ y" list_scope
+R65267 Parallelmove.getdst
+R65280 Parallelmove.getdst
+R65252 Coq.Lists.List "x ++ y" list_scope
+R65242 Parallelmove.getdst
+R65255 Parallelmove.getdst
+R65231 Coq.Lists.List.in_app_or
+R65277 Coq.Lists.List "x ++ y" list_scope
+R65267 Parallelmove.getdst
+R65280 Parallelmove.getdst
+R65252 Coq.Lists.List "x ++ y" list_scope
+R65242 Parallelmove.getdst
+R65255 Parallelmove.getdst
+R65429 Coq.Lists.List.In
+R65435 Parallelmove.getdst
+R65458 Coq.Lists.List "x ++ y" list_scope
+R65443 Parallelmove.StateToMove
+R65461 Parallelmove.StateBeing
+R65376 Coq.Lists.List.In
+R65382 Parallelmove.getdst
+R65405 Coq.Lists.List "x ++ y" list_scope
+R65390 Parallelmove.StateToMove
+R65408 Parallelmove.StateBeing
+R65360 Parallelmove.dstep
+R65349 Parallelmove.State
+R65349 Parallelmove.State
+R65581 Parallelmove.app_nil
+R65609 Parallelmove.getdst_app
+R65581 Parallelmove.app_nil
+R65581 Parallelmove.app_nil
+R65581 Parallelmove.app_nil
+R65581 Parallelmove.app_nil
+R65581 Parallelmove.app_nil
+R65581 Parallelmove.app_nil
+R65581 Parallelmove.app_nil
+R65581 Parallelmove.app_nil
+R65581 Parallelmove.app_nil
+R65581 Parallelmove.app_nil
+R65609 Parallelmove.getdst_app
+R65609 Parallelmove.getdst_app
+R65609 Parallelmove.getdst_app
+R65609 Parallelmove.getdst_app
+R65609 Parallelmove.getdst_app
+R65609 Parallelmove.getdst_app
+R65609 Parallelmove.getdst_app
+R65609 Parallelmove.getdst_app
+R65609 Parallelmove.getdst_app
+R65609 Parallelmove.getdst_app
+R65609 Parallelmove.getdst_app
+R65609 Parallelmove.getdst_app
+R65609 Parallelmove.getdst_app
+R65609 Parallelmove.getdst_app
+R65609 Parallelmove.getdst_app
+R65609 Parallelmove.getdst_app
+R65609 Parallelmove.getdst_app
+R65609 Parallelmove.getdst_app
+R65609 Parallelmove.getdst_app
+R65609 Parallelmove.getdst_app
+R65681 Coq.Lists.List.in_app_or
+R65705 Coq.Lists.List "x :: y" list_scope
+R65708 Coq.Lists.List.nil
+R65692 Parallelmove.getdst
+R65681 Coq.Lists.List.in_app_or
+R65705 Coq.Lists.List "x :: y" list_scope
+R65708 Coq.Lists.List.nil
+R65692 Parallelmove.getdst
+R65790 Coq.Lists.List.in_app_or
+R65829 Coq.Lists.List "x :: y" list_scope
+R65835 Coq.Lists.List "x :: y" list_scope
+R65838 Parallelmove.getdst
+R65811 Coq.Lists.List "x ++ y" list_scope
+R65801 Parallelmove.getdst
+R65814 Parallelmove.getdst
+R65790 Coq.Lists.List.in_app_or
+R65829 Coq.Lists.List "x :: y" list_scope
+R65835 Coq.Lists.List "x :: y" list_scope
+R65838 Parallelmove.getdst
+R65811 Coq.Lists.List "x ++ y" list_scope
+R65801 Parallelmove.getdst
+R65814 Parallelmove.getdst
+R65883 Coq.Lists.List.in_app_or
+R65906 Parallelmove.getdst
+R65894 Parallelmove.getdst
+R65883 Coq.Lists.List.in_app_or
+R65906 Parallelmove.getdst
+R65894 Parallelmove.getdst
+R65950 Coq.Lists.List.in_or_app
+R65973 Coq.Lists.List.in_or_app
+R65950 Coq.Lists.List.in_or_app
+R65973 Coq.Lists.List.in_or_app
+R66008 Coq.Lists.List.in_or_app
+R66031 Coq.Lists.List.in_or_app
+R66008 Coq.Lists.List.in_or_app
+R66031 Coq.Lists.List.in_or_app
+R66120 Coq.Lists.List.in_or_app
+R66143 Coq.Lists.List.in_or_app
+R66120 Coq.Lists.List.in_or_app
+R66143 Coq.Lists.List.in_or_app
+R66186 Coq.Lists.List.in_or_app
+R66186 Coq.Lists.List.in_or_app
+R66229 Coq.Lists.List.in_or_app
+R66229 Coq.Lists.List.in_or_app
+R66279 Coq.Lists.List.in_app_or
+R66310 Coq.Lists.List "x ++ y" list_scope
+R66301 Parallelmove.getdst
+R66316 Coq.Lists.List "x :: y" list_scope
+R66319 Coq.Lists.List.nil
+R66290 Parallelmove.getdst
+R66279 Coq.Lists.List.in_app_or
+R66310 Coq.Lists.List "x ++ y" list_scope
+R66301 Parallelmove.getdst
+R66316 Coq.Lists.List "x :: y" list_scope
+R66319 Coq.Lists.List.nil
+R66290 Parallelmove.getdst
+R66358 Coq.Lists.List.in_or_app
+R66358 Coq.Lists.List.in_or_app
+R66393 Coq.Lists.List.in_app_or
+R66417 Coq.Lists.List "x :: y" list_scope
+R66420 Coq.Lists.List.nil
+R66404 Parallelmove.getdst
+R66393 Coq.Lists.List.in_app_or
+R66417 Coq.Lists.List "x :: y" list_scope
+R66420 Coq.Lists.List.nil
+R66404 Parallelmove.getdst
+R66458 Coq.Lists.List.in_or_app
+R66496 Coq.Lists.List.in_or_app
+R66458 Coq.Lists.List.in_or_app
+R66496 Coq.Lists.List.in_or_app
+R66579 Coq.Lists.List.in_or_app
+R66617 Coq.Lists.List.in_or_app
+R66579 Coq.Lists.List.in_or_app
+R66617 Coq.Lists.List.in_or_app
+R66654 Coq.Lists.List.in_app_or
+R66685 Coq.Lists.List "x ++ y" list_scope
+R66676 Parallelmove.getdst
+R66692 Coq.Lists.List "x :: y" list_scope
+R66695 Coq.Lists.List.nil
+R66665 Parallelmove.getdst
+R66654 Coq.Lists.List.in_app_or
+R66685 Coq.Lists.List "x ++ y" list_scope
+R66676 Parallelmove.getdst
+R66692 Coq.Lists.List "x :: y" list_scope
+R66695 Coq.Lists.List.nil
+R66665 Parallelmove.getdst
+R66734 Coq.Lists.List.in_or_app
+R66734 Coq.Lists.List.in_or_app
+R66769 Coq.Lists.List.in_app_or
+R66794 Coq.Lists.List "x :: y" list_scope
+R66797 Coq.Lists.List.nil
+R66780 Parallelmove.getdst
+R66769 Coq.Lists.List.in_app_or
+R66794 Coq.Lists.List "x :: y" list_scope
+R66797 Coq.Lists.List.nil
+R66780 Parallelmove.getdst
+R66880 Coq.Lists.List.in_or_app
+R66918 Coq.Lists.List.in_or_app
+R66880 Coq.Lists.List.in_or_app
+R66918 Coq.Lists.List.in_or_app
+R66953 Coq.Lists.List.in_or_app
+R66991 Coq.Lists.List.in_or_app
+R66953 Coq.Lists.List.in_or_app
+R66991 Coq.Lists.List.in_or_app
+R67028 Coq.Lists.List.in_or_app
+R67028 Coq.Lists.List.in_or_app
+R67126 Coq.Init.Logic "x = y" type_scope
+R67104 Parallelmove.StateToMove
+R67117 Parallelmove.Pmov
+R67128 Coq.Lists.List.nil
+R67095 Parallelmove.State
+R67167 Coq.Init.Wf.well_founded_ind
+R67185 Coq.Arith.Wf_nat.well_founded_ltof
+R67212 Parallelmove.mesure
+R67167 Coq.Init.Wf.well_founded_ind
+R67185 Coq.Arith.Wf_nat.well_founded_ltof
+R67212 Parallelmove.mesure
+R67291 Parallelmove.Pmov_equation
+R67291 Parallelmove.Pmov_equation
+R67354 Parallelmove.stepf1_dec
+R67354 Parallelmove.stepf1_dec
+R67390 Parallelmove.stepf1_dec
+R67390 Parallelmove.stepf1_dec
+R67475 Coq.Init.Logic "x = y" type_scope
+R67454 Parallelmove.StateBeing
+R67466 Parallelmove.Pmov
+R67477 Coq.Lists.List.nil
+R67445 Parallelmove.State
+R67516 Coq.Init.Wf.well_founded_ind
+R67534 Coq.Arith.Wf_nat.well_founded_ltof
+R67561 Parallelmove.mesure
+R67516 Coq.Init.Wf.well_founded_ind
+R67534 Coq.Arith.Wf_nat.well_founded_ltof
+R67561 Parallelmove.mesure
+R67640 Parallelmove.Pmov_equation
+R67640 Parallelmove.Pmov_equation
+R67703 Parallelmove.stepf1_dec
+R67703 Parallelmove.stepf1_dec
+R67739 Parallelmove.stepf1_dec
+R67739 Parallelmove.stepf1_dec
+R67824 Parallelmove.sameExec
+R67837 Parallelmove.Pmov
+R67809 Parallelmove.stepInv
+R67801 Parallelmove.State
+R67881 Coq.Init.Wf.well_founded_ind
+R67899 Coq.Arith.Wf_nat.well_founded_ltof
+R67926 Parallelmove.mesure
+R67881 Coq.Init.Wf.well_founded_ind
+R67899 Coq.Arith.Wf_nat.well_founded_ltof
+R67926 Parallelmove.mesure
+R67983 Parallelmove.Pmov_equation
+R67983 Parallelmove.Pmov_equation
+R68141 Coq.Lists.List.In
+R68147 Parallelmove.getdst
+R68178 Coq.Lists.List "x ++ y" list_scope
+R68155 Parallelmove.StateToMove
+R68168 Parallelmove.stepf
+R68181 Parallelmove.StateBeing
+R68193 Parallelmove.stepf
+R68057 Coq.Lists.List.In
+R68063 Parallelmove.getdst
+R68101 Coq.Lists.List "x ++ y" list_scope
+R68071 Parallelmove.StateToMove
+R68084 Parallelmove.Pmov
+R68090 Parallelmove.stepf
+R68104 Parallelmove.StateBeing
+R68116 Parallelmove.Pmov
+R68122 Parallelmove.stepf
+R68046 Parallelmove.Reg
+R68141 Coq.Lists.List.In
+R68147 Parallelmove.getdst
+R68178 Coq.Lists.List "x ++ y" list_scope
+R68155 Parallelmove.StateToMove
+R68168 Parallelmove.stepf
+R68181 Parallelmove.StateBeing
+R68193 Parallelmove.stepf
+R68057 Coq.Lists.List.In
+R68063 Parallelmove.getdst
+R68101 Coq.Lists.List "x ++ y" list_scope
+R68071 Parallelmove.StateToMove
+R68084 Parallelmove.Pmov
+R68090 Parallelmove.stepf
+R68104 Parallelmove.StateBeing
+R68116 Parallelmove.Pmov
+R68122 Parallelmove.stepf
+R68046 Parallelmove.Reg
+R68229 Parallelmove.STM_Pmov
+R68239 Parallelmove.stepf
+R68259 Parallelmove.SB_Pmov
+R68229 Parallelmove.STM_Pmov
+R68239 Parallelmove.stepf
+R68259 Parallelmove.SB_Pmov
+R68326 Parallelmove.sameExec_reflexive
+R68326 Parallelmove.sameExec_reflexive
+R68355 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R68356 Coq.Lists.List.nil
+R68364 Parallelmove.Move
+R68373 Coq.Lists.List "x :: y" list_scope
+R68355 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R68356 Coq.Lists.List.nil
+R68364 Parallelmove.Move
+R68373 Coq.Lists.List "x :: y" list_scope
+R68392 Parallelmove.dstep
+R68402 Parallelmove.stepf
+R68425 Parallelmove.f2ind
+R68392 Parallelmove.dstep
+R68402 Parallelmove.stepf
+R68425 Parallelmove.f2ind
+R68425 Parallelmove.f2ind
+R68532 Parallelmove.stepf
+R68506 Parallelmove.sameExec_transitive
+R68532 Parallelmove.stepf
+R68506 Parallelmove.sameExec_transitive
+R68565 Parallelmove.dstep_inv_getdst
+R68565 Parallelmove.dstep_inv_getdst
+R68595 Parallelmove.dstepp_sameExec
+R68643 Parallelmove.stepf
+R68624 Parallelmove.dstepp_trans
+R68595 Parallelmove.dstepp_sameExec
+R68643 Parallelmove.stepf
+R68624 Parallelmove.dstepp_trans
+R68666 Parallelmove.dstepp_refl
+R68666 Parallelmove.dstepp_refl
+R68722 Parallelmove.step_dec
+R68722 Parallelmove.step_dec
+R68751 Parallelmove.dstep_inv
+R68751 Parallelmove.dstep_inv
+R68787 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R68790 Coq.Lists.List "x :: y" list_scope
+R68787 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R68790 Coq.Lists.List "x :: y" list_scope
+R68812 Parallelmove.dstep
+R68822 Parallelmove.stepf
+R68845 Parallelmove.f2ind
+R68812 Parallelmove.dstep
+R68822 Parallelmove.stepf
+R68845 Parallelmove.f2ind
+R68845 Parallelmove.f2ind
+R68952 Parallelmove.stepf
+R68926 Parallelmove.sameExec_transitive
+R68952 Parallelmove.stepf
+R68926 Parallelmove.sameExec_transitive
+R68985 Parallelmove.dstep_inv_getdst
+R68985 Parallelmove.dstep_inv_getdst
+R69015 Parallelmove.dstepp_sameExec
+R69063 Parallelmove.stepf
+R69044 Parallelmove.dstepp_trans
+R69015 Parallelmove.dstepp_sameExec
+R69063 Parallelmove.stepf
+R69044 Parallelmove.dstepp_trans
+R69086 Parallelmove.dstepp_refl
+R69086 Parallelmove.dstepp_refl
+R69142 Parallelmove.step_dec
+R69142 Parallelmove.step_dec
+R69171 Parallelmove.dstep_inv
+R69171 Parallelmove.dstep_inv
+R69245 Parallelmove.StateDone
+R69256 Parallelmove.Pmov
+R69261 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R69265 Coq.Lists.List.nil
+R69270 Coq.Lists.List.nil
+R69235 Parallelmove.Moves
+R69299 Parallelmove.sexec
+R69326 Parallelmove.get
+R69393 Parallelmove.Moves
+R69368 Coq.Lists.List.list
+R69373 Locations.loc
+R69368 Coq.Lists.List.list
+R69373 Locations.loc
+R69421 Coq.Lists.List.nil
+R69428 Coq.Lists.List.nil
+R69438 Coq.Lists.List "x :: y" list_scope
+R69478 Coq.Lists.List.nil
+R69485 Coq.Lists.List.nil
+R69500 Coq.Lists.List "x :: y" list_scope
+R69518 Coq.Lists.List "x :: y" list_scope
+R69511 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R69368 Coq.Lists.List.list
+R69373 Locations.loc
+R69368 Coq.Lists.List.list
+R69373 Locations.loc
+R69660 Coq.Init.Logic "A \/ B" type_scope
+R69656 Coq.Init.Logic "x = y" type_scope
+R69663 Locations.diff
+R69642 Coq.Lists.List.In
+R69621 Coq.Lists.List.In
+R69595 Coq.Lists.List.list
+R69600 Locations.loc
+R69595 Coq.Lists.List.list
+R69600 Locations.loc
+R69725 Parallelmove.no_overlap
+R69786 Parallelmove.getdst
+R69808 Coq.Lists.List "x ++ y" list_scope
+R69794 Parallelmove.StateToMove
+R69811 Parallelmove.StateBeing
+R69741 Parallelmove.getsrc
+R69763 Coq.Lists.List "x ++ y" list_scope
+R69749 Parallelmove.StateToMove
+R69766 Parallelmove.StateBeing
+R69712 Parallelmove.State
+R69868 Parallelmove.no_overlap
+R69891 Parallelmove.getdst
+R69880 Parallelmove.getsrc
+R70014 Parallelmove.noOverlap_aux
+R70031 Parallelmove.getdst
+R69992 Coq.Init.Logic "A \/ B" type_scope
+R69988 Coq.Init.Logic "x = y" type_scope
+R69995 Locations.diff
+R69965 Coq.Lists.List.In
+R69971 Parallelmove.getdst
+R69959 Parallelmove.Reg
+R70177 Locations.diff_sym
+R70177 Locations.diff_sym
+R70349 Parallelmove.noOverlap
+R70374 Coq.Lists.List "x ++ y" list_scope
+R70360 Parallelmove.StateToMove
+R70377 Parallelmove.StateBeing
+R70326 Parallelmove.no_overlap_state
+R70468 Coq.Lists.List "x ++ y" list_scope
+R70454 Parallelmove.StateToMove
+R70471 Parallelmove.StateBeing
+R70468 Coq.Lists.List "x ++ y" list_scope
+R70454 Parallelmove.StateToMove
+R70471 Parallelmove.StateBeing
+R70526 Parallelmove.Indst_noOverlap_aux
+R70526 Parallelmove.Indst_noOverlap_aux
+R70775 Coq.Init.Logic "x = y" type_scope
+R70757 Parallelmove.get
+R70762 Parallelmove.pexec
+R70777 Parallelmove.get
+R70782 Parallelmove.sexec
+R70789 Parallelmove.StateDone
+R70800 Parallelmove.Pmov
+R70805 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R70809 Coq.Lists.List.nil
+R70814 Coq.Lists.List.nil
+R70735 Coq.Init.Logic "A \/ B" type_scope
+R70731 Coq.Init.Logic "x = y" type_scope
+R70738 Locations.diff
+R70709 Coq.Lists.List.In
+R70715 Parallelmove.getdst
+R70703 Parallelmove.Reg
+R70672 Parallelmove.notemporary
+R70660 Parallelmove.noTmp
+R70638 Parallelmove.no_overlap_list
+R70621 Parallelmove.simpleDest
+R70882 Parallelmove.Fpmov_correct
+R70896 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R70900 Coq.Lists.List.nil
+R70905 Coq.Lists.List.nil
+R70951 Parallelmove.SB_Pmov
+R70968 Parallelmove.STM_Pmov
+R70882 Parallelmove.Fpmov_correct
+R70896 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R70900 Coq.Lists.List.nil
+R70905 Coq.Lists.List.nil
+R70951 Parallelmove.SB_Pmov
+R70968 Parallelmove.STM_Pmov
+R71001 Parallelmove.app_nil
+R71001 Parallelmove.app_nil
+R71001 Parallelmove.app_nil
+R71001 Parallelmove.app_nil
+R71086 Parallelmove.app_nil
+R71086 Parallelmove.app_nil
+R71086 Parallelmove.app_nil
+R71086 Parallelmove.app_nil
+R71127 Parallelmove.no_overlap_noOverlap
+R71148 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R71152 Coq.Lists.List.nil
+R71157 Coq.Lists.List.nil
+R71127 Parallelmove.no_overlap_noOverlap
+R71148 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R71152 Coq.Lists.List.nil
+R71157 Coq.Lists.List.nil
+R71282 Parallelmove.app_nil
+R71282 Parallelmove.app_nil
+R71282 Parallelmove.app_nil
+R71530 Coq.Init.Logic "x = y" type_scope
+R71522 Parallelmove.get
+R71532 Parallelmove.get
+R71537 Parallelmove.sexec
+R71544 Parallelmove.StateDone
+R71555 Parallelmove.Pmov
+R71560 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R71564 Coq.Lists.List.nil
+R71569 Coq.Lists.List.nil
+R71506 Parallelmove.noWrite
+R71485 Coq.Init.Logic "A \/ B" type_scope
+R71481 Coq.Init.Logic "x = y" type_scope
+R71488 Locations.diff
+R71459 Coq.Lists.List.In
+R71465 Parallelmove.getdst
+R71453 Parallelmove.Reg
+R71422 Parallelmove.notemporary
+R71410 Parallelmove.noTmp
+R71388 Parallelmove.no_overlap_list
+R71371 Parallelmove.simpleDest
+R71364 Parallelmove.Reg
+R71354 Parallelmove.Env
+R71342 Parallelmove.Moves
+R71659 Parallelmove.Fpmov_correctMoves
+R71659 Parallelmove.Fpmov_correctMoves
+R71756 Locations.eq
+R71756 Locations.eq
+R71804 Locations.diff
+R71804 Locations.diff
+R71844 Locations.same_not_diff
+R71844 Locations.same_not_diff
+R71895 Parallelmove.get_update_diff
+R71895 Parallelmove.get_update_diff
+R71936 Parallelmove.get_noWrite
+R71936 Parallelmove.get_noWrite
+R72078 Locations.diff
+R72047 Parallelmove.simpleDest
+R72068 Coq.Lists.List "x :: y" list_scope
+R72059 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R72032 Coq.Lists.List.In
+R72035 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R72023 Parallelmove.Moves
+R72013 Parallelmove.Reg
+R72013 Parallelmove.Reg
+R72013 Parallelmove.Reg
+R72013 Parallelmove.Reg
+R72210 Locations.diff_sym
+R72210 Locations.diff_sym
+R72267 Parallelmove.simpleDest_pop2
+R72267 Parallelmove.simpleDest_pop2
+R72447 Coq.Init.Logic "x = y" type_scope
+R72429 Parallelmove.get
+R72434 Parallelmove.pexec
+R72449 Parallelmove.get
+R72392 Parallelmove.simpleDest
+R72382 Coq.Lists.List.In
+R72373 Parallelmove.Moves
+R72362 Parallelmove.Move
+R72352 Parallelmove.Env
+R72513 Coq.Lists.List.in_inv
+R72513 Coq.Lists.List.in_inv
+R72558 Parallelmove.get_update_id
+R72558 Parallelmove.get_update_id
+R72617 Parallelmove.get_update_diff
+R72617 Parallelmove.get_update_diff
+R72658 Parallelmove.simpleDest_pop
+R72673 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R72658 Parallelmove.simpleDest_pop
+R72673 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R72709 Parallelmove.In_SD_diff
+R72709 Parallelmove.In_SD_diff
+R72850 Parallelmove.notemporary
+R72838 Parallelmove.noTmp
+R72823 Coq.Lists.List.In
+R72826 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R72815 Parallelmove.Moves
+R72805 Parallelmove.Reg
+R72805 Parallelmove.Reg
+R73130 Coq.Lists.List.In
+R73136 Parallelmove.getdst
+R73114 Coq.Lists.List.In
+R73117 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R73382 Locations.diff
+R73351 Parallelmove.simpleDest
+R73372 Coq.Lists.List "x :: y" list_scope
+R73363 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R73332 Coq.Lists.List.In
+R73338 Parallelmove.getdst
+R73323 Parallelmove.Moves
+R73313 Parallelmove.Reg
+R73313 Parallelmove.Reg
+R73313 Parallelmove.Reg
+R73536 Locations.diff_sym
+R73536 Locations.diff_sym
+R73625 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R73604 Parallelmove.simpleDest_pop2
+R73625 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R73604 Parallelmove.simpleDest_pop2
+R73787 Coq.Init.Logic "A \/ B" type_scope
+R73783 Coq.Init.Logic "x = y" type_scope
+R73790 Locations.diff
+R73761 Coq.Lists.List.In
+R73767 Parallelmove.getdst
+R73755 Parallelmove.Reg
+R73727 Parallelmove.simpleDest
+R73711 Coq.Lists.List.In
+R73714 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R73702 Parallelmove.Moves
+R73692 Parallelmove.Reg
+R73692 Parallelmove.Reg
+R73994 Parallelmove.In_SD_diff'
+R73994 Parallelmove.In_SD_diff'
+R74062 Locations.diff_sym
+R74083 Parallelmove.In_SD_diff
+R74062 Locations.diff_sym
+R74083 Parallelmove.In_SD_diff
+R74145 Parallelmove.simpleDest_pop
+R74160 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R74145 Parallelmove.simpleDest_pop
+R74160 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R74228 Coq.Init.Logic "x = y" type_scope
+R74219 Parallelmove.getdst
+R74230 Coq.Lists.List.map
+R74244 Coq.Init.Datatypes.snd
+R74370 Coq.Init.Logic "x = y" type_scope
+R74361 Parallelmove.getsrc
+R74372 Coq.Lists.List.map
+R74386 Coq.Init.Datatypes.fst
+R74673 Coq.Init.Logic "x = y" type_scope
+R74624 Parallelmove.get
+R74629 Parallelmove.sexec
+R74636 Parallelmove.StateDone
+R74647 Parallelmove.Pmov
+R74652 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R74656 Coq.Lists.List.nil
+R74661 Coq.Lists.List.nil
+R74675 Parallelmove.get
+R74591 Parallelmove.noTmp
+R74569 Parallelmove.no_overlap_list
+R74552 Parallelmove.simpleDest
+R74541 Coq.Lists.List.In
+R74533 Parallelmove.Move
+R74523 Parallelmove.Env
+R74511 Parallelmove.Moves
+R74761 Parallelmove.Fpmov_correctMoves
+R74761 Parallelmove.Fpmov_correctMoves
+R74846 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R74820 Parallelmove.pexec_correct
+R74846 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R74820 Parallelmove.pexec_correct
+R74869 Parallelmove.In_noTmp_notempo
+R74869 Parallelmove.In_noTmp_notempo
+R74907 Parallelmove.In_SD_no_o
+R74907 Parallelmove.In_SD_no_o
+R74999 Parallelmove.noWrite
+R74972 Locations.notin
+R74985 Parallelmove.getdst
+R75114 Locations.diff_sym
+R75114 Locations.diff_sym
+R75289 Parallelmove.noTmp
+R75249 Locations.disjoint
+R75273 Conventions.temporaries
+R75263 Parallelmove.getdst
+R75209 Locations.disjoint
+R75233 Conventions.temporaries
+R75223 Parallelmove.getsrc
+R75360 Parallelmove.getsrc
+R75374 Parallelmove.getdst
+R75360 Parallelmove.getsrc
+R75374 Parallelmove.getdst
+R75451 Locations.type
+R75451 Locations.type
+R75590 Locations.type
+R75590 Locations.type
+R75724 Locations.disjoint_cons_left
+R75724 Locations.disjoint_cons_left
+R75768 Locations.disjoint_cons_left
+R75768 Locations.disjoint_cons_left
+R76027 Coq.Init.Logic "x = y" type_scope
+R75976 Parallelmove.sexec
+R75983 Parallelmove.StateDone
+R75994 Parallelmove.Pmov
+R75999 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R76003 Coq.Lists.List.nil
+R76008 Coq.Lists.List.nil
+R76020 Locations.R
+R76022 Locations.IT3
+R76033 Locations.R
+R76035 Locations.IT3
+R75934 Locations.disjoint
+R75958 Conventions.temporaries
+R75948 Parallelmove.getdst
+R75894 Locations.disjoint
+R75918 Conventions.temporaries
+R75908 Parallelmove.getsrc
+R75872 Parallelmove.no_overlap_list
+R75855 Parallelmove.simpleDest
+R76105 Parallelmove.Fpmov_correctMoves
+R76105 Parallelmove.Fpmov_correctMoves
+R76199 Parallelmove.get_noWrite
+R76214 Locations.R
+R76216 Locations.IT3
+R76199 Parallelmove.get_noWrite
+R76214 Locations.R
+R76216 Locations.IT3
+R76281 Parallelmove.notindst_nW
+R76281 Parallelmove.notindst_nW
+R76301 Locations.disjoint_notin
+R76320 Conventions.temporaries
+R76301 Locations.disjoint_notin
+R76320 Conventions.temporaries
+R76340 Locations.disjoint_sym
+R76340 Locations.disjoint_sym
+R76399 Parallelmove.disjoint_tmp__noTmp
+R76399 Parallelmove.disjoint_tmp__noTmp
+R76465 Locations.type
+R76465 Locations.type
+R76555 Parallelmove.getdst
+R76531 Locations.in_notin_diff
+R76555 Parallelmove.getdst
+R76531 Locations.in_notin_diff
+R76602 Conventions.temporaries
+R76578 Locations.disjoint_notin
+R76602 Conventions.temporaries
+R76578 Locations.disjoint_notin
+R76627 Locations.disjoint_sym
+R76627 Locations.disjoint_sym
+R76913 Coq.Init.Logic "x = y" type_scope
+R76849 Coq.Lists.List.map
+R76903 Parallelmove.getdst
+R76859 Parallelmove.sexec
+R76866 Parallelmove.StateDone
+R76877 Parallelmove.Pmov
+R76882 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R76886 Coq.Lists.List.nil
+R76891 Coq.Lists.List.nil
+R76917 Coq.Lists.List.map
+R76930 Parallelmove.getsrc
+R76808 Locations.disjoint
+R76832 Conventions.temporaries
+R76822 Parallelmove.getdst
+R76768 Locations.disjoint
+R76792 Conventions.temporaries
+R76782 Parallelmove.getsrc
+R76746 Parallelmove.no_overlap_list
+R76729 Parallelmove.simpleDest
+R76964 Parallelmove.getsrc_map
+R76984 Parallelmove.getdst_map
+R77004 Coqlib.list_map_compose
+R77031 Coqlib.list_map_compose
+R77055 Coqlib.list_map_exten
+R76964 Parallelmove.getsrc_map
+R76984 Parallelmove.getdst_map
+R77004 Coqlib.list_map_compose
+R77031 Coqlib.list_map_compose
+R77055 Coqlib.list_map_exten
+R77091 Parallelmove.Fpmov_correct2
+R77091 Parallelmove.Fpmov_correct2
+R77196 Parallelmove.disjoint_tmp__noTmp
+R77196 Parallelmove.disjoint_tmp__noTmp
+R77504 Coq.Init.Logic "x = y" type_scope
+R77459 Parallelmove.sexec
+R77466 Parallelmove.StateDone
+R77477 Parallelmove.Pmov
+R77482 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R77486 Coq.Lists.List.nil
+R77491 Coq.Lists.List.nil
+R77429 Locations.notin
+R77441 Conventions.temporaries
+R77402 Locations.notin
+R77415 Parallelmove.getdst
+R77351 Locations.disjoint
+R77375 Conventions.temporaries
+R77365 Parallelmove.getdst
+R77311 Locations.disjoint
+R77335 Conventions.temporaries
+R77325 Parallelmove.getsrc
+R77289 Parallelmove.no_overlap_list
+R77272 Parallelmove.simpleDest
+R77539 Parallelmove.Fpmov_correct1
+R77539 Parallelmove.Fpmov_correct1
+R77622 Parallelmove.disjoint_tmp__noTmp
+R77622 Parallelmove.disjoint_tmp__noTmp
+R77711 Locations.type
+R77711 Locations.type
+R78074 Locations.eq
+R78074 Locations.eq
+R78186 Parallelmove.getdst
+R78162 Locations.in_notin_diff
+R78186 Parallelmove.getdst
+R78162 Locations.in_notin_diff
+R78209 Parallelmove.notindst_nW
+R78209 Parallelmove.notindst_nW
+FAllocation
+R409 Registers.add
+R442 Registers.remove
+R536 Coq.Init.Datatypes.None
+R549 Coq.Init.Datatypes.Some
+R507 Registers.t
+R490 Coq.Init.Datatypes.option
+R497 Registers.reg
+R657 Coq.Init.Datatypes.inl
+R682 Coq.Init.Datatypes.inr
+R627 Registers.t
+R613 Coq.Init.Datatypes "x + y" type_scope
+R609 Registers.reg
+R615 AST.ident
+R780 Registers.t
+R756 Registers.t
+R741 Coq.Lists.List.list
+R746 Registers.reg
+R812 Coq.Lists.List.nil
+R829 Coq.Lists.List "x :: y" list_scope
+R756 Registers.t
+R741 Coq.Lists.List.list
+R746 Registers.reg
+R960 Registers.t
+R936 Registers.t
+R921 Coq.Lists.List.list
+R926 Registers.reg
+R992 Coq.Lists.List.nil
+R1009 Coq.Lists.List "x :: y" list_scope
+R936 Registers.t
+R921 Coq.Lists.List.list
+R926 Registers.reg
+R1141 Registers.t
+R1172 Maps "a ! b"
+R1164 RTL.fn_code
+R1185 Coq.Init.Datatypes.None
+R1209 Coq.Init.Datatypes.Some
+R1246 RTL.Inop
+R1280 RTL.Iop
+R1314 Registers.mem
+R1352 Allocation.reg_list_live
+R1433 RTL.Iload
+R1477 Registers.mem
+R1515 Allocation.reg_list_live
+R1596 RTL.Istore
+R1638 Allocation.reg_list_live
+R1686 RTL.Icall
+R1724 Allocation.reg_list_live
+R1755 Allocation.reg_sum_live
+R1802 RTL.Icond
+R1842 Allocation.reg_list_live
+R1875 RTL.Ireturn
+R1903 Allocation.reg_option_live
+R1129 Registers.t
+R1115 RTL.node
+R1096 RTL.function
+R2036 Coq.Init.Datatypes.option
+R2044 Maps.t
+R2051 Registers.t
+R2066 Allocation.fixpoint
+R2120 Coq.Lists.List.nil
+R2108 Allocation.transfer
+R2096 RTL.fn_nextpc
+R2079 RTL.successors
+R2021 RTL.function
+R2225 Locations.mreg
+R2252 Locations.R
+R2265 Locations.S
+R2278 Locations.slot_type
+R2295 AST.Tint
+R2303 Locations.IT1
+R2309 AST.Tfloat
+R2319 Locations.FT1
+R2218 Locations.loc
+R2437 Coq.Lists.List.list
+R2442 Locations.mreg
+R2388 Coq.Lists.List.list
+R2393 Locations.mreg
+R2388 Coq.Lists.List.list
+R2393 Locations.mreg
+R2364 Coq.Lists.List.list
+R2369 Locations.loc
+R2489 Coq.Lists.List "x :: y" list_scope
+R2500 Coq.Lists.List "x :: y" list_scope
+R2512 Coq.Lists.List "x :: y" list_scope
+R2645 Coq.Lists.List "x :: y" list_scope
+R2550 Locations.R
+R2567 Locations.S
+R2580 Locations.slot_type
+R2597 AST.Tint
+R2611 AST.Tfloat
+R2687 Coq.Lists.List.nil
+R2388 Coq.Lists.List.list
+R2393 Locations.mreg
+R2388 Coq.Lists.List.list
+R2393 Locations.mreg
+R2364 Coq.Lists.List.list
+R2369 Locations.loc
+R2741 Allocation.regs_for_rec
+R2791 Coq.Lists.List "x :: y" list_scope
+R2787 Locations.FT1
+R2798 Coq.Lists.List "x :: y" list_scope
+R2794 Locations.FT2
+R2805 Coq.Lists.List "x :: y" list_scope
+R2801 Locations.FT3
+R2808 Coq.Lists.List.nil
+R2764 Coq.Lists.List "x :: y" list_scope
+R2760 Locations.IT1
+R2771 Coq.Lists.List "x :: y" list_scope
+R2767 Locations.IT2
+R2778 Coq.Lists.List "x :: y" list_scope
+R2774 Locations.IT3
+R2781 Coq.Lists.List.nil
+R2726 Coq.Lists.List.list
+R2731 Locations.loc
+R2946 Locations.R
+R2957 Locations.mreg_eq
+R2984 LTL.Bop
+R2998 Coq.Lists.List "x :: y" list_scope
+R3001 Coq.Lists.List.nil
+R2988 Op.Omove
+R3016 Locations.S
+R3024 LTL.Bgetstack
+R2915 LTL.block
+R2905 Locations.mreg
+R2894 Locations.loc
+R3130 Locations.R
+R3141 Locations.mreg_eq
+R3168 LTL.Bop
+R3183 Coq.Lists.List "x :: y" list_scope
+R3186 Coq.Lists.List.nil
+R3172 Op.Omove
+R3200 Locations.S
+R3208 LTL.Bsetstack
+R3099 LTL.block
+R3090 Locations.loc
+R3078 Locations.mreg
+R3362 LTL.block
+R3295 LTL.block
+R3280 Coq.Lists.List.list
+R3285 Locations.mreg
+R3263 Coq.Lists.List.list
+R3268 Locations.loc
+R3402 Coq.Lists.List "x :: y" list_scope
+R3412 Coq.Lists.List "x :: y" list_scope
+R3427 Allocation.add_reload
+R3295 LTL.block
+R3280 Coq.Lists.List.list
+R3285 Locations.mreg
+R3263 Coq.Lists.List.list
+R3268 Locations.loc
+R3548 Locations.eq
+R3605 Locations.R
+R3624 Allocation.add_spill
+R3652 Locations.R
+R3668 Allocation.add_reload
+R3694 Locations.S
+R3700 Locations.S
+R3804 Allocation.add_reload
+R3824 Allocation.add_spill
+R3743 Locations.slot_type
+R3761 AST.Tint
+R3769 Locations.IT1
+R3775 AST.Tfloat
+R3785 Locations.FT1
+R3533 LTL.block
+R3524 Locations.loc
+R3524 Locations.loc
+R3915 Parallelmove.Moves
+R3890 Coq.Lists.List.list
+R3895 Locations.loc
+R3890 Coq.Lists.List.list
+R3895 Locations.loc
+R3950 Coq.Lists.List.nil
+R3960 Coq.Lists.List.nil
+R3970 Coq.Lists.List "x :: y" list_scope
+R3979 Coq.Lists.List.nil
+R3986 Coq.Lists.List.nil
+R3996 Coq.Lists.List "x :: y" list_scope
+R4007 Coq.Lists.List "x :: y" list_scope
+R4025 Coq.Lists.List "x :: y" list_scope
+R4018 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R3890 Coq.Lists.List.list
+R3895 Locations.loc
+R3890 Coq.Lists.List.list
+R3895 Locations.loc
+R4119 Parallelmove.P_move
+R4140 Allocation.listsLoc2Moves
+R4103 Coq.Lists.List.list
+R4108 Locations.loc
+R4103 Coq.Lists.List.list
+R4108 Locations.loc
+R4226 LTL.block
+R4237 Coq.Lists.List.fold_left
+R4302 Allocation.parallel_move_order
+R4268 Allocation.add_move
+R4286 Coq.Init.Datatypes.snd
+R4278 Coq.Init.Datatypes.fst
+R4217 LTL.block
+R4203 Coq.Lists.List.list
+R4208 Locations.loc
+R4203 Coq.Lists.List.list
+R4208 Locations.loc
+R4526 Op.is_move_operation
+R4561 Coq.Init.Datatypes.Some
+R4579 Allocation.add_move
+R4597 LTL.Bgoto
+R4610 Coq.Init.Datatypes.None
+R4693 Allocation.add_reloads
+R4717 LTL.Bop
+R4736 Allocation.add_spill
+R4756 LTL.Bgoto
+R4672 Allocation.reg_for
+R4637 Allocation.regs_for
+R4509 LTL.node
+R4500 Locations.loc
+R4484 Coq.Lists.List.list
+R4489 Locations.loc
+R4466 Op.operation
+R4960 Allocation.add_reloads
+R4988 LTL.Bload
+R5017 Allocation.add_spill
+R5037 LTL.Bgoto
+R4943 Allocation.reg_for
+R4912 Allocation.regs_for
+R4888 LTL.node
+R4879 Locations.loc
+R4863 Coq.Lists.List.list
+R4868 Locations.loc
+R4824 Op.addressing
+R4803 AST.memory_chunk
+R5182 Allocation.regs_for
+R5196 Coq.Lists.List "x :: y" list_scope
+R5214 Coq.Lists.List.nil
+R5221 LTL.Breturn
+R5279 Coq.Lists.List "x :: y" list_scope
+R5297 Allocation.add_reloads
+R5348 LTL.Bstore
+R5378 LTL.Bgoto
+R5329 Coq.Lists.List "x :: y" list_scope
+R5314 Coq.Lists.List "x :: y" list_scope
+R5165 LTL.node
+R5156 Locations.loc
+R5140 Coq.Lists.List.list
+R5145 Locations.loc
+R5100 Op.addressing
+R5079 AST.memory_chunk
+R5603 Coq.Init.Datatypes.inl
+R5620 Allocation.add_reload
+R5647 Allocation.parallel_move
+R5683 LTL.Bcall
+R5706 Allocation.add_spill
+R5726 LTL.Bgoto
+R5694 Coq.Init.Datatypes.inl
+R5700 Locations.IT3
+R5634 Locations.IT3
+R5743 Coq.Init.Datatypes.inr
+R5759 Allocation.parallel_move
+R5793 LTL.Bcall
+R5815 Allocation.add_spill
+R5835 LTL.Bgoto
+R5804 Coq.Init.Datatypes.inr
+R5564 Conventions.loc_result
+R5528 Conventions.loc_arguments
+R5504 LTL.node
+R5495 Locations.loc
+R5479 Coq.Lists.List.list
+R5484 Locations.loc
+R5443 Coq.Init.Datatypes "x + y" type_scope
+R5439 Locations.loc
+R5445 AST.ident
+R5422 AST.signature
+R5965 Allocation.add_reloads
+R5989 LTL.Bcond
+R5946 Allocation.regs_for
+R5922 LTL.node
+R5922 LTL.node
+R5899 Coq.Lists.List.list
+R5904 Locations.loc
+R5881 Op.condition
+R6107 Coq.Init.Datatypes.Some
+R6119 Allocation.add_reload
+R6151 LTL.Breturn
+R6135 Conventions.loc_result
+R6163 Coq.Init.Datatypes.None
+R6175 LTL.Bop
+R6207 LTL.Breturn
+R6191 Conventions.loc_result
+R6186 Coq.Lists.List.nil
+R6179 Op.Oundef
+R6068 Coq.Init.Datatypes.option
+R6075 Locations.loc
+R6048 AST.signature
+R6285 LTL.block
+R6264 LTL.block
+R6250 Coq.Lists.List.list
+R6255 Locations.loc
+R6314 Coq.Lists.List.nil
+R6331 Coq.Lists.List "x :: y" list_scope
+R6327 Locations.R
+R6340 LTL.Bop
+R6351 Coq.Lists.List.nil
+R6344 Op.Oundef
+R6383 Coq.Lists.List "x :: y" list_scope
+R6379 Locations.S
+R6264 LTL.block
+R6250 Coq.Lists.List.list
+R6255 Locations.loc
+R6528 Allocation.parallel_move
+R6571 Allocation.add_undefs
+R6590 LTL.Bgoto
+R6543 Conventions.loc_parameters
+R6517 LTL.node
+R6482 Coq.Lists.List.list
+R6487 Locations.loc
+R6463 Coq.Lists.List.list
+R6468 Locations.loc
+R6443 AST.signature
+R6780 LTL.block
+R6816 RTL.Inop
+R6832 LTL.Bgoto
+R6844 RTL.Iop
+R6874 Registers.mem
+R6893 Maps "a !! b"
+R6978 LTL.Bgoto
+R6911 Allocation.add_op
+R6922 Coq.Lists.List.map
+R6990 RTL.Iload
+R7030 Registers.mem
+R7049 Maps "a !! b"
+R7144 LTL.Bgoto
+R7067 Allocation.add_load
+R7088 Coq.Lists.List.map
+R7156 RTL.Istore
+R7194 Allocation.add_store
+R7216 Coq.Lists.List.map
+R7257 RTL.Icall
+R7291 Allocation.add_call
+R7331 Coq.Lists.List.map
+R7305 Coqlib.sum_left_map
+R7391 RTL.Icond
+R7427 Allocation.add_cond
+R7442 Coq.Lists.List.map
+R7479 RTL.Ireturn
+R7503 Allocation.add_return
+R7530 Coqlib.option_map
+R7515 RTL.fn_sig
+R6761 RTL.instruction
+R6747 LTL.node
+R6728 Locations.loc
+R6721 Registers.reg
+R6695 Maps.t
+R6702 Registers.t
+R6674 RTL.function
+R7688 LTL.code
+R7925 Maps.set
+R7953 Allocation.add_entry
+R8045 Coq.Lists.List.map
+R7994 Coq.Lists.List.map
+R8011 RTL.fn_params
+R7964 RTL.fn_sig
+R7798 Registers.elements
+R7815 Allocation.reg_list_dead
+R7883 Allocation.transfer
+R7907 Maps "a !! b"
+R7830 RTL.fn_params
+R7759 RTL.fn_nextpc
+R7718 RTL.fn_entrypoint
+R7676 LTL.code
+R7656 Locations.loc
+R7649 Registers.reg
+R7623 Maps.t
+R7630 Registers.t
+R7602 RTL.function
+R8386 Coq.Init.Logic "A \/ B" type_scope
+R8353 Coqlib.Plt
+R8361 Coq.NArith.BinPos.Psucc
+R8368 RTL.fn_nextpc
+R8396 Coq.Init.Logic "x = y" type_scope
+R8392 Maps "a ! b"
+R8398 Coq.Init.Datatypes.None
+R8346 LTL.node
+R8293 Allocation.transf_entrypoint
+R8222 Maps.map
+R8262 RTL.fn_code
+R8233 Allocation.transf_instr
+R8203 Locations.loc
+R8196 Registers.reg
+R8170 Maps.t
+R8177 Registers.t
+R8149 RTL.function
+R8427 Coqlib.plt
+R8435 Coq.NArith.BinPos.Psucc
+R8442 RTL.fn_nextpc
+R8427 Coqlib.plt
+R8435 Coq.NArith.BinPos.Psucc
+R8442 RTL.fn_nextpc
+R8507 Coq.Init.Logic "x <> y" type_scope
+R8510 RTL.fn_nextpc
+R8507 Coq.Init.Logic "x <> y" type_scope
+R8510 RTL.fn_nextpc
+R8566 Coqlib.Plt_succ
+R8566 Coqlib.Plt_succ
+R8586 Coq.Init.Logic "~ x" type_scope
+R8589 Coqlib.Plt
+R8597 RTL.fn_nextpc
+R8586 Coq.Init.Logic "~ x" type_scope
+R8589 Coqlib.Plt
+R8597 RTL.fn_nextpc
+R8645 Coqlib.Plt_trans_succ
+R8645 Coqlib.Plt_trans_succ
+R8718 Maps.gso
+R8718 Maps.gso
+R8758 Maps.gmap
+R8758 Maps.gmap
+R8779 RTL.fn_code_wf
+R8779 RTL.fn_code_wf
+R8915 Coq.Init.Datatypes.option
+R8922 LTL.function
+R8946 RTLtyping.type_rtl_function
+R8975 Coq.Init.Datatypes.None
+R8983 Coq.Init.Datatypes.None
+R8992 Coq.Init.Datatypes.Some
+R9014 Allocation.analyze
+R9035 Coq.Init.Datatypes.None
+R9043 Coq.Init.Datatypes.None
+R9054 Coq.Init.Datatypes.Some
+R9168 Coloring.regalloc
+R9207 Coq.Init.Datatypes.None
+R9215 Coq.Init.Datatypes.None
+R9228 Coq.Init.Datatypes.Some
+R9253 Coq.Init.Datatypes.Some
+R9259 LTL.mkfunction
+R9499 Allocation.transf_entrypoint_wf
+R9469 RTL.fn_nextpc
+R9347 Allocation.transf_entrypoint
+R9399 Maps.map
+R9439 RTL.fn_code
+R9410 Allocation.transf_instr
+R9314 RTL.fn_stacksize
+R9287 RTL.fn_sig
+R9128 Allocation.transfer
+R9147 Maps "a !! b"
+R9087 RTL.fn_entrypoint
+R8899 RTL.function
+R9607 Coq.Init.Datatypes.option
+R9614 LTL.program
+R9631 AST.transform_partial_program
+R9657 Allocation.transf_function
+R9592 RTL.program
+FAllocproof_aux
+R226 LTL.genv
+R250 Values.val
+R319 Coq.Init.Logic "'exists' x , p" type_scope
+R389 Coq.Init.Logic "A /\ B" type_scope
+R337 LTL.exec_instrs
+R356 Allocation.add_move
+R415 Coq.Init.Logic "A /\ B" type_scope
+R406 Coq.Init.Logic "x = y" type_scope
+R518 Coq.Init.Logic "x = y" type_scope
+R489 Locations.diff
+R501 Locations.R
+R503 Locations.FT1
+R467 Locations.diff
+R479 Locations.R
+R481 Locations.IT1
+R442 Locations.diff
+R581 Coq.Init.Logic "'exists' x , p" type_scope
+R646 Coq.Init.Logic "A /\ B" type_scope
+R597 LTL.exec_instrs
+R616 Allocation.add_move
+R684 Coq.Init.Logic "A /\ B" type_scope
+R660 Coq.Init.Logic "x = y" type_scope
+R662 Parallelmove.update
+R780 Coq.Init.Logic "x = y" type_scope
+R783 Parallelmove.update
+R751 Locations.diff
+R763 Locations.R
+R765 Locations.FT1
+R729 Locations.diff
+R741 Locations.R
+R743 Locations.IT1
+R707 Locations.diff
+R937 Parallelmove.get_update_id
+R937 Parallelmove.get_update_id
+R1035 Parallelmove.get_update_diff
+R1035 Parallelmove.get_update_diff
+R1116 Locations.diff_sym
+R1116 Locations.diff_sym
+R1252 Coq.Init.Logic "x = y" type_scope
+R1237 Coq.Lists.List.In
+R1213 Coq.Init.Logic "x = y" type_scope
+R1205 Coq.Lists.List.map
+R1215 Coq.Lists.List.map
+R1416 Parallelmove.Moves
+R1450 Coq.Lists.List.nil
+R1457 Coq.Init.Logic.True
+R1473 Coq.Lists.List "x :: y" list_scope
+R1466 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R1504 Coq.Init.Logic "A /\ B" type_scope
+R1481 Locations.notin
+R1494 Parallelmove.getdst
+R1416 Parallelmove.Moves
+R1564 Coq.Lists.List "x :: y" list_scope
+R1558 Locations.R
+R1560 Locations.IT1
+R1574 Coq.Lists.List "x :: y" list_scope
+R1568 Locations.R
+R1570 Locations.FT1
+R1577 Coq.Lists.List.nil
+R1654 Parallelmove.no_overlap_list
+R1625 Parallelmove.no_overlap_list
+R1644 Coq.Lists.List "x :: y" list_scope
+R1922 Coq.Init.Logic "'exists' x , p" type_scope
+R2081 Coq.Init.Logic "A /\ B" type_scope
+R1938 LTL.exec_instrs
+R1965 Coq.Lists.List.fold_left
+R2026 Allocation.add_move
+R2045 Coq.Init.Datatypes.snd
+R2036 Coq.Init.Datatypes.fst
+R2016 Coq.Init.Datatypes "x * y" type_scope
+R2012 Locations.loc
+R2018 Locations.loc
+R1992 LTL.block
+R2238 Coq.Init.Logic "x = y" type_scope
+R2241 Parallelmove.sexec
+R2199 Locations.diff
+R2211 Locations.R
+R2223 Locations.FT1
+R2163 Locations.diff
+R2175 Locations.R
+R2187 Locations.IT1
+R2139 Coq.Init.Logic "A \/ B" type_scope
+R2135 Coq.Init.Logic "x = y" type_scope
+R2142 Locations.diff
+R2113 Coq.Lists.List.In
+R2119 Parallelmove.getdst
+R1879 Locations.disjoint
+R1903 Allocproof_aux.temporaries1
+R1893 Parallelmove.getsrc
+R1838 Locations.disjoint
+R1862 Allocproof_aux.temporaries1
+R1852 Parallelmove.getdst
+R1816 Parallelmove.no_overlap_list
+R2340 LTL.exec_refl
+R2340 LTL.exec_refl
+R2419 Allocation.add_move
+R2485 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R2460 Allocproof_aux.no_overlap_list_pop
+R2505 Locations.disjoint_cons_left
+R2541 Locations.disjoint_cons_left
+R2419 Allocation.add_move
+R2485 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R2460 Allocproof_aux.no_overlap_list_pop
+R2505 Locations.disjoint_cons_left
+R2541 Locations.disjoint_cons_left
+R2757 Allocation.add_move
+R2733 LTL.exec_trans
+R2757 Allocation.add_move
+R2733 LTL.exec_trans
+R2840 Locations.eq
+R2840 Locations.eq
+R2881 Parallelmove.get_update_id
+R2881 Parallelmove.get_update_id
+R3155 Locations.diff_sym
+R3155 Locations.diff_sym
+R3347 Coq.Init.Logic "x = y" type_scope
+R3347 Coq.Init.Logic "x = y" type_scope
+R3405 Parallelmove.get_update_diff
+R3405 Parallelmove.get_update_diff
+R3499 Locations.diff_sym
+R3499 Locations.diff_sym
+R3605 Coq.Lists.List.fold_left
+R3697 Parallelmove.P_move
+R3663 Allocation.add_move
+R3681 Coq.Init.Datatypes.snd
+R3673 Coq.Init.Datatypes.fst
+R3653 Coq.Init.Datatypes "x * y" type_scope
+R3649 Locations.loc
+R3655 Locations.loc
+R3630 LTL.block
+R3592 LTL.block
+R3559 Coq.Lists.List.list
+R3569 Coq.Init.Datatypes "x * y" type_scope
+R3565 Locations.loc
+R3571 Locations.loc
+R3767 Parallelmove.simpleDest
+R3740 Locations.norepet
+R3753 Parallelmove.getdst
+R3872 Parallelmove.notindst_nW
+R3872 Parallelmove.notindst_nW
+R3992 Coq.Init.Logic "x = y" type_scope
+R3979 Parallelmove.StateDone
+R3994 Coq.Lists.List.nil
+R3969 Coq.Init.Logic "x = y" type_scope
+R3948 Parallelmove.StateDone
+R3959 Parallelmove.stepf
+R3971 Coq.Lists.List.nil
+R4138 Locations.eq
+R4149 Coq.Init.Datatypes.fst
+R4154 Parallelmove.last
+R4162 Coq.Lists.List "x :: y" list_scope
+R4138 Locations.eq
+R4149 Coq.Init.Datatypes.fst
+R4154 Parallelmove.last
+R4162 Coq.Lists.List "x :: y" list_scope
+R4249 Locations.eq
+R4249 Locations.eq
+R4314 Locations.eq
+R4314 Locations.eq
+R4369 Parallelmove.split_move
+R4369 Parallelmove.split_move
+R4489 Locations.eq
+R4500 Coq.Init.Datatypes.fst
+R4505 Parallelmove.last
+R4513 Coq.Lists.List "x :: y" list_scope
+R4489 Locations.eq
+R4500 Coq.Init.Datatypes.fst
+R4505 Parallelmove.last
+R4513 Coq.Lists.List "x :: y" list_scope
+R4639 Coq.Init.Logic "x = y" type_scope
+R4626 Parallelmove.StateDone
+R4641 Coq.Lists.List.nil
+R4616 Coq.Init.Logic "x = y" type_scope
+R4596 Parallelmove.StateDone
+R4607 Parallelmove.Pmov
+R4618 Coq.Lists.List.nil
+R4680 Coq.Init.Wf.well_founded_ind
+R4698 Coq.Arith.Wf_nat.well_founded_ltof
+R4725 Parallelmove.mesure
+R4680 Coq.Init.Wf.well_founded_ind
+R4698 Coq.Arith.Wf_nat.well_founded_ltof
+R4725 Parallelmove.mesure
+R4803 Parallelmove.Pmov_equation
+R4803 Parallelmove.Pmov_equation
+R4898 Coq.Init.Logic "x = y" type_scope
+R4863 Parallelmove.StateDone
+R4874 Parallelmove.stepf
+R4880 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R4881 Coq.Lists.List.nil
+R4888 Coq.Lists.List "x :: y" list_scope
+R4900 Coq.Lists.List.nil
+R4932 Parallelmove.stepf1_dec
+R4951 Allocproof_aux.SDone_stepf
+R4898 Coq.Init.Logic "x = y" type_scope
+R4863 Parallelmove.StateDone
+R4874 Parallelmove.stepf
+R4880 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R4881 Coq.Lists.List.nil
+R4888 Coq.Lists.List "x :: y" list_scope
+R4900 Coq.Lists.List.nil
+R4932 Parallelmove.stepf1_dec
+R4951 Allocproof_aux.SDone_stepf
+R5019 Coq.Init.Logic "x = y" type_scope
+R4986 Parallelmove.StateDone
+R4997 Parallelmove.stepf
+R5003 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R5006 Coq.Lists.List "x :: y" list_scope
+R5021 Coq.Lists.List.nil
+R5053 Parallelmove.stepf1_dec
+R5072 Allocproof_aux.SDone_stepf
+R5019 Coq.Init.Logic "x = y" type_scope
+R4986 Parallelmove.StateDone
+R4997 Parallelmove.stepf
+R5003 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R5006 Coq.Lists.List "x :: y" list_scope
+R5021 Coq.Lists.List.nil
+R5053 Parallelmove.stepf1_dec
+R5072 Allocproof_aux.SDone_stepf
+R5161 Coq.Init.Logic "A \/ B" type_scope
+R5157 Coq.Init.Logic "x = y" type_scope
+R5164 Locations.diff
+R5134 Coq.Lists.List.In
+R5139 Conventions.temporaries
+R5205 Locations.eq
+R5205 Locations.eq
+R5601 Coq.Init.Logic "A /\ B" type_scope
+R5589 Coq.Init.Logic "x = y" type_scope
+R5579 Parallelmove.getdst
+R5591 Parallelmove.getsrc
+R5614 Coq.Init.Logic "x = y" type_scope
+R5604 Parallelmove.getdst
+R5616 Parallelmove.getsrc
+R5549 Coq.Init.Logic "x = y" type_scope
+R5536 Coq.Lists.List "x ++ y" list_scope
+R5526 Parallelmove.getdst
+R5539 Parallelmove.getdst
+R5561 Coq.Lists.List "x ++ y" list_scope
+R5551 Parallelmove.getsrc
+R5564 Parallelmove.getsrc
+R5929 Coq.Init.Logic "A \/ B" type_scope
+R5925 Coq.Init.Logic "x = y" type_scope
+R5932 Locations.diff
+R5912 Coq.Lists.List.In
+R5902 Coq.Lists.List.In
+R5885 Locations.norepet
+R6121 Locations.in_notin_diff
+R6121 Locations.in_notin_diff
+R6175 Locations.diff_sym
+R6195 Locations.in_notin_diff
+R6175 Locations.diff_sym
+R6195 Locations.in_notin_diff
+R6298 Parallelmove.no_overlap
+R6376 Parallelmove.getdst
+R6398 Coq.Lists.List "x ++ y" list_scope
+R6384 Parallelmove.StateToMove
+R6415 Coq.Lists.List "x ++ y" list_scope
+R6402 Parallelmove.StateBeing
+R6418 Parallelmove.StateDone
+R6314 Parallelmove.getsrc
+R6336 Coq.Lists.List "x ++ y" list_scope
+R6322 Parallelmove.StateToMove
+R6353 Coq.Lists.List "x ++ y" list_scope
+R6340 Parallelmove.StateBeing
+R6356 Parallelmove.StateDone
+R6285 Parallelmove.State
+R6746 Coq.Lists.List.incl_tl
+R6711 Coq.Lists.List.incl_appr
+R6663 Coq.Lists.List.incl_appl
+R6599 Coq.Lists.List.in_or_app
+R6542 Coq.Lists.List.in_or_app
+R6499 Coq.Lists.List.in_cons
+R6823 Coq.Lists.List.incl_app
+R6804 Coq.Lists.List.incl_cons
+R6887 Coq.Lists.List.In
+R6920 Coq.Lists.List.In
+R6973 Coq.Lists.List.incl
+R7139 Coq.Lists.List.In
+R7130 Coq.Init.Logic "x <> y" type_scope
+R7111 Coq.Lists.List.In
+R7119 Coq.Lists.List "x :: y" list_scope
+R7102 Coq.Lists.List.list
+R7232 Coq.Init.Logic "x = y" type_scope
+R7232 Coq.Init.Logic "x = y" type_scope
+R7328 Allocproof_aux.no_overlap_stateD
+R7303 Allocproof_aux.no_overlap_stateD
+R7289 Parallelmove.step
+R7461 Parallelmove.getsrc_app
+R7481 Parallelmove.getdst_app
+R7461 Parallelmove.getsrc_app
+R7481 Parallelmove.getdst_app
+R7461 Parallelmove.getsrc_app
+R7481 Parallelmove.getdst_app
+R7461 Parallelmove.getsrc_app
+R7481 Parallelmove.getdst_app
+R7461 Parallelmove.getsrc_app
+R7481 Parallelmove.getdst_app
+R7461 Parallelmove.getsrc_app
+R7461 Parallelmove.getsrc_app
+R7481 Parallelmove.getdst_app
+R7461 Parallelmove.getsrc_app
+R7481 Parallelmove.getdst_app
+R7461 Parallelmove.getsrc_app
+R7481 Parallelmove.getdst_app
+R7461 Parallelmove.getsrc_app
+R7481 Parallelmove.getdst_app
+R7461 Parallelmove.getsrc_app
+R7461 Parallelmove.getsrc_app
+R7481 Parallelmove.getdst_app
+R7461 Parallelmove.getsrc_app
+R7481 Parallelmove.getdst_app
+R7461 Parallelmove.getsrc_app
+R7481 Parallelmove.getdst_app
+R7461 Parallelmove.getsrc_app
+R7481 Parallelmove.getdst_app
+R7461 Parallelmove.getsrc_app
+R7481 Parallelmove.getdst_app
+R7461 Parallelmove.getsrc_app
+R7481 Parallelmove.getdst_app
+R7461 Parallelmove.getsrc_app
+R7461 Parallelmove.getsrc_app
+R7481 Parallelmove.getdst_app
+R7461 Parallelmove.getsrc_app
+R7481 Parallelmove.getdst_app
+R7461 Parallelmove.getsrc_app
+R7481 Parallelmove.getdst_app
+R7461 Parallelmove.getsrc_app
+R7481 Parallelmove.getdst_app
+R7461 Parallelmove.getsrc_app
+R7481 Parallelmove.getdst_app
+R7461 Parallelmove.getsrc_app
+R7481 Parallelmove.getdst_app
+R7461 Parallelmove.getsrc_app
+R7461 Parallelmove.getsrc_app
+R7481 Parallelmove.getdst_app
+R7461 Parallelmove.getsrc_app
+R7481 Parallelmove.getdst_app
+R7461 Parallelmove.getsrc_app
+R7481 Parallelmove.getdst_app
+R7461 Parallelmove.getsrc_app
+R7481 Parallelmove.getdst_app
+R7461 Parallelmove.getsrc_app
+R7481 Parallelmove.getdst_app
+R7461 Parallelmove.getsrc_app
+R7481 Parallelmove.getdst_app
+R7461 Parallelmove.getsrc_app
+R7593 Locations.eq
+R7603 Parallelmove.T
+R7593 Locations.eq
+R7603 Parallelmove.T
+R7627 Allocproof_aux.no_overlap_temp
+R7692 Locations.diff_sym
+R7627 Allocproof_aux.no_overlap_temp
+R7692 Locations.diff_sym
+R7742 Locations.type
+R7742 Locations.type
+R7826 Locations.eq
+R7837 Parallelmove.T
+R7826 Locations.eq
+R7837 Parallelmove.T
+R7863 Allocproof_aux.no_overlap_temp
+R7915 Locations.type
+R7863 Allocproof_aux.no_overlap_temp
+R7915 Locations.type
+R8035 Parallelmove.T
+R8009 Allocproof_aux.in_cons_noteq
+R8035 Parallelmove.T
+R8009 Allocproof_aux.in_cons_noteq
+R8035 Parallelmove.T
+R8009 Allocproof_aux.in_cons_noteq
+R8162 Allocproof_aux.no_overlap_stateD
+R8137 Allocproof_aux.no_overlap_stateD
+R8122 Parallelmove.stepp
+R8270 Allocproof_aux.no_overlapD_inv
+R8270 Allocproof_aux.no_overlapD_inv
+R8383 Allocproof_aux.no_overlap_stateD
+R8402 Parallelmove.stepf
+R8358 Allocproof_aux.no_overlap_stateD
+R8344 Parallelmove.stepInv
+R8498 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R8499 Coq.Lists.List.nil
+R8507 Parallelmove.Move
+R8516 Coq.Lists.List "x :: y" list_scope
+R8498 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R8499 Coq.Lists.List.nil
+R8507 Parallelmove.Move
+R8516 Coq.Lists.List "x :: y" list_scope
+R8536 Allocproof_aux.no_overlapD_invpp
+R8566 Parallelmove.dstep_step
+R8536 Allocproof_aux.no_overlapD_invpp
+R8566 Parallelmove.dstep_step
+R8604 Parallelmove.f2ind
+R8604 Parallelmove.f2ind
+R8734 Parallelmove.no_overlap_noOverlap
+R8734 Parallelmove.no_overlap_noOverlap
+R8848 Parallelmove.getdst_app
+R8878 Parallelmove.getsrc_app
+R8848 Parallelmove.getdst_app
+R8848 Parallelmove.getdst_app
+R8848 Parallelmove.getdst_app
+R8878 Parallelmove.getsrc_app
+R8878 Parallelmove.getsrc_app
+R8878 Parallelmove.getsrc_app
+R9037 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R9040 Coq.Lists.List "x :: y" list_scope
+R9047 Coq.Lists.List.nil
+R9055 Parallelmove.Move
+R9037 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R9040 Coq.Lists.List "x :: y" list_scope
+R9047 Coq.Lists.List.nil
+R9055 Parallelmove.Move
+R9075 Allocproof_aux.no_overlapD_invpp
+R9105 Parallelmove.dstep_step
+R9075 Allocproof_aux.no_overlapD_invpp
+R9105 Parallelmove.dstep_step
+R9143 Parallelmove.f2ind
+R9143 Parallelmove.f2ind
+R9273 Parallelmove.no_overlap_noOverlap
+R9273 Parallelmove.no_overlap_noOverlap
+R9387 Parallelmove.getdst_app
+R9417 Parallelmove.getsrc_app
+R9453 Parallelmove.app_nil
+R9387 Parallelmove.getdst_app
+R9387 Parallelmove.getdst_app
+R9387 Parallelmove.getdst_app
+R9387 Parallelmove.getdst_app
+R9417 Parallelmove.getsrc_app
+R9417 Parallelmove.getsrc_app
+R9417 Parallelmove.getsrc_app
+R9417 Parallelmove.getsrc_app
+R9453 Parallelmove.app_nil
+R9453 Parallelmove.app_nil
+R9453 Parallelmove.app_nil
+R9608 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R9611 Coq.Lists.List "x :: y" list_scope
+R9621 Coq.Lists.List "x :: y" list_scope
+R9608 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R9611 Coq.Lists.List "x :: y" list_scope
+R9621 Coq.Lists.List "x :: y" list_scope
+R9641 Allocproof_aux.no_overlapD_invpp
+R9671 Parallelmove.dstep_step
+R9641 Allocproof_aux.no_overlapD_invpp
+R9671 Parallelmove.dstep_step
+R9709 Parallelmove.f2ind
+R9709 Parallelmove.f2ind
+R9839 Parallelmove.no_overlap_noOverlap
+R9839 Parallelmove.no_overlap_noOverlap
+R9953 Parallelmove.getdst_app
+R9983 Parallelmove.getsrc_app
+R9953 Parallelmove.getdst_app
+R9953 Parallelmove.getdst_app
+R9953 Parallelmove.getdst_app
+R9953 Parallelmove.getdst_app
+R9983 Parallelmove.getsrc_app
+R9983 Parallelmove.getsrc_app
+R9983 Parallelmove.getsrc_app
+R9983 Parallelmove.getsrc_app
+R10227 Allocproof_aux.no_overlap_stateD
+R10246 Parallelmove.Pmov
+R10202 Allocproof_aux.no_overlap_stateD
+R10188 Parallelmove.stepInv
+R10290 Coq.Init.Wf.well_founded_ind
+R10308 Coq.Arith.Wf_nat.well_founded_ltof
+R10335 Parallelmove.mesure
+R10290 Coq.Init.Wf.well_founded_ind
+R10308 Coq.Arith.Wf_nat.well_founded_ltof
+R10335 Parallelmove.mesure
+R10405 Parallelmove.Pmov_equation
+R10405 Parallelmove.Pmov_equation
+R10482 Parallelmove.stepf1_dec
+R10482 Parallelmove.stepf1_dec
+R10507 Parallelmove.dstep_inv
+R10517 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R10518 Coq.Lists.List.nil
+R10525 Coq.Lists.List "x :: y" list_scope
+R10507 Parallelmove.dstep_inv
+R10517 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R10518 Coq.Lists.List.nil
+R10525 Coq.Lists.List "x :: y" list_scope
+R10548 Parallelmove.f2ind'
+R10548 Parallelmove.f2ind'
+R10568 Parallelmove.no_overlap_noOverlap
+R10568 Parallelmove.no_overlap_noOverlap
+R10696 Parallelmove.getdst_app
+R10725 Parallelmove.getsrc_app
+R10696 Parallelmove.getdst_app
+R10696 Parallelmove.getdst_app
+R10725 Parallelmove.getsrc_app
+R10725 Parallelmove.getsrc_app
+R10802 Allocproof_aux.no_overlapD_invf
+R10802 Allocproof_aux.no_overlapD_invf
+R10852 Parallelmove.stepf1_dec
+R10852 Parallelmove.stepf1_dec
+R10877 Parallelmove.dstep_inv
+R10887 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R10890 Coq.Lists.List "x :: y" list_scope
+R10877 Parallelmove.dstep_inv
+R10887 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R10890 Coq.Lists.List "x :: y" list_scope
+R10916 Parallelmove.f2ind'
+R10916 Parallelmove.f2ind'
+R10936 Parallelmove.no_overlap_noOverlap
+R10936 Parallelmove.no_overlap_noOverlap
+R11067 Parallelmove.getdst_app
+R11105 Parallelmove.getsrc_app
+R11067 Parallelmove.getdst_app
+R11067 Parallelmove.getdst_app
+R11067 Parallelmove.getdst_app
+R11067 Parallelmove.getdst_app
+R11105 Parallelmove.getsrc_app
+R11105 Parallelmove.getsrc_app
+R11105 Parallelmove.getsrc_app
+R11105 Parallelmove.getsrc_app
+R11313 Allocproof_aux.no_overlapD_invf
+R11313 Allocproof_aux.no_overlapD_invf
+R11379 Coq.Lists.List "x :: y" list_scope
+R11373 Locations.R
+R11375 Locations.IT1
+R11389 Coq.Lists.List "x :: y" list_scope
+R11383 Locations.R
+R11385 Locations.FT1
+R11399 Coq.Lists.List "x :: y" list_scope
+R11393 Locations.R
+R11395 Locations.IT3
+R11402 Coq.Lists.List.nil
+R11444 Coq.Lists.List "x :: y" list_scope
+R11438 Locations.R
+R11440 Locations.IT2
+R11454 Coq.Lists.List "x :: y" list_scope
+R11448 Locations.R
+R11450 Locations.FT2
+R11457 Coq.Lists.List.nil
+R11562 Coq.Init.Logic "A /\ B" type_scope
+R11510 Locations.disjoint
+R11547 Allocproof_aux.temporaries1_3
+R11524 Parallelmove.getsrc
+R11532 Parallelmove.StateDone
+R11568 Locations.disjoint
+R11605 Allocproof_aux.temporaries1_3
+R11582 Parallelmove.getdst
+R11590 Parallelmove.StateDone
+R11497 Parallelmove.State
+R11794 Coq.Init.Logic "A /\ B" type_scope
+R11744 Coq.Init.Logic "A \/ B" type_scope
+R11726 Coq.Lists.List.In
+R11731 Allocproof_aux.temporaries2
+R11747 Coq.Lists.List.In
+R11753 Parallelmove.getsrc
+R11776 Coq.Lists.List "x ++ y" list_scope
+R11761 Parallelmove.StateToMove
+R11779 Parallelmove.StateBeing
+R11688 Coq.Lists.List.In
+R11694 Parallelmove.getsrc
+R11702 Parallelmove.StateDone
+R11860 Coq.Init.Logic "A \/ B" type_scope
+R11842 Coq.Lists.List.In
+R11847 Allocproof_aux.temporaries2
+R11863 Coq.Lists.List.In
+R11869 Parallelmove.getdst
+R11892 Coq.Lists.List "x ++ y" list_scope
+R11877 Parallelmove.StateToMove
+R11895 Parallelmove.StateBeing
+R11804 Coq.Lists.List.In
+R11810 Parallelmove.getdst
+R11818 Parallelmove.StateDone
+R11660 Parallelmove.State
+R11660 Parallelmove.State
+R12160 Locations.diff
+R12172 Locations.R
+R12174 Locations.IT3
+R12089 Coq.Lists.List.In
+R12095 Parallelmove.getdst
+R12118 Coq.Lists.List "x ++ y" list_scope
+R12103 Parallelmove.StateToMove
+R12136 Coq.Lists.List "x ++ y" list_scope
+R12122 Parallelmove.StateBeing
+R12139 Parallelmove.StateDone
+R12054 Locations.diff
+R12066 Locations.R
+R12068 Locations.IT3
+R11982 Coq.Lists.List.In
+R11988 Parallelmove.getdst
+R12011 Coq.Lists.List "x ++ y" list_scope
+R11996 Parallelmove.StateToMove
+R12029 Coq.Lists.List "x ++ y" list_scope
+R12015 Parallelmove.StateBeing
+R12032 Parallelmove.StateDone
+R11954 Parallelmove.step
+R12259 Parallelmove.StateDone
+R12276 Parallelmove.StateToMove
+R12295 Parallelmove.StateBeing
+R12313 Parallelmove.getdst
+R12339 Parallelmove.getdst_app
+R12259 Parallelmove.StateDone
+R12259 Parallelmove.StateDone
+R12259 Parallelmove.StateDone
+R12259 Parallelmove.StateDone
+R12259 Parallelmove.StateDone
+R12276 Parallelmove.StateToMove
+R12276 Parallelmove.StateToMove
+R12276 Parallelmove.StateToMove
+R12276 Parallelmove.StateToMove
+R12276 Parallelmove.StateToMove
+R12295 Parallelmove.StateBeing
+R12295 Parallelmove.StateBeing
+R12295 Parallelmove.StateBeing
+R12295 Parallelmove.StateBeing
+R12295 Parallelmove.StateBeing
+R12313 Parallelmove.getdst
+R12313 Parallelmove.getdst
+R12313 Parallelmove.getdst
+R12313 Parallelmove.getdst
+R12313 Parallelmove.getdst
+R12339 Parallelmove.getdst_app
+R12339 Parallelmove.getdst_app
+R12339 Parallelmove.getdst_app
+R12339 Parallelmove.getdst_app
+R12339 Parallelmove.getdst_app
+R12339 Parallelmove.getdst_app
+R12339 Parallelmove.getdst_app
+R12339 Parallelmove.getdst_app
+R12339 Parallelmove.getdst_app
+R12339 Parallelmove.getdst_app
+R12339 Parallelmove.getdst_app
+R12339 Parallelmove.getdst_app
+R12339 Parallelmove.getdst_app
+R12339 Parallelmove.getdst_app
+R12339 Parallelmove.getdst_app
+R12339 Parallelmove.getdst_app
+R12339 Parallelmove.getdst_app
+R12339 Parallelmove.getdst_app
+R12339 Parallelmove.getdst_app
+R12339 Parallelmove.getdst_app
+R12339 Parallelmove.getdst_app
+R12339 Parallelmove.getdst_app
+R12339 Parallelmove.getdst_app
+R12339 Parallelmove.getdst_app
+R12339 Parallelmove.getdst_app
+R12339 Parallelmove.getdst_app
+R12339 Parallelmove.getdst_app
+R12339 Parallelmove.getdst_app
+R12339 Parallelmove.getdst_app
+R12339 Parallelmove.getdst_app
+R12339 Parallelmove.getdst_app
+R12440 Locations.eq
+R12450 Parallelmove.T
+R12440 Locations.eq
+R12450 Parallelmove.T
+R12496 Locations.type
+R12496 Locations.type
+R12597 Parallelmove.T
+R12571 Allocproof_aux.in_cons_noteq
+R12597 Parallelmove.T
+R12571 Allocproof_aux.in_cons_noteq
+R12892 Locations.diff
+R12904 Locations.R
+R12906 Locations.IT3
+R12821 Coq.Lists.List.In
+R12827 Parallelmove.getdst
+R12850 Coq.Lists.List "x ++ y" list_scope
+R12835 Parallelmove.StateToMove
+R12868 Coq.Lists.List "x ++ y" list_scope
+R12854 Parallelmove.StateBeing
+R12871 Parallelmove.StateDone
+R12786 Locations.diff
+R12798 Locations.R
+R12800 Locations.IT3
+R12714 Coq.Lists.List.In
+R12720 Parallelmove.getdst
+R12743 Coq.Lists.List "x ++ y" list_scope
+R12728 Parallelmove.StateToMove
+R12761 Coq.Lists.List "x ++ y" list_scope
+R12747 Parallelmove.StateBeing
+R12764 Parallelmove.StateDone
+R12685 Parallelmove.stepp
+R13026 Allocproof_aux.Done_notmp3_inv
+R13026 Allocproof_aux.Done_notmp3_inv
+R13339 Locations.diff
+R13351 Locations.R
+R13353 Locations.IT3
+R13236 Coq.Lists.List.In
+R13246 Parallelmove.getdst
+R13281 Coq.Lists.List "x ++ y" list_scope
+R13258 Parallelmove.StateToMove
+R13271 Parallelmove.stepf
+R13307 Coq.Lists.List "x ++ y" list_scope
+R13285 Parallelmove.StateBeing
+R13297 Parallelmove.stepf
+R13310 Parallelmove.StateDone
+R13321 Parallelmove.stepf
+R13201 Locations.diff
+R13213 Locations.R
+R13215 Locations.IT3
+R13129 Coq.Lists.List.In
+R13135 Parallelmove.getdst
+R13158 Coq.Lists.List "x ++ y" list_scope
+R13143 Parallelmove.StateToMove
+R13176 Coq.Lists.List "x ++ y" list_scope
+R13162 Parallelmove.StateBeing
+R13179 Parallelmove.StateDone
+R13101 Parallelmove.stepInv
+R13514 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R13569 Allocproof_aux.Done_notmp3_invpp
+R13604 Parallelmove.dstep_step
+R13628 Parallelmove.f2ind
+R13514 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R13569 Allocproof_aux.Done_notmp3_invpp
+R13569 Allocproof_aux.Done_notmp3_invpp
+R13569 Allocproof_aux.Done_notmp3_invpp
+R13604 Parallelmove.dstep_step
+R13604 Parallelmove.dstep_step
+R13604 Parallelmove.dstep_step
+R13628 Parallelmove.f2ind
+R13628 Parallelmove.f2ind
+R13628 Parallelmove.f2ind
+R13931 Locations.diff
+R13943 Locations.R
+R13945 Locations.IT3
+R13831 Coq.Lists.List.In
+R13841 Parallelmove.getdst
+R13875 Coq.Lists.List "x ++ y" list_scope
+R13853 Parallelmove.StateToMove
+R13866 Parallelmove.Pmov
+R13900 Coq.Lists.List "x ++ y" list_scope
+R13879 Parallelmove.StateBeing
+R13891 Parallelmove.Pmov
+R13903 Parallelmove.StateDone
+R13914 Parallelmove.Pmov
+R13796 Locations.diff
+R13808 Locations.R
+R13810 Locations.IT3
+R13724 Coq.Lists.List.In
+R13730 Parallelmove.getdst
+R13753 Coq.Lists.List "x ++ y" list_scope
+R13738 Parallelmove.StateToMove
+R13771 Coq.Lists.List "x ++ y" list_scope
+R13757 Parallelmove.StateBeing
+R13774 Parallelmove.StateDone
+R13696 Parallelmove.stepInv
+R13985 Coq.Init.Wf.well_founded_ind
+R14003 Coq.Arith.Wf_nat.well_founded_ltof
+R14030 Parallelmove.mesure
+R13985 Coq.Init.Wf.well_founded_ind
+R14003 Coq.Arith.Wf_nat.well_founded_ltof
+R14030 Parallelmove.mesure
+R14101 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R14101 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R14132 Parallelmove.Pmov_equation
+R14132 Parallelmove.Pmov_equation
+R14284 Parallelmove.stepf1_dec
+R14304 Parallelmove.dstep_inv
+R14331 Parallelmove.f2ind'
+R14350 Allocproof_aux.Done_notmp3_invf
+R14284 Parallelmove.stepf1_dec
+R14304 Parallelmove.dstep_inv
+R14331 Parallelmove.f2ind'
+R14350 Allocproof_aux.Done_notmp3_invf
+R14284 Parallelmove.stepf1_dec
+R14304 Parallelmove.dstep_inv
+R14331 Parallelmove.f2ind'
+R14350 Allocproof_aux.Done_notmp3_invf
+R14669 Coq.Init.Logic "A /\ B" type_scope
+R14650 Locations.diff
+R14662 Locations.R
+R14664 Locations.IT1
+R14672 Locations.diff
+R14684 Locations.R
+R14686 Locations.FT1
+R14579 Coq.Lists.List.In
+R14585 Parallelmove.getdst
+R14608 Coq.Lists.List "x ++ y" list_scope
+R14593 Parallelmove.StateToMove
+R14626 Coq.Lists.List "x ++ y" list_scope
+R14612 Parallelmove.StateBeing
+R14629 Parallelmove.StateDone
+R14541 Coq.Init.Logic "A /\ B" type_scope
+R14522 Locations.diff
+R14534 Locations.R
+R14536 Locations.IT1
+R14544 Locations.diff
+R14556 Locations.R
+R14558 Locations.FT1
+R14450 Coq.Lists.List.In
+R14456 Parallelmove.getdst
+R14479 Coq.Lists.List "x ++ y" list_scope
+R14464 Parallelmove.StateToMove
+R14497 Coq.Lists.List "x ++ y" list_scope
+R14483 Parallelmove.StateBeing
+R14500 Parallelmove.StateDone
+R14422 Parallelmove.step
+R14782 Parallelmove.getdst_app
+R14782 Parallelmove.getdst_app
+R14782 Parallelmove.getdst_app
+R14782 Parallelmove.getdst_app
+R14782 Parallelmove.getdst_app
+R14782 Parallelmove.getdst_app
+R14782 Parallelmove.getdst_app
+R14782 Parallelmove.getdst_app
+R14782 Parallelmove.getdst_app
+R14782 Parallelmove.getdst_app
+R14782 Parallelmove.getdst_app
+R14782 Parallelmove.getdst_app
+R14782 Parallelmove.getdst_app
+R14782 Parallelmove.getdst_app
+R14782 Parallelmove.getdst_app
+R14782 Parallelmove.getdst_app
+R14782 Parallelmove.getdst_app
+R14782 Parallelmove.getdst_app
+R14782 Parallelmove.getdst_app
+R14782 Parallelmove.getdst_app
+R14782 Parallelmove.getdst_app
+R14782 Parallelmove.getdst_app
+R14782 Parallelmove.getdst_app
+R14782 Parallelmove.getdst_app
+R14782 Parallelmove.getdst_app
+R14782 Parallelmove.getdst_app
+R14782 Parallelmove.getdst_app
+R14782 Parallelmove.getdst_app
+R14782 Parallelmove.getdst_app
+R14782 Parallelmove.getdst_app
+R14782 Parallelmove.getdst_app
+R14782 Parallelmove.getdst_app
+R14883 Locations.eq
+R14893 Parallelmove.T
+R14883 Locations.eq
+R14893 Parallelmove.T
+R14935 Locations.type
+R14935 Locations.type
+R15031 Parallelmove.T
+R15005 Allocproof_aux.in_cons_noteq
+R15031 Parallelmove.T
+R15005 Allocproof_aux.in_cons_noteq
+R15379 Coq.Init.Logic "A /\ B" type_scope
+R15360 Locations.diff
+R15372 Locations.R
+R15374 Locations.IT1
+R15382 Locations.diff
+R15394 Locations.R
+R15396 Locations.FT1
+R15289 Coq.Lists.List.In
+R15295 Parallelmove.getdst
+R15318 Coq.Lists.List "x ++ y" list_scope
+R15303 Parallelmove.StateToMove
+R15336 Coq.Lists.List "x ++ y" list_scope
+R15322 Parallelmove.StateBeing
+R15339 Parallelmove.StateDone
+R15251 Coq.Init.Logic "A /\ B" type_scope
+R15232 Locations.diff
+R15244 Locations.R
+R15246 Locations.IT1
+R15254 Locations.diff
+R15266 Locations.R
+R15268 Locations.FT1
+R15160 Coq.Lists.List.In
+R15166 Parallelmove.getdst
+R15189 Coq.Lists.List "x ++ y" list_scope
+R15174 Parallelmove.StateToMove
+R15207 Coq.Lists.List "x ++ y" list_scope
+R15193 Parallelmove.StateBeing
+R15210 Parallelmove.StateDone
+R15131 Parallelmove.stepp
+R15516 Allocproof_aux.Done_notmp1_inv
+R15516 Allocproof_aux.Done_notmp1_inv
+R15870 Coq.Init.Logic "A /\ B" type_scope
+R15851 Locations.diff
+R15863 Locations.R
+R15865 Locations.IT1
+R15873 Locations.diff
+R15885 Locations.R
+R15887 Locations.FT1
+R15748 Coq.Lists.List.In
+R15758 Parallelmove.getdst
+R15793 Coq.Lists.List "x ++ y" list_scope
+R15770 Parallelmove.StateToMove
+R15783 Parallelmove.stepf
+R15819 Coq.Lists.List "x ++ y" list_scope
+R15797 Parallelmove.StateBeing
+R15809 Parallelmove.stepf
+R15822 Parallelmove.StateDone
+R15833 Parallelmove.stepf
+R15710 Coq.Init.Logic "A /\ B" type_scope
+R15691 Locations.diff
+R15703 Locations.R
+R15705 Locations.IT1
+R15713 Locations.diff
+R15725 Locations.R
+R15727 Locations.FT1
+R15619 Coq.Lists.List.In
+R15625 Parallelmove.getdst
+R15648 Coq.Lists.List "x ++ y" list_scope
+R15633 Parallelmove.StateToMove
+R15666 Coq.Lists.List "x ++ y" list_scope
+R15652 Parallelmove.StateBeing
+R15669 Parallelmove.StateDone
+R15591 Parallelmove.stepInv
+R16048 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R16103 Allocproof_aux.Done_notmp1_invpp
+R16138 Parallelmove.dstep_step
+R16162 Parallelmove.f2ind
+R16048 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R16103 Allocproof_aux.Done_notmp1_invpp
+R16103 Allocproof_aux.Done_notmp1_invpp
+R16103 Allocproof_aux.Done_notmp1_invpp
+R16138 Parallelmove.dstep_step
+R16138 Parallelmove.dstep_step
+R16138 Parallelmove.dstep_step
+R16162 Parallelmove.f2ind
+R16162 Parallelmove.f2ind
+R16162 Parallelmove.f2ind
+R16506 Coq.Init.Logic "A /\ B" type_scope
+R16487 Locations.diff
+R16499 Locations.R
+R16501 Locations.IT1
+R16509 Locations.diff
+R16521 Locations.R
+R16523 Locations.FT1
+R16387 Coq.Lists.List.In
+R16397 Parallelmove.getdst
+R16431 Coq.Lists.List "x ++ y" list_scope
+R16409 Parallelmove.StateToMove
+R16422 Parallelmove.Pmov
+R16456 Coq.Lists.List "x ++ y" list_scope
+R16435 Parallelmove.StateBeing
+R16447 Parallelmove.Pmov
+R16459 Parallelmove.StateDone
+R16470 Parallelmove.Pmov
+R16349 Coq.Init.Logic "A /\ B" type_scope
+R16330 Locations.diff
+R16342 Locations.R
+R16344 Locations.IT1
+R16352 Locations.diff
+R16364 Locations.R
+R16366 Locations.FT1
+R16258 Coq.Lists.List.In
+R16264 Parallelmove.getdst
+R16287 Coq.Lists.List "x ++ y" list_scope
+R16272 Parallelmove.StateToMove
+R16305 Coq.Lists.List "x ++ y" list_scope
+R16291 Parallelmove.StateBeing
+R16308 Parallelmove.StateDone
+R16230 Parallelmove.stepInv
+R16563 Coq.Init.Wf.well_founded_ind
+R16581 Coq.Arith.Wf_nat.well_founded_ltof
+R16608 Parallelmove.mesure
+R16563 Coq.Init.Wf.well_founded_ind
+R16581 Coq.Arith.Wf_nat.well_founded_ltof
+R16608 Parallelmove.mesure
+R16679 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R16679 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R16776 Parallelmove.Pmov_equation
+R16776 Parallelmove.Pmov_equation
+R16862 Parallelmove.stepf1_dec
+R16882 Parallelmove.dstep_inv
+R16909 Parallelmove.f2ind'
+R16928 Allocproof_aux.Done_notmp1_invf
+R16862 Parallelmove.stepf1_dec
+R16882 Parallelmove.dstep_inv
+R16909 Parallelmove.f2ind'
+R16928 Allocproof_aux.Done_notmp1_invf
+R16862 Parallelmove.stepf1_dec
+R16882 Parallelmove.dstep_inv
+R16909 Parallelmove.f2ind'
+R16928 Allocproof_aux.Done_notmp1_invf
+R17250 Coq.Init.Logic "A /\ B" type_scope
+R17231 Locations.diff
+R17243 Locations.R
+R17245 Locations.IT1
+R17253 Locations.diff
+R17265 Locations.R
+R17267 Locations.FT1
+R17160 Coq.Lists.List.In
+R17166 Parallelmove.getsrc
+R17189 Coq.Lists.List "x ++ y" list_scope
+R17174 Parallelmove.StateToMove
+R17207 Coq.Lists.List "x ++ y" list_scope
+R17193 Parallelmove.StateBeing
+R17210 Parallelmove.StateDone
+R17122 Coq.Init.Logic "A /\ B" type_scope
+R17103 Locations.diff
+R17115 Locations.R
+R17117 Locations.IT1
+R17125 Locations.diff
+R17137 Locations.R
+R17139 Locations.FT1
+R17031 Coq.Lists.List.In
+R17037 Parallelmove.getsrc
+R17060 Coq.Lists.List "x ++ y" list_scope
+R17045 Parallelmove.StateToMove
+R17078 Coq.Lists.List "x ++ y" list_scope
+R17064 Parallelmove.StateBeing
+R17081 Parallelmove.StateDone
+R17003 Parallelmove.step
+R17363 Parallelmove.getsrc_app
+R17363 Parallelmove.getsrc_app
+R17363 Parallelmove.getsrc_app
+R17363 Parallelmove.getsrc_app
+R17363 Parallelmove.getsrc_app
+R17363 Parallelmove.getsrc_app
+R17363 Parallelmove.getsrc_app
+R17363 Parallelmove.getsrc_app
+R17363 Parallelmove.getsrc_app
+R17363 Parallelmove.getsrc_app
+R17363 Parallelmove.getsrc_app
+R17363 Parallelmove.getsrc_app
+R17363 Parallelmove.getsrc_app
+R17363 Parallelmove.getsrc_app
+R17363 Parallelmove.getsrc_app
+R17363 Parallelmove.getsrc_app
+R17363 Parallelmove.getsrc_app
+R17363 Parallelmove.getsrc_app
+R17363 Parallelmove.getsrc_app
+R17363 Parallelmove.getsrc_app
+R17363 Parallelmove.getsrc_app
+R17363 Parallelmove.getsrc_app
+R17363 Parallelmove.getsrc_app
+R17363 Parallelmove.getsrc_app
+R17363 Parallelmove.getsrc_app
+R17363 Parallelmove.getsrc_app
+R17363 Parallelmove.getsrc_app
+R17363 Parallelmove.getsrc_app
+R17363 Parallelmove.getsrc_app
+R17363 Parallelmove.getsrc_app
+R17363 Parallelmove.getsrc_app
+R17363 Parallelmove.getsrc_app
+R17464 Locations.eq
+R17474 Parallelmove.T
+R17464 Locations.eq
+R17474 Parallelmove.T
+R17516 Locations.type
+R17516 Locations.type
+R17612 Parallelmove.T
+R17586 Allocproof_aux.in_cons_noteq
+R17612 Parallelmove.T
+R17586 Allocproof_aux.in_cons_noteq
+R17963 Coq.Init.Logic "A /\ B" type_scope
+R17944 Locations.diff
+R17956 Locations.R
+R17958 Locations.IT1
+R17966 Locations.diff
+R17978 Locations.R
+R17980 Locations.FT1
+R17873 Coq.Lists.List.In
+R17879 Parallelmove.getsrc
+R17902 Coq.Lists.List "x ++ y" list_scope
+R17887 Parallelmove.StateToMove
+R17920 Coq.Lists.List "x ++ y" list_scope
+R17906 Parallelmove.StateBeing
+R17923 Parallelmove.StateDone
+R17835 Coq.Init.Logic "A /\ B" type_scope
+R17816 Locations.diff
+R17828 Locations.R
+R17830 Locations.IT1
+R17838 Locations.diff
+R17850 Locations.R
+R17852 Locations.FT1
+R17744 Coq.Lists.List.In
+R17750 Parallelmove.getsrc
+R17773 Coq.Lists.List "x ++ y" list_scope
+R17758 Parallelmove.StateToMove
+R17791 Coq.Lists.List "x ++ y" list_scope
+R17777 Parallelmove.StateBeing
+R17794 Parallelmove.StateDone
+R17715 Parallelmove.stepp
+R18100 Allocproof_aux.Done_notmp1src_inv
+R18100 Allocproof_aux.Done_notmp1src_inv
+R18460 Coq.Init.Logic "A /\ B" type_scope
+R18441 Locations.diff
+R18453 Locations.R
+R18455 Locations.IT1
+R18463 Locations.diff
+R18475 Locations.R
+R18477 Locations.FT1
+R18338 Coq.Lists.List.In
+R18348 Parallelmove.getsrc
+R18383 Coq.Lists.List "x ++ y" list_scope
+R18360 Parallelmove.StateToMove
+R18373 Parallelmove.stepf
+R18409 Coq.Lists.List "x ++ y" list_scope
+R18387 Parallelmove.StateBeing
+R18399 Parallelmove.stepf
+R18412 Parallelmove.StateDone
+R18423 Parallelmove.stepf
+R18300 Coq.Init.Logic "A /\ B" type_scope
+R18281 Locations.diff
+R18293 Locations.R
+R18295 Locations.IT1
+R18303 Locations.diff
+R18315 Locations.R
+R18317 Locations.FT1
+R18209 Coq.Lists.List.In
+R18215 Parallelmove.getsrc
+R18238 Coq.Lists.List "x ++ y" list_scope
+R18223 Parallelmove.StateToMove
+R18256 Coq.Lists.List "x ++ y" list_scope
+R18242 Parallelmove.StateBeing
+R18259 Parallelmove.StateDone
+R18181 Parallelmove.stepInv
+R18620 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R18675 Allocproof_aux.Done_notmp1src_invpp
+R18713 Parallelmove.dstep_step
+R18738 Parallelmove.f2ind
+R18620 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R18675 Allocproof_aux.Done_notmp1src_invpp
+R18675 Allocproof_aux.Done_notmp1src_invpp
+R18675 Allocproof_aux.Done_notmp1src_invpp
+R18713 Parallelmove.dstep_step
+R18713 Parallelmove.dstep_step
+R18713 Parallelmove.dstep_step
+R18738 Parallelmove.f2ind
+R18738 Parallelmove.f2ind
+R18738 Parallelmove.f2ind
+R19084 Coq.Init.Logic "A /\ B" type_scope
+R19065 Locations.diff
+R19077 Locations.R
+R19079 Locations.IT1
+R19087 Locations.diff
+R19099 Locations.R
+R19101 Locations.FT1
+R18965 Coq.Lists.List.In
+R18975 Parallelmove.getsrc
+R19009 Coq.Lists.List "x ++ y" list_scope
+R18987 Parallelmove.StateToMove
+R19000 Parallelmove.Pmov
+R19034 Coq.Lists.List "x ++ y" list_scope
+R19013 Parallelmove.StateBeing
+R19025 Parallelmove.Pmov
+R19037 Parallelmove.StateDone
+R19048 Parallelmove.Pmov
+R18927 Coq.Init.Logic "A /\ B" type_scope
+R18908 Locations.diff
+R18920 Locations.R
+R18922 Locations.IT1
+R18930 Locations.diff
+R18942 Locations.R
+R18944 Locations.FT1
+R18836 Coq.Lists.List.In
+R18842 Parallelmove.getsrc
+R18865 Coq.Lists.List "x ++ y" list_scope
+R18850 Parallelmove.StateToMove
+R18883 Coq.Lists.List "x ++ y" list_scope
+R18869 Parallelmove.StateBeing
+R18886 Parallelmove.StateDone
+R18808 Parallelmove.stepInv
+R19141 Coq.Init.Wf.well_founded_ind
+R19159 Coq.Arith.Wf_nat.well_founded_ltof
+R19186 Parallelmove.mesure
+R19141 Coq.Init.Wf.well_founded_ind
+R19159 Coq.Arith.Wf_nat.well_founded_ltof
+R19186 Parallelmove.mesure
+R19257 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R19257 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R19354 Parallelmove.Pmov_equation
+R19354 Parallelmove.Pmov_equation
+R19440 Parallelmove.stepf1_dec
+R19460 Parallelmove.dstep_inv
+R19487 Parallelmove.f2ind'
+R19506 Allocproof_aux.Done_notmp1src_invf
+R19440 Parallelmove.stepf1_dec
+R19460 Parallelmove.dstep_inv
+R19487 Parallelmove.f2ind'
+R19506 Allocproof_aux.Done_notmp1src_invf
+R19440 Parallelmove.stepf1_dec
+R19460 Parallelmove.dstep_inv
+R19487 Parallelmove.f2ind'
+R19506 Allocproof_aux.Done_notmp1src_invf
+R19694 Coq.Init.Logic "A \/ B" type_scope
+R19676 Coq.Lists.List.In
+R19681 Allocproof_aux.temporaries2
+R19699 Coq.Lists.List.In
+R19705 Parallelmove.getdst
+R19728 Coq.Lists.List "x ++ y" list_scope
+R19713 Parallelmove.StateToMove
+R19746 Coq.Lists.List "x ++ y" list_scope
+R19732 Parallelmove.StateBeing
+R19749 Parallelmove.StateDone
+R19605 Coq.Lists.List.In
+R19611 Parallelmove.getdst
+R19634 Coq.Lists.List "x ++ y" list_scope
+R19619 Parallelmove.StateToMove
+R19652 Coq.Lists.List "x ++ y" list_scope
+R19638 Parallelmove.StateBeing
+R19655 Parallelmove.StateDone
+R19579 Parallelmove.step
+R19825 Parallelmove.getdst_app
+R19825 Parallelmove.getdst_app
+R19825 Parallelmove.getdst_app
+R19825 Parallelmove.getdst_app
+R19825 Parallelmove.getdst_app
+R19825 Parallelmove.getdst_app
+R19825 Parallelmove.getdst_app
+R19825 Parallelmove.getdst_app
+R19825 Parallelmove.getdst_app
+R19825 Parallelmove.getdst_app
+R19825 Parallelmove.getdst_app
+R19825 Parallelmove.getdst_app
+R19825 Parallelmove.getdst_app
+R19825 Parallelmove.getdst_app
+R19825 Parallelmove.getdst_app
+R19825 Parallelmove.getdst_app
+R19825 Parallelmove.getdst_app
+R19825 Parallelmove.getdst_app
+R19825 Parallelmove.getdst_app
+R19825 Parallelmove.getdst_app
+R19825 Parallelmove.getdst_app
+R19825 Parallelmove.getdst_app
+R19825 Parallelmove.getdst_app
+R19825 Parallelmove.getdst_app
+R19825 Parallelmove.getdst_app
+R19825 Parallelmove.getdst_app
+R19825 Parallelmove.getdst_app
+R19825 Parallelmove.getdst_app
+R19825 Parallelmove.getdst_app
+R19825 Parallelmove.getdst_app
+R19825 Parallelmove.getdst_app
+R19825 Parallelmove.getdst_app
+R19825 Parallelmove.getdst_app
+R19825 Parallelmove.getdst_app
+R19825 Parallelmove.getdst_app
+R19911 Locations.eq
+R19921 Parallelmove.T
+R19911 Locations.eq
+R19921 Parallelmove.T
+R19963 Locations.type
+R19963 Locations.type
+R20053 Parallelmove.T
+R20027 Allocproof_aux.in_cons_noteq
+R20053 Parallelmove.T
+R20027 Allocproof_aux.in_cons_noteq
+R20236 Coq.Init.Logic "A \/ B" type_scope
+R20218 Coq.Lists.List.In
+R20223 Allocproof_aux.temporaries2
+R20241 Coq.Lists.List.In
+R20247 Parallelmove.getdst
+R20270 Coq.Lists.List "x ++ y" list_scope
+R20255 Parallelmove.StateToMove
+R20288 Coq.Lists.List "x ++ y" list_scope
+R20274 Parallelmove.StateBeing
+R20291 Parallelmove.StateDone
+R20147 Coq.Lists.List.In
+R20153 Parallelmove.getdst
+R20176 Coq.Lists.List "x ++ y" list_scope
+R20161 Parallelmove.StateToMove
+R20194 Coq.Lists.List "x ++ y" list_scope
+R20180 Parallelmove.StateBeing
+R20197 Parallelmove.StateDone
+R20120 Parallelmove.stepp
+R20527 Allocproof_aux.dst_tmp2_step
+R20527 Allocproof_aux.dst_tmp2_step
+R20744 Coq.Init.Logic "A \/ B" type_scope
+R20726 Coq.Lists.List.In
+R20731 Allocproof_aux.temporaries2
+R20749 Coq.Lists.List.In
+R20755 Parallelmove.getdst
+R20778 Coq.Lists.List "x ++ y" list_scope
+R20763 Parallelmove.StateToMove
+R20796 Coq.Lists.List "x ++ y" list_scope
+R20782 Parallelmove.StateBeing
+R20799 Parallelmove.StateDone
+R20623 Coq.Lists.List.In
+R20633 Parallelmove.getdst
+R20668 Coq.Lists.List "x ++ y" list_scope
+R20645 Parallelmove.StateToMove
+R20658 Parallelmove.stepf
+R20694 Coq.Lists.List "x ++ y" list_scope
+R20672 Parallelmove.StateBeing
+R20684 Parallelmove.stepf
+R20697 Parallelmove.StateDone
+R20708 Parallelmove.stepf
+R20597 Parallelmove.stepInv
+R20953 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R21008 Allocproof_aux.dst_tmp2_stepp
+R21040 Parallelmove.dstep_step
+R21064 Parallelmove.f2ind
+R20953 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R21008 Allocproof_aux.dst_tmp2_stepp
+R21008 Allocproof_aux.dst_tmp2_stepp
+R21008 Allocproof_aux.dst_tmp2_stepp
+R21040 Parallelmove.dstep_step
+R21040 Parallelmove.dstep_step
+R21040 Parallelmove.dstep_step
+R21064 Parallelmove.f2ind
+R21064 Parallelmove.f2ind
+R21064 Parallelmove.f2ind
+R21273 Coq.Init.Logic "A \/ B" type_scope
+R21255 Coq.Lists.List.In
+R21260 Allocproof_aux.temporaries2
+R21278 Coq.Lists.List.In
+R21284 Parallelmove.getdst
+R21307 Coq.Lists.List "x ++ y" list_scope
+R21292 Parallelmove.StateToMove
+R21325 Coq.Lists.List "x ++ y" list_scope
+R21311 Parallelmove.StateBeing
+R21328 Parallelmove.StateDone
+R21155 Coq.Lists.List.In
+R21165 Parallelmove.getdst
+R21199 Coq.Lists.List "x ++ y" list_scope
+R21177 Parallelmove.StateToMove
+R21190 Parallelmove.Pmov
+R21224 Coq.Lists.List "x ++ y" list_scope
+R21203 Parallelmove.StateBeing
+R21215 Parallelmove.Pmov
+R21227 Parallelmove.StateDone
+R21238 Parallelmove.Pmov
+R21129 Parallelmove.stepInv
+R21379 Coq.Init.Wf.well_founded_ind
+R21397 Coq.Arith.Wf_nat.well_founded_ltof
+R21424 Parallelmove.mesure
+R21379 Coq.Init.Wf.well_founded_ind
+R21397 Coq.Arith.Wf_nat.well_founded_ltof
+R21424 Parallelmove.mesure
+R21495 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R21495 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R21592 Parallelmove.Pmov_equation
+R21592 Parallelmove.Pmov_equation
+R21673 Parallelmove.stepf
+R21673 Parallelmove.stepf
+R21803 Allocproof_aux.dst_tmp2_stepf
+R21803 Allocproof_aux.dst_tmp2_stepf
+R21831 Parallelmove.stepf1_dec
+R21831 Parallelmove.stepf1_dec
+R21856 Parallelmove.dstep_inv
+R21894 Parallelmove.f2ind'
+R21856 Parallelmove.dstep_inv
+R21894 Parallelmove.f2ind'
+R21930 Parallelmove.stepf
+R22004 Allocproof_aux.dst_tmp2_stepf
+R22035 Parallelmove.stepf1_dec
+R22063 Parallelmove.dstep_inv
+R22101 Parallelmove.f2ind'
+R21930 Parallelmove.stepf
+R22004 Allocproof_aux.dst_tmp2_stepf
+R22035 Parallelmove.stepf1_dec
+R22063 Parallelmove.dstep_inv
+R22101 Parallelmove.f2ind'
+R22258 Coq.Init.Logic "A /\ B" type_scope
+R22251 Coq.Init.Logic "x = y" type_scope
+R22217 Parallelmove.getsrc
+R22225 Allocation.listsLoc2Moves
+R22297 Coq.Init.Logic "x = y" type_scope
+R22263 Parallelmove.getdst
+R22271 Allocation.listsLoc2Moves
+R22198 Coq.Init.Logic "x = y" type_scope
+R22186 Coq.Lists.List.length
+R22200 Coq.Lists.List.length
+R22650 Parallelmove.stepInv
+R22658 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R22662 Coq.Lists.List.nil
+R22667 Coq.Lists.List.nil
+R22628 Parallelmove.no_overlap_list
+R22588 Locations.disjoint
+R22612 Conventions.temporaries
+R22602 Parallelmove.getdst
+R22548 Locations.disjoint
+R22572 Conventions.temporaries
+R22562 Parallelmove.getsrc
+R22531 Parallelmove.simpleDest
+R22733 Parallelmove.app_nil
+R22733 Parallelmove.app_nil
+R22760 Parallelmove.no_overlap_noOverlap
+R22781 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R22785 Coq.Lists.List.nil
+R22790 Coq.Lists.List.nil
+R22760 Parallelmove.no_overlap_noOverlap
+R22781 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R22785 Coq.Lists.List.nil
+R22790 Coq.Lists.List.nil
+R22906 Parallelmove.app_nil
+R22906 Parallelmove.app_nil
+R22927 Parallelmove.disjoint_tmp__noTmp
+R22927 Parallelmove.disjoint_tmp__noTmp
+R23126 Parallelmove.no_overlap_list
+R23143 Parallelmove.StateDone
+R23154 Parallelmove.Pmov
+R23159 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R23163 Coq.Lists.List.nil
+R23168 Coq.Lists.List.nil
+R23104 Parallelmove.no_overlap_list
+R23064 Locations.disjoint
+R23088 Conventions.temporaries
+R23078 Parallelmove.getdst
+R23024 Locations.disjoint
+R23048 Conventions.temporaries
+R23038 Parallelmove.getsrc
+R23007 Parallelmove.simpleDest
+R22998 Parallelmove.Moves
+R23203 Allocproof_aux.no_overlapD_res
+R23219 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R23223 Coq.Lists.List.nil
+R23228 Coq.Lists.List.nil
+R23203 Allocproof_aux.no_overlapD_res
+R23219 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R23223 Coq.Lists.List.nil
+R23228 Coq.Lists.List.nil
+R23287 Parallelmove.STM_Pmov
+R23305 Parallelmove.SB_Pmov
+R23329 Parallelmove.app_nil
+R23287 Parallelmove.STM_Pmov
+R23305 Parallelmove.SB_Pmov
+R23329 Parallelmove.app_nil
+R23367 Allocproof_aux.stepInv_pnilnil
+R23367 Allocproof_aux.stepInv_pnilnil
+R23566 Locations.disjoint
+R23621 Allocproof_aux.temporaries1
+R23580 Parallelmove.getsrc
+R23588 Parallelmove.StateDone
+R23599 Parallelmove.Pmov
+R23604 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R23608 Coq.Lists.List.nil
+R23613 Coq.Lists.List.nil
+R23543 Parallelmove.no_overlap_list
+R23503 Locations.disjoint
+R23527 Conventions.temporaries
+R23517 Parallelmove.getdst
+R23463 Locations.disjoint
+R23487 Conventions.temporaries
+R23477 Parallelmove.getsrc
+R23446 Parallelmove.simpleDest
+R23437 Parallelmove.Moves
+R23662 Allocproof_aux.Done_notmp1src_res
+R23681 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R23685 Coq.Lists.List.nil
+R23690 Coq.Lists.List.nil
+R23662 Allocproof_aux.Done_notmp1src_res
+R23681 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R23685 Coq.Lists.List.nil
+R23690 Coq.Lists.List.nil
+R23712 Parallelmove.STM_Pmov
+R23730 Parallelmove.SB_Pmov
+R23754 Parallelmove.app_nil
+R23712 Parallelmove.STM_Pmov
+R23730 Parallelmove.SB_Pmov
+R23754 Parallelmove.app_nil
+R23797 Locations.notin_disjoint
+R23797 Locations.notin_disjoint
+R23851 Parallelmove.stepInv
+R23859 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R23863 Coq.Lists.List.nil
+R23868 Coq.Lists.List.nil
+R23886 Allocproof_aux.stepInv_pnilnil
+R23851 Parallelmove.stepInv
+R23859 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R23863 Coq.Lists.List.nil
+R23868 Coq.Lists.List.nil
+R23886 Allocproof_aux.stepInv_pnilnil
+R23886 Allocproof_aux.stepInv_pnilnil
+R24028 Conventions.temporaries
+R23997 Locations.in_notin_diff
+R24078 Parallelmove.getsrc
+R24053 Locations.disjoint_notin
+R24028 Conventions.temporaries
+R23997 Locations.in_notin_diff
+R24078 Parallelmove.getsrc
+R24053 Locations.disjoint_notin
+R24028 Conventions.temporaries
+R23997 Locations.in_notin_diff
+R24078 Parallelmove.getsrc
+R24053 Locations.disjoint_notin
+R24281 Locations.disjoint
+R24336 Allocproof_aux.temporaries1
+R24295 Parallelmove.getdst
+R24303 Parallelmove.StateDone
+R24314 Parallelmove.Pmov
+R24319 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R24323 Coq.Lists.List.nil
+R24328 Coq.Lists.List.nil
+R24258 Parallelmove.no_overlap_list
+R24218 Locations.disjoint
+R24242 Conventions.temporaries
+R24232 Parallelmove.getdst
+R24178 Locations.disjoint
+R24202 Conventions.temporaries
+R24192 Parallelmove.getsrc
+R24161 Parallelmove.simpleDest
+R24152 Parallelmove.Moves
+R24377 Allocproof_aux.Done_notmp1_res
+R24393 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R24397 Coq.Lists.List.nil
+R24402 Coq.Lists.List.nil
+R24377 Allocproof_aux.Done_notmp1_res
+R24393 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R24397 Coq.Lists.List.nil
+R24402 Coq.Lists.List.nil
+R24424 Parallelmove.STM_Pmov
+R24442 Parallelmove.SB_Pmov
+R24466 Parallelmove.app_nil
+R24424 Parallelmove.STM_Pmov
+R24442 Parallelmove.SB_Pmov
+R24466 Parallelmove.app_nil
+R24509 Locations.notin_disjoint
+R24509 Locations.notin_disjoint
+R24563 Parallelmove.stepInv
+R24571 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R24575 Coq.Lists.List.nil
+R24580 Coq.Lists.List.nil
+R24598 Allocproof_aux.stepInv_pnilnil
+R24563 Parallelmove.stepInv
+R24571 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R24575 Coq.Lists.List.nil
+R24580 Coq.Lists.List.nil
+R24598 Allocproof_aux.stepInv_pnilnil
+R24598 Allocproof_aux.stepInv_pnilnil
+R24740 Conventions.temporaries
+R24709 Locations.in_notin_diff
+R24790 Parallelmove.getdst
+R24765 Locations.disjoint_notin
+R24740 Conventions.temporaries
+R24709 Locations.in_notin_diff
+R24790 Parallelmove.getdst
+R24765 Locations.disjoint_notin
+R24740 Conventions.temporaries
+R24709 Locations.in_notin_diff
+R24790 Parallelmove.getdst
+R24765 Locations.disjoint_notin
+R25004 Coq.Init.Logic "'exists' x , p" type_scope
+R25064 Coq.Init.Logic "A /\ B" type_scope
+R25020 LTL.exec_instrs
+R25039 Allocproof_aux.p_move
+R25120 Coq.Init.Logic "A /\ B" type_scope
+R25095 Coq.Init.Logic "x = y" type_scope
+R25071 Coq.Lists.List.map
+R25085 Parallelmove.getdst
+R25097 Coq.Lists.List.map
+R25110 Parallelmove.getsrc
+R25153 Coq.Init.Logic "A /\ B" type_scope
+R25140 Coq.Init.Logic "x = y" type_scope
+R25133 Locations.R
+R25135 Locations.IT3
+R25146 Locations.R
+R25148 Locations.IT3
+R25238 Coq.Init.Logic "x = y" type_scope
+R25204 Locations.notin
+R25216 Conventions.temporaries
+R25178 Locations.notin
+R25191 Parallelmove.getdst
+R24962 Locations.disjoint
+R24986 Conventions.temporaries
+R24976 Parallelmove.getdst
+R24922 Locations.disjoint
+R24946 Conventions.temporaries
+R24936 Parallelmove.getsrc
+R24900 Parallelmove.no_overlap_list
+R24873 Locations.norepet
+R24886 Parallelmove.getdst
+R25360 Parallelmove.simpleDest
+R25387 Allocproof_aux.norepet_SD
+R25360 Parallelmove.simpleDest
+R25387 Allocproof_aux.norepet_SD
+R25387 Allocproof_aux.norepet_SD
+R25426 Parallelmove.stepInv
+R25434 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R25438 Coq.Lists.List.nil
+R25443 Coq.Lists.List.nil
+R25462 Allocproof_aux.stepInv_pnilnil
+R25426 Parallelmove.stepInv
+R25434 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R25438 Coq.Lists.List.nil
+R25443 Coq.Lists.List.nil
+R25462 Allocproof_aux.stepInv_pnilnil
+R25462 Allocproof_aux.stepInv_pnilnil
+R25531 Parallelmove.StateToMove
+R25550 Parallelmove.StateBeing
+R25579 Parallelmove.app_nil
+R25531 Parallelmove.StateToMove
+R25550 Parallelmove.StateBeing
+R25579 Parallelmove.app_nil
+R25579 Parallelmove.app_nil
+R25629 Allocproof_aux.exec_instrs_pmov
+R25647 Parallelmove.StateDone
+R25658 Parallelmove.Pmov
+R25663 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R25667 Coq.Lists.List.nil
+R25672 Coq.Lists.List.nil
+R25706 Allocproof_aux.noO_list_pnilnil
+R25736 Allocproof_aux.dis_dsttmp1_pnilnil
+R25770 Allocproof_aux.dis_srctmp1_pnilnil
+R25629 Allocproof_aux.exec_instrs_pmov
+R25647 Parallelmove.StateDone
+R25658 Parallelmove.Pmov
+R25663 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R25667 Coq.Lists.List.nil
+R25672 Coq.Lists.List.nil
+R25706 Allocproof_aux.noO_list_pnilnil
+R25706 Allocproof_aux.noO_list_pnilnil
+R25706 Allocproof_aux.noO_list_pnilnil
+R25706 Allocproof_aux.noO_list_pnilnil
+R25736 Allocproof_aux.dis_dsttmp1_pnilnil
+R25736 Allocproof_aux.dis_dsttmp1_pnilnil
+R25736 Allocproof_aux.dis_dsttmp1_pnilnil
+R25736 Allocproof_aux.dis_dsttmp1_pnilnil
+R25736 Allocproof_aux.dis_dsttmp1_pnilnil
+R25736 Allocproof_aux.dis_dsttmp1_pnilnil
+R25736 Allocproof_aux.dis_dsttmp1_pnilnil
+R25770 Allocproof_aux.dis_srctmp1_pnilnil
+R25770 Allocproof_aux.dis_srctmp1_pnilnil
+R25770 Allocproof_aux.dis_srctmp1_pnilnil
+R25770 Allocproof_aux.dis_srctmp1_pnilnil
+R25770 Allocproof_aux.dis_srctmp1_pnilnil
+R25770 Allocproof_aux.dis_srctmp1_pnilnil
+R25770 Allocproof_aux.dis_srctmp1_pnilnil
+R25770 Allocproof_aux.dis_srctmp1_pnilnil
+R25770 Allocproof_aux.dis_srctmp1_pnilnil
+R25770 Allocproof_aux.dis_srctmp1_pnilnil
+R25866 Parallelmove.Fpmov_correct_map
+R25866 Parallelmove.Fpmov_correct_map
+R25903 Coqlib.list_map_exten
+R25994 Conventions.temporaries
+R25963 Locations.in_notin_diff
+R26046 Parallelmove.getdst
+R26021 Locations.disjoint_notin
+R25903 Coqlib.list_map_exten
+R25994 Conventions.temporaries
+R25963 Locations.in_notin_diff
+R25994 Conventions.temporaries
+R25963 Locations.in_notin_diff
+R26046 Parallelmove.getdst
+R26021 Locations.disjoint_notin
+R25994 Conventions.temporaries
+R25963 Locations.in_notin_diff
+R26046 Parallelmove.getdst
+R26021 Locations.disjoint_notin
+R26086 Allocproof_aux.dst_tmp2_res
+R26099 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R26103 Coq.Lists.List.nil
+R26108 Coq.Lists.List.nil
+R26086 Allocproof_aux.dst_tmp2_res
+R26099 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R26103 Coq.Lists.List.nil
+R26108 Coq.Lists.List.nil
+R26186 Parallelmove.app_nil
+R26229 Parallelmove.getdst
+R26212 Allocproof_aux.In_norepet
+R26274 Parallelmove.STM_Pmov
+R26292 Parallelmove.SB_Pmov
+R26186 Parallelmove.app_nil
+R26229 Parallelmove.getdst
+R26212 Allocproof_aux.In_norepet
+R26274 Parallelmove.STM_Pmov
+R26292 Parallelmove.SB_Pmov
+R26314 Locations.diff_sym
+R26365 Conventions.temporaries
+R26334 Locations.in_notin_diff
+R26314 Locations.diff_sym
+R26365 Conventions.temporaries
+R26334 Locations.in_notin_diff
+R26430 Parallelmove.getdst
+R26405 Locations.disjoint_notin
+R26430 Parallelmove.getdst
+R26405 Locations.disjoint_notin
+R26524 Parallelmove.Fpmov_correct_IT3
+R26524 Parallelmove.Fpmov_correct_IT3
+R26638 Allocproof_aux.Done_notmp3_res
+R26654 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R26658 Coq.Lists.List.nil
+R26663 Coq.Lists.List.nil
+R26691 Parallelmove.STM_Pmov
+R26709 Parallelmove.SB_Pmov
+R26638 Allocproof_aux.Done_notmp3_res
+R26654 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R26658 Coq.Lists.List.nil
+R26663 Coq.Lists.List.nil
+R26691 Parallelmove.STM_Pmov
+R26691 Parallelmove.STM_Pmov
+R26709 Parallelmove.SB_Pmov
+R26741 Parallelmove.app_nil
+R26787 Conventions.temporaries
+R26764 Locations.in_notin_diff
+R26741 Parallelmove.app_nil
+R26787 Conventions.temporaries
+R26764 Locations.in_notin_diff
+R26837 Parallelmove.getdst
+R26812 Locations.disjoint_notin
+R26837 Parallelmove.getdst
+R26812 Locations.disjoint_notin
+R26910 Parallelmove.Fpmov_correct_ext
+R26997 Conventions.temporaries
+R26974 Locations.in_notin_diff
+R26910 Parallelmove.Fpmov_correct_ext
+R26997 Conventions.temporaries
+R26974 Locations.in_notin_diff
+R26997 Conventions.temporaries
+R26974 Locations.in_notin_diff
+R26997 Conventions.temporaries
+R26974 Locations.in_notin_diff
+R27057 Allocproof_aux.dst_tmp2_res
+R27070 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R27074 Coq.Lists.List.nil
+R27079 Coq.Lists.List.nil
+R27057 Allocproof_aux.dst_tmp2_res
+R27070 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R27074 Coq.Lists.List.nil
+R27079 Coq.Lists.List.nil
+R27148 Parallelmove.app_nil
+R27192 Parallelmove.STM_Pmov
+R27210 Parallelmove.SB_Pmov
+R27148 Parallelmove.app_nil
+R27192 Parallelmove.STM_Pmov
+R27210 Parallelmove.SB_Pmov
+R27232 Locations.diff_sym
+R27275 Conventions.temporaries
+R27252 Locations.in_notin_diff
+R27232 Locations.diff_sym
+R27275 Conventions.temporaries
+R27252 Locations.in_notin_diff
+R27365 Locations.diff_sym
+R27416 Parallelmove.getdst
+R27385 Locations.in_notin_diff
+R27365 Locations.diff_sym
+R27416 Parallelmove.getdst
+R27385 Locations.in_notin_diff
+R27654 Coq.Init.Logic "'exists' x , p" type_scope
+R27729 Coq.Init.Logic "A /\ B" type_scope
+R27670 LTL.exec_instrs
+R27689 Allocation.parallel_move
+R27773 Coq.Init.Logic "A /\ B" type_scope
+R27754 Coq.Init.Logic "x = y" type_scope
+R27736 Coq.Lists.List.map
+R27756 Coq.Lists.List.map
+R27806 Coq.Init.Logic "A /\ B" type_scope
+R27793 Coq.Init.Logic "x = y" type_scope
+R27786 Locations.R
+R27788 Locations.IT3
+R27799 Locations.R
+R27801 Locations.IT3
+R27879 Coq.Init.Logic "x = y" type_scope
+R27845 Locations.notin
+R27857 Conventions.temporaries
+R27825 Locations.notin
+R27618 Locations.disjoint
+R27636 Conventions.temporaries
+R27584 Locations.disjoint
+R27602 Conventions.temporaries
+R27563 Locations.norepet
+R27538 Parallelmove.no_overlap
+R27515 Coq.Init.Logic "x = y" type_scope
+R27498 Coq.Lists.List.length
+R27517 Coq.Lists.List.length
+R27963 Allocproof_aux.parallel_move_correct'
+R27987 Allocation.listsLoc2Moves
+R27963 Allocproof_aux.parallel_move_correct'
+R27987 Allocation.listsLoc2Moves
+R28028 Allocproof_aux.getdst_lists2moves
+R28028 Allocproof_aux.getdst_lists2moves
+FAllocproof
+R599 Coq.Init.Logic "x = y" type_scope
+R556 LTL.call_regs
+R574 Conventions.parameter_of_argument
+R526 Coq.Lists.List.In
+R532 Conventions.loc_arguments
+R639 Conventions.loc_arguments_acceptable
+R639 Conventions.loc_arguments_acceptable
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R914 Coq.Init.Logic "x = y" type_scope
+R863 LTL.return_regs
+R894 Locations.R
+R897 Conventions.loc_result
+R928 Locations.R
+R931 Conventions.loc_result
+R998 Coq.Lists.List.In_dec
+R1033 Conventions.temporaries
+R1013 Locations.R
+R1016 Conventions.loc_result
+R1005 Locations.eq
+R998 Coq.Lists.List.In_dec
+R1033 Conventions.temporaries
+R1013 Locations.R
+R1016 Conventions.loc_result
+R1005 Locations.eq
+R1070 Coq.Lists.List.In_dec
+R1105 Conventions.destroyed_at_call
+R1085 Locations.R
+R1088 Conventions.loc_result
+R1077 Locations.eq
+R1070 Coq.Lists.List.In_dec
+R1105 Conventions.destroyed_at_call
+R1085 Locations.R
+R1088 Conventions.loc_result
+R1077 Locations.eq
+R1157 Conventions.loc_result_acceptable
+R1157 Conventions.loc_result_acceptable
+R1334 Coq.Init.Logic "x = y" type_scope
+R1302 LTL.return_regs
+R1280 Conventions.loc_acceptable
+R1247 Locations.notin
+R1259 Conventions.destroyed_at_call
+R1431 Coq.Lists.List.In_dec
+R1451 Conventions.temporaries
+R1446 Locations.R
+R1438 Locations.eq
+R1431 Coq.Lists.List.In_dec
+R1451 Conventions.temporaries
+R1446 Locations.R
+R1438 Locations.eq
+R1497 Coq.Lists.List.In_dec
+R1517 Conventions.destroyed_at_call
+R1512 Locations.R
+R1504 Locations.eq
+R1497 Coq.Lists.List.In_dec
+R1517 Conventions.destroyed_at_call
+R1512 Locations.R
+R1504 Locations.eq
+R1552 Locations.notin_not_in
+R1552 Locations.notin_not_in
+R1842 Registers.ge
+R1861 Allocation.transfer
+R1878 Maps "a !! b"
+R1856 Maps "a !! b"
+R1815 Coq.Lists.List.In
+R1821 RTL.successors
+R1802 Coq.Init.Logic "x <> y" type_scope
+R1799 Maps "a ! b"
+R1791 RTL.fn_code
+R1805 Coq.Init.Datatypes.None
+R1775 Coq.Init.Logic "x <> y" type_scope
+R1772 Maps "a ! b"
+R1764 RTL.fn_code
+R1778 Coq.Init.Datatypes.None
+R1744 Coq.Init.Logic "x = y" type_scope
+R1734 Allocation.analyze
+R1746 Coq.Init.Datatypes.Some
+R1725 RTL.node
+R1725 RTL.node
+R1702 Maps.t
+R1709 Registers.t
+R1685 RTL.function
+R1910 Allocation.fixpoint_solution
+R1910 Allocation.fixpoint_solution
+R1973 RTL.fn_code_wf
+R1973 RTL.fn_code_wf
+R2026 RTL.fn_code_wf
+R2026 RTL.fn_code_wf
+R2149 Allocation.transfer
+R2186 Maps "a !! b"
+R2192 RTL.fn_entrypoint
+R2163 RTL.fn_entrypoint
+R2127 Maps.t
+R2134 Registers.t
+R2106 RTL.function
+R2256 RTL.function
+R2280 RTLtyping.regenv
+R2303 Maps.t
+R2310 Registers.t
+R2343 Locations.loc
+R2336 Registers.reg
+R2401 Coq.Init.Logic "x = y" type_scope
+R2366 Coloring.regalloc
+R2383 Allocproof.live0
+R2403 Coq.Init.Datatypes.Some
+R2500 Locations.diff
+R2491 Coq.Init.Logic "x <> y" type_scope
+R2467 Conventions.loc_acceptable
+R2661 Coqlib.zeq
+R2661 Coqlib.zeq
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R2849 Locations.diff
+R2840 Coq.Init.Logic "x <> y" type_scope
+R2896 Allocproof.loc_acceptable_noteq_diff
+R2896 Allocproof.loc_acceptable_noteq_diff
+R2933 Coloringproof.regalloc_acceptable
+R2933 Coloringproof.regalloc_acceptable
+R3065 Locations.notin
+R3051 Coq.Init.Logic "~ x" type_scope
+R3053 Coq.Lists.List.In
+R3029 Conventions.loc_acceptable
+R3142 Allocproof.loc_acceptable_noteq_diff
+R3142 Allocproof.loc_acceptable_noteq_diff
+R3190 Coq.Init.Logic.sym_not_equal
+R3190 Coq.Init.Logic.sym_not_equal
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R3320 Locations.notin
+R3298 Coq.Init.Logic "~ x" type_scope
+R3300 Coq.Lists.List.In
+R3367 Allocproof.loc_acceptable_notin_notin
+R3367 Allocproof.loc_acceptable_notin_notin
+R3405 Coloringproof.regalloc_acceptable
+R3405 Coloringproof.regalloc_acceptable
+R3532 Locations.norepet
+R3545 Coq.Lists.List.map
+R3494 Coqlib.list_norepet
+R3508 Coq.Lists.List.map
+R3611 Locations.norepet_nil
+R3611 Locations.norepet_nil
+R3651 Locations.norepet_cons
+R3651 Locations.norepet_cons
+R3678 Allocproof.regalloc_notin_notin
+R3678 Allocproof.regalloc_notin_notin
+R3773 Locations.notin
+R3793 Conventions.temporaries
+R3764 Registers.reg
+R3829 Conventions.temporaries_not_acceptable
+R3829 Conventions.temporaries_not_acceptable
+R3867 Coloringproof.regalloc_acceptable
+R3867 Coloringproof.regalloc_acceptable
+R3961 Locations.disjoint
+R3994 Conventions.temporaries
+R3975 Coq.Lists.List.map
+R3948 Coq.Lists.List.list
+R3953 Registers.reg
+R4033 Locations.notin_disjoint
+R4033 Locations.notin_disjoint
+R4075 Coqlib.list_in_map_inv
+R4075 Coqlib.list_in_map_inv
+R4138 Allocproof.regalloc_not_temporary
+R4138 Allocproof.regalloc_not_temporary
+R4307 RTL.function
+R4335 RTLtyping.regenv
+R4359 Maps.t
+R4366 Registers.t
+R4400 Locations.loc
+R4393 Registers.reg
+R4463 Coq.Init.Logic "x = y" type_scope
+R4426 Coloring.regalloc
+R4444 Allocproof.live0
+R4465 Coq.Init.Datatypes.Some
+R4610 Coq.Init.Logic "x = y" type_scope
+R4614 Registers "a # b"
+R4586 Coq.Init.Logic "x = y" type_scope
+R4568 Registers.mem
+R4588 Coq.Init.Datatypes.true
+R4562 Registers.reg
+R4531 LTL.locset
+R4518 RTL.regset
+R4503 Registers.t
+R4721 Allocproof.agree
+R4698 Allocproof.agree
+R4673 Registers.ge
+R4885 Allocproof.agree
+R4852 Allocproof.agree
+R4926 Allocproof.agree_increasing
+R4926 Allocproof.agree_increasing
+R4988 Registers.eq
+R4988 Registers.eq
+R5027 Registers.mem_add_same
+R5027 Registers.mem_add_same
+R5058 Registers.mem_add_other
+R5058 Registers.mem_add_other
+R5190 Allocproof.agree
+R5151 Allocproof.agree
+R5158 Allocation.reg_list_live
+R5269 Allocproof.agree_reg_live
+R5269 Allocproof.agree_reg_live
+R5414 Allocproof.agree
+R5375 Allocproof.agree
+R5382 Allocation.reg_sum_live
+R5483 Allocproof.agree_reg_live
+R5483 Allocproof.agree_reg_live
+R5622 Coq.Init.Logic "x = y" type_scope
+R5626 Registers "a # b"
+R5575 Allocproof.agree
+R5662 Registers.mem_add_same
+R5662 Registers.mem_add_same
+R5812 Coq.Init.Logic "x = y" type_scope
+R5779 Coq.Lists.List.map
+R5792 Coq.Lists.List.map
+R5816 Registers "a ## b"
+R5738 Allocproof.agree
+R5745 Allocation.reg_list_live
+R5884 Coq.Init.Logic.f_equal2
+R5895 Coq.Lists.List.cons
+R5900 Values.val
+R5884 Coq.Init.Logic.f_equal2
+R5895 Coq.Lists.List.cons
+R5900 Values.val
+R5916 Allocproof.agree_eval_reg
+R5916 Allocproof.agree_eval_reg
+R5951 Allocproof.agree_reg_list_live
+R5951 Allocproof.agree_reg_list_live
+R6142 Allocproof.agree
+R6129 Coq.Init.Logic "x = y" type_scope
+R6096 Locations.notin
+R6108 Conventions.temporaries
+R6063 Allocproof.agree
+R6229 Allocproof.regalloc_not_temporary
+R6229 Allocproof.regalloc_not_temporary
+R6371 Allocproof.agree
+R6385 Registers "a # b <- c"
+R6349 Allocproof.agree
+R6336 Coq.Init.Logic "x = y" type_scope
+R6318 Registers.mem
+R6338 Coq.Init.Datatypes.false
+R6437 Registers.eq
+R6437 Registers.eq
+R6492 Registers.gso
+R6492 Registers.gso
+R6795 Allocproof.agree
+R6809 Registers "a # b <- c"
+R6760 Allocproof.agree
+R6747 Coq.Init.Logic "x = y" type_scope
+R6714 Locations.notin
+R6726 Conventions.temporaries
+R6689 Locations.diff
+R6669 Coq.Init.Logic "x = y" type_scope
+R6636 Coq.Init.Logic "x <> y" type_scope
+R6619 Coq.Init.Logic "x <> y" type_scope
+R6607 Coq.Init.Logic "x = y" type_scope
+R6589 Registers.mem
+R6609 Coq.Init.Datatypes.true
+R6862 Registers.eq
+R6862 Registers.eq
+R6903 Registers.gss
+R6903 Registers.gss
+R6937 Registers.gso
+R6937 Registers.gso
+R6987 Registers.mem_remove_other
+R6987 Registers.mem_remove_other
+R7034 Allocproof.regalloc_noteq_diff
+R7034 Allocproof.regalloc_noteq_diff
+R7093 Allocproof.regalloc_not_temporary
+R7093 Allocproof.regalloc_not_temporary
+R7477 Allocproof.agree
+R7491 Registers "a # b <- c"
+R7502 Registers "a # b"
+R7425 Allocproof.agree
+R7412 Coq.Init.Logic "x = y" type_scope
+R7379 Locations.notin
+R7391 Conventions.temporaries
+R7352 Locations.diff
+R7318 Coq.Init.Logic "x = y" type_scope
+R7281 Coq.Init.Logic "x <> y" type_scope
+R7256 Coq.Init.Logic "x <> y" type_scope
+R7244 Coq.Init.Logic "x <> y" type_scope
+R7232 Coq.Init.Logic "x = y" type_scope
+R7214 Registers.mem
+R7234 Coq.Init.Datatypes.true
+R7187 LTL.locset
+R7187 LTL.locset
+R7554 Registers.eq
+R7554 Registers.eq
+R7595 Registers.gss
+R7595 Registers.gss
+R7637 Registers.mem_add_same
+R7637 Registers.mem_add_same
+R7668 Registers.gso
+R7668 Registers.gso
+R7694 Locations.eq
+R7694 Locations.eq
+R7767 Registers.eq
+R7767 Registers.eq
+R7816 Registers.mem_add_same
+R7816 Registers.mem_add_same
+R7890 Registers.eq
+R7890 Registers.eq
+R7927 Registers.mem_add_same
+R7927 Registers.mem_add_same
+R7958 Registers.mem_add_other
+R7958 Registers.mem_add_other
+R7996 Registers.mem_remove_other
+R7996 Registers.mem_remove_other
+R8036 Allocproof.regalloc_noteq_diff
+R8036 Allocproof.regalloc_noteq_diff
+R8073 Allocproof.regalloc_not_temporary
+R8073 Allocproof.regalloc_not_temporary
+R8601 Allocproof.agree
+R8615 Registers "a # b <- c"
+R8524 Allocproof.agree
+R8531 Allocation.reg_list_live
+R8551 Allocation.reg_sum_live
+R8511 Coq.Init.Logic "x = y" type_scope
+R8474 Locations.diff
+R8454 Conventions.loc_acceptable
+R8421 Locations.notin
+R8433 Conventions.destroyed_at_call
+R8397 Coq.Init.Logic "x = y" type_scope
+R8360 Coq.Init.Logic "x <> y" type_scope
+R8341 Coq.Init.Logic "x <> y" type_scope
+R8329 Coq.Init.Logic "x = y" type_scope
+R8311 Registers.mem
+R8331 Coq.Init.Datatypes.true
+R8243 Coq.Init.Logic "~ x" type_scope
+R8245 Coq.Lists.List.In
+R8259 Conventions.destroyed_at_call
+R8229 Coq.Init.Logic "x <> y" type_scope
+R8213 Coq.Init.Logic "x = y" type_scope
+R8195 Registers.mem
+R8215 Coq.Init.Datatypes.true
+R8169 LTL.locset
+R8169 LTL.locset
+R8659 Allocproof.agree
+R8659 Allocproof.agree
+R8701 Allocproof.agree_reg_sum_live
+R8701 Allocproof.agree_reg_sum_live
+R8739 Allocproof.agree_reg_list_live
+R8739 Allocproof.agree_reg_list_live
+R8806 Registers.eq
+R8806 Registers.eq
+R8847 Registers.gss
+R8847 Registers.gss
+R8881 Registers.gso
+R8881 Registers.gso
+R8931 Registers.mem_remove_other
+R8931 Registers.mem_remove_other
+R8971 Allocproof.regalloc_notin_notin
+R8971 Allocproof.regalloc_notin_notin
+R9010 Coloringproof.regalloc_acceptable
+R9010 Coloringproof.regalloc_acceptable
+R9047 Allocproof.regalloc_noteq_diff
+R9047 Allocproof.regalloc_noteq_diff
+R9337 Allocproof.agree
+R9349 RTL.init_regs
+R9278 Allocproof.agree
+R9309 Registers.init
+R9321 Values.Vundef
+R9285 Allocation.reg_list_dead
+R9268 Coq.Init.Logic "x = y" type_scope
+R9235 Coq.Lists.List.map
+R9248 Coq.Lists.List.map
+R9216 Coq.Init.Logic "x <> y" type_scope
+R9193 Coq.Init.Logic "x <> y" type_scope
+R9180 Coq.Init.Logic "x = y" type_scope
+R9161 Registers.mem
+R9182 Coq.Init.Datatypes.true
+R9149 Coq.Lists.List.In
+R9462 Allocproof.agree
+R9487 RTL.init_regs
+R9462 Allocproof.agree
+R9487 RTL.init_regs
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R9556 Registers.eq
+R9556 Registers.eq
+R9598 Registers.mem_remove_same
+R9598 Registers.mem_remove_same
+R9652 Registers.mem_remove_other
+R9652 Registers.mem_remove_other
+R9742 Registers.eq
+R9742 Registers.eq
+R9781 Registers.gss
+R9781 Registers.gss
+R9816 Registers.gso
+R9816 Registers.gso
+R9855 Registers.mem_remove_other
+R9855 Registers.mem_remove_other
+R10130 Allocproof.agree
+R10153 RTL.init_regs
+R10137 Allocproof.live0
+R10115 Coq.Init.Logic "x = y" type_scope
+R10117 Values.Vundef
+R10086 Coq.Init.Logic "x = y" type_scope
+R10034 Registers.mem
+R10048 Allocation.reg_list_dead
+R10070 Allocproof.live0
+R10088 Coq.Init.Datatypes.true
+R10008 Coq.Init.Logic "x = y" type_scope
+R9971 Coq.Lists.List.map
+R9984 Coq.Lists.List.map
+R9951 RTL.fn_params
+R10201 Allocproof.agree_init_regs
+R10201 Allocproof.agree_init_regs
+R10236 Coloringproof.regalloc_correct_3
+R10236 Coloringproof.regalloc_correct_3
+R10301 Registers.gi
+R10301 Registers.gi
+R10400 LTL.genv
+R10423 Values.val
+R10480 Coq.Init.Logic "A \/ B" type_scope
+R10476 Coq.Init.Logic "x = y" type_scope
+R10463 Locations.R
+R10465 Allocation.reg_for
+R10483 Coq.Lists.List.In
+R10502 Conventions.temporaries
+R10487 Locations.R
+R10490 Allocation.reg_for
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R10575 Locations.slot_type
+R10575 Locations.slot_type
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R10662 Coq.Init.Logic "'exists' x , p" type_scope
+R10730 Coq.Init.Logic "A /\ B" type_scope
+R10676 LTL.exec_instrs
+R10695 Allocation.add_reload
+R10756 Coq.Init.Logic "A /\ B" type_scope
+R10747 Coq.Init.Logic "x = y" type_scope
+R10740 Locations.R
+R10799 Coq.Init.Logic "x = y" type_scope
+R10771 Locations.diff
+R10781 Locations.R
+R10865 Locations.mreg_eq
+R10865 Locations.mreg_eq
+R10926 LTL.exec_refl
+R10926 LTL.exec_refl
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R10954 Locations.set
+R10978 Locations.R
+R10966 Locations.R
+R10954 Locations.set
+R10978 Locations.R
+R10966 Locations.R
+R11005 LTL.exec_one
+R11021 LTL.exec_Bop
+R11005 LTL.exec_one
+R11021 LTL.exec_Bop
+R11061 Locations.gss
+R11061 Locations.gss
+R11090 Locations.gso
+R11090 Locations.gso
+R11118 Locations.set
+R11142 Locations.S
+R11130 Locations.R
+R11118 Locations.set
+R11142 Locations.S
+R11130 Locations.R
+R11168 LTL.exec_one
+R11184 LTL.exec_Bgetstack
+R11168 LTL.exec_one
+R11184 LTL.exec_Bgetstack
+R11216 Locations.gss
+R11216 Locations.gss
+R11245 Locations.gso
+R11245 Locations.gso
+R11321 Coq.Init.Logic "'exists' x , p" type_scope
+R11388 Coq.Init.Logic "A /\ B" type_scope
+R11335 LTL.exec_instrs
+R11354 Allocation.add_spill
+R11414 Coq.Init.Logic "A /\ B" type_scope
+R11401 Coq.Init.Logic "x = y" type_scope
+R11407 Locations.R
+R11453 Coq.Init.Logic "x = y" type_scope
+R11429 Locations.diff
+R11518 Locations.mreg_eq
+R11518 Locations.mreg_eq
+R11579 LTL.exec_refl
+R11579 LTL.exec_refl
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R11607 Locations.set
+R11630 Locations.R
+R11619 Locations.R
+R11607 Locations.set
+R11630 Locations.R
+R11619 Locations.R
+R11658 LTL.exec_one
+R11658 LTL.exec_one
+R11674 LTL.exec_Bop
+R11674 LTL.exec_Bop
+R11712 Locations.gss
+R11712 Locations.gss
+R11740 Locations.gso
+R11740 Locations.gso
+R11768 Locations.set
+R11790 Locations.R
+R11780 Locations.S
+R11768 Locations.set
+R11790 Locations.R
+R11780 Locations.S
+R11818 LTL.exec_one
+R11818 LTL.exec_one
+R11834 LTL.exec_Bsetstack
+R11834 LTL.exec_Bsetstack
+R11866 Locations.gss
+R11866 Locations.gss
+R11894 Locations.gso
+R11894 Locations.gso
+R12270 Coq.Init.Logic "'exists' x , p" type_scope
+R12368 Coq.Init.Logic "A /\ B" type_scope
+R12284 LTL.exec_instrs
+R12303 Allocation.add_reloads
+R12321 Allocation.regs_for_rec
+R12431 Coq.Init.Logic "A /\ B" type_scope
+R12417 Coq.Init.Logic "x = y" type_scope
+R12373 LTL.reglist
+R12382 Allocation.regs_for_rec
+R12419 Coq.Lists.List.map
+R12501 Coq.Init.Logic "A /\ B" type_scope
+R12491 Coq.Init.Logic "x = y" type_scope
+R12486 Locations.R
+R12497 Locations.R
+R12464 Coq.Init.Logic "~ x" type_scope
+R12466 Coq.Lists.List.In
+R12447 Coq.Init.Logic "~ x" type_scope
+R12449 Coq.Lists.List.In
+R12529 Coq.Init.Logic "x = y" type_scope
+R12524 Locations.S
+R12535 Locations.S
+R12246 Coqlib.list_norepet
+R12222 Coqlib.list_norepet
+R12191 Coqlib.list_disjoint
+R12179 Coq.Init.Logic.False
+R12165 Coq.Lists.List.In
+R12148 Coq.Lists.List.In
+R12152 Locations.R
+R12125 Coq.Init.Logic.False
+R12111 Coq.Lists.List.In
+R12094 Coq.Lists.List.In
+R12098 Locations.R
+R12052 Coq.Init.Peano "x <= y" nat_scope
+R12035 Coq.Lists.List.length
+R12055 Coq.Lists.List.length
+R12003 Coq.Init.Peano "x <= y" nat_scope
+R11986 Coq.Lists.List.length
+R12006 Coq.Lists.List.length
+R12626 LTL.exec_refl
+R12626 LTL.exec_refl
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R12795 Coq.Init.Peano "x <= y" nat_scope
+R12783 Coq.Lists.List.length
+R12798 Coq.Lists.List.length
+R12795 Coq.Init.Peano "x <= y" nat_scope
+R12783 Coq.Lists.List.length
+R12798 Coq.Lists.List.length
+R12852 Coq.Init.Peano "x <= y" nat_scope
+R12840 Coq.Lists.List.length
+R12855 Coq.Lists.List.length
+R12852 Coq.Init.Peano "x <= y" nat_scope
+R12840 Coq.Lists.List.length
+R12855 Coq.Lists.List.length
+R12937 Coq.Init.Logic.False
+R12923 Coq.Lists.List.In
+R12906 Coq.Lists.List.In
+R12910 Locations.R
+R12937 Coq.Init.Logic.False
+R12923 Coq.Lists.List.In
+R12906 Coq.Lists.List.In
+R12910 Locations.R
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R13055 Coq.Init.Logic.False
+R13041 Coq.Lists.List.In
+R13024 Coq.Lists.List.In
+R13028 Locations.R
+R13055 Coq.Init.Logic.False
+R13041 Coq.Lists.List.In
+R13024 Coq.Lists.List.In
+R13028 Locations.R
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R13131 Coqlib.list_disjoint
+R13131 Coqlib.list_disjoint
+R13170 Coqlib.list_disjoint_cons_left
+R13170 Coqlib.list_disjoint_cons_left
+R13206 Coqlib.list_disjoint_cons_right
+R13206 Coqlib.list_disjoint_cons_right
+R13253 Coqlib.list_norepet
+R13253 Coqlib.list_norepet
+R13312 Coqlib.list_norepet
+R13312 Coqlib.list_norepet
+R13545 Locations.mreg_eq
+R13545 Locations.mreg_eq
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R13598 Coq.Init.Logic.f_equal2
+R13609 Coq.Lists.List.cons
+R13614 Values.val
+R13598 Coq.Init.Logic.f_equal2
+R13609 Coq.Lists.List.cons
+R13614 Values.val
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R13892 Locations.slot_type
+R13909 AST.Tint
+R13922 AST.Tfloat
+R13892 Locations.slot_type
+R13909 AST.Tint
+R13922 AST.Tfloat
+R13955 Coq.Init.Logic "~ x" type_scope
+R13957 Coq.Lists.List.In
+R13955 Coq.Init.Logic "~ x" type_scope
+R13957 Coq.Lists.List.In
+R13995 Locations.slot_type
+R13995 Locations.slot_type
+R14073 Coq.Lists.List "x :: y" list_scope
+R14044 Coqlib.list_disjoint_notin
+R14073 Coq.Lists.List "x :: y" list_scope
+R14044 Coqlib.list_disjoint_notin
+R14095 Coqlib.list_disjoint_sym
+R14095 Coqlib.list_disjoint_sym
+R14120 Coqlib.list_disjoint_cons_left
+R14120 Coqlib.list_disjoint_cons_left
+R14195 Coq.Init.Logic "~ x" type_scope
+R14197 Coq.Lists.List.In
+R14195 Coq.Init.Logic "~ x" type_scope
+R14197 Coq.Lists.List.In
+R14235 Locations.slot_type
+R14235 Locations.slot_type
+R14288 Coq.Lists.List "x :: y" list_scope
+R14259 Coqlib.list_disjoint_notin
+R14288 Coq.Lists.List "x :: y" list_scope
+R14259 Coqlib.list_disjoint_notin
+R14310 Coqlib.list_disjoint_cons_right
+R14310 Coqlib.list_disjoint_cons_right
+R14415 Allocproof.add_reload_correct
+R14452 Allocation.add_reloads
+R14470 Allocation.regs_for_rec
+R14435 Locations.S
+R14415 Allocproof.add_reload_correct
+R14452 Allocation.add_reloads
+R14470 Allocation.regs_for_rec
+R14435 Locations.S
+R14682 LTL.exec_trans
+R14682 LTL.exec_trans
+R14724 Coq.Init.Logic.f_equal2
+R14735 Coq.Lists.List.cons
+R14740 Values.val
+R14724 Coq.Init.Logic.f_equal2
+R14735 Coq.Lists.List.cons
+R14740 Values.val
+R14791 Coqlib.list_map_exten
+R14791 Coqlib.list_map_exten
+R14863 Coq.Init.Logic.I
+R14863 Coq.Init.Logic.I
+R14863 Coq.Init.Logic.I
+R14930 Locations.slot_type
+R14930 Locations.slot_type
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R15146 Locations.slot_type
+R15146 Locations.slot_type
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R15224 Coq.Init.Logic.I
+R15224 Coq.Init.Logic.I
+R15352 Coq.Init.Logic "'exists' x , p" type_scope
+R15434 Coq.Init.Logic "A /\ B" type_scope
+R15366 LTL.exec_instrs
+R15385 Allocation.add_reloads
+R15403 Allocation.regs_for
+R15486 Coq.Init.Logic "A /\ B" type_scope
+R15467 Coq.Init.Logic "x = y" type_scope
+R15439 LTL.reglist
+R15448 Allocation.regs_for
+R15469 Coq.Lists.List.map
+R15534 Coq.Init.Logic "x = y" type_scope
+R15501 Locations.notin
+R15513 Conventions.temporaries
+R15317 Locations.disjoint
+R15335 Conventions.temporaries
+R15302 Coq.Init.Peano "x <= y" nat_scope
+R15285 Coq.Lists.List.length
+R15580 Coq.Lists.List "x :: y" list_scope
+R15576 Locations.IT1
+R15587 Coq.Lists.List "x :: y" list_scope
+R15583 Locations.IT2
+R15594 Coq.Lists.List "x :: y" list_scope
+R15590 Locations.IT3
+R15597 Coq.Lists.List.nil
+R15580 Coq.Lists.List "x :: y" list_scope
+R15576 Locations.IT1
+R15587 Coq.Lists.List "x :: y" list_scope
+R15583 Locations.IT2
+R15594 Coq.Lists.List "x :: y" list_scope
+R15590 Locations.IT3
+R15597 Coq.Lists.List.nil
+R15624 Coq.Lists.List "x :: y" list_scope
+R15620 Locations.FT1
+R15631 Coq.Lists.List "x :: y" list_scope
+R15627 Locations.FT2
+R15638 Coq.Lists.List "x :: y" list_scope
+R15634 Locations.FT3
+R15641 Coq.Lists.List.nil
+R15624 Coq.Lists.List "x :: y" list_scope
+R15620 Locations.FT1
+R15631 Coq.Lists.List "x :: y" list_scope
+R15627 Locations.FT2
+R15638 Coq.Lists.List "x :: y" list_scope
+R15634 Locations.FT3
+R15641 Coq.Lists.List.nil
+R15679 Coq.Init.Peano "x <= y" nat_scope
+R15662 Coq.Lists.List.length
+R15682 Coq.Lists.List.length
+R15679 Coq.Init.Peano "x <= y" nat_scope
+R15662 Coq.Lists.List.length
+R15682 Coq.Lists.List.length
+R15776 Coq.Init.Peano "x <= y" nat_scope
+R15759 Coq.Lists.List.length
+R15779 Coq.Lists.List.length
+R15776 Coq.Init.Peano "x <= y" nat_scope
+R15759 Coq.Lists.List.length
+R15779 Coq.Lists.List.length
+R15896 Coq.Init.Logic.False
+R15882 Coq.Lists.List.In
+R15865 Coq.Lists.List.In
+R15869 Locations.R
+R15896 Coq.Init.Logic.False
+R15882 Coq.Lists.List.In
+R15865 Coq.Lists.List.In
+R15869 Locations.R
+R15924 Coq.Lists.List.In
+R15933 Conventions.temporaries
+R15928 Locations.R
+R15924 Coq.Lists.List.In
+R15933 Conventions.temporaries
+R15928 Locations.R
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R16094 Coq.Init.Logic.False
+R16080 Coq.Lists.List.In
+R16063 Coq.Lists.List.In
+R16067 Locations.R
+R16094 Coq.Init.Logic.False
+R16080 Coq.Lists.List.In
+R16063 Coq.Lists.List.In
+R16067 Locations.R
+R16122 Coq.Lists.List.In
+R16131 Conventions.temporaries
+R16126 Locations.R
+R16122 Coq.Lists.List.In
+R16131 Conventions.temporaries
+R16126 Locations.R
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R16251 Coqlib.list_disjoint
+R16251 Coqlib.list_disjoint
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R16345 Coqlib.list_norepet
+R16345 Coqlib.list_norepet
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R16407 Coqlib.list_norepet
+R16407 Coqlib.list_norepet
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R16469 Allocproof.add_reloads_correct_rec
+R16469 Allocproof.add_reloads_correct_rec
+R16695 Locations.notin_not_in
+R16695 Locations.notin_not_in
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R16764 Locations.notin_not_in
+R16764 Locations.notin_not_in
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R16890 Coq.Init.Logic "'exists' x , p" type_scope
+R16956 Coq.Init.Logic "A /\ B" type_scope
+R16904 LTL.exec_instrs
+R16923 Allocation.add_move
+R16978 Coq.Init.Logic "A /\ B" type_scope
+R16969 Coq.Init.Logic "x = y" type_scope
+R17061 Coq.Init.Logic "x = y" type_scope
+R17033 Locations.diff
+R17045 Locations.R
+R17047 Locations.FT1
+R17011 Locations.diff
+R17023 Locations.R
+R17025 Locations.IT1
+R16993 Locations.diff
+R17111 Locations.eq
+R17111 Locations.eq
+R17172 LTL.exec_refl
+R17172 LTL.exec_refl
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R17246 Allocproof.add_spill_correct
+R17246 Allocproof.add_spill_correct
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R17351 Locations.diff_sym
+R17351 Locations.diff_sym
+R17445 Allocproof.add_reload_correct
+R17465 Locations.S
+R17445 Allocproof.add_reload_correct
+R17465 Locations.S
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R17553 Locations.diff_sym
+R17553 Locations.diff_sym
+R17629 Locations.slot_type
+R17646 AST.Tint
+R17654 Locations.IT1
+R17660 AST.Tfloat
+R17670 Locations.FT1
+R17629 Locations.slot_type
+R17646 AST.Tint
+R17654 Locations.IT1
+R17660 AST.Tfloat
+R17670 Locations.FT1
+R17694 Allocproof.add_reload_correct
+R17724 Allocation.add_spill
+R17739 Locations.S
+R17714 Locations.S
+R17694 Allocproof.add_reload_correct
+R17724 Allocation.add_spill
+R17739 Locations.S
+R17714 Locations.S
+R17803 Allocproof.add_spill_correct
+R17826 Locations.S
+R17803 Allocproof.add_spill_correct
+R17826 Locations.S
+R17906 LTL.exec_trans
+R17906 LTL.exec_trans
+R17991 Locations.diff_sym
+R17991 Locations.diff_sym
+R18023 Locations.slot_type
+R18023 Locations.slot_type
+R18051 Locations.diff_sym
+R18051 Locations.diff_sym
+R18300 Coq.Init.Logic "'exists' x , p" type_scope
+R18373 Coq.Init.Logic "A /\ B" type_scope
+R18314 LTL.exec_instrs
+R18333 Allocation.parallel_move
+R18415 Coq.Init.Logic "A /\ B" type_scope
+R18396 Coq.Init.Logic "x = y" type_scope
+R18378 Coq.Lists.List.map
+R18398 Coq.Lists.List.map
+R18445 Coq.Init.Logic "A /\ B" type_scope
+R18432 Coq.Init.Logic "x = y" type_scope
+R18425 Locations.R
+R18427 Locations.IT3
+R18438 Locations.R
+R18440 Locations.IT3
+R18513 Coq.Init.Logic "x = y" type_scope
+R18480 Locations.notin
+R18492 Conventions.temporaries
+R18460 Locations.notin
+R18265 Locations.disjoint
+R18283 Conventions.temporaries
+R18230 Locations.disjoint
+R18248 Conventions.temporaries
+R18208 Locations.norepet
+R18178 Locations.no_overlap
+R18154 Coq.Init.Logic "x = y" type_scope
+R18137 Coq.Lists.List.length
+R18156 Coq.Lists.List.length
+R18537 Allocproof_aux.parallel_move_correctX
+R18537 Allocproof_aux.parallel_move_correctX
+R18576 Allocproof.add_move_correct
+R18576 Allocproof.add_move_correct
+R18781 Coq.Init.Logic "'exists' x , p" type_scope
+R18855 Coq.Init.Logic "A /\ B" type_scope
+R18795 LTL.exec_block
+R18841 LTL.Cont
+R18813 Allocation.add_op
+R18873 Coq.Init.Logic "A /\ B" type_scope
+R18868 Coq.Init.Logic "x = y" type_scope
+R18939 Coq.Init.Logic "x = y" type_scope
+R18906 Locations.notin
+R18918 Conventions.temporaries
+R18888 Locations.diff
+R18767 Coq.Init.Logic "x = y" type_scope
+R18724 Op.eval_operation
+R18749 Coq.Lists.List.map
+R18769 Coq.Init.Datatypes.Some
+R18689 Locations.disjoint
+R18707 Conventions.temporaries
+R18674 Coq.Init.Peano "x <= y" nat_scope
+R18657 Coq.Lists.List.length
+R18990 Op.is_move_operation
+R18990 Op.is_move_operation
+R19064 Op.is_move_operation_correct
+R19064 Op.is_move_operation_correct
+R19164 Allocproof.add_move_correct
+R19190 LTL.Bgoto
+R19164 Allocproof.add_move_correct
+R19190 LTL.Bgoto
+R19269 LTL.exec_Bgoto
+R19269 LTL.exec_Bgoto
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R19462 Allocation.regs_for
+R19462 Allocation.regs_for
+R19491 Allocation.reg_for
+R19491 Allocation.reg_for
+R19519 Allocproof.add_reloads_correct
+R19561 LTL.Bop
+R19580 Allocation.add_spill
+R19600 LTL.Bgoto
+R19519 Allocproof.add_reloads_correct
+R19561 LTL.Bop
+R19580 Allocation.add_spill
+R19600 LTL.Bgoto
+R19690 Locations.set
+R19702 Locations.R
+R19690 Locations.set
+R19702 Locations.R
+R19732 Allocproof.add_spill_correct
+R19760 LTL.Bgoto
+R19732 Allocproof.add_spill_correct
+R19760 LTL.Bgoto
+R19842 LTL.exec_Bgoto
+R19842 LTL.exec_Bgoto
+R19861 LTL.exec_trans
+R19861 LTL.exec_trans
+R19895 LTL.exec_trans
+R19895 LTL.exec_trans
+R19923 LTL.exec_one
+R19923 LTL.exec_one
+R19951 LTL.exec_Bop
+R19951 LTL.exec_Bop
+R20039 Locations.gss
+R20039 Locations.gss
+R20098 Locations.gso
+R20098 Locations.gso
+R20147 Locations.diff_sym
+R20147 Locations.diff_sym
+R20180 Allocproof.reg_for_spec
+R20180 Allocproof.reg_for_spec
+R20236 Locations.in_notin_diff
+R20236 Locations.in_notin_diff
+R20268 Locations.diff_sym
+R20268 Locations.diff_sym
+R20519 Coq.Init.Logic "'exists' x , p" type_scope
+R20603 Coq.Init.Logic "A /\ B" type_scope
+R20533 LTL.exec_block
+R20589 LTL.Cont
+R20551 Allocation.add_load
+R20620 Coq.Init.Logic "A /\ B" type_scope
+R20616 Coq.Init.Logic "x = y" type_scope
+R20686 Coq.Init.Logic "x = y" type_scope
+R20653 Locations.notin
+R20665 Conventions.temporaries
+R20635 Locations.diff
+R20505 Coq.Init.Logic "x = y" type_scope
+R20489 Mem.loadv
+R20507 Coq.Init.Datatypes.Some
+R20475 Coq.Init.Logic "x = y" type_scope
+R20429 Op.eval_addressing
+R20457 Coq.Lists.List.map
+R20477 Coq.Init.Datatypes.Some
+R20394 Locations.disjoint
+R20412 Conventions.temporaries
+R20379 Coq.Init.Peano "x <= y" nat_scope
+R20362 Coq.Lists.List.length
+R20745 Allocation.regs_for
+R20745 Allocation.regs_for
+R20774 Allocation.reg_for
+R20774 Allocation.reg_for
+R20820 Coq.Init.Peano "x <= y" nat_scope
+R20803 Coq.Lists.List.length
+R20820 Coq.Init.Peano "x <= y" nat_scope
+R20803 Coq.Lists.List.length
+R20853 Allocproof.add_reloads_correct
+R20895 LTL.Bload
+R20924 Allocation.add_spill
+R20944 LTL.Bgoto
+R20853 Allocproof.add_reloads_correct
+R20895 LTL.Bload
+R20924 Allocation.add_spill
+R20944 LTL.Bgoto
+R21035 Locations.set
+R21047 Locations.R
+R21035 Locations.set
+R21047 Locations.R
+R21077 Allocproof.add_spill_correct
+R21105 LTL.Bgoto
+R21077 Allocproof.add_spill_correct
+R21105 LTL.Bgoto
+R21187 LTL.exec_Bgoto
+R21187 LTL.exec_Bgoto
+R21206 LTL.exec_trans
+R21206 LTL.exec_trans
+R21234 LTL.exec_trans
+R21234 LTL.exec_trans
+R21262 LTL.exec_one
+R21262 LTL.exec_one
+R21291 LTL.exec_Bload
+R21291 LTL.exec_Bload
+R21405 Locations.gss
+R21405 Locations.gss
+R21463 Locations.gso
+R21463 Locations.gso
+R21513 Locations.diff_sym
+R21513 Locations.diff_sym
+R21546 Allocproof.reg_for_spec
+R21546 Allocproof.reg_for_spec
+R21601 Locations.in_notin_diff
+R21601 Locations.in_notin_diff
+R21633 Locations.diff_sym
+R21633 Locations.diff_sym
+R21928 Coq.Init.Logic "'exists' x , p" type_scope
+R22014 Coq.Init.Logic "A /\ B" type_scope
+R21942 LTL.exec_block
+R21999 LTL.Cont
+R21960 Allocation.add_store
+R22062 Coq.Init.Logic "x = y" type_scope
+R22029 Locations.notin
+R22041 Conventions.temporaries
+R21913 Coq.Init.Logic "x = y" type_scope
+R21887 Mem.storev
+R21915 Coq.Init.Datatypes.Some
+R21873 Coq.Init.Logic "x = y" type_scope
+R21827 Op.eval_addressing
+R21855 Coq.Lists.List.map
+R21875 Coq.Init.Datatypes.Some
+R21796 Locations.notin
+R21810 Conventions.temporaries
+R21761 Locations.disjoint
+R21779 Conventions.temporaries
+R21746 Coq.Init.Peano "x <= y" nat_scope
+R21729 Coq.Lists.List.length
+R22129 Coq.Init.Peano "x <= y" nat_scope
+R22103 Coq.Lists.List.length
+R22120 Coq.Lists.List "x :: y" list_scope
+R22129 Coq.Init.Peano "x <= y" nat_scope
+R22103 Coq.Lists.List.length
+R22120 Coq.Lists.List "x :: y" list_scope
+R22175 Locations.disjoint
+R22202 Conventions.temporaries
+R22193 Coq.Lists.List "x :: y" list_scope
+R22175 Locations.disjoint
+R22202 Conventions.temporaries
+R22193 Coq.Lists.List "x :: y" list_scope
+R22271 Locations.in_notin_diff
+R22271 Locations.in_notin_diff
+R22347 Allocation.regs_for
+R22361 Coq.Lists.List "x :: y" list_scope
+R22347 Allocation.regs_for
+R22361 Coq.Lists.List "x :: y" list_scope
+R22458 Allocproof.add_reloads_correct
+R22508 LTL.Bstore
+R22538 LTL.Bgoto
+R22483 Coq.Lists.List "x :: y" list_scope
+R22458 Allocproof.add_reloads_correct
+R22508 LTL.Bstore
+R22538 LTL.Bgoto
+R22483 Coq.Lists.List "x :: y" list_scope
+R22718 LTL.exec_Bgoto
+R22718 LTL.exec_Bgoto
+R22740 LTL.exec_trans
+R22740 LTL.exec_trans
+R22788 LTL.exec_one
+R22788 LTL.exec_one
+R22804 LTL.exec_Bstore
+R22804 LTL.exec_Bstore
+R23125 Coq.Init.Logic "'exists' x , p" type_scope
+R23208 Coq.Init.Logic "A /\ B" type_scope
+R23139 LTL.exec_block
+R23194 LTL.Cont
+R23157 Allocation.add_cond
+R23256 Coq.Init.Logic "x = y" type_scope
+R23223 Locations.notin
+R23235 Conventions.temporaries
+R23090 Coq.Init.Logic "x = y" type_scope
+R23074 Coq.Init.Logic "x = y" type_scope
+R23035 Op.eval_condition
+R23056 Coq.Lists.List.map
+R23076 Coq.Init.Datatypes.Some
+R23000 Locations.disjoint
+R23018 Conventions.temporaries
+R22985 Coq.Init.Peano "x <= y" nat_scope
+R22968 Coq.Lists.List.length
+R23314 Allocation.regs_for
+R23314 Allocation.regs_for
+R23344 Allocproof.add_reloads_correct
+R23385 LTL.Bcond
+R23344 Allocproof.add_reloads_correct
+R23385 LTL.Bcond
+R23551 LTL.exec_Bcond_true
+R23551 LTL.exec_Bcond_true
+R23633 LTL.exec_Bcond_false
+R23633 LTL.exec_Bcond_false
+R23788 Coq.Init.Datatypes.option
+R23795 LTL.function
+R23828 Coq.Init.Datatypes.inl
+R23837 Globalenvs.find_funct
+R23867 Coq.Init.Datatypes.inr
+R23891 Globalenvs.find_symbol
+R23929 Coq.Init.Datatypes.None
+R23937 Coq.Init.Datatypes.None
+R23950 Coq.Init.Datatypes.Some
+R23960 Globalenvs.find_funct_ptr
+R23778 LTL.locset
+R23764 Coq.Init.Datatypes "x + y" type_scope
+R23760 Locations.loc
+R23766 AST.ident
+R24516 Coq.Init.Logic "'exists' x , p" type_scope
+R24598 Coq.Init.Logic "A /\ B" type_scope
+R24530 LTL.exec_block
+R24583 LTL.Cont
+R24548 Allocation.add_call
+R24618 Coq.Init.Logic "A /\ B" type_scope
+R24611 Coq.Init.Logic "x = y" type_scope
+R24718 Coq.Init.Logic "x = y" type_scope
+R24690 Locations.diff
+R24670 Conventions.loc_acceptable
+R24637 Locations.notin
+R24649 Conventions.destroyed_at_call
+R24493 Conventions.loc_acceptable
+R24461 Conventions.locs_acceptable
+R24419 Coq.Init.Logic "x = y" type_scope
+R24402 Coq.Lists.List.length
+R24421 Coq.Lists.List.length
+R24438 AST.sig_args
+R24381 Coq.Init.Logic "x = y" type_scope
+R24364 Coq.Lists.List.map
+R24338 Coq.Init.Logic "x = y" type_scope
+R24343 LTL.fn_sig
+R24314 Coq.Init.Logic "x = y" type_scope
+R24292 Allocproof.find_function2
+R24316 Coq.Init.Datatypes.Some
+R24173 Coq.Init.Logic "'exists' x , p" type_scope
+R24238 Coq.Init.Logic "A /\ B" type_scope
+R24197 LTL.exec_function
+R24273 Coq.Init.Logic "x = y" type_scope
+R24246 Locations.R
+R24249 Conventions.loc_result
+R24263 LTL.fn_sig
+R24154 Coq.Init.Logic "x = y" type_scope
+R24114 Coq.Lists.List.map
+R24128 Conventions.loc_arguments
+R24145 LTL.fn_sig
+R24895 Coq.Init.Logic "x = y" type_scope
+R24878 Coq.Lists.List.length
+R24897 Coq.Lists.List.length
+R24910 Conventions.loc_arguments
+R24895 Coq.Init.Logic "x = y" type_scope
+R24878 Coq.Lists.List.length
+R24897 Coq.Lists.List.length
+R24910 Conventions.loc_arguments
+R24966 Conventions.loc_arguments_length
+R24966 Conventions.loc_arguments_length
+R25004 Conventions.locs_acceptable_disj_temporaries
+R25004 Conventions.locs_acceptable_disj_temporaries
+R25064 Allocproof.add_reload_correct
+R25098 Allocation.parallel_move
+R25148 LTL.Bcall
+R25188 Allocation.add_spill
+R25220 LTL.Bgoto
+R25199 Conventions.loc_result
+R25159 Coq.Init.Datatypes.inl
+R25169 Locations.IT3
+R25163 AST.ident
+R25118 Conventions.loc_arguments
+R25086 Locations.IT3
+R25064 Allocproof.add_reload_correct
+R25098 Allocation.parallel_move
+R25148 LTL.Bcall
+R25188 Allocation.add_spill
+R25220 LTL.Bgoto
+R25199 Conventions.loc_result
+R25159 Coq.Init.Datatypes.inl
+R25169 Locations.IT3
+R25163 AST.ident
+R25118 Conventions.loc_arguments
+R25086 Locations.IT3
+R25300 Allocproof.parallel_move_correct
+R25563 Conventions.loc_arguments_not_temporaries
+R25513 Conventions.loc_arguments_norepet
+R25467 Conventions.no_overlap_arguments
+R25356 LTL.Bcall
+R25396 Allocation.add_spill
+R25428 LTL.Bgoto
+R25407 Conventions.loc_result
+R25367 Coq.Init.Datatypes.inl
+R25377 Locations.IT3
+R25371 AST.ident
+R25328 Conventions.loc_arguments
+R25300 Allocproof.parallel_move_correct
+R25563 Conventions.loc_arguments_not_temporaries
+R25513 Conventions.loc_arguments_norepet
+R25467 Conventions.no_overlap_arguments
+R25356 LTL.Bcall
+R25396 Allocation.add_spill
+R25428 LTL.Bgoto
+R25407 Conventions.loc_result
+R25367 Coq.Init.Datatypes.inl
+R25377 Locations.IT3
+R25371 AST.ident
+R25328 Conventions.loc_arguments
+R25694 Coq.Init.Logic "x = y" type_scope
+R25661 Coq.Lists.List.map
+R25675 Conventions.loc_arguments
+R25694 Coq.Init.Logic "x = y" type_scope
+R25661 Coq.Lists.List.map
+R25675 Conventions.loc_arguments
+R25751 Coqlib.list_map_exten
+R25751 Coqlib.list_map_exten
+R25809 Locations.diff_sym
+R25809 Locations.diff_sym
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R25930 LTL.return_regs
+R25930 LTL.return_regs
+R25966 Allocproof.add_spill_correct
+R26022 LTL.Bgoto
+R25985 Conventions.loc_result
+R25966 Allocproof.add_spill_correct
+R26022 LTL.Bgoto
+R25985 Conventions.loc_result
+R26123 LTL.exec_Bgoto
+R26123 LTL.exec_Bgoto
+R26145 LTL.exec_trans
+R26145 LTL.exec_trans
+R26178 LTL.exec_trans
+R26178 LTL.exec_trans
+R26211 LTL.exec_trans
+R26211 LTL.exec_trans
+R26229 LTL.exec_one
+R26229 LTL.exec_one
+R26245 LTL.exec_Bcall
+R26245 LTL.exec_Bcall
+R26426 Allocproof.return_regs_result
+R26426 Allocproof.return_regs_result
+R26534 Allocproof.return_regs_not_destroyed
+R26534 Allocproof.return_regs_not_destroyed
+R26609 Locations.diff_sym
+R26609 Locations.diff_sym
+R26652 Conventions.temporaries
+R26629 Locations.in_notin_diff
+R26652 Conventions.temporaries
+R26629 Locations.in_notin_diff
+R26675 Conventions.temporaries_not_acceptable
+R26675 Conventions.temporaries_not_acceptable
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R26731 Conventions.arguments_not_preserved
+R26731 Conventions.arguments_not_preserved
+R26770 Conventions.temporaries_not_acceptable
+R26770 Conventions.temporaries_not_acceptable
+R26812 Locations.diff_sym
+R26812 Locations.diff_sym
+R26884 Coq.Init.Logic "x = y" type_scope
+R26867 Coq.Lists.List.length
+R26886 Coq.Lists.List.length
+R26899 Conventions.loc_arguments
+R26884 Coq.Init.Logic "x = y" type_scope
+R26867 Coq.Lists.List.length
+R26886 Coq.Lists.List.length
+R26899 Conventions.loc_arguments
+R26955 Conventions.loc_arguments_length
+R26955 Conventions.loc_arguments_length
+R26993 Conventions.locs_acceptable_disj_temporaries
+R26993 Conventions.locs_acceptable_disj_temporaries
+R27057 Allocproof.parallel_move_correct
+R27308 Conventions.loc_arguments_not_temporaries
+R27267 Conventions.loc_arguments_norepet
+R27221 Conventions.no_overlap_arguments
+R27113 LTL.Bcall
+R27151 Allocation.add_spill
+R27183 LTL.Bgoto
+R27162 Conventions.loc_result
+R27124 Coq.Init.Datatypes.inr
+R27128 Locations.mreg
+R27085 Conventions.loc_arguments
+R27057 Allocproof.parallel_move_correct
+R27308 Conventions.loc_arguments_not_temporaries
+R27267 Conventions.loc_arguments_norepet
+R27221 Conventions.no_overlap_arguments
+R27113 LTL.Bcall
+R27151 Allocation.add_spill
+R27183 LTL.Bgoto
+R27162 Conventions.loc_result
+R27124 Coq.Init.Datatypes.inr
+R27128 Locations.mreg
+R27085 Conventions.loc_arguments
+R27439 Coq.Init.Logic "x = y" type_scope
+R27406 Coq.Lists.List.map
+R27420 Conventions.loc_arguments
+R27439 Coq.Init.Logic "x = y" type_scope
+R27406 Coq.Lists.List.map
+R27420 Conventions.loc_arguments
+R27566 LTL.return_regs
+R27566 LTL.return_regs
+R27602 Allocproof.add_spill_correct
+R27658 LTL.Bgoto
+R27621 Conventions.loc_result
+R27602 Allocproof.add_spill_correct
+R27658 LTL.Bgoto
+R27621 Conventions.loc_result
+R27759 LTL.exec_Bgoto
+R27759 LTL.exec_Bgoto
+R27781 LTL.exec_trans
+R27781 LTL.exec_trans
+R27814 LTL.exec_trans
+R27814 LTL.exec_trans
+R27832 LTL.exec_one
+R27832 LTL.exec_one
+R27848 LTL.exec_Bcall
+R27848 LTL.exec_Bcall
+R28001 Allocproof.return_regs_result
+R28001 Allocproof.return_regs_result
+R28109 Allocproof.return_regs_not_destroyed
+R28109 Allocproof.return_regs_not_destroyed
+R28167 Conventions.arguments_not_preserved
+R28167 Conventions.arguments_not_preserved
+R28206 Conventions.temporaries_not_acceptable
+R28206 Conventions.temporaries_not_acceptable
+R28248 Locations.diff_sym
+R28248 Locations.diff_sym
+R28451 Coq.Init.Logic "'exists' x , p" type_scope
+R28515 Coq.Init.Logic "A /\ B" type_scope
+R28465 LTL.exec_instrs
+R28484 Allocation.add_undefs
+R28557 Coq.Init.Logic "A /\ B" type_scope
+R28549 Coq.Init.Logic "x = y" type_scope
+R28551 Values.Vundef
+R28531 Coq.Lists.List.In
+R28600 Coq.Init.Logic "x = y" type_scope
+R28575 Locations.notin
+R28436 Coq.Init.Logic "x = y" type_scope
+R28418 Locations.S
+R28421 Locations.Local
+R28438 Values.Vundef
+R28385 Coq.Lists.List.In
+R28389 Locations.S
+R28392 Locations.Local
+R28346 Conventions.loc_acceptable
+R28334 Coq.Lists.List.In
+R28674 LTL.exec_refl
+R28674 LTL.exec_refl
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R28729 Conventions.loc_acceptable
+R28717 Coq.Lists.List.In
+R28729 Conventions.loc_acceptable
+R28717 Coq.Lists.List.In
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R28829 Locations.set
+R28847 Values.Vundef
+R28841 Locations.R
+R28829 Locations.set
+R28847 Values.Vundef
+R28841 Locations.R
+R28944 Coq.Init.Logic "x = y" type_scope
+R28926 Locations.S
+R28929 Locations.Local
+R28946 Values.Vundef
+R28892 Coq.Lists.List.In
+R28896 Locations.S
+R28899 Locations.Local
+R28944 Coq.Init.Logic "x = y" type_scope
+R28926 Locations.S
+R28929 Locations.Local
+R28946 Values.Vundef
+R28892 Coq.Lists.List.In
+R28896 Locations.S
+R28899 Locations.Local
+R28987 Locations.gso
+R28987 Locations.gso
+R29039 Locations.set
+R29057 Values.Vundef
+R29051 Locations.R
+R29039 Locations.set
+R29057 Values.Vundef
+R29051 Locations.R
+R29149 LTL.exec_trans
+R29149 LTL.exec_trans
+R29167 LTL.exec_one
+R29167 LTL.exec_one
+R29183 LTL.exec_Bop
+R29183 LTL.exec_Bop
+R29250 Coq.Lists.List.In_dec
+R29257 Locations.eq
+R29250 Coq.Lists.List.In_dec
+R29257 Locations.eq
+R29351 Locations.gss
+R29351 Locations.gss
+R29388 Allocproof.loc_acceptable_notin_notin
+R29388 Allocproof.loc_acceptable_notin_notin
+R29456 Locations.gso
+R29456 Locations.gso
+R29477 Locations.diff_sym
+R29477 Locations.diff_sym
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R29619 Coq.Init.Logic "x = y" type_scope
+R29601 Locations.S
+R29604 Locations.Local
+R29621 Values.Vundef
+R29568 Coq.Lists.List.In
+R29572 Locations.S
+R29575 Locations.Local
+R29619 Coq.Init.Logic "x = y" type_scope
+R29601 Locations.S
+R29604 Locations.Local
+R29621 Values.Vundef
+R29568 Coq.Lists.List.In
+R29572 Locations.S
+R29575 Locations.Local
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R29791 Coq.Lists.List.In_dec
+R29798 Locations.eq
+R29791 Coq.Lists.List.In_dec
+R29798 Locations.eq
+R29895 Coq.Lists.List.in_eq
+R29889 Locations.S
+R29895 Coq.Lists.List.in_eq
+R29889 Locations.S
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R29987 Allocproof.loc_acceptable_notin_notin
+R29987 Allocproof.loc_acceptable_notin_notin
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R30339 Coq.Init.Logic "'exists' x , p" type_scope
+R30422 Coq.Init.Logic "A /\ B" type_scope
+R30353 LTL.exec_block
+R30408 LTL.Cont
+R30371 Allocation.add_entry
+R30482 Coq.Init.Logic "A /\ B" type_scope
+R30447 Coq.Init.Logic "x = y" type_scope
+R30427 Coq.Lists.List.map
+R30449 Coq.Lists.List.map
+R30462 Conventions.loc_parameters
+R30519 Coq.Init.Logic "x = y" type_scope
+R30521 Values.Vundef
+R30498 Coq.Lists.List.In
+R30324 Coq.Init.Logic "x = y" type_scope
+R30306 Locations.S
+R30309 Locations.Local
+R30326 Values.Vundef
+R30258 Conventions.locs_acceptable
+R30226 Locations.disjoint
+R30198 Conventions.locs_acceptable
+R30174 Locations.norepet
+R30140 Coq.Init.Logic "x = y" type_scope
+R30121 Coq.Lists.List.length
+R30142 Coq.Lists.List.length
+R30159 AST.sig_args
+R30591 Coq.Init.Logic "x = y" type_scope
+R30558 Coq.Lists.List.length
+R30571 Conventions.loc_parameters
+R30593 Coq.Lists.List.length
+R30591 Coq.Init.Logic "x = y" type_scope
+R30558 Coq.Lists.List.length
+R30571 Conventions.loc_parameters
+R30593 Coq.Lists.List.length
+R30649 Coqlib.list_length_map
+R30649 Coqlib.list_length_map
+R30679 Conventions.loc_arguments_length
+R30679 Conventions.loc_arguments_length
+R30723 Locations.disjoint
+R30743 Conventions.temporaries
+R30723 Locations.disjoint
+R30743 Conventions.temporaries
+R30767 Conventions.locs_acceptable_disj_temporaries
+R30767 Conventions.locs_acceptable_disj_temporaries
+R30821 Allocproof.parallel_move_correct
+R30968 Conventions.loc_parameters_not_temporaries
+R30918 Conventions.no_overlap_parameters
+R30848 Allocation.add_undefs
+R30867 LTL.Bgoto
+R30821 Allocproof.parallel_move_correct
+R30968 Conventions.loc_parameters_not_temporaries
+R30918 Conventions.no_overlap_parameters
+R30848 Allocation.add_undefs
+R30867 LTL.Bgoto
+R31134 Coq.Init.Logic "x = y" type_scope
+R31116 Locations.S
+R31119 Locations.Local
+R31136 Values.Vundef
+R31079 Coq.Lists.List.In
+R31083 Locations.S
+R31086 Locations.Local
+R31134 Coq.Init.Logic "x = y" type_scope
+R31116 Locations.S
+R31119 Locations.Local
+R31136 Values.Vundef
+R31079 Coq.Lists.List.In
+R31083 Locations.S
+R31086 Locations.Local
+R31185 Locations.disjoint_notin
+R31185 Locations.disjoint_notin
+R31227 Locations.disjoint_sym
+R31227 Locations.disjoint_sym
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R31289 Allocproof.add_undefs_correct
+R31316 LTL.Bgoto
+R31289 Allocproof.add_undefs_correct
+R31316 LTL.Bgoto
+R31404 LTL.exec_Bgoto
+R31404 LTL.exec_Bgoto
+R31444 LTL.exec_trans
+R31444 LTL.exec_trans
+R31512 Coqlib.list_map_exten
+R31512 Coqlib.list_map_exten
+R31570 Locations.disjoint_notin
+R31570 Locations.disjoint_notin
+R31671 Coq.Init.Logic "'exists' x , p" type_scope
+R31744 Coq.Init.Logic "A /\ B" type_scope
+R31685 LTL.exec_block
+R31731 LTL.Return
+R31703 Allocation.add_return
+R31771 Coq.Init.Datatypes.Some
+R31808 Coq.Init.Logic "x = y" type_scope
+R31788 Locations.R
+R31791 Conventions.loc_result
+R31821 Coq.Init.Datatypes.None
+R31854 Coq.Init.Logic "x = y" type_scope
+R31834 Locations.R
+R31837 Conventions.loc_result
+R31856 Values.Vundef
+R31939 Allocproof.add_reload_correct
+R31977 LTL.Breturn
+R31961 Conventions.loc_result
+R31939 Allocproof.add_reload_correct
+R31977 LTL.Breturn
+R31961 Conventions.loc_result
+R32057 LTL.exec_Breturn
+R32057 LTL.exec_Breturn
+R32105 Locations.set
+R32137 Values.Vundef
+R32117 Locations.R
+R32120 Conventions.loc_result
+R32105 Locations.set
+R32137 Values.Vundef
+R32117 Locations.R
+R32120 Conventions.loc_result
+R32166 LTL.exec_Breturn
+R32166 LTL.exec_Breturn
+R32186 LTL.exec_one
+R32186 LTL.exec_one
+R32207 LTL.exec_Bop
+R32207 LTL.exec_Bop
+R32236 Locations.gss
+R32236 Locations.gss
+R32412 Coq.Init.Peano "x <= y" nat_scope
+R32378 Coq.Lists.List.length
+R32391 Op.type_of_condition
+R32365 Op.condition
+R32591 Coq.Init.Peano "x <= y" nat_scope
+R32550 Coq.Lists.List.length
+R32563 Coq.Init.Datatypes.fst
+R32568 Op.type_of_operation
+R32537 Op.operation
+R32676 Allocproof.length_type_of_condition
+R32676 Allocproof.length_type_of_condition
+R32810 Coq.Init.Peano "x <= y" nat_scope
+R32772 Coq.Lists.List.length
+R32785 Op.type_of_addressing
+R32758 Op.addressing
+R33059 Coq.Init.Peano "x <= y" nat_scope
+R33042 Coq.Lists.List.length
+R33013 Coq.Init.Logic "x = y" type_scope
+R32984 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R32985 Coq.Lists.List.map
+R33015 Op.type_of_operation
+R32976 Registers.reg
+R32960 Coq.Lists.List.list
+R32965 Registers.reg
+R32942 Op.operation
+R32929 RTLtyping.regenv
+R33099 Coqlib.list_length_map
+R33099 Coqlib.list_length_map
+R33136 Allocproof.length_type_of_operation
+R33136 Allocproof.length_type_of_operation
+R33354 Coq.Init.Peano "x <= y" nat_scope
+R33337 Coq.Lists.List.length
+R33305 Coq.Init.Logic "x = y" type_scope
+R33287 Coq.Lists.List.map
+R33307 Op.type_of_addressing
+R33274 Coq.Lists.List.list
+R33279 Registers.reg
+R33255 Op.addressing
+R33240 RTLtyping.regenv
+R33394 Coqlib.list_length_map
+R33394 Coqlib.list_length_map
+R33436 Allocproof.length_type_of_addressing
+R33436 Allocproof.length_type_of_addressing
+R33620 Coq.Init.Peano "x <= y" nat_scope
+R33603 Coq.Lists.List.length
+R33572 Coq.Init.Logic "x = y" type_scope
+R33554 Coq.Lists.List.map
+R33574 Op.type_of_condition
+R33541 Coq.Lists.List.list
+R33546 Registers.reg
+R33523 Op.condition
+R33508 RTLtyping.regenv
+R33660 Coqlib.list_length_map
+R33660 Coqlib.list_length_map
+R33702 Allocproof.length_type_of_condition
+R33702 Allocproof.length_type_of_condition
+R33805 RTL.program
+R33834 LTL.program
+R33886 Coq.Init.Logic "x = y" type_scope
+R33866 Allocation.transf_program
+R33888 Coq.Init.Datatypes.Some
+R33911 Globalenvs.globalenv
+R33943 Globalenvs.globalenv
+R34035 Coq.Init.Logic "x = y" type_scope
+R34012 Globalenvs.find_symbol
+R34037 Globalenvs.find_symbol
+R34004 AST.ident
+R34137 Allocation.transf_function
+R34100 Globalenvs.find_symbol_transf_partial
+R34137 Allocation.transf_function
+R34100 Globalenvs.find_symbol_transf_partial
+R34278 Coq.Init.Logic "'exists' x , p" type_scope
+R34323 Coq.Init.Logic "A /\ B" type_scope
+R34313 Coq.Init.Logic "x = y" type_scope
+R34291 Globalenvs.find_funct
+R34315 Coq.Init.Datatypes.Some
+R34344 Coq.Init.Logic "x = y" type_scope
+R34326 Allocation.transf_function
+R34346 Coq.Init.Datatypes.Some
+R34264 Coq.Init.Logic "x = y" type_scope
+R34243 Globalenvs.find_funct
+R34266 Coq.Init.Datatypes.Some
+R34226 RTL.function
+R34217 Values.val
+R34393 Globalenvs.find_funct_transf_partial
+R34424 Allocation.transf_function
+R34393 Globalenvs.find_funct_transf_partial
+R34424 Allocation.transf_function
+R34459 Allocation.transf_function
+R34459 Allocation.transf_function
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R34677 Coq.Init.Logic "'exists' x , p" type_scope
+R34726 Coq.Init.Logic "A /\ B" type_scope
+R34716 Coq.Init.Logic "x = y" type_scope
+R34690 Globalenvs.find_funct_ptr
+R34718 Coq.Init.Datatypes.Some
+R34747 Coq.Init.Logic "x = y" type_scope
+R34729 Allocation.transf_function
+R34749 Coq.Init.Datatypes.Some
+R34663 Coq.Init.Logic "x = y" type_scope
+R34638 Globalenvs.find_funct_ptr
+R34665 Coq.Init.Datatypes.Some
+R34621 RTL.function
+R34603 Values.block
+R34796 Globalenvs.find_funct_ptr_transf_partial
+R34831 Allocation.transf_function
+R34796 Globalenvs.find_funct_ptr_transf_partial
+R34831 Allocation.transf_function
+R34866 Allocation.transf_function
+R34866 Allocation.transf_function
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R35063 Coq.Init.Logic "x = y" type_scope
+R35051 LTL.fn_sig
+R35068 RTL.fn_sig
+R35032 Coq.Init.Logic "x = y" type_scope
+R35014 Allocation.transf_function
+R35034 Coq.Init.Datatypes.Some
+R35139 RTLtyping.type_rtl_function
+R35139 RTLtyping.type_rtl_function
+R35173 Allocation.analyze
+R35173 Allocation.analyze
+R35197 Coloring.regalloc
+R35197 Coloring.regalloc
+R35469 Coq.Init.Logic "x = y" type_scope
+R35450 LTL.fn_entrypoint
+R35474 RTL.fn_nextpc
+R35431 Coq.Init.Logic "x = y" type_scope
+R35413 Allocation.transf_function
+R35433 Coq.Init.Datatypes.Some
+R35548 RTLtyping.type_rtl_function
+R35548 RTLtyping.type_rtl_function
+R35582 Allocation.analyze
+R35582 Allocation.analyze
+R35606 Coloring.regalloc
+R35606 Coloring.regalloc
+R36234 Coq.Init.Logic "'exists' x , p" type_scope
+R36298 Coq.Init.Logic "A /\ B" type_scope
+R36250 LTL.exec_blocks
+R36281 LTL.Cont
+R36305 Allocproof.agree
+R36322 Maps "a !! b"
+R36188 Maps.map
+R36199 Allocation.transf_instr
+R36130 Allocproof.agree
+R36144 Allocation.transfer
+R36162 Maps "a !! b"
+R36101 Coq.Init.Logic "x = y" type_scope
+R36066 Coloring.regalloc
+R36083 Allocproof.live0
+R36103 Coq.Init.Datatypes.Some
+R36032 RTLtyping.wt_function
+R35999 Coq.Init.Logic "x = y" type_scope
+R36004 RTL.fn_code
+R35938 Mem.mem
+R35925 RTL.regset
+R35913 LTL.node
+R35894 Mem.mem
+R35882 RTL.regset
+R35871 LTL.node
+R35853 Values.val
+R35838 RTL.code
+R36847 Coq.Init.Logic "'exists' x , p" type_scope
+R36911 Coq.Init.Logic "A /\ B" type_scope
+R36863 LTL.exec_blocks
+R36894 LTL.Cont
+R36918 Allocproof.agree
+R36932 Allocation.transfer
+R36951 Maps "a !! b"
+R36801 Maps.map
+R36812 Allocation.transf_instr
+R36779 Coq.Init.Logic "x <> y" type_scope
+R36774 Maps "a ! b"
+R36782 Coq.Init.Datatypes.None
+R36708 Allocproof.agree
+R36722 Allocation.transfer
+R36740 Maps "a !! b"
+R36679 Coq.Init.Logic "x = y" type_scope
+R36644 Coloring.regalloc
+R36661 Allocproof.live0
+R36681 Coq.Init.Datatypes.Some
+R36616 Coq.Init.Logic "x = y" type_scope
+R36606 Allocation.analyze
+R36618 Coq.Init.Datatypes.Some
+R36572 RTLtyping.wt_function
+R36539 Coq.Init.Logic "x = y" type_scope
+R36544 RTL.fn_code
+R36477 Mem.mem
+R36464 RTL.regset
+R36452 LTL.node
+R36433 Mem.mem
+R36421 RTL.regset
+R36410 LTL.node
+R36392 Values.val
+R36377 RTL.code
+R37204 Coq.Init.Logic "'exists' x , p" type_scope
+R37257 Coq.Init.Logic "A /\ B" type_scope
+R37220 LTL.exec_function
+R37309 Coq.Init.Logic "x = y" type_scope
+R37269 Locations.R
+R37272 Conventions.loc_result
+R37299 LTL.fn_sig
+R37192 Coq.Init.Logic "x = y" type_scope
+R37140 Coq.Lists.List.map
+R37153 Conventions.loc_arguments
+R37183 LTL.fn_sig
+R37125 Coq.Init.Logic "x = y" type_scope
+R37107 Allocation.transf_function
+R37127 Coq.Init.Datatypes.Some
+R37074 Mem.mem
+R37064 Values.val
+R37045 Mem.mem
+R37031 Coq.Lists.List.list
+R37036 Values.val
+R37010 RTL.function
+R37409 Coq.Init.Logic "x = y" type_scope
+R37395 Maps.get
+R37411 Coq.Init.Datatypes.Some
+R37431 Coq.Init.Logic "x = y" type_scope
+R37433 RTL.fn_code
+R37458 Allocproof.agree
+R37467 Allocation.transfer
+R37624 Coq.Init.Logic "x = y" type_scope
+R37610 Maps.get
+R37626 Coq.Init.Datatypes.Some
+R37646 Coq.Init.Logic "x = y" type_scope
+R37648 RTL.fn_code
+R37673 RTLtyping.wt_function
+R37772 RTLtyping.wt_instrs
+R37986 Coq.Init.Logic "x = y" type_scope
+R37972 Maps.get
+R37988 Coq.Init.Datatypes.Some
+R38017 LTL.exec_blocks_one
+R38049 Maps.gmap
+R38317 Allocproof.exec_instr_prop
+R38296 Coq.Init.Logic "x = y" type_scope
+R38291 Maps "a ! b"
+R38298 Coq.Init.Datatypes.Some
+R38304 RTL.Inop
+R38276 RTL.node
+R38264 Mem.mem
+R38251 RTL.regset
+R38231 Coq.NArith.BinPos.positive
+R38220 Values.val
+R38194 Maps.t
+R38202 RTL.instruction
+R38440 LTL.exec_Bgoto
+R38440 LTL.exec_Bgoto
+R38458 LTL.exec_refl
+R38458 LTL.exec_refl
+R38782 Allocproof.exec_instr_prop
+R38819 Registers "a # b <- c"
+R38768 Coq.Init.Logic "x = y" type_scope
+R38731 Op.eval_operation
+R38759 Registers "a ## b"
+R38770 Coq.Init.Datatypes.Some
+R38697 Coq.Init.Logic "x = y" type_scope
+R38692 Maps "a ! b"
+R38699 Coq.Init.Datatypes.Some
+R38705 RTL.Iop
+R38682 Values.val
+R38668 RTL.node
+R38656 Registers.reg
+R38635 Coq.Lists.List.list
+R38640 Registers.reg
+R38616 Op.operation
+R38605 Mem.mem
+R38586 Registers.t
+R38595 Values.val
+R38566 Coq.NArith.BinPos.positive
+R38555 Values.val
+R38529 Maps.t
+R38537 RTL.instruction
+R38887 Registers.mem
+R38906 Maps "a !! b"
+R38887 Registers.mem
+R38906 Maps "a !! b"
+R38993 Coq.Init.Peano "x <= y" nat_scope
+R38958 Coq.Lists.List.length
+R38971 Coq.Lists.List.map
+R38993 Coq.Init.Peano "x <= y" nat_scope
+R38958 Coq.Lists.List.length
+R38971 Coq.Lists.List.map
+R39017 Coqlib.list_length_map
+R39017 Coqlib.list_length_map
+R39093 Allocproof.length_op_args
+R39093 Allocproof.length_op_args
+R39132 Locations.disjoint
+R39168 Conventions.temporaries
+R39146 Coq.Lists.List.map
+R39132 Locations.disjoint
+R39168 Conventions.temporaries
+R39146 Coq.Lists.List.map
+R39193 Allocproof.regalloc_disj_temporaries
+R39193 Allocproof.regalloc_disj_temporaries
+R39289 Coq.Init.Logic "x = y" type_scope
+R39237 Op.eval_operation
+R39263 Coq.Lists.List.map
+R39271 Coq.Lists.List.map
+R39291 Coq.Init.Datatypes.Some
+R39289 Coq.Init.Logic "x = y" type_scope
+R39237 Op.eval_operation
+R39263 Coq.Lists.List.map
+R39271 Coq.Lists.List.map
+R39291 Coq.Init.Datatypes.Some
+R39313 Coq.Lists.List.map
+R39321 Coq.Lists.List.map
+R39346 Registers "a ## b"
+R39313 Coq.Lists.List.map
+R39321 Coq.Lists.List.map
+R39346 Registers "a ## b"
+R39368 Op.eval_operation_preserved
+R39393 Allocproof.symbols_preserved
+R39368 Op.eval_operation_preserved
+R39393 Allocproof.symbols_preserved
+R39446 Allocproof.agree_eval_regs
+R39446 Allocproof.agree_eval_regs
+R39484 Allocproof.add_op_correct
+R39526 Coq.Lists.List.map
+R39484 Allocproof.add_op_correct
+R39526 Coq.Lists.List.map
+R39727 Coloringproof.regalloc_correct_1
+R39727 Coloringproof.regalloc_correct_1
+R39814 Op.is_move_operation
+R39814 Op.is_move_operation
+R39910 Op.is_move_operation_correct
+R39910 Op.is_move_operation_correct
+R40036 Allocproof.agree_move_live
+R40036 Allocproof.agree_move_live
+R40126 Allocproof.agree_eval_reg
+R40126 Allocproof.agree_eval_reg
+R40215 Allocproof.agree_assign_live
+R40215 Allocproof.agree_assign_live
+R40268 Allocproof.agree_reg_list_live
+R40268 Allocproof.agree_reg_list_live
+R40410 LTL.exec_Bgoto
+R40428 LTL.exec_refl
+R40410 LTL.exec_Bgoto
+R40428 LTL.exec_refl
+R40447 Allocproof.agree_assign_dead
+R40447 Allocproof.agree_assign_dead
+R40852 Allocproof.exec_instr_prop
+R40888 Registers "a # b <- c"
+R40838 Coq.Init.Logic "x = y" type_scope
+R40822 Mem.loadv
+R40840 Coq.Init.Datatypes.Some
+R40808 Coq.Init.Logic "x = y" type_scope
+R40770 Op.eval_addressing
+R40800 Registers "a ## b"
+R40810 Coq.Init.Datatypes.Some
+R40726 Coq.Init.Logic "x = y" type_scope
+R40721 Maps "a ! b"
+R40728 Coq.Init.Datatypes.Some
+R40734 RTL.Iload
+R40711 Values.val
+R40711 Values.val
+R40690 RTL.node
+R40678 Registers.reg
+R40661 Coq.Lists.List.list
+R40666 Registers.reg
+R40641 Op.addressing
+R40615 AST.memory_chunk
+R40601 Mem.mem
+R40582 Registers.t
+R40591 Values.val
+R40562 Coq.NArith.BinPos.positive
+R40551 Values.val
+R40525 Maps.t
+R40533 RTL.instruction
+R40955 Registers.mem
+R40974 Maps "a !! b"
+R40955 Registers.mem
+R40974 Maps "a !! b"
+R41081 Coq.Init.Peano "x <= y" nat_scope
+R41046 Coq.Lists.List.length
+R41059 Coq.Lists.List.map
+R41081 Coq.Init.Peano "x <= y" nat_scope
+R41046 Coq.Lists.List.length
+R41059 Coq.Lists.List.map
+R41105 Coqlib.list_length_map
+R41105 Coqlib.list_length_map
+R41154 Allocproof.length_addr_args
+R41154 Allocproof.length_addr_args
+R41195 Locations.disjoint
+R41231 Conventions.temporaries
+R41209 Coq.Lists.List.map
+R41195 Locations.disjoint
+R41231 Conventions.temporaries
+R41209 Coq.Lists.List.map
+R41256 Allocproof.regalloc_disj_temporaries
+R41256 Allocproof.regalloc_disj_temporaries
+R41368 Coq.Init.Logic "x = y" type_scope
+R41313 Op.eval_addressing
+R41342 Coq.Lists.List.map
+R41350 Coq.Lists.List.map
+R41370 Coq.Init.Datatypes.Some
+R41368 Coq.Init.Logic "x = y" type_scope
+R41313 Op.eval_addressing
+R41342 Coq.Lists.List.map
+R41350 Coq.Lists.List.map
+R41370 Coq.Init.Datatypes.Some
+R41414 Registers "a ## b"
+R41428 Coq.Lists.List.map
+R41436 Coq.Lists.List.map
+R41414 Registers "a ## b"
+R41428 Coq.Lists.List.map
+R41436 Coq.Lists.List.map
+R41465 Op.eval_addressing_preserved
+R41465 Op.eval_addressing_preserved
+R41498 Allocproof.symbols_preserved
+R41498 Allocproof.symbols_preserved
+R41528 Allocproof.agree_eval_regs
+R41528 Allocproof.agree_eval_regs
+R41566 Allocproof.add_load_correct
+R41617 Coq.Lists.List.map
+R41566 Allocproof.add_load_correct
+R41617 Coq.Lists.List.map
+R41823 Coloringproof.regalloc_correct_1
+R41823 Coloringproof.regalloc_correct_1
+R41920 Allocproof.agree_assign_live
+R41920 Allocproof.agree_assign_live
+R41955 Allocproof.agree_reg_list_live
+R41955 Allocproof.agree_reg_list_live
+R42059 LTL.exec_Bgoto
+R42077 LTL.exec_refl
+R42059 LTL.exec_Bgoto
+R42077 LTL.exec_refl
+R42096 Allocproof.agree_assign_dead
+R42096 Allocproof.agree_assign_dead
+R42517 Allocproof.exec_instr_prop
+R42502 Coq.Init.Logic "x = y" type_scope
+R42476 Mem.storev
+R42496 Registers "a # b"
+R42504 Coq.Init.Datatypes.Some
+R42462 Coq.Init.Logic "x = y" type_scope
+R42424 Op.eval_addressing
+R42454 Registers "a ## b"
+R42464 Coq.Init.Datatypes.Some
+R42379 Coq.Init.Logic "x = y" type_scope
+R42374 Maps "a ! b"
+R42381 Coq.Init.Datatypes.Some
+R42387 RTL.Istore
+R42364 Mem.mem
+R42353 Values.val
+R42334 RTL.node
+R42322 Registers.reg
+R42305 Coq.Lists.List.list
+R42310 Registers.reg
+R42285 Op.addressing
+R42259 AST.memory_chunk
+R42245 Mem.mem
+R42226 Registers.t
+R42235 Values.val
+R42206 Coq.NArith.BinPos.positive
+R42195 Values.val
+R42169 Maps.t
+R42177 RTL.instruction
+R42650 Coq.Init.Peano "x <= y" nat_scope
+R42615 Coq.Lists.List.length
+R42628 Coq.Lists.List.map
+R42650 Coq.Init.Peano "x <= y" nat_scope
+R42615 Coq.Lists.List.length
+R42628 Coq.Lists.List.map
+R42674 Coqlib.list_length_map
+R42674 Coqlib.list_length_map
+R42723 Allocproof.length_addr_args
+R42723 Allocproof.length_addr_args
+R42764 Locations.disjoint
+R42800 Conventions.temporaries
+R42778 Coq.Lists.List.map
+R42764 Locations.disjoint
+R42800 Conventions.temporaries
+R42778 Coq.Lists.List.map
+R42825 Allocproof.regalloc_disj_temporaries
+R42825 Allocproof.regalloc_disj_temporaries
+R42874 Locations.notin
+R42897 Conventions.temporaries
+R42874 Locations.notin
+R42897 Conventions.temporaries
+R42922 Allocproof.regalloc_not_temporary
+R42922 Allocproof.regalloc_not_temporary
+R43031 Coq.Init.Logic "x = y" type_scope
+R42976 Op.eval_addressing
+R43005 Coq.Lists.List.map
+R43013 Coq.Lists.List.map
+R43033 Coq.Init.Datatypes.Some
+R43031 Coq.Init.Logic "x = y" type_scope
+R42976 Op.eval_addressing
+R43005 Coq.Lists.List.map
+R43013 Coq.Lists.List.map
+R43033 Coq.Init.Datatypes.Some
+R43076 Registers "a ## b"
+R43090 Coq.Lists.List.map
+R43098 Coq.Lists.List.map
+R43076 Registers "a ## b"
+R43090 Coq.Lists.List.map
+R43098 Coq.Lists.List.map
+R43127 Op.eval_addressing_preserved
+R43127 Op.eval_addressing_preserved
+R43160 Allocproof.symbols_preserved
+R43160 Allocproof.symbols_preserved
+R43190 Allocproof.agree_eval_regs
+R43190 Allocproof.agree_eval_regs
+R43246 Coq.Init.Logic "x = y" type_scope
+R43250 Registers "a # b"
+R43246 Coq.Init.Logic "x = y" type_scope
+R43250 Registers "a # b"
+R43268 Allocproof.agree_eval_reg
+R43268 Allocproof.agree_eval_reg
+R43291 Allocproof.agree_reg_list_live
+R43291 Allocproof.agree_reg_list_live
+R43358 Allocproof.add_store_correct
+R43410 Coq.Lists.List.map
+R43358 Allocproof.add_store_correct
+R43410 Coq.Lists.List.map
+R43601 Coloringproof.regalloc_correct_1
+R43601 Coloringproof.regalloc_correct_1
+R43698 Allocproof.agree_exten
+R43698 Allocproof.agree_exten
+R43728 Allocproof.agree_reg_live
+R43728 Allocproof.agree_reg_live
+R43751 Allocproof.agree_reg_list_live
+R43751 Allocproof.agree_reg_list_live
+R44266 Allocproof.exec_instr_prop
+R44302 Registers "a # b <- c"
+R44219 Allocproof.exec_function_prop
+R44243 Registers "a ## b"
+R44170 RTL.exec_function
+R44196 Registers "a ## b"
+R44150 Coq.Init.Logic "x = y" type_scope
+R44152 RTL.fn_sig
+R44132 Coq.Init.Logic "x = y" type_scope
+R44104 RTL.find_function
+R44134 Coq.Init.Datatypes.Some
+R44063 Coq.Init.Logic "x = y" type_scope
+R44058 Maps "a ! b"
+R44065 Coq.Init.Datatypes.Some
+R44071 RTL.Icall
+R44048 Mem.mem
+R44037 Values.val
+R44015 RTL.function
+R43996 RTL.node
+R43984 Registers.reg
+R43967 Coq.Lists.List.list
+R43972 Registers.reg
+R43946 Coq.Init.Datatypes "x + y" type_scope
+R43942 Registers.reg
+R43948 AST.ident
+R43924 AST.signature
+R43912 Mem.mem
+R43899 RTL.regset
+R43879 Coq.NArith.BinPos.positive
+R43868 Values.val
+R43842 Maps.t
+R43850 RTL.instruction
+R44377 Coqlib.sum_left_map
+R44377 Coqlib.sum_left_map
+R44419 Coq.Init.Logic "'exists' x , p" type_scope
+R44478 Coq.Init.Logic "A /\ B" type_scope
+R44468 Coq.Init.Logic "x = y" type_scope
+R44442 Allocproof.find_function2
+R44470 Coq.Init.Datatypes.Some
+R44511 Coq.Init.Logic "x = y" type_scope
+R44493 Allocation.transf_function
+R44513 Coq.Init.Datatypes.Some
+R44419 Coq.Init.Logic "'exists' x , p" type_scope
+R44478 Coq.Init.Logic "A /\ B" type_scope
+R44468 Coq.Init.Logic "x = y" type_scope
+R44442 Allocproof.find_function2
+R44470 Coq.Init.Datatypes.Some
+R44511 Coq.Init.Logic "x = y" type_scope
+R44493 Allocation.transf_function
+R44513 Coq.Init.Datatypes.Some
+R44583 Allocproof.functions_translated
+R44583 Allocproof.functions_translated
+R44641 Registers "a # b"
+R44641 Registers "a # b"
+R44691 Allocproof.agree_eval_reg
+R44691 Allocproof.agree_eval_reg
+R44718 Allocproof.agree_reg_list_live
+R44718 Allocproof.agree_reg_list_live
+R44758 Allocproof.symbols_preserved
+R44758 Allocproof.symbols_preserved
+R44787 Globalenvs.find_symbol
+R44787 Globalenvs.find_symbol
+R44821 Allocproof.function_ptr_translated
+R44821 Allocproof.function_ptr_translated
+R44938 Coq.Init.Logic "x = y" type_scope
+R44940 LTL.fn_sig
+R44938 Coq.Init.Logic "x = y" type_scope
+R44940 LTL.fn_sig
+R44965 Allocproof.sig_function_translated
+R44965 Allocproof.sig_function_translated
+R45111 Coq.Init.Logic "x = y" type_scope
+R45076 Coq.Lists.List.map
+R45089 Coq.Lists.List.map
+R45115 Registers "a ## b"
+R45111 Coq.Init.Logic "x = y" type_scope
+R45076 Coq.Lists.List.map
+R45089 Coq.Lists.List.map
+R45115 Registers "a ## b"
+R45135 Allocproof.agree_eval_regs
+R45135 Allocproof.agree_eval_regs
+R45212 Coq.Init.Logic "x = y" type_scope
+R45177 Coq.Lists.List.length
+R45190 Coq.Lists.List.map
+R45250 Coq.Lists.List.length
+R45267 AST.sig_args
+R45212 Coq.Init.Logic "x = y" type_scope
+R45177 Coq.Lists.List.length
+R45190 Coq.Lists.List.map
+R45250 Coq.Lists.List.length
+R45267 AST.sig_args
+R45334 Coqlib.list_length_map
+R45334 Coqlib.list_length_map
+R45334 Coqlib.list_length_map
+R45334 Coqlib.list_length_map
+R45376 Conventions.locs_acceptable
+R45393 Coq.Lists.List.map
+R45376 Conventions.locs_acceptable
+R45393 Coq.Lists.List.map
+R45428 Coloringproof.regsalloc_acceptable
+R45428 Coloringproof.regsalloc_acceptable
+R45491 Coloringproof.regalloc_correct_1
+R45491 Coloringproof.regalloc_correct_1
+R45606 Conventions.loc_acceptable
+R45606 Conventions.loc_acceptable
+R45647 Coloringproof.regalloc_acceptable
+R45647 Coloringproof.regalloc_acceptable
+R45689 Allocproof.add_call_correct
+R45689 Allocproof.add_call_correct
+R45924 Allocproof.agree_call
+R45924 Allocproof.agree_call
+R46240 Allocproof.exec_instr_prop
+R46223 Coq.Init.Logic "x = y" type_scope
+R46192 Op.eval_condition
+R46215 Registers "a ## b"
+R46225 Coq.Init.Datatypes.Some
+R46230 Coq.Init.Datatypes.true
+R46151 Coq.Init.Logic "x = y" type_scope
+R46146 Maps "a ! b"
+R46153 Coq.Init.Datatypes.Some
+R46159 RTL.Icond
+R46131 RTL.node
+R46131 RTL.node
+R46103 Coq.Lists.List.list
+R46108 Registers.reg
+R46084 Op.condition
+R46071 Mem.mem
+R46052 Registers.t
+R46061 Values.val
+R46032 Coq.NArith.BinPos.positive
+R46021 Values.val
+R45995 Maps.t
+R46003 RTL.instruction
+R46368 Coq.Init.Peano "x <= y" nat_scope
+R46338 Coq.Lists.List.length
+R46351 Coq.Lists.List.map
+R46368 Coq.Init.Peano "x <= y" nat_scope
+R46338 Coq.Lists.List.length
+R46351 Coq.Lists.List.map
+R46392 Coqlib.list_length_map
+R46392 Coqlib.list_length_map
+R46436 Allocproof.length_cond_args
+R46436 Allocproof.length_cond_args
+R46477 Locations.disjoint
+R46508 Conventions.temporaries
+R46491 Coq.Lists.List.map
+R46477 Locations.disjoint
+R46508 Conventions.temporaries
+R46491 Coq.Lists.List.map
+R46533 Allocproof.regalloc_disj_temporaries
+R46533 Allocproof.regalloc_disj_temporaries
+R46630 Coq.Init.Logic "x = y" type_scope
+R46583 Op.eval_condition
+R46604 Coq.Lists.List.map
+R46612 Coq.Lists.List.map
+R46632 Coq.Init.Datatypes.Some
+R46637 Coq.Init.Datatypes.true
+R46630 Coq.Init.Logic "x = y" type_scope
+R46583 Op.eval_condition
+R46604 Coq.Lists.List.map
+R46612 Coq.Lists.List.map
+R46632 Coq.Init.Datatypes.Some
+R46637 Coq.Init.Datatypes.true
+R46657 Coq.Lists.List.map
+R46665 Coq.Lists.List.map
+R46690 Registers "a ## b"
+R46657 Coq.Lists.List.map
+R46665 Coq.Lists.List.map
+R46690 Registers "a ## b"
+R46731 Allocproof.agree_eval_regs
+R46731 Allocproof.agree_eval_regs
+R46769 Allocproof.add_cond_correct
+R46842 Coq.Init.Logic.refl_equal
+R46769 Allocproof.add_cond_correct
+R46842 Coq.Init.Logic.refl_equal
+R46945 Allocproof.agree_exten
+R46945 Allocproof.agree_exten
+R46972 Allocproof.agree_reg_list_live
+R46972 Allocproof.agree_reg_list_live
+R47314 Allocproof.exec_instr_prop
+R47296 Coq.Init.Logic "x = y" type_scope
+R47265 Op.eval_condition
+R47288 Registers "a ## b"
+R47298 Coq.Init.Datatypes.Some
+R47303 Coq.Init.Datatypes.false
+R47224 Coq.Init.Logic "x = y" type_scope
+R47219 Maps "a ! b"
+R47226 Coq.Init.Datatypes.Some
+R47232 RTL.Icond
+R47204 RTL.node
+R47204 RTL.node
+R47176 Coq.Lists.List.list
+R47181 Registers.reg
+R47157 Op.condition
+R47144 Mem.mem
+R47125 Registers.t
+R47134 Values.val
+R47105 Coq.NArith.BinPos.positive
+R47094 Values.val
+R47068 Maps.t
+R47076 RTL.instruction
+R47443 Coq.Init.Peano "x <= y" nat_scope
+R47413 Coq.Lists.List.length
+R47426 Coq.Lists.List.map
+R47443 Coq.Init.Peano "x <= y" nat_scope
+R47413 Coq.Lists.List.length
+R47426 Coq.Lists.List.map
+R47467 Coqlib.list_length_map
+R47467 Coqlib.list_length_map
+R47511 Allocproof.length_cond_args
+R47511 Allocproof.length_cond_args
+R47552 Locations.disjoint
+R47583 Conventions.temporaries
+R47566 Coq.Lists.List.map
+R47552 Locations.disjoint
+R47583 Conventions.temporaries
+R47566 Coq.Lists.List.map
+R47608 Allocproof.regalloc_disj_temporaries
+R47608 Allocproof.regalloc_disj_temporaries
+R47705 Coq.Init.Logic "x = y" type_scope
+R47658 Op.eval_condition
+R47679 Coq.Lists.List.map
+R47687 Coq.Lists.List.map
+R47707 Coq.Init.Datatypes.Some
+R47712 Coq.Init.Datatypes.false
+R47705 Coq.Init.Logic "x = y" type_scope
+R47658 Op.eval_condition
+R47679 Coq.Lists.List.map
+R47687 Coq.Lists.List.map
+R47707 Coq.Init.Datatypes.Some
+R47712 Coq.Init.Datatypes.false
+R47733 Coq.Lists.List.map
+R47741 Coq.Lists.List.map
+R47766 Registers "a ## b"
+R47733 Coq.Lists.List.map
+R47741 Coq.Lists.List.map
+R47766 Registers "a ## b"
+R47807 Allocproof.agree_eval_regs
+R47807 Allocproof.agree_eval_regs
+R47845 Allocproof.add_cond_correct
+R47917 Coq.Init.Logic.refl_equal
+R47845 Allocproof.add_cond_correct
+R47917 Coq.Init.Logic.refl_equal
+R48021 Allocproof.agree_exten
+R48021 Allocproof.agree_exten
+R48048 Allocproof.agree_reg_list_live
+R48048 Allocproof.agree_reg_list_live
+R48202 Allocproof.exec_instrs_prop
+R48196 Mem.mem
+R48179 RTL.regset
+R48163 RTL.node
+R48152 Values.val
+R48137 RTL.code
+R48298 LTL.exec_blocks_refl
+R48298 LTL.exec_blocks_refl
+R48575 Allocproof.exec_instrs_prop
+R48530 Allocproof.exec_instr_prop
+R48483 RTL.exec_instr
+R48475 Mem.mem
+R48461 RTL.regset
+R48444 RTL.node
+R48432 Mem.mem
+R48415 RTL.regset
+R48399 RTL.node
+R48388 Values.val
+R48373 RTL.code
+R48792 Maps "a !! b"
+R48766 Allocproof.agree_increasing
+R48792 Maps "a !! b"
+R48766 Allocproof.agree_increasing
+R48806 Allocproof.analyze_correct
+R48806 Allocproof.analyze_correct
+R48854 RTL.exec_instr_present
+R48854 RTL.exec_instr_present
+R48913 RTL.successors_correct
+R48913 RTL.successors_correct
+R49382 Allocproof.exec_instrs_prop
+R49333 Allocproof.exec_instrs_prop
+R49282 RTL.exec_instrs
+R49233 Allocproof.exec_instrs_prop
+R49182 RTL.exec_instrs
+R49174 Mem.mem
+R49160 RTL.regset
+R49143 RTL.node
+R49127 Mem.mem
+R49113 RTL.regset
+R49096 RTL.node
+R49084 Mem.mem
+R49066 RTL.regset
+R49049 RTL.node
+R49037 Values.val
+R49022 RTL.code
+R49483 Coq.Init.Logic "x <> y" type_scope
+R49478 Maps "a ! b"
+R49486 Coq.Init.Datatypes.None
+R49483 Coq.Init.Logic "x <> y" type_scope
+R49478 Maps "a ! b"
+R49486 Coq.Init.Datatypes.None
+R49504 RTL.exec_instrs_present
+R49504 RTL.exec_instrs_present
+R49750 LTL.exec_blocks_trans
+R49750 LTL.exec_blocks_trans
+R49926 Coq.Init.Logic "A /\ B" type_scope
+R49915 Coq.Init.Logic "~ x" type_scope
+R49917 Coq.Lists.List.In
+R49947 Coq.Init.Logic "x = y" type_scope
+R49929 Registers.mem
+R49949 Coq.Init.Datatypes.true
+R49903 Coq.Init.Logic "x = y" type_scope
+R49866 Registers.mem
+R49880 Allocation.reg_list_dead
+R49905 Coq.Init.Datatypes.true
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R50059 Coq.Init.Logic "x <> y" type_scope
+R50059 Coq.Init.Logic "x <> y" type_scope
+R50098 Registers.mem_remove_same
+R50098 Registers.mem_remove_same
+R50152 Registers.mem_remove_other
+R50152 Registers.mem_remove_other
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R50551 Coq.Init.Logic "'exists' x , p" type_scope
+R50669 Coq.Init.Logic "A /\ B" type_scope
+R50565 LTL.exec_blocks
+R50635 LTL.Cont
+R50641 RTL.fn_entrypoint
+R50588 RTL.fn_nextpc
+R50674 Allocproof.agree
+R50759 RTL.init_regs
+R50775 RTL.fn_params
+R50688 Allocation.transfer
+R50725 Maps "a !! b"
+R50728 RTL.fn_entrypoint
+R50700 RTL.fn_entrypoint
+R50512 Allocation.transf_entrypoint
+R50487 Coq.Init.Logic "x = y" type_scope
+R50469 Locations.S
+R50472 Locations.Local
+R50489 Values.Vundef
+R50437 Coq.Init.Logic "x = y" type_scope
+R50393 Coq.Lists.List.map
+R50406 Conventions.loc_parameters
+R50422 RTL.fn_sig
+R50381 Coq.Init.Logic "x = y" type_scope
+R50362 Maps "a ! b"
+R50364 RTL.fn_nextpc
+R50383 Coq.Init.Datatypes.None
+R50342 Coq.Init.Logic "x = y" type_scope
+R50307 Coloring.regalloc
+R50324 Allocproof.live0
+R50344 Coq.Init.Datatypes.Some
+R50284 RTLtyping.wt_function
+R50871 RTL.fn_entrypoint
+R50871 RTL.fn_entrypoint
+R50912 RTL.fn_nextpc
+R50912 RTL.fn_nextpc
+R50947 RTL.fn_params
+R50947 RTL.fn_params
+R50982 Registers.elements
+R50999 Allocation.reg_list_dead
+R51021 Allocation.transfer
+R51045 Maps "a !! b"
+R50982 Registers.elements
+R50999 Allocation.reg_list_dead
+R51021 Allocation.transfer
+R51045 Maps "a !! b"
+R51122 Coq.Init.Logic "x = y" type_scope
+R51085 Coq.Lists.List.length
+R51098 Coq.Lists.List.map
+R51138 Coq.Lists.List.length
+R51166 AST.sig_args
+R51151 RTL.fn_sig
+R51122 Coq.Init.Logic "x = y" type_scope
+R51085 Coq.Lists.List.length
+R51098 Coq.Lists.List.map
+R51138 Coq.Lists.List.length
+R51166 AST.sig_args
+R51151 RTL.fn_sig
+R51194 RTLtyping.wt_params
+R51194 RTLtyping.wt_params
+R51234 Coqlib.list_length_map
+R51234 Coqlib.list_length_map
+R51234 Coqlib.list_length_map
+R51234 Coqlib.list_length_map
+R51272 Locations.norepet
+R51285 Coq.Lists.List.map
+R51302 RTL.fn_params
+R51272 Locations.norepet
+R51285 Coq.Lists.List.map
+R51302 RTL.fn_params
+R51333 Allocproof.regalloc_norepet_norepet
+R51333 Allocproof.regalloc_norepet_norepet
+R51377 Coloringproof.regalloc_correct_2
+R51377 Coloringproof.regalloc_correct_2
+R51415 RTLtyping.wt_norepet
+R51415 RTLtyping.wt_norepet
+R51448 Conventions.locs_acceptable
+R51465 Coq.Lists.List.map
+R51482 RTL.fn_params
+R51448 Conventions.locs_acceptable
+R51465 Coq.Lists.List.map
+R51482 RTL.fn_params
+R51513 Coloringproof.regsalloc_acceptable
+R51513 Coloringproof.regsalloc_acceptable
+R51556 Locations.disjoint
+R51639 Coq.Lists.List.map
+R51587 Coq.Lists.List.map
+R51604 RTL.fn_params
+R51556 Locations.disjoint
+R51639 Coq.Lists.List.map
+R51587 Coq.Lists.List.map
+R51604 RTL.fn_params
+R51714 Coqlib.list_in_map_inv
+R51714 Coqlib.list_in_map_inv
+R51806 Coqlib.list_in_map_inv
+R51806 Coqlib.list_in_map_inv
+R51898 Registers.elements_complete
+R51898 Registers.elements_complete
+R51956 Allocproof.regset_mem_reg_list_dead
+R51956 Allocproof.regset_mem_reg_list_dead
+R52022 Allocproof.regalloc_noteq_diff
+R52022 Allocproof.regalloc_noteq_diff
+R52061 Coloringproof.regalloc_correct_3
+R52061 Coloringproof.regalloc_correct_3
+R52184 Conventions.loc_acceptable
+R52151 Coq.Lists.List.In
+R52157 Coq.Lists.List.map
+R52184 Conventions.loc_acceptable
+R52151 Coq.Lists.List.In
+R52157 Coq.Lists.List.map
+R52232 Coqlib.list_in_map_inv
+R52232 Coqlib.list_in_map_inv
+R52314 Coloringproof.regalloc_acceptable
+R52314 Coloringproof.regalloc_acceptable
+R52356 Allocproof.add_entry_correct
+R52445 Coq.Lists.List.map
+R52405 Coq.Lists.List.map
+R52422 RTL.fn_params
+R52386 RTL.fn_sig
+R52356 Allocproof.add_entry_correct
+R52445 Coq.Lists.List.map
+R52405 Coq.Lists.List.map
+R52422 RTL.fn_params
+R52386 RTL.fn_sig
+R52578 LTL.exec_blocks_one
+R52578 LTL.exec_blocks_one
+R52605 Maps.gss
+R52605 Maps.gss
+R52699 Allocproof.live0
+R52653 Allocation.transfer
+R52677 Maps "a !! b"
+R52699 Allocproof.live0
+R52653 Allocation.transfer
+R52677 Maps "a !! b"
+R52738 Allocproof.agree_parameters
+R52738 Allocproof.agree_parameters
+R52788 Registers.reg
+R52772 Registers.elt
+R52788 Registers.reg
+R52772 Registers.elt
+R52897 Coq.Lists.List.in_map
+R52897 Coq.Lists.List.in_map
+R52929 Registers.elements_correct
+R52929 Registers.elements_correct
+R53548 Allocproof.exec_function_prop
+R53582 Mem.free
+R53514 Coq.Init.Logic "x = y" type_scope
+R53516 Registers.regmap_optget
+R53533 Values.Vundef
+R53484 Coq.Init.Logic "x = y" type_scope
+R53477 Maps "a ! b"
+R53464 RTL.fn_code
+R53486 Coq.Init.Datatypes.Some
+R53492 RTL.Ireturn
+R53336 Allocproof.exec_instrs_prop
+R53416 RTL.init_regs
+R53432 RTL.fn_params
+R53394 RTL.fn_entrypoint
+R53370 Values.Vptr
+R53379 Integers.zero
+R53354 RTL.fn_code
+R53207 RTL.exec_instrs
+R53289 RTL.init_regs
+R53305 RTL.fn_params
+R53267 RTL.fn_entrypoint
+R53243 Values.Vptr
+R53252 Integers.zero
+R53227 RTL.fn_code
+R53190 Coq.Init.Logic "x = y" type_scope
+R53159 Mem.alloc
+R53170 RTL.fn_stacksize
+R53192 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R53151 Values.val
+R53131 Coq.Init.Datatypes.option
+R53138 Registers.reg
+R53116 Mem.mem
+R53102 RTL.regset
+R53086 RTL.node
+R53070 Coq.Lists.List.list
+R53075 Values.val
+R53044 Values.block
+R53032 Mem.mem
+R53032 Mem.mem
+R53010 RTL.function
+R53671 RTLtyping.type_rtl_function
+R53671 RTLtyping.type_rtl_function
+R53722 Allocation.analyze
+R53722 Allocation.analyze
+R53835 Allocproof.live0
+R53763 Allocation.transfer
+R53800 Maps "a !! b"
+R53803 RTL.fn_entrypoint
+R53775 RTL.fn_entrypoint
+R53835 Allocproof.live0
+R53763 Allocation.transfer
+R53800 Maps "a !! b"
+R53803 RTL.fn_entrypoint
+R53775 RTL.fn_entrypoint
+R53860 Coloring.regalloc
+R53877 Allocproof.live0
+R53860 Coloring.regalloc
+R53877 Allocproof.live0
+R53931 Maps.map
+R53970 RTL.fn_code
+R53942 Allocation.transf_instr
+R53931 Maps.map
+R53970 RTL.fn_code
+R53942 Allocation.transf_instr
+R54001 Allocation.transf_entrypoint
+R54001 Allocation.transf_entrypoint
+R54112 RTLtyping.type_rtl_function_correct
+R54112 RTLtyping.type_rtl_function_correct
+R54201 Coq.Init.Logic "x = y" type_scope
+R54182 Maps "a ! b"
+R54184 RTL.fn_nextpc
+R54203 Coq.Init.Datatypes.None
+R54201 Coq.Init.Logic "x = y" type_scope
+R54182 Maps "a ! b"
+R54184 RTL.fn_nextpc
+R54203 Coq.Init.Datatypes.None
+R54234 Maps.gmap
+R54234 Maps.gmap
+R54275 RTL.fn_code_wf
+R54293 RTL.fn_nextpc
+R54275 RTL.fn_code_wf
+R54293 RTL.fn_nextpc
+R54325 Coqlib.Plt_ne
+R54325 Coqlib.Plt_ne
+R54384 LTL.call_regs
+R54384 LTL.call_regs
+R54462 Coq.Init.Logic "x = y" type_scope
+R54417 Coq.Lists.List.map
+R54431 Conventions.loc_parameters
+R54447 RTL.fn_sig
+R54462 Coq.Init.Logic "x = y" type_scope
+R54417 Coq.Lists.List.map
+R54431 Conventions.loc_parameters
+R54447 RTL.fn_sig
+R54484 RTL.fn_sig
+R54504 LTL.fn_sig
+R54484 RTL.fn_sig
+R54504 LTL.fn_sig
+R54573 Coqlib.list_map_compose
+R54573 Coqlib.list_map_compose
+R54597 Coqlib.list_map_exten
+R54597 Coqlib.list_map_exten
+R54654 Allocproof.call_regs_param_of_arg
+R54654 Allocproof.call_regs_param_of_arg
+R54788 Coq.Init.Logic "x = y" type_scope
+R54770 Locations.S
+R54773 Locations.Local
+R54790 Values.Vundef
+R54759 AST.typ
+R54750 Coq.ZArith.BinInt.Z
+R54788 Coq.Init.Logic "x = y" type_scope
+R54770 Locations.S
+R54773 Locations.Local
+R54790 Values.Vundef
+R54759 AST.typ
+R54750 Coq.ZArith.BinInt.Z
+R54842 Allocproof.transf_entrypoint_correct
+R54915 Values.Vptr
+R54924 Integers.zero
+R54842 Allocproof.transf_entrypoint_correct
+R54915 Values.Vptr
+R54924 Integers.zero
+R55064 Coq.Init.Logic "x <> y" type_scope
+R55060 Maps "a ! b"
+R55048 RTL.fn_code
+R55067 Coq.Init.Datatypes.None
+R55064 Coq.Init.Logic "x <> y" type_scope
+R55060 Maps "a ! b"
+R55048 RTL.fn_code
+R55067 Coq.Init.Datatypes.None
+R55140 Coq.Init.Logic.refl_equal
+R55140 Coq.Init.Logic.refl_equal
+R55236 Allocproof.add_return_correct
+R55324 Coqlib.option_map
+R55280 RTL.fn_sig
+R55260 Values.Vptr
+R55269 Integers.zero
+R55236 Allocproof.add_return_correct
+R55324 Coqlib.option_map
+R55280 RTL.fn_sig
+R55260 Values.Vptr
+R55269 Integers.zero
+R55429 LTL.exec_funct
+R55429 LTL.exec_funct
+R55530 LTL.exec_blocks_trans
+R55530 LTL.exec_blocks_trans
+R55570 LTL.exec_blocks_extends
+R55570 LTL.exec_blocks_extends
+R55657 Coqlib.peq
+R55664 RTL.fn_nextpc
+R55657 Coqlib.peq
+R55664 RTL.fn_nextpc
+R55724 Maps.gmap
+R55724 Maps.gmap
+R55745 RTL.fn_code_wf
+R55763 RTL.fn_nextpc
+R55745 RTL.fn_code_wf
+R55763 RTL.fn_nextpc
+R55793 Coqlib.Plt_ne
+R55793 Coqlib.Plt_ne
+R55854 Maps.gso
+R55854 Maps.gso
+R55880 LTL.exec_blocks_trans
+R55880 LTL.exec_blocks_trans
+R55920 LTL.exec_blocks_one
+R55920 LTL.exec_blocks_one
+R55960 Maps.gmap
+R55960 Maps.gmap
+R56121 Allocproof.agree_eval_reg
+R56121 Allocproof.agree_eval_reg
+R56744 Allocproof.exec_function_prop
+R56702 RTL.exec_function
+R56789 Allocproof.exec_function_ind_3
+R57234 Allocproof.transl_function_correct
+R57202 Allocproof.transl_trans_correct
+R57173 Allocproof.transl_one_correct
+R57143 Allocproof.transl_refl_correct
+R57105 Allocproof.transl_Icond_false_correct
+R57069 Allocproof.transl_Icond_true_correct
+R57038 Allocproof.transl_Icall_correct
+R57006 Allocproof.transl_Istore_correct
+R56975 Allocproof.transl_Iload_correct
+R56946 Allocproof.transl_Iop_correct
+R56916 Allocproof.transl_Inop_correct
+R56877 Allocproof.exec_function_prop
+R56850 Allocproof.exec_instrs_prop
+R56823 Allocproof.exec_instr_prop
+R57341 LTL.exec_program
+R57314 RTL.exec_program
+R57306 Values.val
+R57439 Allocproof.function_ptr_translated
+R57439 Allocproof.function_ptr_translated
+R57530 Coq.Init.Logic "x = y" type_scope
+R57522 LTL.fn_sig
+R57532 AST.mksignature
+R57549 Coq.Init.Datatypes.Some
+R57554 AST.Tint
+R57544 Coq.Lists.List.nil
+R57530 Coq.Init.Logic "x = y" type_scope
+R57522 LTL.fn_sig
+R57532 AST.mksignature
+R57549 Coq.Init.Datatypes.Some
+R57554 AST.Tint
+R57544 Coq.Lists.List.nil
+R57588 Allocproof.sig_function_translated
+R57588 Allocproof.sig_function_translated
+R57691 Coq.Init.Logic "x = y" type_scope
+R57638 Coq.Lists.List.map
+R57664 Conventions.loc_arguments
+R57679 LTL.fn_sig
+R57643 Locations.init
+R57655 Values.Vundef
+R57693 Coq.Lists.List.nil
+R57691 Coq.Init.Logic "x = y" type_scope
+R57638 Coq.Lists.List.map
+R57664 Conventions.loc_arguments
+R57679 LTL.fn_sig
+R57643 Locations.init
+R57655 Values.Vundef
+R57693 Coq.Lists.List.nil
+R57744 Allocproof.transl_function_correctness
+R57804 Locations.init
+R57816 Values.Vundef
+R57744 Allocproof.transl_function_correctness
+R57804 Locations.init
+R57816 Values.Vundef
+R57936 Allocproof.symbols_preserved
+R57936 Allocproof.symbols_preserved
+R57967 AST.transform_partial_program_main
+R57967 AST.transform_partial_program_main
+R58086 Globalenvs.init_mem
+R58113 Globalenvs.init_mem
+R58086 Globalenvs.init_mem
+R58113 Globalenvs.init_mem
+R58168 Globalenvs.init_mem_transf_partial
+R58168 Globalenvs.init_mem_transf_partial
+FAlloctyping_aux
+R251 LTL.function
+R288 Locations.loc
+R353 Locations.R
+R383 Locations.loc
+R450 Locations.R
+R514 Coq.Lists.List.In
+R481 Coq.Lists.List.list
+R486 Locations.loc
+R600 Coq.Lists.List.In
+R567 Coq.Lists.List.list
+R572 Locations.loc
+R799 LTLtyping.wt_block
+R812 Allocation.add_move
+R781 LTLtyping.wt_block
+R760 Coq.Init.Logic "x = y" type_scope
+R747 Locations.type
+R762 Locations.type
+R687 LTL.block
+R677 Locations.loc
+R677 Locations.loc
+R907 Coq.Init.Logic "A /\ B" type_scope
+R885 Coq.Lists.List.In
+R897 Parallelmove.getsrc
+R889 Coq.Init.Datatypes.fst
+R910 Coq.Lists.List.In
+R922 Parallelmove.getdst
+R914 Coq.Init.Datatypes.snd
+R874 Coq.Lists.List.In
+R1206 Coq.Init.Logic "x = y" type_scope
+R1195 Locations.type
+R1208 Locations.type
+R1218 Parallelmove.T
+R1254 Locations.type
+R1254 Locations.type
+R1322 Coq.Lists.List.incl
+R1327 Coq.Lists.List.nil
+R1312 Coq.Lists.List.list
+R1398 Alloctyping_aux.incl_nil
+R1532 Coq.Init.Logic "A /\ B" type_scope
+R1522 Coq.Lists.List.incl
+R1535 Coq.Lists.List.incl
+R1499 Coq.Init.Logic "x = y" type_scope
+R1484 Parallelmove.split_move
+R1501 Coq.Init.Datatypes.Some
+R1506 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R1477 Parallelmove.Reg
+R1477 Parallelmove.Reg
+R1463 Parallelmove.Moves
+R1463 Parallelmove.Moves
+R1463 Parallelmove.Moves
+R1651 Locations.eq
+R1651 Locations.eq
+R1712 Alloctyping_aux.incl_nil
+R1712 Alloctyping_aux.incl_nil
+R1728 Coq.Lists.List.incl_tl
+R1743 Coq.Lists.List.incl_refl
+R1728 Coq.Lists.List.incl_tl
+R1743 Coq.Lists.List.incl_refl
+R1768 Parallelmove.split_move
+R1768 Parallelmove.split_move
+R2065 Coq.Lists.List.incl_tl
+R2065 Coq.Lists.List.incl_tl
+R2186 Coq.Lists.List.In
+R2189 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R2163 Coq.Init.Logic "x = y" type_scope
+R2148 Parallelmove.split_move
+R2165 Coq.Init.Datatypes.Some
+R2170 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R2141 Parallelmove.Reg
+R2141 Parallelmove.Reg
+R2127 Parallelmove.Moves
+R2127 Parallelmove.Moves
+R2127 Parallelmove.Moves
+R2302 Locations.eq
+R2302 Locations.eq
+R2374 Parallelmove.split_move
+R2374 Parallelmove.split_move
+R2791 Coq.Init.Logic "x = y" type_scope
+R2779 Locations.type
+R2793 Locations.type
+R2682 Coq.Lists.List.In
+R2722 Coq.Lists.List "x ++ y" list_scope
+R2699 Parallelmove.StateToMove
+R2712 Parallelmove.stepf
+R2748 Coq.Lists.List "x ++ y" list_scope
+R2726 Parallelmove.StateBeing
+R2738 Parallelmove.stepf
+R2751 Parallelmove.StateDone
+R2762 Parallelmove.stepf
+R2687 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R2648 Coq.Init.Logic "x = y" type_scope
+R2636 Locations.type
+R2650 Locations.type
+R2566 Coq.Lists.List.In
+R2594 Coq.Lists.List "x ++ y" list_scope
+R2579 Parallelmove.StateToMove
+R2612 Coq.Lists.List "x ++ y" list_scope
+R2598 Parallelmove.StateBeing
+R2615 Parallelmove.StateDone
+R2569 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R2870 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R2924 Parallelmove.StateToMove
+R2951 Parallelmove.StateBeing
+R2978 Parallelmove.StateDone
+R3003 Coq.Lists.List.app
+R2870 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R2924 Parallelmove.StateToMove
+R2924 Parallelmove.StateToMove
+R2924 Parallelmove.StateToMove
+R2951 Parallelmove.StateBeing
+R2951 Parallelmove.StateBeing
+R2951 Parallelmove.StateBeing
+R2978 Parallelmove.StateDone
+R2978 Parallelmove.StateDone
+R2978 Parallelmove.StateDone
+R3003 Coq.Lists.List.app
+R3003 Coq.Lists.List.app
+R3003 Coq.Lists.List.app
+R3032 Coq.Lists.List.in_app_or
+R3123 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R3094 Coq.Lists.List "x ++ y" list_scope
+R3072 Parallelmove.StateBeing
+R3084 Parallelmove.stepf
+R3097 Parallelmove.StateDone
+R3108 Parallelmove.stepf
+R3047 Parallelmove.StateToMove
+R3060 Parallelmove.stepf
+R3032 Coq.Lists.List.in_app_or
+R3123 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R3094 Coq.Lists.List "x ++ y" list_scope
+R3072 Parallelmove.StateBeing
+R3084 Parallelmove.stepf
+R3097 Parallelmove.StateDone
+R3108 Parallelmove.stepf
+R3047 Parallelmove.StateToMove
+R3060 Parallelmove.stepf
+R3171 Coq.Init.Logic "x = y" type_scope
+R3148 Parallelmove.StateToMove
+R3161 Parallelmove.stepf
+R3173 Coq.Lists.List.nil
+R3171 Coq.Init.Logic "x = y" type_scope
+R3148 Parallelmove.StateToMove
+R3161 Parallelmove.stepf
+R3173 Coq.Lists.List.nil
+R3185 Parallelmove.stepf
+R3185 Parallelmove.stepf
+R3219 Locations.eq
+R3229 Coq.Init.Datatypes.fst
+R3234 Parallelmove.last
+R3219 Locations.eq
+R3229 Coq.Init.Datatypes.fst
+R3234 Parallelmove.last
+R3318 Coq.Lists.List.in_app_or
+R3375 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R3353 Parallelmove.StateDone
+R3364 Parallelmove.stepf
+R3329 Parallelmove.StateBeing
+R3341 Parallelmove.stepf
+R3318 Coq.Lists.List.in_app_or
+R3375 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R3353 Parallelmove.StateDone
+R3364 Parallelmove.stepf
+R3329 Parallelmove.StateBeing
+R3341 Parallelmove.stepf
+R3430 Coq.Init.Logic "A \/ B" type_scope
+R3424 Coq.Init.Logic "x = y" type_scope
+R3402 Parallelmove.StateBeing
+R3414 Parallelmove.stepf
+R3426 Coq.Lists.List.nil
+R3463 Coq.Init.Logic "A \/ B" type_scope
+R3458 Coq.Init.Logic "x = y" type_scope
+R3436 Parallelmove.StateBeing
+R3448 Parallelmove.stepf
+R3488 Coq.Init.Logic "x = y" type_scope
+R3466 Parallelmove.StateBeing
+R3478 Parallelmove.stepf
+R3490 Parallelmove.replace_last_s
+R3430 Coq.Init.Logic "A \/ B" type_scope
+R3424 Coq.Init.Logic "x = y" type_scope
+R3402 Parallelmove.StateBeing
+R3414 Parallelmove.stepf
+R3426 Coq.Lists.List.nil
+R3463 Coq.Init.Logic "A \/ B" type_scope
+R3458 Coq.Init.Logic "x = y" type_scope
+R3436 Parallelmove.StateBeing
+R3448 Parallelmove.stepf
+R3488 Coq.Init.Logic "x = y" type_scope
+R3466 Parallelmove.StateBeing
+R3478 Parallelmove.stepf
+R3490 Parallelmove.replace_last_s
+R3517 Parallelmove.stepf
+R3517 Parallelmove.stepf
+R3551 Locations.eq
+R3561 Coq.Init.Datatypes.fst
+R3566 Parallelmove.last
+R3551 Locations.eq
+R3561 Coq.Init.Datatypes.fst
+R3566 Parallelmove.last
+R3992 Parallelmove.app_rewriter
+R3992 Parallelmove.app_rewriter
+R4087 Parallelmove.last_replace
+R4087 Parallelmove.last_replace
+R4113 Coq.Lists.List.in_app_or
+R4145 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R4137 Coq.Lists.List "x :: y" list_scope
+R4126 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R4127 Parallelmove.T
+R4140 Coq.Lists.List.nil
+R4113 Coq.Lists.List.in_app_or
+R4145 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R4137 Coq.Lists.List "x :: y" list_scope
+R4126 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R4127 Parallelmove.T
+R4140 Coq.Lists.List.nil
+R4260 Alloctyping_aux.T_type
+R4260 Alloctyping_aux.T_type
+R4339 Coq.Lists.List.In
+R4361 Coq.Lists.List "x :: y" list_scope
+R4352 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R4364 Coq.Lists.List.nil
+R4342 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R4339 Coq.Lists.List.In
+R4361 Coq.Lists.List "x :: y" list_scope
+R4352 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R4364 Coq.Lists.List.nil
+R4342 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R4482 Coq.Init.Logic "A \/ B" type_scope
+R4467 Coq.Init.Logic "x = y" type_scope
+R4446 Parallelmove.StateDone
+R4457 Parallelmove.stepf
+R4476 Coq.Lists.List "x :: y" list_scope
+R4469 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R4508 Coq.Init.Logic "x = y" type_scope
+R4487 Parallelmove.StateDone
+R4498 Parallelmove.stepf
+R4517 Coq.Lists.List "x :: y" list_scope
+R4510 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R4530 Coq.Lists.List "x :: y" list_scope
+R4521 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R4525 Parallelmove.T
+R4482 Coq.Init.Logic "A \/ B" type_scope
+R4467 Coq.Init.Logic "x = y" type_scope
+R4446 Parallelmove.StateDone
+R4457 Parallelmove.stepf
+R4476 Coq.Lists.List "x :: y" list_scope
+R4469 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R4508 Coq.Init.Logic "x = y" type_scope
+R4487 Parallelmove.StateDone
+R4498 Parallelmove.stepf
+R4517 Coq.Lists.List "x :: y" list_scope
+R4510 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R4530 Coq.Lists.List "x :: y" list_scope
+R4521 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R4525 Parallelmove.T
+R4552 Locations.eq
+R4562 Coq.Init.Datatypes.fst
+R4567 Parallelmove.last
+R4552 Locations.eq
+R4562 Coq.Init.Datatypes.fst
+R4567 Parallelmove.last
+R4899 Alloctyping_aux.T_type
+R4899 Alloctyping_aux.T_type
+R4923 Coq.Lists.List.in_app_or
+R5014 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R4985 Coq.Lists.List "x ++ y" list_scope
+R4963 Parallelmove.StateBeing
+R4975 Parallelmove.stepf
+R4988 Parallelmove.StateDone
+R4999 Parallelmove.stepf
+R4938 Parallelmove.StateToMove
+R4951 Parallelmove.stepf
+R4923 Coq.Lists.List.in_app_or
+R5014 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R4985 Coq.Lists.List "x ++ y" list_scope
+R4963 Parallelmove.StateBeing
+R4975 Parallelmove.stepf
+R4988 Parallelmove.StateDone
+R4999 Parallelmove.stepf
+R4938 Parallelmove.StateToMove
+R4951 Parallelmove.stepf
+R5037 Parallelmove.stepf
+R5037 Parallelmove.stepf
+R5071 Locations.eq
+R5071 Locations.eq
+R5129 Coq.Lists.List.in_app_or
+R5186 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R5164 Parallelmove.StateDone
+R5175 Parallelmove.stepf
+R5140 Parallelmove.StateBeing
+R5152 Parallelmove.stepf
+R5129 Coq.Lists.List.in_app_or
+R5186 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R5164 Parallelmove.StateDone
+R5175 Parallelmove.stepf
+R5140 Parallelmove.StateBeing
+R5152 Parallelmove.stepf
+R5210 Parallelmove.stepf
+R5210 Parallelmove.stepf
+R5244 Locations.eq
+R5244 Locations.eq
+R5308 Parallelmove.stepf
+R5308 Parallelmove.stepf
+R5342 Locations.eq
+R5342 Locations.eq
+R5450 Coq.Lists.List.in_app_or
+R5541 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R5512 Coq.Lists.List "x ++ y" list_scope
+R5490 Parallelmove.StateBeing
+R5502 Parallelmove.stepf
+R5515 Parallelmove.StateDone
+R5526 Parallelmove.stepf
+R5465 Parallelmove.StateToMove
+R5478 Parallelmove.stepf
+R5450 Coq.Lists.List.in_app_or
+R5541 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R5512 Coq.Lists.List "x ++ y" list_scope
+R5490 Parallelmove.StateBeing
+R5502 Parallelmove.stepf
+R5515 Parallelmove.StateDone
+R5526 Parallelmove.stepf
+R5465 Parallelmove.StateToMove
+R5478 Parallelmove.stepf
+R5564 Parallelmove.stepf
+R5564 Parallelmove.stepf
+R5622 Locations.eq
+R5622 Locations.eq
+R5686 Parallelmove.split_move
+R5686 Parallelmove.split_move
+R5764 Parallelmove.StateToMove
+R5764 Parallelmove.StateToMove
+R5790 Alloctyping_aux.split_move_incl
+R5790 Alloctyping_aux.split_move_incl
+R5861 Coq.Lists.List.In
+R5881 Coq.Lists.List "x :: y" list_scope
+R5874 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R5888 Coq.Lists.List "x ++ y" list_scope
+R5864 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R5861 Coq.Lists.List.In
+R5881 Coq.Lists.List "x :: y" list_scope
+R5874 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R5888 Coq.Lists.List "x ++ y" list_scope
+R5864 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R5997 Coq.Lists.List.in_app_or
+R6013 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R6043 Coq.Lists.List.in_or_app
+R5997 Coq.Lists.List.in_app_or
+R6013 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R6043 Coq.Lists.List.in_or_app
+R6043 Coq.Lists.List.in_or_app
+R6157 Locations.eq
+R6168 Coq.Init.Datatypes.fst
+R6173 Parallelmove.last
+R6206 Parallelmove.StateToMove
+R6157 Locations.eq
+R6168 Coq.Init.Datatypes.fst
+R6173 Parallelmove.last
+R6206 Parallelmove.StateToMove
+R6206 Parallelmove.StateToMove
+R6206 Parallelmove.StateToMove
+R6206 Parallelmove.StateToMove
+R6258 Coq.Lists.List.in_app_or
+R6315 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R6293 Parallelmove.StateDone
+R6304 Parallelmove.stepf
+R6269 Parallelmove.StateBeing
+R6281 Parallelmove.stepf
+R6258 Coq.Lists.List.in_app_or
+R6315 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R6293 Parallelmove.StateDone
+R6304 Parallelmove.stepf
+R6269 Parallelmove.StateBeing
+R6281 Parallelmove.stepf
+R6339 Parallelmove.stepf
+R6339 Parallelmove.stepf
+R6397 Locations.eq
+R6397 Locations.eq
+R6441 Parallelmove.StateBeing
+R6441 Parallelmove.StateBeing
+R6504 Parallelmove.split_move
+R6504 Parallelmove.split_move
+R6564 Parallelmove.StateBeing
+R6564 Parallelmove.StateBeing
+R6605 Alloctyping_aux.in_split_move
+R6605 Alloctyping_aux.in_split_move
+R6759 Locations.eq
+R6770 Coq.Init.Datatypes.fst
+R6775 Parallelmove.last
+R6783 Coq.Lists.List "x :: y" list_scope
+R6759 Locations.eq
+R6770 Coq.Init.Datatypes.fst
+R6775 Parallelmove.last
+R6783 Coq.Lists.List "x :: y" list_scope
+R6805 Parallelmove.app_rewriter
+R6818 Parallelmove.Move
+R6805 Parallelmove.app_rewriter
+R6818 Parallelmove.Move
+R6866 Parallelmove.StateBeing
+R6866 Parallelmove.StateBeing
+R6913 Parallelmove.last_replace
+R6913 Parallelmove.last_replace
+R7020 Coq.Lists.List.in_app_or
+R7052 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R7044 Coq.Lists.List "x :: y" list_scope
+R7033 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R7034 Parallelmove.T
+R7047 Coq.Lists.List.nil
+R7020 Coq.Lists.List.in_app_or
+R7052 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R7044 Coq.Lists.List "x :: y" list_scope
+R7033 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R7034 Parallelmove.T
+R7047 Coq.Lists.List.nil
+R7165 Alloctyping_aux.T_type
+R7165 Alloctyping_aux.T_type
+R7230 Coq.Lists.List.In
+R7252 Coq.Lists.List "x :: y" list_scope
+R7243 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R7255 Coq.Lists.List.nil
+R7233 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R7230 Coq.Lists.List.In
+R7252 Coq.Lists.List "x :: y" list_scope
+R7243 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R7255 Coq.Lists.List.nil
+R7233 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R7295 Parallelmove.StateBeing
+R7295 Parallelmove.StateBeing
+R7356 Parallelmove.stepf
+R7356 Parallelmove.stepf
+R7414 Locations.eq
+R7414 Locations.eq
+R7478 Parallelmove.split_move
+R7478 Parallelmove.split_move
+R7556 Parallelmove.StateDone
+R7556 Parallelmove.StateDone
+R7603 Locations.eq
+R7614 Coq.Init.Datatypes.fst
+R7619 Parallelmove.last
+R7646 Parallelmove.StateDone
+R7603 Locations.eq
+R7614 Coq.Init.Datatypes.fst
+R7619 Parallelmove.last
+R7646 Parallelmove.StateDone
+R7646 Parallelmove.StateDone
+R7646 Parallelmove.StateDone
+R7646 Parallelmove.StateDone
+R7725 Coq.Lists.List.In
+R7747 Coq.Lists.List "x :: y" list_scope
+R7738 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R7750 Coq.Lists.List.nil
+R7728 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R7725 Coq.Lists.List.In
+R7747 Coq.Lists.List "x :: y" list_scope
+R7738 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R7750 Coq.Lists.List.nil
+R7728 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R7845 Alloctyping_aux.T_type
+R7845 Alloctyping_aux.T_type
+R8151 Coq.Init.Logic "x = y" type_scope
+R8139 Locations.type
+R8153 Locations.type
+R8045 Coq.Lists.List.In
+R8084 Coq.Lists.List "x ++ y" list_scope
+R8062 Parallelmove.StateToMove
+R8075 Parallelmove.Pmov
+R8109 Coq.Lists.List "x ++ y" list_scope
+R8088 Parallelmove.StateBeing
+R8100 Parallelmove.Pmov
+R8112 Parallelmove.StateDone
+R8123 Parallelmove.Pmov
+R8050 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R8011 Coq.Init.Logic "x = y" type_scope
+R7999 Locations.type
+R8013 Locations.type
+R7929 Coq.Lists.List.In
+R7957 Coq.Lists.List "x ++ y" list_scope
+R7942 Parallelmove.StateToMove
+R7975 Coq.Lists.List "x ++ y" list_scope
+R7961 Parallelmove.StateBeing
+R7978 Parallelmove.StateDone
+R7932 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R8200 Coq.Init.Wf.well_founded_ind
+R8218 Coq.Arith.Wf_nat.well_founded_ltof
+R8245 Parallelmove.mesure
+R8200 Coq.Init.Wf.well_founded_ind
+R8218 Coq.Arith.Wf_nat.well_founded_ltof
+R8245 Parallelmove.mesure
+R8316 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R8316 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R8347 Parallelmove.Pmov_equation
+R8347 Parallelmove.Pmov_equation
+R8419 Parallelmove.stepf
+R8419 Parallelmove.stepf
+R8437 Parallelmove.stepf1_dec
+R8437 Parallelmove.stepf1_dec
+R8461 Alloctyping_aux.move_types_stepf
+R8461 Alloctyping_aux.move_types_stepf
+R8515 Parallelmove.stepf
+R8515 Parallelmove.stepf
+R8533 Parallelmove.stepf1_dec
+R8533 Parallelmove.stepf1_dec
+R8557 Alloctyping_aux.move_types_stepf
+R8557 Alloctyping_aux.move_types_stepf
+R8838 Coq.Init.Logic "A /\ B" type_scope
+R8766 Coq.Init.Logic "A \/ B" type_scope
+R8747 Coq.Lists.List.In
+R8753 Allocproof_aux.temporaries2
+R8772 Coq.Lists.List.In
+R8779 Parallelmove.getsrc
+R8802 Coq.Lists.List "x ++ y" list_scope
+R8787 Parallelmove.StateToMove
+R8820 Coq.Lists.List "x ++ y" list_scope
+R8806 Parallelmove.StateBeing
+R8823 Parallelmove.StateDone
+R8865 Coq.Init.Logic "A \/ B" type_scope
+R8846 Coq.Lists.List.In
+R8852 Allocproof_aux.temporaries2
+R8871 Coq.Lists.List.In
+R8878 Parallelmove.getdst
+R8901 Coq.Lists.List "x ++ y" list_scope
+R8886 Parallelmove.StateToMove
+R8919 Coq.Lists.List "x ++ y" list_scope
+R8905 Parallelmove.StateBeing
+R8922 Parallelmove.StateDone
+R8649 Coq.Lists.List.In
+R8689 Coq.Lists.List "x ++ y" list_scope
+R8666 Parallelmove.StateToMove
+R8679 Parallelmove.stepf
+R8715 Coq.Lists.List "x ++ y" list_scope
+R8693 Parallelmove.StateBeing
+R8705 Parallelmove.stepf
+R8718 Parallelmove.StateDone
+R8729 Parallelmove.stepf
+R8654 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R8982 Parallelmove.getsrc_app
+R9011 Parallelmove.getdst_app
+R8982 Parallelmove.getsrc_app
+R8982 Parallelmove.getsrc_app
+R8982 Parallelmove.getsrc_app
+R9011 Parallelmove.getdst_app
+R9011 Parallelmove.getdst_app
+R9011 Parallelmove.getdst_app
+R9062 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R9062 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R9131 Alloctyping_aux.in_move__in_srcdst
+R9150 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R9131 Alloctyping_aux.in_move__in_srcdst
+R9150 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R9185 Coq.Lists.List.in_app_or
+R9274 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R9246 Coq.Lists.List "x ++ y" list_scope
+R9224 Parallelmove.StateBeing
+R9236 Parallelmove.stepf
+R9249 Parallelmove.StateDone
+R9260 Parallelmove.stepf
+R9199 Parallelmove.StateToMove
+R9212 Parallelmove.stepf
+R9185 Coq.Lists.List.in_app_or
+R9274 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R9246 Coq.Lists.List "x ++ y" list_scope
+R9224 Parallelmove.StateBeing
+R9236 Parallelmove.stepf
+R9249 Parallelmove.StateDone
+R9260 Parallelmove.stepf
+R9199 Parallelmove.StateToMove
+R9212 Parallelmove.stepf
+R9322 Coq.Init.Logic "x = y" type_scope
+R9299 Parallelmove.StateToMove
+R9312 Parallelmove.stepf
+R9324 Coq.Lists.List.nil
+R9322 Coq.Init.Logic "x = y" type_scope
+R9299 Parallelmove.StateToMove
+R9312 Parallelmove.stepf
+R9324 Coq.Lists.List.nil
+R9336 Parallelmove.stepf
+R9336 Parallelmove.stepf
+R9370 Locations.eq
+R9380 Coq.Init.Datatypes.fst
+R9385 Parallelmove.last
+R9370 Locations.eq
+R9380 Coq.Init.Datatypes.fst
+R9385 Parallelmove.last
+R9469 Coq.Lists.List.in_app_or
+R9526 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R9504 Parallelmove.StateDone
+R9515 Parallelmove.stepf
+R9480 Parallelmove.StateBeing
+R9492 Parallelmove.stepf
+R9469 Coq.Lists.List.in_app_or
+R9526 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R9504 Parallelmove.StateDone
+R9515 Parallelmove.stepf
+R9480 Parallelmove.StateBeing
+R9492 Parallelmove.stepf
+R9550 Parallelmove.stepf
+R9550 Parallelmove.stepf
+R9652 Parallelmove.app_rewriter
+R9652 Parallelmove.app_rewriter
+R9740 Parallelmove.last_app
+R9756 Coq.Init.Datatypes.fst
+R9740 Parallelmove.last_app
+R9756 Coq.Init.Datatypes.fst
+R9767 Locations.eq
+R9767 Locations.eq
+R9802 Parallelmove.last_replace
+R9802 Parallelmove.last_replace
+R9836 Coq.Lists.List.in_app_or
+R9868 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R9860 Coq.Lists.List "x :: y" list_scope
+R9849 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R9850 Parallelmove.T
+R9863 Coq.Lists.List.nil
+R9836 Coq.Lists.List.in_app_or
+R9868 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R9860 Coq.Lists.List "x :: y" list_scope
+R9849 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R9850 Parallelmove.T
+R9863 Coq.Lists.List.nil
+R9918 Parallelmove.getsrc_app
+R9945 Parallelmove.getdst_app
+R9918 Parallelmove.getsrc_app
+R9945 Parallelmove.getdst_app
+R9977 Alloctyping_aux.in_move__in_srcdst
+R9996 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R9977 Alloctyping_aux.in_move__in_srcdst
+R9996 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R10118 Locations.type
+R10118 Locations.type
+R10244 Parallelmove.getdst_app
+R10244 Parallelmove.getdst_app
+R10271 Coq.Lists.List.In
+R10281 Coq.Lists.List "x :: y" list_scope
+R10284 Coq.Lists.List.nil
+R10271 Coq.Lists.List.In
+R10281 Coq.Lists.List "x :: y" list_scope
+R10284 Coq.Lists.List.nil
+R10318 Parallelmove.StateBeing
+R10318 Parallelmove.StateBeing
+R10344 Alloctyping_aux.in_move__in_srcdst
+R10375 Coq.Lists.List "x ++ y" list_scope
+R10388 Coq.Lists.List "x :: y" list_scope
+R10379 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R10391 Coq.Lists.List.nil
+R10363 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R10344 Alloctyping_aux.in_move__in_srcdst
+R10375 Coq.Lists.List "x ++ y" list_scope
+R10388 Coq.Lists.List "x :: y" list_scope
+R10379 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R10391 Coq.Lists.List.nil
+R10363 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R10603 Parallelmove.stepf
+R10603 Parallelmove.stepf
+R10655 Parallelmove.StateDone
+R10655 Parallelmove.StateDone
+R10715 Coq.Lists.List.app
+R10715 Coq.Lists.List.app
+R10726 Alloctyping_aux.in_move__in_srcdst
+R10762 Coq.Lists.List "x :: y" list_scope
+R10755 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R10745 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R10726 Alloctyping_aux.in_move__in_srcdst
+R10762 Coq.Lists.List "x :: y" list_scope
+R10755 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R10745 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R10805 Coq.Init.Datatypes.snd
+R10825 Coq.Init.Datatypes.fst
+R10845 Parallelmove.getdst
+R10869 Parallelmove.getsrc
+R10805 Coq.Init.Datatypes.snd
+R10825 Coq.Init.Datatypes.fst
+R10845 Parallelmove.getdst
+R10869 Parallelmove.getsrc
+R10906 Coq.Init.Datatypes.snd
+R10926 Coq.Init.Datatypes.fst
+R10946 Parallelmove.getdst
+R10970 Parallelmove.getsrc
+R10906 Coq.Init.Datatypes.snd
+R10926 Coq.Init.Datatypes.fst
+R10946 Parallelmove.getdst
+R10970 Parallelmove.getsrc
+R11021 Parallelmove.app_rewriter
+R11021 Parallelmove.app_rewriter
+R11096 Parallelmove.last_app
+R11096 Parallelmove.last_app
+R11135 Coq.Init.Datatypes.fst
+R11135 Coq.Init.Datatypes.fst
+R11146 Locations.eq
+R11146 Locations.eq
+R11166 Parallelmove.StateDone
+R11166 Parallelmove.StateDone
+R11447 Parallelmove.getsrc_app
+R11465 Parallelmove.getsrc
+R11447 Parallelmove.getsrc_app
+R11465 Parallelmove.getsrc
+R11507 Coq.Lists.List.In
+R11517 Coq.Lists.List "x :: y" list_scope
+R11520 Coq.Lists.List.nil
+R11507 Coq.Lists.List.In
+R11517 Coq.Lists.List "x :: y" list_scope
+R11520 Coq.Lists.List.nil
+R11570 Locations.type
+R11570 Locations.type
+R11603 Alloctyping_aux.in_move__in_srcdst
+R11622 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R11603 Alloctyping_aux.in_move__in_srcdst
+R11622 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R11699 Parallelmove.StateDone
+R11699 Parallelmove.StateDone
+R11763 Parallelmove.getsrc
+R11777 Coq.Lists.List.app
+R11763 Parallelmove.getsrc
+R11777 Coq.Lists.List.app
+R11809 Alloctyping_aux.in_move__in_srcdst
+R11845 Coq.Lists.List "x :: y" list_scope
+R11838 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R11828 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R11869 Coq.Init.Datatypes.fst
+R11880 Coq.Init.Datatypes.snd
+R11891 Parallelmove.getsrc
+R11905 Parallelmove.getdst
+R11809 Alloctyping_aux.in_move__in_srcdst
+R11845 Coq.Lists.List "x :: y" list_scope
+R11838 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R11828 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R11869 Coq.Init.Datatypes.fst
+R11880 Coq.Init.Datatypes.snd
+R11891 Parallelmove.getsrc
+R11905 Parallelmove.getdst
+R12008 Coq.Lists.List.in_app_or
+R12097 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R12069 Coq.Lists.List "x ++ y" list_scope
+R12047 Parallelmove.StateBeing
+R12059 Parallelmove.stepf
+R12072 Parallelmove.StateDone
+R12083 Parallelmove.stepf
+R12022 Parallelmove.StateToMove
+R12035 Parallelmove.stepf
+R12008 Coq.Lists.List.in_app_or
+R12097 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R12069 Coq.Lists.List "x ++ y" list_scope
+R12047 Parallelmove.StateBeing
+R12059 Parallelmove.stepf
+R12072 Parallelmove.StateDone
+R12083 Parallelmove.stepf
+R12022 Parallelmove.StateToMove
+R12035 Parallelmove.stepf
+R12120 Parallelmove.stepf
+R12120 Parallelmove.stepf
+R12154 Locations.eq
+R12154 Locations.eq
+R12173 Parallelmove.StateToMove
+R12173 Parallelmove.StateToMove
+R12200 Alloctyping_aux.in_move__in_srcdst
+R12219 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R12257 Parallelmove.getsrc_app
+R12275 Parallelmove.getsrc
+R12303 Parallelmove.getdst_app
+R12321 Parallelmove.getdst
+R12337 Coq.Init.Datatypes.fst
+R12348 Coq.Init.Datatypes.snd
+R12200 Alloctyping_aux.in_move__in_srcdst
+R12219 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R12257 Parallelmove.getsrc_app
+R12303 Parallelmove.getdst_app
+R12337 Coq.Init.Datatypes.fst
+R12348 Coq.Init.Datatypes.snd
+R12410 Parallelmove.StateToMove
+R12410 Parallelmove.StateToMove
+R12437 Alloctyping_aux.in_move__in_srcdst
+R12456 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R12494 Parallelmove.getsrc_app
+R12512 Parallelmove.getsrc
+R12540 Parallelmove.getdst_app
+R12558 Parallelmove.getdst
+R12574 Coq.Init.Datatypes.fst
+R12585 Coq.Init.Datatypes.snd
+R12437 Alloctyping_aux.in_move__in_srcdst
+R12456 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R12494 Parallelmove.getsrc_app
+R12540 Parallelmove.getdst_app
+R12574 Coq.Init.Datatypes.fst
+R12585 Coq.Init.Datatypes.snd
+R12654 Coq.Lists.List.in_app_or
+R12711 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R12689 Parallelmove.StateDone
+R12700 Parallelmove.stepf
+R12665 Parallelmove.StateBeing
+R12677 Parallelmove.stepf
+R12654 Coq.Lists.List.in_app_or
+R12711 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R12689 Parallelmove.StateDone
+R12700 Parallelmove.stepf
+R12665 Parallelmove.StateBeing
+R12677 Parallelmove.stepf
+R12735 Parallelmove.stepf
+R12735 Parallelmove.stepf
+R12769 Locations.eq
+R12769 Locations.eq
+R12788 Parallelmove.StateBeing
+R12788 Parallelmove.StateBeing
+R12834 Parallelmove.StateBeing
+R12834 Parallelmove.StateBeing
+R12866 Alloctyping_aux.in_move__in_srcdst
+R12902 Coq.Lists.List "x :: y" list_scope
+R12895 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R12905 Coq.Lists.List.nil
+R12885 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R12924 Coq.Init.Datatypes.fst
+R12935 Coq.Init.Datatypes.snd
+R12866 Alloctyping_aux.in_move__in_srcdst
+R12902 Coq.Lists.List "x :: y" list_scope
+R12895 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R12905 Coq.Lists.List.nil
+R12885 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R12924 Coq.Init.Datatypes.fst
+R12935 Coq.Init.Datatypes.snd
+R13130 Parallelmove.stepf
+R13130 Parallelmove.stepf
+R13164 Locations.eq
+R13164 Locations.eq
+R13183 Parallelmove.StateDone
+R13183 Parallelmove.StateDone
+R13214 Alloctyping_aux.in_move__in_srcdst
+R13233 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R13259 Coq.Init.Datatypes.fst
+R13270 Coq.Init.Datatypes.snd
+R13214 Alloctyping_aux.in_move__in_srcdst
+R13233 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R13259 Coq.Init.Datatypes.fst
+R13270 Coq.Init.Datatypes.snd
+R13332 Parallelmove.StateDone
+R13332 Parallelmove.StateDone
+R13363 Alloctyping_aux.in_move__in_srcdst
+R13382 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R13408 Coq.Init.Datatypes.fst
+R13419 Coq.Init.Datatypes.snd
+R13363 Alloctyping_aux.in_move__in_srcdst
+R13382 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R13408 Coq.Init.Datatypes.fst
+R13419 Coq.Init.Datatypes.snd
+R13482 Coq.Lists.List.in_app_or
+R13571 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R13543 Coq.Lists.List "x ++ y" list_scope
+R13521 Parallelmove.StateBeing
+R13533 Parallelmove.stepf
+R13546 Parallelmove.StateDone
+R13557 Parallelmove.stepf
+R13496 Parallelmove.StateToMove
+R13509 Parallelmove.stepf
+R13482 Coq.Lists.List.in_app_or
+R13571 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R13543 Coq.Lists.List "x ++ y" list_scope
+R13521 Parallelmove.StateBeing
+R13533 Parallelmove.stepf
+R13546 Parallelmove.StateDone
+R13557 Parallelmove.stepf
+R13496 Parallelmove.StateToMove
+R13509 Parallelmove.stepf
+R13594 Parallelmove.stepf
+R13594 Parallelmove.stepf
+R13652 Locations.eq
+R13652 Locations.eq
+R13719 Coq.Lists.List.app
+R13719 Coq.Lists.List.app
+R13743 Alloctyping_aux.in_move__in_srcdst
+R13762 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R13743 Alloctyping_aux.in_move__in_srcdst
+R13762 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R13852 Parallelmove.split_move
+R13852 Parallelmove.split_move
+R13981 Alloctyping_aux.split_move_incl
+R13981 Alloctyping_aux.split_move_incl
+R14043 Coq.Lists.List.In
+R14063 Coq.Lists.List "x :: y" list_scope
+R14056 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R14070 Coq.Lists.List "x ++ y" list_scope
+R14046 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R14043 Coq.Lists.List.In
+R14063 Coq.Lists.List "x :: y" list_scope
+R14056 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R14070 Coq.Lists.List "x ++ y" list_scope
+R14046 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R14179 Coq.Lists.List.in_app_or
+R14195 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R14225 Coq.Lists.List.in_or_app
+R14179 Coq.Lists.List.in_app_or
+R14195 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R14225 Coq.Lists.List.in_or_app
+R14225 Coq.Lists.List.in_or_app
+R14338 Alloctyping_aux.in_move__in_srcdst
+R14374 Coq.Lists.List "x :: y" list_scope
+R14367 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R14381 Coq.Lists.List "x ++ y" list_scope
+R14357 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R14338 Alloctyping_aux.in_move__in_srcdst
+R14374 Coq.Lists.List "x :: y" list_scope
+R14367 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R14381 Coq.Lists.List "x ++ y" list_scope
+R14357 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R14564 Parallelmove.getsrc_app
+R14564 Parallelmove.getsrc_app
+R14602 Alloctyping_aux.in_move__in_srcdst
+R14638 Coq.Lists.List "x :: y" list_scope
+R14631 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R14645 Coq.Lists.List "x ++ y" list_scope
+R14621 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R14602 Alloctyping_aux.in_move__in_srcdst
+R14638 Coq.Lists.List "x :: y" list_scope
+R14631 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R14645 Coq.Lists.List "x ++ y" list_scope
+R14621 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R14814 Parallelmove.getdst_app
+R14814 Parallelmove.getdst_app
+R14924 Alloctyping_aux.in_move__in_srcdst
+R14960 Coq.Lists.List "x :: y" list_scope
+R14953 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R14943 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R14924 Alloctyping_aux.in_move__in_srcdst
+R14960 Coq.Lists.List "x :: y" list_scope
+R14953 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R14943 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R14991 Coq.Init.Datatypes.snd
+R15011 Coq.Init.Datatypes.fst
+R14991 Coq.Init.Datatypes.snd
+R15011 Coq.Init.Datatypes.fst
+R15079 Parallelmove.app_rewriter
+R15079 Parallelmove.app_rewriter
+R15162 Parallelmove.last_app
+R15178 Coq.Init.Datatypes.fst
+R15162 Parallelmove.last_app
+R15178 Coq.Init.Datatypes.fst
+R15189 Locations.eq
+R15189 Locations.eq
+R15265 Alloctyping_aux.in_move__in_srcdst
+R15301 Coq.Lists.List "x :: y" list_scope
+R15294 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R15284 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R15265 Alloctyping_aux.in_move__in_srcdst
+R15301 Coq.Lists.List "x :: y" list_scope
+R15294 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R15284 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R15330 Coq.Init.Datatypes.snd
+R15350 Coq.Init.Datatypes.fst
+R15330 Coq.Init.Datatypes.snd
+R15350 Coq.Init.Datatypes.fst
+R15455 Alloctyping_aux.in_move__in_srcdst
+R15491 Coq.Lists.List "x :: y" list_scope
+R15484 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R15474 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R15455 Alloctyping_aux.in_move__in_srcdst
+R15491 Coq.Lists.List "x :: y" list_scope
+R15484 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R15474 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R15520 Coq.Init.Datatypes.snd
+R15540 Coq.Init.Datatypes.fst
+R15520 Coq.Init.Datatypes.snd
+R15540 Coq.Init.Datatypes.fst
+R15597 Coq.Lists.List.in_app_or
+R15654 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R15632 Parallelmove.StateDone
+R15643 Parallelmove.stepf
+R15608 Parallelmove.StateBeing
+R15620 Parallelmove.stepf
+R15597 Coq.Lists.List.in_app_or
+R15654 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R15632 Parallelmove.StateDone
+R15643 Parallelmove.stepf
+R15608 Parallelmove.StateBeing
+R15620 Parallelmove.stepf
+R15678 Parallelmove.stepf
+R15678 Parallelmove.stepf
+R15736 Locations.eq
+R15736 Locations.eq
+R15780 Parallelmove.StateBeing
+R15780 Parallelmove.StateBeing
+R15853 Alloctyping_aux.in_move__in_srcdst
+R15889 Coq.Lists.List "x :: y" list_scope
+R15882 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R15901 Coq.Lists.List "x :: y" list_scope
+R15893 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R15872 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R15853 Alloctyping_aux.in_move__in_srcdst
+R15889 Coq.Lists.List "x :: y" list_scope
+R15882 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R15901 Coq.Lists.List "x :: y" list_scope
+R15893 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R15872 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R16114 Coq.Lists.List.In
+R16124 Coq.Lists.List "x :: y" list_scope
+R16127 Coq.Lists.List.nil
+R16114 Coq.Lists.List.In
+R16124 Coq.Lists.List "x :: y" list_scope
+R16127 Coq.Lists.List.nil
+R16369 Coq.Lists.List.In
+R16378 Coq.Lists.List "x :: y" list_scope
+R16381 Coq.Lists.List.nil
+R16369 Coq.Lists.List.In
+R16378 Coq.Lists.List "x :: y" list_scope
+R16381 Coq.Lists.List.nil
+R16452 Parallelmove.split_move
+R16452 Parallelmove.split_move
+R16512 Parallelmove.StateBeing
+R16512 Parallelmove.StateBeing
+R16544 Alloctyping_aux.in_split_move
+R16544 Alloctyping_aux.in_split_move
+R16641 Alloctyping_aux.in_move__in_srcdst
+R16660 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R16641 Alloctyping_aux.in_move__in_srcdst
+R16660 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R16694 Coq.Init.Datatypes.snd
+R16714 Coq.Init.Datatypes.fst
+R16694 Coq.Init.Datatypes.snd
+R16714 Coq.Init.Datatypes.fst
+R16795 Parallelmove.getsrc
+R16795 Parallelmove.getsrc
+R16823 Alloctyping_aux.in_move__in_srcdst
+R16861 Coq.Lists.List "x :: y" list_scope
+R16852 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R16842 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R16823 Alloctyping_aux.in_move__in_srcdst
+R16861 Coq.Lists.List "x :: y" list_scope
+R16852 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R16842 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R16892 Coq.Init.Datatypes.snd
+R16912 Coq.Init.Datatypes.fst
+R16892 Coq.Init.Datatypes.snd
+R16912 Coq.Init.Datatypes.fst
+R17100 Coq.Lists.List.In
+R17110 Coq.Lists.List "x :: y" list_scope
+R17113 Coq.Lists.List.nil
+R17100 Coq.Lists.List.In
+R17110 Coq.Lists.List "x :: y" list_scope
+R17113 Coq.Lists.List.nil
+R17218 Alloctyping_aux.in_move__in_srcdst
+R17237 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R17218 Alloctyping_aux.in_move__in_srcdst
+R17237 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R17273 Coq.Init.Datatypes.snd
+R17273 Coq.Init.Datatypes.snd
+R17355 Alloctyping_aux.in_move__in_srcdst
+R17393 Coq.Lists.List "x :: y" list_scope
+R17384 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R17374 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R17355 Alloctyping_aux.in_move__in_srcdst
+R17393 Coq.Lists.List "x :: y" list_scope
+R17384 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R17374 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R17422 Coq.Init.Datatypes.snd
+R17422 Coq.Init.Datatypes.snd
+R17458 Coq.Lists.List.in_or_app
+R17517 Coq.Lists.List "x ++ y" list_scope
+R17493 Parallelmove.getdst
+R17510 Coq.Lists.List "x :: y" list_scope
+R17501 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R17520 Parallelmove.getdst
+R17469 Parallelmove.getdst
+R17484 Coq.Lists.List "x :: y" list_scope
+R17477 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R17458 Coq.Lists.List.in_or_app
+R17517 Coq.Lists.List "x ++ y" list_scope
+R17493 Parallelmove.getdst
+R17510 Coq.Lists.List "x :: y" list_scope
+R17501 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R17520 Parallelmove.getdst
+R17469 Parallelmove.getdst
+R17484 Coq.Lists.List "x :: y" list_scope
+R17477 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R17625 Parallelmove.app_rewriter
+R17625 Parallelmove.app_rewriter
+R17708 Parallelmove.last_app
+R17724 Coq.Init.Datatypes.fst
+R17708 Parallelmove.last_app
+R17724 Coq.Init.Datatypes.fst
+R17735 Locations.eq
+R17735 Locations.eq
+R17809 Parallelmove.last_replace
+R17809 Parallelmove.last_replace
+R17884 Coq.Lists.List.in_app_or
+R17916 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R17908 Coq.Lists.List "x :: y" list_scope
+R17897 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R17898 Parallelmove.T
+R17911 Coq.Lists.List.nil
+R17884 Coq.Lists.List.in_app_or
+R17916 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R17908 Coq.Lists.List "x :: y" list_scope
+R17897 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R17898 Parallelmove.T
+R17911 Coq.Lists.List.nil
+R17987 Alloctyping_aux.in_move__in_srcdst
+R18006 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R18031 Coq.Init.Datatypes.fst
+R18042 Coq.Init.Datatypes.snd
+R17987 Alloctyping_aux.in_move__in_srcdst
+R18006 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R18031 Coq.Init.Datatypes.fst
+R18042 Coq.Init.Datatypes.snd
+R18085 Parallelmove.getsrc_app
+R18085 Parallelmove.getsrc_app
+R18126 Alloctyping_aux.in_move__in_srcdst
+R18145 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R18170 Coq.Init.Datatypes.fst
+R18181 Coq.Init.Datatypes.snd
+R18126 Alloctyping_aux.in_move__in_srcdst
+R18145 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R18170 Coq.Init.Datatypes.fst
+R18181 Coq.Init.Datatypes.snd
+R18224 Parallelmove.getdst_app
+R18224 Parallelmove.getdst_app
+R18346 Locations.type
+R18346 Locations.type
+R18416 Parallelmove.getdst_app
+R18416 Parallelmove.getdst_app
+R18443 Coq.Lists.List.In
+R18453 Coq.Lists.List "x :: y" list_scope
+R18456 Coq.Lists.List.nil
+R18443 Coq.Lists.List.In
+R18453 Coq.Lists.List "x :: y" list_scope
+R18456 Coq.Lists.List.nil
+R18609 Alloctyping_aux.in_move__in_srcdst
+R18640 Coq.Lists.List "x ++ y" list_scope
+R18653 Coq.Lists.List "x :: y" list_scope
+R18644 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R18656 Coq.Lists.List.nil
+R18628 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R18609 Alloctyping_aux.in_move__in_srcdst
+R18640 Coq.Lists.List "x ++ y" list_scope
+R18653 Coq.Lists.List "x :: y" list_scope
+R18644 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R18656 Coq.Lists.List.nil
+R18628 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R18685 Coq.Init.Datatypes.snd
+R18705 Coq.Init.Datatypes.fst
+R18685 Coq.Init.Datatypes.snd
+R18705 Coq.Init.Datatypes.fst
+R18753 Coq.Lists.List.in_or_app
+R18753 Coq.Lists.List.in_or_app
+R18805 Alloctyping_aux.in_move__in_srcdst
+R18836 Coq.Lists.List "x ++ y" list_scope
+R18849 Coq.Lists.List "x :: y" list_scope
+R18840 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R18852 Coq.Lists.List.nil
+R18824 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R18805 Alloctyping_aux.in_move__in_srcdst
+R18836 Coq.Lists.List "x ++ y" list_scope
+R18849 Coq.Lists.List "x :: y" list_scope
+R18840 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R18852 Coq.Lists.List.nil
+R18824 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R18880 Coq.Init.Datatypes.snd
+R18880 Coq.Init.Datatypes.snd
+R18928 Coq.Lists.List.in_or_app
+R18928 Coq.Lists.List.in_or_app
+R18980 Parallelmove.stepf
+R18980 Parallelmove.stepf
+R19038 Locations.eq
+R19038 Locations.eq
+R19113 Alloctyping_aux.in_move__in_srcdst
+R19132 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R19113 Alloctyping_aux.in_move__in_srcdst
+R19132 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R19235 Parallelmove.split_move
+R19235 Parallelmove.split_move
+R19295 Parallelmove.StateDone
+R19295 Parallelmove.StateDone
+R19367 Alloctyping_aux.in_move__in_srcdst
+R19386 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R19367 Alloctyping_aux.in_move__in_srcdst
+R19386 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R19546 Alloctyping_aux.in_move__in_srcdst
+R19584 Coq.Lists.List "x :: y" list_scope
+R19575 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R19565 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R19546 Alloctyping_aux.in_move__in_srcdst
+R19584 Coq.Lists.List "x :: y" list_scope
+R19575 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R19565 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R19755 Coq.Lists.List.In
+R19765 Coq.Lists.List "x :: y" list_scope
+R19768 Coq.Lists.List.nil
+R19755 Coq.Lists.List.In
+R19765 Coq.Lists.List "x :: y" list_scope
+R19768 Coq.Lists.List.nil
+R19926 Coq.Lists.List.In
+R19936 Coq.Lists.List "x :: y" list_scope
+R19939 Coq.Lists.List.nil
+R19926 Coq.Lists.List.In
+R19936 Coq.Lists.List "x :: y" list_scope
+R19939 Coq.Lists.List.nil
+R20028 Parallelmove.app_rewriter
+R20028 Parallelmove.app_rewriter
+R20111 Parallelmove.last_app
+R20127 Coq.Init.Datatypes.fst
+R20111 Parallelmove.last_app
+R20127 Coq.Init.Datatypes.fst
+R20138 Locations.eq
+R20138 Locations.eq
+R20326 Coq.Lists.List.in_or_app
+R20326 Coq.Lists.List.in_or_app
+R20370 Coq.Lists.List.in_or_app
+R20370 Coq.Lists.List.in_or_app
+R20528 Parallelmove.getsrc_app
+R20528 Parallelmove.getsrc_app
+R20562 Coq.Lists.List.In
+R20572 Coq.Lists.List "x :: y" list_scope
+R20575 Coq.Lists.List.nil
+R20562 Coq.Lists.List.In
+R20572 Coq.Lists.List "x :: y" list_scope
+R20575 Coq.Lists.List.nil
+R20626 Locations.type
+R20626 Locations.type
+R20652 Alloctyping_aux.in_move__in_srcdst
+R20671 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R20652 Alloctyping_aux.in_move__in_srcdst
+R20671 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R20707 Coq.Init.Datatypes.snd
+R20727 Coq.Init.Datatypes.fst
+R20707 Coq.Init.Datatypes.snd
+R20727 Coq.Init.Datatypes.fst
+R20830 Alloctyping_aux.in_move__in_srcdst
+R20868 Coq.Lists.List "x :: y" list_scope
+R20859 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R20849 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R20830 Alloctyping_aux.in_move__in_srcdst
+R20868 Coq.Lists.List "x :: y" list_scope
+R20859 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R20849 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R20994 Coq.Lists.List.in_or_app
+R20994 Coq.Lists.List.in_or_app
+R21125 Coq.Lists.List.in_or_app
+R21125 Coq.Lists.List.in_or_app
+R21233 Coq.Init.Logic "'exists' x , p" type_scope
+R21244 Coq.Lists.List.In
+R21247 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R21212 Coq.Lists.List.In
+R21218 Parallelmove.getsrc
+R21285 Parallelmove.getsrc
+R21285 Parallelmove.getsrc
+R21285 Parallelmove.getsrc
+R21645 Coq.Lists.List.incl
+R21663 Parallelmove.getsrc
+R21651 Parallelmove.getsrc
+R21630 Coq.Lists.List.incl
+R21767 Alloctyping_aux.getsrc_f
+R21767 Alloctyping_aux.getsrc_f
+R21887 Coq.Lists.List.In
+R21890 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R21887 Coq.Lists.List.In
+R21890 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R21923 Alloctyping_aux.in_move__in_srcdst
+R21942 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R21923 Alloctyping_aux.in_move__in_srcdst
+R21942 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R22016 Coq.Init.Logic "'exists' x , p" type_scope
+R22027 Coq.Lists.List.In
+R22030 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R21995 Coq.Lists.List.In
+R22001 Parallelmove.getdst
+R22068 Parallelmove.getdst
+R22068 Parallelmove.getdst
+R22068 Parallelmove.getdst
+R22428 Coq.Lists.List.incl
+R22446 Parallelmove.getdst
+R22434 Parallelmove.getdst
+R22413 Coq.Lists.List.incl
+R22550 Alloctyping_aux.getdst_f
+R22550 Alloctyping_aux.getdst_f
+R22670 Coq.Lists.List.In
+R22673 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R22670 Coq.Lists.List.In
+R22673 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R22706 Alloctyping_aux.in_move__in_srcdst
+R22725 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R22706 Alloctyping_aux.in_move__in_srcdst
+R22725 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R22975 Coq.Init.Logic "A /\ B" type_scope
+R22903 Coq.Init.Logic "A \/ B" type_scope
+R22884 Coq.Lists.List.In
+R22890 Allocproof_aux.temporaries2
+R22909 Coq.Lists.List.In
+R22916 Parallelmove.getsrc
+R22939 Coq.Lists.List "x ++ y" list_scope
+R22924 Parallelmove.StateToMove
+R22957 Coq.Lists.List "x ++ y" list_scope
+R22943 Parallelmove.StateBeing
+R22960 Parallelmove.StateDone
+R23002 Coq.Init.Logic "A \/ B" type_scope
+R22983 Coq.Lists.List.In
+R22989 Allocproof_aux.temporaries2
+R23008 Coq.Lists.List.In
+R23015 Parallelmove.getdst
+R23038 Coq.Lists.List "x ++ y" list_scope
+R23023 Parallelmove.StateToMove
+R23056 Coq.Lists.List "x ++ y" list_scope
+R23042 Parallelmove.StateBeing
+R23059 Parallelmove.StateDone
+R22789 Coq.Lists.List.In
+R22828 Coq.Lists.List "x ++ y" list_scope
+R22806 Parallelmove.StateToMove
+R22819 Parallelmove.Pmov
+R22853 Coq.Lists.List "x ++ y" list_scope
+R22832 Parallelmove.StateBeing
+R22844 Parallelmove.Pmov
+R22856 Parallelmove.StateDone
+R22867 Parallelmove.Pmov
+R22794 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R23111 Coq.Init.Wf.well_founded_ind
+R23129 Coq.Arith.Wf_nat.well_founded_ltof
+R23156 Parallelmove.mesure
+R23111 Coq.Init.Wf.well_founded_ind
+R23129 Coq.Arith.Wf_nat.well_founded_ltof
+R23156 Parallelmove.mesure
+R23227 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R23227 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R23258 Parallelmove.Pmov_equation
+R23258 Parallelmove.Pmov_equation
+R23311 Alloctyping_aux.srcdst_tmp2_stepf
+R23311 Alloctyping_aux.srcdst_tmp2_stepf
+R23358 Parallelmove.stepf
+R23412 Parallelmove.stepf1_dec
+R23358 Parallelmove.stepf
+R23412 Parallelmove.stepf1_dec
+R23681 Alloctyping_aux.getsrc_f
+R23681 Alloctyping_aux.getsrc_f
+R23744 Alloctyping_aux.srcdst_tmp2_stepf
+R23744 Alloctyping_aux.srcdst_tmp2_stepf
+R23874 Alloctyping_aux.getdst_f
+R23874 Alloctyping_aux.getdst_f
+R23937 Alloctyping_aux.srcdst_tmp2_stepf
+R23937 Alloctyping_aux.srcdst_tmp2_stepf
+R23985 Alloctyping_aux.getsrc_f
+R23985 Alloctyping_aux.getsrc_f
+R24035 Alloctyping_aux.srcdst_tmp2_stepf
+R24035 Alloctyping_aux.srcdst_tmp2_stepf
+R24093 Alloctyping_aux.getdst_f
+R24093 Alloctyping_aux.getdst_f
+R24143 Alloctyping_aux.srcdst_tmp2_stepf
+R24143 Alloctyping_aux.srcdst_tmp2_stepf
+R24207 Parallelmove.stepf
+R24261 Parallelmove.stepf1_dec
+R24207 Parallelmove.stepf
+R24261 Parallelmove.stepf1_dec
+R24530 Alloctyping_aux.getsrc_f
+R24530 Alloctyping_aux.getsrc_f
+R24593 Alloctyping_aux.srcdst_tmp2_stepf
+R24593 Alloctyping_aux.srcdst_tmp2_stepf
+R24723 Alloctyping_aux.getdst_f
+R24723 Alloctyping_aux.getdst_f
+R24786 Alloctyping_aux.srcdst_tmp2_stepf
+R24786 Alloctyping_aux.srcdst_tmp2_stepf
+R24834 Alloctyping_aux.getsrc_f
+R24834 Alloctyping_aux.getsrc_f
+R24884 Alloctyping_aux.srcdst_tmp2_stepf
+R24884 Alloctyping_aux.srcdst_tmp2_stepf
+R24942 Alloctyping_aux.getdst_f
+R24942 Alloctyping_aux.getdst_f
+R24992 Alloctyping_aux.srcdst_tmp2_stepf
+R24992 Alloctyping_aux.srcdst_tmp2_stepf
+R25215 LTLtyping.wt_block
+R25234 Coq.Lists.List.fold_left
+R25304 Allocation.add_move
+R25323 Coq.Init.Datatypes.snd
+R25314 Coq.Init.Datatypes.fst
+R25294 Coq.Init.Datatypes "x * y" type_scope
+R25290 Locations.loc
+R25296 Locations.loc
+R25260 LTL.block
+R25196 LTLtyping.wt_block
+R25182 Parallelmove.getdst
+R25153 Parallelmove.getsrc
+R25104 Coq.Init.Logic "x = y" type_scope
+R25075 Coq.Lists.List.map
+R25094 Parallelmove.getsrc
+R25084 Locations.type
+R25106 Coq.Lists.List.map
+R25125 Parallelmove.getdst
+R25115 Locations.type
+R25941 Coq.Init.Logic "x = y" type_scope
+R25918 Coq.Lists.List.In
+R25921 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R25881 Coq.Init.Logic "x = y" type_scope
+R25864 Coq.Lists.List.map
+R25871 Parallelmove.getsrc
+R25883 Coq.Lists.List.map
+R25890 Parallelmove.getdst
+R25849 Parallelmove.Reg
+R26338 LTLtyping.wt_block
+R26351 Allocproof_aux.p_move
+R26320 LTLtyping.wt_block
+R26307 Parallelmove.getdst
+R26278 Parallelmove.getsrc
+R26229 Coq.Init.Logic "x = y" type_scope
+R26200 Coq.Lists.List.map
+R26219 Parallelmove.getsrc
+R26209 Locations.type
+R26231 Coq.Lists.List.map
+R26250 Parallelmove.getdst
+R26240 Locations.type
+R26415 Alloctyping_aux.wt_add_moves
+R26415 Alloctyping_aux.wt_add_moves
+R26443 Parallelmove.getsrc_map
+R26463 Parallelmove.getdst_map
+R26443 Parallelmove.getsrc_map
+R26463 Parallelmove.getdst_map
+R26483 Coqlib.list_map_compose
+R26483 Coqlib.list_map_compose
+R26509 Coqlib.list_map_compose
+R26509 Coqlib.list_map_compose
+R26533 Coqlib.list_map_exten
+R26533 Coqlib.list_map_exten
+R26561 Alloctyping_aux.move_types_res
+R26576 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R26580 Coq.Lists.List.nil
+R26585 Coq.Lists.List.nil
+R26561 Alloctyping_aux.move_types_res
+R26576 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R26580 Coq.Lists.List.nil
+R26585 Coq.Lists.List.nil
+R26677 Parallelmove.app_nil
+R26677 Parallelmove.app_nil
+R26692 Alloctyping_aux.map_f_getsrc_getdst
+R26692 Alloctyping_aux.map_f_getsrc_getdst
+R26766 Alloctyping_aux.getsrc_f
+R26766 Alloctyping_aux.getsrc_f
+R26813 Alloctyping_aux.src_tmp2_res
+R26826 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R26830 Coq.Lists.List.nil
+R26835 Coq.Lists.List.nil
+R26813 Alloctyping_aux.src_tmp2_res
+R26826 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R26830 Coq.Lists.List.nil
+R26835 Coq.Lists.List.nil
+R26862 Parallelmove.app_nil
+R26862 Parallelmove.app_nil
+R26996 Alloctyping_aux.getdst_f
+R26996 Alloctyping_aux.getdst_f
+R27043 Alloctyping_aux.src_tmp2_res
+R27056 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R27060 Coq.Lists.List.nil
+R27065 Coq.Lists.List.nil
+R27043 Alloctyping_aux.src_tmp2_res
+R27056 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R27060 Coq.Lists.List.nil
+R27065 Coq.Lists.List.nil
+R27092 Parallelmove.app_nil
+R27092 Parallelmove.app_nil
+R27378 LTLtyping.wt_block
+R27391 Allocation.parallel_move
+R27360 LTLtyping.wt_block
+R27287 Coq.Init.Logic "x = y" type_scope
+R27264 Coq.Lists.List.map
+R27273 Locations.type
+R27289 Coq.Lists.List.map
+R27298 Locations.type
+R27497 Alloctyping_aux.wt_parallel_move'
+R27516 Parallelmove.listsLoc2Moves
+R27497 Alloctyping_aux.wt_parallel_move'
+R27516 Parallelmove.listsLoc2Moves
+R27609 Allocproof_aux.getdst_lists2moves
+R27609 Allocproof_aux.getdst_lists2moves
+R27767 Coqlib.list_length_map
+R27783 Locations.type
+R27767 Coqlib.list_length_map
+R27783 Locations.type
+R27767 Coqlib.list_length_map
+R27783 Locations.type
+R27767 Coqlib.list_length_map
+R27783 Locations.type
+R27817 Allocproof_aux.getdst_lists2moves
+R27817 Allocproof_aux.getdst_lists2moves
+R27961 Coqlib.list_length_map
+R27977 Locations.type
+R27961 Coqlib.list_length_map
+R27977 Locations.type
+R27961 Coqlib.list_length_map
+R27977 Locations.type
+R27961 Coqlib.list_length_map
+R27977 Locations.type
+R28011 Allocproof_aux.getdst_lists2moves
+R28011 Allocproof_aux.getdst_lists2moves
+R28155 Coqlib.list_length_map
+R28171 Locations.type
+R28155 Coqlib.list_length_map
+R28171 Locations.type
+R28155 Coqlib.list_length_map
+R28171 Locations.type
+R28155 Coqlib.list_length_map
+R28171 Locations.type
+FAlloctyping
+R475 RTL.function
+R503 RTLtyping.regenv
+R526 Maps.t
+R533 Registers.t
+R566 Locations.loc
+R559 Registers.reg
+R584 LTL.function
+R640 Coq.Init.Logic "x = y" type_scope
+R620 RTLtyping.type_rtl_function
+R642 Coq.Init.Datatypes.Some
+R705 Coq.Init.Logic "x = y" type_scope
+R670 Coloring.regalloc
+R687 Allocproof.live0
+R707 Coq.Init.Datatypes.Some
+R756 Coq.Init.Logic "x = y" type_scope
+R738 Allocation.transf_function
+R758 Coq.Init.Datatypes.Some
+R791 RTLtyping.wt_function
+R835 RTLtyping.type_rtl_function_correct
+R835 RTLtyping.type_rtl_function_correct
+R921 Coq.Init.Logic "x = y" type_scope
+R902 Locations.type
+R953 Coloringproof.regalloc_preserves_types
+R953 Coloringproof.regalloc_preserves_types
+R1062 Coq.Init.Logic "x = y" type_scope
+R1024 Coq.Lists.List.map
+R1043 Coq.Lists.List.map
+R1033 Locations.type
+R1064 Coq.Lists.List.map
+R1106 Coqlib.list_map_compose
+R1106 Coqlib.list_map_compose
+R1130 Coqlib.list_map_exten
+R1130 Coqlib.list_map_exten
+R1172 Alloctyping.alloc_type
+R1172 Alloctyping.alloc_type
+R1248 Locations.R
+R1255 Coq.Init.Logic.True
+R1262 Locations.S
+R1269 LTLtyping.slot_bounded
+R1218 Locations.loc
+R1356 Locations.R
+R1363 Coq.Init.Logic.True
+R1372 Locations.S
+R1375 Locations.Incoming
+R1392 Coq.Init.Logic.False
+R1402 Locations.S
+R1409 LTLtyping.slot_bounded
+R1321 Locations.loc
+R1505 Alloctyping.loc_read_ok
+R1494 Coq.Lists.List.In
+R1462 Coq.Lists.List.list
+R1467 Locations.loc
+R1594 Alloctyping.loc_write_ok
+R1583 Coq.Lists.List.In
+R1551 Coq.Lists.List.list
+R1556 Locations.loc
+R1670 Alloctyping.loc_read_ok
+R1652 Alloctyping.loc_write_ok
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R1758 Alloctyping.loc_write_ok_read_ok
+R1853 Alloctyping.locs_read_ok
+R1833 Alloctyping.locs_write_ok
+R1952 Alloctyping.locs_write_ok_read_ok
+R2019 Alloctyping.loc_write_ok
+R2072 Coloringproof.regalloc_acceptable
+R2072 Coloringproof.regalloc_acceptable
+R2213 Alloctyping.alloc_write_ok
+R2275 Alloctyping.locs_write_ok
+R2290 Coq.Lists.List.map
+R2354 Coqlib.list_in_map_inv
+R2354 Coqlib.list_in_map_inv
+R2448 Alloctyping.allocs_write_ok
+R2623 LTLtyping.wt_block
+R2636 Allocation.add_reload
+R2604 LTLtyping.wt_block
+R2583 Coq.Init.Logic "x = y" type_scope
+R2570 Locations.type
+R2585 Locations.mreg_type
+R2549 Alloctyping.loc_read_ok
+R2718 Locations.mreg_eq
+R2718 Locations.mreg_eq
+R2753 LTLtyping.wt_Bopmove
+R2753 LTLtyping.wt_Bopmove
+R2789 LTLtyping.wt_Bgetstack
+R2789 LTLtyping.wt_Bgetstack
+R2951 LTLtyping.wt_block
+R2964 Allocation.add_spill
+R2932 LTLtyping.wt_block
+R2912 Coq.Init.Logic "x = y" type_scope
+R2898 Locations.mreg_type
+R2914 Locations.type
+R2876 Alloctyping.loc_write_ok
+R3044 Locations.mreg_eq
+R3044 Locations.mreg_eq
+R3082 LTLtyping.wt_Bopmove
+R3082 LTLtyping.wt_Bopmove
+R3118 LTLtyping.wt_Bsetstack
+R3118 LTLtyping.wt_Bsetstack
+R3403 LTLtyping.wt_block
+R3416 Allocation.add_reloads
+R3384 LTLtyping.wt_block
+R3353 Coq.Init.Logic "x = y" type_scope
+R3330 Coq.Lists.List.map
+R3339 Locations.type
+R3355 Coq.Lists.List.map
+R3364 Locations.mreg_type
+R3307 Alloctyping.locs_read_ok
+R3593 Alloctyping.wt_add_reload
+R3593 Alloctyping.wt_add_reload
+R3623 Coq.Lists.List.in_eq
+R3623 Coq.Lists.List.in_eq
+R3687 Coq.Lists.List.in_cons
+R3687 Coq.Lists.List.in_cons
+R3780 Coq.Init.Logic "x = y" type_scope
+R3758 Locations.mreg_type
+R3769 Allocation.reg_for
+R3782 Locations.type
+R3844 Locations.slot_type
+R3844 Locations.slot_type
+R3889 Alloctyping.wt_reg_for
+R4214 Coq.Init.Logic "x = y" type_scope
+R4163 Coq.Lists.List.map
+R4183 Allocation.regs_for_rec
+R4172 Locations.mreg_type
+R4216 Coq.Lists.List.map
+R4225 Locations.type
+R4148 Coq.Init.Logic "x = y" type_scope
+R4136 Locations.mreg_type
+R4150 AST.Tfloat
+R4122 Coq.Lists.List.In
+R4098 Coq.Init.Logic "x = y" type_scope
+R4086 Locations.mreg_type
+R4100 AST.Tint
+R4072 Coq.Lists.List.In
+R4030 Coq.Init.Peano "x <= y" nat_scope
+R4013 Coq.Lists.List.length
+R4033 Coq.Lists.List.length
+R3981 Coq.Init.Peano "x <= y" nat_scope
+R3964 Coq.Lists.List.length
+R3984 Coq.Lists.List.length
+R4405 Coq.Init.Logic.f_equal2
+R4416 Coq.Lists.List.cons
+R4421 AST.typ
+R4405 Coq.Init.Logic.f_equal2
+R4416 Coq.Lists.List.cons
+R4421 AST.typ
+R4469 Locations.slot_type
+R4469 Locations.slot_type
+R4501 Coq.Lists.List.in_eq
+R4501 Coq.Lists.List.in_eq
+R4524 Coq.Lists.List.in_eq
+R4524 Coq.Lists.List.in_eq
+R4588 Coq.Lists.List.in_cons
+R4588 Coq.Lists.List.in_cons
+R4629 Coq.Lists.List.in_cons
+R4629 Coq.Lists.List.in_cons
+R4754 Coq.Init.Logic "x = y" type_scope
+R4719 Coq.Lists.List.map
+R4739 Allocation.regs_for
+R4728 Locations.mreg_type
+R4756 Coq.Lists.List.map
+R4765 Locations.type
+R4704 Coq.Init.Peano "x <= y" nat_scope
+R4687 Coq.Lists.List.length
+R4820 Alloctyping.wt_regs_for_rec
+R4820 Alloctyping.wt_regs_for_rec
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R4984 Alloctyping.wt_regs_for
+R5141 LTLtyping.wt_block
+R5154 Allocation.add_move
+R5122 LTLtyping.wt_block
+R5102 Coq.Init.Logic "x = y" type_scope
+R5089 Locations.type
+R5104 Locations.type
+R5067 Alloctyping.loc_write_ok
+R5048 Alloctyping.loc_read_ok
+R5218 Locations.eq
+R5218 Locations.eq
+R5272 Alloctyping.wt_add_spill
+R5272 Alloctyping.wt_add_spill
+R5315 Alloctyping.wt_add_reload
+R5315 Alloctyping.wt_add_reload
+R5356 Locations.slot_type
+R5373 AST.Tint
+R5381 Locations.IT1
+R5387 AST.Tfloat
+R5397 Locations.FT1
+R5356 Locations.slot_type
+R5373 AST.Tint
+R5381 Locations.IT1
+R5387 AST.Tfloat
+R5397 Locations.FT1
+R5415 Alloctyping.wt_add_reload
+R5415 Alloctyping.wt_add_reload
+R5464 Locations.slot_type
+R5464 Locations.slot_type
+R5499 Alloctyping.wt_add_spill
+R5499 Alloctyping.wt_add_spill
+R5574 Locations.slot_type
+R5574 Locations.slot_type
+R5777 LTLtyping.wt_block
+R5790 Allocation.parallel_move
+R5759 LTLtyping.wt_block
+R5737 Alloctyping.locs_write_ok
+R5715 Alloctyping.locs_read_ok
+R5686 Coq.Init.Logic "x = y" type_scope
+R5663 Coq.Lists.List.map
+R5672 Locations.type
+R5688 Coq.Lists.List.map
+R5697 Locations.type
+R5871 Alloctyping_aux.wt_parallel_moveX
+R5871 Alloctyping_aux.wt_parallel_moveX
+R5911 Alloctyping.wt_add_move
+R5911 Alloctyping.wt_add_move
+R6049 LTLtyping.wt_block
+R6062 Allocation.add_op
+R6080 Coq.Lists.List "x :: y" list_scope
+R6083 Coq.Lists.List.nil
+R6069 Op.Omove
+R6027 Alloctyping.loc_write_ok
+R6008 Alloctyping.loc_read_ok
+R5988 Coq.Init.Logic "x = y" type_scope
+R5975 Locations.type
+R5990 Locations.type
+R6144 Alloctyping.wt_add_move
+R6144 Alloctyping.wt_add_move
+R6258 LTLtyping.wt_block
+R6271 Allocation.add_op
+R6285 Coq.Lists.List.nil
+R6278 Op.Oundef
+R6236 Alloctyping.loc_write_ok
+R6345 LTLtyping.wt_Bopundef
+R6345 LTLtyping.wt_Bopundef
+R6364 Alloctyping.wt_add_spill
+R6364 Alloctyping.wt_add_spill
+R6620 LTLtyping.wt_block
+R6633 Allocation.add_op
+R6598 Alloctyping.loc_write_ok
+R6575 Alloctyping.locs_read_ok
+R6547 Coq.Init.Logic "x = y" type_scope
+R6508 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R6509 Coq.Lists.List.map
+R6518 Locations.type
+R6533 Locations.type
+R6549 Op.type_of_operation
+R6493 Coq.Init.Logic "x <> y" type_scope
+R6496 Op.Oundef
+R6478 Coq.Init.Logic "x <> y" type_scope
+R6481 Op.Omove
+R6699 Op.is_move_operation
+R6699 Op.is_move_operation
+R6749 Op.is_move_operation_correct
+R6749 Op.is_move_operation_correct
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R6830 Coq.Init.Peano "x <= y" nat_scope
+R6813 Coq.Lists.List.length
+R6830 Coq.Init.Peano "x <= y" nat_scope
+R6813 Coq.Lists.List.length
+R6855 Coq.Lists.List.length
+R6874 Coq.Lists.List.length
+R6882 Coq.Init.Datatypes.fst
+R6887 Op.type_of_operation
+R6855 Coq.Lists.List.length
+R6874 Coq.Lists.List.length
+R6882 Coq.Init.Datatypes.fst
+R6887 Op.type_of_operation
+R6922 Allocproof.length_type_of_operation
+R6922 Allocproof.length_type_of_operation
+R6992 Coqlib.list_length_map
+R6992 Coqlib.list_length_map
+R7024 Alloctyping.wt_regs_for
+R7024 Alloctyping.wt_regs_for
+R7067 Alloctyping.wt_reg_for
+R7067 Alloctyping.wt_reg_for
+R7099 Alloctyping.wt_add_reloads
+R7099 Alloctyping.wt_add_reloads
+R7136 LTLtyping.wt_Bop
+R7136 LTLtyping.wt_Bop
+R7177 Alloctyping.wt_add_spill
+R7177 Alloctyping.wt_add_spill
+R7414 LTLtyping.wt_block
+R7427 Allocation.add_load
+R7392 Alloctyping.loc_write_ok
+R7369 Alloctyping.locs_read_ok
+R7342 Coq.Init.Logic "x = y" type_scope
+R7329 Locations.type
+R7344 Op.type_of_chunk
+R7298 Coq.Init.Logic "x = y" type_scope
+R7275 Coq.Lists.List.map
+R7284 Locations.type
+R7300 Op.type_of_addressing
+R7522 Coq.Init.Peano "x <= y" nat_scope
+R7505 Coq.Lists.List.length
+R7522 Coq.Init.Peano "x <= y" nat_scope
+R7505 Coq.Lists.List.length
+R7547 Coq.Lists.List.length
+R7566 Coq.Lists.List.length
+R7574 Op.type_of_addressing
+R7547 Coq.Lists.List.length
+R7566 Coq.Lists.List.length
+R7574 Op.type_of_addressing
+R7611 Allocproof.length_type_of_addressing
+R7611 Allocproof.length_type_of_addressing
+R7673 Coqlib.list_length_map
+R7673 Coqlib.list_length_map
+R7718 Coq.Init.Peano "x <= y" nat_scope
+R7701 Coq.Lists.List.length
+R7718 Coq.Init.Peano "x <= y" nat_scope
+R7701 Coq.Lists.List.length
+R7751 Alloctyping.wt_regs_for
+R7751 Alloctyping.wt_regs_for
+R7794 Alloctyping.wt_reg_for
+R7794 Alloctyping.wt_reg_for
+R7826 Alloctyping.wt_add_reloads
+R7826 Alloctyping.wt_add_reloads
+R7863 LTLtyping.wt_Bload
+R7863 LTLtyping.wt_Bload
+R7906 Alloctyping.wt_add_spill
+R7906 Alloctyping.wt_add_spill
+R8143 LTLtyping.wt_block
+R8156 Allocation.add_store
+R8122 Alloctyping.loc_read_ok
+R8099 Alloctyping.locs_read_ok
+R8072 Coq.Init.Logic "x = y" type_scope
+R8059 Locations.type
+R8074 Op.type_of_chunk
+R8028 Coq.Init.Logic "x = y" type_scope
+R8005 Coq.Lists.List.map
+R8014 Locations.type
+R8030 Op.type_of_addressing
+R8253 Coq.Init.Peano "x <= y" nat_scope
+R8236 Coq.Lists.List.length
+R8253 Coq.Init.Peano "x <= y" nat_scope
+R8236 Coq.Lists.List.length
+R8278 Coq.Lists.List.length
+R8297 Coq.Lists.List.length
+R8305 Op.type_of_addressing
+R8278 Coq.Lists.List.length
+R8297 Coq.Lists.List.length
+R8305 Op.type_of_addressing
+R8342 Allocproof.length_type_of_addressing
+R8342 Allocproof.length_type_of_addressing
+R8404 Coqlib.list_length_map
+R8404 Coqlib.list_length_map
+R8458 Coq.Init.Peano "x <= y" nat_scope
+R8432 Coq.Lists.List.length
+R8449 Coq.Lists.List "x :: y" list_scope
+R8458 Coq.Init.Peano "x <= y" nat_scope
+R8432 Coq.Lists.List.length
+R8449 Coq.Lists.List "x :: y" list_scope
+R8498 Alloctyping.wt_regs_for
+R8515 Coq.Lists.List "x :: y" list_scope
+R8498 Alloctyping.wt_regs_for
+R8515 Coq.Lists.List "x :: y" list_scope
+R8546 Allocation.regs_for
+R8560 Coq.Lists.List "x :: y" list_scope
+R8546 Allocation.regs_for
+R8560 Coq.Lists.List "x :: y" list_scope
+R8656 Alloctyping.wt_add_reloads
+R8656 Alloctyping.wt_add_reloads
+R8756 LTLtyping.wt_Bstore
+R8756 LTLtyping.wt_Bstore
+R9158 LTLtyping.wt_block
+R9171 Allocation.add_call
+R9136 Alloctyping.loc_write_ok
+R9088 Coq.Init.Datatypes.inl
+R9097 Alloctyping.loc_read_ok
+R9113 Coq.Init.Datatypes.inr
+R9122 Coq.Init.Logic.True
+R9050 Alloctyping.locs_read_ok
+R8985 Coq.Init.Logic "x = y" type_scope
+R8972 Locations.type
+R8998 AST.sig_res
+R9012 Coq.Init.Datatypes.None
+R9020 AST.Tint
+R9027 Coq.Init.Datatypes.Some
+R8950 Coq.Init.Logic "x = y" type_scope
+R8927 Coq.Lists.List.map
+R8936 Locations.type
+R8957 AST.sig_args
+R8875 Coq.Init.Datatypes.inl
+R8895 Coq.Init.Logic "x = y" type_scope
+R8884 Locations.type
+R8897 AST.Tint
+R8904 Coq.Init.Datatypes.inr
+R8913 Coq.Init.Logic.True
+R9229 Alloctyping.locs_write_ok
+R9244 Conventions.loc_arguments
+R9229 Alloctyping.locs_write_ok
+R9244 Conventions.loc_arguments
+R9294 Conventions.loc_arguments_acceptable
+R9294 Conventions.loc_arguments_acceptable
+R9451 Alloctyping.wt_add_reload
+R9451 Alloctyping.wt_add_reload
+R9500 Alloctyping.wt_parallel_move
+R9500 Alloctyping.wt_parallel_move
+R9526 Conventions.loc_arguments_type
+R9526 Conventions.loc_arguments_type
+R9575 LTLtyping.wt_Bcall
+R9575 LTLtyping.wt_Bcall
+R9607 Alloctyping.wt_add_spill
+R9607 Alloctyping.wt_add_spill
+R9638 Conventions.loc_result_type
+R9638 Conventions.loc_result_type
+R9682 Alloctyping.wt_parallel_move
+R9682 Alloctyping.wt_parallel_move
+R9708 Conventions.loc_arguments_type
+R9708 Conventions.loc_arguments_type
+R9757 LTLtyping.wt_Bcall
+R9757 LTLtyping.wt_Bcall
+R9781 Alloctyping.wt_add_spill
+R9781 Alloctyping.wt_add_spill
+R9812 Conventions.loc_result_type
+R9812 Conventions.loc_result_type
+R9982 LTLtyping.wt_block
+R9995 Allocation.add_cond
+R9959 Alloctyping.locs_read_ok
+R9929 Coq.Init.Logic "x = y" type_scope
+R9906 Coq.Lists.List.map
+R9915 Locations.type
+R9931 Op.type_of_condition
+R10072 Coq.Init.Peano "x <= y" nat_scope
+R10056 Coq.Lists.List.length
+R10072 Coq.Init.Peano "x <= y" nat_scope
+R10056 Coq.Lists.List.length
+R10098 Coq.Lists.List.length
+R10117 Coq.Lists.List.length
+R10125 Op.type_of_condition
+R10098 Coq.Lists.List.length
+R10117 Coq.Lists.List.length
+R10125 Op.type_of_condition
+R10161 Allocproof.length_type_of_condition
+R10161 Allocproof.length_type_of_condition
+R10223 Coqlib.list_length_map
+R10223 Coqlib.list_length_map
+R10255 Alloctyping.wt_regs_for
+R10255 Alloctyping.wt_regs_for
+R10311 Alloctyping.wt_add_reloads
+R10311 Alloctyping.wt_add_reloads
+R10350 LTLtyping.wt_Bcond
+R10350 LTLtyping.wt_Bcond
+R10541 LTLtyping.wt_block
+R10554 Allocation.add_return
+R10489 Coq.Init.Datatypes.None
+R10497 Coq.Init.Logic.True
+R10504 Coq.Init.Datatypes.Some
+R10516 Alloctyping.loc_read_ok
+R10450 Coq.Init.Logic "x = y" type_scope
+R10423 Coqlib.option_map
+R10434 Locations.type
+R10457 AST.sig_res
+R10639 Alloctyping.wt_add_reload
+R10639 Alloctyping.wt_add_reload
+R10668 Conventions.loc_result_type
+R10668 Conventions.loc_result_type
+R10710 AST.sig_res
+R10710 AST.sig_res
+R10773 LTLtyping.wt_Bopundef
+R10773 LTLtyping.wt_Bopundef
+R10860 LTLtyping.wt_block
+R10873 Allocation.add_undefs
+R10843 LTLtyping.wt_block
+R10965 LTLtyping.wt_Bopundef
+R10965 LTLtyping.wt_Bopundef
+R11126 LTLtyping.wt_block
+R11139 Allocation.add_entry
+R11150 RTL.fn_sig
+R11100 Alloctyping.locs_write_ok
+R11069 Coq.Init.Logic "x = y" type_scope
+R11044 Coq.Lists.List.map
+R11053 Locations.type
+R11071 AST.sig_args
+R11081 RTL.fn_sig
+R11203 RTL.fn_sig
+R11203 RTL.fn_sig
+R11232 Coq.Init.Logic "x = y" type_scope
+R11238 LTL.fn_sig
+R11232 Coq.Init.Logic "x = y" type_scope
+R11238 LTL.fn_sig
+R11280 Allocproof.sig_function_translated
+R11280 Allocproof.sig_function_translated
+R11332 Alloctyping.locs_read_ok
+R11346 Conventions.loc_parameters
+R11332 Alloctyping.locs_read_ok
+R11346 Conventions.loc_parameters
+R11425 Coqlib.list_in_map_inv
+R11425 Coqlib.list_in_map_inv
+R11498 Conventions.loc_arguments_acceptable
+R11498 Conventions.loc_arguments_acceptable
+R11657 Conventions.loc_arguments_bounded
+R11657 Conventions.loc_arguments_bounded
+R11722 Alloctyping.wt_parallel_move
+R11722 Alloctyping.wt_parallel_move
+R11748 Conventions.loc_parameters_type
+R11748 Conventions.loc_parameters_type
+R11798 Alloctyping.wt_add_undefs
+R11798 Alloctyping.wt_add_undefs
+R11947 LTLtyping.wt_block
+R11960 Allocation.transf_instr
+R11911 RTLtyping.wt_instr
+R12082 Registers.mem
+R12099 Maps "a !! b"
+R12082 Registers.mem
+R12099 Maps "a !! b"
+R12115 Alloctyping.wt_add_op_move
+R12115 Alloctyping.wt_add_op_move
+R12167 Alloctyping.alloc_type
+R12167 Alloctyping.alloc_type
+R12167 Alloctyping.alloc_type
+R12167 Alloctyping.alloc_type
+R12220 Registers.mem
+R12237 Maps "a !! b"
+R12220 Registers.mem
+R12237 Maps "a !! b"
+R12253 Alloctyping.wt_add_op_undef
+R12253 Alloctyping.wt_add_op_undef
+R12330 Registers.mem
+R12349 Maps "a !! b"
+R12330 Registers.mem
+R12349 Maps "a !! b"
+R12365 Alloctyping.wt_add_op_others
+R12365 Alloctyping.wt_add_op_others
+R12413 Alloctyping.alloc_types
+R12413 Alloctyping.alloc_types
+R12434 Alloctyping.alloc_type
+R12434 Alloctyping.alloc_type
+R12489 Registers.mem
+R12508 Maps "a !! b"
+R12489 Registers.mem
+R12508 Maps "a !! b"
+R12524 Alloctyping.wt_add_load
+R12524 Alloctyping.wt_add_load
+R12567 Alloctyping.alloc_types
+R12567 Alloctyping.alloc_types
+R12594 Alloctyping.alloc_type
+R12594 Alloctyping.alloc_type
+R12650 Alloctyping.wt_add_store
+R12650 Alloctyping.wt_add_store
+R12693 Alloctyping.alloc_types
+R12693 Alloctyping.alloc_types
+R12720 Alloctyping.alloc_type
+R12720 Alloctyping.alloc_type
+R12760 Alloctyping.wt_add_call
+R12760 Alloctyping.wt_add_call
+R12805 Alloctyping.alloc_type
+R12805 Alloctyping.alloc_type
+R12840 Alloctyping.alloc_types
+R12840 Alloctyping.alloc_types
+R12869 Alloctyping.alloc_type
+R12869 Alloctyping.alloc_type
+R12993 Alloctyping.wt_add_cond
+R12993 Alloctyping.wt_add_cond
+R13014 Alloctyping.alloc_types
+R13014 Alloctyping.alloc_types
+R13075 Alloctyping.wt_add_return
+R13075 Alloctyping.wt_add_return
+R13125 Alloctyping.alloc_type
+R13125 Alloctyping.alloc_type
+R13332 LTLtyping.wt_block
+R13320 Coq.Init.Logic "x = y" type_scope
+R13316 Maps "a ! b"
+R13322 Coq.Init.Datatypes.Some
+R13243 Maps.map
+R13282 RTL.fn_code
+R13254 Allocation.transf_instr
+R13392 Maps.gmap
+R13392 Maps.gmap
+R13425 Maps "a ! b"
+R13412 RTL.fn_code
+R13425 Maps "a ! b"
+R13412 RTL.fn_code
+R13503 Alloctyping.wt_transf_instr
+R13503 Alloctyping.wt_transf_instr
+R13527 RTLtyping.wt_instrs
+R13527 RTLtyping.wt_instrs
+R13563 Alloctyping.wt_rtl_function
+R13563 Alloctyping.wt_rtl_function
+R13792 LTLtyping.wt_block
+R13780 Coq.Init.Logic "x = y" type_scope
+R13776 Maps "a ! b"
+R13782 Coq.Init.Datatypes.Some
+R13657 Allocation.transf_entrypoint
+R13701 Maps.map
+R13740 RTL.fn_code
+R13712 Allocation.transf_instr
+R13874 Maps.gsspec
+R13874 Maps.gsspec
+R13897 Coqlib.peq
+R13905 RTL.fn_nextpc
+R13897 Coqlib.peq
+R13905 RTL.fn_nextpc
+R13968 Alloctyping.wt_add_entry
+R13968 Alloctyping.wt_add_entry
+R13992 Alloctyping.alloc_types
+R13992 Alloctyping.alloc_types
+R14012 RTLtyping.wt_params
+R14012 RTLtyping.wt_params
+R14039 Alloctyping.wt_rtl_function
+R14039 Alloctyping.wt_rtl_function
+R14086 Alloctyping.wt_transf_instrs
+R14086 Alloctyping.wt_transf_instrs
+R14220 LTLtyping.wt_function
+R14207 Coq.Init.Logic "x = y" type_scope
+R14189 Allocation.transf_function
+R14209 Coq.Init.Datatypes.Some
+R14301 RTLtyping.type_rtl_function
+R14301 RTLtyping.type_rtl_function
+R14350 Allocation.analyze
+R14350 Allocation.analyze
+R14482 Allocproof.live0
+R14389 Allocation.transfer
+R14447 Maps "a !! b"
+R14450 RTL.fn_entrypoint
+R14401 RTL.fn_entrypoint
+R14482 Allocproof.live0
+R14389 Allocation.transfer
+R14447 Maps "a !! b"
+R14450 RTL.fn_entrypoint
+R14401 RTL.fn_entrypoint
+R14507 Coloring.regalloc
+R14524 Allocproof.live0
+R14507 Coloring.regalloc
+R14524 Allocproof.live0
+R14638 Alloctyping.wt_transf_entrypoint
+R14638 Alloctyping.wt_transf_entrypoint
+R14857 LTLtyping.wt_program
+R14842 Coq.Init.Logic "x = y" type_scope
+R14825 Allocation.transf_program
+R14844 Coq.Init.Datatypes.Some
+R14809 LTL.program
+R14791 RTL.program
+R14926 AST.transform_partial_program_function
+R14961 Allocation.transf_function
+R14926 AST.transform_partial_program_function
+R14961 Allocation.transf_function
+R15025 Alloctyping.wt_transf_function
+R15025 Alloctyping.wt_transf_function
+FTunneling
+R287 Coq.Init.Datatypes.option
+R294 LTL.node
+R317 Coq.Init.Datatypes.Some
+R323 LTL.Bgoto
+R335 Coq.Init.Datatypes.Some
+R349 Coq.Init.Datatypes.None
+R271 Coq.Init.Datatypes.option
+R278 LTL.block
+R473 Coq.Init.Datatypes.option
+R480 LTL.node
+R424 Coq.Init.Datatypes.nat
+R410 LTL.node
+R391 LTL.function
+R511 Coq.Init.Datatypes.O
+R526 Coq.Init.Datatypes.None
+R535 Coq.Init.Datatypes.S
+R569 Tunneling.is_goto_block
+R594 Maps "a ! b"
+R586 LTL.fn_code
+R611 Coq.Init.Datatypes.Some
+R658 Coq.Init.Datatypes.None
+R666 Coq.Init.Datatypes.Some
+R424 Coq.Init.Datatypes.nat
+R410 LTL.node
+R391 LTL.function
+R757 Tunneling.branch_target_rec
+R796 Coq.Init.Datatypes.Some
+R816 Coq.Init.Datatypes.None
+R740 LTL.node
+R721 LTL.function
+R899 LTL.block
+R879 LTL.block
+R861 LTL.function
+R927 LTL.Bgetstack
+R952 LTL.Bgetstack
+R989 LTL.Bsetstack
+R1014 LTL.Bsetstack
+R1051 LTL.Bop
+R1078 LTL.Bop
+R1117 LTL.Bload
+R1154 LTL.Bload
+R1203 LTL.Bstore
+R1241 LTL.Bstore
+R1291 LTL.Bcall
+R1316 LTL.Bcall
+R1353 LTL.Bgoto
+R1370 LTL.Bgoto
+R1377 Tunneling.branch_target
+R1400 LTL.Bcond
+R1431 LTL.Bcond
+R1469 Tunneling.branch_target
+R1448 Tunneling.branch_target
+R1493 LTL.Breturn
+R1510 LTL.Breturn
+R879 LTL.block
+R861 LTL.function
+R1700 Coq.Init.Logic "A \/ B" type_scope
+R1667 Coqlib.Plt
+R1675 Coq.NArith.BinPos.Psucc
+R1682 LTL.fn_entrypoint
+R1709 Coq.Init.Logic "x = y" type_scope
+R1705 Maps "a ! b"
+R1711 Coq.Init.Datatypes.None
+R1660 LTL.node
+R1590 Maps.map
+R1632 LTL.fn_code
+R1613 Tunneling.tunnel_block
+R1563 LTL.function
+R1740 LTL.fn_code_wf
+R1740 LTL.fn_code_wf
+R1807 Maps.gmap
+R1807 Maps.gmap
+R1908 LTL.function
+R1926 LTL.mkfunction
+R2059 Tunneling.wf_tunneled_code
+R2037 LTL.fn_entrypoint
+R1978 Maps.map
+R2020 LTL.fn_code
+R2001 Tunneling.tunnel_block
+R1957 LTL.fn_stacksize
+R1942 LTL.fn_sig
+R1892 LTL.function
+R2126 LTL.program
+R2143 AST.transform_program
+R2161 Tunneling.tunnel_function
+R2111 LTL.program
+FTunnelingproof
+R336 Coq.Init.Logic "x = y" type_scope
+R338 Coq.Init.Datatypes.Some
+R344 LTL.Bgoto
+R322 Coq.Init.Logic "x = y" type_scope
+R306 Tunneling.is_goto_block
+R324 Coq.Init.Datatypes.Some
+R554 Coq.Init.Logic "A \/ B" type_scope
+R542 Coq.Init.Logic "x = y" type_scope
+R517 Tunneling.branch_target_rec
+R544 Coq.Init.Datatypes.Some
+R591 Coq.Init.Logic "A \/ B" type_scope
+R582 Coq.Init.Logic "x = y" type_scope
+R557 Tunneling.branch_target_rec
+R584 Coq.Init.Datatypes.None
+R594 Coq.Init.Logic "'exists' x , p" type_scope
+R621 Coq.Init.Logic "x = y" type_scope
+R617 Maps "a ! b"
+R609 LTL.fn_code
+R623 Coq.Init.Datatypes.Some
+R628 LTL.Bgoto
+R707 Tunneling.is_goto_block
+R732 Maps "a ! b"
+R724 LTL.fn_code
+R707 Tunneling.is_goto_block
+R732 Maps "a ! b"
+R724 LTL.fn_code
+R779 Tunnelingproof.is_goto_block_correct
+R779 Tunnelingproof.is_goto_block_correct
+R991 Coq.Init.Logic "x = y" type_scope
+R965 Tunneling.branch_target_rec
+R993 Coq.Init.Datatypes.Some
+R949 Coq.Init.Logic "x = y" type_scope
+R923 Tunneling.branch_target_rec
+R951 Coq.Init.Datatypes.Some
+R899 Coq.Init.Logic "x = y" type_scope
+R894 Maps "a ! b"
+R886 LTL.fn_code
+R901 Coq.Init.Datatypes.Some
+R907 LTL.Bgoto
+R1166 Tunneling.is_goto_block
+R1191 Maps "a ! b"
+R1183 LTL.fn_code
+R1166 Tunneling.is_goto_block
+R1191 Maps "a ! b"
+R1183 LTL.fn_code
+R1234 Tunnelingproof.is_goto_block_correct
+R1234 Tunnelingproof.is_goto_block_correct
+R1417 Coq.Init.Logic "A \/ B" type_scope
+R1412 Coq.Init.Logic "x = y" type_scope
+R1393 Tunneling.branch_target
+R1423 Coq.Init.Logic "'exists' x , p" type_scope
+R1480 Coq.Init.Logic "A /\ B" type_scope
+R1450 Coq.Init.Logic "x = y" type_scope
+R1446 Maps "a ! b"
+R1438 LTL.fn_code
+R1452 Coq.Init.Datatypes.Some
+R1457 LTL.Bgoto
+R1503 Coq.Init.Logic "x = y" type_scope
+R1483 Tunneling.branch_target
+R1505 Tunneling.branch_target
+R1580 Tunnelingproof.branch_target_rec_1
+R1580 Tunnelingproof.branch_target_rec_1
+R1702 Tunneling.branch_target_rec
+R1702 Tunneling.branch_target_rec
+R1795 Tunnelingproof.branch_target_rec_2
+R1795 Tunnelingproof.branch_target_rec_2
+R1938 LTL.program
+R1957 Tunneling.tunnel_program
+R1985 Globalenvs.globalenv
+R2014 Globalenvs.globalenv
+R2135 Coq.Init.Logic "x = y" type_scope
+R2113 Globalenvs.find_funct
+R2137 Coq.Init.Datatypes.Some
+R2143 Tunneling.tunnel_function
+R2099 Coq.Init.Logic "x = y" type_scope
+R2078 Globalenvs.find_funct
+R2101 Coq.Init.Datatypes.Some
+R2171 Globalenvs.find_funct_transf
+R2198 Tunneling.tunnel_function
+R2331 Coq.Init.Logic "x = y" type_scope
+R2305 Globalenvs.find_funct_ptr
+R2333 Coq.Init.Datatypes.Some
+R2339 Tunneling.tunnel_function
+R2291 Coq.Init.Logic "x = y" type_scope
+R2266 Globalenvs.find_funct_ptr
+R2293 Coq.Init.Datatypes.Some
+R2367 Globalenvs.find_funct_ptr_transf
+R2398 Tunneling.tunnel_function
+R2483 Coq.Init.Logic "x = y" type_scope
+R2459 Globalenvs.find_symbol
+R2485 Globalenvs.find_symbol
+R2517 Globalenvs.find_symbol_transf
+R2545 Tunneling.tunnel_function
+R2711 Coq.Init.Logic "A /\ B" type_scope
+R2706 Coq.Init.Logic "x = y" type_scope
+R2724 Coq.Init.Logic "A /\ B" type_scope
+R2718 Coq.Init.Logic "x = y" type_scope
+R2730 Coq.Init.Logic "x = y" type_scope
+R2689 Coq.Init.Logic "x = y" type_scope
+R2691 LTL.Bgoto
+R2630 LTL.exec_instrs
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R3046 Coq.Init.Logic "A /\ B" type_scope
+R3037 Coq.Init.Logic "x = y" type_scope
+R3039 LTL.Cont
+R3059 Coq.Init.Logic "A /\ B" type_scope
+R3053 Coq.Init.Logic "x = y" type_scope
+R3065 Coq.Init.Logic "x = y" type_scope
+R2983 LTL.exec_block
+R3001 LTL.Bgoto
+R3115 Tunnelingproof.exec_instrs_Bgoto_inv
+R3157 Coq.Init.Logic.refl_equal
+R3115 Tunnelingproof.exec_instrs_Bgoto_inv
+R3157 Coq.Init.Logic.refl_equal
+R3115 Tunnelingproof.exec_instrs_Bgoto_inv
+R3157 Coq.Init.Logic.refl_equal
+R3115 Tunnelingproof.exec_instrs_Bgoto_inv
+R3157 Coq.Init.Logic.refl_equal
+R3115 Tunnelingproof.exec_instrs_Bgoto_inv
+R3157 Coq.Init.Logic.refl_equal
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R3460 Coq.Init.Logic "A \/ B" type_scope
+R3437 Coq.Init.Logic "A /\ B" type_scope
+R3426 Coq.Init.Logic "x = y" type_scope
+R3428 LTL.Cont
+R3450 Coq.Init.Logic "A /\ B" type_scope
+R3444 Coq.Init.Logic "x = y" type_scope
+R3456 Coq.Init.Logic "x = y" type_scope
+R3467 LTL.exec_blocks
+R3399 Coq.Init.Logic "x = y" type_scope
+R3394 Maps "a ! b"
+R3401 Coq.Init.Datatypes.Some
+R3407 LTL.Bgoto
+R3346 LTL.exec_blocks
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R3565 Coq.Init.Logic "x = y" type_scope
+R3567 LTL.Bgoto
+R3565 Coq.Init.Logic "x = y" type_scope
+R3567 LTL.Bgoto
+R3613 Tunnelingproof.exec_block_Bgoto_inv
+R3613 Tunnelingproof.exec_block_Bgoto_inv
+R3721 LTL.exec_blocks_refl
+R3721 LTL.exec_blocks_refl
+R3802 Coq.Init.Logic "x = y" type_scope
+R3802 Coq.Init.Logic "x = y" type_scope
+R3906 LTL.exec_blocks_trans
+R3906 LTL.exec_blocks_trans
+R4032 LTL.Cont
+R4043 LTL.Cont
+R4049 Tunneling.branch_target
+R4073 LTL.Return
+R4083 LTL.Return
+R3999 LTL.outcome
+R3983 LTL.function
+R4245 LTL.exec_instr
+R4311 Tunneling.tunnel_block
+R4264 Tunneling.tunnel_block
+R4216 Mem.mem
+R4203 LTL.locset
+R4190 LTL.block
+R4168 Mem.mem
+R4155 LTL.locset
+R4142 LTL.block
+R4132 Values.val
+R4487 LTL.exec_instrs
+R4555 Tunneling.tunnel_block
+R4507 Tunneling.tunnel_block
+R4458 Mem.mem
+R4445 LTL.locset
+R4432 LTL.block
+R4410 Mem.mem
+R4397 LTL.locset
+R4384 LTL.block
+R4374 Values.val
+R4733 LTL.exec_block
+R4799 Tunnelingproof.tunnel_outcome
+R4752 Tunneling.tunnel_block
+R4704 Mem.mem
+R4691 LTL.locset
+R4676 LTL.outcome
+R4653 Mem.mem
+R4640 LTL.locset
+R4627 LTL.block
+R4617 Values.val
+R4874 Maps.map
+R4916 LTL.fn_code
+R4897 Tunneling.tunnel_block
+R4859 LTL.function
+R5111 LTL.exec_blocks
+R5205 Tunnelingproof.tunnel_outcome
+R5163 Tunneling.branch_target
+R5128 Tunnelingproof.tunneled_code
+R5102 Coq.Init.Logic "x = y" type_scope
+R5093 LTL.fn_code
+R5061 Mem.mem
+R5048 LTL.locset
+R5033 LTL.outcome
+R5017 Mem.mem
+R5004 LTL.locset
+R4992 LTL.node
+R4977 Values.val
+R4966 LTL.code
+R5363 LTL.exec_function
+R5382 Tunneling.tunnel_function
+R5346 Mem.mem
+R5333 LTL.locset
+R5303 Mem.mem
+R5290 LTL.locset
+R5274 LTL.function
+R5857 Tunnelingproof.exec_function_prop
+R5819 LTL.exec_function
+R5909 Tunnelingproof.exec_function_ind5
+R6052 Tunnelingproof.exec_function_prop
+R6024 Tunnelingproof.exec_blocks_prop
+R5997 Tunnelingproof.exec_block_prop
+R5969 Tunnelingproof.exec_instrs_prop
+R5942 Tunnelingproof.exec_instr_prop
+R5909 Tunnelingproof.exec_function_ind5
+R6052 Tunnelingproof.exec_function_prop
+R6024 Tunnelingproof.exec_blocks_prop
+R5997 Tunnelingproof.exec_block_prop
+R5969 Tunnelingproof.exec_instrs_prop
+R5942 Tunnelingproof.exec_instr_prop
+R6213 Op.eval_operation_preserved
+R6213 Op.eval_operation_preserved
+R6247 Tunnelingproof.symbols_preserved
+R6247 Tunnelingproof.symbols_preserved
+R6287 LTL.exec_Bload
+R6287 LTL.exec_Bload
+R6329 Op.eval_addressing_preserved
+R6329 Op.eval_addressing_preserved
+R6362 Tunnelingproof.symbols_preserved
+R6362 Tunnelingproof.symbols_preserved
+R6411 LTL.exec_Bstore
+R6411 LTL.exec_Bstore
+R6453 Op.eval_addressing_preserved
+R6453 Op.eval_addressing_preserved
+R6486 Tunnelingproof.symbols_preserved
+R6486 Tunnelingproof.symbols_preserved
+R6551 Tunneling.tunnel_function
+R6534 LTL.exec_Bcall
+R6551 Tunneling.tunnel_function
+R6534 LTL.exec_Bcall
+R6639 Tunnelingproof.functions_translated
+R6639 Tunnelingproof.functions_translated
+R6677 Tunnelingproof.symbols_preserved
+R6677 Tunnelingproof.symbols_preserved
+R6706 Globalenvs.find_symbol
+R6706 Globalenvs.find_symbol
+R6745 Tunnelingproof.function_ptr_translated
+R6745 Tunnelingproof.function_ptr_translated
+R6855 LTL.exec_refl
+R6855 LTL.exec_refl
+R6892 LTL.exec_one
+R6892 LTL.exec_one
+R6957 Tunneling.tunnel_block
+R6940 LTL.exec_trans
+R6957 Tunneling.tunnel_block
+R6940 LTL.exec_trans
+R7011 LTL.exec_Bgoto
+R7011 LTL.exec_Bgoto
+R7086 LTL.exec_Bcond_true
+R7086 LTL.exec_Bcond_true
+R7173 LTL.exec_Bcond_false
+R7173 LTL.exec_Bcond_false
+R7254 LTL.exec_Breturn
+R7254 LTL.exec_Breturn
+R7330 LTL.exec_blocks_refl
+R7330 LTL.exec_blocks_refl
+R7388 Tunnelingproof.branch_target_characterization
+R7388 Tunnelingproof.branch_target_characterization
+R7475 Tunneling.tunnel_block
+R7453 LTL.exec_blocks_one
+R7475 Tunneling.tunnel_block
+R7453 LTL.exec_blocks_one
+R7526 Maps.gmap
+R7526 Maps.gmap
+R7626 Coq.Init.Logic "x = y" type_scope
+R7628 LTL.Bgoto
+R7626 Coq.Init.Logic "x = y" type_scope
+R7628 LTL.Bgoto
+R7675 Tunnelingproof.exec_block_Bgoto_inv
+R7675 Tunnelingproof.exec_block_Bgoto_inv
+R7795 LTL.exec_blocks_refl
+R7795 LTL.exec_blocks_refl
+R7866 Tunneling.branch_target
+R7842 LTL.exec_blocks_trans
+R7866 Tunneling.branch_target
+R7842 LTL.exec_blocks_trans
+R8021 Tunnelingproof.tunneled_code
+R7986 LTL.fn_code
+R7995 Tunneling.tunnel_function
+R8021 Tunnelingproof.tunneled_code
+R7986 LTL.fn_code
+R7995 Tunneling.tunnel_function
+R8056 Tunnelingproof.branch_target_characterization
+R8090 LTL.fn_entrypoint
+R8056 Tunnelingproof.branch_target_characterization
+R8090 LTL.fn_entrypoint
+R8149 Coq.Init.Logic.refl_equal
+R8149 Coq.Init.Logic.refl_equal
+R8228 Tunneling.branch_target
+R8245 LTL.fn_entrypoint
+R8264 LTL.call_regs
+R8198 LTL.exec_blocks_trans
+R8228 Tunneling.branch_target
+R8245 LTL.fn_entrypoint
+R8264 LTL.call_regs
+R8198 LTL.exec_blocks_trans
+R8291 LTL.exec_blocks_one
+R8291 LTL.exec_blocks_one
+R8341 Maps.gmap
+R8341 Maps.gmap
+R8398 LTL.exec_Bgoto
+R8398 LTL.exec_Bgoto
+R8428 LTL.exec_refl
+R8428 LTL.exec_refl
+R8454 Coq.Init.Logic.refl_equal
+R8454 Coq.Init.Logic.refl_equal
+R8583 LTL.exec_program
+R8597 Tunneling.tunnel_program
+R8561 LTL.exec_program
+R8553 Values.val
+R8540 LTL.program
+R8712 Tunneling.tunnel_function
+R8712 Tunneling.tunnel_function
+R8806 AST.prog_main
+R8770 AST.prog_main
+R8781 Tunneling.tunnel_program
+R8806 AST.prog_main
+R8770 AST.prog_main
+R8781 Tunneling.tunnel_program
+R8846 Tunnelingproof.symbols_preserved
+R8846 Tunnelingproof.symbols_preserved
+R8880 Tunnelingproof.function_ptr_translated
+R8880 Tunnelingproof.function_ptr_translated
+R8971 Tunnelingproof.tunnel_function_correct
+R8971 Tunnelingproof.tunnel_function_correct
+R9030 Globalenvs.init_mem_transf
+R9030 Globalenvs.init_mem_transf
+FTunnelingtyping
+R343 LTLtyping.wt_block
+R373 Tunneling.tunnel_block
+R353 Tunneling.tunnel_function
+R325 LTLtyping.wt_block
+R503 LTLtyping.wt_function
+R516 Tunneling.tunnel_function
+R486 LTLtyping.wt_function
+R598 Maps.gmap
+R598 Maps.gmap
+R649 Maps "a ! b"
+R640 LTL.fn_code
+R649 Maps "a ! b"
+R640 LTL.fn_code
+R715 Tunnelingtyping.wt_tunnel_block
+R715 Tunnelingtyping.wt_tunnel_block
+R847 LTLtyping.wt_program
+R859 Tunneling.tunnel_program
+R831 LTLtyping.wt_program
+R815 LTL.program
+R922 AST.transform_program_function
+R949 Tunneling.tunnel_function
+R922 AST.transform_program_function
+R949 Tunneling.tunnel_function
+R1020 Tunnelingtyping.wt_tunnel_function
+R1020 Tunnelingtyping.wt_tunnel_function
+FLinear
+R332 Coq.NArith.BinPos.positive
+R396 Locations.mreg
+R388 Locations.slot
+R439 Locations.slot
+R431 Locations.mreg
+R494 Locations.mreg
+R481 Coq.Lists.List.list
+R486 Locations.mreg
+R468 Op.operation
+R568 Locations.mreg
+R555 Coq.Lists.List.list
+R560 Locations.mreg
+R541 Op.addressing
+R525 AST.memory_chunk
+R643 Locations.mreg
+R630 Coq.Lists.List.list
+R635 Locations.mreg
+R616 Op.addressing
+R600 AST.memory_chunk
+R692 Coq.Init.Datatypes "x + y" type_scope
+R687 Locations.mreg
+R694 AST.ident
+R674 AST.signature
+R727 Linear.label
+R759 Linear.label
+R817 Linear.label
+R804 Coq.Lists.List.list
+R809 Locations.mreg
+R791 Op.condition
+R889 Coq.Lists.List.list
+R894 Linear.instruction
+R955 AST.signature
+R982 Coq.ZArith.BinInt.Z
+R996 Linear.code
+R1027 AST.program
+R1039 Linear.function
+R1069 Globalenvs.t
+R1076 Linear.function
+R1107 Locations.t
+R1203 Coq.Init.Datatypes.bool
+R1234 Linear.Llabel
+R1252 Coqlib.peq
+R1280 Coq.Init.Datatypes.false
+R1270 Coq.Init.Datatypes.true
+R1295 Coq.Init.Datatypes.false
+R1188 Linear.instruction
+R1173 Linear.label
+R1358 Linear.is_label
+R1412 Coq.Init.Logic "x <> y" type_scope
+R1415 Linear.Llabel
+R1388 Coq.Init.Logic "x = y" type_scope
+R1390 Linear.Llabel
+R1494 Coqlib.peq
+R1494 Coqlib.peq
+R1587 Coq.Init.Datatypes.option
+R1594 Linear.code
+R1568 Linear.code
+R1557 Linear.label
+R1621 Coq.Lists.List.nil
+R1628 Coq.Init.Datatypes.None
+R1640 Coq.Lists.List "x :: y" list_scope
+R1652 Linear.is_label
+R1673 Coq.Init.Datatypes.Some
+R1568 Linear.code
+R1557 Linear.label
+R1742 Linear.genv
+R1809 Coq.Init.Datatypes.option
+R1816 Linear.function
+R1849 Coq.Init.Datatypes.inl
+R1858 Globalenvs.find_funct
+R1882 Locations.R
+R1892 Coq.Init.Datatypes.inr
+R1916 Globalenvs.find_symbol
+R1954 Coq.Init.Datatypes.None
+R1962 Coq.Init.Datatypes.None
+R1975 Coq.Init.Datatypes.Some
+R1985 Globalenvs.find_funct_ptr
+R1799 Linear.locset
+R1785 Coq.Init.Datatypes "x + y" type_scope
+R1780 Locations.mreg
+R1787 AST.ident
+R2156 Mem.mem
+R2146 Linear.locset
+R2138 Linear.code
+R2109 Mem.mem
+R2099 Linear.locset
+R2091 Linear.code
+R2062 Values.val
+R2050 Linear.function
+R4380 Mem.mem
+R4370 Linear.locset
+R4362 Linear.code
+R4337 Mem.mem
+R4327 Linear.locset
+R4319 Linear.code
+R4294 Values.val
+R4282 Linear.function
+R4874 Mem.mem
+R4864 Linear.locset
+R4857 Mem.mem
+R4847 Linear.locset
+R4835 Linear.function
+R2297 Locations.set
+R2319 Locations.S
+R2309 Locations.R
+R2260 Coq.Lists.List "x :: y" list_scope
+R2245 Linear.Lgetstack
+R2457 Locations.set
+R2480 Locations.R
+R2469 Locations.S
+R2421 Coq.Lists.List "x :: y" list_scope
+R2406 Linear.Lsetstack
+R2681 Locations.set
+R2693 Locations.R
+R2645 Coq.Lists.List "x :: y" list_scope
+R2629 Linear.Lop
+R2594 Coq.Init.Logic "x = y" type_scope
+R2552 Op.eval_operation
+R2577 LTL.reglist
+R2596 Coq.Init.Datatypes.Some
+R2956 Locations.set
+R2968 Locations.R
+R2920 Coq.Lists.List "x :: y" list_scope
+R2894 Linear.Lload
+R2859 Coq.Init.Logic "x = y" type_scope
+R2843 Mem.loadv
+R2861 Coq.Init.Datatypes.Some
+R2825 Coq.Init.Logic "x = y" type_scope
+R2780 Op.eval_addressing
+R2808 LTL.reglist
+R2827 Coq.Init.Datatypes.Some
+R3213 Coq.Lists.List "x :: y" list_scope
+R3186 Linear.Lstore
+R3150 Coq.Init.Logic "x = y" type_scope
+R3120 Mem.storev
+R3142 Locations.R
+R3152 Coq.Init.Datatypes.Some
+R3102 Coq.Init.Logic "x = y" type_scope
+R3057 Op.eval_addressing
+R3085 LTL.reglist
+R3104 Coq.Init.Datatypes.Some
+R3492 LTL.return_regs
+R3456 Coq.Lists.List "x :: y" list_scope
+R3442 Linear.Lcall
+R3364 Coq.Init.Logic "x = y" type_scope
+R3370 Linear.fn_sig
+R3341 Coq.Init.Logic "x = y" type_scope
+R3320 Linear.find_function
+R3343 Coq.Init.Datatypes.Some
+R3596 Coq.Lists.List "x :: y" list_scope
+R3585 Linear.Llabel
+R3764 Coq.Lists.List "x :: y" list_scope
+R3754 Linear.Lgoto
+R3718 Coq.Init.Logic "x = y" type_scope
+R3691 Linear.find_label
+R3709 Linear.fn_code
+R3720 Coq.Init.Datatypes.Some
+R4017 Coq.Lists.List "x :: y" list_scope
+R3997 Linear.Lcond
+R3961 Coq.Init.Logic "x = y" type_scope
+R3934 Linear.find_label
+R3952 Linear.fn_code
+R3963 Coq.Init.Datatypes.Some
+R3913 Coq.Init.Logic "x = y" type_scope
+R3875 Op.eval_condition
+R3896 LTL.reglist
+R3915 Coq.Init.Datatypes.Some
+R3920 Coq.Init.Datatypes.true
+R4223 Coq.Lists.List "x :: y" list_scope
+R4203 Linear.Lcond
+R4164 Coq.Init.Logic "x = y" type_scope
+R4126 Op.eval_condition
+R4147 LTL.reglist
+R4166 Coq.Init.Datatypes.Some
+R4171 Coq.Init.Datatypes.false
+R5135 Mem.free
+R5087 Coq.Lists.List "x :: y" list_scope
+R5079 Linear.Lreturn
+R5061 LTL.call_regs
+R5051 Linear.fn_code
+R5011 Values.Vptr
+R5020 Integers.zero
+R4975 Coq.Init.Logic "x = y" type_scope
+R4948 Mem.alloc
+R4961 Linear.fn_stacksize
+R4977 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R5480 Coq.Init.Logic "'exists' x , p" type_scope
+R5490 Coq.Init.Logic "'exists' x , p" type_scope
+R5500 Coq.Init.Logic "'exists' x , p" type_scope
+R5511 Coq.Init.Logic "'exists' x , p" type_scope
+R5566 Coq.Init.Logic "A /\ B" type_scope
+R5557 Coq.Init.Logic "x = y" type_scope
+R5523 Globalenvs.find_symbol
+R5546 AST.prog_main
+R5559 Coq.Init.Datatypes.Some
+R5605 Coq.Init.Logic "A /\ B" type_scope
+R5596 Coq.Init.Logic "x = y" type_scope
+R5571 Globalenvs.find_funct_ptr
+R5598 Coq.Init.Datatypes.Some
+R5651 Coq.Init.Logic "A /\ B" type_scope
+R5621 Coq.Init.Logic "x = y" type_scope
+R5613 Linear.fn_sig
+R5623 AST.mksignature
+R5640 Coq.Init.Datatypes.Some
+R5645 AST.Tint
+R5635 Coq.Lists.List.nil
+R5704 Coq.Init.Logic "A /\ B" type_scope
+R5656 Linear.exec_function
+R5676 Locations.init
+R5688 Values.Vundef
+R5752 Coq.Init.Logic "x = y" type_scope
+R5713 Locations.R
+R5716 Conventions.loc_result
+R5742 Linear.fn_sig
+R5459 Globalenvs.init_mem
+R5427 Globalenvs.globalenv
+R5400 Values.val
+R5387 Linear.program
+FLineartyping
+R234 Coq.ZArith.BinInt.Z
+R258 Coq.ZArith.BinInt.Z
+R286 Coq.ZArith.BinInt.Z
+R316 Coq.ZArith.BinInt.Z
+R337 Coq.ZArith.BinInt.Z
+R420 Linear.function
+R475 Coq.Lists.List.list
+R480 Locations.mreg
+R507 Linear.Lgetstack
+R526 Coq.Lists.List "x :: y" list_scope
+R529 Coq.Lists.List.nil
+R537 Linear.Lsetstack
+R556 Coq.Lists.List "x :: y" list_scope
+R559 Coq.Lists.List.nil
+R567 Linear.Lop
+R590 Coq.Lists.List "x :: y" list_scope
+R602 Linear.Lload
+R635 Coq.Lists.List "x :: y" list_scope
+R647 Linear.Lstore
+R681 Coq.Lists.List "x :: y" list_scope
+R693 Linear.Lcall
+R704 Coq.Init.Datatypes.inl
+R718 Coq.Lists.List "x :: y" list_scope
+R721 Coq.Lists.List.nil
+R729 Linear.Lcall
+R740 Coq.Init.Datatypes.inr
+R750 Coq.Lists.List.nil
+R758 Linear.Llabel
+R772 Coq.Lists.List.nil
+R780 Linear.Lgoto
+R793 Coq.Lists.List.nil
+R801 Linear.Lcond
+R833 Linear.Lreturn
+R844 Coq.Lists.List.nil
+R460 Linear.instruction
+R901 Coq.Lists.List.list
+R906 Locations.slot
+R933 Linear.Lgetstack
+R952 Coq.Lists.List "x :: y" list_scope
+R955 Coq.Lists.List.nil
+R963 Linear.Lsetstack
+R982 Coq.Lists.List "x :: y" list_scope
+R985 Coq.Lists.List.nil
+R998 Coq.Lists.List.nil
+R886 Linear.instruction
+R1073 Coq.ZArith.BinInt.Z
+R1080 Coq.Lists.List.fold_left
+R1107 Coq.ZArith.Zmin.Zmax
+R1063 Coq.Lists.List.list
+R1056 Coq.ZArith.BinInt.Z
+R1184 Coq.ZArith.BinInt.Z
+R1191 Lineartyping.max_over_list
+R1225 Linear.fn_code
+R1205 Linear.instruction
+R1179 Coq.ZArith.BinInt.Z
+R1164 Linear.instruction
+R1307 Coq.ZArith.BinInt.Z
+R1314 Lineartyping.max_over_list
+R1339 Lineartyping.regs_of_instr
+R1328 Locations.mreg
+R1292 Linear.instruction
+R1285 Coq.ZArith.BinInt.Z
+R1277 Locations.mreg
+R1430 Coq.ZArith.BinInt.Z
+R1437 Lineartyping.max_over_list
+R1462 Lineartyping.slots_of_instr
+R1451 Locations.slot
+R1415 Linear.instruction
+R1408 Coq.ZArith.BinInt.Z
+R1400 Locations.slot
+R1536 Coq.ZArith.BinInt.Z
+R1543 Lineartyping.max_over_instrs
+R1560 Lineartyping.max_over_regs_of_instr
+R1531 Coq.ZArith.BinInt.Z
+R1523 Locations.mreg
+R1646 Coq.ZArith.BinInt.Z
+R1653 Lineartyping.max_over_instrs
+R1670 Lineartyping.max_over_slots_of_instr
+R1641 Coq.ZArith.BinInt.Z
+R1633 Locations.slot
+R1744 Coq.ZArith.BinInt "x + y" Z_scope
+R1746 Conventions.index_int_callee_save
+R1733 Locations.mreg
+R1816 Coq.ZArith.BinInt "x + y" Z_scope
+R1818 Conventions.index_float_callee_save
+R1805 Locations.mreg
+R1895 Locations.Local
+R1905 AST.Tint
+R1915 Coq.ZArith.BinInt "x + y" Z_scope
+R1871 Locations.slot
+R1987 Locations.Local
+R1997 AST.Tfloat
+R2009 Coq.ZArith.BinInt "x + y" Z_scope
+R1963 Locations.slot
+R2083 Locations.Outgoing
+R2106 Coq.ZArith.BinInt "x + y" Z_scope
+R2108 Locations.typesize
+R2059 Locations.slot
+R2196 Linear.Lcall
+R2211 Conventions.size_arguments
+R2165 Linear.instruction
+R2277 Lineartyping.mkbounds
+R2465 Coq.ZArith.Zmin.Zmax
+R2483 Coq.ZArith.Zmin.Zmax
+R2538 Lineartyping.max_over_slots_of_funct
+R2562 Lineartyping.outgoing_slot
+R2489 Lineartyping.max_over_instrs
+R2505 Lineartyping.outgoing_space
+R2418 Lineartyping.max_over_regs_of_funct
+R2441 Lineartyping.float_callee_save
+R2373 Lineartyping.max_over_regs_of_funct
+R2396 Lineartyping.int_callee_save
+R2331 Lineartyping.max_over_slots_of_funct
+R2355 Lineartyping.float_local
+R2291 Lineartyping.max_over_slots_of_funct
+R2315 Lineartyping.int_local
+R2677 Coq.ZArith.BinInt "x >= y" Z_scope
+R2654 Lineartyping.max_over_list
+R2643 Coq.Lists.List.list
+R2636 Coq.ZArith.BinInt.Z
+R2798 Coq.ZArith.BinInt "x >= y" Z_scope
+R2755 Coq.Lists.List.fold_left
+R2777 Coq.ZArith.Zmin.Zmax
+R2798 Coq.ZArith.BinInt "x >= y" Z_scope
+R2755 Coq.Lists.List.fold_left
+R2777 Coq.ZArith.Zmin.Zmax
+R2866 Coq.ZArith.Zmin.Zmax
+R2850 Coq.ZArith.Zorder.Zge_trans
+R2866 Coq.ZArith.Zmin.Zmax
+R2850 Coq.ZArith.Zorder.Zge_trans
+R2899 Coq.ZArith.Zorder.Zle_ge
+R2899 Coq.ZArith.Zorder.Zle_ge
+R2913 Coq.ZArith.Zmin.Zmax1
+R2913 Coq.ZArith.Zmin.Zmax1
+R3024 Coq.ZArith.BinInt "x >= y" Z_scope
+R2995 Lineartyping.max_over_slots_of_funct
+R2991 Coq.ZArith.BinInt.Z
+R2983 Locations.slot
+R3111 Lineartyping.max_over_list_pos
+R3111 Lineartyping.max_over_list_pos
+R3226 Coq.ZArith.BinInt "x >= y" Z_scope
+R3198 Lineartyping.max_over_regs_of_funct
+R3194 Coq.ZArith.BinInt.Z
+R3186 Locations.mreg
+R3312 Lineartyping.max_over_list_pos
+R3312 Lineartyping.max_over_list_pos
+R3398 Coq.ZArith.BinInt "x >= y" Z_scope
+R3366 Lineartyping.bound_int_local
+R3382 Lineartyping.function_bounds
+R3426 Lineartyping.max_over_slots_of_funct_pos
+R3426 Lineartyping.max_over_slots_of_funct_pos
+R3526 Coq.ZArith.BinInt "x >= y" Z_scope
+R3492 Lineartyping.bound_float_local
+R3510 Lineartyping.function_bounds
+R3554 Lineartyping.max_over_slots_of_funct_pos
+R3554 Lineartyping.max_over_slots_of_funct_pos
+R3662 Coq.ZArith.BinInt "x >= y" Z_scope
+R3624 Lineartyping.bound_int_callee_save
+R3646 Lineartyping.function_bounds
+R3690 Lineartyping.max_over_regs_of_funct_pos
+R3690 Lineartyping.max_over_regs_of_funct_pos
+R3801 Coq.ZArith.BinInt "x >= y" Z_scope
+R3761 Lineartyping.bound_float_callee_save
+R3785 Lineartyping.function_bounds
+R3829 Lineartyping.max_over_regs_of_funct_pos
+R3829 Lineartyping.max_over_regs_of_funct_pos
+R3922 Coq.ZArith.BinInt "x >= y" Z_scope
+R3891 Lineartyping.bound_outgoing
+R3906 Lineartyping.function_bounds
+R3950 Coq.ZArith.Zorder.Zle_ge
+R3950 Coq.ZArith.Zorder.Zle_ge
+R3964 Coqlib.Zmax_bound_l
+R3964 Coqlib.Zmax_bound_l
+R4039 Linear.function
+R4058 Lineartyping.function_bounds
+R4127 Locations.mreg_type
+R4148 AST.Tint
+R4180 Coq.ZArith.BinInt "x < y" Z_scope
+R4156 Conventions.index_int_callee_save
+R4182 Lineartyping.bound_int_callee_save
+R4210 AST.Tfloat
+R4246 Coq.ZArith.BinInt "x < y" Z_scope
+R4220 Conventions.index_float_callee_save
+R4248 Lineartyping.bound_float_callee_save
+R4110 Locations.mreg
+R4338 Locations.Local
+R4348 AST.Tint
+R4358 Coq.ZArith.BinInt "x <= y < z" Z_scope
+R4367 Lineartyping.bound_int_local
+R4389 Locations.Local
+R4399 AST.Tfloat
+R4411 Coq.ZArith.BinInt "x <= y < z" Z_scope
+R4420 Lineartyping.bound_float_local
+R4444 Locations.Outgoing
+R4472 Coq.Init.Logic "A /\ B" type_scope
+R4465 Coq.ZArith.BinInt "x <= y" Z_scope
+R4493 Coq.ZArith.BinInt "x <= y" Z_scope
+R4479 Coq.ZArith.BinInt "x + y" Z_scope
+R4481 Locations.typesize
+R4496 Lineartyping.bound_outgoing
+R4517 Locations.Incoming
+R4545 Coq.Init.Logic "A /\ B" type_scope
+R4538 Coq.ZArith.BinInt "x <= y" Z_scope
+R4566 Coq.ZArith.BinInt "x <= y" Z_scope
+R4552 Coq.ZArith.BinInt "x + y" Z_scope
+R4554 Locations.typesize
+R4569 Conventions.size_arguments
+R4591 Linear.fn_sig
+R4310 Locations.slot
+R4628 Linear.instruction
+R4780 Linear.Lgetstack
+R4746 Lineartyping.mreg_bounded
+R4728 Lineartyping.slot_bounded
+R4705 Coq.Init.Logic "x = y" type_scope
+R4693 Locations.slot_type
+R4707 Locations.mreg_type
+R4966 Linear.Lsetstack
+R4932 Lineartyping.slot_bounded
+R4909 Coq.Init.Logic "x = y" type_scope
+R4897 Locations.slot_type
+R4911 Locations.mreg_type
+R4850 Locations.Incoming
+R4866 Coq.Init.Logic.False
+R4879 Coq.Init.Logic.True
+R5092 Linear.Lop
+R5106 Coq.Lists.List "x :: y" list_scope
+R5109 Coq.Lists.List.nil
+R5096 Op.Omove
+R5058 Lineartyping.mreg_bounded
+R5035 Coq.Init.Logic "x = y" type_scope
+R5022 Locations.mreg_type
+R5037 Locations.mreg_type
+R5190 Linear.Lop
+R5201 Coq.Lists.List.nil
+R5194 Op.Oundef
+R5156 Lineartyping.mreg_bounded
+R5398 Linear.Lop
+R5362 Lineartyping.mreg_bounded
+R5330 Coq.Init.Logic "x = y" type_scope
+R5289 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R5290 Coq.Lists.List.map
+R5299 Locations.mreg_type
+R5315 Locations.mreg_type
+R5332 Op.type_of_operation
+R5270 Coq.Init.Logic "x <> y" type_scope
+R5273 Op.Oundef
+R5255 Coq.Init.Logic "x <> y" type_scope
+R5258 Op.Omove
+R5609 Linear.Lload
+R5573 Lineartyping.mreg_bounded
+R5542 Coq.Init.Logic "x = y" type_scope
+R5528 Locations.mreg_type
+R5544 Op.type_of_chunk
+R5493 Coq.Init.Logic "x = y" type_scope
+R5469 Coq.Lists.List.map
+R5478 Locations.mreg_type
+R5495 Op.type_of_addressing
+R5805 Linear.Lstore
+R5764 Coq.Init.Logic "x = y" type_scope
+R5750 Locations.mreg_type
+R5766 Op.type_of_chunk
+R5715 Coq.Init.Logic "x = y" type_scope
+R5691 Coq.Lists.List.map
+R5700 Locations.mreg_type
+R5717 Op.type_of_addressing
+R6001 Linear.Lcall
+R5938 Coq.Init.Datatypes.inl
+R5959 Coq.Init.Logic "x = y" type_scope
+R5947 Locations.mreg_type
+R5961 AST.Tint
+R5973 Coq.Init.Logic.True
+R5894 Coq.ZArith.BinInt "x <= y" Z_scope
+R5875 Conventions.size_arguments
+R5897 Lineartyping.bound_outgoing
+R6065 Linear.Llabel
+R6125 Linear.Lgoto
+R6252 Linear.Lcond
+R6208 Coq.Init.Logic "x = y" type_scope
+R6184 Coq.Lists.List.map
+R6193 Locations.mreg_type
+R6210 Op.type_of_condition
+R6306 Linear.Lreturn
+R6419 Lineartyping.wt_instr
+R6395 Coq.Lists.List.In
+R6407 Linear.fn_code
+R6359 Linear.function
+R6525 Lineartyping.wt_function
+R6497 Coq.Lists.List.In
+R6508 AST.prog_funct
+R6500 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R6464 Linear.program
+FLinearize
+R366 Coq.Init.Datatypes.bool
+R347 Linear.code
+R336 Linear.label
+R405 Coq.Lists.List "x :: y" list_scope
+R393 Linear.Llabel
+R417 Coqlib.peq
+R435 Coq.Init.Datatypes.true
+R473 Coq.Init.Datatypes.false
+R347 Linear.code
+R336 Linear.label
+R679 Linear.code
+R660 Linear.code
+R649 LTL.block
+R706 LTL.Bgetstack
+R745 Coq.Lists.List "x :: y" list_scope
+R731 Linear.Lgetstack
+R772 LTL.Bsetstack
+R811 Coq.Lists.List "x :: y" list_scope
+R797 Linear.Lsetstack
+R838 LTL.Bop
+R881 Coq.Lists.List "x :: y" list_scope
+R865 Linear.Lop
+R908 LTL.Bload
+R971 Coq.Lists.List "x :: y" list_scope
+R945 Linear.Lload
+R998 LTL.Bstore
+R1063 Coq.Lists.List "x :: y" list_scope
+R1036 Linear.Lstore
+R1090 LTL.Bcall
+R1129 Coq.Lists.List "x :: y" list_scope
+R1115 Linear.Lcall
+R1156 LTL.Bgoto
+R1181 Coq.Lists.List "x :: y" list_scope
+R1173 Linear.Lgoto
+R1190 LTL.Bcond
+R1224 Linearize.starts_with
+R1347 Coq.Lists.List "x :: y" list_scope
+R1328 Linear.Lcond
+R1359 Coq.Lists.List "x :: y" list_scope
+R1350 Linear.Lgoto
+R1292 Coq.Lists.List "x :: y" list_scope
+R1254 Linear.Lcond
+R1261 Op.negate_condition
+R1304 Coq.Lists.List "x :: y" list_scope
+R1295 Linear.Lgoto
+R1368 LTL.Breturn
+R1393 Coq.Lists.List "x :: y" list_scope
+R1385 Linear.Lreturn
+R660 Linear.code
+R649 LTL.block
+R1585 Linear.code
+R1534 Coq.Lists.List.list
+R1539 LTL.node
+R1513 LTL.function
+R1615 Coq.Lists.List.nil
+R1622 Coq.Lists.List.nil
+R1633 Coq.Lists.List "x :: y" list_scope
+R1670 Maps "a ! b"
+R1658 LTL.fn_code
+R1687 Coq.Init.Datatypes.None
+R1724 Coq.Init.Datatypes.Some
+R1744 Coq.Lists.List "x :: y" list_scope
+R1734 Linear.Llabel
+R1747 Linearize.linearize_block
+R1534 Coq.Lists.List.list
+R1539 LTL.node
+R1513 LTL.function
+R1925 Coq.Init.Datatypes.option
+R1933 Maps.t
+R1940 Coq.Init.Datatypes.bool
+R1951 Linearize.fixpoint
+R2063 Coq.Lists.List "x :: y" list_scope
+R2037 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R2041 LTL.fn_entrypoint
+R2057 Coq.Init.Datatypes.true
+R2066 Coq.Lists.List.nil
+R1987 Coq.NArith.BinPos.Psucc
+R1996 LTL.fn_entrypoint
+R1968 LTL.successors
+R1909 LTL.function
+R2114 Maps.t
+R2121 Coq.Init.Datatypes.bool
+R2137 Linearize.reachable_aux
+R2164 Coq.Init.Datatypes.None
+R2172 Maps.init
+R2182 Coq.Init.Datatypes.true
+R2191 Coq.Init.Datatypes.Some
+R2098 LTL.function
+R2325 Coq.Lists.List.list
+R2330 LTL.node
+R2370 Coqlib.positive_rec
+R2467 Coq.NArith.BinPos.Psucc
+R2476 LTL.fn_entrypoint
+R2428 Maps "a !! b"
+R2441 Coq.Lists.List "x :: y" list_scope
+R2395 Coq.Lists.List.nil
+R2384 Coq.Lists.List.list
+R2389 LTL.node
+R2353 Linearize.reachable
+R2309 LTL.function
+R2544 Linear.function
+R2565 Linear.mkfunction
+R2625 Linearize.linearize_body
+R2643 Linearize.enumerate
+R2600 LTL.fn_stacksize
+R2581 LTL.fn_sig
+R2528 LTL.function
+R2756 Linear.code
+R2737 Linear.code
+R2783 Coq.Lists.List.nil
+R2790 Coq.Lists.List.nil
+R2808 Coq.Lists.List "x :: y" list_scope
+R2798 Linear.Lgoto
+R2827 Linearize.starts_with
+R2894 Coq.Lists.List "x :: y" list_scope
+R2884 Linear.Lgoto
+R2919 Coq.Lists.List "x :: y" list_scope
+R2936 Coq.Lists.List "x :: y" list_scope
+R2737 Linear.code
+R3014 Linear.function
+R3035 Linear.mkfunction
+R3087 Linearize.cleanup_code
+R3103 Linear.fn_code
+R3066 Linear.fn_stacksize
+R3051 Linear.fn_sig
+R2995 Linear.function
+R3547 Linear.function
+R3568 Linearize.cleanup_function
+R3586 Linearize.linearize_function
+R3531 LTL.function
+R3655 Linear.program
+R3675 AST.transform_program
+R3693 Linearize.transf_function
+R3640 LTL.program
+FLinearizeproof
+R337 LTL.program
+R363 Linearize.transf_program
+R395 Globalenvs.globalenv
+R427 Globalenvs.globalenv
+R551 Coq.Init.Logic "x = y" type_scope
+R529 Globalenvs.find_funct
+R553 Coq.Init.Datatypes.Some
+R559 Linearize.transf_function
+R515 Coq.Init.Logic "x = y" type_scope
+R494 Globalenvs.find_funct
+R517 Coq.Init.Datatypes.Some
+R587 Globalenvs.find_funct_transf
+R614 Linearize.transf_function
+R750 Coq.Init.Logic "x = y" type_scope
+R724 Globalenvs.find_funct_ptr
+R752 Coq.Init.Datatypes.Some
+R758 Linearize.transf_function
+R710 Coq.Init.Logic "x = y" type_scope
+R685 Globalenvs.find_funct_ptr
+R712 Coq.Init.Datatypes.Some
+R786 Globalenvs.find_funct_ptr_transf
+R817 Linearize.transf_function
+R905 Coq.Init.Logic "x = y" type_scope
+R881 Globalenvs.find_symbol
+R907 Globalenvs.find_symbol
+R939 Globalenvs.find_symbol_transf
+R967 Linearize.transf_function
+R1109 Coq.Init.Logic "x = y" type_scope
+R1086 Maps "a !! b"
+R1093 LTL.fn_entrypoint
+R1075 Linearize.reachable
+R1111 Coq.Init.Datatypes.true
+R1162 Linearize.reachable_aux
+R1162 Linearize.reachable_aux
+R1230 Lattice.ge
+R1269 Coq.Init.Datatypes.true
+R1247 Maps "a !! b"
+R1253 LTL.fn_entrypoint
+R1230 Lattice.ge
+R1269 Coq.Init.Datatypes.true
+R1247 Maps "a !! b"
+R1253 LTL.fn_entrypoint
+R1285 Linearize.fixpoint_entry
+R1285 Linearize.fixpoint_entry
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R1382 Maps.gi
+R1382 Maps.gi
+R1557 Coq.Init.Logic "x = y" type_scope
+R1550 Maps "a !! b"
+R1539 Linearize.reachable
+R1559 Coq.Init.Datatypes.true
+R1526 Coq.Init.Logic "x = y" type_scope
+R1520 Maps "a !! b"
+R1509 Linearize.reachable
+R1528 Coq.Init.Datatypes.true
+R1478 Coq.Lists.List.In
+R1486 LTL.successors
+R1465 Coq.Init.Logic "x <> y" type_scope
+R1461 Maps "a ! b"
+R1449 LTL.fn_code
+R1468 Coq.Init.Datatypes.None
+R1611 Linearize.reachable_aux
+R1611 Linearize.reachable_aux
+R1684 Lattice.ge
+R1712 Maps "a !! b"
+R1701 Maps "a !! b"
+R1684 Lattice.ge
+R1712 Maps "a !! b"
+R1701 Maps "a !! b"
+R1771 Maps "a !! b"
+R1734 Maps "a !! b"
+R1771 Maps "a !! b"
+R1734 Maps "a !! b"
+R1788 Linearize.fixpoint_solution
+R1788 Linearize.fixpoint_solution
+R1828 LTL.fn_code_wf
+R1828 LTL.fn_code_wf
+R1935 Maps.gi
+R1935 Maps.gi
+R2144 Coq.Init.Logic "x = y" type_scope
+R2137 Maps "a !! b"
+R2126 Linearize.reachable
+R2146 Coq.Init.Datatypes.true
+R2113 Coq.Init.Logic "x = y" type_scope
+R2107 Maps "a !! b"
+R2096 Linearize.reachable
+R2115 Coq.Init.Datatypes.true
+R2048 LTL.exec_block
+R2073 LTL.Cont
+R2034 Coq.Init.Logic "x = y" type_scope
+R2030 Maps "a ! b"
+R2018 LTL.fn_code
+R2036 Coq.Init.Datatypes.Some
+R2175 Linearizeproof.reachable_successors
+R2175 Linearizeproof.reachable_successors
+R2234 LTL.successors_correct
+R2234 LTL.successors_correct
+R2486 Coq.Init.Logic "x = y" type_scope
+R2479 Maps "a !! b"
+R2468 Linearize.reachable
+R2488 Coq.Init.Datatypes.true
+R2455 Coq.Init.Logic "x = y" type_scope
+R2449 Maps "a !! b"
+R2438 Linearize.reachable
+R2457 Coq.Init.Datatypes.true
+R2421 Coq.Init.Logic "x = y" type_scope
+R2423 LTL.Cont
+R2394 Coq.Init.Logic "x = y" type_scope
+R2399 LTL.fn_code
+R2330 LTL.exec_blocks
+R2547 Linearizeproof.reachable_correct_1
+R2547 Linearizeproof.reachable_correct_1
+R2998 Coq.NArith.BinPos.Psucc
+R2938 Coq.NArith.BinPos.positive
+R3052 Coq.Init.Wf.well_founded_ind
+R3069 Coqlib.Plt_wf
+R3052 Coq.Init.Wf.well_founded_ind
+R3069 Coqlib.Plt_wf
+R3097 Coq.NArith.BinPos.Psucc_pred
+R3097 Coq.NArith.BinPos.Psucc_pred
+R3157 Coq.NArith.BinPos.Ppred
+R3157 Coq.NArith.BinPos.Ppred
+R3232 Coqlib.Plt_succ
+R3232 Coqlib.Plt_succ
+R3356 Coq.Lists.List.In
+R3363 Linearize.enumerate
+R3344 Coq.Init.Logic "x = y" type_scope
+R3338 Maps "a !! b"
+R3327 Linearize.reachable
+R3346 Coq.Init.Datatypes.true
+R3312 Coq.Init.Logic "x = y" type_scope
+R3308 Maps "a ! b"
+R3296 LTL.fn_code
+R3314 Coq.Init.Datatypes.Some
+R3490 Coq.Lists.List.In
+R3496 Linearize.enumerate
+R3476 Coq.Init.Logic "x = y" type_scope
+R3471 Maps "a !! b"
+R3460 Linearize.reachable
+R3478 Coq.Init.Datatypes.true
+R3420 Coqlib.Plt
+R3427 Coq.NArith.BinPos.Psucc
+R3436 LTL.fn_entrypoint
+R3490 Coq.Lists.List.In
+R3496 Linearize.enumerate
+R3476 Coq.Init.Logic "x = y" type_scope
+R3471 Maps "a !! b"
+R3460 Linearize.reachable
+R3478 Coq.Init.Datatypes.true
+R3420 Coqlib.Plt
+R3427 Coq.NArith.BinPos.Psucc
+R3436 LTL.fn_entrypoint
+R3540 Coq.NArith.BinPos.Psucc
+R3547 LTL.fn_entrypoint
+R3540 Coq.NArith.BinPos.Psucc
+R3547 LTL.fn_entrypoint
+R3574 Linearizeproof.positive_ind
+R3574 Linearizeproof.positive_ind
+R3659 Coqlib.positive_rec_succ
+R3659 Coqlib.positive_rec_succ
+R3684 Coqlib.Plt_succ_inv
+R3684 Coqlib.Plt_succ_inv
+R3732 Maps "a !! b"
+R3721 Linearize.reachable
+R3732 Maps "a !! b"
+R3721 Linearize.reachable
+R3744 Coq.Lists.List.in_cons
+R3744 Coq.Lists.List.in_cons
+R3794 Coq.Lists.List.in_eq
+R3794 Coq.Lists.List.in_eq
+R3810 LTL.fn_code_wf
+R3810 LTL.fn_code_wf
+R3898 Coq.Init.Logic "'exists' x , p" type_scope
+R3920 Coq.Init.Logic "x = y" type_scope
+R3908 Linearize.enumerate
+R3944 Coq.Lists.List "x :: y" list_scope
+R3925 LTL.fn_entrypoint
+R3992 Coqlib.positive_rec_succ
+R3992 Coqlib.positive_rec_succ
+R4022 Linearizeproof.reachable_entrypoint
+R4022 Linearizeproof.reachable_entrypoint
+R4054 Coqlib.positive_rec
+R4195 LTL.fn_entrypoint
+R4152 Maps "a !! b"
+R4141 Linearize.reachable
+R4168 Coq.Lists.List "x :: y" list_scope
+R4117 Coq.Lists.List.list
+R4122 LTL.node
+R4098 Coq.NArith.BinPos.positive
+R4079 Coq.Lists.List.nil
+R4068 Coq.Lists.List.list
+R4073 LTL.node
+R4054 Coqlib.positive_rec
+R4195 LTL.fn_entrypoint
+R4152 Maps "a !! b"
+R4141 Linearize.reachable
+R4168 Coq.Lists.List "x :: y" list_scope
+R4117 Coq.Lists.List.list
+R4122 LTL.node
+R4098 Coq.NArith.BinPos.positive
+R4079 Coq.Lists.List.nil
+R4068 Coq.Lists.List.list
+R4073 LTL.node
+R4266 Coqlib.list_norepet
+R4280 Linearize.enumerate
+R4340 Coq.NArith.BinPos.Psucc
+R4347 LTL.fn_entrypoint
+R4340 Coq.NArith.BinPos.Psucc
+R4347 LTL.fn_entrypoint
+R4374 Linearizeproof.positive_ind
+R4374 Linearizeproof.positive_ind
+R4400 Coqlib.positive_rec_base
+R4400 Coqlib.positive_rec_base
+R4450 Coqlib.positive_rec_succ
+R4450 Coqlib.positive_rec_succ
+R4488 Maps "a !! b"
+R4477 Linearize.reachable
+R4488 Maps "a !! b"
+R4477 Linearize.reachable
+R4697 Coqlib.Plt
+R4540 Coq.Lists.List.In
+R4546 Coqlib.positive_rec
+R4650 Maps "a !! b"
+R4639 Linearize.reachable
+R4666 Coq.Lists.List "x :: y" list_scope
+R4615 Coq.Lists.List.list
+R4620 LTL.node
+R4596 Coq.NArith.BinPos.positive
+R4576 Coq.Lists.List.nil
+R4565 Coq.Lists.List.list
+R4570 LTL.node
+R4697 Coqlib.Plt
+R4540 Coq.Lists.List.In
+R4546 Coqlib.positive_rec
+R4650 Maps "a !! b"
+R4639 Linearize.reachable
+R4666 Coq.Lists.List "x :: y" list_scope
+R4615 Coq.Lists.List.list
+R4620 LTL.node
+R4596 Coq.NArith.BinPos.positive
+R4576 Coq.Lists.List.nil
+R4565 Coq.Lists.List.list
+R4570 LTL.node
+R4728 Linearizeproof.positive_ind
+R4728 Linearizeproof.positive_ind
+R4755 Coqlib.positive_rec_base
+R4755 Coqlib.positive_rec_base
+R4819 Coqlib.positive_rec_succ
+R4819 Coqlib.positive_rec_succ
+R4860 Maps "a !! b"
+R4849 Linearize.reachable
+R4860 Maps "a !! b"
+R4849 Linearize.reachable
+R4913 Coqlib.Plt_succ
+R4913 Coqlib.Plt_succ
+R4933 Coqlib.Plt_trans_succ
+R4933 Coqlib.Plt_trans_succ
+R4973 Coqlib.Plt_trans_succ
+R4973 Coqlib.Plt_trans_succ
+R5038 Coqlib.Plt_strict
+R5038 Coqlib.Plt_strict
+R6125 Linear.code
+R6160 Coq.Lists.List.nil
+R6167 Coq.Init.Logic.True
+R6187 Coq.Lists.List "x :: y" list_scope
+R6176 Linear.Llabel
+R6216 Coq.Init.Logic "A /\ B" type_scope
+R6195 Coq.Init.Logic "~ x" type_scope
+R6197 Coq.Lists.List.In
+R6201 Linear.Llabel
+R6241 Coq.Lists.List "x :: y" list_scope
+R6125 Linear.code
+R6300 Linear.code
+R6292 Linear.code
+R6433 Coq.Lists.List "x :: y" list_scope
+R6502 Coq.Lists.List.In
+R6478 Linearizeproof.is_tail
+R6489 Coq.Lists.List "x :: y" list_scope
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R6672 Linearizeproof.is_tail
+R6648 Linearizeproof.is_tail
+R6659 Coq.Lists.List "x :: y" list_scope
+R6928 Coq.Init.Logic "x = y" type_scope
+R6910 Coq.Init.Logic "x = y" type_scope
+R6892 Linear.find_label
+R6912 Coq.Init.Datatypes.Some
+R6870 Linearizeproof.unique_labels
+R6835 Linearizeproof.is_tail
+R6855 Coq.Lists.List "x :: y" list_scope
+R6844 Linear.Llabel
+R7032 Linear.is_label_correct
+R7032 Linear.is_label_correct
+R7063 Linear.is_label
+R7063 Linear.is_label
+R7176 Linearizeproof.is_tail_in
+R7176 Linearizeproof.is_tail_in
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R7460 Linear.exec_instrs
+R7529 Linearize.cleanup_code
+R7482 Linearize.cleanup_code
+R7445 Coq.Init.Logic "x = y" type_scope
+R7427 Linear.find_label
+R7447 Coq.Init.Datatypes.Some
+R7415 Coq.Init.Logic "x = y" type_scope
+R7396 Linearize.starts_with
+R7417 Coq.Init.Datatypes.true
+R7374 Linearizeproof.unique_labels
+R7355 Linearizeproof.is_tail
+R7614 Linearize.starts_with
+R7614 Linearize.starts_with
+R7700 Linearize.cleanup_code
+R7683 Linear.exec_trans
+R7700 Linearize.cleanup_code
+R7683 Linear.exec_trans
+R7774 Coqlib.peq
+R7774 Coqlib.peq
+R7838 Linearizeproof.find_label_unique
+R7838 Linearizeproof.find_label_unique
+R7910 Linearizeproof.is_tail_cons_left
+R7910 Linearizeproof.is_tail_cons_left
+R8058 Coq.Init.Logic "x = y" type_scope
+R8026 Linear.find_label
+R8042 Linearize.cleanup_code
+R8060 Coq.Init.Datatypes.Some
+R8066 Linearize.cleanup_code
+R8011 Coq.Init.Logic "x = y" type_scope
+R7994 Linear.find_label
+R8013 Coq.Init.Datatypes.Some
+R8153 Linear.is_label_correct
+R8153 Linear.is_label_correct
+R8187 Linear.find_label
+R8187 Linear.find_label
+R8205 Linear.is_label
+R8205 Linear.is_label
+R8297 Coqlib.peq_true
+R8297 Coqlib.peq_true
+R8359 Coqlib.peq_false
+R8359 Coqlib.peq_false
+R8399 Linearize.starts_with
+R8399 Linearize.starts_with
+R8613 Linear.exec_instrs
+R8726 Linearize.cleanup_code
+R8678 Linearize.cleanup_code
+R8630 Linearize.cleanup_function
+R8582 Linearizeproof.unique_labels
+R8599 Linear.fn_code
+R8554 Linearizeproof.is_tail
+R8568 Linear.fn_code
+R8509 Linear.exec_instr
+R8801 Linear.exec_one
+R8801 Linear.exec_one
+R8801 Linear.exec_one
+R8801 Linear.exec_one
+R8801 Linear.exec_one
+R8801 Linear.exec_one
+R8801 Linear.exec_one
+R8801 Linear.exec_one
+R8801 Linear.exec_one
+R8801 Linear.exec_one
+R8801 Linear.exec_one
+R8862 Linearize.starts_with
+R8862 Linearize.starts_with
+R8901 Linearizeproof.starts_with_correct
+R8901 Linearizeproof.starts_with_correct
+R8938 Linearizeproof.is_tail_cons_left
+R8938 Linearizeproof.is_tail_cons_left
+R9036 Linearizeproof.find_label_cleanup_code
+R9036 Linearizeproof.find_label_cleanup_code
+R9108 Linear.exec_Lcond_true
+R9108 Linear.exec_Lcond_true
+R9174 Linearizeproof.find_label_cleanup_code
+R9174 Linearizeproof.find_label_cleanup_code
+R9250 Linear.exec_Lcond_false
+R9250 Linear.exec_Lcond_false
+R9360 Linearizeproof.is_tail
+R9347 Coq.Init.Logic "x = y" type_scope
+R9329 Linear.find_label
+R9349 Coq.Init.Datatypes.Some
+R9437 Linear.is_label
+R9437 Linear.is_label
+R9688 Linearizeproof.is_tail
+R9702 Linear.fn_code
+R9662 Linearizeproof.is_tail
+R9676 Linear.fn_code
+R9617 Linear.exec_instr
+R9756 Linearizeproof.is_tail_cons_left
+R9756 Linearizeproof.is_tail_cons_left
+R9756 Linearizeproof.is_tail_cons_left
+R9756 Linearizeproof.is_tail_cons_left
+R9756 Linearizeproof.is_tail_cons_left
+R9756 Linearizeproof.is_tail_cons_left
+R9756 Linearizeproof.is_tail_cons_left
+R9756 Linearizeproof.is_tail_cons_left
+R9756 Linearizeproof.is_tail_cons_left
+R9756 Linearizeproof.is_tail_cons_left
+R9756 Linearizeproof.is_tail_cons_left
+R9798 Linearizeproof.is_tail_find_label
+R9798 Linearizeproof.is_tail_find_label
+R9834 Linearizeproof.is_tail_find_label
+R9834 Linearizeproof.is_tail_find_label
+R10003 Linearizeproof.is_tail
+R10017 Linear.fn_code
+R9977 Linearizeproof.is_tail
+R9991 Linear.fn_code
+R9931 Linear.exec_instrs
+R10074 Linearizeproof.is_tail_exec_instr
+R10074 Linearizeproof.is_tail_exec_instr
+R10287 Linear.exec_instrs
+R10400 Linearize.cleanup_code
+R10352 Linearize.cleanup_code
+R10304 Linearize.cleanup_function
+R10256 Linearizeproof.unique_labels
+R10273 Linear.fn_code
+R10228 Linearizeproof.is_tail
+R10242 Linear.fn_code
+R10182 Linear.exec_instrs
+R10470 Linear.exec_refl
+R10470 Linear.exec_refl
+R10490 Linearizeproof.cleanup_code_correct_1
+R10490 Linearizeproof.cleanup_code_correct_1
+R10546 Linearize.cleanup_code
+R10529 Linear.exec_trans
+R10546 Linearize.cleanup_code
+R10529 Linear.exec_trans
+R10619 Linearizeproof.is_tail_exec_instrs
+R10619 Linearizeproof.is_tail_exec_instrs
+R10783 Linear.exec_function
+R10802 Linearize.cleanup_function
+R10752 Linearizeproof.unique_labels
+R10769 Linear.fn_code
+R10713 Linear.exec_function
+R10881 Linearizeproof.cleanup_code_correct_2
+R10924 Linearizeproof.is_tail_refl
+R10881 Linearizeproof.cleanup_code_correct_2
+R10924 Linearizeproof.is_tail_refl
+R11130 Coq.Init.Logic "x = y" type_scope
+R11093 Linear.find_label
+R11109 Linearize.linearize_block
+R11132 Linear.find_label
+R11193 Linearize.starts_with
+R11193 Linearize.starts_with
+R11329 Coq.Init.Logic "'exists' x , p" type_scope
+R11379 Coq.Init.Logic "x = y" type_scope
+R11341 Linear.find_label
+R11356 Linearize.linearize_body
+R11381 Coq.Init.Datatypes.Some
+R11387 Linearize.linearize_block
+R11315 Coq.Init.Logic "x = y" type_scope
+R11311 Maps "a ! b"
+R11299 LTL.fn_code
+R11317 Coq.Init.Datatypes.Some
+R11280 Coq.Lists.List.In
+R11460 Coqlib.peq
+R11460 Coqlib.peq
+R11497 Linearize.linearize_body
+R11497 Linearize.linearize_body
+R11557 Coqlib.peq_true
+R11557 Coqlib.peq_true
+R11583 Coq.Lists.List.In
+R11583 Coq.Lists.List.In
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R11700 Maps "a ! b"
+R11687 LTL.fn_code
+R11700 Maps "a ! b"
+R11687 LTL.fn_code
+R11723 Coqlib.peq_false
+R11723 Coqlib.peq_false
+R11742 Linearizeproof.find_label_lin_block
+R11742 Linearizeproof.find_label_lin_block
+R11894 Coq.Init.Logic "'exists' x , p" type_scope
+R11953 Coq.Init.Logic "x = y" type_scope
+R11906 Linear.find_label
+R11921 Linear.fn_code
+R11930 Linearize.linearize_function
+R11955 Coq.Init.Datatypes.Some
+R11961 Linearize.linearize_block
+R11882 Coq.Init.Logic "x = y" type_scope
+R11876 Maps "a !! b"
+R11865 Linearize.reachable
+R11884 Coq.Init.Datatypes.true
+R11850 Coq.Init.Logic "x = y" type_scope
+R11846 Maps "a ! b"
+R11834 LTL.fn_code
+R11852 Coq.Init.Datatypes.Some
+R12040 Linearizeproof.find_label_lin_rec
+R12040 Linearizeproof.find_label_lin_rec
+R12069 Linearizeproof.enumerate_complete
+R12069 Linearizeproof.enumerate_complete
+R12244 Coq.Lists.List.In
+R12248 Linear.Llabel
+R12203 Coq.Lists.List.In
+R12220 Linearize.linearize_block
+R12207 Linear.Llabel
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R12328 Linearize.starts_with
+R12328 Linearize.starts_with
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R12471 Coq.Lists.List.In
+R12428 Coq.Lists.List.In
+R12445 Linearize.linearize_body
+R12432 Linear.Llabel
+R12556 Maps "a ! b"
+R12543 LTL.fn_code
+R12556 Maps "a ! b"
+R12543 LTL.fn_code
+R12634 Linearizeproof.label_in_lin_block
+R12634 Linearizeproof.label_in_lin_block
+R12755 Linearizeproof.unique_labels
+R12770 Linearize.linearize_block
+R12736 Linearizeproof.unique_labels
+R12835 Linearize.starts_with
+R12835 Linearize.starts_with
+R12943 Linearizeproof.unique_labels
+R12958 Linearize.linearize_body
+R12920 Coqlib.list_norepet
+R13061 Maps "a ! b"
+R13048 LTL.fn_code
+R13061 Maps "a ! b"
+R13048 LTL.fn_code
+R13125 Linearizeproof.label_in_lin_rec
+R13125 Linearizeproof.label_in_lin_rec
+R13159 Linearizeproof.label_in_lin_block
+R13159 Linearizeproof.label_in_lin_block
+R13200 Linearizeproof.unique_labels_lin_block
+R13200 Linearizeproof.unique_labels_lin_block
+R13347 Linearizeproof.unique_labels
+R13362 Linear.fn_code
+R13371 Linearize.linearize_function
+R13454 Linearizeproof.unique_labels_lin_rec
+R13454 Linearizeproof.unique_labels_lin_rec
+R13483 Linearizeproof.enumerate_norepet
+R13483 Linearizeproof.enumerate_norepet
+R13636 LTL.Cont
+R13676 Coq.Init.Logic "A /\ B" type_scope
+R13669 Coq.Init.Logic "x = y" type_scope
+R13664 Maps "a !! b"
+R13653 Linearize.reachable
+R13671 Coq.Init.Datatypes.true
+R13679 Coq.Init.Logic "'exists' x , p" type_scope
+R13707 Coq.Init.Logic "x = y" type_scope
+R13704 Maps "a ! b"
+R13692 LTL.fn_code
+R13709 Coq.Init.Datatypes.Some
+R13720 LTL.Return
+R13730 Coq.Init.Logic.True
+R13603 LTL.outcome
+R13583 LTL.function
+R13798 Linear.code
+R13787 LTL.outcome
+R13771 LTL.function
+R13888 Coq.Lists.List "x :: y" list_scope
+R13880 Linear.Lreturn
+R13872 LTL.Return
+R14017 LTL.Cont
+R13979 Coq.Init.Logic "x = y" type_scope
+R13933 Linear.find_label
+R13970 Linear.fn_code
+R13947 Linearize.linearize_function
+R13981 Coq.Init.Datatypes.Some
+R14179 Linear.exec_instr
+R14285 Linearize.linearize_block
+R14238 Linearize.linearize_block
+R14195 Linearize.linearize_function
+R14148 Mem.mem
+R14135 Linear.locset
+R14122 LTL.block
+R14100 Mem.mem
+R14087 Linear.locset
+R14074 LTL.block
+R14064 Values.val
+R14466 Linear.exec_instrs
+R14575 Linearize.linearize_block
+R14527 Linearize.linearize_block
+R14483 Linearize.linearize_function
+R14435 Mem.mem
+R14422 Linear.locset
+R14409 LTL.block
+R14387 Mem.mem
+R14374 Linear.locset
+R14361 LTL.block
+R14351 Values.val
+R14782 Coq.Init.Logic "'exists' x , p" type_scope
+R14914 Coq.Init.Logic "A /\ B" type_scope
+R14795 Linear.exec_instrs
+R14856 Linearize.linearize_block
+R14812 Linearize.linearize_function
+R14917 Linearizeproof.cont_for_outcome
+R14757 Linearizeproof.valid_outcome
+R14727 Mem.mem
+R14714 Linear.locset
+R14699 LTL.outcome
+R14675 Mem.mem
+R14662 Linear.locset
+R14649 LTL.block
+R14640 Values.val
+R15262 Coq.Init.Logic "'exists' x , p" type_scope
+R15374 Coq.Init.Logic "A /\ B" type_scope
+R15275 Linear.exec_instrs
+R15292 Linearize.linearize_function
+R15377 Linearizeproof.cont_for_outcome
+R15237 Linearizeproof.valid_outcome
+R15223 Coq.Init.Logic "x = y" type_scope
+R15176 Linear.find_label
+R15191 Linear.fn_code
+R15200 Linearize.linearize_function
+R15225 Coq.Init.Datatypes.Some
+R15164 Coq.Init.Logic "x = y" type_scope
+R15158 Maps "a !! b"
+R15147 Linearize.reachable
+R15166 Coq.Init.Datatypes.true
+R15123 Coq.Init.Logic "x = y" type_scope
+R15128 LTL.fn_code
+R15091 Mem.mem
+R15078 Linear.locset
+R15063 LTL.outcome
+R15029 Mem.mem
+R15016 Linear.locset
+R15004 LTL.node
+R14994 Values.val
+R14979 LTL.code
+R15514 Linear.exec_function
+R15533 Linearize.transf_function
+R15498 Mem.mem
+R15485 Linear.locset
+R15474 Mem.mem
+R15461 Linear.locset
+R15441 LTL.function
+R16119 Linearizeproof.valid_outcome
+R16136 LTL.Cont
+R16094 Linearizeproof.valid_outcome
+R16082 Coq.Init.Logic "x = y" type_scope
+R16076 Maps "a !! b"
+R16065 Linearize.reachable
+R16084 Coq.Init.Datatypes.true
+R16041 Coq.Init.Logic "x = y" type_scope
+R16046 LTL.fn_code
+R15981 LTL.exec_blocks
+R16313 Linearizeproof.reachable_correct_2
+R16313 Linearizeproof.reachable_correct_2
+R16477 Linearizeproof.exec_function_prop
+R16435 LTL.exec_function
+R16529 Linearizeproof.exec_function_ind5
+R16672 Linearizeproof.exec_function_prop
+R16644 Linearizeproof.exec_blocks_prop
+R16617 Linearizeproof.exec_block_prop
+R16589 Linearizeproof.exec_instrs_prop
+R16562 Linearizeproof.exec_instr_prop
+R16529 Linearizeproof.exec_function_ind5
+R16672 Linearizeproof.exec_function_prop
+R16644 Linearizeproof.exec_blocks_prop
+R16617 Linearizeproof.exec_block_prop
+R16589 Linearizeproof.exec_instrs_prop
+R16562 Linearizeproof.exec_instr_prop
+R16833 Op.eval_operation_preserved
+R16833 Op.eval_operation_preserved
+R16867 Linearizeproof.symbols_preserved
+R16867 Linearizeproof.symbols_preserved
+R16907 Linear.exec_Lload
+R16907 Linear.exec_Lload
+R16949 Op.eval_addressing_preserved
+R16949 Op.eval_addressing_preserved
+R16984 Linearizeproof.symbols_preserved
+R16984 Linearizeproof.symbols_preserved
+R17033 Linear.exec_Lstore
+R17033 Linear.exec_Lstore
+R17075 Op.eval_addressing_preserved
+R17075 Op.eval_addressing_preserved
+R17110 Linearizeproof.symbols_preserved
+R17110 Linearizeproof.symbols_preserved
+R17175 Linearize.transf_function
+R17158 Linear.exec_Lcall
+R17175 Linearize.transf_function
+R17158 Linear.exec_Lcall
+R17247 Linearizeproof.functions_translated
+R17247 Linearizeproof.functions_translated
+R17285 Linearizeproof.symbols_preserved
+R17285 Linearizeproof.symbols_preserved
+R17314 Globalenvs.find_symbol
+R17314 Globalenvs.find_symbol
+R17353 Linearizeproof.function_ptr_translated
+R17353 Linearizeproof.function_ptr_translated
+R17463 Linear.exec_refl
+R17463 Linear.exec_refl
+R17500 Linear.exec_one
+R17500 Linear.exec_one
+R17566 Linearize.linearize_block
+R17549 Linear.exec_trans
+R17566 Linearize.linearize_block
+R17549 Linear.exec_trans
+R17711 Linearizeproof.find_label_lin
+R17711 Linearizeproof.find_label_lin
+R17771 Linearize.linearize_block
+R17771 Linearize.linearize_block
+R17814 Linear.exec_trans
+R17814 Linear.exec_trans
+R17953 Linearizeproof.find_label_lin
+R17953 Linearizeproof.find_label_lin
+R18016 Linearize.linearize_block
+R18016 Linearize.linearize_block
+R18088 Linearize.starts_with
+R18088 Linearize.starts_with
+R18125 Linear.exec_trans
+R18125 Linear.exec_trans
+R18158 Linear.exec_trans
+R18158 Linear.exec_trans
+R18176 Linear.exec_one
+R18176 Linear.exec_one
+R18192 Linear.exec_Lcond_false
+R18192 Linear.exec_Lcond_false
+R18231 Coq.Bool.Bool.negb
+R18236 Coq.Init.Datatypes.true
+R18219 Coq.Init.Datatypes.false
+R18231 Coq.Bool.Bool.negb
+R18236 Coq.Init.Datatypes.true
+R18219 Coq.Init.Datatypes.false
+R18249 Op.eval_negate_condition
+R18249 Op.eval_negate_condition
+R18286 Linear.exec_one
+R18286 Linear.exec_one
+R18302 Linear.exec_Lgoto
+R18302 Linear.exec_Lgoto
+R18330 Linear.exec_trans
+R18330 Linear.exec_trans
+R18362 Linear.exec_one
+R18362 Linear.exec_one
+R18378 Linear.exec_Lcond_true
+R18378 Linear.exec_Lcond_true
+R18494 Linearizeproof.find_label_lin
+R18494 Linearizeproof.find_label_lin
+R18558 Linearize.linearize_block
+R18558 Linearize.linearize_block
+R18630 Linearize.starts_with
+R18630 Linearize.starts_with
+R18667 Linear.exec_trans
+R18667 Linear.exec_trans
+R18699 Linear.exec_one
+R18699 Linear.exec_one
+R18715 Linear.exec_Lcond_true
+R18715 Linear.exec_Lcond_true
+R18753 Coq.Bool.Bool.negb
+R18758 Coq.Init.Datatypes.false
+R18742 Coq.Init.Datatypes.true
+R18753 Coq.Bool.Bool.negb
+R18758 Coq.Init.Datatypes.false
+R18742 Coq.Init.Datatypes.true
+R18772 Op.eval_negate_condition
+R18772 Op.eval_negate_condition
+R18819 Linear.exec_trans
+R18819 Linear.exec_trans
+R18851 Linear.exec_trans
+R18851 Linear.exec_trans
+R18869 Linear.exec_one
+R18869 Linear.exec_one
+R18885 Linear.exec_Lcond_false
+R18885 Linear.exec_Lcond_false
+R18917 Linear.exec_one
+R18917 Linear.exec_one
+R18933 Linear.exec_Lgoto
+R18933 Linear.exec_Lgoto
+R19006 Coq.Lists.List "x :: y" list_scope
+R18998 Linear.Lreturn
+R19006 Coq.Lists.List "x :: y" list_scope
+R18998 Linear.Lreturn
+R19097 Linear.exec_refl
+R19097 Linear.exec_refl
+R19163 Linearizeproof.find_label_lin
+R19163 Linearizeproof.find_label_lin
+R19220 Coq.Init.Logic "x = y" type_scope
+R19222 Linearize.linearize_block
+R19220 Coq.Init.Logic "x = y" type_scope
+R19222 Linearize.linearize_block
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R19381 Coq.Init.Logic "x = y" type_scope
+R19374 Maps "a !! b"
+R19363 Linearize.reachable
+R19383 Coq.Init.Datatypes.true
+R19381 Coq.Init.Logic "x = y" type_scope
+R19374 Maps "a !! b"
+R19363 Linearize.reachable
+R19383 Coq.Init.Datatypes.true
+R19401 Linearizeproof.reachable_correct_2
+R19401 Linearizeproof.reachable_correct_2
+R19460 Linearizeproof.valid_outcome
+R19477 LTL.Cont
+R19460 Linearizeproof.valid_outcome
+R19477 LTL.Cont
+R19500 Linearizeproof.exec_blocks_valid_outcome
+R19500 Linearizeproof.exec_blocks_valid_outcome
+R19700 Linear.exec_trans
+R19700 Linear.exec_trans
+R19803 Coq.Init.Logic "x = y" type_scope
+R19782 Maps "a !! b"
+R19786 LTL.fn_entrypoint
+R19771 Linearize.reachable
+R19805 Coq.Init.Datatypes.true
+R19803 Coq.Init.Logic "x = y" type_scope
+R19782 Maps "a !! b"
+R19786 LTL.fn_entrypoint
+R19771 Linearize.reachable
+R19805 Coq.Init.Datatypes.true
+R19822 Linearizeproof.reachable_entrypoint
+R19822 Linearizeproof.reachable_entrypoint
+R19859 Linearizeproof.valid_outcome
+R19875 LTL.Return
+R19859 Linearizeproof.valid_outcome
+R19875 LTL.Return
+R19912 Linearizeproof.valid_outcome
+R19929 LTL.Cont
+R19935 LTL.fn_entrypoint
+R19912 Linearizeproof.valid_outcome
+R19929 LTL.Cont
+R19935 LTL.fn_entrypoint
+R19966 Linearizeproof.exec_blocks_valid_outcome
+R19966 Linearizeproof.exec_blocks_valid_outcome
+R20010 Coq.Init.Logic "'exists' x , p" type_scope
+R20051 Coq.Init.Logic "x = y" type_scope
+R20020 Linear.fn_code
+R20029 Linearize.linearize_function
+R20078 Coq.Lists.List "x :: y" list_scope
+R20053 Linear.Llabel
+R20063 LTL.fn_entrypoint
+R20010 Coq.Init.Logic "'exists' x , p" type_scope
+R20051 Coq.Init.Logic "x = y" type_scope
+R20020 Linear.fn_code
+R20029 Linearize.linearize_function
+R20078 Coq.Lists.List "x :: y" list_scope
+R20053 Linear.Llabel
+R20063 LTL.fn_entrypoint
+R20134 Linearizeproof.enumerate_head
+R20134 Linearizeproof.enumerate_head
+R20247 Linearize.linearize_block
+R20266 Linearize.linearize_body
+R20247 Linearize.linearize_block
+R20266 Linearize.linearize_body
+R20391 Coq.Init.Logic "x = y" type_scope
+R20329 Linear.find_label
+R20359 Linear.fn_code
+R20368 Linearize.linearize_function
+R20341 LTL.fn_entrypoint
+R20405 Coq.Init.Datatypes.Some
+R20391 Coq.Init.Logic "x = y" type_scope
+R20329 Linear.find_label
+R20359 Linear.fn_code
+R20368 Linearize.linearize_function
+R20341 LTL.fn_entrypoint
+R20405 Coq.Init.Datatypes.Some
+R20445 Coqlib.peq_true
+R20445 Coqlib.peq_true
+R20483 Coq.Init.Logic.refl_equal
+R20483 Coq.Init.Logic.refl_equal
+R20596 Linearizeproof.cleanup_function_correct
+R20596 Linearizeproof.cleanup_function_correct
+R20664 Linear.exec_trans
+R20664 Linear.exec_trans
+R20684 Linear.exec_one
+R20684 Linear.exec_one
+R20722 Linearizeproof.unique_labels_lin_function
+R20722 Linearizeproof.unique_labels_lin_function
+R20872 Linear.exec_program
+R20893 Linearize.transf_program
+R20846 LTL.exec_program
+R20838 Values.val
+R20821 LTL.program
+R21008 Linearize.transf_function
+R21008 Linearize.transf_function
+R21102 AST.prog_main
+R21066 AST.prog_main
+R21077 Linearize.transf_program
+R21102 AST.prog_main
+R21066 AST.prog_main
+R21077 Linearize.transf_program
+R21126 Linearizeproof.symbols_preserved
+R21126 Linearizeproof.symbols_preserved
+R21166 Linearizeproof.function_ptr_translated
+R21166 Linearizeproof.function_ptr_translated
+R21227 Linearizeproof.transf_function_correct
+R21227 Linearizeproof.transf_function_correct
+R21286 Globalenvs.init_mem_transf
+R21286 Globalenvs.init_mem_transf
+FLinearizetyping
+R368 Linear.function
+R394 Lineartyping.function_bounds
+R513 Coq.ZArith.BinInt "x <= y" Z_scope
+R516 Lineartyping.max_over_list
+R496 Coq.Lists.List.In
+R478 Coq.Lists.List.list
+R471 Coq.ZArith.BinInt.Z
+R695 Coq.Init.Logic "A /\ B" type_scope
+R690 Coq.ZArith.BinInt "x <= y" Z_scope
+R716 Coq.ZArith.BinInt "x <= y" Z_scope
+R699 Coq.Lists.List.In
+R630 Coq.Lists.List.fold_left
+R652 Coq.ZArith.Zmin.Zmax
+R695 Coq.Init.Logic "A /\ B" type_scope
+R690 Coq.ZArith.BinInt "x <= y" Z_scope
+R716 Coq.ZArith.BinInt "x <= y" Z_scope
+R699 Coq.Lists.List.In
+R630 Coq.Lists.List.fold_left
+R652 Coq.ZArith.Zmin.Zmax
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R796 Coq.ZArith.Zmin.Zmax
+R796 Coq.ZArith.Zmin.Zmax
+R857 Coq.ZArith.Zmin.Zmax
+R841 Coq.ZArith.Zorder.Zle_trans
+R857 Coq.ZArith.Zmin.Zmax
+R841 Coq.ZArith.Zorder.Zle_trans
+R881 Coq.ZArith.Zmin.Zmax1
+R881 Coq.ZArith.Zmin.Zmax1
+R961 Coq.ZArith.Zmin.Zmax
+R945 Coq.ZArith.Zorder.Zle_trans
+R961 Coq.ZArith.Zmin.Zmax
+R945 Coq.ZArith.Zorder.Zle_trans
+R990 Coq.ZArith.Zmin.Zmax2
+R990 Coq.ZArith.Zmin.Zmax2
+R1147 Coq.ZArith.BinInt "x <= y" Z_scope
+R1150 Lineartyping.max_over_instrs
+R1120 Coq.Lists.List.In
+R1128 Linear.fn_code
+R1112 Coq.ZArith.BinInt.Z
+R1097 Linear.instruction
+R1221 Linearizetyping.max_over_list_bound
+R1221 Linearizetyping.max_over_list_bound
+R1379 Coq.ZArith.BinInt "x <= y" Z_scope
+R1382 Lineartyping.max_over_regs_of_funct
+R1344 Coq.Lists.List.In
+R1350 Lineartyping.regs_of_instr
+R1324 Coq.Lists.List.In
+R1332 Linear.fn_code
+R1314 Coq.ZArith.BinInt.Z
+R1306 Locations.mreg
+R1486 Lineartyping.max_over_regs_of_instr
+R1470 Coq.ZArith.Zorder.Zle_trans
+R1486 Lineartyping.max_over_regs_of_instr
+R1470 Coq.ZArith.Zorder.Zle_trans
+R1557 Linearizetyping.max_over_list_bound
+R1557 Linearizetyping.max_over_list_bound
+R1592 Linearizetyping.max_over_instrs_bound
+R1592 Linearizetyping.max_over_instrs_bound
+R1754 Coq.ZArith.BinInt "x <= y" Z_scope
+R1757 Lineartyping.max_over_slots_of_funct
+R1718 Coq.Lists.List.In
+R1724 Lineartyping.slots_of_instr
+R1698 Coq.Lists.List.In
+R1706 Linear.fn_code
+R1688 Coq.ZArith.BinInt.Z
+R1680 Locations.slot
+R1863 Lineartyping.max_over_slots_of_instr
+R1847 Coq.ZArith.Zorder.Zle_trans
+R1863 Lineartyping.max_over_slots_of_instr
+R1847 Coq.ZArith.Zorder.Zle_trans
+R1936 Linearizetyping.max_over_list_bound
+R1936 Linearizetyping.max_over_list_bound
+R1971 Linearizetyping.max_over_instrs_bound
+R1971 Linearizetyping.max_over_instrs_bound
+R2123 Coq.ZArith.BinInt "x < y" Z_scope
+R2099 Conventions.index_int_callee_save
+R2125 Lineartyping.bound_int_callee_save
+R2071 Coq.Lists.List.In
+R2077 Lineartyping.regs_of_instr
+R2051 Coq.Lists.List.In
+R2059 Linear.fn_code
+R2192 Lineartyping.int_callee_save
+R2173 Coq.ZArith.Zorder.Zlt_le_trans
+R2192 Lineartyping.int_callee_save
+R2173 Coq.ZArith.Zorder.Zlt_le_trans
+R2307 Linearizetyping.max_over_regs_of_funct_bound
+R2307 Linearizetyping.max_over_regs_of_funct_bound
+R2471 Coq.ZArith.BinInt "x < y" Z_scope
+R2445 Conventions.index_float_callee_save
+R2473 Lineartyping.bound_float_callee_save
+R2417 Coq.Lists.List.In
+R2423 Lineartyping.regs_of_instr
+R2397 Coq.Lists.List.In
+R2405 Linear.fn_code
+R2542 Lineartyping.float_callee_save
+R2523 Coq.ZArith.Zorder.Zlt_le_trans
+R2542 Lineartyping.float_callee_save
+R2523 Coq.ZArith.Zorder.Zlt_le_trans
+R2663 Linearizetyping.max_over_regs_of_funct_bound
+R2663 Linearizetyping.max_over_regs_of_funct_bound
+R2820 Coq.ZArith.BinInt "x < y" Z_scope
+R2822 Lineartyping.bound_int_local
+R2772 Coq.Lists.List.In
+R2793 Lineartyping.slots_of_instr
+R2776 Locations.Local
+R2786 AST.Tint
+R2752 Coq.Lists.List.In
+R2760 Linear.fn_code
+R2883 Lineartyping.int_local
+R2894 Locations.Local
+R2904 AST.Tint
+R2864 Coq.ZArith.Zorder.Zlt_le_trans
+R2883 Lineartyping.int_local
+R2894 Locations.Local
+R2904 AST.Tint
+R2864 Coq.ZArith.Zorder.Zlt_le_trans
+R2994 Linearizetyping.max_over_slots_of_funct_bound
+R2994 Linearizetyping.max_over_slots_of_funct_bound
+R3156 Coq.ZArith.BinInt "x < y" Z_scope
+R3158 Lineartyping.bound_float_local
+R3106 Coq.Lists.List.In
+R3129 Lineartyping.slots_of_instr
+R3110 Locations.Local
+R3120 AST.Tfloat
+R3086 Coq.Lists.List.In
+R3094 Linear.fn_code
+R3221 Lineartyping.float_local
+R3234 Locations.Local
+R3244 AST.Tfloat
+R3202 Coq.ZArith.Zorder.Zlt_le_trans
+R3221 Lineartyping.float_local
+R3234 Locations.Local
+R3244 AST.Tfloat
+R3202 Coq.ZArith.Zorder.Zlt_le_trans
+R3340 Linearizetyping.max_over_slots_of_funct_bound
+R3340 Linearizetyping.max_over_slots_of_funct_bound
+R3515 Coq.ZArith.BinInt "x <= y" Z_scope
+R3501 Coq.ZArith.BinInt "x + y" Z_scope
+R3503 Locations.typesize
+R3518 Lineartyping.bound_outgoing
+R3452 Coq.Lists.List.In
+R3474 Lineartyping.slots_of_instr
+R3456 Locations.Outgoing
+R3432 Coq.Lists.List.In
+R3440 Linear.fn_code
+R3586 Lineartyping.outgoing_slot
+R3601 Locations.Outgoing
+R3565 Coq.ZArith.BinInt "x + y" Z_scope
+R3567 Locations.typesize
+R3586 Lineartyping.outgoing_slot
+R3601 Locations.Outgoing
+R3565 Coq.ZArith.BinInt "x + y" Z_scope
+R3567 Locations.typesize
+R3673 Coqlib.Zmax_bound_r
+R3673 Coqlib.Zmax_bound_r
+R3693 Coqlib.Zmax_bound_r
+R3693 Coqlib.Zmax_bound_r
+R3717 Linearizetyping.max_over_slots_of_funct_bound
+R3717 Linearizetyping.max_over_slots_of_funct_bound
+R3864 Coq.ZArith.BinInt "x <= y" Z_scope
+R3845 Conventions.size_arguments
+R3867 Lineartyping.bound_outgoing
+R3809 Coq.Lists.List.In
+R3831 Linear.fn_code
+R3813 Linear.Lcall
+R3936 Lineartyping.outgoing_space
+R3952 Linear.Lcall
+R3910 Conventions.size_arguments
+R3936 Lineartyping.outgoing_space
+R3952 Linear.Lcall
+R3910 Conventions.size_arguments
+R4022 Coqlib.Zmax_bound_r
+R4022 Coqlib.Zmax_bound_r
+R4042 Coqlib.Zmax_bound_l
+R4042 Coqlib.Zmax_bound_l
+R4064 Linearizetyping.max_over_instrs_bound
+R4064 Linearizetyping.max_over_instrs_bound
+R4201 Lineartyping.mreg_bounded
+R4173 Coq.Lists.List.In
+R4179 Lineartyping.regs_of_instr
+R4153 Coq.Lists.List.In
+R4161 Linear.fn_code
+R4266 Locations.mreg_type
+R4266 Locations.mreg_type
+R4289 Linearizetyping.int_callee_save_bound
+R4289 Linearizetyping.int_callee_save_bound
+R4328 Linearizetyping.float_callee_save_bound
+R4328 Linearizetyping.float_callee_save_bound
+R4506 Lineartyping.slot_bounded
+R4520 Linearize.transf_function
+R4474 LTLtyping.slot_bounded
+R4445 Coq.Lists.List.In
+R4451 Lineartyping.slots_of_instr
+R4407 Coq.Lists.List.In
+R4433 Linear.fn_code
+R4413 Linearize.transf_function
+R4635 Linearizetyping.int_local_slot_bound
+R4635 Linearizetyping.int_local_slot_bound
+R4690 Linearizetyping.float_local_slot_bound
+R4690 Linearizetyping.float_local_slot_bound
+R4793 Linearizetyping.outgoing_slot_bound
+R4793 Linearizetyping.outgoing_slot_bound
+R4998 Coq.Lists.List.In
+R5004 Linearize.cleanup_code
+R4988 Coq.Lists.List.In
+R4938 Linear.Lgoto
+R4949 Coq.Init.Logic.False
+R4962 Coq.Init.Logic.True
+R5077 Coq.Lists.List.In
+R5085 Coq.Lists.List "x :: y" list_scope
+R5088 Linearize.cleanup_code
+R5077 Coq.Lists.List.In
+R5085 Coq.Lists.List "x :: y" list_scope
+R5088 Linearize.cleanup_code
+R5163 Coq.Lists.List.in_cons
+R5163 Coq.Lists.List.in_cons
+R5209 Coq.Lists.List.In
+R5215 Linearize.cleanup_code
+R5209 Coq.Lists.List.In
+R5215 Linearize.cleanup_code
+R5291 Linearize.starts_with
+R5291 Linearize.starts_with
+R5321 Coq.Lists.List.in_cons
+R5321 Coq.Lists.List.in_cons
+R5490 Coq.Lists.List.In
+R5516 Linear.fn_code
+R5496 Linearize.transf_function
+R5452 Linear.Lgoto
+R5463 Coq.Init.Logic.False
+R5476 Coq.Init.Logic.True
+R5396 Coq.Lists.List.In
+R5425 Linear.fn_code
+R5402 Linearize.linearize_function
+R5621 Linearizetyping.cleanup_code_conservation
+R5621 Linearizetyping.cleanup_code_conservation
+R5735 Coq.Lists.List.In
+R5710 Coq.Lists.List.In
+R5716 Linearize.cleanup_code
+R5826 Coq.Init.Logic "A \/ B" type_scope
+R5822 Coq.Init.Logic "x = y" type_scope
+R5829 Coq.Lists.List.In
+R5790 Coq.Lists.List.In
+R5798 Coq.Lists.List "x :: y" list_scope
+R5801 Linearize.cleanup_code
+R5826 Coq.Init.Logic "A \/ B" type_scope
+R5822 Coq.Init.Logic "x = y" type_scope
+R5829 Coq.Lists.List.In
+R5790 Coq.Lists.List.In
+R5798 Coq.Lists.List "x :: y" list_scope
+R5801 Linearize.cleanup_code
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R5892 Linearize.starts_with
+R5892 Linearize.starts_with
+R6024 Coq.Lists.List.In
+R6053 Linear.fn_code
+R6030 Linearize.linearize_function
+R5984 Coq.Lists.List.In
+R6010 Linear.fn_code
+R5990 Linearize.transf_function
+R6094 Linearizetyping.cleanup_code_conservation_2
+R6094 Linearizetyping.cleanup_code_conservation_2
+R6217 Coq.Lists.List.incl_tl
+R6225 Coq.Lists.List.incl_refl
+R6330 Coq.Lists.List.incl
+R6316 Coq.Lists.List.incl
+R6302 Coq.Lists.List.incl
+R6291 Coq.Lists.List.list
+R6291 Coq.Lists.List.list
+R6291 Coq.Lists.List.list
+R6418 Coq.Lists.List.incl
+R6426 Linearize.linearize_block
+R6503 Linearize.starts_with
+R6503 Linearize.starts_with
+R6772 Lineartyping.wt_instr
+R6782 Linearize.transf_function
+R6742 Coq.Lists.List.In
+R6748 Linearize.linearize_block
+R6677 Coq.Lists.List.incl
+R6728 Linear.fn_code
+R6705 Linearize.linearize_function
+R6683 Linearize.linearize_block
+R6659 LTLtyping.wt_block
+R6608 Lineartyping.wt_instr
+R6618 Linearize.transf_function
+R6598 Coq.Lists.List.In
+R6860 Linearizetyping.cleanup_function_conservation
+R6935 Coq.Init.Logic.I
+R6923 Coq.Lists.List.in_eq
+R6860 Linearizetyping.cleanup_function_conservation
+R6935 Coq.Init.Logic.I
+R6923 Coq.Lists.List.in_eq
+R6860 Linearizetyping.cleanup_function_conservation
+R6935 Coq.Init.Logic.I
+R6923 Coq.Lists.List.in_eq
+R6860 Linearizetyping.cleanup_function_conservation
+R6935 Coq.Init.Logic.I
+R6923 Coq.Lists.List.in_eq
+R6860 Linearizetyping.cleanup_function_conservation
+R6935 Coq.Init.Logic.I
+R6923 Coq.Lists.List.in_eq
+R6860 Linearizetyping.cleanup_function_conservation
+R6935 Coq.Init.Logic.I
+R6923 Coq.Lists.List.in_eq
+R6860 Linearizetyping.cleanup_function_conservation
+R6935 Coq.Init.Logic.I
+R6923 Coq.Lists.List.in_eq
+R6860 Linearizetyping.cleanup_function_conservation
+R6935 Coq.Init.Logic.I
+R6923 Coq.Lists.List.in_eq
+R6860 Linearizetyping.cleanup_function_conservation
+R6935 Coq.Init.Logic.I
+R6923 Coq.Lists.List.in_eq
+R6860 Linearizetyping.cleanup_function_conservation
+R6935 Coq.Init.Logic.I
+R6923 Coq.Lists.List.in_eq
+R7064 Linearizetyping.slot_is_bounded
+R7064 Linearizetyping.slot_is_bounded
+R7125 Linearizetyping.mreg_is_bounded
+R7125 Linearizetyping.mreg_is_bounded
+R7231 Linearizetyping.slot_is_bounded
+R7231 Linearizetyping.slot_is_bounded
+R7346 Linearizetyping.mreg_is_bounded
+R7346 Linearizetyping.mreg_is_bounded
+R7455 Linearizetyping.mreg_is_bounded
+R7455 Linearizetyping.mreg_is_bounded
+R7556 Linearizetyping.mreg_is_bounded
+R7556 Linearizetyping.mreg_is_bounded
+R7651 Linearizetyping.mreg_is_bounded
+R7651 Linearizetyping.mreg_is_bounded
+R7782 Linearizetyping.size_arguments_bound
+R7782 Linearizetyping.size_arguments_bound
+R7865 Linearize.starts_with
+R7865 Linearize.starts_with
+R8359 Lineartyping.wt_instr
+R8369 Linearize.transf_function
+R8327 Coq.Lists.List.In
+R8333 Linearize.linearize_body
+R8260 Coq.Lists.List.incl
+R8313 Linear.fn_code
+R8290 Linearize.linearize_function
+R8266 Linearize.linearize_body
+R8214 LTLtyping.wt_function
+R8489 Maps "a ! b"
+R8476 LTL.fn_code
+R8489 Maps "a ! b"
+R8476 LTL.fn_code
+R8589 Linearize.linearize_body
+R8564 Linearizetyping.wt_linearize_block
+R8589 Linearize.linearize_body
+R8564 Linearizetyping.wt_linearize_block
+R8665 Linearize.linearize_block
+R8684 Linearize.linearize_body
+R8648 Linearizetyping.incl_trans
+R8665 Linearize.linearize_block
+R8684 Linearize.linearize_body
+R8648 Linearizetyping.incl_trans
+R8717 Linearizetyping.linearize_block_incl
+R8717 Linearizetyping.linearize_block_incl
+R8945 Lineartyping.wt_function
+R8958 Linearize.transf_function
+R8916 LTLtyping.wt_function
+R9041 Linearize.enumerate
+R9017 Linearizetyping.wt_linearize_body
+R9041 Linearize.enumerate
+R9017 Linearizetyping.wt_linearize_body
+R9076 Coq.Lists.List.incl_refl
+R9076 Coq.Lists.List.incl_refl
+R9095 Linearizetyping.cleanup_function_conservation_2
+R9095 Linearizetyping.cleanup_function_conservation_2
+R9229 Lineartyping.wt_program
+R9254 Linearize.transf_program
+R9201 LTLtyping.wt_program
+R9185 LTL.program
+R9317 AST.transform_program_function
+R9344 Linearize.transf_function
+R9317 AST.transform_program_function
+R9344 Linearize.transf_function
+R9411 Linearizetyping.wt_transf_function
+R9411 Linearizetyping.wt_transf_function
+FMach
+R303 Coq.NArith.BinPos.positive
+R373 Locations.mreg
+R366 AST.typ
+R359 Integers.int
+R423 AST.typ
+R416 Integers.int
+R408 Locations.mreg
+R471 Locations.mreg
+R464 AST.typ
+R457 Integers.int
+R526 Locations.mreg
+R513 Coq.Lists.List.list
+R518 Locations.mreg
+R500 Op.operation
+R600 Locations.mreg
+R587 Coq.Lists.List.list
+R592 Locations.mreg
+R573 Op.addressing
+R557 AST.memory_chunk
+R675 Locations.mreg
+R662 Coq.Lists.List.list
+R667 Locations.mreg
+R648 Op.addressing
+R632 AST.memory_chunk
+R724 Coq.Init.Datatypes "x + y" type_scope
+R719 Locations.mreg
+R726 AST.ident
+R706 AST.signature
+R759 Mach.label
+R791 Mach.label
+R849 Mach.label
+R836 Coq.Lists.List.list
+R841 Locations.mreg
+R823 Op.condition
+R916 Coq.Lists.List.list
+R921 Mach.instruction
+R982 AST.signature
+R1006 Mach.code
+R1030 Coq.ZArith.BinInt.Z
+R1051 Coq.ZArith.BinInt.Z
+R1079 AST.program
+R1091 Mach.function
+R1121 Globalenvs.t
+R1128 Mach.function
+R1200 Locations.mreg
+R1225 Locations.mreg_eq
+R1330 Mem.block_contents
+R1373 Mem.empty_block
+R1440 AST.Tint
+R1448 Mem.Size32
+R1457 AST.Tfloat
+R1467 Mem.Size64
+R1416 AST.typ
+R1521 Values.val
+R1516 Coq.ZArith.BinInt.Z
+R1509 AST.typ
+R1500 Mach.frame
+R1655 Coq.Init.Logic "x = y" type_scope
+R1657 Mem.load_contents
+R1709 Coq.ZArith.BinInt "x + y" Z_scope
+R1704 Mem.low
+R1689 Mem.contents
+R1672 Mach.mem_type
+R1639 Coq.ZArith.BinInt "x <= y" Z_scope
+R1621 Coq.ZArith.BinInt "x + y" Z_scope
+R1615 Coq.ZArith.BinInt "x + y" Z_scope
+R1610 Mem.low
+R1625 Coq.ZArith.BinInt "x * y" Z_scope
+R1627 Locations.typesize
+R1590 Coq.ZArith.BinInt "x <= y" Z_scope
+R1807 Coq.Init.Logic "x = y" type_scope
+R1784 Mem.size_mem
+R1794 Mach.mem_type
+R1811 Coq.ZArith.BinInt "x * y" Z_scope
+R1813 Locations.typesize
+R2187 Coq.Init.Logic "x = y" type_scope
+R2123 Mem.store_contents
+R2176 Coq.ZArith.BinInt "x + y" Z_scope
+R2171 Mem.low
+R2156 Mem.contents
+R2139 Mach.mem_type
+R2189 Mem.Undef
+R2097 Coq.Init.Logic "A \/ B" type_scope
+R2086 Coq.ZArith.BinInt "x < y" Z_scope
+R2092 Mem.low
+R2102 Coq.ZArith.BinInt "x >= y" Z_scope
+R2109 Mem.high
+R2059 Coq.Init.Logic "x = y" type_scope
+R2047 Mem.contents
+R2061 Mem.Undef
+R2022 Coq.Init.Logic "A \/ B" type_scope
+R2011 Coq.ZArith.BinInt "x < y" Z_scope
+R2017 Mem.low
+R2027 Coq.ZArith.BinInt "x >= y" Z_scope
+R2034 Mem.high
+R1988 Coq.ZArith.BinInt "x <= y" Z_scope
+R1970 Coq.ZArith.BinInt "x + y" Z_scope
+R1964 Coq.ZArith.BinInt "x + y" Z_scope
+R1959 Mem.low
+R1974 Coq.ZArith.BinInt "x * y" Z_scope
+R1976 Locations.typesize
+R1943 Coq.ZArith.BinInt "x <= y" Z_scope
+R1932 Coq.Init.Logic "x = y" type_scope
+R1926 Mem.high
+R2258 Mem.low
+R2267 Mem.high
+R2220 Mem.store_contents_undef_outside
+R2258 Mem.low
+R2267 Mem.high
+R2220 Mem.store_contents_undef_outside
+R2287 Mach.size_mem_type
+R2287 Mach.size_mem_type
+R2395 Mach.frame
+R2388 Values.val
+R2383 Coq.ZArith.BinInt.Z
+R2376 AST.typ
+R2367 Mach.frame
+R2588 Mem.mkblock
+R2700 Mach.set_slot_undef_outside
+R2745 Mem.undef_outside
+R2626 Mem.store_contents
+R2679 Coq.ZArith.BinInt "x + y" Z_scope
+R2674 Mem.low
+R2659 Mem.contents
+R2642 Mach.mem_type
+R2609 Mem.high
+R2600 Mem.low
+R2545 Coq.ZArith.BinInt "x <= y" Z_scope
+R2527 Coq.ZArith.BinInt "x + y" Z_scope
+R2521 Coq.ZArith.BinInt "x + y" Z_scope
+R2516 Mem.low
+R2531 Coq.ZArith.BinInt "x * y" Z_scope
+R2533 Locations.typesize
+R2494 Coq.ZArith.BinInt "x <= y" Z_scope
+R2477 Coq.Init.Logic "x = y" type_scope
+R2471 Mem.high
+R2805 Mem.empty_block
+R2818 Coq.ZArith.BinInt "- x" Z_scope
+R2823 Mach.fn_framesize
+R2790 Mach.function
+R2863 Mach.t
+R2872 Values.val
+R2900 Coq.Lists.List.map
+R2954 Mach.set
+R3060 Coq.Init.Datatypes.bool
+R3091 Mach.Mlabel
+R3109 Coqlib.peq
+R3137 Coq.Init.Datatypes.false
+R3127 Coq.Init.Datatypes.true
+R3152 Coq.Init.Datatypes.false
+R3045 Mach.instruction
+R3030 Mach.label
+R3215 Mach.is_label
+R3269 Coq.Init.Logic "x <> y" type_scope
+R3272 Mach.Mlabel
+R3245 Coq.Init.Logic "x = y" type_scope
+R3247 Mach.Mlabel
+R3351 Coqlib.peq
+R3351 Coqlib.peq
+R3444 Coq.Init.Datatypes.option
+R3451 Mach.code
+R3425 Mach.code
+R3414 Mach.label
+R3478 Coq.Lists.List.nil
+R3485 Coq.Init.Datatypes.None
+R3497 Coq.Lists.List "x :: y" list_scope
+R3509 Mach.is_label
+R3530 Coq.Init.Datatypes.Some
+R3425 Mach.code
+R3414 Mach.label
+R3599 Mach.genv
+R3666 Coq.Init.Datatypes.option
+R3673 Mach.function
+R3706 Coq.Init.Datatypes.inl
+R3715 Globalenvs.find_funct
+R3745 Coq.Init.Datatypes.inr
+R3769 Globalenvs.find_symbol
+R3807 Coq.Init.Datatypes.None
+R3815 Coq.Init.Datatypes.None
+R3828 Coq.Init.Datatypes.Some
+R3838 Globalenvs.find_funct_ptr
+R3656 Mach.regset
+R3642 Coq.Init.Datatypes "x + y" type_scope
+R3637 Locations.mreg
+R3644 AST.ident
+R4010 Mem.mem
+R4001 Mach.frame
+R3991 Mach.regset
+R3983 Mach.code
+R3970 Mem.mem
+R3961 Mach.frame
+R3951 Mach.regset
+R3943 Mach.code
+R3928 Mach.frame
+R3921 Values.val
+R3909 Mach.function
+R6798 Mem.mem
+R6789 Mach.frame
+R6779 Mach.regset
+R6771 Mach.code
+R6758 Mem.mem
+R6749 Mach.frame
+R6739 Mach.regset
+R6731 Mach.code
+R6716 Mach.frame
+R6709 Values.val
+R6697 Mach.function
+R7464 Mem.mem
+R7454 Mach.regset
+R7447 Mem.mem
+R7437 Mach.regset
+R7424 Values.val
+R7417 Values.val
+R7408 Mach.frame
+R7396 Mach.function
+R8001 Mem.mem
+R7991 Mach.regset
+R7984 Mem.mem
+R7974 Mach.regset
+R7965 Mach.frame
+R7953 Mach.function
+R4140 Coq.Lists.List "x :: y" list_scope
+R4129 Mach.Mlabel
+R4397 Mach "a # b <- c"
+R4361 Coq.Lists.List "x :: y" list_scope
+R4340 Mach.Mgetstack
+R4256 Mach.get_slot
+R4272 Integers.signed
+R4605 Coq.Lists.List "x :: y" list_scope
+R4584 Mach.Msetstack
+R4489 Mach.set_slot
+R4505 Integers.signed
+R4867 Mach "a # b <- c"
+R4831 Coq.Lists.List "x :: y" list_scope
+R4810 Mach.Mgetparam
+R4722 Mach.get_slot
+R4742 Integers.signed
+R5097 Mach "a # b <- c"
+R5061 Coq.Lists.List "x :: y" list_scope
+R5045 Mach.Mop
+R4986 Coq.Init.Logic "x = y" type_scope
+R4953 Op.eval_operation
+R4979 Mach "a ## b"
+R4988 Coq.Init.Datatypes.Some
+R5390 Mach "a # b <- c"
+R5354 Coq.Lists.List "x :: y" list_scope
+R5328 Mach.Mload
+R5269 Coq.Init.Logic "x = y" type_scope
+R5249 Mem.loadv
+R5271 Coq.Init.Datatypes.Some
+R5231 Coq.Init.Logic "x = y" type_scope
+R5195 Op.eval_addressing
+R5224 Mach "a ## b"
+R5233 Coq.Init.Datatypes.Some
+R5661 Coq.Lists.List "x :: y" list_scope
+R5634 Mach.Mstore
+R5574 Coq.Init.Logic "x = y" type_scope
+R5544 Mem.storev
+R5576 Coq.Init.Datatypes.Some
+R5526 Coq.Init.Logic "x = y" type_scope
+R5490 Op.eval_addressing
+R5519 Mach "a ## b"
+R5528 Coq.Init.Datatypes.Some
+R5915 Coq.Lists.List "x :: y" list_scope
+R5901 Mach.Mcall
+R5800 Coq.Init.Logic "x = y" type_scope
+R5779 Mach.find_function
+R5802 Coq.Init.Datatypes.Some
+R6120 Coq.Lists.List "x :: y" list_scope
+R6110 Mach.Mgoto
+R6050 Coq.Init.Logic "x = y" type_scope
+R6023 Mach.find_label
+R6041 Mach.fn_code
+R6052 Coq.Init.Datatypes.Some
+R6399 Coq.Lists.List "x :: y" list_scope
+R6379 Mach.Mcond
+R6319 Coq.Init.Logic "x = y" type_scope
+R6292 Mach.find_label
+R6310 Mach.fn_code
+R6321 Coq.Init.Datatypes.Some
+R6271 Coq.Init.Logic "x = y" type_scope
+R6242 Op.eval_condition
+R6264 Mach "a ## b"
+R6273 Coq.Init.Datatypes.Some
+R6278 Coq.Init.Datatypes.true
+R6631 Coq.Lists.List "x :: y" list_scope
+R6611 Mach.Mcond
+R6548 Coq.Init.Logic "x = y" type_scope
+R6519 Op.eval_condition
+R6541 Mach "a ## b"
+R6550 Coq.Init.Datatypes.Some
+R6555 Coq.Init.Datatypes.false
+R7909 Mem.free
+R7837 Coq.Lists.List "x :: y" list_scope
+R7829 Mach.Mreturn
+R7791 Mach.fn_code
+R7722 Values.Vptr
+R7732 Integers.repr
+R7742 Coq.ZArith.BinInt "- x" Z_scope
+R7746 Mach.fn_framesize
+R7671 Mach.set_slot
+R7684 AST.Tint
+R7622 Mach.set_slot
+R7646 AST.Tint
+R7632 Mach.init_frame
+R7601 Coq.Init.Logic "x = y" type_scope
+R7570 Mem.alloc
+R7587 Mach.fn_stacksize
+R7603 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R8135 Values.has_type
+R8151 AST.Tint
+R8100 Values.has_type
+R8118 AST.Tint
+R15099 Coq.Init.Logic "A /\ B" type_scope
+R15009 Mach.exec_instr
+R14996 Mem.mem
+R14983 Mach.frame
+R14959 Mach.regset
+R14947 Mach.code
+R14936 Mem.mem
+R14924 Mach.frame
+R14909 Mach.regset
+R14889 Mach.code
+R14877 Mach.frame
+R14865 Values.val
+R14849 Mach.function
+R15375 Coq.Init.Logic "A /\ B" type_scope
+R15283 Mach.exec_instrs
+R15270 Mem.mem
+R15257 Mach.frame
+R15233 Mach.regset
+R15221 Mach.code
+R15210 Mem.mem
+R15198 Mach.frame
+R15183 Mach.regset
+R15163 Mach.code
+R15151 Mach.frame
+R15139 Values.val
+R15123 Mach.function
+R15574 Coq.Init.Logic "A /\ B" type_scope
+R15502 Mach.exec_function_body
+R15489 Mem.mem
+R15475 Mach.regset
+R15455 Mem.mem
+R15442 Mach.regset
+R15432 Values.val
+R15432 Values.val
+R15416 Mach.frame
+R15399 Mach.function
+R15687 Mach.exec_function
+R15674 Mem.mem
+R15660 Mach.regset
+R15640 Mem.mem
+R15627 Mach.regset
+R15615 Mach.frame
+R15598 Mach.function
+R14731 Values.has_type
+R14747 AST.Tint
+R14696 Values.has_type
+R14714 AST.Tint
+R14682 Values.val
+R14682 Values.val
+R14604 Mach.exec_function_body
+R14571 Values.has_type
+R14587 AST.Tint
+R14536 Values.has_type
+R14554 AST.Tint
+R14522 Values.val
+R14522 Values.val
+R14490 Mem.mem
+R14476 Mach.regset
+R14454 Mem.mem
+R14441 Mach.regset
+R14428 Mach.frame
+R14408 Mach.function
+R14371 Mem.free
+R14313 Coq.Lists.List "x :: y" list_scope
+R14305 Mach.Mreturn
+R14283 Mach.fn_code
+R14234 Values.Vptr
+R14244 Integers.repr
+R14254 Coq.ZArith.BinInt "- x" Z_scope
+R14258 Mach.fn_framesize
+R14096 Mach.exec_instrs
+R14190 Coq.Lists.List "x :: y" list_scope
+R14182 Mach.Mreturn
+R14160 Mach.fn_code
+R14111 Values.Vptr
+R14121 Integers.repr
+R14131 Coq.ZArith.BinInt "- x" Z_scope
+R14135 Mach.fn_framesize
+R14058 Mach.set_slot
+R14071 AST.Tint
+R14007 Mach.set_slot
+R14031 AST.Tint
+R14017 Mach.init_frame
+R13984 Coq.Init.Logic "x = y" type_scope
+R13957 Mem.alloc
+R13968 Mach.fn_stacksize
+R13986 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R13930 Coq.Lists.List.list
+R13935 Mach.instruction
+R13918 Mach.frame
+R13918 Mach.frame
+R13918 Mach.frame
+R13886 Values.block
+R13874 Mem.mem
+R13874 Mem.mem
+R13857 Mach.regset
+R13845 Mem.mem
+R13822 Mach.regset
+R13811 Values.val
+R13811 Values.val
+R13793 Mach.frame
+R13773 Mach.function
+R13589 Mach.exec_instrs
+R13472 Mach.exec_instrs
+R13458 Mem.mem
+R13435 Mach.frame
+R13420 Mach.regset
+R13407 Mach.code
+R13396 Mem.mem
+R13383 Mach.frame
+R13358 Mach.regset
+R13345 Mach.code
+R13334 Mem.mem
+R13321 Mach.frame
+R13306 Mach.regset
+R13283 Mach.code
+R13270 Mach.frame
+R13255 Values.val
+R13239 Mach.function
+R13069 Mach.exec_instr
+R13055 Mem.mem
+R13042 Mach.frame
+R13017 Mach.regset
+R13004 Mach.code
+R12993 Mem.mem
+R12981 Mach.frame
+R12967 Mach.regset
+R12945 Mach.code
+R12933 Mach.frame
+R12918 Values.val
+R12902 Mach.function
+R12829 Mem.mem
+R12817 Mach.frame
+R12803 Mach.regset
+R12781 Mach.code
+R12769 Mach.frame
+R12754 Values.val
+R12738 Mach.function
+R12690 Coq.Lists.List "x :: y" list_scope
+R12670 Mach.Mcond
+R12631 Coq.Init.Logic "x = y" type_scope
+R12600 Op.eval_condition
+R12623 Mach "a ## b"
+R12633 Coq.Init.Datatypes.Some
+R12638 Coq.Init.Datatypes.false
+R12586 Mem.mem
+R12574 Mach.frame
+R12563 Values.val
+R12555 Locations.mreg
+R12531 Coq.Lists.List.list
+R12536 Mach.instruction
+R12509 Mach.label
+R12491 Coq.Lists.List.list
+R12496 Locations.mreg
+R12472 Op.condition
+R12447 Mach.frame
+R12432 Values.val
+R12416 Mach.function
+R12367 Coq.Lists.List "x :: y" list_scope
+R12347 Mach.Mcond
+R12311 Coq.Init.Logic "x = y" type_scope
+R12284 Mach.find_label
+R12300 Mach.fn_code
+R12313 Coq.Init.Datatypes.Some
+R12261 Coq.Init.Logic "x = y" type_scope
+R12230 Op.eval_condition
+R12253 Mach "a ## b"
+R12263 Coq.Init.Datatypes.Some
+R12268 Coq.Init.Datatypes.true
+R12215 Mach.code
+R12194 Mem.mem
+R12182 Mach.frame
+R12171 Values.val
+R12163 Locations.mreg
+R12139 Coq.Lists.List.list
+R12144 Mach.instruction
+R12117 Mach.label
+R12099 Coq.Lists.List.list
+R12104 Locations.mreg
+R12080 Op.condition
+R12055 Mach.frame
+R12040 Values.val
+R12024 Mach.function
+R11975 Coq.Lists.List "x :: y" list_scope
+R11965 Mach.Mgoto
+R11929 Coq.Init.Logic "x = y" type_scope
+R11902 Mach.find_label
+R11918 Mach.fn_code
+R11931 Coq.Init.Datatypes.Some
+R11887 Mach.code
+R11866 Mem.mem
+R11854 Mach.frame
+R11840 Mach.regset
+R11816 Coq.Lists.List.list
+R11821 Mach.instruction
+R11794 Mach.label
+R11780 Mach.frame
+R11765 Values.val
+R11749 Mach.function
+R11699 Coq.Lists.List "x :: y" list_scope
+R11685 Mach.Mcall
+R11595 Mach.exec_function
+R11574 Coq.Init.Logic "x = y" type_scope
+R11553 Mach.find_function
+R11576 Coq.Init.Datatypes.Some
+R11539 Mem.mem
+R11525 Mach.regset
+R11508 Mach.function
+R11497 Mem.mem
+R11485 Mach.frame
+R11461 Mach.regset
+R11437 Coq.Lists.List.list
+R11442 Mach.instruction
+R11423 Coq.Init.Datatypes "x + y" type_scope
+R11418 Locations.mreg
+R11425 AST.ident
+R11390 AST.signature
+R11376 Mach.frame
+R11361 Values.val
+R11345 Mach.function
+R11296 Coq.Lists.List "x :: y" list_scope
+R11269 Mach.Mstore
+R11233 Coq.Init.Logic "x = y" type_scope
+R11207 Mem.storev
+R11235 Coq.Init.Datatypes.Some
+R11187 Coq.Init.Logic "x = y" type_scope
+R11149 Op.eval_addressing
+R11179 Mach "a ## b"
+R11189 Coq.Init.Datatypes.Some
+R11135 Values.val
+R11125 Mem.mem
+R11125 Mem.mem
+R11100 Mach.frame
+R11089 Values.val
+R11081 Locations.mreg
+R11057 Coq.Lists.List.list
+R11062 Mach.instruction
+R11046 Locations.mreg
+R11018 Coq.Lists.List.list
+R11023 Locations.mreg
+R10998 Op.addressing
+R10976 AST.memory_chunk
+R10950 Mach.frame
+R10935 Values.val
+R10919 Mach.function
+R10879 Mach "a # b <- c"
+R10850 Coq.Lists.List "x :: y" list_scope
+R10824 Mach.Mload
+R10789 Coq.Init.Logic "x = y" type_scope
+R10773 Mem.loadv
+R10791 Coq.Init.Datatypes.Some
+R10753 Coq.Init.Logic "x = y" type_scope
+R10715 Op.eval_addressing
+R10745 Mach "a ## b"
+R10755 Coq.Init.Datatypes.Some
+R10701 Values.val
+R10701 Values.val
+R10689 Mem.mem
+R10667 Mach.frame
+R10656 Values.val
+R10648 Locations.mreg
+R10624 Coq.Lists.List.list
+R10629 Mach.instruction
+R10613 Locations.mreg
+R10585 Coq.Lists.List.list
+R10590 Locations.mreg
+R10565 Op.addressing
+R10543 AST.memory_chunk
+R10517 Mach.frame
+R10502 Values.val
+R10486 Mach.function
+R10446 Mach "a # b <- c"
+R10427 Coq.Lists.List "x :: y" list_scope
+R10411 Mach.Mop
+R10376 Coq.Init.Logic "x = y" type_scope
+R10341 Op.eval_operation
+R10368 Mach "a ## b"
+R10378 Coq.Init.Datatypes.Some
+R10327 Values.val
+R10317 Mem.mem
+R10305 Mach.frame
+R10294 Values.val
+R10286 Locations.mreg
+R10252 Coq.Lists.List.list
+R10257 Mach.instruction
+R10241 Locations.mreg
+R10223 Coq.Lists.List.list
+R10228 Locations.mreg
+R10194 Op.operation
+R10181 Mach.frame
+R10166 Values.val
+R10150 Mach.function
+R10100 Mach "a # b <- c"
+R10081 Coq.Lists.List "x :: y" list_scope
+R10060 Mach.Mgetparam
+R9996 Mach.get_slot
+R10016 Integers.signed
+R9982 Values.val
+R9972 Mem.mem
+R9960 Mach.frame
+R9936 Mach.regset
+R9912 Coq.Lists.List.list
+R9917 Mach.instruction
+R9901 Locations.mreg
+R9889 AST.typ
+R9868 Integers.int
+R9854 Mach.frame
+R9839 Values.val
+R9823 Mach.function
+R9774 Coq.Lists.List "x :: y" list_scope
+R9753 Mach.Msetstack
+R9682 Mach.set_slot
+R9698 Integers.signed
+R9666 Mach.frame
+R9654 Mem.mem
+R9642 Mach.frame
+R9621 Values.val
+R9613 Locations.mreg
+R9589 Coq.Lists.List.list
+R9594 Mach.instruction
+R9579 AST.typ
+R9568 Integers.int
+R9545 Locations.mreg
+R9531 Mach.frame
+R9516 Values.val
+R9500 Mach.function
+R9450 Mach "a # b <- c"
+R9431 Coq.Lists.List "x :: y" list_scope
+R9410 Mach.Mgetstack
+R9350 Mach.get_slot
+R9366 Integers.signed
+R9336 Values.val
+R9326 Mem.mem
+R9314 Mach.frame
+R9290 Mach.regset
+R9266 Coq.Lists.List.list
+R9271 Mach.instruction
+R9255 Locations.mreg
+R9243 AST.typ
+R9222 Integers.int
+R9208 Mach.frame
+R9193 Values.val
+R9177 Mach.function
+R9129 Coq.Lists.List "x :: y" list_scope
+R9118 Mach.Mlabel
+R9089 Mem.mem
+R9077 Mach.frame
+R9063 Mach.regset
+R9039 Coq.Lists.List.list
+R9044 Mach.instruction
+R9017 Mach.label
+R9003 Mach.frame
+R8988 Values.val
+R8972 Mach.function
+R8938 Mem.mem
+R8928 Mach.regset
+R8921 Mem.mem
+R8911 Mach.regset
+R8902 Mach.frame
+R8890 Mach.function
+R8862 Mem.mem
+R8852 Mach.regset
+R8845 Mem.mem
+R8835 Mach.regset
+R8828 Values.val
+R8821 Values.val
+R8812 Mach.frame
+R8785 Mach.function
+R8757 Mem.mem
+R8748 Mach.frame
+R8738 Mach.regset
+R8730 Mach.code
+R8723 Mem.mem
+R8714 Mach.frame
+R8689 Mach.regset
+R8666 Mach.code
+R8642 Mach.frame
+R8620 Values.val
+R8593 Mach.function
+R8757 Mem.mem
+R8748 Mach.frame
+R8738 Mach.regset
+R8730 Mach.code
+R8723 Mem.mem
+R8714 Mach.frame
+R8689 Mach.regset
+R8666 Mach.code
+R8642 Mach.frame
+R8620 Values.val
+R8593 Mach.function
+R15776 Mach.exec_instr_ind4
+R15776 Mach.exec_instr_ind4
+R15833 Mach.exec_instrs_ind4
+R15833 Mach.exec_instrs_ind4
+R15891 Mach.exec_function_body_ind4
+R15891 Mach.exec_function_body_ind4
+R15949 Mach.exec_function_ind4
+R15949 Mach.exec_function_ind4
+R16133 Coq.Init.Logic "'exists' x , p" type_scope
+R16143 Coq.Init.Logic "'exists' x , p" type_scope
+R16153 Coq.Init.Logic "'exists' x , p" type_scope
+R16164 Coq.Init.Logic "'exists' x , p" type_scope
+R16219 Coq.Init.Logic "A /\ B" type_scope
+R16210 Coq.Init.Logic "x = y" type_scope
+R16176 Globalenvs.find_symbol
+R16199 AST.prog_main
+R16212 Coq.Init.Datatypes.Some
+R16258 Coq.Init.Logic "A /\ B" type_scope
+R16249 Coq.Init.Logic "x = y" type_scope
+R16224 Globalenvs.find_funct_ptr
+R16251 Coq.Init.Datatypes.Some
+R16304 Coq.Init.Logic "A /\ B" type_scope
+R16274 Coq.Init.Logic "x = y" type_scope
+R16266 Mach.fn_sig
+R16276 AST.mksignature
+R16293 Coq.Init.Datatypes.Some
+R16298 AST.Tint
+R16288 Coq.Lists.List.nil
+R16369 Coq.Init.Logic "A /\ B" type_scope
+R16309 Mach.exec_function
+R16341 Mach.init
+R16353 Values.Vundef
+R16328 Mach.empty_frame
+R16413 Coq.Init.Logic "x = y" type_scope
+R16378 Conventions.loc_result
+R16404 Mach.fn_sig
+R16112 Globalenvs.init_mem
+R16080 Globalenvs.globalenv
+R16053 Values.val
+R16040 Mach.program
+R16459 Mach.instruction
+R16529 Mach.Mlabel
+R16621 Mach.Mgetstack
+R16598 Coq.Init.Logic "x = y" type_scope
+R16586 Locations.mreg_type
+R16745 Mach.Msetstack
+R16709 Coq.ZArith.BinInt "x <= y" Z_scope
+R16712 Integers.signed
+R16698 Coq.Init.Logic "x = y" type_scope
+R16686 Locations.mreg_type
+R16845 Mach.Mgetparam
+R16822 Coq.Init.Logic "x = y" type_scope
+R16810 Locations.mreg_type
+R16949 Mach.Mop
+R16963 Coq.Lists.List "x :: y" list_scope
+R16966 Coq.Lists.List.nil
+R16953 Op.Omove
+R16917 Coq.Init.Logic "x = y" type_scope
+R16904 Locations.mreg_type
+R16919 Locations.mreg_type
+R17021 Mach.Mop
+R17032 Coq.Lists.List.nil
+R17025 Op.Oundef
+R17202 Mach.Mop
+R17160 Coq.Init.Logic "x = y" type_scope
+R17119 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R17120 Coq.Lists.List.map
+R17129 Locations.mreg_type
+R17145 Locations.mreg_type
+R17162 Op.type_of_operation
+R17100 Coq.Init.Logic "x <> y" type_scope
+R17103 Op.Oundef
+R17085 Coq.Init.Logic "x <> y" type_scope
+R17088 Op.Omove
+R17387 Mach.Mload
+R17346 Coq.Init.Logic "x = y" type_scope
+R17332 Locations.mreg_type
+R17348 Op.type_of_chunk
+R17297 Coq.Init.Logic "x = y" type_scope
+R17273 Coq.Lists.List.map
+R17282 Locations.mreg_type
+R17299 Op.type_of_addressing
+R17583 Mach.Mstore
+R17542 Coq.Init.Logic "x = y" type_scope
+R17528 Locations.mreg_type
+R17544 Op.type_of_chunk
+R17493 Coq.Init.Logic "x = y" type_scope
+R17469 Coq.Lists.List.map
+R17478 Locations.mreg_type
+R17495 Op.type_of_addressing
+R17735 Mach.Mcall
+R17668 Coq.Init.Datatypes.inl
+R17689 Coq.Init.Logic "x = y" type_scope
+R17677 Locations.mreg_type
+R17691 AST.Tint
+R17698 Coq.Init.Datatypes.inr
+R17707 Coq.Init.Logic.True
+R17798 Mach.Mgoto
+R17925 Mach.Mcond
+R17881 Coq.Init.Logic "x = y" type_scope
+R17857 Coq.Lists.List.map
+R17866 Locations.mreg_type
+R17883 Op.type_of_condition
+R17978 Mach.Mreturn
+R18011 Mach.function
+R18112 Mach.wt_instr
+R18088 Coq.Lists.List.In
+R18100 Mach.fn_code
+R18174 Coq.ZArith.BinInt "x >= y" Z_scope
+R18160 Mach.fn_stacksize
+R18226 Coq.ZArith.BinInt "x >= y" Z_scope
+R18212 Mach.fn_framesize
+R18281 Coq.ZArith.BinInt "x <= y" Z_scope
+R18267 Mach.fn_framesize
+R18284 Coq.ZArith.BinInt "- x" Z_scope
+R18285 Integers.min_signed
+R18391 Mach.wt_function
+R18363 Coq.Lists.List.In
+R18374 AST.prog_funct
+R18366 Coq.Init.Datatypes "( x , y , .. , z )" core_scope
+R18330 Mach.program
+R18485 Values.has_type
+R18506 Locations.mreg_type
+R18455 Mach.regset
+R18585 Mem.Datum32
+R18598 Values.has_type
+R18613 AST.Tint
+R18622 Mem.Datum64
+R18635 Values.has_type
+R18650 AST.Tfloat
+R18666 Coq.Init.Logic.True
+R18547 Mem.content
+R18735 Mach.wt_content
+R18751 Mem.contents
+R18704 Mach.frame
+R18879 Mach.wt_regset
+R18892 Mach "a # b <- c"
+R18863 Mach.wt_regset
+R18829 Values.has_type
+R18845 Locations.mreg_type
+R18821 Values.val
+R18811 Locations.mreg
+R18799 Mach.regset
+R18960 Mach.eq
+R18960 Mach.eq
+R19111 Values.has_type
+R19094 Mach.wt_frame
+R19068 Mach.get_slot
+R19191 Coq.ZArith.BinInt "x + y" Z_scope
+R19184 Mem.low
+R19191 Coq.ZArith.BinInt "x + y" Z_scope
+R19184 Mem.low
+R19238 Mem.check_cont
+R19262 Mem.contents
+R19256 Coq.ZArith.BinInt "x + y" Z_scope
+R19238 Mem.check_cont
+R19262 Mem.contents
+R19256 Coq.ZArith.BinInt "x + y" Z_scope
+R19331 Mem.contents
+R19331 Mem.contents
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R19399 Mem.check_cont
+R19423 Mem.contents
+R19417 Coq.ZArith.BinInt "x + y" Z_scope
+R19399 Mem.check_cont
+R19423 Mem.contents
+R19417 Coq.ZArith.BinInt "x + y" Z_scope
+R19492 Mem.contents
+R19492 Mem.contents
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R19662 Mach.wt_frame
+R19639 Values.has_type
+R19622 Mach.wt_frame
+R19592 Mach.set_slot
+R19726 Coq.ZArith.BinInt "x + y" Z_scope
+R19719 Mem.low
+R19726 Coq.ZArith.BinInt "x + y" Z_scope
+R19719 Mem.low
+R19859 Coq.Init.Logic "A \/ B" type_scope
+R19853 Coq.Init.Logic "x = y" type_scope
+R19867 Coq.Init.Logic "x = y" type_scope
+R19869 Mem.Cont
+R19806 Mem.set_cont
+R19859 Coq.Init.Logic "A \/ B" type_scope
+R19853 Coq.Init.Logic "x = y" type_scope
+R19867 Coq.Init.Logic "x = y" type_scope
+R19869 Mem.Cont
+R19806 Mem.set_cont
+R19949 Coqlib.zeq
+R19949 Coqlib.zeq
+R20082 Coqlib.zeq
+R20082 Coqlib.zeq
+R20082 Coqlib.zeq
+R20143 Mem.contents
+R20137 Coq.ZArith.BinInt "x + y" Z_scope
+R20143 Mem.contents
+R20137 Coq.ZArith.BinInt "x + y" Z_scope
+R20247 Mem.contents
+R20241 Coq.ZArith.BinInt "x + y" Z_scope
+R20247 Mem.contents
+R20241 Coq.ZArith.BinInt "x + y" Z_scope
+R20348 Mach.wt_frame
+R20358 Mach.init_frame
+R20438 Coq.Init.Logic.I
+R20438 Coq.Init.Logic.I
+R20519 Coq.Lists.List.incl
+R20506 Coq.Init.Logic "x = y" type_scope
+R20489 Mach.find_label
+R20508 Coq.Init.Datatypes.Some
+R20591 Mach.is_label
+R20591 Mach.is_label
+R20654 Coq.Lists.List.incl_tl
+R20669 Coq.Lists.List.incl_refl
+R20654 Coq.Lists.List.incl_tl
+R20669 Coq.Lists.List.incl_refl
+R20688 Coq.Lists.List.incl_tl
+R20688 Coq.Lists.List.incl_tl
+R20749 Mach.program
+R20775 Mach.wt_program
+R20799 Globalenvs.globalenv
+R21187 Coq.Init.Logic "A /\ B" type_scope
+R21167 Coq.Lists.List.incl
+R21178 Mach.fn_code
+R21204 Coq.Init.Logic "A /\ B" type_scope
+R21190 Mach.wt_regset
+R21207 Mach.wt_frame
+R21145 Mach.wt_frame
+R21113 Mach.wt_frame
+R21080 Mach.wt_regset
+R21041 Coq.Lists.List.incl
+R21052 Mach.fn_code
+R21008 Mach.wt_function
+R20983 Mem.mem
+R20971 Mach.frame
+R20957 Mach.regset
+R20945 Mach.code
+R20933 Mem.mem
+R20921 Mach.frame
+R20907 Mach.regset
+R20895 Mach.code
+R20881 Mach.frame
+R20867 Values.val
+R20852 Mach.function
+R21545 Mach.wt_regset
+R21518 Values.has_type
+R21534 AST.Tint
+R21476 Values.has_type
+R21494 AST.Tint
+R21439 Mach.wt_frame
+R21406 Mach.wt_regset
+R21373 Mach.wt_function
+R21348 Mem.mem
+R21335 Mach.regset
+R21324 Mem.mem
+R21311 Mach.regset
+R21298 Values.val
+R21298 Values.val
+R21281 Mach.frame
+R21262 Mach.function
+R21780 Mach.wt_regset
+R21758 Mach.wt_frame
+R21725 Mach.wt_regset
+R21692 Mach.wt_function
+R21667 Mem.mem
+R21654 Mach.regset
+R21643 Mem.mem
+R21630 Mach.regset
+R21615 Mach.frame
+R21596 Mach.function
+R21997 Coq.Init.Logic "A /\ B" type_scope
+R21942 Mach.exec_instr_prop
+R21879 Mach.exec_instr
+R22176 Coq.Init.Logic "A /\ B" type_scope
+R22121 Mach.exec_instr_prop
+R22057 Mach.exec_instrs
+R22343 Coq.Init.Logic "A /\ B" type_scope
+R22289 Mach.exec_function_body_prop
+R22227 Mach.exec_function_body
+R22435 Mach.exec_function_prop
+R22386 Mach.exec_function
+R22494 Mach.exec_mutual_induction
+R22550 Mach.wt_function_instrs
+R22586 Coq.Lists.List.in_eq
+R22494 Mach.exec_mutual_induction
+R22550 Mach.wt_function_instrs
+R22586 Coq.Lists.List.in_eq
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R22550 Mach.wt_function_instrs
+R22586 Coq.Lists.List.in_eq
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R22550 Mach.wt_function_instrs
+R22586 Coq.Lists.List.in_eq
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R22550 Mach.wt_function_instrs
+R22586 Coq.Lists.List.in_eq
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R22550 Mach.wt_function_instrs
+R22586 Coq.Lists.List.in_eq
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R22550 Mach.wt_function_instrs
+R22586 Coq.Lists.List.in_eq
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R22550 Mach.wt_function_instrs
+R22586 Coq.Lists.List.in_eq
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R22550 Mach.wt_function_instrs
+R22586 Coq.Lists.List.in_eq
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R22550 Mach.wt_function_instrs
+R22586 Coq.Lists.List.in_eq
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R22550 Mach.wt_function_instrs
+R22586 Coq.Lists.List.in_eq
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R22550 Mach.wt_function_instrs
+R22586 Coq.Lists.List.in_eq
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R22550 Mach.wt_function_instrs
+R22586 Coq.Lists.List.in_eq
+R22550 Mach.wt_function_instrs
+R22586 Coq.Lists.List.in_eq
+R22550 Mach.wt_function_instrs
+R22586 Coq.Lists.List.in_eq
+R22550 Mach.wt_function_instrs
+R22550 Mach.wt_function_instrs
+R22653 Mach.wt_setreg
+R22653 Mach.wt_setreg
+R22726 Integers.signed
+R22705 Mach.wt_get_slot
+R22726 Integers.signed
+R22705 Mach.wt_get_slot
+R22773 Mach.wt_set_slot
+R22773 Mach.wt_set_slot
+R22846 Mach.wt_setreg
+R22846 Mach.wt_setreg
+R22908 Integers.signed
+R22883 Mach.wt_get_slot
+R22908 Integers.signed
+R22883 Mach.wt_get_slot
+R22940 Mach.wt_setreg
+R22940 Mach.wt_setreg
+R23142 Values.Vundef
+R23142 Values.Vundef
+R23188 Locations.mreg_type
+R23209 Coq.Init.Datatypes.snd
+R23214 Op.type_of_operation
+R23188 Locations.mreg_type
+R23209 Coq.Init.Datatypes.snd
+R23214 Op.type_of_operation
+R23277 Mach.function
+R23291 Mach "a ## b"
+R23248 Op.type_of_operation_sound
+R23277 Mach.function
+R23291 Mach "a ## b"
+R23248 Op.type_of_operation_sound
+R23349 Mach.wt_setreg
+R23349 Mach.wt_setreg
+R23401 Op.type_of_chunk_correct
+R23401 Op.type_of_chunk_correct
+R23488 Globalenvs.find_funct_prop
+R23509 Mach.wt_function
+R23488 Globalenvs.find_funct_prop
+R23509 Mach.wt_function
+R23542 Globalenvs.find_symbol
+R23542 Globalenvs.find_symbol
+R23576 Globalenvs.find_funct_ptr_prop
+R23601 Mach.wt_function
+R23576 Globalenvs.find_funct_ptr_prop
+R23601 Mach.wt_function
+R23647 Mach.incl_find_label
+R23647 Mach.incl_find_label
+R23688 Mach.incl_find_label
+R23688 Mach.incl_find_label
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R23846 Mach.wt_frame
+R23846 Mach.wt_frame
+R23872 Mach.wt_set_slot
+R23872 Mach.wt_set_slot
+R23904 Mach.wt_set_slot
+R23904 Mach.wt_set_slot
+R23934 Mach.wt_init_frame
+R23934 Mach.wt_init_frame
+R23971 Coq.Lists.List.incl_refl
+R23971 Coq.Lists.List.incl_refl
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R-1 Coq.Init.Logic.iff
+R-1 Coq.Init.Logic.not
+R24030 Values.Vzero
+R24024 Values.Vzero
+R24030 Values.Vzero
+R24024 Values.Vzero
+R24044 Coq.Init.Logic.I
+R24044 Coq.Init.Logic.I
+R24053 Coq.Init.Logic.I
+R24053 Coq.Init.Logic.I
+R24083 Coq.Init.Logic.I
+R24083 Coq.Init.Logic.I
+R24092 Coq.Init.Logic.I
+R24092 Coq.Init.Logic.I
+R24252 Mach.exec_instr_prop
+R24189 Mach.exec_instr
+R24316 Coq.Init.Logic.proj1
+R24322 Mach.subject_reduction
+R24496 Mach.exec_instr_prop
+R24432 Mach.exec_instrs
+R24560 Coq.Init.Logic.proj1
+R24567 Coq.Init.Logic.proj2
+R24573 Mach.subject_reduction
+R24717 Mach.exec_function_prop
+R24668 Mach.exec_function
+R24767 Coq.Init.Logic.proj2
+R24774 Coq.Init.Logic.proj2
+R24781 Coq.Init.Logic.proj2
+R24787 Mach.subject_reduction
+R25023 Mach.get_slot
+R25036 AST.Tint
+R24996 Mach.get_slot
+R25009 AST.Tint
+R24979 Coq.ZArith.BinInt "x <= y < z" Z_scope
+R24942 Mach.frame
+R24942 Mach.frame
+R25090 Mach.link_invariant
+R25250 Mach.link_invariant
+R25238 Coq.ZArith.BinInt "x <= y" Z_scope
+R25205 Mach.set_slot
+R25370 Mem.contents
+R25370 Mem.contents
+R25386 Mem.low
+R25386 Mem.low
+R25422 Mem.load_store_contents_other
+R25422 Mem.load_store_contents_other
+R25695 Coq.Init.Logic "A /\ B" type_scope
+R25675 Coq.Lists.List.incl
+R25686 Mach.fn_code
+R25698 Mach.link_invariant
+R25650 Coq.Lists.List.incl
+R25661 Mach.fn_code
+R25631 Mach.wt_function
+R25572 Mach.exec_instr
+R25795 Mach.link_invariant_refl
+R25795 Mach.link_invariant_refl
+R25795 Mach.link_invariant_refl
+R25795 Mach.link_invariant_refl
+R25795 Mach.link_invariant_refl
+R25795 Mach.link_invariant_refl
+R25795 Mach.link_invariant_refl
+R25795 Mach.link_invariant_refl
+R25795 Mach.link_invariant_refl
+R25795 Mach.link_invariant_refl
+R25795 Mach.link_invariant_refl
+R25795 Mach.link_invariant_refl
+R25828 Mach.set_slot_link_invariant
+R25828 Mach.set_slot_link_invariant
+R25874 Mach.wt_function_instrs
+R25907 Coq.Lists.List.in_eq
+R25874 Mach.wt_function_instrs
+R25907 Coq.Lists.List.in_eq
+R25959 Mach.incl_find_label
+R25959 Mach.incl_find_label
+R25992 Mach.incl_find_label
+R25992 Mach.incl_find_label
+R26235 Coq.Init.Logic "A /\ B" type_scope
+R26215 Coq.Lists.List.incl
+R26226 Mach.fn_code
+R26238 Mach.link_invariant
+R26190 Coq.Lists.List.incl
+R26201 Mach.fn_code
+R26171 Mach.wt_function
+R26111 Mach.exec_instrs
+R26313 Mach.link_invariant_refl
+R26313 Mach.link_invariant_refl
+R26343 Mach.exec_instr_link_invariant
+R26343 Mach.exec_instr_link_invariant
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..6900b3d
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,75 @@
+COQC=coqc $(INCLUDES)
+COQDEP=coqdep $(INCLUDES)
+COQDOC=coqdoc
+
+INCLUDES=-I lib -I backend
+
+# Files in lib/
+
+LIB=Coqlib.v Maps.v Sets.v union_find.v Inclusion.v Lattice.v Ordered.v \
+ Integers.v Floats.v
+
+# Files in backend/
+
+BACKEND=AST.v Values.v Mem.v Globalenvs.v \
+ Op.v Cminor.v \
+ Cmconstr.v Cmconstrproof.v \
+ Csharpminor.v Cminorgen.v Cminorgenproof.v \
+ Registers.v RTL.v \
+ RTLgen.v RTLgenproof1.v RTLgenproof.v \
+ RTLtyping.v \
+ Kildall.v \
+ Constprop.v Constpropproof.v \
+ CSE.v CSEproof.v \
+ Locations.v Conventions.v LTL.v LTLtyping.v \
+ InterfGraph.v Coloring.v Coloringproof.v \
+ Parallelmove.v Allocation.v \
+ Allocproof_aux.v Allocproof.v \
+ Alloctyping_aux.v Alloctyping.v \
+ Tunneling.v Tunnelingproof.v Tunnelingtyping.v \
+ Linear.v Lineartyping.v \
+ Linearize.v Linearizeproof.v Linearizetyping.v \
+ Mach.v Machabstr.v Machtyping.v \
+ Stacking.v Stackingproof.v Stackingtyping.v \
+ Machabstr2mach.v \
+ PPC.v PPCgen.v PPCgenproof1.v PPCgenproof.v \
+ Main.v
+
+# All source files
+
+FILES=$(LIB:%=lib/%) $(BACKEND:%=backend/%)
+
+FLATFILES=$(LIB) $(BACKEND)
+
+proof: $(FILES:.v=.vo)
+
+all:
+ $(MAKE) proof
+ $(MAKE) -C extraction extraction
+ $(MAKE) -C extraction depend
+ $(MAKE) -C extraction
+
+documentation:
+ $(COQDOC) --html -d doc $(FLATFILES:%.v=--glob-from doc/%.glob) $(FILES)
+ doc/removeproofs doc/lib.*.html doc/backend.*.html
+
+latexdoc:
+ $(COQDOC) --latex -o doc/doc.tex -g $(FILES)
+
+.SUFFIXES: .v .vo
+
+.v.vo:
+ @rm -f doc/glob/$(*F).glob
+ $(COQC) -dump-glob doc/$(*F).glob $*.v
+
+depend:
+ $(COQDEP) $(FILES) > .depend
+
+clean:
+ rm -f */*.vo *~ */*~
+ rm -f doc/lib.*.html doc/backend.*.html doc/*.glob
+ $(MAKE) -C extraction clean
+ $(MAKE) -C test/cminor clean
+
+include .depend
+
diff --git a/backend/AST.v b/backend/AST.v
new file mode 100644
index 0000000..aae9e86
--- /dev/null
+++ b/backend/AST.v
@@ -0,0 +1,216 @@
+(** This file defines a number of data types and operations used in
+ the abstract syntax trees of many of the intermediate languages. *)
+
+Require Import Coqlib.
+
+Set Implicit Arguments.
+
+(** Identifiers (names of local variables, of global symbols and functions,
+ etc) are represented by the type [positive] of positive integers. *)
+
+Definition ident := positive.
+
+Definition ident_eq := peq.
+
+(** The languages are weakly typed, using only two types: [Tint] for
+ integers and pointers, and [Tfloat] for floating-point numbers. *)
+
+Inductive typ : Set :=
+ | Tint : typ
+ | Tfloat : typ.
+
+Definition typesize (ty: typ) : Z :=
+ match ty with Tint => 4 | Tfloat => 8 end.
+
+(** Additionally, function definitions and function calls are annotated
+ by function signatures indicating the number and types of arguments,
+ as well as the type of the returned value if any. These signatures
+ are used in particular to determine appropriate calling conventions
+ for the function. *)
+
+Record signature : Set := mksignature {
+ sig_args: list typ;
+ sig_res: option typ
+}.
+
+(** Memory accesses (load and store instructions) are annotated by
+ a ``memory chunk'' indicating the type, size and signedness of the
+ chunk of memory being accessed. *)
+
+Inductive memory_chunk : Set :=
+ | Mint8signed : memory_chunk (**r 8-bit signed integer *)
+ | Mint8unsigned : memory_chunk (**r 8-bit unsigned integer *)
+ | Mint16signed : memory_chunk (**r 16-bit signed integer *)
+ | Mint16unsigned : memory_chunk (**r 16-bit unsigned integer *)
+ | Mint32 : memory_chunk (**r 32-bit integer, or pointer *)
+ | Mfloat32 : memory_chunk (**r 32-bit single-precision float *)
+ | Mfloat64 : memory_chunk. (**r 64-bit double-precision float *)
+
+(** Comparison instructions can perform one of the six following comparisons
+ between their two operands. *)
+
+Inductive comparison : Set :=
+ | Ceq : comparison (**r same *)
+ | Cne : comparison (**r different *)
+ | Clt : comparison (**r less than *)
+ | Cle : comparison (**r less than or equal *)
+ | Cgt : comparison (**r greater than *)
+ | Cge : comparison. (**r greater than or equal *)
+
+Definition negate_comparison (c: comparison): comparison :=
+ match c with
+ | Ceq => Cne
+ | Cne => Ceq
+ | Clt => Cge
+ | Cle => Cgt
+ | Cgt => Cle
+ | Cge => Clt
+ end.
+
+Definition swap_comparison (c: comparison): comparison :=
+ match c with
+ | Ceq => Ceq
+ | Cne => Cne
+ | Clt => Cgt
+ | Cle => Cge
+ | Cgt => Clt
+ | Cge => Cle
+ end.
+
+(** Whole programs consist of:
+- a collection of function definitions (name and description);
+- the name of the ``main'' function that serves as entry point in the program;
+- a collection of global variable declarations (name and size in bytes).
+
+The type of function descriptions varies among the various intermediate
+languages and is taken as parameter to the [program] type. The other parts
+of whole programs are common to all languages. *)
+
+Record program (funct: Set) : Set := mkprogram {
+ prog_funct: list (ident * funct);
+ prog_main: ident;
+ prog_vars: list (ident * Z)
+}.
+
+(** We now define a general iterator over programs that applies a given
+ code transformation function to all function descriptions and leaves
+ the other parts of the program unchanged. *)
+
+Section TRANSF_PROGRAM.
+
+Variable A B: Set.
+Variable transf: A -> B.
+
+Fixpoint transf_program (l: list (ident * A)) : list (ident * B) :=
+ match l with
+ | nil => nil
+ | (id, fn) :: rem => (id, transf fn) :: transf_program rem
+ end.
+
+Definition transform_program (p: program A) : program B :=
+ mkprogram
+ (transf_program p.(prog_funct))
+ p.(prog_main)
+ p.(prog_vars).
+
+Remark transf_program_functions:
+ forall fl i tf,
+ In (i, tf) (transf_program fl) ->
+ exists f, In (i, f) fl /\ transf f = tf.
+Proof.
+ induction fl; simpl.
+ tauto.
+ destruct a. simpl. intros.
+ elim H; intro. exists a. split. left. congruence. congruence.
+ generalize (IHfl _ _ H0). intros [f [IN TR]].
+ exists f. split. right. auto. auto.
+Qed.
+
+Lemma transform_program_function:
+ forall p i tf,
+ In (i, tf) (transform_program p).(prog_funct) ->
+ exists f, In (i, f) p.(prog_funct) /\ transf f = tf.
+Proof.
+ simpl. intros. eapply transf_program_functions; eauto.
+Qed.
+
+End TRANSF_PROGRAM.
+
+(** The following is a variant of [transform_program] where the
+ code transformation function can fail and therefore returns an
+ option type. *)
+
+Section TRANSF_PARTIAL_PROGRAM.
+
+Variable A B: Set.
+Variable transf_partial: A -> option B.
+
+Fixpoint transf_partial_program
+ (l: list (ident * A)) : option (list (ident * B)) :=
+ match l with
+ | nil => Some nil
+ | (id, fn) :: rem =>
+ match transf_partial fn with
+ | None => None
+ | Some fn' =>
+ match transf_partial_program rem with
+ | None => None
+ | Some res => Some ((id, fn') :: res)
+ end
+ end
+ end.
+
+Definition transform_partial_program (p: program A) : option (program B) :=
+ match transf_partial_program p.(prog_funct) with
+ | None => None
+ | Some fl => Some (mkprogram fl p.(prog_main) p.(prog_vars))
+ end.
+
+Remark transf_partial_program_functions:
+ forall fl tfl i tf,
+ transf_partial_program fl = Some tfl ->
+ In (i, tf) tfl ->
+ exists f, In (i, f) fl /\ transf_partial f = Some tf.
+Proof.
+ induction fl; simpl.
+ intros; injection H; intro; subst tfl; contradiction.
+ case a; intros id fn. intros until tf.
+ caseEq (transf_partial fn).
+ intros tfn TFN.
+ caseEq (transf_partial_program fl).
+ intros tfl1 TFL1 EQ. injection EQ; intro; clear EQ; subst tfl.
+ simpl. intros [EQ1|IN1].
+ exists fn. intuition congruence.
+ generalize (IHfl _ _ _ TFL1 IN1).
+ intros [f [X Y]].
+ exists f. intuition congruence.
+ intros; discriminate.
+ intros; discriminate.
+Qed.
+
+Lemma transform_partial_program_function:
+ forall p tp i tf,
+ transform_partial_program p = Some tp ->
+ In (i, tf) tp.(prog_funct) ->
+ exists f, In (i, f) p.(prog_funct) /\ transf_partial f = Some tf.
+Proof.
+ intros until tf.
+ unfold transform_partial_program.
+ caseEq (transf_partial_program (prog_funct p)).
+ intros. apply transf_partial_program_functions with l; auto.
+ injection H0; intros; subst tp. exact H1.
+ intros; discriminate.
+Qed.
+
+Lemma transform_partial_program_main:
+ forall p tp,
+ transform_partial_program p = Some tp ->
+ tp.(prog_main) = p.(prog_main).
+Proof.
+ intros p tp. unfold transform_partial_program.
+ destruct (transf_partial_program (prog_funct p)).
+ intro EQ; injection EQ; intro EQ1; rewrite <- EQ1; reflexivity.
+ intro; discriminate.
+Qed.
+
+End TRANSF_PARTIAL_PROGRAM.
diff --git a/backend/Allocation.v b/backend/Allocation.v
new file mode 100644
index 0000000..30f9dcc
--- /dev/null
+++ b/backend/Allocation.v
@@ -0,0 +1,418 @@
+(** Register allocation, spilling, reloading and explicitation of
+ calling conventions. *)
+
+Require Import Coqlib.
+Require Import Maps.
+Require Import AST.
+Require Import Integers.
+Require Import Values.
+Require Import Globalenvs.
+Require Import Op.
+Require Import Registers.
+Require Import RTL.
+Require Import RTLtyping.
+Require Import Kildall.
+Require Import Locations.
+Require Import Conventions.
+Require Import Coloring.
+Require Import Parallelmove.
+
+(** * Liveness analysis over RTL *)
+
+(** A register [r] is live at a point [p] if there exists a path
+ from [p] to some instruction that uses [r] as argument,
+ and [r] is not redefined along this path.
+ Liveness can be computed by a backward dataflow analysis.
+ The analysis operates over sets of (live) pseudo-registers. *)
+
+Notation reg_live := Regset.add.
+Notation reg_dead := Regset.remove.
+
+Definition reg_option_live (or: option reg) (lv: Regset.t) :=
+ match or with None => lv | Some r => reg_live r lv end.
+
+Definition reg_sum_live (ros: reg + ident) (lv: Regset.t) :=
+ match ros with inl r => reg_live r lv | inr s => lv end.
+
+Fixpoint reg_list_live
+ (rl: list reg) (lv: Regset.t) {struct rl} : Regset.t :=
+ match rl with
+ | nil => lv
+ | r1 :: rs => reg_list_live rs (reg_live r1 lv)
+ end.
+
+Fixpoint reg_list_dead
+ (rl: list reg) (lv: Regset.t) {struct rl} : Regset.t :=
+ match rl with
+ | nil => lv
+ | r1 :: rs => reg_list_dead rs (reg_dead r1 lv)
+ end.
+
+(** Here is the transfer function for the dataflow analysis.
+ Since this is a backward dataflow analysis, it takes as argument
+ the abstract register set ``after'' the given instruction,
+ i.e. the registers that are live after; and it returns as result
+ the abstract register set ``before'' the given instruction,
+ i.e. the registers that must be live before.
+ The general relation between ``live before'' and ``live after''
+ an instruction is that a register is live before if either
+ it is one of the arguments of the instruction, or it is not the result
+ of the instruction and it is live after.
+ However, if the result of a side-effect-free instruction is not
+ live ``after'', the whole instruction will be removed later
+ (since it computes a useless result), thus its arguments need not
+ be live ``before''. *)
+
+Definition transfer
+ (f: RTL.function) (pc: node) (after: Regset.t) : Regset.t :=
+ match f.(fn_code)!pc with
+ | None =>
+ after
+ | Some i =>
+ match i with
+ | Inop s =>
+ after
+ | Iop op args res s =>
+ if Regset.mem res after then
+ reg_list_live args (reg_dead res after)
+ else
+ after
+ | Iload chunk addr args dst s =>
+ if Regset.mem dst after then
+ reg_list_live args (reg_dead dst after)
+ else
+ after
+ | Istore chunk addr args src s =>
+ reg_list_live args (reg_live src after)
+ | Icall sig ros args res s =>
+ reg_list_live args
+ (reg_sum_live ros (reg_dead res after))
+ | Icond cond args ifso ifnot =>
+ reg_list_live args after
+ | Ireturn optarg =>
+ reg_option_live optarg after
+ end
+ end.
+
+(** The liveness analysis is then obtained by instantiating the
+ general framework for backward dataflow analysis provided by
+ module [Kildall]. *)
+
+Module DS := Backward_Dataflow_Solver(Regset).
+
+Definition analyze (f: RTL.function): option (PMap.t Regset.t) :=
+ DS.fixpoint (successors f) f.(fn_nextpc) (transfer f) nil.
+
+(** * Spilling and reloading *)
+
+(** LTL operations, like those of the target processor, operate only
+ over machine registers, but not over stack slots. Consider
+ the RTL instruction
+<<
+ r1 <- Iop(Oadd, r1 :: r2 :: nil)
+>>
+ and assume that [r1] and [r2] are assigned to stack locations [S s1]
+ and [S s2], respectively. The translated LTL code must load these
+ stack locations into temporary integer registers (this is called
+ ``reloading''), perform the [Oadd] operation over these temporaries,
+ leave the result in a temporary, then store the temporary back to
+ stack location [S s1] (this is called ``spilling''). In other term,
+ the generated LTL code has the following shape:
+<<
+ IT1 <- Bgetstack s1;
+ IT2 <- Bgetstack s2;
+ IT1 <- Bop(Oadd, IT1 :: IT2 :: nil);
+ Bsetstack s1 IT1;
+>>
+ This section provides functions that assist in choosing appropriate
+ temporaries and inserting the required spilling and reloading
+ operations. *)
+
+(** ** Allocation of temporary registers for reloading and spilling. *)
+
+(** [reg_for l] returns a machine register appropriate for working
+ over the location [l]: either the machine register [m] if [l = R m],
+ or a temporary register of [l]'s type if [l] is a stack slot. *)
+
+Definition reg_for (l: loc) : mreg :=
+ match l with
+ | R r => r
+ | S s => match slot_type s with Tint => IT1 | Tfloat => FT1 end
+ end.
+
+(** [regs_for ll] is similar, for a list of locations [ll] of length
+ at most 3. We ensure that distinct temporaries are used for
+ different elements of [ll]. *)
+
+Fixpoint regs_for_rec (locs: list loc) (itmps ftmps: list mreg)
+ {struct locs} : list mreg :=
+ match locs, itmps, ftmps with
+ | l1 :: ls, it1 :: its, ft1 :: fts =>
+ match l1 with
+ | R r => r
+ | S s => match slot_type s with Tint => it1 | Tfloat => ft1 end
+ end
+ :: regs_for_rec ls its fts
+ | _, _, _ => nil
+ end.
+
+Definition regs_for (locs: list loc) :=
+ regs_for_rec locs (IT1 :: IT2 :: IT3 :: nil) (FT1 :: FT2 :: FT3 :: nil).
+
+(** ** Insertion of LTL reloads, stores and moves *)
+
+Require Import LTL.
+
+(** [add_spill src dst k] prepends to [k] the instructions needed
+ to assign location [dst] the value of machine register [mreg]. *)
+
+Definition add_spill (src: mreg) (dst: loc) (k: block) :=
+ match dst with
+ | R rd => if mreg_eq src rd then k else Bop Omove (src :: nil) rd k
+ | S sl => Bsetstack src sl k
+ end.
+
+(** [add_reload src dst k] prepends to [k] the instructions needed
+ to assign machine register [mreg] the value of the location [src]. *)
+
+Definition add_reload (src: loc) (dst: mreg) (k: block) :=
+ match src with
+ | R rs => if mreg_eq rs dst then k else Bop Omove (rs :: nil) dst k
+ | S sl => Bgetstack sl dst k
+ end.
+
+(** [add_reloads] is similar for a list of locations (as sources)
+ and a list of machine registers (as destinations). *)
+
+Fixpoint add_reloads (srcs: list loc) (dsts: list mreg) (k: block)
+ {struct srcs} : block :=
+ match srcs, dsts with
+ | s1 :: sl, t1 :: tl =>
+ add_reload s1 t1 (add_reloads sl tl k)
+ | _, _ =>
+ k
+ end.
+
+(** [add_move src dst k] prepends to [k] the instructions that copy
+ the value of location [src] into location [dst]. *)
+
+Definition add_move (src dst: loc) (k: block) :=
+ if Loc.eq src dst then k else
+ match src, dst with
+ | R rs, _ =>
+ add_spill rs dst k
+ | _, R rd =>
+ add_reload src rd k
+ | S ss, S sd =>
+ let tmp :=
+ match slot_type ss with Tint => IT1 | Tfloat => FT1 end in
+ add_reload src tmp (add_spill tmp dst k)
+ end.
+
+(** [parallel_move srcs dsts k] is similar, but for a list of
+ source locations and a list of destination locations of the same
+ length. This is a parallel move, meaning that arbitrary overlap
+ between the sources and destinations is permitted. *)
+
+Fixpoint listsLoc2Moves (src dst : list loc) {struct src} : Moves :=
+ match src, dst with
+ | nil, _ => nil
+ | s :: srcs, nil => nil
+ | s :: srcs, d :: dsts => (s, d) :: listsLoc2Moves srcs dsts
+ end.
+
+Definition parallel_move_order (src dst : list loc) :=
+ Parallelmove.P_move (listsLoc2Moves src dst).
+
+Definition parallel_move (srcs dsts: list loc) (k: block) : block :=
+ List.fold_left
+ (fun k p => add_move (fst p) (snd p) k)
+ (parallel_move_order srcs dsts) k.
+
+(** ** Constructors for LTL instructions *)
+
+(** The following functions generate LTL instructions operating
+ over the given locations. Appropriate reloading and spilling operations
+ are added around the core LTL instruction. *)
+
+Definition add_op (op: operation) (args: list loc) (res: loc) (s: node) :=
+ match is_move_operation op args with
+ | Some src =>
+ add_move src res (Bgoto s)
+ | None =>
+ let rargs := regs_for args in
+ let rres := reg_for res in
+ add_reloads args rargs (Bop op rargs rres (add_spill rres res (Bgoto s)))
+ end.
+
+Definition add_load (chunk: memory_chunk) (addr: addressing)
+ (args: list loc) (dst: loc) (s: node) :=
+ let rargs := regs_for args in
+ let rdst := reg_for dst in
+ add_reloads args rargs
+ (Bload chunk addr rargs rdst (add_spill rdst dst (Bgoto s))).
+
+Definition add_store (chunk: memory_chunk) (addr: addressing)
+ (args: list loc) (src: loc) (s: node) :=
+ match regs_for (src :: args) with
+ | nil => Breturn (* never happens *)
+ | rsrc :: rargs =>
+ add_reloads (src :: args) (rsrc :: rargs)
+ (Bstore chunk addr rargs rsrc (Bgoto s))
+ end.
+
+(** For function calls, we also add appropriate moves to and from
+ the canonical locations for function arguments and function results,
+ as dictated by the calling conventions. *)
+
+Definition add_call (sig: signature) (ros: loc + ident)
+ (args: list loc) (res: loc) (s: node) :=
+ let rargs := loc_arguments sig in
+ let rres := loc_result sig in
+ match ros with
+ | inl fn =>
+ (add_reload fn IT3
+ (parallel_move args rargs
+ (Bcall sig (inl _ IT3) (add_spill rres res (Bgoto s)))))
+ | inr id =>
+ parallel_move args rargs
+ (Bcall sig (inr _ id) (add_spill rres res (Bgoto s)))
+ end.
+
+Definition add_cond (cond: condition) (args: list loc) (ifso ifnot: node) :=
+ let rargs := regs_for args in
+ add_reloads args rargs (Bcond cond rargs ifso ifnot).
+
+(** For function returns, we add the appropriate move of the result
+ to the conventional location for the function result. If the function
+ returns with no value, we explicitly set the function result register
+ to the [Vundef] value, for consistency with RTL's semantics. *)
+
+Definition add_return (sig: signature) (optarg: option loc) :=
+ match optarg with
+ | Some arg => add_reload arg (loc_result sig) Breturn
+ | None => Bop Oundef nil (loc_result sig) Breturn
+ end.
+
+(** For function entry points, we move from the parameter locations
+ dictated by the calling convention to the locations of the function
+ parameters. We also explicitly set to [Vundef] the locations
+ of pseudo-registers that are live at function entry but are not
+ parameters, again for consistency with RTL's semantics. *)
+
+Fixpoint add_undefs (ll: list loc) (b: block) {struct ll} : block :=
+ match ll with
+ | nil => b
+ | R r :: ls => Bop Oundef nil r (add_undefs ls b)
+ | S s :: ls => add_undefs ls b
+ end.
+
+Definition add_entry (sig: signature) (params: list loc) (undefs: list loc)
+ (s: node) :=
+ parallel_move (loc_parameters sig) params (add_undefs undefs (Bgoto s)).
+
+(** * Translation from RTL to LTL *)
+
+(** Each [RTL] instruction translates to an [LTL] basic block.
+ The register assignment [assign] returned by register allocation
+ is applied to the arguments and results of the RTL
+ instruction, followed by an invocation of the appropriate [LTL]
+ constructor function that will deal with spilling, reloading and
+ calling conventions. In addition, dead instructions are eliminated.
+ Dead instructions are instructions without side-effects ([Iop] and
+ [Iload]) whose result register is dead, i.e. whose result value
+ is never used. *)
+
+Definition transf_instr
+ (f: RTL.function) (live: PMap.t Regset.t) (assign: reg -> loc)
+ (pc: node) (instr: RTL.instruction) : LTL.block :=
+ match instr with
+ | Inop s =>
+ Bgoto s
+ | Iop op args res s =>
+ if Regset.mem res live!!pc then
+ add_op op (List.map assign args) (assign res) s
+ else
+ Bgoto s
+ | Iload chunk addr args dst s =>
+ if Regset.mem dst live!!pc then
+ add_load chunk addr (List.map assign args) (assign dst) s
+ else
+ Bgoto s
+ | Istore chunk addr args src s =>
+ add_store chunk addr (List.map assign args) (assign src) s
+ | Icall sig ros args res s =>
+ add_call sig (sum_left_map assign ros) (List.map assign args)
+ (assign res) s
+ | Icond cond args ifso ifnot =>
+ add_cond cond (List.map assign args) ifso ifnot
+ | Ireturn optarg =>
+ add_return (RTL.fn_sig f) (option_map assign optarg)
+ end.
+
+Definition transf_entrypoint
+ (f: RTL.function) (live: PMap.t Regset.t) (assign: reg -> loc)
+ (newcode: LTL.code) : LTL.code :=
+ let oldentry := RTL.fn_entrypoint f in
+ let newentry := RTL.fn_nextpc f in
+ let undefs :=
+ Regset.elements (reg_list_dead (RTL.fn_params f)
+ (transfer f oldentry live!!oldentry)) in
+ PTree.set
+ newentry
+ (add_entry (RTL.fn_sig f)
+ (List.map assign (RTL.fn_params f))
+ (List.map assign undefs)
+ oldentry)
+ newcode.
+
+Lemma transf_entrypoint_wf:
+ forall (f: RTL.function) (live: PMap.t Regset.t) (assign: reg -> loc),
+ let tc1 := PTree.map (transf_instr f live assign) (RTL.fn_code f) in
+ let tc2 := transf_entrypoint f live assign tc1 in
+ forall (pc: node), Plt pc (Psucc (RTL.fn_nextpc f)) \/ tc2!pc = None.
+Proof.
+ intros. case (plt pc (Psucc (RTL.fn_nextpc f))); intro.
+ left. auto.
+ right.
+ assert (pc <> RTL.fn_nextpc f).
+ red; intro. subst pc. elim n. apply Plt_succ.
+ assert (~ (Plt pc (RTL.fn_nextpc f))).
+ red; intro. elim n. apply Plt_trans_succ; auto.
+ unfold tc2. unfold transf_entrypoint.
+ rewrite PTree.gso; auto.
+ unfold tc1. rewrite PTree.gmap.
+ elim (RTL.fn_code_wf f pc); intro.
+ contradiction. unfold option_map. rewrite H1. auto.
+Qed.
+
+(** The translation of a function performs liveness analysis,
+ construction and coloring of the inference graph, and per-instruction
+ transformation as described above. *)
+
+Definition transf_function (f: RTL.function) : option LTL.function :=
+ match type_rtl_function f with
+ | None => None
+ | Some env =>
+ match analyze f with
+ | None => None
+ | Some live =>
+ let pc0 := f.(RTL.fn_entrypoint) in
+ let live0 := transfer f pc0 live!!pc0 in
+ match regalloc f live live0 env with
+ | None => None
+ | Some assign =>
+ Some (LTL.mkfunction
+ (RTL.fn_sig f)
+ (RTL.fn_stacksize f)
+ (transf_entrypoint f live assign
+ (PTree.map (transf_instr f live assign) (RTL.fn_code f)))
+ (RTL.fn_nextpc f)
+ (transf_entrypoint_wf f live assign))
+ end
+ end
+ end.
+
+Definition transf_program (p: RTL.program) : option LTL.program :=
+ transform_partial_program transf_function p.
+
diff --git a/backend/Allocproof.v b/backend/Allocproof.v
new file mode 100644
index 0000000..138e6d7
--- /dev/null
+++ b/backend/Allocproof.v
@@ -0,0 +1,1827 @@
+(** Correctness proof for the [Allocation] pass (translation from
+ RTL to LTL). *)
+
+Require Import Relations.
+Require Import Coqlib.
+Require Import Maps.
+Require Import AST.
+Require Import Integers.
+Require Import Values.
+Require Import Mem.
+Require Import Globalenvs.
+Require Import Op.
+Require Import Registers.
+Require Import RTL.
+Require Import RTLtyping.
+Require Import Locations.
+Require Import Conventions.
+Require Import Coloring.
+Require Import Coloringproof.
+Require Import Allocation.
+Require Import Allocproof_aux.
+
+(** * Semantic properties of calling conventions *)
+
+(** The value of a parameter in the called function is the same
+ as the value of the corresponding argument in the caller function. *)
+
+Lemma call_regs_param_of_arg:
+ forall sig ls l,
+ In l (loc_arguments sig) ->
+ LTL.call_regs ls (parameter_of_argument l) = ls l.
+Proof.
+ intros.
+ generalize (loc_arguments_acceptable sig l H).
+ unfold LTL.call_regs; unfold parameter_of_argument.
+ unfold loc_argument_acceptable.
+ destruct l. auto. destruct s; tauto.
+Qed.
+
+(** The return value, stored in the conventional return register,
+ is correctly passed from the callee back to the caller. *)
+
+Lemma return_regs_result:
+ forall sig caller callee,
+ LTL.return_regs caller callee (R (loc_result sig)) =
+ callee (R (loc_result sig)).
+Proof.
+ intros. unfold LTL.return_regs.
+ case (In_dec Loc.eq (R (loc_result sig)) temporaries); intro.
+ auto.
+ case (In_dec Loc.eq (R (loc_result sig)) destroyed_at_call); intro.
+ auto.
+ elim n0. apply loc_result_acceptable.
+Qed.
+
+(** Acceptable locations that are not destroyed at call keep
+ their values across a call. *)
+
+Lemma return_regs_not_destroyed:
+ forall caller callee l,
+ Loc.notin l destroyed_at_call -> loc_acceptable l ->
+ LTL.return_regs caller callee l = caller l.
+Proof.
+ unfold loc_acceptable, LTL.return_regs.
+ destruct l; auto.
+ intros. case (In_dec Loc.eq (R m) temporaries); intro.
+ contradiction.
+ case (In_dec Loc.eq (R m) destroyed_at_call); intro.
+ elim (Loc.notin_not_in _ _ H i).
+ auto.
+Qed.
+
+(** * Correctness condition for the liveness analysis *)
+
+(** The liveness information computed by the dataflow analysis is
+ correct in the following sense: all registers live ``before''
+ an instruction are live ``after'' all of its predecessors. *)
+
+Lemma analyze_correct:
+ forall (f: function) (live: PMap.t Regset.t) (n s: node),
+ analyze f = Some live ->
+ f.(fn_code)!n <> None ->
+ f.(fn_code)!s <> None ->
+ In s (successors f n) ->
+ Regset.ge live!!n (transfer f s live!!s).
+Proof.
+ intros.
+ eapply DS.fixpoint_solution.
+ unfold analyze in H. eexact H.
+ elim (fn_code_wf f n); intro. auto. contradiction.
+ elim (fn_code_wf f s); intro. auto. contradiction.
+ auto.
+Qed.
+
+Definition live0 (f: RTL.function) (live: PMap.t Regset.t) :=
+ transfer f f.(RTL.fn_entrypoint) live!!(f.(RTL.fn_entrypoint)).
+
+(** * Properties of allocated locations *)
+
+(** We list here various properties of the locations [alloc r],
+ where [r] is an RTL pseudo-register and [alloc] is the register
+ assignment returned by [regalloc]. *)
+
+Section REGALLOC_PROPERTIES.
+
+Variable f: function.
+Variable env: regenv.
+Variable live: PMap.t Regset.t.
+Variable alloc: reg -> loc.
+Hypothesis ALLOC: regalloc f live (live0 f live) env = Some alloc.
+
+Lemma loc_acceptable_noteq_diff:
+ forall l1 l2,
+ loc_acceptable l1 -> l1 <> l2 -> Loc.diff l1 l2.
+Proof.
+ unfold loc_acceptable, Loc.diff; destruct l1; destruct l2;
+ try (destruct s); try (destruct s0); intros; auto; try congruence.
+ case (zeq z z0); intro.
+ compare t t0; intro.
+ subst z0; subst t0; tauto.
+ tauto. tauto.
+ contradiction. contradiction.
+Qed.
+
+Lemma regalloc_noteq_diff:
+ forall r1 l2,
+ alloc r1 <> l2 -> Loc.diff (alloc r1) l2.
+Proof.
+ intros. apply loc_acceptable_noteq_diff.
+ eapply regalloc_acceptable; eauto.
+ auto.
+Qed.
+
+Lemma loc_acceptable_notin_notin:
+ forall r ll,
+ loc_acceptable r ->
+ ~(In r ll) -> Loc.notin r ll.
+Proof.
+ induction ll; simpl; intros.
+ auto.
+ split. apply loc_acceptable_noteq_diff. assumption.
+ apply sym_not_equal. tauto.
+ apply IHll. assumption. tauto.
+Qed.
+
+Lemma regalloc_notin_notin:
+ forall r ll,
+ ~(In (alloc r) ll) -> Loc.notin (alloc r) ll.
+Proof.
+ intros. apply loc_acceptable_notin_notin.
+ eapply regalloc_acceptable; eauto. auto.
+Qed.
+
+Lemma regalloc_norepet_norepet:
+ forall rl,
+ list_norepet (List.map alloc rl) ->
+ Loc.norepet (List.map alloc rl).
+Proof.
+ induction rl; simpl; intros.
+ apply Loc.norepet_nil.
+ inversion H.
+ apply Loc.norepet_cons.
+ eapply regalloc_notin_notin; eauto.
+ auto.
+Qed.
+
+Lemma regalloc_not_temporary:
+ forall (r: reg),
+ Loc.notin (alloc r) temporaries.
+Proof.
+ intros. apply temporaries_not_acceptable.
+ eapply regalloc_acceptable; eauto.
+Qed.
+
+Lemma regalloc_disj_temporaries:
+ forall (rl: list reg),
+ Loc.disjoint (List.map alloc rl) temporaries.
+Proof.
+ intros.
+ apply Loc.notin_disjoint. intros.
+ generalize (list_in_map_inv _ _ _ H). intros [r [EQ IN]].
+ subst x. apply regalloc_not_temporary; auto.
+Qed.
+
+End REGALLOC_PROPERTIES.
+
+(** * Semantic agreement between RTL registers and LTL locations *)
+
+Require Import LTL.
+
+Section AGREE.
+
+Variable f: RTL.function.
+Variable env: regenv.
+Variable flive: PMap.t Regset.t.
+Variable assign: reg -> loc.
+Hypothesis REGALLOC: regalloc f flive (live0 f flive) env = Some assign.
+
+(** Remember the core of the code transformation performed in module
+ [Allocation]: every reference to register [r] is replaced by
+ a reference to location [assign r]. We will shortly prove
+ the semantic equivalence between the original code and the transformed code.
+ The key tool to do this is the following relation between
+ a register set [rs] in the original RTL program and a location set
+ [ls] in the transformed LTL program. The two sets agree if
+ they assign identical values to matching registers and locations,
+ that is, the value of register [r] in [rs] is the same as
+ the value of location [assign r] in [ls]. However, this equality
+ needs to hold only for live registers [r]. If [r] is dead at
+ the current point, its value is never used later, hence the value
+ of [assign r] can be arbitrary. *)
+
+Definition agree (live: Regset.t) (rs: regset) (ls: locset) : Prop :=
+ forall (r: reg), Regset.mem r live = true -> ls (assign r) = rs#r.
+
+(** What follows is a long list of lemmas expressing properties
+ of the [agree_live_regs] predicate that are useful for the
+ semantic equivalence proof. First: two register sets that agree
+ on a given set of live registers also agree on a subset of
+ those live registers. *)
+
+Lemma agree_increasing:
+ forall live1 live2 rs ls,
+ Regset.ge live1 live2 -> agree live1 rs ls ->
+ agree live2 rs ls.
+Proof.
+ unfold agree; intros.
+ apply H0. apply H. auto.
+Qed.
+
+(** Some useful special cases of [agree_increasing]. *)
+
+Lemma agree_reg_live:
+ forall r live rs ls,
+ agree (reg_live r live) rs ls -> agree live rs ls.
+Proof.
+ intros. apply agree_increasing with (reg_live r live).
+ red; intros. case (Reg.eq r r0); intro.
+ subst r0. apply Regset.mem_add_same.
+ rewrite Regset.mem_add_other; auto. auto.
+Qed.
+
+Lemma agree_reg_list_live:
+ forall rl live rs ls,
+ agree (reg_list_live rl live) rs ls -> agree live rs ls.
+Proof.
+ induction rl; simpl; intros.
+ assumption.
+ apply agree_reg_live with a. apply IHrl. assumption.
+Qed.
+
+Lemma agree_reg_sum_live:
+ forall ros live rs ls,
+ agree (reg_sum_live ros live) rs ls -> agree live rs ls.
+Proof.
+ intros. destruct ros; simpl in H.
+ apply agree_reg_live with r; auto.
+ auto.
+Qed.
+
+(** Agreement over a set of live registers just extended with [r]
+ implies equality of the values of [r] and [assign r]. *)
+
+Lemma agree_eval_reg:
+ forall r live rs ls,
+ agree (reg_live r live) rs ls -> ls (assign r) = rs#r.
+Proof.
+ intros. apply H. apply Regset.mem_add_same.
+Qed.
+
+(** Same, for a list of registers. *)
+
+Lemma agree_eval_regs:
+ forall rl live rs ls,
+ agree (reg_list_live rl live) rs ls ->
+ List.map ls (List.map assign rl) = rs##rl.
+Proof.
+ induction rl; simpl; intros.
+ reflexivity.
+ apply (f_equal2 (@cons val)).
+ apply agree_eval_reg with live.
+ apply agree_reg_list_live with rl. auto.
+ eapply IHrl. eexact H.
+Qed.
+
+(** Agreement is insensitive to the current values of the temporary
+ machine registers. *)
+
+Lemma agree_exten:
+ forall live rs ls ls',
+ agree live rs ls ->
+ (forall l, Loc.notin l temporaries -> ls' l = ls l) ->
+ agree live rs ls'.
+Proof.
+ unfold agree; intros.
+ rewrite H0. apply H. auto. eapply regalloc_not_temporary; eauto.
+Qed.
+
+(** If a register is dead, assigning it an arbitrary value in [rs]
+ and leaving [ls] unchanged preserves agreement. (This corresponds
+ to an operation over a dead register in the original program
+ that is turned into a no-op in the transformed program.) *)
+
+Lemma agree_assign_dead:
+ forall live r rs ls v,
+ Regset.mem r live = false ->
+ agree live rs ls ->
+ agree live (rs#r <- v) ls.
+Proof.
+ unfold agree; intros.
+ case (Reg.eq r r0); intro.
+ subst r0. congruence.
+ rewrite Regmap.gso; auto.
+Qed.
+
+(** Setting [r] to value [v] in [rs]
+ and simultaneously setting [assign r] to value [v] in [ls]
+ preserves agreement, provided that all live registers except [r]
+ are mapped to locations other than that of [r]. *)
+
+Lemma agree_assign_live:
+ forall live r rs ls ls' v,
+ (forall s,
+ Regset.mem s live = true -> s <> r -> assign s <> assign r) ->
+ ls' (assign r) = v ->
+ (forall l, Loc.diff l (assign r) -> Loc.notin l temporaries -> ls' l = ls l) ->
+ agree (reg_dead r live) rs ls ->
+ agree live (rs#r <- v) ls'.
+Proof.
+ unfold agree; intros.
+ case (Reg.eq r r0); intro.
+ subst r0. rewrite Regmap.gss. assumption.
+ rewrite Regmap.gso; auto.
+ rewrite H1. apply H2. rewrite Regset.mem_remove_other. auto.
+ auto. eapply regalloc_noteq_diff. eauto. apply H. auto. auto.
+ eapply regalloc_not_temporary; eauto.
+Qed.
+
+(** This is a special case of the previous lemma where the value [v]
+ being stored is not arbitrary, but is the value of
+ another register [arg]. (This corresponds to a register-register move
+ instruction.) In this case, the condition can be weakened:
+ it suffices that all live registers except [arg] and [res]
+ are mapped to locations other than that of [res]. *)
+
+Lemma agree_move_live:
+ forall live arg res rs (ls ls': locset),
+ (forall r,
+ Regset.mem r live = true -> r <> res -> r <> arg ->
+ assign r <> assign res) ->
+ ls' (assign res) = ls (assign arg) ->
+ (forall l, Loc.diff l (assign res) -> Loc.notin l temporaries -> ls' l = ls l) ->
+ agree (reg_live arg (reg_dead res live)) rs ls ->
+ agree live (rs#res <- (rs#arg)) ls'.
+Proof.
+ unfold agree; intros.
+ case (Reg.eq res r); intro.
+ subst r. rewrite Regmap.gss. rewrite H0. apply H2.
+ apply Regset.mem_add_same.
+ rewrite Regmap.gso; auto.
+ case (Loc.eq (assign r) (assign res)); intro.
+ rewrite e. rewrite H0.
+ case (Reg.eq arg r); intro.
+ subst r. apply H2. apply Regset.mem_add_same.
+ elim (H r); auto.
+ rewrite H1. apply H2.
+ case (Reg.eq arg r); intro. subst r. apply Regset.mem_add_same.
+ rewrite Regset.mem_add_other; auto.
+ rewrite Regset.mem_remove_other; auto.
+ eapply regalloc_noteq_diff; eauto.
+ eapply regalloc_not_temporary; eauto.
+Qed.
+
+(** This complicated lemma states agreement between the states after
+ a function call, provided that the states before the call agree
+ and that calling conventions are respected. *)
+
+Lemma agree_call:
+ forall live args ros res rs v (ls ls': locset),
+ (forall r,
+ Regset.mem r live = true ->
+ r <> res ->
+ ~(In (assign r) Conventions.destroyed_at_call)) ->
+ (forall r,
+ Regset.mem r live = true -> r <> res -> assign r <> assign res) ->
+ ls' (assign res) = v ->
+ (forall l,
+ Loc.notin l destroyed_at_call -> loc_acceptable l -> Loc.diff l (assign res) ->
+ ls' l = ls l) ->
+ agree (reg_list_live args (reg_sum_live ros (reg_dead res live))) rs ls ->
+ agree live (rs#res <- v) ls'.
+Proof.
+ intros.
+ assert (agree (reg_dead res live) rs ls).
+ apply agree_reg_sum_live with ros.
+ apply agree_reg_list_live with args. assumption.
+ red; intros.
+ case (Reg.eq r res); intro.
+ subst r. rewrite Regmap.gss. assumption.
+ rewrite Regmap.gso; auto. rewrite H2. apply H4.
+ rewrite Regset.mem_remove_other; auto.
+ eapply regalloc_notin_notin; eauto.
+ eapply regalloc_acceptable; eauto.
+ eapply regalloc_noteq_diff; eauto.
+Qed.
+
+(** Agreement between the initial register set at RTL function entry
+ and the location set at LTL function entry. *)
+
+Lemma agree_init_regs:
+ forall rl vl ls live,
+ (forall r1 r2,
+ In r1 rl -> Regset.mem r2 live = true -> r1 <> r2 ->
+ assign r1 <> assign r2) ->
+ List.map ls (List.map assign rl) = vl ->
+ agree (reg_list_dead rl live) (Regmap.init Vundef) ls ->
+ agree live (init_regs vl rl) ls.
+Proof.
+ induction rl; simpl; intros.
+ assumption.
+ destruct vl. discriminate.
+ assert (agree (reg_dead a live) (init_regs vl rl) ls).
+ apply IHrl. intros. apply H. tauto.
+ case (Reg.eq a r2); intro. subst r2.
+ rewrite Regset.mem_remove_same in H3. discriminate.
+ rewrite Regset.mem_remove_other in H3; auto.
+ auto. congruence. assumption.
+ red; intros. case (Reg.eq a r); intro.
+ subst r. rewrite Regmap.gss. congruence.
+ rewrite Regmap.gso; auto. apply H2.
+ rewrite Regset.mem_remove_other; auto.
+Qed.
+
+Lemma agree_parameters:
+ forall vl ls,
+ let params := f.(RTL.fn_params) in
+ List.map ls (List.map assign params) = vl ->
+ (forall r,
+ Regset.mem r (reg_list_dead params (live0 f flive)) = true ->
+ ls (assign r) = Vundef) ->
+ agree (live0 f flive) (init_regs vl params) ls.
+Proof.
+ intros. apply agree_init_regs.
+ intros. eapply regalloc_correct_3; eauto.
+ assumption.
+ red; intros. rewrite Regmap.gi. auto.
+Qed.
+
+End AGREE.
+
+(** * Correctness of the LTL constructors *)
+
+(** This section proves theorems that establish the correctness of the
+ LTL constructor functions such as [add_op]. The theorems are of
+ the general form ``the generated LTL instructions execute and
+ modify the location set in the expected way: the result location(s)
+ contain the expected values and other, non-temporary locations keep
+ their values''. *)
+
+Section LTL_CONSTRUCTORS.
+
+Variable ge: LTL.genv.
+Variable sp: val.
+
+Lemma reg_for_spec:
+ forall l,
+ R(reg_for l) = l \/ In (R (reg_for l)) temporaries.
+Proof.
+ intros. unfold reg_for. destruct l. tauto.
+ case (slot_type s); simpl; tauto.
+Qed.
+
+Lemma add_reload_correct:
+ forall src dst k rs m,
+ exists rs',
+ exec_instrs ge sp (add_reload src dst k) rs m k rs' m /\
+ rs' (R dst) = rs src /\
+ forall l, Loc.diff (R dst) l -> rs' l = rs l.
+Proof.
+ intros. unfold add_reload. destruct src.
+ case (mreg_eq m0 dst); intro.
+ subst dst. exists rs. split. apply exec_refl. tauto.
+ exists (Locmap.set (R dst) (rs (R m0)) rs).
+ split. apply exec_one; apply exec_Bop. reflexivity.
+ split. apply Locmap.gss.
+ intros; apply Locmap.gso; auto.
+ exists (Locmap.set (R dst) (rs (S s)) rs).
+ split. apply exec_one; apply exec_Bgetstack.
+ split. apply Locmap.gss.
+ intros; apply Locmap.gso; auto.
+Qed.
+
+Lemma add_spill_correct:
+ forall src dst k rs m,
+ exists rs',
+ exec_instrs ge sp (add_spill src dst k) rs m k rs' m /\
+ rs' dst = rs (R src) /\
+ forall l, Loc.diff dst l -> rs' l = rs l.
+Proof.
+ intros. unfold add_spill. destruct dst.
+ case (mreg_eq src m0); intro.
+ subst src. exists rs. split. apply exec_refl. tauto.
+ exists (Locmap.set (R m0) (rs (R src)) rs).
+ split. apply exec_one. apply exec_Bop. reflexivity.
+ split. apply Locmap.gss.
+ intros; apply Locmap.gso; auto.
+ exists (Locmap.set (S s) (rs (R src)) rs).
+ split. apply exec_one. apply exec_Bsetstack.
+ split. apply Locmap.gss.
+ intros; apply Locmap.gso; auto.
+Qed.
+
+Lemma add_reloads_correct_rec:
+ forall srcs itmps ftmps k rs m,
+ (List.length srcs <= List.length itmps)%nat ->
+ (List.length srcs <= List.length ftmps)%nat ->
+ (forall r, In (R r) srcs -> In r itmps -> False) ->
+ (forall r, In (R r) srcs -> In r ftmps -> False) ->
+ list_disjoint itmps ftmps ->
+ list_norepet itmps ->
+ list_norepet ftmps ->
+ exists rs',
+ exec_instrs ge sp (add_reloads srcs (regs_for_rec srcs itmps ftmps) k) rs m k rs' m /\
+ reglist (regs_for_rec srcs itmps ftmps) rs' = map rs srcs /\
+ (forall r, ~(In r itmps) -> ~(In r ftmps) -> rs' (R r) = rs (R r)) /\
+ (forall s, rs' (S s) = rs (S s)).
+Proof.
+ induction srcs; simpl; intros.
+ (* base case *)
+ exists rs. split. apply exec_refl. tauto.
+ (* inductive case *)
+ destruct itmps; simpl in H. omegaContradiction.
+ destruct ftmps; simpl in H0. omegaContradiction.
+ assert (R1: (length srcs <= length itmps)%nat). omega.
+ assert (R2: (length srcs <= length ftmps)%nat). omega.
+ assert (R3: forall r, In (R r) srcs -> In r itmps -> False).
+ intros. apply H1 with r. tauto. auto with coqlib.
+ assert (R4: forall r, In (R r) srcs -> In r ftmps -> False).
+ intros. apply H2 with r. tauto. auto with coqlib.
+ assert (R5: list_disjoint itmps ftmps).
+ eapply list_disjoint_cons_left.
+ eapply list_disjoint_cons_right. eauto.
+ assert (R6: list_norepet itmps).
+ inversion H4; auto.
+ assert (R7: list_norepet ftmps).
+ inversion H5; auto.
+ destruct a.
+ (* a is a register *)
+ generalize (IHsrcs itmps ftmps k rs m R1 R2 R3 R4 R5 R6 R7).
+ intros [rs' [EX [RES [OTH1 OTH2]]]].
+ exists rs'. split.
+ unfold add_reload. case (mreg_eq m2 m2); intro; tauto.
+ split. simpl. apply (f_equal2 (@cons val)).
+ apply OTH1.
+ red; intro; apply H1 with m2. tauto. auto with coqlib.
+ red; intro; apply H2 with m2. tauto. auto with coqlib.
+ assumption.
+ split. intros. apply OTH1. simpl in H6; tauto. simpl in H7; tauto.
+ auto.
+ (* a is a stack location *)
+ set (tmp := match slot_type s with Tint => m0 | Tfloat => m1 end).
+ assert (NI: ~(In tmp itmps)).
+ unfold tmp; case (slot_type s).
+ inversion H4; auto.
+ apply list_disjoint_notin with (m1 :: ftmps).
+ apply list_disjoint_sym. apply list_disjoint_cons_left with m0.
+ auto. auto with coqlib.
+ assert (NF: ~(In tmp ftmps)).
+ unfold tmp; case (slot_type s).
+ apply list_disjoint_notin with (m0 :: itmps).
+ apply list_disjoint_cons_right with m1.
+ auto. auto with coqlib.
+ inversion H5; auto.
+ generalize
+ (add_reload_correct (S s) tmp
+ (add_reloads srcs (regs_for_rec srcs itmps ftmps) k) rs m).
+ intros [rs1 [EX1 [RES1 OTH]]].
+ generalize (IHsrcs itmps ftmps k rs1 m R1 R2 R3 R4 R5 R6 R7).
+ intros [rs' [EX [RES [OTH1 OTH2]]]].
+ exists rs'.
+ split. eapply exec_trans; eauto.
+ split. simpl. apply (f_equal2 (@cons val)).
+ rewrite OTH1; auto.
+ rewrite RES. apply list_map_exten. intros.
+ symmetry. apply OTH.
+ destruct x; try exact I. simpl. red; intro; subst m2.
+ generalize H6; unfold tmp. case (slot_type s).
+ intro. apply H1 with m0. tauto. auto with coqlib.
+ intro. apply H2 with m1. tauto. auto with coqlib.
+ split. intros. simpl in H6; simpl in H7.
+ rewrite OTH1. apply OTH.
+ simpl. unfold tmp. case (slot_type s); tauto.
+ tauto. tauto.
+ intros. rewrite OTH2. apply OTH. exact I.
+Qed.
+
+Lemma add_reloads_correct:
+ forall srcs k rs m,
+ (List.length srcs <= 3)%nat ->
+ Loc.disjoint srcs temporaries ->
+ exists rs',
+ exec_instrs ge sp (add_reloads srcs (regs_for srcs) k) rs m k rs' m /\
+ reglist (regs_for srcs) rs' = List.map rs srcs /\
+ forall l, Loc.notin l temporaries -> rs' l = rs l.
+Proof.
+ intros.
+ pose (itmps := IT1 :: IT2 :: IT3 :: nil).
+ pose (ftmps := FT1 :: FT2 :: FT3 :: nil).
+ assert (R1: (List.length srcs <= List.length itmps)%nat).
+ unfold itmps; simpl; assumption.
+ assert (R2: (List.length srcs <= List.length ftmps)%nat).
+ unfold ftmps; simpl; assumption.
+ assert (R3: forall r, In (R r) srcs -> In r itmps -> False).
+ intros. assert (In (R r) temporaries).
+ simpl in H2; simpl; intuition congruence.
+ generalize (H0 _ _ H1 H3). simpl. tauto.
+ assert (R4: forall r, In (R r) srcs -> In r ftmps -> False).
+ intros. assert (In (R r) temporaries).
+ simpl in H2; simpl; intuition congruence.
+ generalize (H0 _ _ H1 H3). simpl. tauto.
+ assert (R5: list_disjoint itmps ftmps).
+ red; intros r1 r2; simpl; intuition congruence.
+ assert (R6: list_norepet itmps).
+ unfold itmps. NoRepet.
+ assert (R7: list_norepet ftmps).
+ unfold ftmps. NoRepet.
+ generalize (add_reloads_correct_rec srcs itmps ftmps k rs m
+ R1 R2 R3 R4 R5 R6 R7).
+ intros [rs' [EX [RES [OTH1 OTH2]]]].
+ exists rs'. split. exact EX.
+ split. exact RES.
+ intros. destruct l. apply OTH1.
+ generalize (Loc.notin_not_in _ _ H1). simpl. intuition congruence.
+ generalize (Loc.notin_not_in _ _ H1). simpl. intuition congruence.
+ apply OTH2.
+Qed.
+
+Lemma add_move_correct:
+ forall src dst k rs m,
+ exists rs',
+ exec_instrs ge sp (add_move src dst k) rs m k rs' m /\
+ rs' dst = rs src /\
+ forall l, Loc.diff l dst -> Loc.diff l (R IT1) -> Loc.diff l (R FT1) -> rs' l = rs l.
+Proof.
+ intros; unfold add_move.
+ case (Loc.eq src dst); intro.
+ subst dst. exists rs. split. apply exec_refl. tauto.
+ destruct src.
+ (* src is a register *)
+ generalize (add_spill_correct m0 dst k rs m); intros [rs' [EX [RES OTH]]].
+ exists rs'; intuition. apply OTH; apply Loc.diff_sym; auto.
+ destruct dst.
+ (* src is a stack slot, dst a register *)
+ generalize (add_reload_correct (S s) m0 k rs m); intros [rs' [EX [RES OTH]]].
+ exists rs'; intuition. apply OTH; apply Loc.diff_sym; auto.
+ (* src and dst are stack slots *)
+ set (tmp := match slot_type s with Tint => IT1 | Tfloat => FT1 end).
+ generalize (add_reload_correct (S s) tmp (add_spill tmp (S s0) k) rs m);
+ intros [rs1 [EX1 [RES1 OTH1]]].
+ generalize (add_spill_correct tmp (S s0) k rs1 m);
+ intros [rs2 [EX2 [RES2 OTH2]]].
+ exists rs2. split.
+ eapply exec_trans; eauto.
+ split. congruence.
+ intros. rewrite OTH2. apply OTH1.
+ apply Loc.diff_sym. unfold tmp; case (slot_type s); auto.
+ apply Loc.diff_sym; auto.
+Qed.
+
+Theorem parallel_move_correct:
+ forall srcs dsts k rs m,
+ List.length srcs = List.length dsts ->
+ Loc.no_overlap srcs dsts ->
+ Loc.norepet dsts ->
+ Loc.disjoint srcs temporaries ->
+ Loc.disjoint dsts temporaries ->
+ exists rs',
+ exec_instrs ge sp (parallel_move srcs dsts k) rs m k rs' m /\
+ List.map rs' dsts = List.map rs srcs /\
+ rs' (R IT3) = rs (R IT3) /\
+ forall l, Loc.notin l dsts -> Loc.notin l temporaries -> rs' l = rs l.
+Proof.
+ apply (parallel_move_correctX ge sp).
+ apply add_move_correct.
+Qed.
+
+Lemma add_op_correct:
+ forall op args res s rs m v,
+ (List.length args <= 3)%nat ->
+ Loc.disjoint args temporaries ->
+ eval_operation ge sp op (List.map rs args) = Some v ->
+ exists rs',
+ exec_block ge sp (add_op op args res s) rs m (Cont s) rs' m /\
+ rs' res = v /\
+ forall l, Loc.diff l res -> Loc.notin l temporaries -> rs' l = rs l.
+Proof.
+ intros. unfold add_op.
+ caseEq (is_move_operation op args).
+ (* move *)
+ intros arg IMO.
+ generalize (is_move_operation_correct op args IMO).
+ intros [EQ1 EQ2]. subst op; subst args.
+ generalize (add_move_correct arg res (Bgoto s) rs m).
+ intros [rs' [EX [RES OTHER]]].
+ exists rs'. split.
+ apply exec_Bgoto. exact EX.
+ split. simpl in H1. congruence.
+ intros. unfold temporaries in H3; simpl in H3.
+ apply OTHER. assumption. tauto. tauto.
+ (* other ops *)
+ intros.
+ set (rargs := regs_for args). set (rres := reg_for res).
+ generalize (add_reloads_correct args
+ (Bop op rargs rres (add_spill rres res (Bgoto s)))
+ rs m H H0).
+ intros [rs1 [EX1 [RES1 OTHER1]]].
+ pose (rs2 := Locmap.set (R rres) v rs1).
+ generalize (add_spill_correct rres res (Bgoto s) rs2 m).
+ intros [rs3 [EX3 [RES3 OTHER3]]].
+ exists rs3.
+ split. apply exec_Bgoto. eapply exec_trans. eexact EX1.
+ eapply exec_trans; eauto.
+ apply exec_one. unfold rs2. apply exec_Bop.
+ unfold rargs. rewrite RES1. auto.
+ split. rewrite RES3. unfold rs2; apply Locmap.gss.
+ intros. rewrite OTHER3. unfold rs2. rewrite Locmap.gso.
+ apply OTHER1. assumption.
+ apply Loc.diff_sym. unfold rres. elim (reg_for_spec res); intro.
+ rewrite H5; auto.
+ eapply Loc.in_notin_diff; eauto. apply Loc.diff_sym; auto.
+Qed.
+
+Lemma add_load_correct:
+ forall chunk addr args res s rs m a v,
+ (List.length args <= 2)%nat ->
+ Loc.disjoint args temporaries ->
+ eval_addressing ge sp addr (List.map rs args) = Some a ->
+ loadv chunk m a = Some v ->
+ exists rs',
+ exec_block ge sp (add_load chunk addr args res s) rs m (Cont s) rs' m /\
+ rs' res = v /\
+ forall l, Loc.diff l res -> Loc.notin l temporaries -> rs' l = rs l.
+Proof.
+ intros. unfold add_load.
+ set (rargs := regs_for args). set (rres := reg_for res).
+ assert (LL: (List.length args <= 3)%nat). omega.
+ generalize (add_reloads_correct args
+ (Bload chunk addr rargs rres (add_spill rres res (Bgoto s)))
+ rs m LL H0).
+ intros [rs1 [EX1 [RES1 OTHER1]]].
+ pose (rs2 := Locmap.set (R rres) v rs1).
+ generalize (add_spill_correct rres res (Bgoto s) rs2 m).
+ intros [rs3 [EX3 [RES3 OTHER3]]].
+ exists rs3.
+ split. apply exec_Bgoto. eapply exec_trans; eauto.
+ eapply exec_trans; eauto.
+ apply exec_one. unfold rs2. apply exec_Bload with a.
+ unfold rargs; rewrite RES1. assumption. assumption.
+ split. rewrite RES3. unfold rs2; apply Locmap.gss.
+ intros. rewrite OTHER3. unfold rs2. rewrite Locmap.gso.
+ apply OTHER1. assumption.
+ apply Loc.diff_sym. unfold rres. elim (reg_for_spec res); intro.
+ rewrite H5; auto.
+ eapply Loc.in_notin_diff; eauto. apply Loc.diff_sym; auto.
+Qed.
+
+Lemma add_store_correct:
+ forall chunk addr args src s rs m m' a,
+ (List.length args <= 2)%nat ->
+ Loc.disjoint args temporaries ->
+ Loc.notin src temporaries ->
+ eval_addressing ge sp addr (List.map rs args) = Some a ->
+ storev chunk m a (rs src) = Some m' ->
+ exists rs',
+ exec_block ge sp (add_store chunk addr args src s) rs m (Cont s) rs' m' /\
+ forall l, Loc.notin l temporaries -> rs' l = rs l.
+Proof.
+ intros.
+ assert (LL: (List.length (src :: args) <= 3)%nat).
+ simpl. omega.
+ assert (DISJ: Loc.disjoint (src :: args) temporaries).
+ red; intros. elim H4; intro. subst x1.
+ eapply Loc.in_notin_diff; eauto.
+ auto with coqlib.
+ unfold add_store. caseEq (regs_for (src :: args)).
+ unfold regs_for; simpl; intro; discriminate.
+ intros rsrc rargs EQ.
+ generalize (add_reloads_correct (src :: args)
+ (Bstore chunk addr rargs rsrc (Bgoto s))
+ rs m LL DISJ).
+ intros [rs1 [EX1 [RES1 OTHER1]]].
+ rewrite EQ in RES1. simpl in RES1. injection RES1.
+ intros RES2 RES3.
+ exists rs1.
+ split. apply exec_Bgoto.
+ eapply exec_trans. rewrite <- EQ. eexact EX1.
+ apply exec_one. apply exec_Bstore with a.
+ rewrite RES2. assumption. rewrite RES3. assumption.
+ exact OTHER1.
+Qed.
+
+Lemma add_cond_correct:
+ forall cond args ifso ifnot rs m b s,
+ (List.length args <= 3)%nat ->
+ Loc.disjoint args temporaries ->
+ eval_condition cond (List.map rs args) = Some b ->
+ s = (if b then ifso else ifnot) ->
+ exists rs',
+ exec_block ge sp (add_cond cond args ifso ifnot) rs m (Cont s) rs' m /\
+ forall l, Loc.notin l temporaries -> rs' l = rs l.
+Proof.
+ intros. unfold add_cond.
+ set (rargs := regs_for args).
+ generalize (add_reloads_correct args
+ (Bcond cond rargs ifso ifnot)
+ rs m H H0).
+ intros [rs1 [EX1 [RES1 OTHER1]]].
+ fold rargs in EX1.
+ exists rs1.
+ split. destruct b; subst s.
+ eapply exec_Bcond_true. eexact EX1.
+ unfold rargs; rewrite RES1. assumption.
+ eapply exec_Bcond_false. eexact EX1.
+ unfold rargs; rewrite RES1. assumption.
+ exact OTHER1.
+Qed.
+
+Definition find_function2 (los: loc + ident) (ls: locset) : option function :=
+ match los with
+ | inl l => Genv.find_funct ge (ls l)
+ | inr symb =>
+ match Genv.find_symbol ge symb with
+ | None => None
+ | Some b => Genv.find_funct_ptr ge b
+ end
+ end.
+
+Lemma add_call_correct:
+ forall f vargs m vres m' sig los args res s ls
+ (EXECF:
+ forall lsi,
+ List.map lsi (loc_arguments f.(fn_sig)) = vargs ->
+ exists lso,
+ exec_function ge f lsi m lso m'
+ /\ lso (R (loc_result f.(fn_sig))) = vres)
+ (FIND: find_function2 los ls = Some f)
+ (SIG: sig = f.(fn_sig))
+ (VARGS: List.map ls args = vargs)
+ (LARGS: List.length args = List.length sig.(sig_args))
+ (AARGS: locs_acceptable args)
+ (RES: loc_acceptable res),
+ exists ls',
+ exec_block ge sp (add_call sig los args res s) ls m (Cont s) ls' m' /\
+ ls' res = vres /\
+ forall l,
+ Loc.notin l destroyed_at_call -> loc_acceptable l -> Loc.diff l res ->
+ ls' l = ls l.
+Proof.
+ intros until los.
+ case los; intro fn; intros; simpl in FIND; rewrite <- SIG in EXECF; unfold add_call.
+ (* indirect call *)
+ assert (LEN: List.length args = List.length (loc_arguments sig)).
+ rewrite LARGS. symmetry. apply loc_arguments_length.
+ pose (DISJ := locs_acceptable_disj_temporaries args AARGS).
+ generalize (add_reload_correct fn IT3
+ (parallel_move args (loc_arguments sig)
+ (Bcall sig (inl ident IT3)
+ (add_spill (loc_result sig) res (Bgoto s))))
+ ls m).
+ intros [ls1 [EX1 [RES1 OTHER1]]].
+ generalize
+ (parallel_move_correct args (loc_arguments sig)
+ (Bcall sig (inl ident IT3)
+ (add_spill (loc_result sig) res (Bgoto s)))
+ ls1 m LEN
+ (no_overlap_arguments args sig AARGS)
+ (loc_arguments_norepet sig)
+ DISJ
+ (loc_arguments_not_temporaries sig)).
+ intros [ls2 [EX2 [RES2 [TMP2 OTHER2]]]].
+ assert (PARAMS: List.map ls2 (loc_arguments sig) = vargs).
+ rewrite <- VARGS. rewrite RES2.
+ apply list_map_exten. intros. symmetry. apply OTHER1.
+ apply Loc.diff_sym. apply DISJ. auto. simpl; tauto.
+ generalize (EXECF ls2 PARAMS).
+ intros [ls3 [EX3 RES3]].
+ pose (ls4 := return_regs ls2 ls3).
+ generalize (add_spill_correct (loc_result sig) res
+ (Bgoto s) ls4 m').
+ intros [ls5 [EX5 [RES5 OTHER5]]].
+ exists ls5.
+ (* Execution *)
+ split. apply exec_Bgoto.
+ eapply exec_trans. eexact EX1.
+ eapply exec_trans. eexact EX2.
+ eapply exec_trans. apply exec_one. apply exec_Bcall with f.
+ unfold find_function. rewrite TMP2. rewrite RES1.
+ assumption. assumption. eexact EX3.
+ exact EX5.
+ (* Result *)
+ split. rewrite RES5. unfold ls4. rewrite return_regs_result.
+ assumption.
+ (* Other regs *)
+ intros. rewrite OTHER5; auto.
+ unfold ls4; rewrite return_regs_not_destroyed; auto.
+ rewrite OTHER2. apply OTHER1.
+ apply Loc.diff_sym. apply Loc.in_notin_diff with temporaries.
+ apply temporaries_not_acceptable; auto. simpl; tauto.
+ apply arguments_not_preserved; auto.
+ apply temporaries_not_acceptable; auto.
+ apply Loc.diff_sym; auto.
+ (* direct call *)
+ assert (LEN: List.length args = List.length (loc_arguments sig)).
+ rewrite LARGS. symmetry. apply loc_arguments_length.
+ pose (DISJ := locs_acceptable_disj_temporaries args AARGS).
+ generalize
+ (parallel_move_correct args (loc_arguments sig)
+ (Bcall sig (inr mreg fn)
+ (add_spill (loc_result sig) res (Bgoto s)))
+ ls m LEN
+ (no_overlap_arguments args sig AARGS)
+ (loc_arguments_norepet sig)
+ DISJ (loc_arguments_not_temporaries sig)).
+ intros [ls2 [EX2 [RES2 [TMP2 OTHER2]]]].
+ assert (PARAMS: List.map ls2 (loc_arguments sig) = vargs).
+ rewrite <- VARGS. rewrite RES2. auto.
+ generalize (EXECF ls2 PARAMS).
+ intros [ls3 [EX3 RES3]].
+ pose (ls4 := return_regs ls2 ls3).
+ generalize (add_spill_correct (loc_result sig) res
+ (Bgoto s) ls4 m').
+ intros [ls5 [EX5 [RES5 OTHER5]]].
+ exists ls5.
+ (* Execution *)
+ split. apply exec_Bgoto.
+ eapply exec_trans. eexact EX2.
+ eapply exec_trans. apply exec_one. apply exec_Bcall with f.
+ unfold find_function. assumption. assumption. eexact EX3.
+ exact EX5.
+ (* Result *)
+ split. rewrite RES5.
+ unfold ls4. rewrite return_regs_result.
+ assumption.
+ (* Other regs *)
+ intros. rewrite OTHER5; auto.
+ unfold ls4; rewrite return_regs_not_destroyed; auto.
+ apply OTHER2.
+ apply arguments_not_preserved; auto.
+ apply temporaries_not_acceptable; auto.
+ apply Loc.diff_sym; auto.
+Qed.
+
+Lemma add_undefs_correct:
+ forall res b ls m,
+ (forall l, In l res -> loc_acceptable l) ->
+ (forall ofs ty, In (S (Local ofs ty)) res -> ls (S (Local ofs ty)) = Vundef) ->
+ exists ls',
+ exec_instrs ge sp (add_undefs res b) ls m b ls' m /\
+ (forall l, In l res -> ls' l = Vundef) /\
+ (forall l, Loc.notin l res -> ls' l = ls l).
+Proof.
+ induction res; simpl; intros.
+ exists ls. split. apply exec_refl. tauto.
+ assert (ACC: forall l, In l res -> loc_acceptable l).
+ intros. apply H. tauto.
+ destruct a.
+ (* a is a register *)
+ pose (ls1 := Locmap.set (R m0) Vundef ls).
+ assert (UNDEFS: forall ofs ty, In (S (Local ofs ty)) res -> ls1 (S (Local ofs ty)) = Vundef).
+ intros. unfold ls1; rewrite Locmap.gso. auto. red; auto.
+ generalize (IHres b (Locmap.set (R m0) Vundef ls) m ACC UNDEFS).
+ intros [ls2 [EX2 [RES2 OTHER2]]].
+ exists ls2. split.
+ eapply exec_trans. apply exec_one. apply exec_Bop.
+ simpl; reflexivity. exact EX2.
+ split. intros. case (In_dec Loc.eq l res); intro.
+ apply RES2; auto.
+ rewrite OTHER2. elim H1; intro.
+ subst l. apply Locmap.gss.
+ contradiction.
+ apply loc_acceptable_notin_notin; auto.
+ intros. rewrite OTHER2. apply Locmap.gso.
+ apply Loc.diff_sym; tauto. tauto.
+ (* a is a stack location *)
+ assert (UNDEFS: forall ofs ty, In (S (Local ofs ty)) res -> ls (S (Local ofs ty)) = Vundef).
+ intros. apply H0. tauto.
+ generalize (IHres b ls m ACC UNDEFS).
+ intros [ls2 [EX2 [RES2 OTHER2]]].
+ exists ls2. split. assumption.
+ split. intros. case (In_dec Loc.eq l res); intro.
+ auto.
+ rewrite OTHER2. elim H1; intro.
+ subst l. generalize (H (S s) (in_eq _ _)).
+ unfold loc_acceptable; destruct s; intuition auto.
+ contradiction.
+ apply loc_acceptable_notin_notin; auto.
+ intros. apply OTHER2. tauto.
+Qed.
+
+Lemma add_entry_correct:
+ forall sig params undefs s ls m,
+ List.length params = List.length sig.(sig_args) ->
+ Loc.norepet params ->
+ locs_acceptable params ->
+ Loc.disjoint params undefs ->
+ locs_acceptable undefs ->
+ (forall ofs ty, ls (S (Local ofs ty)) = Vundef) ->
+ exists ls',
+ exec_block ge sp (add_entry sig params undefs s) ls m (Cont s) ls' m /\
+ List.map ls' params = List.map ls (loc_parameters sig) /\
+ (forall l, In l undefs -> ls' l = Vundef).
+Proof.
+ intros.
+ assert (List.length (loc_parameters sig) = List.length params).
+ unfold loc_parameters. rewrite list_length_map.
+ rewrite loc_arguments_length. auto.
+ assert (DISJ: Loc.disjoint params temporaries).
+ apply locs_acceptable_disj_temporaries; auto.
+ generalize (parallel_move_correct _ _ (add_undefs undefs (Bgoto s))
+ ls m H5
+ (no_overlap_parameters _ _ H1)
+ H0 (loc_parameters_not_temporaries sig) DISJ).
+ intros [ls1 [EX1 [RES1 [TMP1 OTHER1]]]].
+ assert (forall ofs ty, In (S (Local ofs ty)) undefs -> ls1 (S (Local ofs ty)) = Vundef).
+ intros. rewrite OTHER1. auto. apply Loc.disjoint_notin with undefs.
+ apply Loc.disjoint_sym. auto. auto.
+ simpl; tauto.
+ generalize (add_undefs_correct undefs (Bgoto s) ls1 m H3 H6).
+ intros [ls2 [EX2 [RES2 OTHER2]]].
+ exists ls2.
+ split. apply exec_Bgoto. unfold add_entry.
+ eapply exec_trans. eexact EX1. eexact EX2.
+ split. rewrite <- RES1. apply list_map_exten.
+ intros. symmetry. apply OTHER2. eapply Loc.disjoint_notin; eauto.
+ exact RES2.
+Qed.
+
+Lemma add_return_correct:
+ forall sig optarg ls m,
+ exists ls',
+ exec_block ge sp (add_return sig optarg) ls m Return ls' m /\
+ match optarg with
+ | Some arg => ls' (R (loc_result sig)) = ls arg
+ | None => ls' (R (loc_result sig)) = Vundef
+ end.
+Proof.
+ intros. unfold add_return.
+ destruct optarg.
+ generalize (add_reload_correct l (loc_result sig) Breturn ls m).
+ intros [ls1 [EX1 [RES1 OTH1]]].
+ exists ls1.
+ split. apply exec_Breturn. assumption. assumption.
+ exists (Locmap.set (R (loc_result sig)) Vundef ls).
+ split. apply exec_Breturn. apply exec_one.
+ apply exec_Bop. reflexivity. apply Locmap.gss.
+Qed.
+
+End LTL_CONSTRUCTORS.
+
+(** * Exploitation of the typing hypothesis *)
+
+(** Register allocation is applied to RTL code that passed type inference
+ (see file [RTLtyping]), and therefore is well-typed in the type system
+ of [RTLtyping]. We exploit this hypothesis to obtain information on
+ the number of arguments to operations, addressing modes and conditions. *)
+
+Remark length_type_of_condition:
+ forall (c: condition), (List.length (type_of_condition c) <= 3)%nat.
+Proof.
+ destruct c; unfold type_of_condition; simpl; omega.
+Qed.
+
+Remark length_type_of_operation:
+ forall (op: operation), (List.length (fst (type_of_operation op)) <= 3)%nat.
+Proof.
+ destruct op; unfold type_of_operation; simpl; try omega.
+ apply length_type_of_condition.
+Qed.
+
+Remark length_type_of_addressing:
+ forall (addr: addressing), (List.length (type_of_addressing addr) <= 2)%nat.
+Proof.
+ destruct addr; unfold type_of_addressing; simpl; omega.
+Qed.
+
+Lemma length_op_args:
+ forall (env: regenv) (op: operation) (args: list reg) (res: reg),
+ (List.map env args, env res) = type_of_operation op ->
+ (List.length args <= 3)%nat.
+Proof.
+ intros. rewrite <- (list_length_map env).
+ generalize (length_type_of_operation op).
+ rewrite <- H. simpl. auto.
+Qed.
+
+Lemma length_addr_args:
+ forall (env: regenv) (addr: addressing) (args: list reg),
+ List.map env args = type_of_addressing addr ->
+ (List.length args <= 2)%nat.
+Proof.
+ intros. rewrite <- (list_length_map env).
+ rewrite H. apply length_type_of_addressing.
+Qed.
+
+Lemma length_cond_args:
+ forall (env: regenv) (cond: condition) (args: list reg),
+ List.map env args = type_of_condition cond ->
+ (List.length args <= 3)%nat.
+Proof.
+ intros. rewrite <- (list_length_map env).
+ rewrite H. apply length_type_of_condition.
+Qed.
+
+(** * Preservation of semantics *)
+
+(** We now show that the LTL code reflecting register allocation has
+ the same semantics as the original RTL code. We start with
+ standard properties of translated functions and
+ global environments in the original and translated code. *)
+
+Section PRESERVATION.
+
+Variable prog: RTL.program.
+Variable tprog: LTL.program.
+Hypothesis TRANSF: transf_program prog = Some tprog.
+
+Let ge := Genv.globalenv prog.
+Let tge := Genv.globalenv tprog.
+
+Lemma symbols_preserved:
+ forall (s: ident), Genv.find_symbol tge s = Genv.find_symbol ge s.
+Proof.
+ intro. unfold ge, tge.
+ apply Genv.find_symbol_transf_partial with transf_function.
+ exact TRANSF.
+Qed.
+
+Lemma functions_translated:
+ forall (v: val) (f: RTL.function),
+ Genv.find_funct ge v = Some f ->
+ exists tf,
+ Genv.find_funct tge v = Some tf /\ transf_function f = Some tf.
+Proof.
+ intros.
+ generalize
+ (Genv.find_funct_transf_partial transf_function TRANSF H).
+ case (transf_function f).
+ intros tf [A B]. exists tf. tauto.
+ intros [A B]. elim B. reflexivity.
+Qed.
+
+Lemma function_ptr_translated:
+ forall (b: Values.block) (f: RTL.function),
+ Genv.find_funct_ptr ge b = Some f ->
+ exists tf,
+ Genv.find_funct_ptr tge b = Some tf /\ transf_function f = Some tf.
+Proof.
+ intros.
+ generalize
+ (Genv.find_funct_ptr_transf_partial transf_function TRANSF H).
+ case (transf_function f).
+ intros tf [A B]. exists tf. tauto.
+ intros [A B]. elim B. reflexivity.
+Qed.
+
+Lemma sig_function_translated:
+ forall f tf,
+ transf_function f = Some tf ->
+ tf.(LTL.fn_sig) = f.(RTL.fn_sig).
+Proof.
+ intros f tf. unfold transf_function.
+ destruct (type_rtl_function f).
+ destruct (analyze f).
+ destruct (regalloc f t0).
+ intro EQ; injection EQ; intro EQ1; rewrite <- EQ1; simpl; auto.
+ intros; discriminate.
+ intros; discriminate.
+ intros; discriminate.
+Qed.
+
+Lemma entrypoint_function_translated:
+ forall f tf,
+ transf_function f = Some tf ->
+ tf.(LTL.fn_entrypoint) = f.(RTL.fn_nextpc).
+Proof.
+ intros f tf. unfold transf_function.
+ destruct (type_rtl_function f).
+ destruct (analyze f).
+ destruct (regalloc f t0).
+ intro EQ; injection EQ; intro EQ1; rewrite <- EQ1; simpl; auto.
+ intros; discriminate.
+ intros; discriminate.
+ intros; discriminate.
+Qed.
+
+(** The proof of semantic preservation is a simulation argument
+ based on diagrams of the following form:
+<<
+ pc, rs, m ------------------- pc, ls, m
+ | |
+ | |
+ v v
+ pc', rs', m' ---------------- Cont pc', ls', m'
+>>
+ Hypotheses: the left vertical arrow represents a transition in the
+ original RTL code. The top horizontal bar expresses agreement between
+ [rs] and [ls] over the pseudo-registers live before the RTL instruction
+ at [pc].
+
+ Conclusions: the right vertical arrow is an [exec_blocks] transition
+ in the LTL code generated by translation of the current function.
+ The bottom horizontal bar expresses agreement between [rs'] and [ls']
+ over the pseudo-registers live after the RTL instruction at [pc]
+ (which implies agreement over the pseudo-registers live before
+ the instruction at [pc']).
+
+ We capture these diagrams in the following propositions parameterized
+ by the transition in the original RTL code (the left arrow).
+*)
+
+Definition exec_instr_prop
+ (c: RTL.code) (sp: val)
+ (pc: node) (rs: regset) (m: mem)
+ (pc': node) (rs': regset) (m': mem) : Prop :=
+ forall f env live assign ls
+ (CF: c = f.(RTL.fn_code))
+ (WT: wt_function env f)
+ (ASG: regalloc f live (live0 f live) env = Some assign)
+ (AG: agree assign (transfer f pc live!!pc) rs ls),
+ let tc := PTree.map (transf_instr f live assign) c in
+ exists ls',
+ exec_blocks tge tc sp pc ls m (Cont pc') ls' m' /\
+ agree assign live!!pc rs' ls'.
+
+Definition exec_instrs_prop
+ (c: RTL.code) (sp: val)
+ (pc: node) (rs: regset) (m: mem)
+ (pc': node) (rs': regset) (m': mem) : Prop :=
+ forall f env live assign ls,
+ forall (CF: c = f.(RTL.fn_code))
+ (WT: wt_function env f)
+ (ANL: analyze f = Some live)
+ (ASG: regalloc f live (live0 f live) env = Some assign)
+ (AG: agree assign (transfer f pc live!!pc) rs ls)
+ (VALIDPC': c!pc' <> None),
+ let tc := PTree.map (transf_instr f live assign) c in
+ exists ls',
+ exec_blocks tge tc sp pc ls m (Cont pc') ls' m' /\
+ agree assign (transfer f pc' live!!pc') rs' ls'.
+
+Definition exec_function_prop
+ (f: RTL.function) (args: list val) (m: mem)
+ (res: val) (m': mem) : Prop :=
+ forall ls tf,
+ transf_function f = Some tf ->
+ List.map ls (Conventions.loc_arguments tf.(fn_sig)) = args ->
+ exists ls',
+ LTL.exec_function tge tf ls m ls' m' /\
+ ls' (R (Conventions.loc_result tf.(fn_sig))) = res.
+
+(** The simulation proof is by structural induction over the RTL evaluation
+ derivation. We prove each case of the proof as a separate lemma.
+ There is one lemma for each RTL evaluation rule. Each lemma concludes
+ one of the [exec_*_prop] predicates, and takes the induction hypotheses
+ (if any) as hypotheses also expressed with the [exec_*_prop] predicates.
+*)
+
+Ltac CleanupHyps :=
+ match goal with
+ | H1: (PTree.get _ _ = Some _),
+ H2: (_ = RTL.fn_code _),
+ H3: (agree _ (transfer _ _ _) _ _) |- _ =>
+ unfold transfer in H3; rewrite <- H2 in H3; rewrite H1 in H3;
+ simpl in H3;
+ CleanupHyps
+ | H1: (PTree.get _ _ = Some _),
+ H2: (_ = RTL.fn_code _),
+ H3: (wt_function _ _) |- _ =>
+ let H := fresh in
+ let R := fresh "WTI" in (
+ generalize (wt_instrs _ _ H3); intro H;
+ rewrite <- H2 in H; generalize (H _ _ H1);
+ intro R; clear H; clear H3);
+ CleanupHyps
+ | _ => idtac
+ end.
+
+Ltac CleanupGoal :=
+ match goal with
+ | H1: (PTree.get _ _ = Some _) |- _ =>
+ eapply exec_blocks_one;
+ [rewrite PTree.gmap; rewrite H1;
+ unfold option_map; unfold transf_instr; reflexivity
+ |idtac]
+ end.
+
+Lemma transl_Inop_correct:
+ forall (c : PTree.t instruction) (sp: val) (pc : positive)
+ (rs : regset) (m : mem) (pc' : RTL.node),
+ c ! pc = Some (Inop pc') ->
+ exec_instr_prop c sp pc rs m pc' rs m.
+Proof.
+ intros; red; intros; CleanupHyps.
+ exists ls. split.
+ CleanupGoal. apply exec_Bgoto. apply exec_refl.
+ assumption.
+Qed.
+
+Lemma transl_Iop_correct:
+ forall (c : PTree.t instruction) (sp: val) (pc : positive)
+ (rs : Regmap.t val) (m : mem) (op : operation) (args : list reg)
+ (res : reg) (pc' : RTL.node) (v: val),
+ c ! pc = Some (Iop op args res pc') ->
+ eval_operation ge sp op (rs ## args) = Some v ->
+ exec_instr_prop c sp pc rs m pc' (rs # res <- v) m.
+Proof.
+ intros; red; intros; CleanupHyps.
+ caseEq (Regset.mem res live!!pc); intro LV;
+ rewrite LV in AG.
+ assert (LL: (List.length (List.map assign args) <= 3)%nat).
+ rewrite list_length_map.
+ inversion WTI. simpl; omega. simpl; omega.
+ eapply length_op_args. eauto.
+ assert (DISJ: Loc.disjoint (List.map assign args) temporaries).
+ eapply regalloc_disj_temporaries; eauto.
+ assert (eval_operation tge sp op (map ls (map assign args)) = Some v).
+ replace (map ls (map assign args)) with rs##args.
+ rewrite (eval_operation_preserved symbols_preserved). assumption.
+ symmetry. eapply agree_eval_regs; eauto.
+ generalize (add_op_correct tge sp op
+ (List.map assign args) (assign res)
+ pc' ls m v LL DISJ H1).
+ intros [ls' [EX [RES OTHER]]].
+ exists ls'. split.
+ CleanupGoal. rewrite LV. exact EX.
+ rewrite CF in H.
+ generalize (regalloc_correct_1 f env live _ _ _ _ ASG H).
+ unfold correct_alloc_instr.
+ caseEq (is_move_operation op args).
+ (* Special case for moves *)
+ intros arg IMO CORR.
+ generalize (is_move_operation_correct _ _ IMO).
+ intros [EQ1 EQ2]. subst op; subst args.
+ injection H0; intro. rewrite <- H2.
+ apply agree_move_live with f env live ls; auto.
+ rewrite RES. rewrite <- H2. symmetry. eapply agree_eval_reg.
+ simpl in AG. eexact AG.
+ (* Not a move *)
+ intros INMO CORR.
+ apply agree_assign_live with f env live ls; auto.
+ eapply agree_reg_list_live; eauto.
+ (* Result is not live, instruction turned into a nop *)
+ exists ls. split.
+ CleanupGoal. rewrite LV.
+ apply exec_Bgoto; apply exec_refl.
+ apply agree_assign_dead; assumption.
+Qed.
+
+Lemma transl_Iload_correct:
+ forall (c : PTree.t instruction) (sp: val) (pc : positive)
+ (rs : Regmap.t val) (m : mem) (chunk : memory_chunk)
+ (addr : addressing) (args : list reg) (dst : reg) (pc' : RTL.node)
+ (a v : val),
+ c ! pc = Some (Iload chunk addr args dst pc') ->
+ eval_addressing ge sp addr rs ## args = Some a ->
+ loadv chunk m a = Some v ->
+ exec_instr_prop c sp pc rs m pc' rs # dst <- v m.
+Proof.
+ intros; red; intros; CleanupHyps.
+ caseEq (Regset.mem dst live!!pc); intro LV;
+ rewrite LV in AG.
+ (* dst is live *)
+ assert (LL: (List.length (List.map assign args) <= 2)%nat).
+ rewrite list_length_map.
+ inversion WTI.
+ eapply length_addr_args. eauto.
+ assert (DISJ: Loc.disjoint (List.map assign args) temporaries).
+ eapply regalloc_disj_temporaries; eauto.
+ assert (EADDR:
+ eval_addressing tge sp addr (map ls (map assign args)) = Some a).
+ rewrite <- H0.
+ replace (rs##args) with (map ls (map assign args)).
+ apply eval_addressing_preserved. exact symbols_preserved.
+ eapply agree_eval_regs; eauto.
+ generalize (add_load_correct tge sp chunk addr
+ (List.map assign args) (assign dst)
+ pc' ls m _ _ LL DISJ EADDR H1).
+ intros [ls' [EX [RES OTHER]]].
+ exists ls'. split. CleanupGoal. rewrite LV. exact EX.
+ rewrite CF in H.
+ generalize (regalloc_correct_1 f env live _ _ _ _ ASG H).
+ unfold correct_alloc_instr. intro CORR.
+ eapply agree_assign_live; eauto.
+ eapply agree_reg_list_live; eauto.
+ (* dst is dead *)
+ exists ls. split.
+ CleanupGoal. rewrite LV.
+ apply exec_Bgoto; apply exec_refl.
+ apply agree_assign_dead; auto.
+Qed.
+
+Lemma transl_Istore_correct:
+ forall (c : PTree.t instruction) (sp: val) (pc : positive)
+ (rs : Regmap.t val) (m : mem) (chunk : memory_chunk)
+ (addr : addressing) (args : list reg) (src : reg) (pc' : RTL.node)
+ (a : val) (m' : mem),
+ c ! pc = Some (Istore chunk addr args src pc') ->
+ eval_addressing ge sp addr rs ## args = Some a ->
+ storev chunk m a rs # src = Some m' ->
+ exec_instr_prop c sp pc rs m pc' rs m'.
+Proof.
+ intros; red; intros; CleanupHyps.
+ assert (LL: (List.length (List.map assign args) <= 2)%nat).
+ rewrite list_length_map.
+ inversion WTI.
+ eapply length_addr_args. eauto.
+ assert (DISJ: Loc.disjoint (List.map assign args) temporaries).
+ eapply regalloc_disj_temporaries; eauto.
+ assert (SRC: Loc.notin (assign src) temporaries).
+ eapply regalloc_not_temporary; eauto.
+ assert (EADDR:
+ eval_addressing tge sp addr (map ls (map assign args)) = Some a).
+ rewrite <- H0.
+ replace (rs##args) with (map ls (map assign args)).
+ apply eval_addressing_preserved. exact symbols_preserved.
+ eapply agree_eval_regs; eauto.
+ assert (ESRC: ls (assign src) = rs#src).
+ eapply agree_eval_reg. eapply agree_reg_list_live. eauto.
+ rewrite <- ESRC in H1.
+ generalize (add_store_correct tge sp chunk addr
+ (List.map assign args) (assign src)
+ pc' ls m m' a LL DISJ SRC EADDR H1).
+ intros [ls' [EX RES]].
+ exists ls'. split. CleanupGoal. exact EX.
+ rewrite CF in H.
+ generalize (regalloc_correct_1 f env live _ _ _ _ ASG H).
+ unfold correct_alloc_instr. intro CORR.
+ eapply agree_exten. eauto.
+ eapply agree_reg_live. eapply agree_reg_list_live. eauto.
+ assumption.
+Qed.
+
+Lemma transl_Icall_correct:
+ forall (c : PTree.t instruction) (sp: val) (pc : positive)
+ (rs : regset) (m : mem) (sig : signature) (ros : reg + ident)
+ (args : list reg) (res : reg) (pc' : RTL.node)
+ (f : RTL.function) (vres : val) (m' : mem),
+ c ! pc = Some (Icall sig ros args res pc') ->
+ RTL.find_function ge ros rs = Some f ->
+ sig = RTL.fn_sig f ->
+ RTL.exec_function ge f (rs##args) m vres m' ->
+ exec_function_prop f (rs##args) m vres m' ->
+ exec_instr_prop c sp pc rs m pc' (rs#res <- vres) m'.
+Proof.
+ intros; red; intros; CleanupHyps.
+ set (los := sum_left_map assign ros).
+ assert (FIND: exists tf,
+ find_function2 tge los ls = Some tf /\
+ transf_function f = Some tf).
+ unfold los. destruct ros; simpl; simpl in H0.
+ apply functions_translated.
+ replace (ls (assign r)) with rs#r. assumption.
+ simpl in AG. symmetry; eapply agree_eval_reg.
+ eapply agree_reg_list_live; eauto.
+ rewrite symbols_preserved. destruct (Genv.find_symbol ge i).
+ apply function_ptr_translated. auto.
+ discriminate.
+ elim FIND; intros tf [AFIND TRF]; clear FIND.
+ assert (ASIG: sig = fn_sig tf).
+ rewrite (sig_function_translated _ _ TRF). auto.
+ generalize (fun ls => H3 ls tf TRF); intro AEXECF.
+ assert (AVARGS: List.map ls (List.map assign args) = rs##args).
+ eapply agree_eval_regs; eauto.
+ assert (ALARGS: List.length (List.map assign args) =
+ List.length sig.(sig_args)).
+ inversion WTI. rewrite <- H10.
+ repeat rewrite list_length_map. auto.
+ assert (AACCEPT: locs_acceptable (List.map assign args)).
+ eapply regsalloc_acceptable; eauto.
+ rewrite CF in H.
+ generalize (regalloc_correct_1 f0 env live _ _ _ _ ASG H).
+ unfold correct_alloc_instr. intros [CORR1 CORR2].
+ assert (ARES: loc_acceptable (assign res)).
+ eapply regalloc_acceptable; eauto.
+ generalize (add_call_correct tge sp tf _ _ _ _ _ _ _ _ pc' _
+ AEXECF AFIND ASIG AVARGS ALARGS
+ AACCEPT ARES).
+ intros [ls' [EX [RES OTHER]]].
+ exists ls'.
+ split. rewrite CF. CleanupGoal. exact EX.
+ simpl. eapply agree_call; eauto.
+Qed.
+
+Lemma transl_Icond_true_correct:
+ forall (c : PTree.t instruction) (sp: val) (pc : positive)
+ (rs : Regmap.t val) (m : mem) (cond : condition) (args : list reg)
+ (ifso ifnot : RTL.node),
+ c ! pc = Some (Icond cond args ifso ifnot) ->
+ eval_condition cond rs ## args = Some true ->
+ exec_instr_prop c sp pc rs m ifso rs m.
+Proof.
+ intros; red; intros; CleanupHyps.
+ assert (LL: (List.length (map assign args) <= 3)%nat).
+ rewrite list_length_map. inversion WTI.
+ eapply length_cond_args. eauto.
+ assert (DISJ: Loc.disjoint (map assign args) temporaries).
+ eapply regalloc_disj_temporaries; eauto.
+ assert (COND: eval_condition cond (map ls (map assign args)) = Some true).
+ replace (map ls (map assign args)) with rs##args. assumption.
+ symmetry. eapply agree_eval_regs; eauto.
+ generalize (add_cond_correct tge sp _ _ _ ifnot _ m _ _
+ LL DISJ COND (refl_equal ifso)).
+ intros [ls' [EX OTHER]].
+ exists ls'. split.
+ CleanupGoal. assumption.
+ eapply agree_exten. eauto. eapply agree_reg_list_live. eauto.
+ assumption.
+Qed.
+
+Lemma transl_Icond_false_correct:
+ forall (c : PTree.t instruction) (sp: val) (pc : positive)
+ (rs : Regmap.t val) (m : mem) (cond : condition) (args : list reg)
+ (ifso ifnot : RTL.node),
+ c ! pc = Some (Icond cond args ifso ifnot) ->
+ eval_condition cond rs ## args = Some false ->
+ exec_instr_prop c sp pc rs m ifnot rs m.
+Proof.
+ intros; red; intros; CleanupHyps.
+ assert (LL: (List.length (map assign args) <= 3)%nat).
+ rewrite list_length_map. inversion WTI.
+ eapply length_cond_args. eauto.
+ assert (DISJ: Loc.disjoint (map assign args) temporaries).
+ eapply regalloc_disj_temporaries; eauto.
+ assert (COND: eval_condition cond (map ls (map assign args)) = Some false).
+ replace (map ls (map assign args)) with rs##args. assumption.
+ symmetry. eapply agree_eval_regs; eauto.
+ generalize (add_cond_correct tge sp _ _ ifso _ _ m _ _
+ LL DISJ COND (refl_equal ifnot)).
+ intros [ls' [EX OTHER]].
+ exists ls'. split.
+ CleanupGoal. assumption.
+ eapply agree_exten. eauto. eapply agree_reg_list_live. eauto.
+ assumption.
+Qed.
+
+Lemma transl_refl_correct:
+ forall (c : RTL.code) (sp: val) (pc : RTL.node) (rs : regset)
+ (m : mem), exec_instrs_prop c sp pc rs m pc rs m.
+Proof.
+ intros; red; intros.
+ exists ls. split. apply exec_blocks_refl. assumption.
+Qed.
+
+Lemma transl_one_correct:
+ forall (c : RTL.code) (sp: val) (pc : RTL.node) (rs : regset)
+ (m : mem) (pc' : RTL.node) (rs' : regset) (m' : mem),
+ RTL.exec_instr ge c sp pc rs m pc' rs' m' ->
+ exec_instr_prop c sp pc rs m pc' rs' m' ->
+ exec_instrs_prop c sp pc rs m pc' rs' m'.
+Proof.
+ intros; red; intros.
+ generalize (H0 f env live assign ls CF WT ASG AG).
+ intros [ls' [EX AG']].
+ exists ls'. split.
+ exact EX.
+ apply agree_increasing with live!!pc.
+ apply analyze_correct. auto.
+ rewrite <- CF. eapply exec_instr_present; eauto.
+ rewrite <- CF. auto.
+ eapply RTL.successors_correct.
+ rewrite <- CF. eexact H. exact AG'.
+Qed.
+
+Lemma transl_trans_correct:
+ forall (c : RTL.code) (sp: val) (pc1 : RTL.node) (rs1 : regset)
+ (m1 : mem) (pc2 : RTL.node) (rs2 : regset) (m2 : mem)
+ (pc3 : RTL.node) (rs3 : regset) (m3 : mem),
+ RTL.exec_instrs ge c sp pc1 rs1 m1 pc2 rs2 m2 ->
+ exec_instrs_prop c sp pc1 rs1 m1 pc2 rs2 m2 ->
+ RTL.exec_instrs ge c sp pc2 rs2 m2 pc3 rs3 m3 ->
+ exec_instrs_prop c sp pc2 rs2 m2 pc3 rs3 m3 ->
+ exec_instrs_prop c sp pc1 rs1 m1 pc3 rs3 m3.
+Proof.
+ intros; red; intros.
+ assert (VALIDPC2: c!pc2 <> None).
+ eapply exec_instrs_present; eauto.
+ generalize (H0 f env live assign ls CF WT ANL ASG AG VALIDPC2).
+ intros [ls1 [EX1 AG1]].
+ generalize (H2 f env live assign ls1 CF WT ANL ASG AG1 VALIDPC').
+ intros [ls2 [EX2 AG2]].
+ exists ls2. split.
+ eapply exec_blocks_trans. eexact EX1. exact EX2.
+ exact AG2.
+Qed.
+
+Remark regset_mem_reg_list_dead:
+ forall rl r live,
+ Regset.mem r (reg_list_dead rl live) = true ->
+ ~(In r rl) /\ Regset.mem r live = true.
+Proof.
+ induction rl; simpl; intros.
+ tauto.
+ elim (IHrl r (reg_dead a live) H). intros.
+ assert (a <> r). red; intro; subst r.
+ rewrite Regset.mem_remove_same in H1. discriminate.
+ rewrite Regset.mem_remove_other in H1; auto.
+ tauto.
+Qed.
+
+Lemma transf_entrypoint_correct:
+ forall f env live assign c ls args sp m,
+ wt_function env f ->
+ regalloc f live (live0 f live) env = Some assign ->
+ c!(RTL.fn_nextpc f) = None ->
+ List.map ls (loc_parameters (RTL.fn_sig f)) = args ->
+ (forall ofs ty, ls (S (Local ofs ty)) = Vundef) ->
+ let tc := transf_entrypoint f live assign c in
+ exists ls',
+ exec_blocks tge tc sp (RTL.fn_nextpc f) ls m
+ (Cont (RTL.fn_entrypoint f)) ls' m /\
+ agree assign (transfer f (RTL.fn_entrypoint f) live!!(RTL.fn_entrypoint f))
+ (init_regs args (RTL.fn_params f)) ls'.
+Proof.
+ intros until m.
+ unfold transf_entrypoint.
+ set (oldentry := RTL.fn_entrypoint f).
+ set (newentry := RTL.fn_nextpc f).
+ set (params := RTL.fn_params f).
+ set (undefs := Regset.elements (reg_list_dead params (transfer f oldentry live!!oldentry))).
+ intros.
+
+ assert (A1: List.length (List.map assign params) =
+ List.length (RTL.fn_sig f).(sig_args)).
+ rewrite <- (wt_params _ _ H).
+ repeat (rewrite list_length_map). auto.
+ assert (A2: Loc.norepet (List.map assign (RTL.fn_params f))).
+ eapply regalloc_norepet_norepet; eauto.
+ eapply regalloc_correct_2; eauto.
+ eapply wt_norepet; eauto.
+ assert (A3: locs_acceptable (List.map assign (RTL.fn_params f))).
+ eapply regsalloc_acceptable; eauto.
+ assert (A4: Loc.disjoint
+ (List.map assign (RTL.fn_params f))
+ (List.map assign undefs)).
+ red. intros ap au INAP INAU.
+ generalize (list_in_map_inv _ _ _ INAP).
+ intros [p [AP INP]]. clear INAP; subst ap.
+ generalize (list_in_map_inv _ _ _ INAU).
+ intros [u [AU INU]]. clear INAU; subst au.
+ generalize (Regset.elements_complete _ _ INU). intro.
+ generalize (regset_mem_reg_list_dead _ _ _ H4).
+ intros [A B].
+ eapply regalloc_noteq_diff; eauto.
+ eapply regalloc_correct_3; eauto.
+ red; intro; subst u. elim (A INP).
+ assert (A5: forall l, In l (List.map assign undefs) -> loc_acceptable l).
+ intros.
+ generalize (list_in_map_inv _ _ _ H4).
+ intros [r [AR INR]]. clear H4; subst l.
+ eapply regalloc_acceptable; eauto.
+ generalize (add_entry_correct
+ tge sp (RTL.fn_sig f)
+ (List.map assign (RTL.fn_params f))
+ (List.map assign undefs)
+ oldentry ls m A1 A2 A3 A4 A5 H3).
+ intros [ls1 [EX1 [PARAMS1 UNDEFS1]]].
+ exists ls1.
+ split. eapply exec_blocks_one.
+ rewrite PTree.gss. reflexivity.
+ assumption.
+ change (transfer f oldentry live!!oldentry)
+ with (live0 f live).
+ unfold params; eapply agree_parameters; eauto.
+ change Regset.elt with reg in PARAMS1.
+ rewrite PARAMS1. assumption.
+ fold oldentry; fold params. intros.
+ apply UNDEFS1. apply in_map.
+ unfold undefs; apply Regset.elements_correct; auto.
+Qed.
+
+Lemma transl_function_correct:
+ forall (f : RTL.function) (m m1 : mem) (stk : Values.block)
+ (args : list val) (pc : RTL.node) (rs : regset) (m2 : mem)
+ (or : option reg) (vres : val),
+ alloc m 0 (RTL.fn_stacksize f) = (m1, stk) ->
+ RTL.exec_instrs ge (RTL.fn_code f) (Vptr stk Int.zero)
+ (RTL.fn_entrypoint f) (init_regs args (fn_params f)) m1 pc rs m2 ->
+ exec_instrs_prop (RTL.fn_code f) (Vptr stk Int.zero)
+ (RTL.fn_entrypoint f) (init_regs args (fn_params f)) m1 pc rs m2 ->
+ (RTL.fn_code f) ! pc = Some (Ireturn or) ->
+ vres = regmap_optget or Vundef rs ->
+ exec_function_prop f args m vres (free m2 stk).
+Proof.
+ intros; red; intros until tf.
+ unfold transf_function.
+ caseEq (type_rtl_function f).
+ intros env TRF.
+ caseEq (analyze f).
+ intros live ANL.
+ change (transfer f (RTL.fn_entrypoint f) live!!(RTL.fn_entrypoint f))
+ with (live0 f live).
+ caseEq (regalloc f live (live0 f live) env).
+ intros alloc ASG.
+ set (tc1 := PTree.map (transf_instr f live alloc) (RTL.fn_code f)).
+ set (tc2 := transf_entrypoint f live alloc tc1).
+ intro EQ; injection EQ; intro TF; clear EQ. intro VARGS.
+ generalize (type_rtl_function_correct _ _ TRF); intro WTF.
+ assert (NEWINSTR: tc1!(RTL.fn_nextpc f) = None).
+ unfold tc1; rewrite PTree.gmap. unfold option_map.
+ elim (RTL.fn_code_wf f (fn_nextpc f)); intro.
+ elim (Plt_ne _ _ H4). auto.
+ rewrite H4. auto.
+ pose (ls1 := call_regs ls).
+ assert (VARGS1: List.map ls1 (loc_parameters (RTL.fn_sig f)) = args).
+ replace (RTL.fn_sig f) with (fn_sig tf).
+ rewrite <- VARGS. unfold loc_parameters.
+ rewrite list_map_compose. apply list_map_exten.
+ intros. symmetry. unfold ls1. eapply call_regs_param_of_arg; eauto.
+ rewrite <- TF; reflexivity.
+ assert (VUNDEFS: forall (ofs : Z) (ty : typ), ls1 (S (Local ofs ty)) = Vundef).
+ intros. reflexivity.
+ generalize (transf_entrypoint_correct f env live alloc
+ tc1 ls1 args (Vptr stk Int.zero) m1
+ WTF ASG NEWINSTR VARGS1 VUNDEFS).
+ fold tc2. intros [ls2 [EX2 AGREE2]].
+ assert (VALIDPC: f.(RTL.fn_code)!pc <> None). congruence.
+ generalize (H1 f env live alloc ls2
+ (refl_equal _) WTF ANL ASG AGREE2 VALIDPC).
+ fold tc1. intros [ls3 [EX3 AGREE3]].
+ generalize (add_return_correct tge (Vptr stk Int.zero) (RTL.fn_sig f)
+ (option_map alloc or) ls3 m2).
+ intros [ls4 [EX4 RES4]].
+ exists ls4.
+ (* Execution *)
+ split. apply exec_funct with m1.
+ rewrite <- TF; simpl; assumption.
+ rewrite <- TF; simpl. fold ls1.
+ eapply exec_blocks_trans. eexact EX2.
+ apply exec_blocks_extends with tc1.
+ intro p. unfold tc2. unfold transf_entrypoint.
+ case (peq p (fn_nextpc f)); intro.
+ subst p. right. unfold tc1; rewrite PTree.gmap.
+ elim (RTL.fn_code_wf f (fn_nextpc f)); intro.
+ elim (Plt_ne _ _ H4); auto. rewrite H4; reflexivity.
+ left; apply PTree.gso; auto.
+ eapply exec_blocks_trans. eexact EX3.
+ eapply exec_blocks_one.
+ unfold tc1. rewrite PTree.gmap. rewrite H2. simpl. reflexivity.
+ exact EX4.
+ destruct or.
+ simpl in RES4. simpl in H3.
+ rewrite H3. rewrite <- TF; simpl. rewrite RES4.
+ eapply agree_eval_reg; eauto.
+ unfold transfer in AGREE3; rewrite H2 in AGREE3.
+ unfold reg_option_live in AGREE3. eexact AGREE3.
+ simpl in RES4. simpl in H3.
+ rewrite <- TF; simpl. congruence.
+ intros; discriminate.
+ intros; discriminate.
+ intros; discriminate.
+Qed.
+
+(** The correctness of the code transformation is obtained by
+ structural induction (and case analysis on the last rule used)
+ on the RTL evaluation derivation.
+ This is a 3-way mutual induction, using [exec_instr_prop],
+ [exec_instrs_prop] and [exec_function_prop] as the induction
+ hypotheses, and the lemmas above as cases for the induction. *)
+
+Scheme exec_instr_ind_3 := Minimality for RTL.exec_instr Sort Prop
+ with exec_instrs_ind_3 := Minimality for RTL.exec_instrs Sort Prop
+ with exec_function_ind_3 := Minimality for RTL.exec_function Sort Prop.
+
+Theorem transl_function_correctness:
+ forall f args m res m',
+ RTL.exec_function ge f args m res m' ->
+ exec_function_prop f args m res m'.
+Proof
+ (exec_function_ind_3 ge
+ exec_instr_prop
+ exec_instrs_prop
+ exec_function_prop
+
+ transl_Inop_correct
+ transl_Iop_correct
+ transl_Iload_correct
+ transl_Istore_correct
+ transl_Icall_correct
+ transl_Icond_true_correct
+ transl_Icond_false_correct
+
+ transl_refl_correct
+ transl_one_correct
+ transl_trans_correct
+
+ transl_function_correct).
+
+(** The semantic equivalence between the original and transformed programs
+ follows easily. *)
+
+Theorem transl_program_correct:
+ forall (r: val),
+ RTL.exec_program prog r -> LTL.exec_program tprog r.
+Proof.
+ intros r [b [f [m [FIND1 [FIND2 [SIG EXEC]]]]]].
+ generalize (function_ptr_translated _ _ FIND2).
+ intros [tf [TFIND TRF]].
+ assert (SIG2: tf.(fn_sig) = mksignature nil (Some Tint)).
+ rewrite <- SIG. apply sig_function_translated; auto.
+ assert (VPARAMS: map (Locmap.init Vundef) (loc_arguments (fn_sig tf)) = nil).
+ rewrite SIG2. reflexivity.
+ generalize (transl_function_correctness _ _ _ _ _ EXEC
+ (Locmap.init Vundef) tf TRF VPARAMS).
+ intros [ls' [TEXEC RES]].
+ red. exists b; exists tf; exists ls'; exists m.
+ split. rewrite symbols_preserved.
+ rewrite (transform_partial_program_main _ _ TRANSF).
+ assumption.
+ split. assumption.
+ split. assumption.
+ split. replace (Genv.init_mem tprog) with (Genv.init_mem prog).
+ assumption. symmetry.
+ exact (Genv.init_mem_transf_partial _ _ TRANSF).
+ assumption.
+Qed.
+
+End PRESERVATION.
diff --git a/backend/Allocproof_aux.v b/backend/Allocproof_aux.v
new file mode 100644
index 0000000..d1b213e
--- /dev/null
+++ b/backend/Allocproof_aux.v
@@ -0,0 +1,850 @@
+(** Correctness results for the [parallel_move] function defined in
+ file [Allocation].
+
+ The present file, contributed by Laurence Rideau, glues the general
+ results over the parallel move algorithm (see file [Parallelmove])
+ with the correctness proof for register allocation (file [Allocproof]).
+*)
+
+Require Import Coqlib.
+Require Import Values.
+Require Import Parallelmove.
+Require Import Allocation.
+Require Import LTL.
+Require Import Locations.
+Require Import Conventions.
+
+Section parallel_move_correction.
+Variable ge : LTL.genv.
+Variable sp : val.
+Hypothesis
+ add_move_correct :
+ forall src dst k rs m,
+ (exists rs' ,
+ exec_instrs ge sp (add_move src dst k) rs m k rs' m /\
+ (rs' dst = rs src /\
+ (forall l,
+ Loc.diff l dst ->
+ Loc.diff l (R IT1) -> Loc.diff l (R FT1) -> rs' l = rs l)) ).
+
+Lemma exec_instr_update:
+ forall a1 a2 k e m,
+ (exists rs' ,
+ exec_instrs ge sp (add_move a1 a2 k) e m k rs' m /\
+ (rs' a2 = update e a2 (e a1) a2 /\
+ (forall l,
+ Loc.diff l a2 ->
+ Loc.diff l (R IT1) -> Loc.diff l (R FT1) -> rs' l = (update e a2 (e a1)) l))
+ ).
+Proof.
+intros; destruct (add_move_correct a1 a2 k e m) as [rs' [Hf [R1 R2]]].
+exists rs'; (repeat split); auto.
+generalize (get_update_id e a2); unfold get, Locmap.get; intros H; rewrite H;
+ auto.
+intros l H0; generalize (get_update_diff e a2); unfold get, Locmap.get;
+ intros H; rewrite H; auto.
+apply Loc.diff_sym; assumption.
+Qed.
+
+Lemma map_inv:
+ forall (A B : Set) (f f' : A -> B) l,
+ map f l = map f' l -> forall x, In x l -> f x = f' x.
+Proof.
+induction l; simpl; intros Hmap x Hin.
+elim Hin.
+inversion Hmap.
+elim Hin; intros H; [subst a | apply IHl]; auto.
+Qed.
+
+Fixpoint reswellFormed (p : Moves) : Prop :=
+ match p with
+ nil => True
+ | (s, d) :: l => Loc.notin s (getdst l) /\ reswellFormed l
+ end.
+
+Definition temporaries1 := R IT1 :: (R FT1 :: nil).
+
+Lemma no_overlap_list_pop:
+ forall p m, no_overlap_list (m :: p) -> no_overlap_list p.
+Proof.
+induction p; unfold no_overlap_list, no_overlap; destruct m as [m1 m2]; simpl;
+ auto.
+Qed.
+
+Lemma exec_instrs_pmov:
+ forall p k rs m,
+ no_overlap_list p ->
+ Loc.disjoint (getdst p) temporaries1 ->
+ Loc.disjoint (getsrc p) temporaries1 ->
+ (exists rs' ,
+ exec_instrs
+ ge sp
+ (fold_left
+ (fun (k0 : block) => fun (p0 : loc * loc) => add_move (fst p0) (snd p0) k0)
+ p k) rs m k rs' m /\
+ (forall l,
+ (forall r, In r (getdst p) -> r = l \/ Loc.diff r l) ->
+ Loc.diff l (Locations.R IT1) ->
+ Loc.diff l (Locations.R FT1) -> rs' l = (sexec p rs) l) ).
+Proof.
+induction p; intros k rs m.
+simpl; exists rs; (repeat split); auto; apply exec_refl.
+destruct a as [a1 a2]; simpl; intros Hno_O Hdisd Hdiss;
+ elim (IHp (add_move a1 a2 k) rs m);
+ [idtac | apply no_overlap_list_pop with (a1, a2) |
+ apply (Loc.disjoint_cons_left a2) | apply (Loc.disjoint_cons_left a1)];
+ (try assumption).
+intros rs' Hexec;
+ destruct (add_move_correct a1 a2 k rs' m) as [rs'' [Hexec2 [R1 R2]]].
+exists rs''; elim Hexec; intros; (repeat split).
+apply exec_trans with ( b2 := add_move a1 a2 k ) ( rs2 := rs' ) ( m2 := m );
+ auto.
+intros l Heqd Hdi Hdf; case (Loc.eq a2 l); intro.
+subst l; generalize get_update_id; unfold get, Locmap.get; intros Hgui;
+ rewrite Hgui; rewrite R1.
+apply H0; auto.
+unfold no_overlap_list, no_overlap in Hno_O |-; simpl in Hno_O |-; intros;
+ generalize (Hno_O a1).
+intros H8; elim H8 with ( s := r );
+ [intros H9; left | intros H9; right; apply Loc.diff_sym | left | right]; auto.
+unfold Loc.disjoint in Hdiss |-; apply Hdiss; simpl; left; trivial.
+apply Hdiss; simpl; [left | right; left]; auto.
+elim (Heqd a2);
+ [intros H7; absurd (a2 = l); auto | intros H7; auto | left; trivial].
+generalize get_update_diff; unfold get, Locmap.get; intros H6; rewrite H6; auto.
+rewrite R2; auto.
+apply Loc.diff_sym; auto.
+Qed.
+
+Definition p_move :=
+ fun (l : list (loc * loc)) =>
+ fun (k : block) =>
+ fold_left
+ (fun (k0 : block) => fun (p : loc * loc) => add_move (fst p) (snd p) k0)
+ (P_move l) k.
+
+Lemma norepet_SD: forall p, Loc.norepet (getdst p) -> simpleDest p.
+Proof.
+induction p; (simpl; auto).
+destruct a as [a1 a2].
+intro; inversion H.
+split.
+apply notindst_nW; auto.
+apply IHp; auto.
+Qed.
+
+Theorem SDone_stepf:
+ forall S1, StateDone (stepf S1) = nil -> StateDone S1 = nil.
+Proof.
+destruct S1 as [[t b] d]; destruct t.
+destruct b; auto.
+destruct m as [m1 m2]; simpl.
+destruct b.
+simpl; intro; discriminate.
+case (Loc.eq m2 (fst (last (m :: b)))); simpl; intros; discriminate.
+destruct m as [a1 a2]; simpl.
+destruct b.
+case (Loc.eq a1 a2); simpl; intros; auto.
+destruct m as [m1 m2]; case (Loc.eq a1 m2); intro; (try (simpl; auto; fail)).
+case (split_move t m2).
+(repeat destruct p); simpl; intros; auto.
+destruct b; (try (simpl; intro; discriminate)); auto.
+case (Loc.eq m2 (fst (last (m :: b)))); intro; simpl; intro; discriminate.
+Qed.
+
+Theorem SDone_Pmov: forall S1, StateDone (Pmov S1) = nil -> StateDone S1 = nil.
+Proof.
+intros S1; elim S1 using (well_founded_ind (Wf_nat.well_founded_ltof _ mesure)).
+clear S1; intros S1; intros Hrec.
+destruct S1 as [[t b] d].
+rewrite Pmov_equation.
+destruct t.
+destruct b; auto.
+intro; assert (StateDone (stepf (nil, m :: b, d)) = nil);
+ [apply Hrec; auto; apply stepf1_dec | apply SDone_stepf]; auto.
+intro; assert (StateDone (stepf (m :: t, b, d)) = nil);
+ [apply Hrec; auto; apply stepf1_dec | apply SDone_stepf]; auto.
+Qed.
+
+Lemma no_overlap_temp: forall r s, In s temporaries -> r = s \/ Loc.diff r s.
+Proof.
+intros r s H; case (Loc.eq r s); intros e; [left | right]; (try assumption).
+unfold Loc.diff; destruct r.
+destruct s; trivial.
+red; intro; elim e; rewrite H0; auto.
+destruct s0; destruct s; trivial;
+ (elim H; [intros H1 | intros [H1|[H1|[H1|[H1|[H1|H1]]]]]]; (try discriminate);
+ inversion H1).
+Qed.
+
+Lemma getsrcdst_app:
+ forall l1 l2,
+ getdst l1 ++ getdst l2 = getsrc l1 ++ getsrc l2 ->
+ getdst l1 = getsrc l1 /\ getdst l2 = getsrc l2.
+Proof.
+induction l1; simpl; auto.
+destruct a as [a1 a2]; intros; inversion H.
+subst a1; inversion H;
+ (elim IHl1 with ( l2 := l2 );
+ [intros H0 H3; (try clear IHl1); (try exact H0) | idtac]; auto).
+rewrite H0; auto.
+Qed.
+
+Lemma In_norepet:
+ forall r x l, Loc.norepet l -> In x l -> In r l -> r = x \/ Loc.diff r x.
+Proof.
+induction l; simpl; intros.
+elim H1.
+inversion H.
+subst hd.
+elim H1; intros H2; clear H1; elim H0; intros H1.
+rewrite <- H1; rewrite <- H2; auto.
+subst a; right; apply Loc.in_notin_diff with l; auto.
+subst a; right; apply Loc.diff_sym; apply Loc.in_notin_diff with l; auto.
+apply IHl; auto.
+Qed.
+
+Definition no_overlap_stateD (S : State) :=
+ no_overlap
+ (getsrc (StateToMove S ++ (StateBeing S ++ StateDone S)))
+ (getdst (StateToMove S ++ (StateBeing S ++ StateDone S))).
+
+Ltac
+incl_tac_rec :=
+(auto with datatypes; fail)
+ ||
+ (apply in_cons; incl_tac_rec)
+ ||
+ (apply in_or_app; left; incl_tac_rec)
+ ||
+ (apply in_or_app; right; incl_tac_rec)
+ ||
+ (apply incl_appl; incl_tac_rec) ||
+ (apply incl_appr; incl_tac_rec) || (apply incl_tl; incl_tac_rec).
+
+Ltac incl_tac := (repeat (apply incl_cons || apply incl_app)); incl_tac_rec.
+
+Ltac
+in_tac :=
+match goal with
+| |- In ?x ?L1 =>
+match goal with
+| H:In x ?L2 |- _ =>
+let H1 := fresh "H" in
+(assert (H1: incl L2 L1); [incl_tac | apply (H1 x)]); auto; fail
+| _ => fail end end.
+
+Lemma in_cons_noteq:
+ forall (A : Set) (a b : A) (l : list A), In a (b :: l) -> a <> b -> In a l.
+Proof.
+intros A a b l; simpl; intros.
+elim H; intros H1; (try assumption).
+absurd (a = b); auto.
+Qed.
+
+Lemma no_overlapD_inv:
+ forall S1 S2, step S1 S2 -> no_overlap_stateD S1 -> no_overlap_stateD S2.
+Proof.
+intros S1 S2 STEP; inversion STEP; unfold no_overlap_stateD, no_overlap; simpl;
+ auto; (repeat (rewrite getsrc_app; rewrite getdst_app; simpl)); intros.
+apply H1; in_tac.
+destruct m as [m1 m2]; apply H1; in_tac.
+apply H1; in_tac.
+case (Loc.eq r (T r0)); intros e.
+elim (no_overlap_temp s0 r);
+ [intro; left; auto | intro; right; apply Loc.diff_sym; auto | unfold T in e |-].
+destruct (Loc.type r0); simpl; [right; left | right; right; right; right; left];
+ auto.
+case (Loc.eq s0 (T r0)); intros es.
+apply (no_overlap_temp r s0); unfold T in es |-; destruct (Loc.type r0); simpl;
+ [right; left | right; right; right; right; left]; auto.
+apply H1; apply in_cons_noteq with ( b := T r0 ); auto; in_tac.
+apply H3; in_tac.
+Qed.
+
+Lemma no_overlapD_invpp:
+ forall S1 S2, stepp S1 S2 -> no_overlap_stateD S1 -> no_overlap_stateD S2.
+Proof.
+intros; induction H as [r|r1 r2 r3 H H1 HrecH]; auto.
+apply HrecH; auto.
+apply no_overlapD_inv with r1; auto.
+Qed.
+
+Lemma no_overlapD_invf:
+ forall S1, stepInv S1 -> no_overlap_stateD S1 -> no_overlap_stateD (stepf S1).
+Proof.
+intros; destruct S1 as [[t1 b1] d1].
+destruct t1; destruct b1; auto.
+set (S1:=(nil (A:=Move), m :: b1, d1)).
+apply (no_overlapD_invpp S1); [apply dstep_step; auto | assumption].
+apply f2ind; [unfold S1 | idtac | idtac]; auto.
+generalize H0; clear H0; unfold no_overlap_stateD; destruct m as [m1 m2].
+intros; apply no_overlap_noOverlap.
+unfold no_overlap_state; simpl.
+generalize H0; clear H0; unfold no_overlap; (repeat rewrite getdst_app);
+ (repeat rewrite getsrc_app); simpl; intros.
+apply H0.
+elim H1; intros H4; [left; assumption | right; in_tac].
+elim H2; intros H4; [left; assumption | right; in_tac].
+set (S1:=(m :: t1, nil (A:=Move), d1)).
+apply (no_overlapD_invpp S1); [apply dstep_step; auto | assumption].
+apply f2ind; [unfold S1 | idtac | idtac]; auto.
+generalize H0; clear H0; unfold no_overlap_stateD; destruct m as [m1 m2].
+intros; apply no_overlap_noOverlap.
+unfold no_overlap_state; simpl.
+generalize H0; clear H0; unfold no_overlap; (repeat rewrite getdst_app);
+ (repeat rewrite getsrc_app); simpl; (repeat rewrite app_nil); intros.
+apply H0.
+elim H1; intros H4; [left; assumption | right; (try in_tac)].
+elim H2; intros H4; [left; assumption | right; in_tac].
+set (S1:=(m :: t1, m0 :: b1, d1)).
+apply (no_overlapD_invpp S1); [apply dstep_step; auto | assumption].
+apply f2ind; [unfold S1 | idtac | idtac]; auto.
+generalize H0; clear H0; unfold no_overlap_stateD; destruct m as [m1 m2].
+intros; apply no_overlap_noOverlap.
+unfold no_overlap_state; simpl.
+generalize H0; clear H0; unfold no_overlap; (repeat rewrite getdst_app);
+ (repeat rewrite getsrc_app); destruct m0; simpl; intros.
+apply H0.
+elim H1; intros H4; [left; assumption | right; in_tac].
+elim H2; intros H4; [left; assumption | right; in_tac].
+Qed.
+
+Lemma no_overlapD_res:
+ forall S1, stepInv S1 -> no_overlap_stateD S1 -> no_overlap_stateD (Pmov S1).
+Proof.
+intros S1; elim S1 using (well_founded_ind (Wf_nat.well_founded_ltof _ mesure)).
+clear S1; intros S1 Hrec.
+destruct S1 as [[t b] d].
+rewrite Pmov_equation.
+destruct t; auto.
+destruct b; auto.
+intros; apply Hrec.
+apply stepf1_dec; auto.
+apply (dstep_inv (nil, m :: b, d)); auto.
+apply f2ind'; auto.
+apply no_overlap_noOverlap.
+generalize H0; unfold no_overlap_stateD, no_overlap_state, no_overlap; simpl.
+destruct m; (repeat rewrite getdst_app); (repeat rewrite getsrc_app).
+intros H1 r1 H2 s H3; (try assumption).
+apply H1; in_tac.
+apply no_overlapD_invf; auto.
+intros; apply Hrec.
+apply stepf1_dec; auto.
+apply (dstep_inv (m :: t, b, d)); auto.
+apply f2ind'; auto.
+apply no_overlap_noOverlap.
+generalize H0; destruct m;
+ unfold no_overlap_stateD, no_overlap_state, no_overlap; simpl;
+ (repeat (rewrite getdst_app; simpl)); (repeat (rewrite getsrc_app; simpl)).
+simpl; intros H1 r1 H2 s H3; (try assumption).
+apply H1.
+elim H2; intros H4; [left; (try assumption) | right; in_tac].
+elim H3; intros H4; [left; (try assumption) | right; in_tac].
+apply no_overlapD_invf; auto.
+Qed.
+
+Definition temporaries1_3 := R IT1 :: (R FT1 :: (R IT3 :: nil)).
+
+Definition temporaries2 := R IT2 :: (R FT2 :: nil).
+
+Definition no_tmp13_state (S1 : State) :=
+ Loc.disjoint (getsrc (StateDone S1)) temporaries1_3 /\
+ Loc.disjoint (getdst (StateDone S1)) temporaries1_3.
+
+Definition Done_well_formed (S1 S2 : State) :=
+ forall x,
+ (In x (getsrc (StateDone S2)) ->
+ In x temporaries2 \/ In x (getsrc (StateToMove S1 ++ StateBeing S1))) /\
+ (In x (getdst (StateDone S2)) ->
+ In x temporaries2 \/ In x (getdst (StateToMove S1 ++ StateBeing S1))).
+
+Lemma Done_notmp3_inv:
+ forall S1 S2,
+ step S1 S2 ->
+ (forall x,
+ In x (getdst (StateToMove S1 ++ (StateBeing S1 ++ StateDone S1))) ->
+ Loc.diff x (R IT3)) ->
+ forall x,
+ In x (getdst (StateToMove S2 ++ (StateBeing S2 ++ StateDone S2))) ->
+ Loc.diff x (R IT3).
+Proof.
+intros S1 S2 STEP; inversion STEP; (try (simpl; trivial; fail));
+ simpl StateDone; simpl StateToMove; simpl StateBeing; simpl getdst;
+ (repeat (rewrite getdst_app; simpl)); intros.
+apply H1; in_tac.
+destruct m; apply H1; in_tac.
+apply H1; in_tac.
+case (Loc.eq x (T r0)); intros e.
+unfold T in e |-; destruct (Loc.type r0); rewrite e; simpl; red; intro;
+ discriminate.
+apply H1; apply in_cons_noteq with ( b := T r0 ); auto; in_tac.
+apply H3; in_tac.
+Qed.
+
+Lemma Done_notmp3_invpp:
+ forall S1 S2,
+ stepp S1 S2 ->
+ (forall x,
+ In x (getdst (StateToMove S1 ++ (StateBeing S1 ++ StateDone S1))) ->
+ Loc.diff x (R IT3)) ->
+ forall x,
+ In x (getdst (StateToMove S2 ++ (StateBeing S2 ++ StateDone S2))) ->
+ Loc.diff x (R IT3).
+Proof.
+intros S1 S2 H H0; (try assumption).
+induction H as [r|r1 r2 r3 H1 H2 Hrec]; auto.
+apply Hrec; auto.
+apply Done_notmp3_inv with r1; auto.
+Qed.
+
+Lemma Done_notmp3_invf:
+ forall S1,
+ stepInv S1 ->
+ (forall x,
+ In x (getdst (StateToMove S1 ++ (StateBeing S1 ++ StateDone S1))) ->
+ Loc.diff x (R IT3)) ->
+ forall x,
+ In
+ x
+ (getdst
+ (StateToMove (stepf S1) ++ (StateBeing (stepf S1) ++ StateDone (stepf S1)))) ->
+ Loc.diff x (R IT3).
+Proof.
+intros S1 H H0; (try assumption).
+generalize H; unfold stepInv; intros [Hpath [HSD [HnoO [Hnotmp HnotmpL]]]].
+destruct S1 as [[t1 b1] d1]; set (S1:=(t1, b1, d1)); destruct t1; destruct b1;
+ auto; apply (Done_notmp3_invpp S1); auto; apply dstep_step; auto; apply f2ind;
+ unfold S1; auto.
+Qed.
+
+Lemma Done_notmp3_res:
+ forall S1,
+ stepInv S1 ->
+ (forall x,
+ In x (getdst (StateToMove S1 ++ (StateBeing S1 ++ StateDone S1))) ->
+ Loc.diff x (R IT3)) ->
+ forall x,
+ In
+ x
+ (getdst
+ (StateToMove (Pmov S1) ++ (StateBeing (Pmov S1) ++ StateDone (Pmov S1)))) ->
+ Loc.diff x (R IT3).
+Proof.
+intros S1; elim S1 using (well_founded_ind (Wf_nat.well_founded_ltof _ mesure)).
+clear S1; intros S1 Hrec.
+destruct S1 as [[t b] d]; set (S1:=(t, b, d)).
+unfold S1; rewrite Pmov_equation.
+intros H; generalize H; intros [Hpath [HSD [HnoO [Htmp HtmpL]]]].
+destruct t; [destruct b; auto | idtac];
+ (intro; apply Hrec;
+ [apply stepf1_dec | apply (dstep_inv S1); auto; apply f2ind'
+ | apply Done_notmp3_invf]; auto).
+Qed.
+
+Lemma Done_notmp1_inv:
+ forall S1 S2,
+ step S1 S2 ->
+ (forall x,
+ In x (getdst (StateToMove S1 ++ (StateBeing S1 ++ StateDone S1))) ->
+ Loc.diff x (R IT1) /\ Loc.diff x (R FT1)) ->
+ forall x,
+ In x (getdst (StateToMove S2 ++ (StateBeing S2 ++ StateDone S2))) ->
+ Loc.diff x (R IT1) /\ Loc.diff x (R FT1).
+Proof.
+intros S1 S2 STEP; inversion STEP; (try (simpl; trivial; fail));
+ (repeat (rewrite getdst_app; simpl)); intros.
+apply H1; in_tac.
+destruct m; apply H1; in_tac.
+apply H1; in_tac.
+case (Loc.eq x (T r0)); intro.
+rewrite e; unfold T; case (Loc.type r0); simpl; split; red; intro; discriminate.
+apply H1; apply in_cons_noteq with ( b := T r0 ); (try assumption); in_tac.
+apply H3; in_tac.
+Qed.
+
+Lemma Done_notmp1_invpp:
+ forall S1 S2,
+ stepp S1 S2 ->
+ (forall x,
+ In x (getdst (StateToMove S1 ++ (StateBeing S1 ++ StateDone S1))) ->
+ Loc.diff x (R IT1) /\ Loc.diff x (R FT1)) ->
+ forall x,
+ In x (getdst (StateToMove S2 ++ (StateBeing S2 ++ StateDone S2))) ->
+ Loc.diff x (R IT1) /\ Loc.diff x (R FT1).
+Proof.
+intros S1 S2 H H0; (try assumption).
+induction H as [r|r1 r2 r3 H1 H2 Hrec]; auto.
+apply Hrec; auto.
+apply Done_notmp1_inv with r1; auto.
+Qed.
+
+Lemma Done_notmp1_invf:
+ forall S1,
+ stepInv S1 ->
+ (forall x,
+ In x (getdst (StateToMove S1 ++ (StateBeing S1 ++ StateDone S1))) ->
+ Loc.diff x (R IT1) /\ Loc.diff x (R FT1)) ->
+ forall x,
+ In
+ x
+ (getdst
+ (StateToMove (stepf S1) ++ (StateBeing (stepf S1) ++ StateDone (stepf S1)))) ->
+ Loc.diff x (R IT1) /\ Loc.diff x (R FT1).
+Proof.
+intros S1 H H0; (try assumption).
+generalize H; unfold stepInv; intros [Hpath [HSD [HnoO [Hnotmp HnotmpL]]]].
+destruct S1 as [[t1 b1] d1]; set (S1:=(t1, b1, d1)); destruct t1; destruct b1;
+ auto; apply (Done_notmp1_invpp S1); auto; apply dstep_step; auto; apply f2ind;
+ unfold S1; auto.
+Qed.
+
+Lemma Done_notmp1_res:
+ forall S1,
+ stepInv S1 ->
+ (forall x,
+ In x (getdst (StateToMove S1 ++ (StateBeing S1 ++ StateDone S1))) ->
+ Loc.diff x (R IT1) /\ Loc.diff x (R FT1)) ->
+ forall x,
+ In
+ x
+ (getdst
+ (StateToMove (Pmov S1) ++ (StateBeing (Pmov S1) ++ StateDone (Pmov S1)))) ->
+ Loc.diff x (R IT1) /\ Loc.diff x (R FT1).
+Proof.
+intros S1; elim S1 using (well_founded_ind (Wf_nat.well_founded_ltof _ mesure)).
+clear S1; intros S1 Hrec.
+destruct S1 as [[t b] d]; set (S1:=(t, b, d)).
+intros H; generalize H; intros [Hpath [HSD [HnoO [Htmp HtmpL]]]].
+unfold S1; rewrite Pmov_equation.
+destruct t; [destruct b; auto | idtac];
+ (intro; apply Hrec;
+ [apply stepf1_dec | apply (dstep_inv S1); auto; apply f2ind'
+ | apply Done_notmp1_invf]; auto).
+Qed.
+
+Lemma Done_notmp1src_inv:
+ forall S1 S2,
+ step S1 S2 ->
+ (forall x,
+ In x (getsrc (StateToMove S1 ++ (StateBeing S1 ++ StateDone S1))) ->
+ Loc.diff x (R IT1) /\ Loc.diff x (R FT1)) ->
+ forall x,
+ In x (getsrc (StateToMove S2 ++ (StateBeing S2 ++ StateDone S2))) ->
+ Loc.diff x (R IT1) /\ Loc.diff x (R FT1).
+Proof.
+intros S1 S2 STEP; inversion STEP; (try (simpl; trivial; fail));
+ (repeat (rewrite getsrc_app; simpl)); intros.
+apply H1; in_tac.
+destruct m; apply H1; in_tac.
+apply H1; in_tac.
+case (Loc.eq x (T r0)); intro.
+rewrite e; unfold T; case (Loc.type r0); simpl; split; red; intro; discriminate.
+apply H1; apply in_cons_noteq with ( b := T r0 ); (try assumption); in_tac.
+apply H3; in_tac.
+Qed.
+
+Lemma Done_notmp1src_invpp:
+ forall S1 S2,
+ stepp S1 S2 ->
+ (forall x,
+ In x (getsrc (StateToMove S1 ++ (StateBeing S1 ++ StateDone S1))) ->
+ Loc.diff x (R IT1) /\ Loc.diff x (R FT1)) ->
+ forall x,
+ In x (getsrc (StateToMove S2 ++ (StateBeing S2 ++ StateDone S2))) ->
+ Loc.diff x (R IT1) /\ Loc.diff x (R FT1).
+Proof.
+intros S1 S2 H H0; (try assumption).
+induction H as [r|r1 r2 r3 H1 H2 Hrec]; auto.
+apply Hrec; auto.
+apply Done_notmp1src_inv with r1; auto.
+Qed.
+
+Lemma Done_notmp1src_invf:
+ forall S1,
+ stepInv S1 ->
+ (forall x,
+ In x (getsrc (StateToMove S1 ++ (StateBeing S1 ++ StateDone S1))) ->
+ Loc.diff x (R IT1) /\ Loc.diff x (R FT1)) ->
+ forall x,
+ In
+ x
+ (getsrc
+ (StateToMove (stepf S1) ++ (StateBeing (stepf S1) ++ StateDone (stepf S1)))) ->
+ Loc.diff x (R IT1) /\ Loc.diff x (R FT1).
+Proof.
+intros S1 H H0.
+generalize H; unfold stepInv; intros [Hpath [HSD [HnoO [Hnotmp HnotmpL]]]].
+destruct S1 as [[t1 b1] d1]; set (S1:=(t1, b1, d1)); destruct t1; destruct b1;
+ auto; apply (Done_notmp1src_invpp S1); auto; apply dstep_step; auto;
+ apply f2ind; unfold S1; auto.
+Qed.
+
+Lemma Done_notmp1src_res:
+ forall S1,
+ stepInv S1 ->
+ (forall x,
+ In x (getsrc (StateToMove S1 ++ (StateBeing S1 ++ StateDone S1))) ->
+ Loc.diff x (R IT1) /\ Loc.diff x (R FT1)) ->
+ forall x,
+ In
+ x
+ (getsrc
+ (StateToMove (Pmov S1) ++ (StateBeing (Pmov S1) ++ StateDone (Pmov S1)))) ->
+ Loc.diff x (R IT1) /\ Loc.diff x (R FT1).
+Proof.
+intros S1; elim S1 using (well_founded_ind (Wf_nat.well_founded_ltof _ mesure)).
+clear S1; intros S1 Hrec.
+destruct S1 as [[t b] d]; set (S1:=(t, b, d)).
+intros H; generalize H; intros [Hpath [HSD [HnoO [Htmp HtmpL]]]].
+unfold S1; rewrite Pmov_equation.
+destruct t; [destruct b; auto | idtac];
+ (intro; apply Hrec;
+ [apply stepf1_dec | apply (dstep_inv S1); auto; apply f2ind'
+ | apply Done_notmp1src_invf]; auto).
+Qed.
+
+Lemma dst_tmp2_step:
+ forall S1 S2,
+ step S1 S2 ->
+ forall x,
+ In x (getdst (StateToMove S2 ++ (StateBeing S2 ++ StateDone S2))) ->
+ In x temporaries2 \/
+ In x (getdst (StateToMove S1 ++ (StateBeing S1 ++ StateDone S1))).
+Proof.
+intros S1 S2 STEP; inversion STEP; (repeat (rewrite getdst_app; simpl)); intros;
+ (try (right; in_tac)).
+destruct m; right; in_tac.
+case (Loc.eq x (T r0)); intro.
+rewrite e; unfold T; case (Loc.type r0); left; [left | right; left]; trivial.
+right; apply in_cons_noteq with ( b := T r0 ); auto; in_tac.
+Qed.
+
+Lemma dst_tmp2_stepp:
+ forall S1 S2,
+ stepp S1 S2 ->
+ forall x,
+ In x (getdst (StateToMove S2 ++ (StateBeing S2 ++ StateDone S2))) ->
+ In x temporaries2 \/
+ In x (getdst (StateToMove S1 ++ (StateBeing S1 ++ StateDone S1))).
+Proof.
+intros S1 S2 H.
+induction H as [r|r1 r2 r3 H1 H2 Hrec]; auto.
+intros.
+elim Hrec with ( x := x );
+ [intros H0; (try clear Hrec); (try exact H0) | intros H0; (try clear Hrec)
+ | try clear Hrec]; auto.
+generalize (dst_tmp2_step r1 r2); auto.
+Qed.
+
+Lemma dst_tmp2_stepf:
+ forall S1,
+ stepInv S1 ->
+ forall x,
+ In
+ x
+ (getdst
+ (StateToMove (stepf S1) ++ (StateBeing (stepf S1) ++ StateDone (stepf S1)))) ->
+ In x temporaries2 \/
+ In x (getdst (StateToMove S1 ++ (StateBeing S1 ++ StateDone S1))).
+Proof.
+intros S1 H H0.
+generalize H; unfold stepInv; intros [Hpath [HSD [HnoO [Hnotmp HnotmpL]]]].
+destruct S1 as [[t1 b1] d1]; set (S1:=(t1, b1, d1)); destruct t1; destruct b1;
+ auto; apply (dst_tmp2_stepp S1); auto; apply dstep_step; auto; apply f2ind;
+ unfold S1; auto.
+Qed.
+
+Lemma dst_tmp2_res:
+ forall S1,
+ stepInv S1 ->
+ forall x,
+ In
+ x
+ (getdst
+ (StateToMove (Pmov S1) ++ (StateBeing (Pmov S1) ++ StateDone (Pmov S1)))) ->
+ In x temporaries2 \/
+ In x (getdst (StateToMove S1 ++ (StateBeing S1 ++ StateDone S1))).
+Proof.
+intros S1; elim S1 using (well_founded_ind (Wf_nat.well_founded_ltof _ mesure)).
+clear S1; intros S1 Hrec.
+destruct S1 as [[t b] d]; set (S1:=(t, b, d)).
+intros H; generalize H; intros [Hpath [HSD [HnoO [Htmp HtmpL]]]].
+unfold S1; rewrite Pmov_equation; intros.
+destruct t; auto.
+destruct b; auto.
+elim Hrec with ( y := stepf S1 ) ( x := x );
+ [intros H1 | intros H1 | try clear Hrec | try clear Hrec | try assumption].
+left; (try assumption).
+apply dst_tmp2_stepf; auto.
+apply stepf1_dec; auto.
+apply (dstep_inv S1); auto; unfold S1; apply f2ind'; auto.
+elim Hrec with ( y := stepf S1 ) ( x := x );
+ [intro; left; (try assumption) | intros H1; apply dst_tmp2_stepf; auto |
+ apply stepf1_dec; auto |
+ apply (dstep_inv S1); auto; unfold S1; apply f2ind'; auto | try assumption].
+Qed.
+
+Lemma getdst_lists2moves:
+ forall srcs dsts,
+ length srcs = length dsts ->
+ getsrc (listsLoc2Moves srcs dsts) = srcs /\
+ getdst (listsLoc2Moves srcs dsts) = dsts.
+Proof.
+induction srcs; intros dsts; destruct dsts; simpl; auto; intro;
+ (try discriminate).
+inversion H.
+elim IHsrcs with ( dsts := dsts ); auto; intros.
+rewrite H2; rewrite H0; auto.
+Qed.
+
+Lemma stepInv_pnilnil:
+ forall p,
+ simpleDest p ->
+ Loc.disjoint (getsrc p) temporaries ->
+ Loc.disjoint (getdst p) temporaries ->
+ no_overlap_list p -> stepInv (p, nil, nil).
+Proof.
+unfold stepInv; simpl; (repeat split); auto.
+rewrite app_nil; auto.
+generalize (no_overlap_noOverlap (p, nil, nil)).
+simpl; (intros H3; apply H3).
+generalize H2; unfold no_overlap_state, no_overlap_list; simpl; intro.
+rewrite app_nil; auto.
+apply disjoint_tmp__noTmp; auto.
+Qed.
+
+Lemma noO_list_pnilnil:
+ forall (p : Moves),
+ simpleDest p ->
+ Loc.disjoint (getsrc p) temporaries ->
+ Loc.disjoint (getdst p) temporaries ->
+ no_overlap_list p -> no_overlap_list (StateDone (Pmov (p, nil, nil))).
+Proof.
+intros; generalize (no_overlapD_res (p, nil, nil));
+ unfold no_overlap_stateD, no_overlap_list.
+rewrite STM_Pmov; rewrite SB_Pmov; simpl; rewrite app_nil; intro.
+apply H3; auto.
+apply stepInv_pnilnil; auto.
+Qed.
+
+Lemma dis_srctmp1_pnilnil:
+ forall (p : Moves),
+ simpleDest p ->
+ Loc.disjoint (getsrc p) temporaries ->
+ Loc.disjoint (getdst p) temporaries ->
+ no_overlap_list p ->
+ Loc.disjoint (getsrc (StateDone (Pmov (p, nil, nil)))) temporaries1.
+Proof.
+intros; generalize (Done_notmp1src_res (p, nil, nil)); simpl.
+rewrite STM_Pmov; rewrite SB_Pmov; simpl; rewrite app_nil; intro.
+unfold temporaries1.
+apply Loc.notin_disjoint; auto.
+simpl; intros.
+assert (HsI: stepInv (p, nil, nil)); (try apply stepInv_pnilnil); auto.
+elim H3 with x; (try assumption).
+intros; (repeat split); auto.
+intros; split;
+ (apply Loc.in_notin_diff with ( ll := temporaries );
+ [apply Loc.disjoint_notin with (getsrc p) | simpl]; auto).
+Qed.
+
+Lemma dis_dsttmp1_pnilnil:
+ forall (p : Moves),
+ simpleDest p ->
+ Loc.disjoint (getsrc p) temporaries ->
+ Loc.disjoint (getdst p) temporaries ->
+ no_overlap_list p ->
+ Loc.disjoint (getdst (StateDone (Pmov (p, nil, nil)))) temporaries1.
+Proof.
+intros; generalize (Done_notmp1_res (p, nil, nil)); simpl.
+rewrite STM_Pmov; rewrite SB_Pmov; simpl; rewrite app_nil; intro.
+unfold temporaries1.
+apply Loc.notin_disjoint; auto.
+simpl; intros.
+assert (HsI: stepInv (p, nil, nil)); (try apply stepInv_pnilnil); auto.
+elim H3 with x; (try assumption).
+intros; (repeat split); auto.
+intros; split;
+ (apply Loc.in_notin_diff with ( ll := temporaries );
+ [apply Loc.disjoint_notin with (getdst p) | simpl]; auto).
+Qed.
+
+Lemma parallel_move_correct':
+ forall p k rs m,
+ Loc.norepet (getdst p) ->
+ no_overlap_list p ->
+ Loc.disjoint (getsrc p) temporaries ->
+ Loc.disjoint (getdst p) temporaries ->
+ (exists rs' ,
+ exec_instrs ge sp (p_move p k) rs m k rs' m /\
+ (List.map rs' (getdst p) = List.map rs (getsrc p) /\
+ (rs' (R IT3) = rs (R IT3) /\
+ (forall l,
+ Loc.notin l (getdst p) -> Loc.notin l temporaries -> rs' l = rs l)))
+ ).
+Proof.
+unfold p_move, P_move.
+intros p k rs m Hnorepet HnoOverlap Hdisjointsrc Hdisjointdst.
+assert (HsD: simpleDest p); (try (apply norepet_SD; assumption)).
+assert (HsI: stepInv (p, nil, nil)); (try (apply stepInv_pnilnil; assumption)).
+generalize HsI; unfold stepInv; simpl StateToMove; simpl StateBeing;
+ (repeat rewrite app_nil); intros [_ [_ [HnoO [Hnotmp _]]]].
+elim (exec_instrs_pmov (StateDone (Pmov (p, nil, nil))) k rs m); auto;
+ (try apply noO_list_pnilnil); (try apply dis_dsttmp1_pnilnil);
+ (try apply dis_srctmp1_pnilnil); auto.
+intros rs' [Hexec R]; exists rs'; (repeat split); auto.
+rewrite <- (Fpmov_correct_map p rs); auto.
+apply list_map_exten; intros; rewrite <- R; auto;
+ (try
+ (apply Loc.in_notin_diff with ( ll := temporaries );
+ [apply Loc.disjoint_notin with (getdst p) | simpl]; auto)).
+generalize (dst_tmp2_res (p, nil, nil)); intros.
+elim H0 with ( x := r );
+ [intros H2; right |
+ simpl; rewrite app_nil; intros H2; apply In_norepet with (getdst p); auto |
+ try assumption | rewrite STM_Pmov; rewrite SB_Pmov; auto].
+apply Loc.diff_sym; apply Loc.in_notin_diff with ( ll := temporaries );
+ (try assumption).
+apply Loc.disjoint_notin with (getdst p); auto.
+generalize H2; unfold temporaries, temporaries2; intros; in_tac.
+rewrite <- (Fpmov_correct_IT3 p rs); auto; rewrite <- R;
+ (try (simpl; intro; discriminate)); auto.
+intros r H; right; apply (Done_notmp3_res (p, nil, nil)); auto;
+ (try (rewrite STM_Pmov; rewrite SB_Pmov; auto)).
+simpl; rewrite app_nil; intros; apply Loc.in_notin_diff with temporaries; auto.
+apply Loc.disjoint_notin with (getdst p); auto.
+simpl; right; right; left; trivial.
+intros; rewrite <- (Fpmov_correct_ext p rs); auto; rewrite <- R; auto;
+ (try (apply Loc.in_notin_diff with temporaries; simpl; auto)).
+intros r H1; right; generalize (dst_tmp2_res (p, nil, nil)); intros.
+elim H2 with ( x := r );
+ [intros H3 | simpl; rewrite app_nil; intros H3 | assumption
+ | rewrite STM_Pmov; rewrite SB_Pmov; auto].
+apply Loc.diff_sym; apply Loc.in_notin_diff with temporaries; auto.
+generalize H3; unfold temporaries, temporaries2; intros; in_tac.
+apply Loc.diff_sym; apply Loc.in_notin_diff with ( ll := getdst p ); auto.
+Qed.
+
+Lemma parallel_move_correctX:
+ forall srcs dsts k rs m,
+ List.length srcs = List.length dsts ->
+ no_overlap srcs dsts ->
+ Loc.norepet dsts ->
+ Loc.disjoint srcs temporaries ->
+ Loc.disjoint dsts temporaries ->
+ (exists rs' ,
+ exec_instrs ge sp (parallel_move srcs dsts k) rs m k rs' m /\
+ (List.map rs' dsts = List.map rs srcs /\
+ (rs' (R IT3) = rs (R IT3) /\
+ (forall l, Loc.notin l dsts -> Loc.notin l temporaries -> rs' l = rs l))) ).
+Proof.
+intros; unfold parallel_move, parallel_move_order;
+ generalize (parallel_move_correct' (listsLoc2Moves srcs dsts) k rs m).
+elim (getdst_lists2moves srcs dsts); auto.
+intros heq1 heq2; rewrite heq1; rewrite heq2; unfold p_move.
+intros H4; apply H4; auto.
+unfold no_overlap_list; rewrite heq1; rewrite heq2; auto.
+Qed.
+
+End parallel_move_correction.
diff --git a/backend/Alloctyping.v b/backend/Alloctyping.v
new file mode 100644
index 0000000..39e53ee
--- /dev/null
+++ b/backend/Alloctyping.v
@@ -0,0 +1,509 @@
+(** Preservation of typing during register allocation. *)
+
+Require Import Coqlib.
+Require Import Maps.
+Require Import AST.
+Require Import Op.
+Require Import Registers.
+Require Import RTL.
+Require Import Locations.
+Require Import LTL.
+Require Import Coloring.
+Require Import Coloringproof.
+Require Import Allocation.
+Require Import Allocproof.
+Require Import RTLtyping.
+Require Import LTLtyping.
+Require Import Conventions.
+Require Import Alloctyping_aux.
+
+(** This file proves that register allocation (the translation from
+ RTL to LTL defined in file [Allocation]) preserves typing:
+ given a well-typed RTL input, it produces LTL code that is
+ well-typed. *)
+
+Section TYPING_FUNCTION.
+
+Variable f: RTL.function.
+Variable env: regenv.
+Variable live: PMap.t Regset.t.
+Variable alloc: reg -> loc.
+Variable tf: LTL.function.
+
+Hypothesis TYPE_RTL: type_rtl_function f = Some env.
+Hypothesis ALLOC: regalloc f live (live0 f live) env = Some alloc.
+Hypothesis TRANSL: transf_function f = Some tf.
+
+Lemma wt_rtl_function: RTLtyping.wt_function env f.
+Proof.
+ apply type_rtl_function_correct; auto.
+Qed.
+
+Lemma alloc_type: forall r, Loc.type (alloc r) = env r.
+Proof.
+ intro. eapply regalloc_preserves_types; eauto.
+Qed.
+
+Lemma alloc_types:
+ forall rl, List.map Loc.type (List.map alloc rl) = List.map env rl.
+Proof.
+ intros. rewrite list_map_compose. apply list_map_exten.
+ intros. symmetry. apply alloc_type.
+Qed.
+
+(** [loc_read_ok l] states whether location [l] is well-formed in an
+ argument context (for reading). *)
+
+Definition loc_read_ok (l: loc) : Prop :=
+ match l with R r => True | S s => slot_bounded tf s end.
+
+(** [loc_write_ok l] states whether location [l] is well-formed in a
+ result context (for writing). *)
+
+Definition loc_write_ok (l: loc) : Prop :=
+ match l with
+ | R r => True
+ | S (Incoming _ _) => False
+ | S s => slot_bounded tf s end.
+
+Definition locs_read_ok (ll: list loc) : Prop :=
+ forall l, In l ll -> loc_read_ok l.
+
+Definition locs_write_ok (ll: list loc) : Prop :=
+ forall l, In l ll -> loc_write_ok l.
+
+Remark loc_write_ok_read_ok:
+ forall l, loc_write_ok l -> loc_read_ok l.
+Proof.
+ destruct l; simpl. auto.
+ destruct s; tauto.
+Qed.
+Hint Resolve loc_write_ok_read_ok: allocty.
+
+Remark locs_write_ok_read_ok:
+ forall ll, locs_write_ok ll -> locs_read_ok ll.
+Proof.
+ unfold locs_write_ok, locs_read_ok. auto with allocty.
+Qed.
+Hint Resolve locs_write_ok_read_ok: allocty.
+
+Lemma alloc_write_ok:
+ forall r, loc_write_ok (alloc r).
+Proof.
+ intros. generalize (regalloc_acceptable _ _ _ _ _ r ALLOC).
+ destruct (alloc r); simpl. auto.
+ destruct s; try contradiction. simpl. omega.
+Qed.
+Hint Resolve alloc_write_ok: allocty.
+
+Lemma allocs_write_ok:
+ forall rl, locs_write_ok (List.map alloc rl).
+Proof.
+ intros; red; intros.
+ generalize (list_in_map_inv _ _ _ H). intros [r [EQ IN]].
+ subst l. auto with allocty.
+Qed.
+Hint Resolve allocs_write_ok: allocty.
+
+(** * Typing LTL constructors *)
+
+(** We show that the LTL constructor functions defined in [Allocation]
+ generate well-typed LTL basic blocks, given sufficient typing
+ and well-formedness hypotheses over the locations involved. *)
+
+Lemma wt_add_reload:
+ forall src dst k,
+ loc_read_ok src ->
+ Loc.type src = mreg_type dst ->
+ wt_block tf k ->
+ wt_block tf (add_reload src dst k).
+Proof.
+ intros. unfold add_reload. destruct src.
+ case (mreg_eq m dst); intro. auto. apply wt_Bopmove. exact H0. auto.
+ apply wt_Bgetstack. exact H0. exact H. auto.
+Qed.
+
+Lemma wt_add_spill:
+ forall src dst k,
+ loc_write_ok dst ->
+ mreg_type src = Loc.type dst ->
+ wt_block tf k ->
+ wt_block tf (add_spill src dst k).
+Proof.
+ intros. unfold add_spill. destruct dst.
+ case (mreg_eq src m); intro. auto.
+ apply wt_Bopmove. exact H0. auto.
+ apply wt_Bsetstack. generalize H. simpl. destruct s; auto.
+ symmetry. exact H0. generalize H. simpl. destruct s; auto. contradiction.
+ auto.
+Qed.
+
+Lemma wt_add_reloads:
+ forall srcs dsts k,
+ locs_read_ok srcs ->
+ List.map Loc.type srcs = List.map mreg_type dsts ->
+ wt_block tf k ->
+ wt_block tf (add_reloads srcs dsts k).
+Proof.
+ induction srcs; intros.
+ destruct dsts. simpl; auto. simpl in H0; discriminate.
+ destruct dsts; simpl in H0. discriminate. simpl.
+ apply wt_add_reload. apply H; apply in_eq. congruence.
+ apply IHsrcs. red; intros; apply H; apply in_cons; auto.
+ congruence. auto.
+Qed.
+
+Lemma wt_reg_for:
+ forall l, mreg_type (reg_for l) = Loc.type l.
+Proof.
+ intros. destruct l; simpl. auto.
+ case (slot_type s); reflexivity.
+Qed.
+Hint Resolve wt_reg_for: allocty.
+
+Lemma wt_regs_for_rec:
+ forall locs itmps ftmps,
+ (List.length locs <= List.length itmps)%nat ->
+ (List.length locs <= List.length ftmps)%nat ->
+ (forall r, In r itmps -> mreg_type r = Tint) ->
+ (forall r, In r ftmps -> mreg_type r = Tfloat) ->
+ List.map mreg_type (regs_for_rec locs itmps ftmps) = List.map Loc.type locs.
+Proof.
+ induction locs; intros.
+ simpl. auto.
+ destruct itmps; simpl in H. omegaContradiction.
+ destruct ftmps; simpl in H0. omegaContradiction.
+ simpl. apply (f_equal2 (@cons typ)).
+ destruct a. reflexivity. simpl. case (slot_type s).
+ apply H1; apply in_eq. apply H2; apply in_eq.
+ apply IHlocs. omega. omega.
+ intros; apply H1; apply in_cons; auto.
+ intros; apply H2; apply in_cons; auto.
+Qed.
+
+Lemma wt_regs_for:
+ forall locs,
+ (List.length locs <= 3)%nat ->
+ List.map mreg_type (regs_for locs) = List.map Loc.type locs.
+Proof.
+ intros. unfold regs_for. apply wt_regs_for_rec.
+ simpl. auto. simpl. auto.
+ simpl; intros; intuition; subst r; reflexivity.
+ simpl; intros; intuition; subst r; reflexivity.
+Qed.
+Hint Resolve wt_regs_for: allocty.
+
+Lemma wt_add_move:
+ forall src dst b,
+ loc_read_ok src -> loc_write_ok dst ->
+ Loc.type src = Loc.type dst ->
+ wt_block tf b ->
+ wt_block tf (add_move src dst b).
+Proof.
+ intros. unfold add_move.
+ case (Loc.eq src dst); intro.
+ auto.
+ destruct src. apply wt_add_spill; auto.
+ destruct dst. apply wt_add_reload; auto.
+ set (tmp := match slot_type s with Tint => IT1 | Tfloat => FT1 end).
+ apply wt_add_reload. auto.
+ simpl. unfold tmp. case (slot_type s); reflexivity.
+ apply wt_add_spill. auto.
+ simpl. simpl in H1. rewrite <- H1. unfold tmp. case (slot_type s); reflexivity.
+ auto.
+Qed.
+
+Theorem wt_parallel_move:
+ forall srcs dsts b,
+ List.map Loc.type srcs = List.map Loc.type dsts ->
+ locs_read_ok srcs ->
+ locs_write_ok dsts -> wt_block tf b -> wt_block tf (parallel_move srcs dsts b).
+Proof.
+ unfold locs_read_ok, locs_write_ok.
+ apply wt_parallel_moveX; simpl; auto.
+ exact wt_add_move.
+Qed.
+
+Lemma wt_add_op_move:
+ forall src res s,
+ Loc.type src = Loc.type res ->
+ loc_read_ok src -> loc_write_ok res ->
+ wt_block tf (add_op Omove (src :: nil) res s).
+Proof.
+ intros. unfold add_op. simpl.
+ apply wt_add_move. auto. auto. auto. constructor.
+Qed.
+
+Lemma wt_add_op_undef:
+ forall res s,
+ loc_write_ok res ->
+ wt_block tf (add_op Oundef nil res s).
+Proof.
+ intros. unfold add_op. simpl.
+ apply wt_Bopundef. apply wt_add_spill. auto. auto with allocty.
+ constructor.
+Qed.
+
+Lemma wt_add_op_others:
+ forall op args res s,
+ op <> Omove -> op <> Oundef ->
+ (List.map Loc.type args, Loc.type res) = type_of_operation op ->
+ locs_read_ok args ->
+ loc_write_ok res ->
+ wt_block tf (add_op op args res s).
+Proof.
+ intros. unfold add_op.
+ caseEq (is_move_operation op args). intros.
+ generalize (is_move_operation_correct op args H4). tauto.
+ intro. assert ((List.length args <= 3)%nat).
+ replace (length args) with (length (fst (type_of_operation op))).
+ apply Allocproof.length_type_of_operation.
+ rewrite <- H1. simpl. apply list_length_map.
+ generalize (wt_regs_for args H5); intro.
+ generalize (wt_reg_for res); intro.
+ apply wt_add_reloads. auto. auto.
+ apply wt_Bop. auto. auto. congruence.
+ apply wt_add_spill. auto. auto. constructor.
+Qed.
+
+Lemma wt_add_load:
+ forall chunk addr args dst s,
+ List.map Loc.type args = type_of_addressing addr ->
+ Loc.type dst = type_of_chunk chunk ->
+ locs_read_ok args ->
+ loc_write_ok dst ->
+ wt_block tf (add_load chunk addr args dst s).
+Proof.
+ intros. unfold add_load.
+ assert ((List.length args <= 2)%nat).
+ replace (length args) with (length (type_of_addressing addr)).
+ apply Allocproof.length_type_of_addressing.
+ rewrite <- H. apply list_length_map.
+ assert ((List.length args <= 3)%nat). omega.
+ generalize (wt_regs_for args H4); intro.
+ generalize (wt_reg_for dst); intro.
+ apply wt_add_reloads. auto. auto.
+ apply wt_Bload. congruence. congruence.
+ apply wt_add_spill. auto. auto. constructor.
+Qed.
+
+Lemma wt_add_store:
+ forall chunk addr args src s,
+ List.map Loc.type args = type_of_addressing addr ->
+ Loc.type src = type_of_chunk chunk ->
+ locs_read_ok args ->
+ loc_read_ok src ->
+ wt_block tf (add_store chunk addr args src s).
+Proof.
+ intros. unfold add_store.
+ assert ((List.length args <= 2)%nat).
+ replace (length args) with (length (type_of_addressing addr)).
+ apply Allocproof.length_type_of_addressing.
+ rewrite <- H. apply list_length_map.
+ assert ((List.length (src :: args) <= 3)%nat). simpl. omega.
+ generalize (wt_regs_for (src :: args) H4); intro.
+ caseEq (regs_for (src :: args)).
+ intro. constructor.
+ intros rsrc rargs EQ. rewrite EQ in H5. simpl in H5.
+ apply wt_add_reloads.
+ red; intros. elim H6; intro. subst l; auto. auto.
+ simpl. congruence.
+ apply wt_Bstore. congruence. congruence. constructor.
+Qed.
+
+Lemma wt_add_call:
+ forall sig los args res s,
+ match los with inl l => Loc.type l = Tint | inr s => True end ->
+ List.map Loc.type args = sig.(sig_args) ->
+ Loc.type res = match sig.(sig_res) with None => Tint | Some ty => ty end ->
+ locs_read_ok args ->
+ match los with inl l => loc_read_ok l | inr s => True end ->
+ loc_write_ok res ->
+ wt_block tf (add_call sig los args res s).
+Proof.
+ intros.
+ assert (locs_write_ok (loc_arguments sig)).
+ red; intros. generalize (loc_arguments_acceptable sig l H5).
+ destruct l; simpl. auto.
+ destruct s0; try contradiction. simpl. omega.
+ unfold add_call. destruct los.
+ apply wt_add_reload. auto. simpl; congruence.
+ apply wt_parallel_move. rewrite loc_arguments_type. auto.
+ auto. auto.
+ apply wt_Bcall. reflexivity.
+ apply wt_add_spill. auto.
+ rewrite loc_result_type. auto. constructor.
+ apply wt_parallel_move. rewrite loc_arguments_type. auto.
+ auto. auto.
+ apply wt_Bcall. auto.
+ apply wt_add_spill. auto.
+ rewrite loc_result_type. auto. constructor.
+Qed.
+
+Lemma wt_add_cond:
+ forall cond args ifso ifnot,
+ List.map Loc.type args = type_of_condition cond ->
+ locs_read_ok args ->
+ wt_block tf (add_cond cond args ifso ifnot).
+Proof.
+ intros.
+ assert ((List.length args) <= 3)%nat.
+ replace (length args) with (length (type_of_condition cond)).
+ apply Allocproof.length_type_of_condition.
+ rewrite <- H. apply list_length_map.
+ generalize (wt_regs_for args H1). intro.
+ unfold add_cond. apply wt_add_reloads.
+ auto. auto.
+ apply wt_Bcond. congruence.
+Qed.
+
+Lemma wt_add_return:
+ forall sig optarg,
+ option_map Loc.type optarg = sig.(sig_res) ->
+ match optarg with None => True | Some arg => loc_read_ok arg end ->
+ wt_block tf (add_return sig optarg).
+Proof.
+ intros. unfold add_return. destruct optarg.
+ apply wt_add_reload. auto. rewrite loc_result_type.
+ simpl in H. destruct (sig_res sig). congruence. discriminate.
+ constructor.
+ apply wt_Bopundef. constructor.
+Qed.
+
+Lemma wt_add_undefs:
+ forall ll b,
+ wt_block tf b -> wt_block tf (add_undefs ll b).
+Proof.
+ induction ll; intros.
+ simpl. auto.
+ simpl. destruct a. apply wt_Bopundef. auto. auto.
+Qed.
+
+Lemma wt_add_entry:
+ forall params undefs s,
+ List.map Loc.type params = sig_args (RTL.fn_sig f) ->
+ locs_write_ok params ->
+ wt_block tf (add_entry (RTL.fn_sig f) params undefs s).
+Proof.
+ set (sig := RTL.fn_sig f).
+ assert (sig = tf.(fn_sig)).
+ unfold sig. symmetry. apply Allocproof.sig_function_translated. auto.
+ assert (locs_read_ok (loc_parameters sig)).
+ red; unfold loc_parameters. intros.
+ generalize (list_in_map_inv _ _ _ H0). intros [l1 [EQ IN]].
+ subst l. generalize (loc_arguments_acceptable _ _ IN).
+ destruct l1. simpl. auto.
+ destruct s; try contradiction.
+ simpl; intros. split. omega. rewrite <- H.
+ apply loc_arguments_bounded. auto.
+ intros. unfold add_entry.
+ apply wt_parallel_move. rewrite loc_parameters_type. auto.
+ auto. auto.
+ apply wt_add_undefs. constructor.
+Qed.
+
+(** * Type preservation during translation from RTL to LTL *)
+
+Lemma wt_transf_instr:
+ forall pc instr,
+ RTLtyping.wt_instr env f instr ->
+ wt_block tf (transf_instr f live alloc pc instr).
+Proof.
+ intros. inversion H; simpl.
+ (* nop *)
+ constructor.
+ (* move *)
+ case (Regset.mem r live!!pc).
+ apply wt_add_op_move; auto with allocty.
+ repeat rewrite alloc_type. auto. constructor.
+ (* undef *)
+ case (Regset.mem r live!!pc).
+ apply wt_add_op_undef; auto with allocty.
+ constructor.
+ (* other ops *)
+ case (Regset.mem res live!!pc).
+ apply wt_add_op_others; auto with allocty.
+ rewrite alloc_types. rewrite alloc_type. auto.
+ constructor.
+ (* load *)
+ case (Regset.mem dst live!!pc).
+ apply wt_add_load; auto with allocty.
+ rewrite alloc_types. auto. rewrite alloc_type. auto.
+ constructor.
+ (* store *)
+ apply wt_add_store; auto with allocty.
+ rewrite alloc_types. auto. rewrite alloc_type. auto.
+ (* call *)
+ apply wt_add_call.
+ destruct ros; simpl. rewrite alloc_type; auto. auto.
+ rewrite alloc_types; auto.
+ rewrite alloc_type. auto.
+ auto with allocty.
+ destruct ros; simpl; auto with allocty.
+ auto with allocty.
+ (* cond *)
+ apply wt_add_cond. rewrite alloc_types; auto. auto with allocty.
+ (* return *)
+ apply wt_add_return.
+ destruct optres; simpl. rewrite alloc_type. exact H0. exact H0.
+ destruct optres; simpl; auto with allocty.
+Qed.
+
+Lemma wt_transf_instrs:
+ let c := PTree.map (transf_instr f live alloc) (RTL.fn_code f) in
+ forall pc b, c!pc = Some b -> wt_block tf b.
+Proof.
+ intros until b.
+ unfold c. rewrite PTree.gmap. caseEq (RTL.fn_code f)!pc.
+ intros instr EQ. simpl. intros. injection H; intro; subst b.
+ apply wt_transf_instr. eapply RTLtyping.wt_instrs; eauto.
+ apply wt_rtl_function.
+ simpl; intros; discriminate.
+Qed.
+
+Lemma wt_transf_entrypoint:
+ let c := transf_entrypoint f live alloc
+ (PTree.map (transf_instr f live alloc) (RTL.fn_code f)) in
+ (forall pc b, c!pc = Some b -> wt_block tf b).
+Proof.
+ simpl. unfold transf_entrypoint.
+ intros pc b. rewrite PTree.gsspec.
+ case (peq pc (fn_nextpc f)); intros.
+ injection H; intro; subst b.
+ apply wt_add_entry.
+ rewrite alloc_types. eapply RTLtyping.wt_params. apply wt_rtl_function.
+ auto with allocty.
+ apply wt_transf_instrs with pc; auto.
+Qed.
+
+End TYPING_FUNCTION.
+
+Lemma wt_transf_function:
+ forall f tf,
+ transf_function f = Some tf -> wt_function tf.
+Proof.
+ intros. generalize H; unfold transf_function.
+ caseEq (type_rtl_function f). intros env TYP.
+ caseEq (analyze f). intros live ANL.
+ change (transfer f (RTL.fn_entrypoint f)
+ live!!(RTL.fn_entrypoint f))
+ with (live0 f live).
+ caseEq (regalloc f live (live0 f live) env).
+ intros alloc ALLOC.
+ intro EQ; injection EQ; intro; subst tf.
+ red. simpl. intros. eapply wt_transf_entrypoint; eauto.
+ intros; discriminate.
+ intros; discriminate.
+ intros; discriminate.
+Qed.
+
+Lemma program_typing_preserved:
+ forall (p: RTL.program) (tp: LTL.program),
+ transf_program p = Some tp ->
+ LTLtyping.wt_program tp.
+Proof.
+ intros; red; intros.
+ generalize (transform_partial_program_function transf_function p i f H H0).
+ intros [f0 [IN TRANSF]].
+ apply wt_transf_function with f0; auto.
+Qed.
diff --git a/backend/Alloctyping_aux.v b/backend/Alloctyping_aux.v
new file mode 100644
index 0000000..0013c24
--- /dev/null
+++ b/backend/Alloctyping_aux.v
@@ -0,0 +1,895 @@
+(** Type preservation for parallel move compilation. *)
+
+(** This file, contributed by Laurence Rideau, shows that the parallel
+ move compilation algorithm (file [Parallelmove]) generates a well-typed
+ sequence of LTL instructions, provided the original problem is well-typed:
+ the types of source and destination locations match pairwise. *)
+
+Require Import Coqlib.
+Require Import Locations.
+Require Import LTL.
+Require Import Allocation.
+Require Import LTLtyping.
+Require Import Allocproof_aux.
+Require Import Parallelmove.
+Require Import Inclusion.
+
+Section wt_move_correction.
+Variable tf : LTL.function.
+Variable loc_read_ok : loc -> Prop.
+Hypothesis loc_read_ok_R : forall r, loc_read_ok (R r).
+Variable loc_write_ok : loc -> Prop.
+Hypothesis loc_write_ok_R : forall r, loc_write_ok (R r).
+
+Let locs_read_ok (ll : list loc) : Prop :=
+ forall l, In l ll -> loc_read_ok l.
+
+Let locs_write_ok (ll : list loc) : Prop :=
+ forall l, In l ll -> loc_write_ok l.
+
+Hypothesis
+ wt_add_move :
+ forall (src dst : loc) (b : LTL.block),
+ loc_read_ok src ->
+ loc_write_ok dst ->
+ Loc.type src = Loc.type dst ->
+ wt_block tf b -> wt_block tf (add_move src dst b).
+
+Lemma in_move__in_srcdst:
+ forall m p, In m p -> In (fst m) (getsrc p) /\ In (snd m) (getdst p).
+Proof.
+intros; induction p.
+inversion H.
+destruct a as [a1 a2]; destruct m as [m1 m2]; simpl.
+elim H; intro.
+inversion H0.
+subst a2; subst a1.
+split; [left; trivial | left; trivial].
+split; right; (elim IHp; simpl; intros; auto).
+Qed.
+
+Lemma T_type: forall r, Loc.type r = Loc.type (T r).
+Proof.
+intro; unfold T.
+case (Loc.type r); auto.
+Qed.
+
+Theorem incl_nil: forall A (l : list A), incl nil l.
+Proof.
+intros A l a; simpl; intros H; case H.
+Qed.
+Hint Resolve incl_nil :datatypes.
+
+Lemma split_move_incl:
+ forall (l t1 t2 : Moves) (s d : Reg),
+ split_move l s = Some (t1, d, t2) -> incl t1 l /\ incl t2 l.
+Proof.
+induction l.
+simpl; (intros; discriminate).
+intros t1 t2 s d; destruct a as [a1 a2]; simpl.
+case (Loc.eq a1 s); intro.
+intros.
+inversion H.
+split; auto.
+apply incl_nil.
+apply incl_tl; apply incl_refl; auto.
+caseEq (split_move l s); intro; (try (intros; discriminate)).
+destruct p as [[p1 p2] p3].
+intros.
+inversion H0.
+elim (IHl p1 p3 s p2); intros; auto.
+subst p3.
+split; auto.
+generalize H1; unfold incl; simpl.
+intros H4 a [H7|H6]; [try exact H7 | idtac].
+left; (try assumption).
+right; apply H4; auto.
+apply incl_tl; auto.
+Qed.
+
+Lemma in_split_move:
+ forall (l t1 t2 : Moves) (s d : Reg),
+ split_move l s = Some (t1, d, t2) -> In (s, d) l.
+Proof.
+induction l.
+simpl; intros; discriminate.
+intros t1 t2 s d; simpl.
+destruct a as [a1 a2].
+case (Loc.eq a1 s).
+intros.
+inversion H.
+subst a1; left; auto.
+intro; caseEq (split_move l s); (intros; (try discriminate)).
+destruct p as [[p1 p2] p3].
+right; inversion H0.
+subst p2.
+apply (IHl p1 p3); auto.
+Qed.
+
+Lemma move_types_stepf:
+ forall S1,
+ (forall x1 x2,
+ In (x1, x2) (StateToMove S1 ++ (StateBeing S1 ++ StateDone S1)) ->
+ Loc.type x1 = Loc.type x2) ->
+ forall x1 x2,
+ In
+ (x1, x2)
+ (StateToMove (stepf S1) ++ (StateBeing (stepf S1) ++ StateDone (stepf S1))) ->
+ Loc.type x1 = Loc.type x2.
+Proof.
+intros S1 H x1 x2.
+destruct S1 as [[t1 b1] d1]; set (S1:=(t1, b1, d1)); destruct t1; destruct b1;
+ auto; simpl StateToMove in H |-; simpl StateBeing in H |-;
+ simpl StateDone in H |-; simpl app in H |-.
+intro;
+ elim
+ (in_app_or
+ (StateToMove (stepf S1)) (StateBeing (stepf S1) ++ StateDone (stepf S1))
+ (x1, x2)); auto.
+assert (StateToMove (stepf S1) = nil).
+simpl stepf.
+destruct m as [s d].
+case (Loc.eq d (fst (last b1))); case b1; simpl; auto.
+rewrite H1; intros H2; inversion H2.
+intro; elim (in_app_or (StateBeing (stepf S1)) (StateDone (stepf S1)) (x1, x2));
+ auto.
+assert
+ (StateBeing (stepf S1) = nil \/
+ (StateBeing (stepf S1) = b1 \/ StateBeing (stepf S1) = replace_last_s b1)).
+simpl stepf.
+destruct m as [s d].
+case (Loc.eq d (fst (last b1))); case b1; simpl; auto.
+elim H2; [intros H3; (try clear H2); (try exact H3) | intros H3; (try clear H2)].
+rewrite H3; intros H4; inversion H4.
+elim H3; [intros H2; (try clear H3); (try exact H2) | intros H2; (try clear H3)].
+rewrite H2; intros H4.
+apply H; (try in_tac).
+rewrite H2; intros H4.
+caseEq b1; intro; simpl; auto.
+rewrite H3 in H4; simpl in H4 |-; inversion H4.
+intros l H5; rewrite H5 in H4.
+generalize (app_rewriter _ l m0).
+intros [y [r H3]]; (try exact H3).
+rewrite H3 in H4.
+destruct y.
+rewrite last_replace in H4.
+elim (in_app_or r ((T r0, r1) :: nil) (x1, x2)); auto.
+intro; apply H.
+rewrite H5.
+rewrite H3; in_tac.
+intros H6; inversion H6.
+inversion H7.
+rewrite <- T_type.
+rewrite <- H10; apply H.
+rewrite H5; rewrite H3; (try in_tac).
+assert (In (r0, r1) ((r0, r1) :: nil)); [simpl; auto | in_tac].
+inversion H7.
+intro.
+destruct m as [s d].
+assert
+ (StateDone (stepf S1) = (s, d) :: d1 \/
+ StateDone (stepf S1) = (s, d) :: ((d, T d) :: d1)).
+simpl.
+case (Loc.eq d (fst (last b1))); case b1; simpl; auto.
+elim H3; [intros H4; (try clear H3); (try exact H4) | intros H4; (try clear H3)].
+apply H; (try in_tac).
+rewrite H4 in H2; in_tac.
+rewrite H4 in H2.
+simpl in H2 |-.
+elim H2; [intros H3; apply H | intros H3; elim H3; intros; [idtac | apply H]];
+ (try in_tac).
+simpl; left; auto.
+inversion H5; apply T_type.
+intro;
+ elim
+ (in_app_or
+ (StateToMove (stepf S1)) (StateBeing (stepf S1) ++ StateDone (stepf S1))
+ (x1, x2)); auto.
+simpl stepf.
+destruct m as [s d].
+case (Loc.eq s d); simpl; intros; apply H; in_tac.
+intro; elim (in_app_or (StateBeing (stepf S1)) (StateDone (stepf S1)) (x1, x2));
+ auto.
+simpl stepf.
+destruct m as [s d].
+case (Loc.eq s d); intros; apply H; (try in_tac).
+inversion H2.
+simpl stepf.
+destruct m as [s d].
+case (Loc.eq s d); intros; apply H; (try in_tac).
+simpl in H2 |-; in_tac.
+simpl in H2 |-; in_tac.
+intro;
+ elim
+ (in_app_or
+ (StateToMove (stepf S1)) (StateBeing (stepf S1) ++ StateDone (stepf S1))
+ (x1, x2)); auto.
+simpl stepf.
+destruct m as [s d].
+destruct m0 as [s0 d0].
+case (Loc.eq s d0); [simpl; intros; apply H; in_tac | idtac].
+caseEq (split_move t1 d0); intro.
+destruct p as [[t2 b2] d2].
+intros Hsplit Hd; simpl StateToMove; intro.
+elim (split_move_incl t1 t2 d2 d0 b2 Hsplit); auto.
+intros; apply H.
+assert (In (x1, x2) ((s, d) :: (t1 ++ t1))).
+generalize H1; simpl; intros.
+elim H4; [intros H5; left; (try exact H5) | intros H5; right].
+elim (in_app_or t2 d2 (x1, x2)); auto; intro; apply in_or_app; left.
+unfold incl in H2 |-.
+apply H2; auto.
+unfold incl in H3 |-; apply H3; auto.
+in_tac.
+intro; case (Loc.eq d0 (fst (last b1))); case b1; auto; simpl StateToMove;
+ intros; apply H; in_tac.
+intro; elim (in_app_or (StateBeing (stepf S1)) (StateDone (stepf S1)) (x1, x2));
+ auto.
+simpl stepf.
+destruct m as [s d].
+destruct m0 as [s0 d0].
+case (Loc.eq s d0).
+intros e; rewrite <- e; simpl StateBeing.
+rewrite <- e in H.
+intro; apply H; in_tac.
+caseEq (split_move t1 d0); intro.
+destruct p as [[t2 b2] d2].
+simpl StateBeing.
+intros.
+apply H.
+generalize (in_split_move t1 t2 d2 d0 b2 H2).
+intros.
+elim H3; intros.
+rewrite <- H5.
+in_tac.
+in_tac.
+caseEq b1.
+simpl; intros e n F; elim F.
+intros m l H3 H4.
+case (Loc.eq d0 (fst (last (m :: l)))).
+generalize (app_rewriter Move l m).
+intros [y [r H5]]; rewrite H5.
+simpl StateBeing.
+destruct y as [y1 y2]; generalize (last_replace r y1 y2).
+simpl; intros heq H6.
+unfold Move in heq |-; unfold Move.
+rewrite heq.
+intro.
+elim (in_app_or r ((T y1, y2) :: nil) (x1, x2)); auto.
+intro; apply H.
+rewrite H3; rewrite H5; in_tac.
+simpl; intros [H8|H8]; inversion H8.
+rewrite <- T_type.
+apply H.
+rewrite H3; rewrite H5.
+rewrite <- H11; assert (In (y1, y2) ((y1, y2) :: nil)); auto.
+simpl; auto.
+in_tac.
+simpl StateBeing; intros.
+apply H; rewrite H3; (try in_tac).
+simpl stepf.
+destruct m as [s d].
+destruct m0 as [s0 d0].
+case (Loc.eq s d0); [simpl; intros; apply H; in_tac | idtac].
+caseEq (split_move t1 d0); intro.
+destruct p as [[t2 b2] d2].
+intros Hsplit Hd; simpl StateDone; intro.
+apply H; (try in_tac).
+case (Loc.eq d0 (fst (last b1))); case b1; simpl StateDone; intros;
+ (try (apply H; in_tac)).
+elim H3; intros.
+apply H.
+assert (In (x1, x2) ((s0, d0) :: nil)); auto.
+rewrite H4; auto.
+simpl; left; auto.
+in_tac.
+elim H4; intros.
+inversion H5; apply T_type.
+apply H; in_tac.
+Qed.
+
+Lemma move_types_res:
+ forall S1,
+ (forall x1 x2,
+ In (x1, x2) (StateToMove S1 ++ (StateBeing S1 ++ StateDone S1)) ->
+ Loc.type x1 = Loc.type x2) ->
+ forall x1 x2,
+ In
+ (x1, x2)
+ (StateToMove (Pmov S1) ++ (StateBeing (Pmov S1) ++ StateDone (Pmov S1))) ->
+ Loc.type x1 = Loc.type x2.
+Proof.
+intros S1; elim S1 using (well_founded_ind (Wf_nat.well_founded_ltof _ mesure)).
+clear S1; intros S1 Hrec.
+destruct S1 as [[t b] d]; set (S1:=(t, b, d)).
+unfold S1; rewrite Pmov_equation; intros.
+destruct t; auto.
+destruct b; auto.
+apply (Hrec (stepf S1)).
+apply stepf1_dec; auto.
+apply move_types_stepf; auto.
+unfold S1; auto.
+apply (Hrec (stepf S1)).
+apply stepf1_dec; auto.
+apply move_types_stepf; auto.
+unfold S1; auto.
+Qed.
+
+Lemma srcdst_tmp2_stepf:
+ forall S1 x1 x2,
+ In
+ (x1, x2)
+ (StateToMove (stepf S1) ++ (StateBeing (stepf S1) ++ StateDone (stepf S1))) ->
+ (In x1 temporaries2 \/
+ In x1 (getsrc (StateToMove S1 ++ (StateBeing S1 ++ StateDone S1)))) /\
+ (In x2 temporaries2 \/
+ In x2 (getdst (StateToMove S1 ++ (StateBeing S1 ++ StateDone S1)))).
+Proof.
+intros S1 x1 x2 H.
+(repeat rewrite getsrc_app); (repeat rewrite getdst_app).
+destruct S1 as [[t1 b1] d1]; set (S1:=(t1, b1, d1)); destruct t1; destruct b1;
+ auto.
+simpl in H |-.
+elim (in_move__in_srcdst (x1, x2) d1); intros; auto.
+elim
+ (in_app_or
+ (StateToMove (stepf S1)) (StateBeing (stepf S1) ++ StateDone (stepf S1))
+ (x1, x2)); auto.
+assert (StateToMove (stepf S1) = nil).
+simpl stepf.
+destruct m as [s d].
+case (Loc.eq d (fst (last b1))); case b1; simpl; auto.
+rewrite H0; intros H2; inversion H2.
+intro; elim (in_app_or (StateBeing (stepf S1)) (StateDone (stepf S1)) (x1, x2));
+ auto.
+simpl stepf.
+destruct m as [s d].
+caseEq b1.
+simpl.
+intros h1 h2; inversion h2.
+intros m l heq; generalize (app_rewriter _ l m).
+intros [y [r H3]]; (try exact H3).
+rewrite H3.
+destruct y.
+rewrite last_app; simpl fst.
+case (Loc.eq d r0).
+intros heqd.
+rewrite last_replace.
+simpl.
+intro; elim (in_app_or r ((T r0, r1) :: nil) (x1, x2)); auto.
+rewrite heq; rewrite H3.
+rewrite getsrc_app; simpl; rewrite getdst_app; simpl.
+intro; elim (in_move__in_srcdst (x1, x2) r); auto; simpl; intros; split; right;
+ right; in_tac.
+intro.
+inversion H2; inversion H4.
+split.
+unfold T; case (Loc.type r0); left; [left | right]; auto.
+right; right; (try assumption).
+rewrite heq; rewrite H3.
+rewrite H7; simpl.
+rewrite getdst_app; simpl.
+assert (In x2 (x2 :: nil)); simpl; auto.
+in_tac.
+simpl StateBeing.
+intros; elim (in_move__in_srcdst (x1, x2) (r ++ ((r0, r1) :: nil))); auto;
+ intros; split; right; right.
+unfold snd in H4 |-; unfold fst in H2 |-; rewrite heq; rewrite H3; (try in_tac).
+unfold snd in H4 |-; unfold fst in H2 |-; rewrite heq; rewrite H3; (try in_tac).
+simpl stepf.
+destruct m as [s d].
+caseEq b1; intro.
+simpl StateDone; intro.
+unfold S1, StateToMove, StateBeing.
+simpl app.
+elim (in_move__in_srcdst (x1, x2) ((s, d) :: d1)); auto; intros; split; right.
+simpl snd in H4 |-; simpl fst in H3 |-; simpl getdst in H4 |-;
+ simpl getsrc in H3 |-; (try in_tac).
+simpl snd in H4 |-; simpl fst in H3 |-; simpl getdst in H4 |-;
+ simpl getsrc in H3 |-; (try in_tac).
+intros; generalize (app_rewriter _ l m).
+intros [y [r H4]].
+generalize H2; rewrite H4; rewrite last_app.
+destruct y as [y1 y2].
+simpl fst.
+case (Loc.eq d y1).
+simpl StateDone; intros.
+elim H3; [intros H6; inversion H6; (try exact H6) | intros H6; (try clear H5)].
+simpl; split; right; left; auto.
+elim H6; [intros H5; inversion H5; (try exact H5) | intros H5; (try clear H6)].
+split; [right; simpl; right | left].
+rewrite H1; rewrite H4; rewrite getsrc_app; simpl getsrc.
+rewrite <- e; rewrite H8; assert (In x1 (x1 :: nil)); simpl; auto; (try in_tac).
+unfold T; case (Loc.type x1); simpl; auto.
+elim (in_move__in_srcdst (x1, x2) d1); auto; intros; split; right; right;
+ (try in_tac).
+intro; simpl StateDone.
+unfold S1, StateToMove, StateBeing, StateDone.
+simpl getsrc; simpl app; (try in_tac).
+intro; elim (in_move__in_srcdst (x1, x2) ((s, d) :: d1));
+ (auto; (simpl fst; simpl snd; simpl getsrc; simpl getdst); intros);
+ (split; right; (try in_tac)).
+unfold S1, StateToMove, StateBeing, StateDone.
+elim
+ (in_app_or
+ (StateToMove (stepf S1)) (StateBeing (stepf S1) ++ StateDone (stepf S1))
+ (x1, x2)); auto.
+simpl stepf.
+destruct m as [s d].
+case (Loc.eq s d).
+simpl StateToMove.
+intros; elim (in_move__in_srcdst (x1, x2) t1); auto;
+ (repeat (rewrite getsrc_app; simpl getsrc));
+ (repeat (rewrite getdst_app; simpl getdst)); simpl fst; simpl snd; intros;
+ split; right; simpl; right; (try in_tac).
+simpl StateToMove.
+intros; elim (in_move__in_srcdst (x1, x2) t1); auto;
+ (repeat (rewrite getsrc_app; simpl getsrc));
+ (repeat (rewrite getdst_app; simpl getdst)); simpl fst; simpl snd; intros;
+ split; right; simpl; right; (try in_tac).
+intro; elim (in_app_or (StateBeing (stepf S1)) (StateDone (stepf S1)) (x1, x2));
+ auto.
+simpl stepf.
+destruct m as [s d].
+case (Loc.eq s d).
+simpl StateBeing; intros h1 h2; inversion h2.
+simpl StateBeing; intros h1 h2.
+elim (in_move__in_srcdst (x1, x2) ((s, d) :: nil)); auto; simpl fst; simpl snd;
+ simpl; intros; split; right; (try in_tac).
+elim H1; [intros H3; left; (try exact H3) | intros H3; inversion H3].
+elim H2; [intros H3; left; (try exact H3) | intros H3; inversion H3].
+simpl stepf.
+destruct m as [s d].
+case (Loc.eq s d).
+simpl StateDone; intros h1 h2.
+elim (in_move__in_srcdst (x1, x2) d1); auto; simpl fst; simpl snd; simpl;
+ intros; split; right; right; (try in_tac).
+simpl StateDone; intros h1 h2.
+elim (in_move__in_srcdst (x1, x2) d1); auto; simpl fst; simpl snd; simpl;
+ intros; split; right; right; (try in_tac).
+elim
+ (in_app_or
+ (StateToMove (stepf S1)) (StateBeing (stepf S1) ++ StateDone (stepf S1))
+ (x1, x2)); auto.
+simpl stepf.
+destruct m as [s d].
+destruct m0 as [s0 d0].
+case (Loc.eq s d0).
+unfold S1, StateToMove, StateBeing, StateDone.
+simpl app at 1.
+intros; elim (in_move__in_srcdst (x1, x2) t1);
+ (auto; simpl; intros; (split; right; right; (try in_tac))).
+intro; caseEq (split_move t1 d0); intro.
+destruct p as [[t2 b2] d2].
+intros Hsplit; unfold S1, StateToMove, StateBeing, StateDone; intro.
+elim (split_move_incl t1 t2 d2 d0 b2 Hsplit); auto.
+intros.
+assert (In (x1, x2) ((s, d) :: (t1 ++ t1))).
+generalize H0; simpl; intros.
+elim H3; [intros H5; left; (try exact H5) | intros H5; right].
+elim (in_app_or t2 d2 (x1, x2)); auto; intro; apply in_or_app; left.
+unfold incl in H1 |-.
+apply H1; auto.
+unfold incl in H2 |-; apply H2; auto.
+split; right.
+elim (in_move__in_srcdst (x1, x2) ((s, d) :: (t1 ++ t1)));
+ (auto; simpl; intros; (try in_tac)).
+elim H4; [intros H6; (try clear H4); (try exact H6) | intros H6; (try clear H4)].
+left; (try assumption).
+right; (try in_tac).
+rewrite getsrc_app in H6; (try in_tac).
+elim (in_move__in_srcdst (x1, x2) ((s, d) :: (t1 ++ t1)));
+ (auto; simpl; intros; (try in_tac)).
+elim H5; [intros H6; (try clear H5); (try exact H6) | intros H6; (try clear H5)].
+left; (try assumption).
+right; rewrite getdst_app in H6; (try in_tac).
+caseEq b1; intro.
+unfold S1, StateToMove, StateBeing, StateDone.
+intro; elim (in_move__in_srcdst (x1, x2) ((s, d) :: t1)); (auto; intros).
+simpl snd in H4 |-; simpl fst in H3 |-; split; right; (try in_tac).
+intros l heq; generalize (app_rewriter _ l m).
+intros [y [r H1]]; rewrite H1.
+destruct y as [y1 y2].
+rewrite last_app; simpl fst.
+case (Loc.eq d0 y1).
+unfold S1, StateToMove, StateBeing, StateDone.
+intros; elim (in_move__in_srcdst (x1, x2) ((s, d) :: t1)); auto; intros.
+simpl snd in H4 |-; simpl fst in H3 |-; (split; right; (try in_tac)).
+unfold S1, StateToMove, StateBeing, StateDone.
+intros; elim (in_move__in_srcdst (x1, x2) ((s, d) :: t1)); auto; intros.
+simpl snd in H4 |-; simpl fst in H3 |-; (split; right; (try in_tac)).
+intro; elim (in_app_or (StateBeing (stepf S1)) (StateDone (stepf S1)) (x1, x2));
+ auto.
+simpl stepf.
+destruct m as [s d].
+destruct m0 as [s0 d0].
+case (Loc.eq s d0).
+intros e; rewrite <- e; simpl StateBeing.
+unfold S1, StateToMove, StateBeing, StateDone.
+intros; elim (in_move__in_srcdst (x1, x2) ((s, d) :: ((s0, s) :: b1))); auto;
+ simpl; intros.
+split; right; (try in_tac).
+elim H2; [intros H4; left; (try exact H4) | intros H4; (try clear H2)].
+elim H4; [intros H2; right; (try exact H2) | intros H2; (try clear H4)].
+assert (In x1 (s0 :: nil)); auto; (try in_tac).
+simpl; auto.
+right; (try in_tac).
+elim H3; [intros H4; left; (try exact H4) | intros H4; (try clear H3)].
+elim H4; [intros H3; right; (try exact H3) | intros H3; (try clear H4)].
+rewrite <- e; (try in_tac).
+assert (In x2 (s :: nil)); [simpl; auto | try in_tac].
+right; (try in_tac).
+intro; caseEq (split_move t1 d0); intro.
+destruct p as [[t2 b2] d2].
+simpl StateBeing.
+intros.
+generalize (in_split_move t1 t2 d2 d0 b2 H1).
+intros.
+split; right; elim H2; intros.
+rewrite H4 in H3; elim (in_move__in_srcdst (x1, x2) t1); auto; intros.
+simpl snd in H6 |-; simpl fst in H5 |-; (try in_tac).
+unfold S1, StateToMove, StateBeing, StateDone.
+simpl getsrc; (try in_tac).
+elim (in_move__in_srcdst (x1, x2) ((s0, d0) :: b1)); (auto; intros).
+simpl snd in H6 |-; simpl fst in H5 |-; (try in_tac).
+unfold S1, StateToMove, StateBeing, StateDone.
+simpl.
+simpl in H5 |-.
+elim H5; [intros H7; (try clear H5); (try exact H7) | intros H7; (try clear H5)].
+assert (In x1 (s0 :: nil)); simpl; auto.
+right; in_tac.
+right; in_tac.
+inversion H4.
+simpl.
+subst b2.
+rewrite H4 in H3.
+elim (in_move__in_srcdst (x1, x2) t1); (auto; intros).
+simpl snd in H7 |-.
+right; in_tac.
+unfold S1, StateToMove, StateBeing, StateDone.
+elim (in_move__in_srcdst (x1, x2) ((s0, d0) :: b1)); auto; intros.
+simpl snd in H6 |-; (try in_tac).
+apply
+ (in_or_app (getdst ((s, d) :: t1)) (getdst ((s0, d0) :: b1) ++ getdst d1) x2);
+ right; (try in_tac).
+caseEq b1.
+intros h1 h2; inversion h2.
+intros m l heq.
+generalize (app_rewriter _ l m); intros [y [r H2]]; rewrite H2.
+destruct y as [y1 y2].
+rewrite last_app; simpl fst.
+case (Loc.eq d0 y1).
+unfold S1, StateToMove, StateBeing, StateDone.
+generalize (last_replace r y1 y2).
+unfold Move; intros H3 H6.
+rewrite H3.
+intro.
+elim (in_app_or r ((T y1, y2) :: nil) (x1, x2)); auto.
+intro.
+rewrite heq; rewrite H2; (split; right).
+elim (in_move__in_srcdst (x1, x2) r); auto; simpl fst; simpl snd; intros;
+ (try in_tac).
+simpl.
+rewrite getsrc_app; (right; (try in_tac)).
+elim (in_move__in_srcdst (x1, x2) r); auto; simpl fst; simpl snd; intros;
+ (try in_tac).
+simpl.
+rewrite getdst_app; right; (try in_tac).
+intros h; inversion h; inversion H5.
+split; [left; simpl; auto | right].
+unfold T; case (Loc.type y1); auto.
+subst y2.
+rewrite heq; rewrite H2.
+simpl.
+rewrite getdst_app; simpl.
+assert (In x2 (x2 :: nil)); [simpl; auto | right; (try in_tac)].
+unfold S1, StateToMove, StateBeing, StateDone.
+intro; rewrite heq; rewrite H2; (split; right).
+intros; elim (in_move__in_srcdst (x1, x2) (r ++ ((y1, y2) :: nil))); auto;
+ intros.
+simpl snd in H5 |-; simpl fst in H4 |-.
+simpl.
+right; (try in_tac).
+apply in_or_app; right; simpl; right; (try in_tac).
+elim (in_move__in_srcdst (x1, x2) (r ++ ((y1, y2) :: nil))); auto; intros.
+simpl snd in H5 |-.
+simpl.
+right; (try in_tac).
+apply in_or_app; right; simpl; right; (try in_tac).
+simpl stepf.
+destruct m as [s d].
+destruct m0 as [s0 d0].
+case (Loc.eq s d0).
+unfold S1, StateToMove, StateBeing, StateDone.
+intros; elim (in_move__in_srcdst (x1, x2) d1); auto; intros.
+simpl in H3 |-; simpl in H2 |-.
+split; right; (try in_tac).
+intro; caseEq (split_move t1 d0); intro.
+destruct p as [[t2 b2] d2].
+simpl StateDone.
+unfold S1, StateToMove, StateBeing, StateDone.
+intros; elim (in_move__in_srcdst (x1, x2) d1); auto; intros.
+simpl in H3 |-; simpl in H4 |-.
+split; right; (try in_tac).
+caseEq b1.
+unfold S1, StateToMove, StateBeing, StateDone.
+intros; elim (in_move__in_srcdst (x1, x2) ((s0, d0) :: d1)); auto; intros.
+simpl in H5 |-; simpl in H4 |-; split; right; (try in_tac).
+simpl.
+elim H4; [intros H6; right; (try exact H6) | intros H6; (try clear H4)].
+assert (In x1 (x1 :: nil)); [simpl; auto | rewrite H6; (try in_tac)].
+right; (try in_tac).
+elim H5; [intros H6; right; simpl; (try exact H6) | intros H6; (try clear H5)].
+assert (In x2 (x2 :: nil)); [simpl; auto | rewrite H6; (try in_tac)].
+try in_tac.
+intros m l heq.
+generalize (app_rewriter _ l m); intros [y [r H2]]; rewrite H2.
+destruct y as [y1 y2].
+rewrite last_app; simpl fst.
+case (Loc.eq d0 y1).
+unfold S1, StateToMove, StateBeing, StateDone.
+unfold S1, StateToMove, StateBeing, StateDone.
+intros.
+elim H3; intros.
+inversion H4.
+simpl; split; right; auto.
+right; apply in_or_app; right; simpl; auto.
+right; apply in_or_app; right; simpl; auto.
+elim H4; intros.
+inversion H5.
+simpl; split; [right | left].
+rewrite heq; rewrite H2; simpl.
+rewrite <- e; rewrite H7.
+rewrite getsrc_app; simpl.
+right; assert (In x1 (x1 :: nil)); [simpl; auto | try in_tac].
+unfold T; case (Loc.type x1); auto.
+elim (in_move__in_srcdst (x1, x2) d1); (auto; intros).
+simpl snd in H7 |-; simpl fst in H6 |-; split; right; (try in_tac).
+unfold S1, StateToMove, StateBeing, StateDone.
+intros; elim (in_move__in_srcdst (x1, x2) ((s0, d0) :: d1));
+ (auto; simpl; intros).
+split; right.
+elim H4; [intros H6; right; (try exact H6) | intros H6; (try clear H4)].
+apply in_or_app; right; simpl; auto.
+right; (try in_tac).
+elim H5; [intros H6; right; (try exact H6) | intros H6; (try clear H5)].
+apply in_or_app; right; simpl; auto.
+right; (try in_tac).
+Qed.
+
+Lemma getsrc_f: forall s l, In s (getsrc l) -> (exists d , In (s, d) l ).
+Proof.
+induction l; simpl getsrc.
+simpl; (intros h; elim h).
+intros; destruct a as [a1 a2].
+simpl in H |-.
+elim H; [intros H0; (try clear H); (try exact H0) | intros H0; (try clear H)].
+subst a1.
+exists a2; simpl; auto.
+simpl.
+elim IHl; [intros d H; (try clear IHl); (try exact H) | idtac]; auto.
+exists d; [right; (try assumption)].
+Qed.
+
+Lemma incl_src: forall l1 l2, incl l1 l2 -> incl (getsrc l1) (getsrc l2).
+Proof.
+intros.
+unfold incl in H |-.
+unfold incl.
+intros a H0; (try assumption).
+generalize (getsrc_f a).
+intros H1; elim H1 with ( l := l1 );
+ [intros d H2; (try clear H1); (try exact H2) | idtac]; auto.
+assert (In (a, d) l2).
+apply H; auto.
+elim (in_move__in_srcdst (a, d) l2); auto.
+Qed.
+
+Lemma getdst_f: forall d l, In d (getdst l) -> (exists s , In (s, d) l ).
+Proof.
+induction l; simpl getdst.
+simpl; (intros h; elim h).
+intros; destruct a as [a1 a2].
+simpl in H |-.
+elim H; [intros H0; (try clear H); (try exact H0) | intros H0; (try clear H)].
+subst a2.
+exists a1; simpl; auto.
+simpl.
+elim IHl; [intros s H; (try clear IHl); (try exact H) | idtac]; auto.
+exists s; [right; (try assumption)].
+Qed.
+
+Lemma incl_dst: forall l1 l2, incl l1 l2 -> incl (getdst l1) (getdst l2).
+Proof.
+intros.
+unfold incl in H |-.
+unfold incl.
+intros a H0; (try assumption).
+generalize (getdst_f a).
+intros H1; elim H1 with ( l := l1 );
+ [intros d H2; (try clear H1); (try exact H2) | idtac]; auto.
+assert (In (d, a) l2).
+apply H; auto.
+elim (in_move__in_srcdst (d, a) l2); auto.
+Qed.
+
+Lemma src_tmp2_res:
+ forall S1 x1 x2,
+ In
+ (x1, x2)
+ (StateToMove (Pmov S1) ++ (StateBeing (Pmov S1) ++ StateDone (Pmov S1))) ->
+ (In x1 temporaries2 \/
+ In x1 (getsrc (StateToMove S1 ++ (StateBeing S1 ++ StateDone S1)))) /\
+ (In x2 temporaries2 \/
+ In x2 (getdst (StateToMove S1 ++ (StateBeing S1 ++ StateDone S1)))).
+Proof.
+intros S1; elim S1 using (well_founded_ind (Wf_nat.well_founded_ltof _ mesure)).
+clear S1; intros S1 Hrec.
+destruct S1 as [[t b] d]; set (S1:=(t, b, d)).
+unfold S1; rewrite Pmov_equation; intros.
+destruct t.
+destruct b.
+apply srcdst_tmp2_stepf; auto.
+elim Hrec with ( y := stepf S1 ) ( x1 := x1 ) ( x2 := x2 );
+ [idtac | apply stepf1_dec; auto | auto].
+intros.
+elim H1; [intros H2; (try clear H1); (try exact H2) | intros H2; (try clear H1)].
+elim H0; [intros H1; (try clear H0); (try exact H1) | intros H1; (try clear H0)].
+split; [left; (try assumption) | idtac].
+left; (try assumption).
+elim (getsrc_f x1) with ( 1 := H1 ); intros x3 H3.
+split; auto.
+elim srcdst_tmp2_stepf with ( 1 := H3 ); auto.
+elim H0; [intros H1; (try clear H0); (try exact H1) | intros H1; (try clear H0)].
+elim (getdst_f x2) with ( 1 := H2 ); intros x3 H3.
+split; auto.
+elim srcdst_tmp2_stepf with ( 1 := H3 ); auto.
+elim (getsrc_f x1) with ( 1 := H1 ); intros x3 H3.
+elim srcdst_tmp2_stepf with ( 1 := H3 ); auto.
+clear H3.
+elim (getdst_f x2) with ( 1 := H2 ); intros x4 H3.
+elim srcdst_tmp2_stepf with ( 1 := H3 ); auto.
+elim Hrec with ( y := stepf S1 ) ( x1 := x1 ) ( x2 := x2 );
+ [idtac | apply stepf1_dec; auto | auto].
+intros.
+elim H1; [intros H2; (try clear H1); (try exact H2) | intros H2; (try clear H1)].
+elim H0; [intros H1; (try clear H0); (try exact H1) | intros H1; (try clear H0)].
+split; [left; (try assumption) | idtac].
+left; (try assumption).
+elim (getsrc_f x1) with ( 1 := H1 ); intros x3 H3.
+split; auto.
+elim srcdst_tmp2_stepf with ( 1 := H3 ); auto.
+elim H0; [intros H1; (try clear H0); (try exact H1) | intros H1; (try clear H0)].
+elim (getdst_f x2) with ( 1 := H2 ); intros x3 H3.
+split; auto.
+elim srcdst_tmp2_stepf with ( 1 := H3 ); auto.
+elim (getsrc_f x1) with ( 1 := H1 ); intros x3 H3.
+elim srcdst_tmp2_stepf with ( 1 := H3 ); auto.
+clear H3.
+elim (getdst_f x2) with ( 1 := H2 ); intros x4 H3.
+elim srcdst_tmp2_stepf with ( 1 := H3 ); auto.
+Qed.
+
+Lemma wt_add_moves:
+ forall p b,
+ List.map Loc.type (getsrc p) = List.map Loc.type (getdst p) ->
+ locs_read_ok (getsrc p) ->
+ locs_write_ok (getdst p) ->
+ wt_block tf b ->
+ wt_block
+ tf
+ (fold_left
+ (fun (k0 : LTL.block) =>
+ fun (p0 : loc * loc) => add_move (fst p0) (snd p0) k0) p b).
+Proof.
+induction p.
+intros; simpl; auto.
+intros; destruct a as [a1 a2]; simpl.
+apply IHp; auto.
+inversion H; auto.
+simpl in H0 |-.
+unfold locs_read_ok in H0 |-.
+simpl in H0 |-.
+unfold locs_read_ok; auto.
+generalize H1; unfold locs_write_ok; simpl; auto.
+apply wt_add_move; (try assumption).
+simpl in H0 |-.
+unfold locs_read_ok in H0 |-.
+apply H0.
+simpl; left; trivial.
+unfold locs_write_ok in H1 |-; apply H1.
+simpl; left; trivial.
+inversion H; auto.
+Qed.
+
+Lemma map_f_getsrc_getdst:
+ forall (b : Set) (f : Reg -> b) p,
+ map f (getsrc p) = map f (getdst p) ->
+ forall x1 x2, In (x1, x2) p -> f x1 = f x2.
+Proof.
+intros b f0 p; induction p; simpl; auto.
+intros; contradiction.
+destruct a.
+simpl.
+intros heq; injection heq.
+intros h1 h2.
+intros x1 x2 [H3|H3].
+injection H3.
+intros; subst; auto.
+apply IHp; auto.
+Qed.
+
+Lemma wt_parallel_move':
+ forall p b,
+ List.map Loc.type (getsrc p) = List.map Loc.type (getdst p) ->
+ locs_read_ok (getsrc p) ->
+ locs_write_ok (getdst p) -> wt_block tf b -> wt_block tf (p_move p b).
+Proof.
+unfold p_move.
+unfold P_move.
+intros; apply wt_add_moves; auto.
+rewrite getsrc_map; rewrite getdst_map.
+rewrite list_map_compose.
+rewrite list_map_compose.
+apply list_map_exten.
+generalize (move_types_res (p, nil, nil)); auto.
+destruct x as [x1 x2]; simpl; intros; auto.
+symmetry; apply H3.
+simpl.
+rewrite app_nil.
+apply map_f_getsrc_getdst; auto.
+in_tac.
+unfold locs_read_ok.
+intros l H3.
+elim getsrc_f with ( 1 := H3 ); intros x3 H4.
+elim (src_tmp2_res (p, nil, nil) l x3).
+simpl.
+rewrite app_nil.
+intros [[H'|[H'|H']]|H'] _.
+subst l; hnf; auto.
+subst l; hnf; auto.
+contradiction.
+apply H0; auto.
+in_tac.
+intros l H3.
+elim getdst_f with ( 1 := H3 ); intros x3 H4.
+elim (src_tmp2_res (p, nil, nil) x3 l).
+simpl.
+rewrite app_nil.
+intros _ [[H'|[H'|H']]|H'].
+subst l; hnf; auto.
+subst l; hnf; auto.
+contradiction.
+apply H1; auto.
+in_tac.
+Qed.
+
+Theorem wt_parallel_moveX:
+ forall srcs dsts b,
+ List.map Loc.type srcs = List.map Loc.type dsts ->
+ locs_read_ok srcs ->
+ locs_write_ok dsts -> wt_block tf b -> wt_block tf (parallel_move srcs dsts b).
+Proof.
+unfold parallel_move, parallel_move_order, P_move.
+intros.
+generalize (wt_parallel_move' (listsLoc2Moves srcs dsts)); intros H'.
+unfold p_move, P_move in H' |-.
+apply H'; auto.
+elim (getdst_lists2moves srcs dsts); auto.
+unfold Allocation.listsLoc2Moves, listsLoc2Moves.
+intros heq1 heq2; rewrite heq1; rewrite heq2; auto.
+repeat rewrite <- (list_length_map Loc.type).
+rewrite H; auto.
+elim (getdst_lists2moves srcs dsts); auto.
+unfold Allocation.listsLoc2Moves, listsLoc2Moves.
+intros heq1 heq2; rewrite heq1; auto.
+repeat rewrite <- (list_length_map Loc.type).
+rewrite H; auto.
+elim (getdst_lists2moves srcs dsts); auto.
+unfold Allocation.listsLoc2Moves, listsLoc2Moves.
+intros heq1 heq2; rewrite heq2; auto.
+repeat rewrite <- (list_length_map Loc.type).
+rewrite H; auto.
+Qed.
+
+End wt_move_correction.
diff --git a/backend/CSE.v b/backend/CSE.v
new file mode 100644
index 0000000..243f6dd
--- /dev/null
+++ b/backend/CSE.v
@@ -0,0 +1,420 @@
+(** Common subexpression elimination over RTL. This optimization
+ proceeds by value numbering over extended basic blocks. *)
+
+Require Import Coqlib.
+Require Import Maps.
+Require Import AST.
+Require Import Integers.
+Require Import Floats.
+Require Import Values.
+Require Import Mem.
+Require Import Globalenvs.
+Require Import Op.
+Require Import Registers.
+Require Import RTL.
+Require Import Kildall.
+
+(** * Value numbering *)
+
+(** The idea behind value numbering algorithms is to associate
+ abstract identifiers (``value numbers'') to the contents of registers
+ at various program points, and record equations between these
+ identifiers. For instance, consider the instruction
+ [r1 = add(r2, r3)] and assume that [r2] and [r3] are mapped
+ to abstract identifiers [x] and [y] respectively at the program
+ point just before this instruction. At the program point just after,
+ we can add the equation [z = add(x, y)] and associate [r1] with [z],
+ where [z] is a fresh abstract identifier. However, if we already
+ knew an equation [u = add(x, y)], we can preferably add no equation
+ and just associate [r1] with [u]. If there exists a register [r4]
+ mapped with [u] at this point, we can then replace the instruction
+ [r1 = add(r2, r3)] by a move instruction [r1 = r4], therefore eliminating
+ a common subexpression and reusing the result of an earlier addition.
+
+ Abstract identifiers / value numbers are represented by positive integers.
+ Equations are of the form [valnum = rhs], where the right-hand sides
+ [rhs] are either arithmetic operations or memory loads. *)
+
+Definition valnum := positive.
+
+Inductive rhs : Set :=
+ | Op: operation -> list valnum -> rhs
+ | Load: memory_chunk -> addressing -> list valnum -> rhs.
+
+Definition eq_valnum: forall (x y: valnum), {x=y}+{x<>y} := peq.
+
+Definition eq_list_valnum (x y: list valnum) : {x=y}+{x<>y}.
+Proof.
+ induction x; intros; case y; intros.
+ left; auto.
+ right; congruence.
+ right; congruence.
+ case (eq_valnum a v); intros.
+ case (IHx l); intros.
+ left; congruence.
+ right; congruence.
+ right; congruence.
+Qed.
+
+Definition eq_rhs (x y: rhs) : {x=y}+{x<>y}.
+Proof.
+ generalize Int.eq_dec; intro.
+ generalize Float.eq_dec; intro.
+ assert (forall (x y: ident), {x=y}+{x<>y}). exact peq.
+ assert (forall (x y: comparison), {x=y}+{x<>y}). decide equality.
+ assert (forall (x y: condition), {x=y}+{x<>y}). decide equality.
+ assert (forall (x y: operation), {x=y}+{x<>y}). decide equality.
+ assert (forall (x y: memory_chunk), {x=y}+{x<>y}). decide equality.
+ assert (forall (x y: addressing), {x=y}+{x<>y}). decide equality.
+ generalize eq_valnum; intro.
+ generalize eq_list_valnum; intro.
+ decide equality.
+Qed.
+
+(** A value numbering is a collection of equations between value numbers
+ plus a partial map from registers to value numbers. Additionally,
+ we maintain the next unused value number, so as to easily generate
+ fresh value numbers. *)
+
+Record numbering : Set := mknumbering {
+ num_next: valnum;
+ num_eqs: list (valnum * rhs);
+ num_reg: PTree.t valnum
+}.
+
+Definition empty_numbering :=
+ mknumbering 1%positive nil (PTree.empty valnum).
+
+(** [valnum_reg n r] returns the value number for the contents of
+ register [r]. If none exists, a fresh value number is returned
+ and associated with register [r]. The possibly updated numbering
+ is also returned. [valnum_regs] is similar, but for a list of
+ registers. *)
+
+Definition valnum_reg (n: numbering) (r: reg) : numbering * valnum :=
+ match PTree.get r n.(num_reg) with
+ | Some v => (n, v)
+ | None => (mknumbering (Psucc n.(num_next))
+ n.(num_eqs)
+ (PTree.set r n.(num_next) n.(num_reg)),
+ n.(num_next))
+ end.
+
+Fixpoint valnum_regs (n: numbering) (rl: list reg)
+ {struct rl} : numbering * list valnum :=
+ match rl with
+ | nil =>
+ (n, nil)
+ | r1 :: rs =>
+ let (n1, v1) := valnum_reg n r1 in
+ let (ns, vs) := valnum_regs n1 rs in
+ (ns, v1 :: vs)
+ end.
+
+(** [find_valnum_rhs rhs eqs] searches the list of equations [eqs]
+ for an equation of the form [vn = rhs] for some value number [vn].
+ If found, [Some vn] is returned, otherwise [None] is returned. *)
+
+Fixpoint find_valnum_rhs (r: rhs) (eqs: list (valnum * rhs))
+ {struct eqs} : option valnum :=
+ match eqs with
+ | nil => None
+ | (v, r') :: eqs1 =>
+ if eq_rhs r r' then Some v else find_valnum_rhs r eqs1
+ end.
+
+(** [add_rhs n rd rhs] updates the value numbering [n] to reflect
+ the computation of the operation or load represented by [rhs]
+ and the storing of the result in register [rd]. If an equation
+ [vn = rhs] is known, register [rd] is set to [vn]. Otherwise,
+ a fresh value number [vn] is generated and associated with [rd],
+ and the equation [vn = rhs] is added. *)
+
+Definition add_rhs (n: numbering) (rd: reg) (rh: rhs) : numbering :=
+ match find_valnum_rhs rh n.(num_eqs) with
+ | Some vres =>
+ mknumbering n.(num_next) n.(num_eqs)
+ (PTree.set rd vres n.(num_reg))
+ | None =>
+ mknumbering (Psucc n.(num_next))
+ ((n.(num_next), rh) :: n.(num_eqs))
+ (PTree.set rd n.(num_next) n.(num_reg))
+ end.
+
+(** [add_op n rd op rs] specializes [add_rhs] for the case of an
+ arithmetic operation. The right-hand side corresponding to [op]
+ and the value numbers for the argument registers [rs] is built
+ and added to [n] as described in [add_rhs].
+
+ If [op] is a move instruction, we simply assign the value number of
+ the source register to the destination register, since we know that
+ the source and destination registers have exactly the same value.
+ This enables more common subexpressions to be recognized. For instance:
+<<
+ z = add(x, y); u = x; v = add(u, y);
+>>
+ Since [u] and [x] have the same value number, the second [add]
+ is recognized as computing the same result as the first [add],
+ and therefore [u] and [z] have the same value number. *)
+
+Definition add_op (n: numbering) (rd: reg) (op: operation) (rs: list reg) :=
+ match is_move_operation op rs with
+ | Some r =>
+ let (n1, v) := valnum_reg n r in
+ mknumbering n1.(num_next) n1.(num_eqs) (PTree.set rd v n1.(num_reg))
+ | None =>
+ let (n1, vs) := valnum_regs n rs in
+ add_rhs n1 rd (Op op vs)
+ end.
+
+(** [add_load n rd chunk addr rs] specializes [add_rhs] for the case of a
+ memory load. The right-hand side corresponding to [chunk], [addr]
+ and the value numbers for the argument registers [rs] is built
+ and added to [n] as described in [add_rhs]. *)
+
+Definition add_load (n: numbering) (rd: reg)
+ (chunk: memory_chunk) (addr: addressing)
+ (rs: list reg) :=
+ let (n1, vs) := valnum_regs n rs in
+ add_rhs n1 rd (Load chunk addr vs).
+
+(** [kill_load n] removes all equations involving memory loads.
+ It is used to reflect the effect of a memory store, which can
+ potentially invalidate all such equations. *)
+
+Fixpoint kill_load_eqs (eqs: list (valnum * rhs)) : list (valnum * rhs) :=
+ match eqs with
+ | nil => nil
+ | (_, Load _ _ _) :: rem => kill_load_eqs rem
+ | v_rh :: rem => v_rh :: kill_load_eqs rem
+ end.
+
+Definition kill_loads (n: numbering) : numbering :=
+ mknumbering n.(num_next)
+ (kill_load_eqs n.(num_eqs))
+ n.(num_reg).
+
+(* [reg_valnum n vn] returns a register that is mapped to value number
+ [vn], or [None] if no such register exists. *)
+
+Definition reg_valnum (n: numbering) (vn: valnum) : option reg :=
+ PTree.fold
+ (fun (res: option reg) (r: reg) (v: valnum) =>
+ if peq v vn then Some r else res)
+ n.(num_reg) None.
+
+(* [find_rhs] and its specializations [find_op] and [find_load]
+ return a register that already holds the result of the given arithmetic
+ operation or memory load, according to the given numbering.
+ [None] is returned if no such register exists. *)
+
+Definition find_rhs (n: numbering) (rh: rhs) : option reg :=
+ match find_valnum_rhs rh n.(num_eqs) with
+ | None => None
+ | Some vres => reg_valnum n vres
+ end.
+
+Definition find_op
+ (n: numbering) (op: operation) (rs: list reg) : option reg :=
+ let (n1, vl) := valnum_regs n rs in
+ find_rhs n1 (Op op vl).
+
+Definition find_load
+ (n: numbering) (chunk: memory_chunk) (addr: addressing) (rs: list reg) : option reg :=
+ let (n1, vl) := valnum_regs n rs in
+ find_rhs n1 (Load chunk addr vl).
+
+(** * The static analysis *)
+
+(** We now define a notion of satisfiability of a numbering. This semantic
+ notion plays a central role in the correctness proof (see [CSEproof]),
+ but is defined here because we need it to define the ordering over
+ numberings used in the static analysis.
+
+ A numbering is satisfiable in a given register environment and memory
+ state if there exists a valuation, mapping value numbers to actual values,
+ that validates both the equations and the association of registers
+ to value numbers. *)
+
+Definition equation_holds
+ (valuation: valnum -> val)
+ (ge: genv) (sp: val) (m: mem)
+ (vres: valnum) (rh: rhs) : Prop :=
+ match rh with
+ | Op op vl =>
+ eval_operation ge sp op (List.map valuation vl) =
+ Some (valuation vres)
+ | Load chunk addr vl =>
+ exists a,
+ eval_addressing ge sp addr (List.map valuation vl) = Some a /\
+ loadv chunk m a = Some (valuation vres)
+ end.
+
+Definition numbering_holds
+ (valuation: valnum -> val)
+ (ge: genv) (sp: val) (rs: regset) (m: mem) (n: numbering) : Prop :=
+ (forall vn rh,
+ In (vn, rh) n.(num_eqs) ->
+ equation_holds valuation ge sp m vn rh)
+ /\ (forall r vn,
+ PTree.get r n.(num_reg) = Some vn -> rs#r = valuation vn).
+
+Definition numbering_satisfiable
+ (ge: genv) (sp: val) (rs: regset) (m: mem) (n: numbering) : Prop :=
+ exists valuation, numbering_holds valuation ge sp rs m n.
+
+Lemma empty_numbering_satisfiable:
+ forall ge sp rs m, numbering_satisfiable ge sp rs m empty_numbering.
+Proof.
+ intros; red.
+ exists (fun (vn: valnum) => Vundef). split; simpl; intros.
+ elim H.
+ rewrite PTree.gempty in H. discriminate.
+Qed.
+
+(** We now equip the type [numbering] with a partial order and a greatest
+ element. The partial order is based on entailment: [n1] is greater
+ than [n2] if [n1] is satisfiable whenever [n2] is. The greatest element
+ is, of course, the empty numbering (no equations). *)
+
+Module Numbering.
+ Definition t := numbering.
+ Definition ge (n1 n2: numbering) : Prop :=
+ forall ge sp rs m,
+ numbering_satisfiable ge sp rs m n2 ->
+ numbering_satisfiable ge sp rs m n1.
+ Definition top := empty_numbering.
+ Lemma top_ge: forall x, ge top x.
+ Proof.
+ intros; red; intros. unfold top. apply empty_numbering_satisfiable.
+ Qed.
+ Lemma refl_ge: forall x, ge x x.
+ Proof.
+ intros; red; auto.
+ Qed.
+End Numbering.
+
+(** We reuse the solver for forward dataflow inequations based on
+ propagation over extended basic blocks defined in library [Kildall]. *)
+
+Module Solver := BBlock_solver(Numbering).
+
+(** The transfer function for the dataflow analysis returns the numbering
+ ``after'' execution of the instruction at [pc], as a function of the
+ numbering ``before''. For [Iop] and [Iload] instructions, we add
+ equations or reuse existing value numbers as described for
+ [add_op] and [add_load]. For [Istore] instructions, we forget
+ all equations involving memory loads. For [Icall] instructions,
+ we could simply associate a fresh, unconstrained by equations value number
+ to the result register. However, it is often undesirable to eliminate
+ common subexpressions across a function call (there is a risk of
+ increasing too much the register pressure across the call), so we
+ just forget all equations and start afresh with an empty numbering.
+ Finally, the remaining instructions modify neither registers nor
+ the memory, so we keep the numbering unchanged. *)
+
+Definition transfer (f: function) (pc: node) (before: numbering) :=
+ match f.(fn_code)!pc with
+ | None => before
+ | Some i =>
+ match i with
+ | Inop s =>
+ before
+ | Iop op args res s =>
+ add_op before res op args
+ | Iload chunk addr args dst s =>
+ add_load before dst chunk addr args
+ | Istore chunk addr args src s =>
+ kill_loads before
+ | Icall sig ros args res s =>
+ empty_numbering
+ | Icond cond args ifso ifnot =>
+ before
+ | Ireturn optarg =>
+ before
+ end
+ end.
+
+(** The static analysis solves the dataflow inequations implied
+ by the [transfer] function using the ``extended basic block'' solver,
+ which produces sub-optimal solutions quickly. The result is
+ a mapping from program points to numberings. In the unlikely
+ case where the solver fails to find a solution, we simply associate
+ empty numberings to all program points, which is semantically correct
+ and effectively deactivates the CSE optimization. *)
+
+Definition analyze (f: RTL.function): PMap.t numbering :=
+ match Solver.fixpoint (successors f) f.(fn_nextpc)
+ (transfer f) f.(fn_entrypoint) with
+ | None => PMap.init empty_numbering
+ | Some res => res
+ end.
+
+(** * Code transformation *)
+
+(** Some operations are so cheap to compute that it is generally not
+ worth reusing their results. These operations are detected by the
+ function below. *)
+
+Definition is_trivial_op (op: operation) : bool :=
+ match op with
+ | Omove => true
+ | Ointconst _ => true
+ | Oaddrsymbol _ _ => true
+ | Oaddrstack _ => true
+ | Oundef => true
+ | _ => false
+ end.
+
+(** The code transformation is performed instruction by instruction.
+ [Iload] instructions and non-trivial [Iop] instructions are turned
+ into move instructions if their result is already available in a
+ register, as indicated by the numbering inferred at that program point. *)
+
+Definition transf_instr (n: numbering) (instr: instruction) :=
+ match instr with
+ | Iop op args res s =>
+ if is_trivial_op op then instr else
+ match find_op n op args with
+ | None => instr
+ | Some r => Iop Omove (r :: nil) res s
+ end
+ | Iload chunk addr args dst s =>
+ match find_load n chunk addr args with
+ | None => instr
+ | Some r => Iop Omove (r :: nil) dst s
+ end
+ | _ =>
+ instr
+ end.
+
+Definition transf_code (approxs: PMap.t numbering) (instrs: code) : code :=
+ PTree.map (fun pc instr => transf_instr approxs!!pc instr) instrs.
+
+Lemma transf_code_wf:
+ forall f approxs,
+ (forall pc, Plt pc f.(fn_nextpc) \/ f.(fn_code)!pc = None) ->
+ (forall pc, Plt pc f.(fn_nextpc)
+ \/ (transf_code approxs f.(fn_code))!pc = None).
+Proof.
+ intros.
+ elim (H pc); intro.
+ left; auto.
+ right. unfold transf_code. rewrite PTree.gmap.
+ unfold option_map; rewrite H0. reflexivity.
+Qed.
+
+Definition transf_function (f: function) : function :=
+ let approxs := analyze f in
+ mkfunction
+ f.(fn_sig)
+ f.(fn_params)
+ f.(fn_stacksize)
+ (transf_code approxs f.(fn_code))
+ f.(fn_entrypoint)
+ f.(fn_nextpc)
+ (transf_code_wf f approxs f.(fn_code_wf)).
+
+Definition transf_program (p: program) : program :=
+ transform_program transf_function p.
+
diff --git a/backend/CSEproof.v b/backend/CSEproof.v
new file mode 100644
index 0000000..db8a973
--- /dev/null
+++ b/backend/CSEproof.v
@@ -0,0 +1,845 @@
+(** Correctness proof for common subexpression elimination. *)
+
+Require Import Coqlib.
+Require Import Maps.
+Require Import AST.
+Require Import Integers.
+Require Import Floats.
+Require Import Values.
+Require Import Mem.
+Require Import Globalenvs.
+Require Import Op.
+Require Import Registers.
+Require Import RTL.
+Require Import Kildall.
+Require Import CSE.
+
+(** * Semantic properties of value numberings *)
+
+(** ** Well-formedness of numberings *)
+
+(** A numbering is well-formed if all registers mentioned in equations
+ are less than the ``next'' register number given in the numbering.
+ This guarantees that the next register is fresh with respect to
+ the equations. *)
+
+Definition wf_rhs (next: valnum) (rh: rhs) : Prop :=
+ match rh with
+ | Op op vl => forall v, In v vl -> Plt v next
+ | Load chunk addr vl => forall v, In v vl -> Plt v next
+ end.
+
+Definition wf_equation (next: valnum) (vr: valnum) (rh: rhs) : Prop :=
+ Plt vr next /\ wf_rhs next rh.
+
+Definition wf_numbering (n: numbering) : Prop :=
+ (forall v rh,
+ In (v, rh) n.(num_eqs) -> wf_equation n.(num_next) v rh)
+/\
+ (forall r v,
+ PTree.get r n.(num_reg) = Some v -> Plt v n.(num_next)).
+
+Lemma wf_empty_numbering:
+ wf_numbering empty_numbering.
+Proof.
+ unfold empty_numbering; split; simpl; intros.
+ elim H.
+ rewrite PTree.gempty in H. congruence.
+Qed.
+
+Lemma wf_rhs_increasing:
+ forall next1 next2 rh,
+ Ple next1 next2 ->
+ wf_rhs next1 rh -> wf_rhs next2 rh.
+Proof.
+ intros; destruct rh; simpl; intros; apply Plt_Ple_trans with next1; auto.
+Qed.
+
+Lemma wf_equation_increasing:
+ forall next1 next2 vr rh,
+ Ple next1 next2 ->
+ wf_equation next1 vr rh -> wf_equation next2 vr rh.
+Proof.
+ intros. elim H0; intros. split.
+ apply Plt_Ple_trans with next1; auto.
+ apply wf_rhs_increasing with next1; auto.
+Qed.
+
+(** We now show that all operations over numberings
+ preserve well-formedness. *)
+
+Lemma wf_valnum_reg:
+ forall n r n' v,
+ wf_numbering n ->
+ valnum_reg n r = (n', v) ->
+ wf_numbering n' /\ Plt v n'.(num_next) /\ Ple n.(num_next) n'.(num_next).
+Proof.
+ intros until v. intros WF. inversion WF.
+ generalize (H0 r v).
+ unfold valnum_reg. destruct ((num_reg n)!r).
+ intros. replace n' with n. split. auto.
+ split. apply H1. congruence.
+ apply Ple_refl.
+ congruence.
+ intros. inversion H2. simpl. split.
+ split; simpl; intros.
+ apply wf_equation_increasing with (num_next n). apply Ple_succ. auto.
+ rewrite PTree.gsspec in H3. destruct (peq r0 r).
+ replace v0 with (num_next n). apply Plt_succ. congruence.
+ apply Plt_trans_succ; eauto.
+ split. apply Plt_succ. apply Ple_succ.
+Qed.
+
+Lemma wf_valnum_regs:
+ forall rl n n' vl,
+ wf_numbering n ->
+ valnum_regs n rl = (n', vl) ->
+ wf_numbering n' /\
+ (forall v, In v vl -> Plt v n'.(num_next)) /\
+ Ple n.(num_next) n'.(num_next).
+Proof.
+ induction rl; intros.
+ simpl in H0. inversion H0. subst n'; subst vl.
+ simpl. intuition.
+ simpl in H0.
+ caseEq (valnum_reg n a). intros n1 v1 EQ1.
+ caseEq (valnum_regs n1 rl). intros ns vs EQS.
+ rewrite EQ1 in H0; rewrite EQS in H0; simpl in H0.
+ inversion H0. subst n'; subst vl.
+ generalize (wf_valnum_reg _ _ _ _ H EQ1); intros [A1 [B1 C1]].
+ generalize (IHrl _ _ _ A1 EQS); intros [As [Bs Cs]].
+ split. auto.
+ split. simpl; intros. elim H1; intro.
+ subst v. eapply Plt_Ple_trans; eauto.
+ auto.
+ eapply Ple_trans; eauto.
+Qed.
+
+Lemma find_valnum_rhs_correct:
+ forall rh vn eqs,
+ find_valnum_rhs rh eqs = Some vn -> In (vn, rh) eqs.
+Proof.
+ induction eqs; simpl.
+ congruence.
+ case a; intros v r'. case (eq_rhs rh r'); intro.
+ intro. left. congruence.
+ intro. right. auto.
+Qed.
+
+Lemma wf_add_rhs:
+ forall n rd rh,
+ wf_numbering n ->
+ wf_rhs n.(num_next) rh ->
+ wf_numbering (add_rhs n rd rh).
+Proof.
+ intros. inversion H. unfold add_rhs.
+ caseEq (find_valnum_rhs rh n.(num_eqs)); intros.
+ split; simpl. assumption.
+ intros r v0. rewrite PTree.gsspec. case (peq r rd); intros.
+ inversion H4. subst v0.
+ elim (H1 v rh (find_valnum_rhs_correct _ _ _ H3)). auto.
+ eauto.
+ split; simpl.
+ intros v rh0 [A1|A2]. inversion A1. subst rh0.
+ split. apply Plt_succ. apply wf_rhs_increasing with n.(num_next).
+ apply Ple_succ. auto.
+ apply wf_equation_increasing with n.(num_next). apply Ple_succ. auto.
+ intros r v. rewrite PTree.gsspec. case (peq r rd); intro.
+ intro. inversion H4. apply Plt_succ.
+ intro. apply Plt_trans_succ. eauto.
+Qed.
+
+Lemma wf_add_op:
+ forall n rd op rs,
+ wf_numbering n ->
+ wf_numbering (add_op n rd op rs).
+Proof.
+ intros. unfold add_op.
+ case (is_move_operation op rs).
+ intro r. caseEq (valnum_reg n r); intros n' v EQ.
+ destruct (wf_valnum_reg _ _ _ _ H EQ) as [[A1 A2] [B C]].
+ split; simpl. assumption. intros until v0. rewrite PTree.gsspec.
+ case (peq r0 rd); intros. replace v0 with v. auto. congruence.
+ eauto.
+ caseEq (valnum_regs n rs). intros n' vl EQ.
+ generalize (wf_valnum_regs _ _ _ _ H EQ). intros [A [B C]].
+ apply wf_add_rhs; auto.
+Qed.
+
+Lemma wf_add_load:
+ forall n rd chunk addr rs,
+ wf_numbering n ->
+ wf_numbering (add_load n rd chunk addr rs).
+Proof.
+ intros. unfold add_load.
+ caseEq (valnum_regs n rs). intros n' vl EQ.
+ generalize (wf_valnum_regs _ _ _ _ H EQ). intros [A [B C]].
+ apply wf_add_rhs; auto.
+Qed.
+
+Lemma kill_load_eqs_incl:
+ forall eqs, List.incl (kill_load_eqs eqs) eqs.
+Proof.
+ induction eqs; simpl; intros.
+ apply incl_refl.
+ destruct a. destruct r. apply incl_same_head; auto.
+ auto.
+ apply incl_tl. auto.
+Qed.
+
+Lemma wf_kill_loads:
+ forall n, wf_numbering n -> wf_numbering (kill_loads n).
+Proof.
+ intros. inversion H. unfold kill_loads; split; simpl; intros.
+ apply H0. apply kill_load_eqs_incl. auto.
+ eauto.
+Qed.
+
+Lemma wf_transfer:
+ forall f pc n, wf_numbering n -> wf_numbering (transfer f pc n).
+Proof.
+ intros. unfold transfer.
+ destruct (f.(fn_code)!pc); auto.
+ destruct i; auto.
+ apply wf_add_op; auto.
+ apply wf_add_load; auto.
+ apply wf_kill_loads; auto.
+ apply wf_empty_numbering.
+Qed.
+
+(** As a consequence, the numberings computed by the static analysis
+ are well formed. *)
+
+Theorem wf_analyze:
+ forall f pc, wf_numbering (analyze f)!!pc.
+Proof.
+ unfold analyze; intros.
+ caseEq (Solver.fixpoint (successors f) (fn_nextpc f)
+ (transfer f) (fn_entrypoint f)).
+ intros approx EQ.
+ eapply Solver.fixpoint_invariant with (P := wf_numbering); eauto.
+ exact wf_empty_numbering.
+ exact (wf_transfer f).
+ intro. rewrite PMap.gi. apply wf_empty_numbering.
+Qed.
+
+(** ** Properties of satisfiability of numberings *)
+
+Module ValnumEq.
+ Definition t := valnum.
+ Definition eq := peq.
+End ValnumEq.
+
+Module VMap := EMap(ValnumEq).
+
+Section SATISFIABILITY.
+
+Variable ge: genv.
+Variable sp: val.
+Variable m: mem.
+
+(** Agremment between two mappings from value numbers to values
+ up to a given value number. *)
+
+Definition valu_agree (valu1 valu2: valnum -> val) (upto: valnum) : Prop :=
+ forall v, Plt v upto -> valu2 v = valu1 v.
+
+Lemma valu_agree_refl:
+ forall valu upto, valu_agree valu valu upto.
+Proof.
+ intros; red; auto.
+Qed.
+
+Lemma valu_agree_trans:
+ forall valu1 valu2 valu3 upto12 upto23,
+ valu_agree valu1 valu2 upto12 ->
+ valu_agree valu2 valu3 upto23 ->
+ Ple upto12 upto23 ->
+ valu_agree valu1 valu3 upto12.
+Proof.
+ intros; red; intros. transitivity (valu2 v).
+ apply H0. apply Plt_Ple_trans with upto12; auto.
+ apply H; auto.
+Qed.
+
+Lemma valu_agree_list:
+ forall valu1 valu2 upto vl,
+ valu_agree valu1 valu2 upto ->
+ (forall v, In v vl -> Plt v upto) ->
+ map valu2 vl = map valu1 vl.
+Proof.
+ intros. apply list_map_exten. intros. symmetry. apply H. auto.
+Qed.
+
+(** The [numbering_holds] predicate (defined in file [CSE]) is
+ extensional with respect to [valu_agree]. *)
+
+Lemma numbering_holds_exten:
+ forall valu1 valu2 n rs,
+ valu_agree valu1 valu2 n.(num_next) ->
+ wf_numbering n ->
+ numbering_holds valu1 ge sp rs m n ->
+ numbering_holds valu2 ge sp rs m n.
+Proof.
+ intros. inversion H0. inversion H1. split; intros.
+ generalize (H2 _ _ H6). intro WFEQ.
+ generalize (H4 _ _ H6).
+ unfold equation_holds; destruct rh.
+ elim WFEQ; intros.
+ rewrite (valu_agree_list valu1 valu2 n.(num_next)).
+ rewrite H. auto. auto. auto. exact H8.
+ elim WFEQ; intros.
+ rewrite (valu_agree_list valu1 valu2 n.(num_next)).
+ rewrite H. auto. auto. auto. exact H8.
+ rewrite H. auto. eauto.
+Qed.
+
+(** [valnum_reg] and [valnum_regs] preserve the [numbering_holds] predicate.
+ Moreover, it is always the case that the returned value number has
+ the value of the given register in the final assignment of values to
+ value numbers. *)
+
+Lemma valnum_reg_holds:
+ forall valu1 rs n r n' v,
+ wf_numbering n ->
+ numbering_holds valu1 ge sp rs m n ->
+ valnum_reg n r = (n', v) ->
+ exists valu2,
+ numbering_holds valu2 ge sp rs m n' /\
+ valu2 v = rs#r /\
+ valu_agree valu1 valu2 n.(num_next).
+Proof.
+ intros until v. unfold valnum_reg.
+ caseEq (n.(num_reg)!r).
+ (* Register already has a value number *)
+ intros. inversion H2. subst n'; subst v0.
+ inversion H1.
+ exists valu1. split. auto.
+ split. symmetry. auto.
+ apply valu_agree_refl.
+ (* Register gets a fresh value number *)
+ intros. inversion H2. subst n'. subst v. inversion H1.
+ set (valu2 := VMap.set n.(num_next) rs#r valu1).
+ assert (AG: valu_agree valu1 valu2 n.(num_next)).
+ red; intros. unfold valu2. apply VMap.gso.
+ auto with coqlib.
+ elim (numbering_holds_exten _ _ _ _ AG H0 H1); intros.
+ exists valu2.
+ split. split; simpl; intros. auto.
+ unfold valu2, VMap.set, ValnumEq.eq.
+ rewrite PTree.gsspec in H7. destruct (peq r0 r).
+ inversion H7. rewrite peq_true. congruence.
+ case (peq vn (num_next n)); intro.
+ inversion H0. generalize (H9 _ _ H7). rewrite e. intro.
+ elim (Plt_strict _ H10).
+ auto.
+ split. unfold valu2. apply VMap.gss.
+ auto.
+Qed.
+
+Lemma valnum_regs_holds:
+ forall rs rl valu1 n n' vl,
+ wf_numbering n ->
+ numbering_holds valu1 ge sp rs m n ->
+ valnum_regs n rl = (n', vl) ->
+ exists valu2,
+ numbering_holds valu2 ge sp rs m n' /\
+ List.map valu2 vl = rs##rl /\
+ valu_agree valu1 valu2 n.(num_next).
+Proof.
+ induction rl; simpl; intros.
+ (* base case *)
+ inversion H1; subst n'; subst vl.
+ exists valu1. split. auto. split. reflexivity. apply valu_agree_refl.
+ (* inductive case *)
+ caseEq (valnum_reg n a); intros n1 v1 EQ1.
+ caseEq (valnum_regs n1 rl); intros ns vs EQs.
+ rewrite EQ1 in H1; rewrite EQs in H1. inversion H1. subst vl; subst n'.
+ generalize (valnum_reg_holds _ _ _ _ _ _ H H0 EQ1).
+ intros [valu2 [A [B C]]].
+ generalize (wf_valnum_reg _ _ _ _ H EQ1). intros [D [E F]].
+ generalize (IHrl _ _ _ _ D A EQs).
+ intros [valu3 [P [Q R]]].
+ exists valu3.
+ split. auto.
+ split. simpl. rewrite R. congruence. auto.
+ eapply valu_agree_trans; eauto.
+Qed.
+
+(** A reformulation of the [equation_holds] predicate in terms
+ of the value to which a right-hand side of an equation evaluates. *)
+
+Definition rhs_evals_to
+ (valu: valnum -> val) (rh: rhs) (v: val) : Prop :=
+ match rh with
+ | Op op vl =>
+ eval_operation ge sp op (List.map valu vl) = Some v
+ | Load chunk addr vl =>
+ exists a,
+ eval_addressing ge sp addr (List.map valu vl) = Some a /\
+ loadv chunk m a = Some v
+ end.
+
+Lemma equation_evals_to_holds_1:
+ forall valu rh v vres,
+ rhs_evals_to valu rh v ->
+ equation_holds valu ge sp m vres rh ->
+ valu vres = v.
+Proof.
+ intros until vres. unfold rhs_evals_to, equation_holds.
+ destruct rh. congruence.
+ intros [a1 [A1 B1]] [a2 [A2 B2]]. congruence.
+Qed.
+
+Lemma equation_evals_to_holds_2:
+ forall valu rh v vres,
+ wf_rhs vres rh ->
+ rhs_evals_to valu rh v ->
+ equation_holds (VMap.set vres v valu) ge sp m vres rh.
+Proof.
+ intros until vres. unfold wf_rhs, rhs_evals_to, equation_holds.
+ rewrite VMap.gss.
+ assert (forall vl: list valnum,
+ (forall v, In v vl -> Plt v vres) ->
+ map (VMap.set vres v valu) vl = map valu vl).
+ intros. apply list_map_exten. intros.
+ symmetry. apply VMap.gso. apply Plt_ne. auto.
+ destruct rh; intros; rewrite H; auto.
+Qed.
+
+(** The numbering obtained by adding an equation [rd = rhs] is satisfiable
+ in a concrete register set where [rd] is set to the value of [rhs]. *)
+
+Lemma add_rhs_satisfiable:
+ forall n rh valu1 rs rd v,
+ wf_numbering n ->
+ wf_rhs n.(num_next) rh ->
+ numbering_holds valu1 ge sp rs m n ->
+ rhs_evals_to valu1 rh v ->
+ numbering_satisfiable ge sp (rs#rd <- v) m (add_rhs n rd rh).
+Proof.
+ intros. unfold add_rhs.
+ caseEq (find_valnum_rhs rh n.(num_eqs)).
+ (* RHS found *)
+ intros vres FINDVN. inversion H1.
+ exists valu1. split; simpl; intros.
+ auto.
+ rewrite Regmap.gsspec.
+ rewrite PTree.gsspec in H5.
+ destruct (peq r rd).
+ symmetry. eapply equation_evals_to_holds_1; eauto.
+ apply H3. apply find_valnum_rhs_correct. congruence.
+ auto.
+ (* RHS not found *)
+ intro FINDVN.
+ set (valu2 := VMap.set n.(num_next) v valu1).
+ assert (AG: valu_agree valu1 valu2 n.(num_next)).
+ red; intros. unfold valu2. apply VMap.gso.
+ auto with coqlib.
+ elim (numbering_holds_exten _ _ _ _ AG H H1); intros.
+ exists valu2. split; simpl; intros.
+ elim H5; intro.
+ inversion H6; subst vn; subst rh0.
+ unfold valu2. eapply equation_evals_to_holds_2; eauto.
+ auto.
+ rewrite Regmap.gsspec. rewrite PTree.gsspec in H5. destruct (peq r rd).
+ unfold valu2. inversion H5. symmetry. apply VMap.gss.
+ auto.
+Qed.
+
+(** [add_op] returns a numbering that is satisfiable in the register
+ set after execution of the corresponding [Iop] instruction. *)
+
+Lemma add_op_satisfiable:
+ forall n rs op args dst v,
+ wf_numbering n ->
+ numbering_satisfiable ge sp rs m n ->
+ eval_operation ge sp op rs##args = Some v ->
+ numbering_satisfiable ge sp (rs#dst <- v) m (add_op n dst op args).
+Proof.
+ intros. inversion H0.
+ unfold add_op.
+ caseEq (@is_move_operation reg op args).
+ intros arg EQ.
+ destruct (is_move_operation_correct _ _ EQ) as [A B]. subst op args.
+ caseEq (valnum_reg n arg). intros n1 v1 VL.
+ generalize (valnum_reg_holds _ _ _ _ _ _ H H2 VL). intros [valu2 [A [B C]]].
+ generalize (wf_valnum_reg _ _ _ _ H VL). intros [D [E F]].
+ elim A; intros. exists valu2; split; simpl; intros.
+ auto. rewrite Regmap.gsspec. rewrite PTree.gsspec in H5.
+ destruct (peq r dst). simpl in H1. congruence. auto.
+ intro NEQ. caseEq (valnum_regs n args). intros n1 vl VRL.
+ generalize (valnum_regs_holds _ _ _ _ _ _ H H2 VRL). intros [valu2 [A [B C]]].
+ generalize (wf_valnum_regs _ _ _ _ H VRL). intros [D [E F]].
+ apply add_rhs_satisfiable with valu2; auto.
+ simpl. congruence.
+Qed.
+
+(** [add_load] returns a numbering that is satisfiable in the register
+ set after execution of the corresponding [Iload] instruction. *)
+
+Lemma add_load_satisfiable:
+ forall n rs chunk addr args dst a v,
+ wf_numbering n ->
+ numbering_satisfiable ge sp rs m n ->
+ eval_addressing ge sp addr rs##args = Some a ->
+ loadv chunk m a = Some v ->
+ numbering_satisfiable ge sp
+ (rs#dst <- v)
+ m (add_load n dst chunk addr args).
+Proof.
+ intros. inversion H0.
+ unfold add_load.
+ caseEq (valnum_regs n args). intros n1 vl VRL.
+ generalize (valnum_regs_holds _ _ _ _ _ _ H H3 VRL). intros [valu2 [A [B C]]].
+ generalize (wf_valnum_regs _ _ _ _ H VRL). intros [D [E F]].
+ apply add_rhs_satisfiable with valu2; auto.
+ simpl. exists a; split; congruence.
+Qed.
+
+(** [kill_load] preserves satisfiability. Moreover, the resulting numbering
+ is satisfiable in any concrete memory state. *)
+
+Lemma kill_load_eqs_ops:
+ forall v rhs eqs,
+ In (v, rhs) (kill_load_eqs eqs) ->
+ match rhs with Op _ _ => True | Load _ _ _ => False end.
+Proof.
+ induction eqs; simpl; intros.
+ elim H.
+ destruct a. destruct r.
+ elim H; intros. inversion H0; subst v0; subst rhs. auto.
+ apply IHeqs. auto.
+ apply IHeqs. auto.
+Qed.
+
+Lemma kill_load_satisfiable:
+ forall n rs m',
+ numbering_satisfiable ge sp rs m n ->
+ numbering_satisfiable ge sp rs m' (kill_loads n).
+Proof.
+ intros. inversion H. inversion H0.
+ generalize (kill_load_eqs_incl n.(num_eqs)). intro.
+ exists x. split; intros.
+ generalize (H1 _ _ (H3 _ H4)).
+ generalize (kill_load_eqs_ops _ _ _ H4).
+ destruct rh; simpl. auto. tauto.
+ apply H2. assumption.
+Qed.
+
+(** Correctness of [reg_valnum]: if it returns a register [r],
+ that register correctly maps back to the given value number. *)
+
+Lemma reg_valnum_correct:
+ forall n v r, reg_valnum n v = Some r -> n.(num_reg)!r = Some v.
+Proof.
+ intros until r. unfold reg_valnum. rewrite PTree.fold_spec.
+ assert(forall l acc0,
+ List.fold_left
+ (fun (acc: option reg) (p: reg * valnum) =>
+ if peq (snd p) v then Some (fst p) else acc)
+ l acc0 = Some r ->
+ In (r, v) l \/ acc0 = Some r).
+ induction l; simpl.
+ intros. tauto.
+ case a; simpl; intros r1 v1 acc0 FL.
+ generalize (IHl _ FL).
+ case (peq v1 v); intro.
+ subst v1. intros [A|B]. tauto. inversion B; subst r1. tauto.
+ tauto.
+ intro. elim (H _ _ H0); intro.
+ apply PTree.elements_complete; auto.
+ discriminate.
+Qed.
+
+(** Correctness of [find_op] and [find_load]: if successful and in a
+ satisfiable numbering, the returned register does contain the
+ result value of the operation or memory load. *)
+
+Lemma find_rhs_correct:
+ forall valu rs n rh r,
+ numbering_holds valu ge sp rs m n ->
+ find_rhs n rh = Some r ->
+ rhs_evals_to valu rh rs#r.
+Proof.
+ intros until r. intros NH.
+ unfold find_rhs.
+ caseEq (find_valnum_rhs rh n.(num_eqs)); intros.
+ generalize (find_valnum_rhs_correct _ _ _ H); intro.
+ generalize (reg_valnum_correct _ _ _ H0); intro.
+ inversion NH.
+ generalize (H3 _ _ H1). rewrite (H4 _ _ H2).
+ destruct rh; simpl; auto.
+ discriminate.
+Qed.
+
+Lemma find_op_correct:
+ forall rs n op args r,
+ wf_numbering n ->
+ numbering_satisfiable ge sp rs m n ->
+ find_op n op args = Some r ->
+ eval_operation ge sp op rs##args = Some rs#r.
+Proof.
+ intros until r. intros WF [valu NH].
+ unfold find_op. caseEq (valnum_regs n args). intros n' vl VR FIND.
+ generalize (valnum_regs_holds _ _ _ _ _ _ WF NH VR).
+ intros [valu2 [NH2 [EQ AG]]].
+ rewrite <- EQ.
+ change (rhs_evals_to valu2 (Op op vl) rs#r).
+ eapply find_rhs_correct; eauto.
+Qed.
+
+Lemma find_load_correct:
+ forall rs n chunk addr args r,
+ wf_numbering n ->
+ numbering_satisfiable ge sp rs m n ->
+ find_load n chunk addr args = Some r ->
+ exists a,
+ eval_addressing ge sp addr rs##args = Some a /\
+ loadv chunk m a = Some rs#r.
+Proof.
+ intros until r. intros WF [valu NH].
+ unfold find_load. caseEq (valnum_regs n args). intros n' vl VR FIND.
+ generalize (valnum_regs_holds _ _ _ _ _ _ WF NH VR).
+ intros [valu2 [NH2 [EQ AG]]].
+ rewrite <- EQ.
+ change (rhs_evals_to valu2 (Load chunk addr vl) rs#r).
+ eapply find_rhs_correct; eauto.
+Qed.
+
+End SATISFIABILITY.
+
+(** The transfer function preserves satisfiability of numberings. *)
+
+Lemma transfer_correct:
+ forall ge c sp pc rs m pc' rs' m' f n,
+ exec_instr ge c sp pc rs m pc' rs' m' ->
+ c = f.(fn_code) ->
+ wf_numbering n ->
+ numbering_satisfiable ge sp rs m n ->
+ numbering_satisfiable ge sp rs' m' (transfer f pc n).
+Proof.
+ induction 1; intros; subst c; unfold transfer; rewrite H; auto.
+ (* Iop *)
+ eapply add_op_satisfiable; eauto.
+ (* Iload *)
+ eapply add_load_satisfiable; eauto.
+ (* Istore *)
+ eapply kill_load_satisfiable; eauto.
+ (* Icall *)
+ apply empty_numbering_satisfiable.
+Qed.
+
+(** The numberings associated to each instruction by the static analysis
+ are inductively satisfiable, in the following sense: the numbering
+ at the function entry point is satisfiable, and for any RTL execution
+ from [pc] to [pc'], satisfiability at [pc] implies
+ satisfiability at [pc']. *)
+
+Theorem analysis_correct_1:
+ forall ge c sp pc rs m pc' rs' m' f,
+ exec_instr ge c sp pc rs m pc' rs' m' ->
+ c = f.(fn_code) ->
+ numbering_satisfiable ge sp rs m (analyze f)!!pc ->
+ numbering_satisfiable ge sp rs' m' (analyze f)!!pc'.
+Proof.
+ intros until f. intros EXEC CODE.
+ generalize (wf_analyze f pc).
+ unfold analyze.
+ caseEq (Solver.fixpoint (successors f) (fn_nextpc f)
+ (transfer f) (fn_entrypoint f)).
+ intros res FIXPOINT WF NS.
+ assert (numbering_satisfiable ge sp rs' m' (transfer f pc res!!pc)).
+ eapply transfer_correct; eauto.
+ assert (Numbering.ge res!!pc' (transfer f pc res!!pc)).
+ eapply Solver.fixpoint_solution; eauto.
+ elim (fn_code_wf f pc); intro. auto.
+ rewrite <- CODE in H0.
+ elim (exec_instr_present _ _ _ _ _ _ _ _ _ EXEC H0).
+ rewrite CODE in EXEC. eapply successors_correct; eauto.
+ apply H0. auto.
+ intros. rewrite PMap.gi. apply empty_numbering_satisfiable.
+Qed.
+
+Theorem analysis_correct_N:
+ forall ge c sp pc rs m pc' rs' m' f,
+ exec_instrs ge c sp pc rs m pc' rs' m' ->
+ c = f.(fn_code) ->
+ numbering_satisfiable ge sp rs m (analyze f)!!pc ->
+ numbering_satisfiable ge sp rs' m' (analyze f)!!pc'.
+Proof.
+ induction 1; intros.
+ assumption.
+ eapply analysis_correct_1; eauto.
+ eauto.
+Qed.
+
+Theorem analysis_correct_entry:
+ forall ge sp rs m f,
+ numbering_satisfiable ge sp rs m (analyze f)!!(f.(fn_entrypoint)).
+Proof.
+ intros.
+ replace ((analyze f)!!(f.(fn_entrypoint)))
+ with empty_numbering.
+ apply empty_numbering_satisfiable.
+ unfold analyze.
+ caseEq (Solver.fixpoint (successors f) (fn_nextpc f)
+ (transfer f) (fn_entrypoint f)).
+ intros res FIXPOINT.
+ symmetry. change empty_numbering with Solver.L.top.
+ eapply Solver.fixpoint_entry; eauto.
+ intros. symmetry. apply PMap.gi.
+Qed.
+
+(** * Semantic preservation *)
+
+Section PRESERVATION.
+
+Variable prog: program.
+Let tprog := transf_program prog.
+Let ge := Genv.globalenv prog.
+Let tge := Genv.globalenv tprog.
+
+Lemma symbols_preserved:
+ forall (s: ident), Genv.find_symbol tge s = Genv.find_symbol ge s.
+Proof (Genv.find_symbol_transf transf_function prog).
+
+Lemma functions_translated:
+ forall (v: val) (f: RTL.function),
+ Genv.find_funct ge v = Some f ->
+ Genv.find_funct tge v = Some (transf_function f).
+Proof (@Genv.find_funct_transf _ _ transf_function prog).
+
+Lemma funct_ptr_translated:
+ forall (b: block) (f: RTL.function),
+ Genv.find_funct_ptr ge b = Some f ->
+ Genv.find_funct_ptr tge b = Some (transf_function f).
+Proof (@Genv.find_funct_ptr_transf _ _ transf_function prog).
+
+(** The proof of semantic preservation is a simulation argument using
+ diagrams of the following form:
+<<
+ pc, rs, m ------------------------ pc, rs, m
+ | |
+ | |
+ v v
+ pc', rs', m' --------------------- pc', rs', m'
+>>
+ Left: RTL execution in the original program. Right: RTL execution in
+ the optimized program. Precondition (top): the numbering at [pc]
+ (returned by the static analysis) is satisfiable. Postcondition: none.
+*)
+
+Definition exec_instr_prop
+ (c: code) (sp: val)
+ (pc: node) (rs: regset) (m: mem)
+ (pc': node) (rs': regset) (m': mem) : Prop :=
+ forall f
+ (CF: c = f.(RTL.fn_code))
+ (SAT: numbering_satisfiable ge sp rs m (analyze f)!!pc),
+ exec_instr tge (transf_code (analyze f) c) sp pc rs m pc' rs' m'.
+
+Definition exec_instrs_prop
+ (c: code) (sp: val)
+ (pc: node) (rs: regset) (m: mem)
+ (pc': node) (rs': regset) (m': mem) : Prop :=
+ forall f
+ (CF: c = f.(RTL.fn_code))
+ (SAT: numbering_satisfiable ge sp rs m (analyze f)!!pc),
+ exec_instrs tge (transf_code (analyze f) c) sp pc rs m pc' rs' m'.
+
+Definition exec_function_prop
+ (f: RTL.function) (args: list val) (m: mem)
+ (res: val) (m': mem) : Prop :=
+ exec_function tge (transf_function f) args m res m'.
+
+Ltac TransfInstr :=
+ match goal with
+ | H1: (PTree.get ?pc ?c = Some ?instr), f: function |- _ =>
+ cut ((transf_code (analyze f) c)!pc = Some(transf_instr (analyze f)!!pc instr));
+ [ simpl
+ | unfold transf_code; rewrite PTree.gmap;
+ unfold option_map; rewrite H1; reflexivity ]
+ end.
+
+(** The proof of simulation is by structural induction on the evaluation
+ derivation for the source program. *)
+
+Lemma transf_function_correct:
+ forall f args m res m',
+ exec_function ge f args m res m' ->
+ exec_function_prop f args m res m'.
+Proof.
+ apply (exec_function_ind_3 ge
+ exec_instr_prop exec_instrs_prop exec_function_prop);
+ intros; red; intros; try TransfInstr.
+ (* Inop *)
+ intro; apply exec_Inop; auto.
+ (* Iop *)
+ assert (eval_operation tge sp op rs##args = Some v).
+ rewrite <- H0. apply eval_operation_preserved. exact symbols_preserved.
+ case (is_trivial_op op).
+ intro. eapply exec_Iop'; eauto.
+ caseEq (find_op (analyze f)!!pc op args). intros r FIND CODE.
+ eapply exec_Iop'; eauto. simpl.
+ assert (eval_operation ge sp op rs##args = Some rs#r).
+ eapply find_op_correct; eauto.
+ eapply wf_analyze; eauto.
+ congruence.
+ intros. eapply exec_Iop'; eauto.
+ (* Iload *)
+ assert (eval_addressing tge sp addr rs##args = Some a).
+ rewrite <- H0. apply eval_addressing_preserved. exact symbols_preserved.
+ caseEq (find_load (analyze f)!!pc chunk addr args). intros r FIND CODE.
+ eapply exec_Iop'; eauto. simpl.
+ assert (exists a, eval_addressing ge sp addr rs##args = Some a
+ /\ loadv chunk m a = Some rs#r).
+ eapply find_load_correct; eauto.
+ eapply wf_analyze; eauto.
+ elim H3; intros a' [A B].
+ congruence.
+ intros. eapply exec_Iload'; eauto.
+ (* Istore *)
+ assert (eval_addressing tge sp addr rs##args = Some a).
+ rewrite <- H0. apply eval_addressing_preserved. exact symbols_preserved.
+ intro; eapply exec_Istore; eauto.
+ (* Icall *)
+ assert (find_function tge ros rs = Some (transf_function f)).
+ destruct ros; simpl in H0; simpl.
+ apply functions_translated; auto.
+ rewrite symbols_preserved. destruct (Genv.find_symbol ge i).
+ apply funct_ptr_translated; auto. discriminate.
+ intro; eapply exec_Icall with (f := transf_function f); eauto.
+ (* Icond true *)
+ intro; eapply exec_Icond_true; eauto.
+ (* Icond false *)
+ intro; eapply exec_Icond_false; eauto.
+ (* refl *)
+ apply exec_refl.
+ (* one *)
+ apply exec_one; auto.
+ (* trans *)
+ eapply exec_trans; eauto. apply H2; auto.
+ eapply analysis_correct_N; eauto.
+ (* function *)
+ intro. unfold transf_function; eapply exec_funct; simpl; eauto.
+ eapply H1; eauto. eapply analysis_correct_entry; eauto.
+Qed.
+
+Theorem transf_program_correct:
+ forall (r: val),
+ exec_program prog r -> exec_program tprog r.
+Proof.
+ intros r [fptr [f [m [FINDS [FINDF [SIG EXEC]]]]]].
+ red. exists fptr; exists (transf_function f); exists m.
+ split. change (prog_main tprog) with (prog_main prog).
+ rewrite symbols_preserved. assumption.
+ split. apply funct_ptr_translated; auto.
+ split. unfold transf_function.
+ rewrite <- SIG. destruct (analyze f); reflexivity.
+ apply transf_function_correct.
+ unfold tprog, transf_program. rewrite Genv.init_mem_transf.
+ exact EXEC.
+Qed.
+
+End PRESERVATION.
diff --git a/backend/Cmconstr.v b/backend/Cmconstr.v
new file mode 100644
index 0000000..cd50e38
--- /dev/null
+++ b/backend/Cmconstr.v
@@ -0,0 +1,911 @@
+(** Smart constructors for Cminor. This library provides functions
+ for building Cminor expressions and statements, especially expressions
+ consisting of operator applications. These functions examine their
+ arguments to choose cheaper forms of operators whenever possible.
+
+ For instance, [add e1 e2] will return a Cminor expression semantically
+ equivalent to [Eop Oadd (e1 ::: e2 ::: Enil)], but will use a
+ [Oaddimm] operator if one of the arguments is an integer constant,
+ or suppress the addition altogether if one of the arguments is the
+ null integer. In passing, we perform operator reassociation
+ ([(e + c1) * c2] becomes [(e * c2) + (c1 * c2)]) and a small amount
+ of constant propagation.
+
+ In more general terms, the purpose of the smart constructors is twofold:
+- Perform instruction selection (for operators, loads, stores and
+ conditional expressions);
+- Abstract over processor dependencies in operators and addressing modes,
+ providing Cminor providers with processor-independent ways of constructing
+ Cminor terms.
+*)
+
+Require Import Coqlib.
+Require Import Compare_dec.
+Require Import Maps.
+Require Import AST.
+Require Import Integers.
+Require Import Floats.
+Require Import Values.
+Require Import Mem.
+Require Import Op.
+Require Import Globalenvs.
+Require Import Cminor.
+
+Infix ":::" := Econs (at level 60, right associativity) : cminor_scope.
+
+Open Scope cminor_scope.
+
+(** * Lifting of let-bound variables *)
+
+(** Some of the smart constructors, as well as the Cminor producers,
+ generate [Elet] constructs to share the evaluation of a subexpression.
+ Owing to the use of de Bruijn indices for let-bound variables,
+ we need to shift de Bruijn indices when an expression [b] is put
+ in a [Elet a b] context. *)
+
+Fixpoint lift_expr (p: nat) (a: expr) {struct a}: expr :=
+ match a with
+ | Evar id => Evar id
+ | Eassign id b => Eassign id (lift_expr p b)
+ | Eop op bl => Eop op (lift_exprlist p bl)
+ | Eload chunk addr bl => Eload chunk addr (lift_exprlist p bl)
+ | Estore chunk addr bl c =>
+ Estore chunk addr (lift_exprlist p bl) (lift_expr p c)
+ | Ecall sig b cl => Ecall sig (lift_expr p b) (lift_exprlist p cl)
+ | Econdition b c d =>
+ Econdition (lift_condexpr p b) (lift_expr p c) (lift_expr p d)
+ | Elet b c => Elet (lift_expr p b) (lift_expr (S p) c)
+ | Eletvar n =>
+ if le_gt_dec p n then Eletvar (S n) else Eletvar n
+ end
+
+with lift_condexpr (p: nat) (a: condexpr) {struct a}: condexpr :=
+ match a with
+ | CEtrue => CEtrue
+ | CEfalse => CEfalse
+ | CEcond cond bl => CEcond cond (lift_exprlist p bl)
+ | CEcondition b c d =>
+ CEcondition (lift_condexpr p b) (lift_condexpr p c) (lift_condexpr p d)
+ end
+
+with lift_exprlist (p: nat) (a: exprlist) {struct a}: exprlist :=
+ match a with
+ | Enil => Enil
+ | Econs b cl => Econs (lift_expr p b) (lift_exprlist p cl)
+ end.
+
+Definition lift (a: expr): expr := lift_expr O a.
+
+(** * Smart constructors for operators *)
+
+Definition negint (e: expr) := Eop (Osubimm Int.zero) (e ::: Enil).
+Definition negfloat (e: expr) := Eop Onegf (e ::: Enil).
+Definition absfloat (e: expr) := Eop Oabsf (e ::: Enil).
+Definition intoffloat (e: expr) := Eop Ointoffloat (e ::: Enil).
+Definition floatofint (e: expr) := Eop Ofloatofint (e ::: Enil).
+Definition floatofintu (e: expr) := Eop Ofloatofintu (e ::: Enil).
+
+(** ** Integer logical negation *)
+
+(** The natural way to write smart constructors is by pattern-matching
+ on their arguments, recognizing cases where cheaper operators
+ or combined operators are applicable. For instance, integer logical
+ negation has three special cases (not-and, not-or and not-xor),
+ along with a default case that uses not-or over its arguments and itself.
+ This is written naively as follows:
+<<
+Definition notint (e: expr) :=
+ match e with
+ | Eop Oand (t1:::t2:::Enil) => Eop Onand (t1:::t2:::Enil)
+ | Eop Oor (t1:::t2:::Enil) => Eop Onor (t1:::t2:::Enil)
+ | Eop Oxor (t1:::t2:::Enil) => Eop Onxor (t1:::t2:::Enil)
+ | _ => Elet(e, Eop Onor (Eletvar O ::: Eletvar O ::: Enil)
+ end.
+>>
+ However, Coq expands complex pattern-matchings like the above into
+ elementary matchings over all constructors of an inductive type,
+ resulting in much duplication of the final catch-all case.
+ Such duplications generate huge executable code and duplicate
+ cases in the correctness proofs.
+
+ To limit this duplication, we use the following trick due to
+ Yves Bertot. We first define a dependent inductive type that
+ characterizes the expressions that match each of the 4 cases of interest.
+*)
+
+Inductive notint_cases: forall (e: expr), Set :=
+ | notint_case1:
+ forall (t1: expr) (t2: expr),
+ notint_cases (Eop Oand (t1:::t2:::Enil))
+ | notint_case2:
+ forall (t1: expr) (t2: expr),
+ notint_cases (Eop Oor (t1:::t2:::Enil))
+ | notint_case3:
+ forall (t1: expr) (t2: expr),
+ notint_cases (Eop Oxor (t1:::t2:::Enil))
+ | notint_default:
+ forall (e: expr),
+ notint_cases e.
+
+(** We then define a classification function that takes an expression
+ and return in which case it falls. Note that the catch-all case
+ [notint_default] does not state that it is mutually exclusive with
+ the first three, more specific cases. The classification function
+ nonetheless chooses the specific cases in preference to the catch-all
+ case. *)
+
+Definition notint_match (e: expr) :=
+ match e as z1 return notint_cases z1 with
+ | Eop Oand (t1:::t2:::Enil) =>
+ notint_case1 t1 t2
+ | Eop Oor (t1:::t2:::Enil) =>
+ notint_case2 t1 t2
+ | Eop Oxor (t1:::t2:::Enil) =>
+ notint_case3 t1 t2
+ | e =>
+ notint_default e
+ end.
+
+(** Finally, the [notint] function we need is defined by a 4-case match
+ over the result of the classification function. Thus, no duplication
+ of the right-hand sides of this match occur, and the proof has only
+ 4 cases to consider (it proceeds by case over [notint_match e]).
+ Since the default case is not obviously exclusive with the three
+ specific cases, it is important that its right-hand side is
+ semantically correct for all possible values of [e], which is the
+ case here and for all other smart constructors. *)
+
+Definition notint (e: expr) :=
+ match notint_match e with
+ | notint_case1 t1 t2 =>
+ Eop Onand (t1:::t2:::Enil)
+ | notint_case2 t1 t2 =>
+ Eop Onor (t1:::t2:::Enil)
+ | notint_case3 t1 t2 =>
+ Eop Onxor (t1:::t2:::Enil)
+ | notint_default e =>
+ Elet e (Eop Onor (Eletvar O ::: Eletvar O ::: Enil))
+ end.
+
+(** This programming pattern will be applied systematically for the
+ other smart constructors in this file. *)
+
+(** ** Boolean negation *)
+
+Definition notbool_base (e: expr) :=
+ Eop (Ocmp (Ccompuimm Ceq Int.zero)) (e ::: Enil).
+
+Fixpoint notbool (e: expr) {struct e} : expr :=
+ match e with
+ | Eop (Ointconst n) Enil =>
+ Eop (Ointconst (if Int.eq n Int.zero then Int.one else Int.zero)) Enil
+ | Eop (Ocmp cond) args =>
+ Eop (Ocmp (negate_condition cond)) args
+ | Econdition e1 e2 e3 =>
+ Econdition e1 (notbool e2) (notbool e3)
+ | _ =>
+ notbool_base e
+ end.
+
+(** ** Truncations and sign extensions *)
+
+Definition cast8signed (e: expr) := Eop Ocast8signed (e ::: Enil).
+
+Definition cast8unsigned (e: expr) :=
+ Eop (Orolm Int.zero (Int.repr 255)) (e ::: Enil).
+Definition cast16signed (e: expr) :=
+ Eop Ocast16signed (e ::: Enil).
+Definition cast16unsigned (e: expr) :=
+ Eop (Orolm Int.zero (Int.repr 65535)) (e ::: Enil).
+Definition singleoffloat (e: expr) :=
+ Eop Osingleoffloat (e ::: Enil).
+
+(** ** Integer addition and pointer addition *)
+
+(*
+Definition addimm (n: int) (e: expr) :=
+ if Int.eq n Int.zero then e else
+ match e with
+ | Eop (Ointconst m) Enil => Eop (Ointconst(Int.add n m)) Enil
+ | Eop (Oaddrsymbol s m) Enil => Eop (Oaddrsymbol s (Int.add n m)) Enil
+ | Eop (Oaddrstack m) Enil => Eop (Oaddrstack (Int.add n m)) Enil
+ | Eop (Oaddimm m) (t ::: Enil) => Eop (Oaddimm(Int.add n m)) (t ::: Enil)
+ | _ => Eop (Oaddimm n) (e ::: Enil)
+ end.
+*)
+
+(** Addition of an integer constant. *)
+
+Inductive addimm_cases: forall (e: expr), Set :=
+ | addimm_case1:
+ forall (m: int),
+ addimm_cases (Eop (Ointconst m) Enil)
+ | addimm_case2:
+ forall (s: ident) (m: int),
+ addimm_cases (Eop (Oaddrsymbol s m) Enil)
+ | addimm_case3:
+ forall (m: int),
+ addimm_cases (Eop (Oaddrstack m) Enil)
+ | addimm_case4:
+ forall (m: int) (t: expr),
+ addimm_cases (Eop (Oaddimm m) (t ::: Enil))
+ | addimm_default:
+ forall (e: expr),
+ addimm_cases e.
+
+Definition addimm_match (e: expr) :=
+ match e as z1 return addimm_cases z1 with
+ | Eop (Ointconst m) Enil =>
+ addimm_case1 m
+ | Eop (Oaddrsymbol s m) Enil =>
+ addimm_case2 s m
+ | Eop (Oaddrstack m) Enil =>
+ addimm_case3 m
+ | Eop (Oaddimm m) (t ::: Enil) =>
+ addimm_case4 m t
+ | e =>
+ addimm_default e
+ end.
+
+Definition addimm (n: int) (e: expr) :=
+ if Int.eq n Int.zero then e else
+ match addimm_match e with
+ | addimm_case1 m =>
+ Eop (Ointconst(Int.add n m)) Enil
+ | addimm_case2 s m =>
+ Eop (Oaddrsymbol s (Int.add n m)) Enil
+ | addimm_case3 m =>
+ Eop (Oaddrstack (Int.add n m)) Enil
+ | addimm_case4 m t =>
+ Eop (Oaddimm(Int.add n m)) (t ::: Enil)
+ | addimm_default e =>
+ Eop (Oaddimm n) (e ::: Enil)
+ end.
+
+(** Addition of two integer or pointer expressions. *)
+
+(*
+Definition add (e1: expr) (e2: expr) :=
+ match e1, e2 with
+ | Eop (Ointconst n1) Enil, t2 => addimm n1 t2
+ | Eop (Oaddimm n1) (t1:::Enil), Eop (Oaddimm n2) (t2:::Enil) => addimm (Int.add n1 n2) (Eop Oadd (t1:::t2:::Enil))
+ | Eop(Oaddimm n1) (t1:::Enil)), t2 => addimm n1 (Eop Oadd (t1:::t2:::Enil))
+ | t1, Eop (Ointconst n2) Enil => addimm n2 t1
+ | t1, Eop (Oaddimm n2) (t2:::Enil) => addimm n2 (Eop Oadd (t1:::t2:::Enil))
+ | _, _ => Eop Oadd (e1:::e2:::Enil)
+ end.
+*)
+
+Inductive add_cases: forall (e1: expr) (e2: expr), Set :=
+ | add_case1:
+ forall (n1: int) (t2: expr),
+ add_cases (Eop (Ointconst n1) Enil) (t2)
+ | add_case2:
+ forall (n1: int) (t1: expr) (n2: int) (t2: expr),
+ add_cases (Eop (Oaddimm n1) (t1:::Enil)) (Eop (Oaddimm n2) (t2:::Enil))
+ | add_case3:
+ forall (n1: int) (t1: expr) (t2: expr),
+ add_cases (Eop(Oaddimm n1) (t1:::Enil)) (t2)
+ | add_case4:
+ forall (t1: expr) (n2: int),
+ add_cases (t1) (Eop (Ointconst n2) Enil)
+ | add_case5:
+ forall (t1: expr) (n2: int) (t2: expr),
+ add_cases (t1) (Eop (Oaddimm n2) (t2:::Enil))
+ | add_default:
+ forall (e1: expr) (e2: expr),
+ add_cases e1 e2.
+
+Definition add_match_aux (e1: expr) (e2: expr) :=
+ match e2 as z2 return add_cases e1 z2 with
+ | Eop (Ointconst n2) Enil =>
+ add_case4 e1 n2
+ | Eop (Oaddimm n2) (t2:::Enil) =>
+ add_case5 e1 n2 t2
+ | e2 =>
+ add_default e1 e2
+ end.
+
+Definition add_match (e1: expr) (e2: expr) :=
+ match e1 as z1, e2 as z2 return add_cases z1 z2 with
+ | Eop (Ointconst n1) Enil, t2 =>
+ add_case1 n1 t2
+ | Eop (Oaddimm n1) (t1:::Enil), Eop (Oaddimm n2) (t2:::Enil) =>
+ add_case2 n1 t1 n2 t2
+ | Eop(Oaddimm n1) (t1:::Enil), t2 =>
+ add_case3 n1 t1 t2
+ | e1, e2 =>
+ add_match_aux e1 e2
+ end.
+
+Definition add (e1: expr) (e2: expr) :=
+ match add_match e1 e2 with
+ | add_case1 n1 t2 =>
+ addimm n1 t2
+ | add_case2 n1 t1 n2 t2 =>
+ addimm (Int.add n1 n2) (Eop Oadd (t1:::t2:::Enil))
+ | add_case3 n1 t1 t2 =>
+ addimm n1 (Eop Oadd (t1:::t2:::Enil))
+ | add_case4 t1 n2 =>
+ addimm n2 t1
+ | add_case5 t1 n2 t2 =>
+ addimm n2 (Eop Oadd (t1:::t2:::Enil))
+ | add_default e1 e2 =>
+ Eop Oadd (e1:::e2:::Enil)
+ end.
+
+(** ** Integer and pointer subtraction *)
+
+(*
+Definition sub (e1: expr) (e2: expr) :=
+ match e1, e2 with
+ | t1, Eop (Ointconst n2) Enil => addimm (Int.neg n2) t1
+ | Eop (Oaddimm n1) (t1:::Enil), Eop (Oaddimm n2) (t2:::Enil) => addimm
+(intsub n1 n2) (Eop Osub (t1:::t2:::Enil))
+ | Eop (Oaddimm n1) (t1:::Enil), t2 => addimm n1 (Eop Osub (t1:::t2:::Rni
+l))
+ | t1, Eop (Oaddimm n2) (t2:::Enil) => addimm (Int.neg n2) (Eop Osub (t1:::
+:t2:::Enil))
+ | _, _ => Eop Osub (e1:::e2:::Enil)
+ end.
+*)
+
+Inductive sub_cases: forall (e1: expr) (e2: expr), Set :=
+ | sub_case1:
+ forall (t1: expr) (n2: int),
+ sub_cases (t1) (Eop (Ointconst n2) Enil)
+ | sub_case2:
+ forall (n1: int) (t1: expr) (n2: int) (t2: expr),
+ sub_cases (Eop (Oaddimm n1) (t1:::Enil)) (Eop (Oaddimm n2) (t2:::Enil))
+ | sub_case3:
+ forall (n1: int) (t1: expr) (t2: expr),
+ sub_cases (Eop (Oaddimm n1) (t1:::Enil)) (t2)
+ | sub_case4:
+ forall (t1: expr) (n2: int) (t2: expr),
+ sub_cases (t1) (Eop (Oaddimm n2) (t2:::Enil))
+ | sub_default:
+ forall (e1: expr) (e2: expr),
+ sub_cases e1 e2.
+
+Definition sub_match_aux (e1: expr) (e2: expr) :=
+ match e1 as z1 return sub_cases z1 e2 with
+ | Eop (Oaddimm n1) (t1:::Enil) =>
+ sub_case3 n1 t1 e2
+ | e1 =>
+ sub_default e1 e2
+ end.
+
+Definition sub_match (e1: expr) (e2: expr) :=
+ match e2 as z2, e1 as z1 return sub_cases z1 z2 with
+ | Eop (Ointconst n2) Enil, t1 =>
+ sub_case1 t1 n2
+ | Eop (Oaddimm n2) (t2:::Enil), Eop (Oaddimm n1) (t1:::Enil) =>
+ sub_case2 n1 t1 n2 t2
+ | Eop (Oaddimm n2) (t2:::Enil), t1 =>
+ sub_case4 t1 n2 t2
+ | e2, e1 =>
+ sub_match_aux e1 e2
+ end.
+
+Definition sub (e1: expr) (e2: expr) :=
+ match sub_match e1 e2 with
+ | sub_case1 t1 n2 =>
+ addimm (Int.neg n2) t1
+ | sub_case2 n1 t1 n2 t2 =>
+ addimm (Int.sub n1 n2) (Eop Osub (t1:::t2:::Enil))
+ | sub_case3 n1 t1 t2 =>
+ addimm n1 (Eop Osub (t1:::t2:::Enil))
+ | sub_case4 t1 n2 t2 =>
+ addimm (Int.neg n2) (Eop Osub (t1:::t2:::Enil))
+ | sub_default e1 e2 =>
+ Eop Osub (e1:::e2:::Enil)
+ end.
+
+(** ** Rotates and immediate shifts *)
+
+(*
+Definition rolm (e1: expr) :=
+ match e1 with
+ | Eop (Ointconst n1) Enil =>
+ Eop (Ointconst(Int.and (Int.rol n1 amount2) mask2)) Enil
+ | Eop (Orolm amount1 mask1) (t1:::Enil) =>
+ let amount := Int.and (Int.add amount1 amount2) Ox1Fl in
+ let mask := Int.and (Int.rol mask1 amount2) mask2 in
+ if Int.is_rlw_mask mask
+ then Eop (Orolm amount mask) (t1:::Enil)
+ else Eop (Orolm amount2 mask2) (e1:::Enil)
+ | _ => Eop (Orolm amount2 mask2) (e1:::Enil)
+ end
+*)
+
+Inductive rolm_cases: forall (e1: expr), Set :=
+ | rolm_case1:
+ forall (n1: int),
+ rolm_cases (Eop (Ointconst n1) Enil)
+ | rolm_case2:
+ forall (amount1: int) (mask1: int) (t1: expr),
+ rolm_cases (Eop (Orolm amount1 mask1) (t1:::Enil))
+ | rolm_default:
+ forall (e1: expr),
+ rolm_cases e1.
+
+Definition rolm_match (e1: expr) :=
+ match e1 as z1 return rolm_cases z1 with
+ | Eop (Ointconst n1) Enil =>
+ rolm_case1 n1
+ | Eop (Orolm amount1 mask1) (t1:::Enil) =>
+ rolm_case2 amount1 mask1 t1
+ | e1 =>
+ rolm_default e1
+ end.
+
+Definition rolm (e1: expr) (amount2 mask2: int) :=
+ match rolm_match e1 with
+ | rolm_case1 n1 =>
+ Eop (Ointconst(Int.and (Int.rol n1 amount2) mask2)) Enil
+ | rolm_case2 amount1 mask1 t1 =>
+ let amount := Int.and (Int.add amount1 amount2) (Int.repr 31) in
+ let mask := Int.and (Int.rol mask1 amount2) mask2 in
+ if Int.is_rlw_mask mask
+ then Eop (Orolm amount mask) (t1:::Enil)
+ else Eop (Orolm amount2 mask2) (e1:::Enil)
+ | rolm_default e1 =>
+ Eop (Orolm amount2 mask2) (e1:::Enil)
+ end.
+
+Definition shlimm (e1: expr) (n2: int) :=
+ if Int.eq n2 Int.zero then
+ e1
+ else if Int.ltu n2 (Int.repr 32) then
+ rolm e1 n2 (Int.shl Int.mone n2)
+ else
+ Eop Oshl (e1:::Eop (Ointconst n2) Enil:::Enil).
+
+Definition shruimm (e1: expr) (n2: int) :=
+ if Int.eq n2 Int.zero then
+ e1
+ else if Int.ltu n2 (Int.repr 32) then
+ rolm e1 (Int.sub (Int.repr 32) n2) (Int.shru Int.mone n2)
+ else
+ Eop Oshru (e1:::Eop (Ointconst n2) Enil:::Enil).
+
+(** ** Integer multiply *)
+
+Definition mulimm_base (n1: int) (e2: expr) :=
+ match Int.one_bits n1 with
+ | i :: nil =>
+ shlimm e2 i
+ | i :: j :: nil =>
+ Elet e2
+ (Eop Oadd (shlimm (Eletvar 0) i :::
+ shlimm (Eletvar 0) j ::: Enil))
+ | _ =>
+ Eop (Omulimm n1) (e2:::Enil)
+ end.
+
+(*
+Definition mulimm (n1: int) (e2: expr) :=
+ if Int.eq n1 Int.zero then
+ Elet e2 (Eop (Ointconst Int.zero) Enil)
+ else if Int.eq n1 Int.one then
+ e2
+ else match e2 with
+ | Eop (Ointconst n2) Enil => Eop (Ointconst(intmul n1 n2)) Enil
+ | Eop (Oaddimm n2) (t2:::Enil) => addimm (intmul n1 n2) (mulimm_base n1 t2)
+ | _ => mulimm_base n1 e2
+ end.
+*)
+
+Inductive mulimm_cases: forall (e2: expr), Set :=
+ | mulimm_case1:
+ forall (n2: int),
+ mulimm_cases (Eop (Ointconst n2) Enil)
+ | mulimm_case2:
+ forall (n2: int) (t2: expr),
+ mulimm_cases (Eop (Oaddimm n2) (t2:::Enil))
+ | mulimm_default:
+ forall (e2: expr),
+ mulimm_cases e2.
+
+Definition mulimm_match (e2: expr) :=
+ match e2 as z1 return mulimm_cases z1 with
+ | Eop (Ointconst n2) Enil =>
+ mulimm_case1 n2
+ | Eop (Oaddimm n2) (t2:::Enil) =>
+ mulimm_case2 n2 t2
+ | e2 =>
+ mulimm_default e2
+ end.
+
+Definition mulimm (n1: int) (e2: expr) :=
+ if Int.eq n1 Int.zero then
+ Elet e2 (Eop (Ointconst Int.zero) Enil)
+ else if Int.eq n1 Int.one then
+ e2
+ else match mulimm_match e2 with
+ | mulimm_case1 n2 =>
+ Eop (Ointconst(Int.mul n1 n2)) Enil
+ | mulimm_case2 n2 t2 =>
+ addimm (Int.mul n1 n2) (mulimm_base n1 t2)
+ | mulimm_default e2 =>
+ mulimm_base n1 e2
+ end.
+
+(*
+Definition mul (e1: expr) (e2: expr) :=
+ match e1, e2 with
+ | Eop (Ointconst n1) Enil, t2 => mulimm n1 t2
+ | t1, Eop (Ointconst n2) Enil => mulimm n2 t1
+ | _, _ => Eop Omul (e1:::e2:::Enil)
+ end.
+*)
+
+Inductive mul_cases: forall (e1: expr) (e2: expr), Set :=
+ | mul_case1:
+ forall (n1: int) (t2: expr),
+ mul_cases (Eop (Ointconst n1) Enil) (t2)
+ | mul_case2:
+ forall (t1: expr) (n2: int),
+ mul_cases (t1) (Eop (Ointconst n2) Enil)
+ | mul_default:
+ forall (e1: expr) (e2: expr),
+ mul_cases e1 e2.
+
+Definition mul_match_aux (e1: expr) (e2: expr) :=
+ match e2 as z2 return mul_cases e1 z2 with
+ | Eop (Ointconst n2) Enil =>
+ mul_case2 e1 n2
+ | e2 =>
+ mul_default e1 e2
+ end.
+
+Definition mul_match (e1: expr) (e2: expr) :=
+ match e1 as z1 return mul_cases z1 e2 with
+ | Eop (Ointconst n1) Enil =>
+ mul_case1 n1 e2
+ | e1 =>
+ mul_match_aux e1 e2
+ end.
+
+Definition mul (e1: expr) (e2: expr) :=
+ match mul_match e1 e2 with
+ | mul_case1 n1 t2 =>
+ mulimm n1 t2
+ | mul_case2 t1 n2 =>
+ mulimm n2 t1
+ | mul_default e1 e2 =>
+ Eop Omul (e1:::e2:::Enil)
+ end.
+
+(** ** Integer division and modulus *)
+
+Definition divs (e1: expr) (e2: expr) := Eop Odiv (e1:::e2:::Enil).
+
+Definition mod_aux (divop: operation) (e1 e2: expr) :=
+ Elet e1
+ (Elet (lift e2)
+ (Eop Osub (Eletvar 1 :::
+ Eop Omul (Eop divop (Eletvar 1 ::: Eletvar 0 ::: Enil) :::
+ Eletvar 0 :::
+ Enil) :::
+ Enil))).
+
+Definition mods := mod_aux Odiv.
+
+Inductive divu_cases: forall (e2: expr), Set :=
+ | divu_case1:
+ forall (n2: int),
+ divu_cases (Eop (Ointconst n2) Enil)
+ | divu_default:
+ forall (e2: expr),
+ divu_cases e2.
+
+Definition divu_match (e2: expr) :=
+ match e2 as z1 return divu_cases z1 with
+ | Eop (Ointconst n2) Enil =>
+ divu_case1 n2
+ | e2 =>
+ divu_default e2
+ end.
+
+Definition divu (e1: expr) (e2: expr) :=
+ match divu_match e2 with
+ | divu_case1 n2 =>
+ match Int.is_power2 n2 with
+ | Some l2 => shruimm e1 l2
+ | None => Eop Odivu (e1:::e2:::Enil)
+ end
+ | divu_default e2 =>
+ Eop Odivu (e1:::e2:::Enil)
+ end.
+
+Definition modu (e1: expr) (e2: expr) :=
+ match divu_match e2 with
+ | divu_case1 n2 =>
+ match Int.is_power2 n2 with
+ | Some l2 => rolm e1 Int.zero (Int.sub n2 Int.one)
+ | None => mod_aux Odivu e1 e2
+ end
+ | divu_default e2 =>
+ mod_aux Odivu e1 e2
+ end.
+
+(** ** Bitwise and, or, xor *)
+
+Definition andimm (n1: int) (e2: expr) :=
+ if Int.is_rlw_mask n1
+ then rolm e2 Int.zero n1
+ else Eop (Oandimm n1) (e2:::Enil).
+
+Definition and (e1: expr) (e2: expr) :=
+ match mul_match e1 e2 with
+ | mul_case1 n1 t2 =>
+ andimm n1 t2
+ | mul_case2 t1 n2 =>
+ andimm n2 t1
+ | mul_default e1 e2 =>
+ Eop Oand (e1:::e2:::Enil)
+ end.
+
+Definition same_expr_pure (e1 e2: expr) :=
+ match e1, e2 with
+ | Evar v1, Evar v2 => if ident_eq v1 v2 then true else false
+ | _, _ => false
+ end.
+
+Inductive or_cases: forall (e1: expr) (e2: expr), Set :=
+ | or_case1:
+ forall (amount1: int) (mask1: int) (t1: expr)
+ (amount2: int) (mask2: int) (t2: expr),
+ or_cases (Eop (Orolm amount1 mask1) (t1:::Enil))
+ (Eop (Orolm amount2 mask2) (t2:::Enil))
+ | or_default:
+ forall (e1: expr) (e2: expr),
+ or_cases e1 e2.
+
+Definition or_match (e1: expr) (e2: expr) :=
+ match e1 as z1, e2 as z2 return or_cases z1 z2 with
+ | Eop (Orolm amount1 mask1) (t1:::Enil),
+ Eop (Orolm amount2 mask2) (t2:::Enil) =>
+ or_case1 amount1 mask1 t1 amount2 mask2 t2
+ | e1, e2 =>
+ or_default e1 e2
+ end.
+
+Definition or (e1: expr) (e2: expr) :=
+ match or_match e1 e2 with
+ | or_case1 amount1 mask1 t1 amount2 mask2 t2 =>
+ if Int.eq amount1 amount2
+ && Int.is_rlw_mask (Int.or mask1 mask2)
+ && same_expr_pure t1 t2
+ then Eop (Orolm amount1 (Int.or mask1 mask2)) (t1:::Enil)
+ else Eop Oor (e1:::e2:::Enil)
+ | or_default e1 e2 =>
+ Eop Oor (e1:::e2:::Enil)
+ end.
+
+Definition xor (e1 e2: expr) := Eop Oxor (e1:::e2:::Enil).
+
+(** ** General shifts *)
+
+Inductive shift_cases: forall (e1: expr), Set :=
+ | shift_case1:
+ forall (n2: int),
+ shift_cases (Eop (Ointconst n2) Enil)
+ | shift_default:
+ forall (e1: expr),
+ shift_cases e1.
+
+Definition shift_match (e1: expr) :=
+ match e1 as z1 return shift_cases z1 with
+ | Eop (Ointconst n2) Enil =>
+ shift_case1 n2
+ | e1 =>
+ shift_default e1
+ end.
+
+Definition shl (e1: expr) (e2: expr) :=
+ match shift_match e2 with
+ | shift_case1 n2 =>
+ shlimm e1 n2
+ | shift_default e2 =>
+ Eop Oshl (e1:::e2:::Enil)
+ end.
+
+Definition shr (e1 e2: expr) :=
+ Eop Oshr (e1:::e2:::Enil).
+
+Definition shru (e1: expr) (e2: expr) :=
+ match shift_match e2 with
+ | shift_case1 n2 =>
+ shruimm e1 n2
+ | shift_default e2 =>
+ Eop Oshru (e1:::e2:::Enil)
+ end.
+
+(** ** Floating-point arithmetic *)
+
+(*
+Definition addf (e1: expr) (e2: expr) :=
+ match e1, e2 with
+ | Eop Omulf (t1:::t2:::Enil), t3 => Eop Omuladdf (t1:::t2:::t3:::Enil)
+ | t1, Eop Omulf (t2:::t3:::Enil) => Elet t1 (Eop Omuladdf (t2:::t3:::Rvar 0:::Enil))
+ | _, _ => Eop Oaddf (e1:::e2:::Enil)
+ end.
+*)
+
+Inductive addf_cases: forall (e1: expr) (e2: expr), Set :=
+ | addf_case1:
+ forall (t1: expr) (t2: expr) (t3: expr),
+ addf_cases (Eop Omulf (t1:::t2:::Enil)) (t3)
+ | addf_case2:
+ forall (t1: expr) (t2: expr) (t3: expr),
+ addf_cases (t1) (Eop Omulf (t2:::t3:::Enil))
+ | addf_default:
+ forall (e1: expr) (e2: expr),
+ addf_cases e1 e2.
+
+Definition addf_match_aux (e1: expr) (e2: expr) :=
+ match e2 as z2 return addf_cases e1 z2 with
+ | Eop Omulf (t2:::t3:::Enil) =>
+ addf_case2 e1 t2 t3
+ | e2 =>
+ addf_default e1 e2
+ end.
+
+Definition addf_match (e1: expr) (e2: expr) :=
+ match e1 as z1 return addf_cases z1 e2 with
+ | Eop Omulf (t1:::t2:::Enil) =>
+ addf_case1 t1 t2 e2
+ | e1 =>
+ addf_match_aux e1 e2
+ end.
+
+Definition addf (e1: expr) (e2: expr) :=
+ match addf_match e1 e2 with
+ | addf_case1 t1 t2 t3 =>
+ Eop Omuladdf (t1:::t2:::t3:::Enil)
+ | addf_case2 t1 t2 t3 =>
+ Elet t1 (Eop Omuladdf (lift t2:::lift t3:::Eletvar 0:::Enil))
+ | addf_default e1 e2 =>
+ Eop Oaddf (e1:::e2:::Enil)
+ end.
+
+(*
+Definition subf (e1: expr) (e2: expr) :=
+ match e1, e2 with
+ | Eop Omulfloat (t1:::t2:::Enil), t3 => Eop Omulsubf (t1:::t2:::t3:::Enil)
+ | _, _ => Eop Osubf (e1:::e2:::Enil)
+ end.
+*)
+
+Inductive subf_cases: forall (e1: expr) (e2: expr), Set :=
+ | subf_case1:
+ forall (t1: expr) (t2: expr) (t3: expr),
+ subf_cases (Eop Omulf (t1:::t2:::Enil)) (t3)
+ | subf_default:
+ forall (e1: expr) (e2: expr),
+ subf_cases e1 e2.
+
+Definition subf_match (e1: expr) (e2: expr) :=
+ match e1 as z1 return subf_cases z1 e2 with
+ | Eop Omulf (t1:::t2:::Enil) =>
+ subf_case1 t1 t2 e2
+ | e1 =>
+ subf_default e1 e2
+ end.
+
+Definition subf (e1: expr) (e2: expr) :=
+ match subf_match e1 e2 with
+ | subf_case1 t1 t2 t3 =>
+ Eop Omulsubf (t1:::t2:::t3:::Enil)
+ | subf_default e1 e2 =>
+ Eop Osubf (e1:::e2:::Enil)
+ end.
+
+Definition mulf (e1 e2: expr) := Eop Omulf (e1:::e2:::Enil).
+Definition divf (e1 e2: expr) := Eop Odivf (e1:::e2:::Enil).
+
+(** ** Comparisons and conditional expressions *)
+
+Definition cmp (c: comparison) (e1 e2: expr) :=
+ Eop (Ocmp (Ccomp c)) (e1:::e2:::Enil).
+Definition cmpu (c: comparison) (e1 e2: expr) :=
+ Eop (Ocmp (Ccompu c)) (e1:::e2:::Enil).
+Definition cmpf (c: comparison) (e1 e2: expr) :=
+ Eop (Ocmp (Ccompf c)) (e1:::e2:::Enil).
+
+Fixpoint condexpr_of_expr (e: expr) : condexpr :=
+ match e with
+ | Eop (Ointconst n) Enil =>
+ if Int.eq n Int.zero then CEfalse else CEtrue
+ | Eop (Ocmp c) el => CEcond c el
+ | Econdition e1 e2 e3 =>
+ CEcondition e1 (condexpr_of_expr e2) (condexpr_of_expr e3)
+ | e => CEcond (Ccompuimm Cne Int.zero) (e:::Enil)
+ end.
+
+Definition conditionalexpr (e1 e2 e3: expr) : expr :=
+ Econdition (condexpr_of_expr e1) e2 e3.
+
+(** ** Recognition of addressing modes for load and store operations *)
+
+(*
+Definition addressing (e: expr) :=
+ match e with
+ | Eop (Oaddrsymbol s n) Enil => (Aglobal s n, Enil)
+ | Eop (Oaddrstack n) Enil => (Ainstack n, Enil)
+ | Eop Oadd (Eop (Oaddrsymbol s n) Enil) e2 => (Abased(s, n), e2:::Enil)
+ | Eop (Oaddimm n) (e1:::Enil) => (Aindexed n, e1:::Enil)
+ | Eop Oadd (e1:::e2:::Enil) => (Aindexed2, e1:::e2:::Enil)
+ | _ => (Aindexed Int.zero, e:::Enil)
+ end.
+*)
+
+Inductive addressing_cases: forall (e: expr), Set :=
+ | addressing_case1:
+ forall (s: ident) (n: int),
+ addressing_cases (Eop (Oaddrsymbol s n) Enil)
+ | addressing_case2:
+ forall (n: int),
+ addressing_cases (Eop (Oaddrstack n) Enil)
+ | addressing_case3:
+ forall (s: ident) (n: int) (e2: expr),
+ addressing_cases
+ (Eop Oadd (Eop (Oaddrsymbol s n) Enil:::e2:::Enil))
+ | addressing_case4:
+ forall (n: int) (e1: expr),
+ addressing_cases (Eop (Oaddimm n) (e1:::Enil))
+ | addressing_case5:
+ forall (e1: expr) (e2: expr),
+ addressing_cases (Eop Oadd (e1:::e2:::Enil))
+ | addressing_default:
+ forall (e: expr),
+ addressing_cases e.
+
+Definition addressing_match (e: expr) :=
+ match e as z1 return addressing_cases z1 with
+ | Eop (Oaddrsymbol s n) Enil =>
+ addressing_case1 s n
+ | Eop (Oaddrstack n) Enil =>
+ addressing_case2 n
+ | Eop Oadd (Eop (Oaddrsymbol s n) Enil:::e2:::Enil) =>
+ addressing_case3 s n e2
+ | Eop (Oaddimm n) (e1:::Enil) =>
+ addressing_case4 n e1
+ | Eop Oadd (e1:::e2:::Enil) =>
+ addressing_case5 e1 e2
+ | e =>
+ addressing_default e
+ end.
+
+Definition addressing (e: expr) :=
+ match addressing_match e with
+ | addressing_case1 s n =>
+ (Aglobal s n, Enil)
+ | addressing_case2 n =>
+ (Ainstack n, Enil)
+ | addressing_case3 s n e2 =>
+ (Abased s n, e2:::Enil)
+ | addressing_case4 n e1 =>
+ (Aindexed n, e1:::Enil)
+ | addressing_case5 e1 e2 =>
+ (Aindexed2, e1:::e2:::Enil)
+ | addressing_default e =>
+ (Aindexed Int.zero, e:::Enil)
+ end.
+
+Definition load (chunk: memory_chunk) (e1: expr) :=
+ match addressing e1 with
+ | (mode, args) => Eload chunk mode args
+ end.
+
+Definition store (chunk: memory_chunk) (e1 e2: expr) :=
+ match addressing e1 with
+ | (mode, args) => Estore chunk mode args e2
+ end.
+
+(** ** If-then-else statement *)
+
+Definition ifthenelse (e: expr) (ifso ifnot: stmtlist) : stmt :=
+ Sifthenelse (condexpr_of_expr e) ifso ifnot.
diff --git a/backend/Cmconstrproof.v b/backend/Cmconstrproof.v
new file mode 100644
index 0000000..19b7473
--- /dev/null
+++ b/backend/Cmconstrproof.v
@@ -0,0 +1,1154 @@
+(** Correctness of the Cminor smart constructors. This file states
+ evaluation rules for the smart constructors, for instance that [add
+ a b] evaluates to [Vint(Int.add i j)] if [a] evaluates to [Vint i]
+ and [b] to [Vint j]. It then proves that these rules are
+ admissible, that is, satisfied for all possible choices of [a] and
+ [b]. The Cminor producer can then use these evaluation rules
+ (theorems) to reason about the execution of terms produced by the
+ smart constructors.
+*)
+
+Require Import Coqlib.
+Require Import Compare_dec.
+Require Import Maps.
+Require Import AST.
+Require Import Integers.
+Require Import Floats.
+Require Import Values.
+Require Import Mem.
+Require Import Op.
+Require Import Globalenvs.
+Require Import Cminor.
+Require Import Cmconstr.
+
+Section CMCONSTR.
+
+Variable ge: Cminor.genv.
+
+(** * Lifting of let-bound variables *)
+
+Inductive insert_lenv: letenv -> nat -> val -> letenv -> Prop :=
+ | insert_lenv_0:
+ forall le v,
+ insert_lenv le O v (v :: le)
+ | insert_lenv_S:
+ forall le p w le' v,
+ insert_lenv le p w le' ->
+ insert_lenv (v :: le) (S p) w (v :: le').
+
+Lemma insert_lenv_lookup1:
+ forall le p w le',
+ insert_lenv le p w le' ->
+ forall n v,
+ nth_error le n = Some v -> (p > n)%nat ->
+ nth_error le' n = Some v.
+Proof.
+ induction 1; intros.
+ omegaContradiction.
+ destruct n; simpl; simpl in H0. auto.
+ apply IHinsert_lenv. auto. omega.
+Qed.
+
+Lemma insert_lenv_lookup2:
+ forall le p w le',
+ insert_lenv le p w le' ->
+ forall n v,
+ nth_error le n = Some v -> (p <= n)%nat ->
+ nth_error le' (S n) = Some v.
+Proof.
+ induction 1; intros.
+ simpl. assumption.
+ simpl. destruct n. omegaContradiction.
+ apply IHinsert_lenv. exact H0. omega.
+Qed.
+
+Scheme eval_expr_ind_3 := Minimality for eval_expr Sort Prop
+ with eval_condexpr_ind_3 := Minimality for eval_condexpr Sort Prop
+ with eval_exprlist_ind_3 := Minimality for eval_exprlist Sort Prop.
+
+Hint Resolve eval_Evar eval_Eassign eval_Eop eval_Eload eval_Estore
+ eval_Ecall eval_Econdition
+ eval_Elet eval_Eletvar
+ eval_CEtrue eval_CEfalse eval_CEcond
+ eval_CEcondition eval_Enil eval_Econs: evalexpr.
+
+Lemma eval_lift_expr:
+ forall w sp le e1 m1 a e2 m2 v,
+ eval_expr ge sp le e1 m1 a e2 m2 v ->
+ forall p le', insert_lenv le p w le' ->
+ eval_expr ge sp le' e1 m1 (lift_expr p a) e2 m2 v.
+Proof.
+ intros w.
+ apply (eval_expr_ind_3 ge
+ (fun sp le e1 m1 a e2 m2 v =>
+ forall p le', insert_lenv le p w le' ->
+ eval_expr ge sp le' e1 m1 (lift_expr p a) e2 m2 v)
+ (fun sp le e1 m1 a e2 m2 vb =>
+ forall p le', insert_lenv le p w le' ->
+ eval_condexpr ge sp le' e1 m1 (lift_condexpr p a) e2 m2 vb)
+ (fun sp le e1 m1 al e2 m2 vl =>
+ forall p le', insert_lenv le p w le' ->
+ eval_exprlist ge sp le' e1 m1 (lift_exprlist p al) e2 m2 vl));
+ simpl; intros; eauto with evalexpr.
+
+ destruct v1; eapply eval_Econdition;
+ eauto with evalexpr; simpl; eauto with evalexpr.
+
+ eapply eval_Elet. eauto. apply H2. apply insert_lenv_S; auto.
+
+ case (le_gt_dec p n); intro.
+ apply eval_Eletvar. eapply insert_lenv_lookup2; eauto.
+ apply eval_Eletvar. eapply insert_lenv_lookup1; eauto.
+
+ destruct vb1; eapply eval_CEcondition;
+ eauto with evalexpr; simpl; eauto with evalexpr.
+Qed.
+
+Lemma eval_lift:
+ forall sp le e1 m1 a e2 m2 v w,
+ eval_expr ge sp le e1 m1 a e2 m2 v ->
+ eval_expr ge sp (w::le) e1 m1 (lift a) e2 m2 v.
+Proof.
+ intros. unfold lift. eapply eval_lift_expr.
+ eexact H. apply insert_lenv_0.
+Qed.
+Hint Resolve eval_lift: evalexpr.
+
+(** * Useful lemmas and tactics *)
+
+Ltac EvalOp := eapply eval_Eop; eauto with evalexpr.
+
+Ltac TrivialOp cstr :=
+ unfold cstr; intros; EvalOp.
+
+(** The following are trivial lemmas and custom tactics that help
+ perform backward (inversion) and forward reasoning over the evaluation
+ of operator applications. *)
+
+Lemma inv_eval_Eop_0:
+ forall sp le e1 m1 op e2 m2 v,
+ eval_expr ge sp le e1 m1 (Eop op Enil) e2 m2 v ->
+ e2 = e1 /\ m2 = m1 /\ eval_operation ge sp op nil = Some v.
+Proof.
+ intros. inversion H. inversion H6.
+ intuition. congruence.
+Qed.
+
+Lemma inv_eval_Eop_1:
+ forall sp le e1 m1 op a1 e2 m2 v,
+ eval_expr ge sp le e1 m1 (Eop op (a1 ::: Enil)) e2 m2 v ->
+ exists v1,
+ eval_expr ge sp le e1 m1 a1 e2 m2 v1 /\
+ eval_operation ge sp op (v1 :: nil) = Some v.
+Proof.
+ intros.
+ inversion H. inversion H6. inversion H21.
+ subst e4; subst m4. subst e6; subst m6.
+ exists v1; intuition. congruence.
+Qed.
+
+Lemma inv_eval_Eop_2:
+ forall sp le e1 m1 op a1 a2 e3 m3 v,
+ eval_expr ge sp le e1 m1 (Eop op (a1 ::: a2 ::: Enil)) e3 m3 v ->
+ exists e2, exists m2, exists v1, exists v2,
+ eval_expr ge sp le e1 m1 a1 e2 m2 v1 /\
+ eval_expr ge sp le e2 m2 a2 e3 m3 v2 /\
+ eval_operation ge sp op (v1 :: v2 :: nil) = Some v.
+Proof.
+ intros.
+ inversion H. inversion H6. inversion H21. inversion H32.
+ subst e7; subst m7. subst e9; subst m9.
+ exists e4; exists m4; exists v1; exists v2. intuition. congruence.
+Qed.
+
+Ltac SimplEval :=
+ match goal with
+ | [ |- (eval_expr _ ?sp ?le ?e1 ?m1 (Eop ?op Enil) ?e2 ?m2 ?v) -> _] =>
+ intro XX1;
+ generalize (inv_eval_Eop_0 sp le e1 m1 op e2 m2 v XX1);
+ clear XX1;
+ intros [XX1 [XX2 XX3]];
+ subst e2; subst m2; simpl in XX3;
+ try (simplify_eq XX3; clear XX3;
+ let EQ := fresh "EQ" in (intro EQ; rewrite EQ))
+ | [ |- (eval_expr _ ?sp ?le ?e1 ?m1 (Eop ?op (?a1 ::: Enil)) ?e2 ?m2 ?v) -> _] =>
+ intro XX1;
+ generalize (inv_eval_Eop_1 sp le e1 m1 op a1 e2 m2 v XX1);
+ clear XX1;
+ let v1 := fresh "v" in let EV := fresh "EV" in
+ let EQ := fresh "EQ" in
+ (intros [v1 [EV EQ]]; simpl in EQ)
+ | [ |- (eval_expr _ ?sp ?le ?e1 ?m1 (Eop ?op (?a1 ::: ?a2 ::: Enil)) ?e2 ?m2 ?v) -> _] =>
+ intro XX1;
+ generalize (inv_eval_Eop_2 sp le e1 m1 op a1 a2 e2 m2 v XX1);
+ clear XX1;
+ let e := fresh "e" in let m := fresh "m" in
+ let v1 := fresh "v" in let v2 := fresh "v" in
+ let EV1 := fresh "EV" in let EV2 := fresh "EV" in
+ let EQ := fresh "EQ" in
+ (intros [e [m [v1 [v2 [EV1 [EV2 EQ]]]]]]; simpl in EQ)
+ | _ => idtac
+ end.
+
+Ltac InvEval H :=
+ generalize H; SimplEval; clear H.
+
+(** ** Admissible evaluation rules for the smart constructors *)
+
+(** All proofs follow a common pattern:
+- Reasoning by case over the result of the classification functions
+ (such as [add_match] for integer addition), gathering additional
+ information on the shape of the argument expressions in the non-default
+ cases.
+- Inversion of the evaluations of the arguments, exploiting the additional
+ information thus gathered.
+- Equational reasoning over the arithmetic operations performed,
+ using the lemmas from the [Int] and [Float] modules.
+- Construction of an evaluation derivation for the expression returned
+ by the smart constructor.
+*)
+
+Theorem eval_negint:
+ forall sp le e1 m1 a e2 m2 x,
+ eval_expr ge sp le e1 m1 a e2 m2 (Vint x) ->
+ eval_expr ge sp le e1 m1 (negint a) e2 m2 (Vint (Int.neg x)).
+Proof.
+ TrivialOp negint.
+Qed.
+
+Theorem eval_negfloat:
+ forall sp le e1 m1 a e2 m2 x,
+ eval_expr ge sp le e1 m1 a e2 m2 (Vfloat x) ->
+ eval_expr ge sp le e1 m1 (negfloat a) e2 m2 (Vfloat (Float.neg x)).
+Proof.
+ TrivialOp negfloat.
+Qed.
+
+Theorem eval_absfloat:
+ forall sp le e1 m1 a e2 m2 x,
+ eval_expr ge sp le e1 m1 a e2 m2 (Vfloat x) ->
+ eval_expr ge sp le e1 m1 (absfloat a) e2 m2 (Vfloat (Float.abs x)).
+Proof.
+ TrivialOp absfloat.
+Qed.
+
+Theorem eval_intoffloat:
+ forall sp le e1 m1 a e2 m2 x,
+ eval_expr ge sp le e1 m1 a e2 m2 (Vfloat x) ->
+ eval_expr ge sp le e1 m1 (intoffloat a) e2 m2 (Vint (Float.intoffloat x)).
+Proof.
+ TrivialOp intoffloat.
+Qed.
+
+Theorem eval_floatofint:
+ forall sp le e1 m1 a e2 m2 x,
+ eval_expr ge sp le e1 m1 a e2 m2 (Vint x) ->
+ eval_expr ge sp le e1 m1 (floatofint a) e2 m2 (Vfloat (Float.floatofint x)).
+Proof.
+ TrivialOp floatofint.
+Qed.
+
+Theorem eval_floatofintu:
+ forall sp le e1 m1 a e2 m2 x,
+ eval_expr ge sp le e1 m1 a e2 m2 (Vint x) ->
+ eval_expr ge sp le e1 m1 (floatofintu a) e2 m2 (Vfloat (Float.floatofintu x)).
+Proof.
+ TrivialOp floatofintu.
+Qed.
+
+Theorem eval_notint:
+ forall sp le e1 m1 a e2 m2 x,
+ eval_expr ge sp le e1 m1 a e2 m2 (Vint x) ->
+ eval_expr ge sp le e1 m1 (notint a) e2 m2 (Vint (Int.not x)).
+Proof.
+ unfold notint; intros until x; case (notint_match a); intros.
+ InvEval H. FuncInv. EvalOp. simpl. congruence.
+ InvEval H. FuncInv. EvalOp. simpl. congruence.
+ InvEval H. FuncInv. EvalOp. simpl. congruence.
+ eapply eval_Elet. eexact H.
+ eapply eval_Eop.
+ eapply eval_Econs. apply eval_Eletvar. simpl. reflexivity.
+ eapply eval_Econs. apply eval_Eletvar. simpl. reflexivity.
+ apply eval_Enil.
+ simpl. rewrite Int.or_idem. auto.
+Qed.
+
+Lemma eval_notbool_base:
+ forall sp le e1 m1 a e2 m2 v b,
+ eval_expr ge sp le e1 m1 a e2 m2 v ->
+ Val.bool_of_val v b ->
+ eval_expr ge sp le e1 m1 (notbool_base a) e2 m2 (Val.of_bool (negb b)).
+Proof.
+ TrivialOp notbool_base. simpl.
+ inversion H0.
+ rewrite Int.eq_false; auto.
+ rewrite Int.eq_true; auto.
+ reflexivity.
+Qed.
+
+Hint Resolve Val.bool_of_true_val Val.bool_of_false_val
+ Val.bool_of_true_val_inv Val.bool_of_false_val_inv: valboolof.
+
+Theorem eval_notbool:
+ forall a sp le e1 m1 e2 m2 v b,
+ eval_expr ge sp le e1 m1 a e2 m2 v ->
+ Val.bool_of_val v b ->
+ eval_expr ge sp le e1 m1 (notbool a) e2 m2 (Val.of_bool (negb b)).
+Proof.
+ assert (N1: forall v b, Val.is_false v -> Val.bool_of_val v b -> Val.is_true (Val.of_bool (negb b))).
+ intros. inversion H0; simpl; auto; subst v; simpl in H.
+ congruence. apply Int.one_not_zero. contradiction.
+ assert (N2: forall v b, Val.is_true v -> Val.bool_of_val v b -> Val.is_false (Val.of_bool (negb b))).
+ intros. inversion H0; simpl; auto; subst v; simpl in H.
+ congruence.
+
+ induction a; simpl; intros; try (eapply eval_notbool_base; eauto).
+ destruct o; try (eapply eval_notbool_base; eauto).
+
+ destruct e. inversion H. inversion H7. subst vl.
+ simpl in H11. inversion H11. subst v0; subst v.
+ inversion H0. rewrite Int.eq_false; auto.
+ simpl; eauto with evalexpr.
+ rewrite Int.eq_true; simpl; eauto with evalexpr.
+ eapply eval_notbool_base; eauto.
+
+ inversion H. subst sp0 le0 e0 m op al e3 m0 v0.
+ simpl in H11. eapply eval_Eop; eauto.
+ simpl. caseEq (eval_condition c vl); intros.
+ rewrite H1 in H11.
+ assert (b0 = b).
+ destruct b0; inversion H11; subst v; inversion H0; auto.
+ subst b0. rewrite (Op.eval_negate_condition _ _ H1).
+ destruct b; reflexivity.
+ rewrite H1 in H11; discriminate.
+
+ inversion H; eauto 10 with evalexpr valboolof.
+ inversion H; eauto 10 with evalexpr valboolof.
+
+ inversion H. eapply eval_Econdition. eexact H11.
+ destruct v1; eauto.
+Qed.
+
+Theorem eval_cast8signed:
+ forall sp le e1 m1 a e2 m2 x,
+ eval_expr ge sp le e1 m1 a e2 m2 (Vint x) ->
+ eval_expr ge sp le e1 m1 (cast8signed a) e2 m2 (Vint (Int.cast8signed x)).
+Proof. TrivialOp cast8signed. Qed.
+
+Theorem eval_cast8unsigned:
+ forall sp le e1 m1 a e2 m2 x,
+ eval_expr ge sp le e1 m1 a e2 m2 (Vint x) ->
+ eval_expr ge sp le e1 m1 (cast8unsigned a) e2 m2 (Vint (Int.cast8unsigned x)).
+Proof.
+ TrivialOp cast8unsigned. simpl.
+ rewrite Int.rolm_zero. rewrite Int.cast8unsigned_and. auto.
+Qed.
+
+Theorem eval_cast16signed:
+ forall sp le e1 m1 a e2 m2 x,
+ eval_expr ge sp le e1 m1 a e2 m2 (Vint x) ->
+ eval_expr ge sp le e1 m1 (cast16signed a) e2 m2 (Vint (Int.cast16signed x)).
+Proof. TrivialOp cast16signed. Qed.
+
+Theorem eval_cast16unsigned:
+ forall sp le e1 m1 a e2 m2 x,
+ eval_expr ge sp le e1 m1 a e2 m2 (Vint x) ->
+ eval_expr ge sp le e1 m1 (cast16unsigned a) e2 m2 (Vint (Int.cast16unsigned x)).
+Proof.
+ TrivialOp cast16unsigned. simpl.
+ rewrite Int.rolm_zero. rewrite Int.cast16unsigned_and. auto.
+Qed.
+
+Theorem eval_singleoffloat:
+ forall sp le e1 m1 a e2 m2 x,
+ eval_expr ge sp le e1 m1 a e2 m2 (Vfloat x) ->
+ eval_expr ge sp le e1 m1 (singleoffloat a) e2 m2 (Vfloat (Float.singleoffloat x)).
+Proof.
+ TrivialOp singleoffloat.
+Qed.
+
+Theorem eval_addimm:
+ forall sp le e1 m1 n a e2 m2 x,
+ eval_expr ge sp le e1 m1 a e2 m2 (Vint x) ->
+ eval_expr ge sp le e1 m1 (addimm n a) e2 m2 (Vint (Int.add x n)).
+Proof.
+ unfold addimm; intros until x.
+ generalize (Int.eq_spec n Int.zero). case (Int.eq n Int.zero); intro.
+ subst n. rewrite Int.add_zero. auto.
+ case (addimm_match a); intros.
+ InvEval H0. EvalOp. simpl. rewrite Int.add_commut. auto.
+ InvEval H0. destruct (Genv.find_symbol ge s); discriminate.
+ InvEval H0.
+ destruct sp; simpl in XX3; discriminate.
+ InvEval H0. FuncInv. EvalOp. simpl. subst x.
+ rewrite Int.add_assoc. decEq; decEq; decEq. apply Int.add_commut.
+ EvalOp.
+Qed.
+
+Theorem eval_addimm_ptr:
+ forall sp le e1 m1 n a e2 m2 b ofs,
+ eval_expr ge sp le e1 m1 a e2 m2 (Vptr b ofs) ->
+ eval_expr ge sp le e1 m1 (addimm n a) e2 m2 (Vptr b (Int.add ofs n)).
+Proof.
+ unfold addimm; intros until ofs.
+ generalize (Int.eq_spec n Int.zero). case (Int.eq n Int.zero); intro.
+ subst n. rewrite Int.add_zero. auto.
+ case (addimm_match a); intros.
+ InvEval H0.
+ InvEval H0. EvalOp. simpl.
+ destruct (Genv.find_symbol ge s).
+ rewrite Int.add_commut. congruence.
+ discriminate.
+ InvEval H0. destruct sp; simpl in XX3; try discriminate.
+ inversion XX3. EvalOp. simpl. decEq. decEq.
+ rewrite Int.add_assoc. decEq. apply Int.add_commut.
+ InvEval H0. FuncInv. subst b0; subst ofs. EvalOp. simpl.
+ rewrite (Int.add_commut n m). rewrite Int.add_assoc. auto.
+ EvalOp.
+Qed.
+
+Theorem eval_add:
+ forall sp le e1 m1 a e2 m2 x b e3 m3 y,
+ eval_expr ge sp le e1 m1 a e2 m2 (Vint x) ->
+ eval_expr ge sp le e2 m2 b e3 m3 (Vint y) ->
+ eval_expr ge sp le e1 m1 (add a b) e3 m3 (Vint (Int.add x y)).
+Proof.
+ intros until y. unfold add; case (add_match a b); intros.
+ InvEval H. rewrite Int.add_commut. apply eval_addimm. assumption.
+ InvEval H. FuncInv. InvEval H0. FuncInv.
+ replace (Int.add x y) with (Int.add (Int.add i i0) (Int.add n1 n2)).
+ apply eval_addimm. EvalOp.
+ subst x; subst y.
+ repeat rewrite Int.add_assoc. decEq. apply Int.add_permut.
+ InvEval H. FuncInv.
+ replace (Int.add x y) with (Int.add (Int.add i y) n1).
+ apply eval_addimm. EvalOp.
+ subst x. repeat rewrite Int.add_assoc. decEq. apply Int.add_commut.
+ InvEval H0. FuncInv.
+ apply eval_addimm. auto.
+ InvEval H0. FuncInv.
+ replace (Int.add x y) with (Int.add (Int.add x i) n2).
+ apply eval_addimm. EvalOp.
+ subst y. rewrite Int.add_assoc. auto.
+ EvalOp.
+Qed.
+
+Theorem eval_add_ptr:
+ forall sp le e1 m1 a e2 m2 p x b e3 m3 y,
+ eval_expr ge sp le e1 m1 a e2 m2 (Vptr p x) ->
+ eval_expr ge sp le e2 m2 b e3 m3 (Vint y) ->
+ eval_expr ge sp le e1 m1 (add a b) e3 m3 (Vptr p (Int.add x y)).
+Proof.
+ intros until y. unfold add; case (add_match a b); intros.
+ InvEval H.
+ InvEval H. FuncInv. InvEval H0. FuncInv.
+ replace (Int.add x y) with (Int.add (Int.add i i0) (Int.add n1 n2)).
+ apply eval_addimm_ptr. subst b0. EvalOp.
+ subst x; subst y.
+ repeat rewrite Int.add_assoc. decEq. apply Int.add_permut.
+ InvEval H. FuncInv.
+ replace (Int.add x y) with (Int.add (Int.add i y) n1).
+ apply eval_addimm_ptr. subst b0. EvalOp.
+ subst x. repeat rewrite Int.add_assoc. decEq. apply Int.add_commut.
+ InvEval H0. apply eval_addimm_ptr. auto.
+ InvEval H0. FuncInv.
+ replace (Int.add x y) with (Int.add (Int.add x i) n2).
+ apply eval_addimm_ptr. EvalOp.
+ subst y. rewrite Int.add_assoc. auto.
+ EvalOp.
+Qed.
+
+Theorem eval_add_ptr_2:
+ forall sp le e1 m1 a e2 m2 p x b e3 m3 y,
+ eval_expr ge sp le e1 m1 a e2 m2 (Vint x) ->
+ eval_expr ge sp le e2 m2 b e3 m3 (Vptr p y) ->
+ eval_expr ge sp le e1 m1 (add a b) e3 m3 (Vptr p (Int.add y x)).
+Proof.
+ intros until y. unfold add; case (add_match a b); intros.
+ InvEval H.
+ apply eval_addimm_ptr. auto.
+ InvEval H. FuncInv. InvEval H0. FuncInv.
+ replace (Int.add y x) with (Int.add (Int.add i0 i) (Int.add n1 n2)).
+ apply eval_addimm_ptr. subst b0. EvalOp.
+ subst x; subst y.
+ repeat rewrite Int.add_assoc. decEq.
+ rewrite (Int.add_commut n1 n2). apply Int.add_permut.
+ InvEval H. FuncInv.
+ replace (Int.add y x) with (Int.add (Int.add y i) n1).
+ apply eval_addimm_ptr. EvalOp.
+ subst x. repeat rewrite Int.add_assoc. auto.
+ InvEval H0.
+ InvEval H0. FuncInv.
+ replace (Int.add y x) with (Int.add (Int.add i x) n2).
+ apply eval_addimm_ptr. EvalOp. subst b0; reflexivity.
+ subst y. repeat rewrite Int.add_assoc. decEq. apply Int.add_commut.
+ EvalOp.
+Qed.
+
+Theorem eval_sub:
+ forall sp le e1 m1 a e2 m2 x b e3 m3 y,
+ eval_expr ge sp le e1 m1 a e2 m2 (Vint x) ->
+ eval_expr ge sp le e2 m2 b e3 m3 (Vint y) ->
+ eval_expr ge sp le e1 m1 (sub a b) e3 m3 (Vint (Int.sub x y)).
+Proof.
+ intros until y.
+ unfold sub; case (sub_match a b); intros.
+ InvEval H0. rewrite Int.sub_add_opp.
+ apply eval_addimm. assumption.
+ InvEval H. FuncInv. InvEval H0. FuncInv.
+ replace (Int.sub x y) with (Int.add (Int.sub i i0) (Int.sub n1 n2)).
+ apply eval_addimm. EvalOp.
+ subst x; subst y.
+ repeat rewrite Int.sub_add_opp.
+ repeat rewrite Int.add_assoc. decEq.
+ rewrite Int.add_permut. decEq. symmetry. apply Int.neg_add_distr.
+ InvEval H. FuncInv.
+ replace (Int.sub x y) with (Int.add (Int.sub i y) n1).
+ apply eval_addimm. EvalOp.
+ subst x. rewrite Int.sub_add_l. auto.
+ InvEval H0. FuncInv.
+ replace (Int.sub x y) with (Int.add (Int.sub x i) (Int.neg n2)).
+ apply eval_addimm. EvalOp.
+ subst y. rewrite (Int.add_commut i n2). symmetry. apply Int.sub_add_r.
+ EvalOp.
+Qed.
+
+Theorem eval_sub_ptr_int:
+ forall sp le e1 m1 a e2 m2 p x b e3 m3 y,
+ eval_expr ge sp le e1 m1 a e2 m2 (Vptr p x) ->
+ eval_expr ge sp le e2 m2 b e3 m3 (Vint y) ->
+ eval_expr ge sp le e1 m1 (sub a b) e3 m3 (Vptr p (Int.sub x y)).
+Proof.
+ intros until y.
+ unfold sub; case (sub_match a b); intros.
+ InvEval H0. rewrite Int.sub_add_opp.
+ apply eval_addimm_ptr. assumption.
+ InvEval H. FuncInv. InvEval H0. FuncInv.
+ subst b0.
+ replace (Int.sub x y) with (Int.add (Int.sub i i0) (Int.sub n1 n2)).
+ apply eval_addimm_ptr. EvalOp.
+ subst x; subst y.
+ repeat rewrite Int.sub_add_opp.
+ repeat rewrite Int.add_assoc. decEq.
+ rewrite Int.add_permut. decEq. symmetry. apply Int.neg_add_distr.
+ InvEval H. FuncInv. subst b0.
+ replace (Int.sub x y) with (Int.add (Int.sub i y) n1).
+ apply eval_addimm_ptr. EvalOp.
+ subst x. rewrite Int.sub_add_l. auto.
+ InvEval H0. FuncInv.
+ replace (Int.sub x y) with (Int.add (Int.sub x i) (Int.neg n2)).
+ apply eval_addimm_ptr. EvalOp.
+ subst y. rewrite (Int.add_commut i n2). symmetry. apply Int.sub_add_r.
+ EvalOp.
+Qed.
+
+Theorem eval_sub_ptr_ptr:
+ forall sp le e1 m1 a e2 m2 p x b e3 m3 y,
+ eval_expr ge sp le e1 m1 a e2 m2 (Vptr p x) ->
+ eval_expr ge sp le e2 m2 b e3 m3 (Vptr p y) ->
+ eval_expr ge sp le e1 m1 (sub a b) e3 m3 (Vint (Int.sub x y)).
+Proof.
+ intros until y.
+ unfold sub; case (sub_match a b); intros.
+ InvEval H0.
+ InvEval H. FuncInv. InvEval H0. FuncInv.
+ replace (Int.sub x y) with (Int.add (Int.sub i i0) (Int.sub n1 n2)).
+ apply eval_addimm. EvalOp.
+ simpl; unfold eq_block. subst b0; subst b1; rewrite zeq_true. auto.
+ subst x; subst y.
+ repeat rewrite Int.sub_add_opp.
+ repeat rewrite Int.add_assoc. decEq.
+ rewrite Int.add_permut. decEq. symmetry. apply Int.neg_add_distr.
+ InvEval H. FuncInv. subst b0.
+ replace (Int.sub x y) with (Int.add (Int.sub i y) n1).
+ apply eval_addimm. EvalOp.
+ simpl. unfold eq_block. rewrite zeq_true. auto.
+ subst x. rewrite Int.sub_add_l. auto.
+ InvEval H0. FuncInv. subst b0.
+ replace (Int.sub x y) with (Int.add (Int.sub x i) (Int.neg n2)).
+ apply eval_addimm. EvalOp.
+ simpl. unfold eq_block. rewrite zeq_true. auto.
+ subst y. rewrite (Int.add_commut i n2). symmetry. apply Int.sub_add_r.
+ EvalOp. simpl. unfold eq_block. rewrite zeq_true. auto.
+Qed.
+
+Lemma eval_rolm:
+ forall sp le e1 m1 a amount mask e2 m2 x,
+ eval_expr ge sp le e1 m1 a e2 m2 (Vint x) ->
+ eval_expr ge sp le e1 m1 (rolm a amount mask) e2 m2 (Vint (Int.rolm x amount mask)).
+Proof.
+ intros until x. unfold rolm; case (rolm_match a); intros.
+ InvEval H. eauto with evalexpr.
+ case (Int.is_rlw_mask (Int.and (Int.rol mask1 amount) mask)).
+ InvEval H. FuncInv. EvalOp. simpl. subst x.
+ decEq. decEq.
+ replace (Int.and (Int.add amount1 amount) (Int.repr 31))
+ with (Int.modu (Int.add amount1 amount) (Int.repr 32)).
+ symmetry. apply Int.rolm_rolm.
+ change (Int.repr 31) with (Int.sub (Int.repr 32) Int.one).
+ apply Int.modu_and with (Int.repr 5). reflexivity.
+ EvalOp.
+ EvalOp.
+Qed.
+
+Theorem eval_shlimm:
+ forall sp le e1 m1 a n e2 m2 x,
+ eval_expr ge sp le e1 m1 a e2 m2 (Vint x) ->
+ Int.ltu n (Int.repr 32) = true ->
+ eval_expr ge sp le e1 m1 (shlimm a n) e2 m2 (Vint (Int.shl x n)).
+Proof.
+ intros. unfold shlimm.
+ generalize (Int.eq_spec n Int.zero); case (Int.eq n Int.zero); intro.
+ subst n. rewrite Int.shl_zero. auto.
+ rewrite H0.
+ replace (Int.shl x n) with (Int.rolm x n (Int.shl Int.mone n)).
+ apply eval_rolm. auto. symmetry. apply Int.shl_rolm. exact H0.
+Qed.
+
+Theorem eval_shruimm:
+ forall sp le e1 m1 a n e2 m2 x,
+ eval_expr ge sp le e1 m1 a e2 m2 (Vint x) ->
+ Int.ltu n (Int.repr 32) = true ->
+ eval_expr ge sp le e1 m1 (shruimm a n) e2 m2 (Vint (Int.shru x n)).
+Proof.
+ intros. unfold shruimm.
+ generalize (Int.eq_spec n Int.zero); case (Int.eq n Int.zero); intro.
+ subst n. rewrite Int.shru_zero. auto.
+ rewrite H0.
+ replace (Int.shru x n) with (Int.rolm x (Int.sub (Int.repr 32) n) (Int.shru Int.mone n)).
+ apply eval_rolm. auto. symmetry. apply Int.shru_rolm. exact H0.
+Qed.
+
+Lemma eval_mulimm_base:
+ forall sp le e1 m1 a n e2 m2 x,
+ eval_expr ge sp le e1 m1 a e2 m2 (Vint x) ->
+ eval_expr ge sp le e1 m1 (mulimm_base n a) e2 m2 (Vint (Int.mul x n)).
+Proof.
+ intros; unfold mulimm_base.
+ generalize (Int.one_bits_decomp n).
+ generalize (Int.one_bits_range n).
+ change (Z_of_nat wordsize) with 32.
+ destruct (Int.one_bits n).
+ intros. EvalOp.
+ destruct l.
+ intros. rewrite H1. simpl.
+ rewrite Int.add_zero. rewrite <- Int.shl_mul.
+ apply eval_shlimm. auto. auto with coqlib.
+ destruct l.
+ intros. apply eval_Elet with e2 m2 (Vint x). auto.
+ rewrite H1. simpl. rewrite Int.add_zero.
+ rewrite Int.mul_add_distr_r.
+ rewrite <- Int.shl_mul.
+ rewrite <- Int.shl_mul.
+ EvalOp. eapply eval_Econs.
+ apply eval_shlimm. apply eval_Eletvar. simpl. reflexivity.
+ auto with coqlib.
+ eapply eval_Econs.
+ apply eval_shlimm. apply eval_Eletvar. simpl. reflexivity.
+ auto with coqlib.
+ auto with evalexpr.
+ reflexivity.
+ intros. EvalOp.
+Qed.
+
+Theorem eval_mulimm:
+ forall sp le e1 m1 a n e2 m2 x,
+ eval_expr ge sp le e1 m1 a e2 m2 (Vint x) ->
+ eval_expr ge sp le e1 m1 (mulimm n a) e2 m2 (Vint (Int.mul x n)).
+Proof.
+ intros until x; unfold mulimm.
+ generalize (Int.eq_spec n Int.zero); case (Int.eq n Int.zero); intro.
+ subst n. rewrite Int.mul_zero. eauto with evalexpr.
+ generalize (Int.eq_spec n Int.one); case (Int.eq n Int.one); intro.
+ subst n. rewrite Int.mul_one. auto.
+ case (mulimm_match a); intros.
+ InvEval H1. EvalOp. rewrite Int.mul_commut. reflexivity.
+ InvEval H1. FuncInv.
+ replace (Int.mul x n) with (Int.add (Int.mul i n) (Int.mul n n2)).
+ apply eval_addimm. apply eval_mulimm_base. auto.
+ subst x. rewrite Int.mul_add_distr_l. decEq. apply Int.mul_commut.
+ apply eval_mulimm_base. assumption.
+Qed.
+
+Theorem eval_mul:
+ forall sp le e1 m1 a e2 m2 x b e3 m3 y,
+ eval_expr ge sp le e1 m1 a e2 m2 (Vint x) ->
+ eval_expr ge sp le e2 m2 b e3 m3 (Vint y) ->
+ eval_expr ge sp le e1 m1 (mul a b) e3 m3 (Vint (Int.mul x y)).
+Proof.
+ intros until y.
+ unfold mul; case (mul_match a b); intros.
+ InvEval H. rewrite Int.mul_commut. apply eval_mulimm. auto.
+ InvEval H0. apply eval_mulimm. auto.
+ EvalOp.
+Qed.
+
+Theorem eval_divs:
+ forall sp le e1 m1 a e2 m2 x b e3 m3 y,
+ eval_expr ge sp le e1 m1 a e2 m2 (Vint x) ->
+ eval_expr ge sp le e2 m2 b e3 m3 (Vint y) ->
+ y <> Int.zero ->
+ eval_expr ge sp le e1 m1 (divs a b) e3 m3 (Vint (Int.divs x y)).
+Proof.
+ TrivialOp divs. simpl.
+ predSpec Int.eq Int.eq_spec y Int.zero. contradiction. auto.
+Qed.
+
+Lemma eval_mod_aux:
+ forall divop semdivop,
+ (forall sp x y,
+ y <> Int.zero ->
+ eval_operation ge sp divop (Vint x :: Vint y :: nil) =
+ Some (Vint (semdivop x y))) ->
+ forall sp le e1 m1 a e2 m2 x b e3 m3 y,
+ eval_expr ge sp le e1 m1 a e2 m2 (Vint x) ->
+ eval_expr ge sp le e2 m2 b e3 m3 (Vint y) ->
+ y <> Int.zero ->
+ eval_expr ge sp le e1 m1 (mod_aux divop a b) e3 m3
+ (Vint (Int.sub x (Int.mul (semdivop x y) y))).
+Proof.
+ intros; unfold mod_aux.
+ eapply eval_Elet. eexact H0. eapply eval_Elet.
+ apply eval_lift. eexact H1.
+ eapply eval_Eop. eapply eval_Econs.
+ eapply eval_Eletvar. simpl; reflexivity.
+ eapply eval_Econs. eapply eval_Eop.
+ eapply eval_Econs. eapply eval_Eop.
+ eapply eval_Econs. apply eval_Eletvar. simpl; reflexivity.
+ eapply eval_Econs. apply eval_Eletvar. simpl; reflexivity.
+ apply eval_Enil. apply H. assumption.
+ eapply eval_Econs. apply eval_Eletvar. simpl; reflexivity.
+ apply eval_Enil. simpl; reflexivity. apply eval_Enil.
+ reflexivity.
+Qed.
+
+Theorem eval_mods:
+ forall sp le e1 m1 a e2 m2 x b e3 m3 y,
+ eval_expr ge sp le e1 m1 a e2 m2 (Vint x) ->
+ eval_expr ge sp le e2 m2 b e3 m3 (Vint y) ->
+ y <> Int.zero ->
+ eval_expr ge sp le e1 m1 (mods a b) e3 m3 (Vint (Int.mods x y)).
+Proof.
+ intros; unfold mods.
+ rewrite Int.mods_divs.
+ eapply eval_mod_aux; eauto.
+ intros. simpl. predSpec Int.eq Int.eq_spec y0 Int.zero.
+ contradiction. auto.
+Qed.
+
+Lemma eval_divu_base:
+ forall sp le e1 m1 a e2 m2 x b e3 m3 y,
+ eval_expr ge sp le e1 m1 a e2 m2 (Vint x) ->
+ eval_expr ge sp le e2 m2 b e3 m3 (Vint y) ->
+ y <> Int.zero ->
+ eval_expr ge sp le e1 m1 (Eop Odivu (a ::: b ::: Enil)) e3 m3 (Vint (Int.divu x y)).
+Proof.
+ intros. EvalOp. simpl.
+ predSpec Int.eq Int.eq_spec y Int.zero. contradiction. auto.
+Qed.
+
+Theorem eval_divu:
+ forall sp le e1 m1 a e2 m2 x b e3 m3 y,
+ eval_expr ge sp le e1 m1 a e2 m2 (Vint x) ->
+ eval_expr ge sp le e2 m2 b e3 m3 (Vint y) ->
+ y <> Int.zero ->
+ eval_expr ge sp le e1 m1 (divu a b) e3 m3 (Vint (Int.divu x y)).
+Proof.
+ intros until y.
+ unfold divu; case (divu_match b); intros.
+ InvEval H0. caseEq (Int.is_power2 y).
+ intros. rewrite (Int.divu_pow2 x y i H0).
+ apply eval_shruimm. auto.
+ apply Int.is_power2_range with y. auto.
+ intros. subst n2. eapply eval_divu_base. eexact H. EvalOp. auto.
+ eapply eval_divu_base; eauto.
+Qed.
+
+Theorem eval_modu:
+ forall sp le e1 m1 a e2 m2 x b e3 m3 y,
+ eval_expr ge sp le e1 m1 a e2 m2 (Vint x) ->
+ eval_expr ge sp le e2 m2 b e3 m3 (Vint y) ->
+ y <> Int.zero ->
+ eval_expr ge sp le e1 m1 (modu a b) e3 m3 (Vint (Int.modu x y)).
+Proof.
+ intros until y; unfold modu; case (divu_match b); intros.
+ InvEval H0. caseEq (Int.is_power2 y).
+ intros. rewrite (Int.modu_and x y i H0).
+ rewrite <- Int.rolm_zero. apply eval_rolm. auto.
+ intro. rewrite Int.modu_divu. eapply eval_mod_aux.
+ intros. simpl. predSpec Int.eq Int.eq_spec y0 Int.zero.
+ contradiction. auto.
+ eexact H. EvalOp. auto. auto.
+ rewrite Int.modu_divu. eapply eval_mod_aux.
+ intros. simpl. predSpec Int.eq Int.eq_spec y0 Int.zero.
+ contradiction. auto.
+ eexact H. eexact H0. auto. auto.
+Qed.
+
+Theorem eval_andimm:
+ forall sp le e1 m1 n a e2 m2 x,
+ eval_expr ge sp le e1 m1 a e2 m2 (Vint x) ->
+ eval_expr ge sp le e1 m1 (andimm n a) e2 m2 (Vint (Int.and x n)).
+Proof.
+ intros. unfold andimm. case (Int.is_rlw_mask n).
+ rewrite <- Int.rolm_zero. apply eval_rolm; auto.
+ EvalOp.
+Qed.
+
+Theorem eval_and:
+ forall sp le e1 m1 a e2 m2 x b e3 m3 y,
+ eval_expr ge sp le e1 m1 a e2 m2 (Vint x) ->
+ eval_expr ge sp le e2 m2 b e3 m3 (Vint y) ->
+ eval_expr ge sp le e1 m1 (and a b) e3 m3 (Vint (Int.and x y)).
+Proof.
+ intros until y; unfold and; case (mul_match a b); intros.
+ InvEval H. rewrite Int.and_commut. apply eval_andimm; auto.
+ InvEval H0. apply eval_andimm; auto.
+ EvalOp.
+Qed.
+
+Remark eval_same_expr_pure:
+ forall a1 a2 sp le e1 m1 e2 m2 v1 e3 m3 v2,
+ same_expr_pure a1 a2 = true ->
+ eval_expr ge sp le e1 m1 a1 e2 m2 v1 ->
+ eval_expr ge sp le e2 m2 a2 e3 m3 v2 ->
+ a2 = a1 /\ v2 = v1 /\ e2 = e1 /\ m2 = m1.
+Proof.
+ intros until v1.
+ destruct a1; simpl; try (intros; discriminate).
+ destruct a2; simpl; try (intros; discriminate).
+ case (ident_eq i i0); intros.
+ subst i0. inversion H0. inversion H1.
+ assert (v2 = v1). congruence. tauto.
+ discriminate.
+Qed.
+
+Lemma eval_or:
+ forall sp le e1 m1 a e2 m2 x b e3 m3 y,
+ eval_expr ge sp le e1 m1 a e2 m2 (Vint x) ->
+ eval_expr ge sp le e2 m2 b e3 m3 (Vint y) ->
+ eval_expr ge sp le e1 m1 (or a b) e3 m3 (Vint (Int.or x y)).
+Proof.
+ intros until y; unfold or; case (or_match a b); intros.
+ generalize (Int.eq_spec amount1 amount2); case (Int.eq amount1 amount2); intro.
+ case (Int.is_rlw_mask (Int.or mask1 mask2)).
+ caseEq (same_expr_pure t1 t2); intro.
+ simpl. InvEval H. FuncInv. InvEval H0. FuncInv.
+ generalize (eval_same_expr_pure _ _ _ _ _ _ _ _ _ _ _ _ H2 EV EV0).
+ intros [EQ1 [EQ2 [EQ3 EQ4]]].
+ injection EQ2; intro EQ5.
+ subst t2; subst e2; subst m2; subst i0.
+ EvalOp. simpl. subst x; subst y; subst amount2.
+ rewrite Int.or_rolm. auto.
+ simpl. EvalOp.
+ simpl. EvalOp.
+ simpl. EvalOp.
+ EvalOp.
+Qed.
+
+Theorem eval_xor:
+ forall sp le e1 m1 a e2 m2 x b e3 m3 y,
+ eval_expr ge sp le e1 m1 a e2 m2 (Vint x) ->
+ eval_expr ge sp le e2 m2 b e3 m3 (Vint y) ->
+ eval_expr ge sp le e1 m1 (xor a b) e3 m3 (Vint (Int.xor x y)).
+Proof. TrivialOp xor. Qed.
+
+Theorem eval_shl:
+ forall sp le e1 m1 a e2 m2 x b e3 m3 y,
+ eval_expr ge sp le e1 m1 a e2 m2 (Vint x) ->
+ eval_expr ge sp le e2 m2 b e3 m3 (Vint y) ->
+ Int.ltu y (Int.repr 32) = true ->
+ eval_expr ge sp le e1 m1 (shl a b) e3 m3 (Vint (Int.shl x y)).
+Proof.
+ intros until y; unfold shl; case (shift_match b); intros.
+ InvEval H0. apply eval_shlimm; auto.
+ EvalOp. simpl. rewrite H1. auto.
+Qed.
+
+Theorem eval_shr:
+ forall sp le e1 m1 a e2 m2 x b e3 m3 y,
+ eval_expr ge sp le e1 m1 a e2 m2 (Vint x) ->
+ eval_expr ge sp le e2 m2 b e3 m3 (Vint y) ->
+ Int.ltu y (Int.repr 32) = true ->
+ eval_expr ge sp le e1 m1 (shr a b) e3 m3 (Vint (Int.shr x y)).
+Proof.
+ TrivialOp shr. simpl. rewrite H1. auto.
+Qed.
+
+Theorem eval_shru:
+ forall sp le e1 m1 a e2 m2 x b e3 m3 y,
+ eval_expr ge sp le e1 m1 a e2 m2 (Vint x) ->
+ eval_expr ge sp le e2 m2 b e3 m3 (Vint y) ->
+ Int.ltu y (Int.repr 32) = true ->
+ eval_expr ge sp le e1 m1 (shru a b) e3 m3 (Vint (Int.shru x y)).
+Proof.
+ intros until y; unfold shru; case (shift_match b); intros.
+ InvEval H0. apply eval_shruimm; auto.
+ EvalOp. simpl. rewrite H1. auto.
+Qed.
+
+Theorem eval_addf:
+ forall sp le e1 m1 a e2 m2 x b e3 m3 y,
+ eval_expr ge sp le e1 m1 a e2 m2 (Vfloat x) ->
+ eval_expr ge sp le e2 m2 b e3 m3 (Vfloat y) ->
+ eval_expr ge sp le e1 m1 (addf a b) e3 m3 (Vfloat (Float.add x y)).
+Proof.
+ intros until y; unfold addf; case (addf_match a b); intros.
+ InvEval H. FuncInv. EvalOp. simpl. subst x. reflexivity.
+ InvEval H0. FuncInv. eapply eval_Elet. eexact H. EvalOp.
+ eapply eval_Econs. apply eval_lift. eexact EV.
+ eapply eval_Econs. apply eval_lift. eexact EV0.
+ eapply eval_Econs. apply eval_Eletvar. simpl; reflexivity.
+ apply eval_Enil.
+ subst y. rewrite Float.addf_commut. reflexivity.
+ EvalOp.
+Qed.
+
+Theorem eval_subf:
+ forall sp le e1 m1 a e2 m2 x b e3 m3 y,
+ eval_expr ge sp le e1 m1 a e2 m2 (Vfloat x) ->
+ eval_expr ge sp le e2 m2 b e3 m3 (Vfloat y) ->
+ eval_expr ge sp le e1 m1 (subf a b) e3 m3 (Vfloat (Float.sub x y)).
+Proof.
+ intros until y; unfold subf; case (subf_match a b); intros.
+ InvEval H. FuncInv. EvalOp. subst x. reflexivity.
+ EvalOp.
+Qed.
+
+Theorem eval_mulf:
+ forall sp le e1 m1 a e2 m2 x b e3 m3 y,
+ eval_expr ge sp le e1 m1 a e2 m2 (Vfloat x) ->
+ eval_expr ge sp le e2 m2 b e3 m3 (Vfloat y) ->
+ eval_expr ge sp le e1 m1 (mulf a b) e3 m3 (Vfloat (Float.mul x y)).
+Proof. TrivialOp mulf. Qed.
+
+Theorem eval_divf:
+ forall sp le e1 m1 a e2 m2 x b e3 m3 y,
+ eval_expr ge sp le e1 m1 a e2 m2 (Vfloat x) ->
+ eval_expr ge sp le e2 m2 b e3 m3 (Vfloat y) ->
+ eval_expr ge sp le e1 m1 (divf a b) e3 m3 (Vfloat (Float.div x y)).
+Proof. TrivialOp divf. Qed.
+
+Theorem eval_cmp:
+ forall sp le c e1 m1 a e2 m2 x b e3 m3 y,
+ eval_expr ge sp le e1 m1 a e2 m2 (Vint x) ->
+ eval_expr ge sp le e2 m2 b e3 m3 (Vint y) ->
+ eval_expr ge sp le e1 m1 (cmp c a b) e3 m3 (Val.of_bool (Int.cmp c x y)).
+Proof.
+ TrivialOp cmp.
+ simpl. case (Int.cmp c x y); auto.
+Qed.
+
+Theorem eval_cmp_null_r:
+ forall sp le c e1 m1 a e2 m2 p x b e3 m3 v,
+ eval_expr ge sp le e1 m1 a e2 m2 (Vptr p x) ->
+ eval_expr ge sp le e2 m2 b e3 m3 (Vint Int.zero) ->
+ (c = Ceq /\ v = Vfalse) \/ (c = Cne /\ v = Vtrue) ->
+ eval_expr ge sp le e1 m1 (cmp c a b) e3 m3 v.
+Proof.
+ TrivialOp cmp.
+ simpl. elim H1; intros [EQ1 EQ2]; subst c; subst v; reflexivity.
+Qed.
+
+Theorem eval_cmp_null_l:
+ forall sp le c e1 m1 a e2 m2 p x b e3 m3 v,
+ eval_expr ge sp le e1 m1 a e2 m2 (Vint Int.zero) ->
+ eval_expr ge sp le e2 m2 b e3 m3 (Vptr p x) ->
+ (c = Ceq /\ v = Vfalse) \/ (c = Cne /\ v = Vtrue) ->
+ eval_expr ge sp le e1 m1 (cmp c a b) e3 m3 v.
+Proof.
+ TrivialOp cmp.
+ simpl. elim H1; intros [EQ1 EQ2]; subst c; subst v; reflexivity.
+Qed.
+
+Theorem eval_cmp_ptr:
+ forall sp le c e1 m1 a e2 m2 p x b e3 m3 y,
+ eval_expr ge sp le e1 m1 a e2 m2 (Vptr p x) ->
+ eval_expr ge sp le e2 m2 b e3 m3 (Vptr p y) ->
+ eval_expr ge sp le e1 m1 (cmp c a b) e3 m3 (Val.of_bool (Int.cmp c x y)).
+Proof.
+ TrivialOp cmp.
+ simpl. unfold eq_block. rewrite zeq_true.
+ case (Int.cmp c x y); auto.
+Qed.
+
+Theorem eval_cmpu:
+ forall sp le c e1 m1 a e2 m2 x b e3 m3 y,
+ eval_expr ge sp le e1 m1 a e2 m2 (Vint x) ->
+ eval_expr ge sp le e2 m2 b e3 m3 (Vint y) ->
+ eval_expr ge sp le e1 m1 (cmpu c a b) e3 m3 (Val.of_bool (Int.cmpu c x y)).
+Proof.
+ TrivialOp cmpu.
+ simpl. case (Int.cmpu c x y); auto.
+Qed.
+
+Theorem eval_cmpf:
+ forall sp le c e1 m1 a e2 m2 x b e3 m3 y,
+ eval_expr ge sp le e1 m1 a e2 m2 (Vfloat x) ->
+ eval_expr ge sp le e2 m2 b e3 m3 (Vfloat y) ->
+ eval_expr ge sp le e1 m1 (cmpf c a b) e3 m3 (Val.of_bool (Float.cmp c x y)).
+Proof.
+ TrivialOp cmpf.
+ simpl. case (Float.cmp c x y); auto.
+Qed.
+
+Lemma eval_base_condition_of_expr:
+ forall sp le a e1 m1 e2 m2 v (b: bool),
+ eval_expr ge sp le e1 m1 a e2 m2 v ->
+ Val.bool_of_val v b ->
+ eval_condexpr ge sp le e1 m1
+ (CEcond (Ccompuimm Cne Int.zero) (a ::: Enil))
+ e2 m2 b.
+Proof.
+ intros.
+ eapply eval_CEcond. eauto with evalexpr.
+ inversion H0; simpl. rewrite Int.eq_false; auto. auto. auto.
+Qed.
+
+Lemma eval_condition_of_expr:
+ forall a sp le e1 m1 e2 m2 v (b: bool),
+ eval_expr ge sp le e1 m1 a e2 m2 v ->
+ Val.bool_of_val v b ->
+ eval_condexpr ge sp le e1 m1 (condexpr_of_expr a) e2 m2 b.
+Proof.
+ induction a; simpl; intros;
+ try (eapply eval_base_condition_of_expr; eauto; fail).
+ destruct o; try (eapply eval_base_condition_of_expr; eauto; fail).
+
+ destruct e. inversion H. subst sp0 le0 e m op al e0 m0 v0.
+ inversion H7. subst sp0 le0 e m e1 m1 vl.
+ simpl in H11. inversion H11; subst v.
+ inversion H0.
+ rewrite Int.eq_false; auto. constructor.
+ subst i; rewrite Int.eq_true. constructor.
+ eapply eval_base_condition_of_expr; eauto.
+
+ inversion H. eapply eval_CEcond; eauto. simpl in H11.
+ destruct (eval_condition c vl); try discriminate.
+ destruct b0; inversion H11; subst v0; subst v; inversion H0; congruence.
+
+ inversion H.
+ destruct v1; eauto with evalexpr.
+Qed.
+
+Theorem eval_conditionalexpr_true:
+ forall sp le e1 m1 a1 e2 m2 v1 a2 e3 m3 v2 a3,
+ eval_expr ge sp le e1 m1 a1 e2 m2 v1 ->
+ Val.is_true v1 ->
+ eval_expr ge sp le e2 m2 a2 e3 m3 v2 ->
+ eval_expr ge sp le e1 m1 (conditionalexpr a1 a2 a3) e3 m3 v2.
+Proof.
+ intros; unfold conditionalexpr.
+ apply eval_Econdition with e2 m2 true; auto.
+ eapply eval_condition_of_expr; eauto with valboolof.
+Qed.
+
+Theorem eval_conditionalexpr_false:
+ forall sp le e1 m1 a1 e2 m2 v1 a2 e3 m3 v2 a3,
+ eval_expr ge sp le e1 m1 a1 e2 m2 v1 ->
+ Val.is_false v1 ->
+ eval_expr ge sp le e2 m2 a3 e3 m3 v2 ->
+ eval_expr ge sp le e1 m1 (conditionalexpr a1 a2 a3) e3 m3 v2.
+Proof.
+ intros; unfold conditionalexpr.
+ apply eval_Econdition with e2 m2 false; auto.
+ eapply eval_condition_of_expr; eauto with valboolof.
+Qed.
+
+Lemma eval_addressing:
+ forall sp le e1 m1 a e2 m2 v b ofs,
+ eval_expr ge sp le e1 m1 a e2 m2 v ->
+ v = Vptr b ofs ->
+ match addressing a with (mode, args) =>
+ exists vl,
+ eval_exprlist ge sp le e1 m1 args e2 m2 vl /\
+ eval_addressing ge sp mode vl = Some v
+ end.
+Proof.
+ intros until v. unfold addressing; case (addressing_match a); intros.
+ InvEval H. exists (@nil val). split. eauto with evalexpr.
+ simpl. auto.
+ InvEval H. exists (@nil val). split. eauto with evalexpr.
+ simpl. auto.
+ InvEval H. FuncInv.
+ congruence.
+ InvEval EV.
+ exists (Vint i0 :: nil). split. eauto with evalexpr.
+ simpl. subst v. destruct (Genv.find_symbol ge s). congruence.
+ discriminate.
+ InvEval H. FuncInv.
+ destruct (Genv.find_symbol ge s); congruence.
+ InvEval EV.
+ exists (Vint i0 :: nil). split. eauto with evalexpr.
+ simpl. destruct (Genv.find_symbol ge s). congruence.
+ discriminate.
+ InvEval H. FuncInv.
+ congruence.
+ exists (Vptr b0 i :: nil). split. eauto with evalexpr.
+ simpl. congruence.
+ InvEval H. FuncInv.
+ congruence.
+ exists (Vint i :: Vptr b0 i0 :: nil).
+ split. eauto with evalexpr. simpl.
+ rewrite Int.add_commut. congruence.
+ exists (Vptr b0 i :: Vint i0 :: nil).
+ split. eauto with evalexpr. simpl. congruence.
+ exists (v :: nil). split. eauto with evalexpr.
+ subst v. simpl. rewrite Int.add_zero. auto.
+Qed.
+
+Theorem eval_load:
+ forall sp le e1 m1 a e2 m2 v chunk v',
+ eval_expr ge sp le e1 m1 a e2 m2 v ->
+ Mem.loadv chunk m2 v = Some v' ->
+ eval_expr ge sp le e1 m1 (load chunk a) e2 m2 v'.
+Proof.
+ intros. generalize H0; destruct v; simpl; intro; try discriminate.
+ unfold load.
+ generalize (eval_addressing _ _ _ _ _ _ _ _ _ _ H (refl_equal _)).
+ destruct (addressing a). intros [vl [EV EQ]].
+ eapply eval_Eload; eauto.
+Qed.
+
+Theorem eval_store:
+ forall sp le e1 m1 a1 e2 m2 v1 a2 e3 m3 v2 chunk m4,
+ eval_expr ge sp le e1 m1 a1 e2 m2 v1 ->
+ eval_expr ge sp le e2 m2 a2 e3 m3 v2 ->
+ Mem.storev chunk m3 v1 v2 = Some m4 ->
+ eval_expr ge sp le e1 m1 (store chunk a1 a2) e3 m4 v2.
+Proof.
+ intros. generalize H1; destruct v1; simpl; intro; try discriminate.
+ unfold store.
+ generalize (eval_addressing _ _ _ _ _ _ _ _ _ _ H (refl_equal _)).
+ destruct (addressing a1). intros [vl [EV EQ]].
+ eapply eval_Estore; eauto.
+Qed.
+
+Theorem exec_ifthenelse_true:
+ forall sp e1 m1 a e2 m2 v ifso ifnot e3 m3 out,
+ eval_expr ge sp nil e1 m1 a e2 m2 v ->
+ Val.is_true v ->
+ exec_stmtlist ge sp e2 m2 ifso e3 m3 out ->
+ exec_stmt ge sp e1 m1 (ifthenelse a ifso ifnot) e3 m3 out.
+Proof.
+ intros. unfold ifthenelse.
+ apply exec_Sifthenelse with e2 m2 true.
+ eapply eval_condition_of_expr; eauto with valboolof.
+ auto.
+Qed.
+
+Theorem exec_ifthenelse_false:
+ forall sp e1 m1 a e2 m2 v ifso ifnot e3 m3 out,
+ eval_expr ge sp nil e1 m1 a e2 m2 v ->
+ Val.is_false v ->
+ exec_stmtlist ge sp e2 m2 ifnot e3 m3 out ->
+ exec_stmt ge sp e1 m1 (ifthenelse a ifso ifnot) e3 m3 out.
+Proof.
+ intros. unfold ifthenelse.
+ apply exec_Sifthenelse with e2 m2 false.
+ eapply eval_condition_of_expr; eauto with valboolof.
+ auto.
+Qed.
+
+End CMCONSTR.
+
diff --git a/backend/Cminor.v b/backend/Cminor.v
new file mode 100644
index 0000000..f08d927
--- /dev/null
+++ b/backend/Cminor.v
@@ -0,0 +1,348 @@
+(** Abstract syntax and semantics for the Cminor language. *)
+
+Require Import Coqlib.
+Require Import Maps.
+Require Import AST.
+Require Import Integers.
+Require Import Floats.
+Require Import Values.
+Require Import Mem.
+Require Import Op.
+Require Import Globalenvs.
+
+(** * Abstract syntax *)
+
+(** Cminor is a low-level imperative language structured in expressions,
+ statements, functions and programs. Expressions include
+ reading and writing local variables, reading and writing store locations,
+ arithmetic operations, function calls, and conditional expressions
+ (similar to [e1 ? e2 : e3] in C). The [Elet] and [Eletvar] constructs
+ enable sharing the computations of subexpressions. De Bruijn notation
+ is used: [Eletvar n] refers to the value bound by then [n+1]-th enclosing
+ [Elet] construct.
+
+ A variant [condexpr] of [expr] is used to represent expressions
+ which are evaluated for their boolean value only and not their exact value.
+*)
+
+Inductive expr : Set :=
+ | Evar : ident -> expr
+ | Eassign : ident -> expr -> expr
+ | Eop : operation -> exprlist -> expr
+ | Eload : memory_chunk -> addressing -> exprlist -> expr
+ | Estore : memory_chunk -> addressing -> exprlist -> expr -> expr
+ | Ecall : signature -> expr -> exprlist -> expr
+ | Econdition : condexpr -> expr -> expr -> expr
+ | Elet : expr -> expr -> expr
+ | Eletvar : nat -> expr
+
+with condexpr : Set :=
+ | CEtrue: condexpr
+ | CEfalse: condexpr
+ | CEcond: condition -> exprlist -> condexpr
+ | CEcondition : condexpr -> condexpr -> condexpr -> condexpr
+
+with exprlist : Set :=
+ | Enil: exprlist
+ | Econs: expr -> exprlist -> exprlist.
+
+(** Statements include expression evaluation, an if/then/else conditional,
+ infinite loops, blocks and early block exits, and early function returns.
+ [Sexit n] terminates prematurely the execution of the [n+1] enclosing
+ [Sblock] statements. *)
+
+Inductive stmt : Set :=
+ | Sexpr: expr -> stmt
+ | Sifthenelse: condexpr -> stmtlist -> stmtlist -> stmt
+ | Sloop: stmtlist -> stmt
+ | Sblock: stmtlist -> stmt
+ | Sexit: nat -> stmt
+ | Sreturn: option expr -> stmt
+
+with stmtlist : Set :=
+ | Snil: stmtlist
+ | Scons: stmt -> stmtlist -> stmtlist.
+
+(** Functions are composed of a signature, a list of parameter names,
+ a list of local variables, and a list of statements representing
+ the function body. Each function can allocate a memory block of
+ size [fn_stackspace] on entrance. This block will be deallocated
+ automatically before the function returns. Pointers into this block
+ can be taken with the [Oaddrstack] operator. *)
+
+Record function : Set := mkfunction {
+ fn_sig: signature;
+ fn_params: list ident;
+ fn_vars: list ident;
+ fn_stackspace: Z;
+ fn_body: stmtlist
+}.
+
+Definition program := AST.program function.
+
+(** * Operational semantics *)
+
+(** The operational semantics for Cminor is given in big-step operational
+ style. Expressions evaluate to values, and statements evaluate to
+ ``outcomes'' indicating how execution should proceed afterwards. *)
+
+Inductive outcome: Set :=
+ | Out_normal: outcome (**r continue in sequence *)
+ | Out_exit: nat -> outcome (**r terminate [n+1] enclosing blocks *)
+ | Out_return: option val -> outcome. (**r return immediately to caller *)
+
+Definition outcome_result_value
+ (out: outcome) (ot: option typ) (v: val) : Prop :=
+ match out, ot with
+ | Out_normal, None => v = Vundef
+ | Out_return None, None => v = Vundef
+ | Out_return (Some v'), Some ty => v = v'
+ | _, _ => False
+ end.
+
+Definition outcome_block (out: outcome) : outcome :=
+ match out with
+ | Out_normal => Out_normal
+ | Out_exit O => Out_normal
+ | Out_exit (S n) => Out_exit n
+ | Out_return optv => Out_return optv
+ end.
+
+(** Three kinds of evaluation environments are involved:
+- [genv]: global environments, define symbols and functions;
+- [env]: local environments, map local variables to values;
+- [lenv]: let environments, map de Bruijn indices to values.
+*)
+
+Definition genv := Genv.t function.
+Definition env := PTree.t val.
+Definition letenv := list val.
+
+(** The following functions build the initial local environment at
+ function entry, binding parameters to the provided arguments and
+ initializing local variables to [Vundef]. *)
+
+Fixpoint set_params (vl: list val) (il: list ident) {struct il} : env :=
+ match il, vl with
+ | i1 :: is, v1 :: vs => PTree.set i1 v1 (set_params vs is)
+ | i1 :: is, nil => PTree.set i1 Vundef (set_params nil is)
+ | _, _ => PTree.empty val
+ end.
+
+Fixpoint set_locals (il: list ident) (e: env) {struct il} : env :=
+ match il with
+ | nil => e
+ | i1 :: is => PTree.set i1 Vundef (set_locals is e)
+ end.
+
+Section RELSEM.
+
+Variable ge: genv.
+
+(** Evaluation of an expression: [eval_expr ge sp le e m a e' m' v]
+ states that expression [a], in initial local environment [e] and
+ memory state [m], evaluates to value [v]. [e'] and [m'] are the final
+ local environment and memory state, respectively, reflecting variable
+ assignments and memory stores possibly performed by [a]. [ge] and
+ [le] are the global environment and let environment respectively, and
+ are unchanged during evaluation. [sp] is the pointer to the memory
+ block allocated for this function (stack frame).
+*)
+
+Inductive eval_expr:
+ val -> letenv ->
+ env -> mem -> expr ->
+ env -> mem -> val -> Prop :=
+ | eval_Evar:
+ forall sp le e m id v,
+ PTree.get id e = Some v ->
+ eval_expr sp le e m (Evar id) e m v
+ | eval_Eassign:
+ forall sp le e m id a e1 m1 v,
+ eval_expr sp le e m a e1 m1 v ->
+ eval_expr sp le e m (Eassign id a) (PTree.set id v e1) m1 v
+ | eval_Eop:
+ forall sp le e m op al e1 m1 vl v,
+ eval_exprlist sp le e m al e1 m1 vl ->
+ eval_operation ge sp op vl = Some v ->
+ eval_expr sp le e m (Eop op al) e1 m1 v
+ | eval_Eload:
+ forall sp le e m chunk addr al e1 m1 v vl a,
+ eval_exprlist sp le e m al e1 m1 vl ->
+ eval_addressing ge sp addr vl = Some a ->
+ Mem.loadv chunk m1 a = Some v ->
+ eval_expr sp le e m (Eload chunk addr al) e1 m1 v
+ | eval_Estore:
+ forall sp le e m chunk addr al b e1 m1 vl e2 m2 m3 v a,
+ eval_exprlist sp le e m al e1 m1 vl ->
+ eval_expr sp le e1 m1 b e2 m2 v ->
+ eval_addressing ge sp addr vl = Some a ->
+ Mem.storev chunk m2 a v = Some m3 ->
+ eval_expr sp le e m (Estore chunk addr al b) e2 m3 v
+ | eval_Ecall:
+ forall sp le e m sig a bl e1 e2 m1 m2 m3 vf vargs vres f,
+ eval_expr sp le e m a e1 m1 vf ->
+ eval_exprlist sp le e1 m1 bl e2 m2 vargs ->
+ Genv.find_funct ge vf = Some f ->
+ f.(fn_sig) = sig ->
+ eval_funcall m2 f vargs m3 vres ->
+ eval_expr sp le e m (Ecall sig a bl) e2 m3 vres
+ | eval_Econdition:
+ forall sp le e m a b c e1 m1 v1 e2 m2 v2,
+ eval_condexpr sp le e m a e1 m1 v1 ->
+ eval_expr sp le e1 m1 (if v1 then b else c) e2 m2 v2 ->
+ eval_expr sp le e m (Econdition a b c) e2 m2 v2
+ | eval_Elet:
+ forall sp le e m a b e1 m1 v1 e2 m2 v2,
+ eval_expr sp le e m a e1 m1 v1 ->
+ eval_expr sp (v1::le) e1 m1 b e2 m2 v2 ->
+ eval_expr sp le e m (Elet a b) e2 m2 v2
+ | eval_Eletvar:
+ forall sp le e m n v,
+ nth_error le n = Some v ->
+ eval_expr sp le e m (Eletvar n) e m v
+
+(** Evaluation of a condition expression:
+ [eval_condexpr ge sp le e m a e' m' b]
+ states that condition expression [a] evaluates to the boolean value [b].
+ The other parameters are as in [eval_expr].
+*)
+
+with eval_condexpr:
+ val -> letenv ->
+ env -> mem -> condexpr ->
+ env -> mem -> bool -> Prop :=
+ | eval_CEtrue:
+ forall sp le e m,
+ eval_condexpr sp le e m CEtrue e m true
+ | eval_CEfalse:
+ forall sp le e m,
+ eval_condexpr sp le e m CEfalse e m false
+ | eval_CEcond:
+ forall sp le e m cond al e1 m1 vl b,
+ eval_exprlist sp le e m al e1 m1 vl ->
+ eval_condition cond vl = Some b ->
+ eval_condexpr sp le e m (CEcond cond al) e1 m1 b
+ | eval_CEcondition:
+ forall sp le e m a b c e1 m1 vb1 e2 m2 vb2,
+ eval_condexpr sp le e m a e1 m1 vb1 ->
+ eval_condexpr sp le e1 m1 (if vb1 then b else c) e2 m2 vb2 ->
+ eval_condexpr sp le e m (CEcondition a b c) e2 m2 vb2
+
+(** Evaluation of a list of expressions:
+ [eval_exprlist ge sp le al m a e' m' vl]
+ states that the list [al] of expressions evaluate
+ to the list [vl] of values.
+ The other parameters are as in [eval_expr].
+*)
+
+with eval_exprlist:
+ val -> letenv ->
+ env -> mem -> exprlist ->
+ env -> mem -> list val -> Prop :=
+ | eval_Enil:
+ forall sp le e m,
+ eval_exprlist sp le e m Enil e m nil
+ | eval_Econs:
+ forall sp le e m a bl e1 m1 v e2 m2 vl,
+ eval_expr sp le e m a e1 m1 v ->
+ eval_exprlist sp le e1 m1 bl e2 m2 vl ->
+ eval_exprlist sp le e m (Econs a bl) e2 m2 (v :: vl)
+
+(** Evaluation of a function invocation: [eval_funcall ge m f args m' res]
+ means that the function [f], applied to the arguments [args] in
+ memory state [m], returns the value [res] in modified memory state [m'].
+*)
+
+with eval_funcall:
+ mem -> function -> list val ->
+ mem -> val -> Prop :=
+ | eval_funcall_intro:
+ forall m f vargs m1 sp e e2 m2 out vres,
+ Mem.alloc m 0 f.(fn_stackspace) = (m1, sp) ->
+ set_locals f.(fn_vars) (set_params vargs f.(fn_params)) = e ->
+ exec_stmtlist (Vptr sp Int.zero) e m1 f.(fn_body) e2 m2 out ->
+ outcome_result_value out f.(fn_sig).(sig_res) vres ->
+ eval_funcall m f vargs (Mem.free m2 sp) vres
+
+(** Execution of a statement: [exec_stmt ge sp e m s e' m' out]
+ means that statement [s] executes with outcome [out].
+ The other parameters are as in [eval_expr]. *)
+
+with exec_stmt:
+ val ->
+ env -> mem -> stmt ->
+ env -> mem -> outcome -> Prop :=
+ | exec_Sexpr:
+ forall sp e m a e1 m1 v,
+ eval_expr sp nil e m a e1 m1 v ->
+ exec_stmt sp e m (Sexpr a) e1 m1 Out_normal
+ | exec_Sifthenelse:
+ forall sp e m a sl1 sl2 e1 m1 v1 e2 m2 out,
+ eval_condexpr sp nil e m a e1 m1 v1 ->
+ exec_stmtlist sp e1 m1 (if v1 then sl1 else sl2) e2 m2 out ->
+ exec_stmt sp e m (Sifthenelse a sl1 sl2) e2 m2 out
+ | exec_Sloop_loop:
+ forall sp e m sl e1 m1 e2 m2 out,
+ exec_stmtlist sp e m sl e1 m1 Out_normal ->
+ exec_stmt sp e1 m1 (Sloop sl) e2 m2 out ->
+ exec_stmt sp e m (Sloop sl) e2 m2 out
+ | exec_Sloop_stop:
+ forall sp e m sl e1 m1 out,
+ exec_stmtlist sp e m sl e1 m1 out ->
+ out <> Out_normal ->
+ exec_stmt sp e m (Sloop sl) e1 m1 out
+ | exec_Sblock:
+ forall sp e m sl e1 m1 out,
+ exec_stmtlist sp e m sl e1 m1 out ->
+ exec_stmt sp e m (Sblock sl) e1 m1 (outcome_block out)
+ | exec_Sexit:
+ forall sp e m n,
+ exec_stmt sp e m (Sexit n) e m (Out_exit n)
+ | exec_Sreturn_none:
+ forall sp e m,
+ exec_stmt sp e m (Sreturn None) e m (Out_return None)
+ | exec_Sreturn_some:
+ forall sp e m a e1 m1 v,
+ eval_expr sp nil e m a e1 m1 v ->
+ exec_stmt sp e m (Sreturn (Some a)) e1 m1 (Out_return (Some v))
+
+(** Execution of a list of statements: [exec_stmtlist ge sp e m sl e' m' out]
+ means that the list [sl] of statements executes sequentially
+ with outcome [out]. Execution stops at the first statement that
+ leads an outcome different from [Out_normal].
+ The other parameters are as in [eval_expr]. *)
+
+with exec_stmtlist:
+ val ->
+ env -> mem -> stmtlist ->
+ env -> mem -> outcome -> Prop :=
+ | exec_Snil:
+ forall sp e m,
+ exec_stmtlist sp e m Snil e m Out_normal
+ | exec_Scons_continue:
+ forall sp e m s sl e1 m1 e2 m2 out,
+ exec_stmt sp e m s e1 m1 Out_normal ->
+ exec_stmtlist sp e1 m1 sl e2 m2 out ->
+ exec_stmtlist sp e m (Scons s sl) e2 m2 out
+ | exec_Scons_stop:
+ forall sp e m s sl e1 m1 out,
+ exec_stmt sp e m s e1 m1 out ->
+ out <> Out_normal ->
+ exec_stmtlist sp e m (Scons s sl) e1 m1 out.
+
+End RELSEM.
+
+(** Execution of a whole program: [exec_program p r]
+ holds if the application of [p]'s main function to no arguments
+ in the initial memory state for [p] eventually returns value [r]. *)
+
+Definition exec_program (p: program) (r: val) : Prop :=
+ let ge := Genv.globalenv p in
+ let m0 := Genv.init_mem p in
+ exists b, exists f, exists m,
+ Genv.find_symbol ge p.(prog_main) = Some b /\
+ Genv.find_funct_ptr ge b = Some f /\
+ f.(fn_sig) = mksignature nil (Some Tint) /\
+ eval_funcall ge m0 f nil m r.
+
diff --git a/backend/Cminorgen.v b/backend/Cminorgen.v
new file mode 100644
index 0000000..6af5260
--- /dev/null
+++ b/backend/Cminorgen.v
@@ -0,0 +1,398 @@
+(** Translation from Csharpminor to Cminor. *)
+
+Require Import Coqlib.
+Require Import Maps.
+Require Import Sets.
+Require Import AST.
+Require Import Integers.
+Require Mem.
+Require Import Csharpminor.
+Require Import Op.
+Require Import Cminor.
+Require Cmconstr.
+
+(** The main task in translating Csharpminor to Cminor is to explicitly
+ stack-allocate local variables whose address is taken: these local
+ variables become sub-blocks of the Cminor stack data block for the
+ current function. Taking the address of such a variable becomes
+ a [Oaddrstack] operation with the corresponding offset. Accessing
+ or assigning such a variable becomes a load or store operation at
+ that address. Only scalar local variables whose address is never
+ taken in the Csharpminor code can be mapped to Cminor local
+ variable, since the latter do not reside in memory.
+
+ Other tasks performed during the translation to Cminor:
+- Transformation of Csharpminor's standard set of operators and
+ trivial addressing modes to Cminor's processor-dependent operators
+ and addressing modes. This is done using the optimizing Cminor
+ constructor functions provided in file [Cmconstr], therefore performing
+ instruction selection on the fly.
+- Insertion of truncation, zero- and sign-extension operations when
+ assigning to a Csharpminor local variable of ``small'' type
+ (e.g. [Mfloat32] or [Mint8signed]). This is necessary to preserve
+ the ``normalize at assignment-time'' semantics of Csharpminor.
+*)
+
+(** Translation of operators. *)
+
+Definition make_op (op: Csharpminor.operation) (el: exprlist): option expr :=
+ match el with
+ | Enil =>
+ match op with
+ | Csharpminor.Ointconst n => Some(Eop (Ointconst n) Enil)
+ | Csharpminor.Ofloatconst n => Some(Eop (Ofloatconst n) Enil)
+ | _ => None
+ end
+ | Econs e1 Enil =>
+ match op with
+ | Csharpminor.Ocast8unsigned => Some(Cmconstr.cast8unsigned e1)
+ | Csharpminor.Ocast8signed => Some(Cmconstr.cast8signed e1)
+ | Csharpminor.Ocast16unsigned => Some(Cmconstr.cast16unsigned e1)
+ | Csharpminor.Ocast16signed => Some(Cmconstr.cast16signed e1)
+ | Csharpminor.Onotint => Some(Cmconstr.notint e1)
+ | Csharpminor.Onegf => Some(Cmconstr.negfloat e1)
+ | Csharpminor.Oabsf => Some(Cmconstr.absfloat e1)
+ | Csharpminor.Osingleoffloat => Some(Cmconstr.singleoffloat e1)
+ | Csharpminor.Ointoffloat => Some(Cmconstr.intoffloat e1)
+ | Csharpminor.Ofloatofint => Some(Cmconstr.floatofint e1)
+ | Csharpminor.Ofloatofintu => Some(Cmconstr.floatofintu e1)
+ | _ => None
+ end
+ | Econs e1 (Econs e2 Enil) =>
+ match op with
+ | Csharpminor.Oadd => Some(Cmconstr.add e1 e2)
+ | Csharpminor.Osub => Some(Cmconstr.sub e1 e2)
+ | Csharpminor.Omul => Some(Cmconstr.mul e1 e2)
+ | Csharpminor.Odiv => Some(Cmconstr.divs e1 e2)
+ | Csharpminor.Odivu => Some(Cmconstr.divu e1 e2)
+ | Csharpminor.Omod => Some(Cmconstr.mods e1 e2)
+ | Csharpminor.Omodu => Some(Cmconstr.modu e1 e2)
+ | Csharpminor.Oand => Some(Cmconstr.and e1 e2)
+ | Csharpminor.Oor => Some(Cmconstr.or e1 e2)
+ | Csharpminor.Oxor => Some(Cmconstr.xor e1 e2)
+ | Csharpminor.Oshl => Some(Cmconstr.shl e1 e2)
+ | Csharpminor.Oshr => Some(Cmconstr.shr e1 e2)
+ | Csharpminor.Oshru => Some(Cmconstr.shru e1 e2)
+ | Csharpminor.Oaddf => Some(Cmconstr.addf e1 e2)
+ | Csharpminor.Osubf => Some(Cmconstr.subf e1 e2)
+ | Csharpminor.Omulf => Some(Cmconstr.mulf e1 e2)
+ | Csharpminor.Odivf => Some(Cmconstr.divf e1 e2)
+ | Csharpminor.Ocmp c => Some(Cmconstr.cmp c e1 e2)
+ | Csharpminor.Ocmpu c => Some(Cmconstr.cmpu c e1 e2)
+ | Csharpminor.Ocmpf c => Some(Cmconstr.cmpf c e1 e2)
+ | _ => None
+ end
+ | _ => None
+ end.
+
+(** [make_cast chunk e] returns a Cminor expression that normalizes
+ the value of Cminor expression [e] as prescribed by the memory chunk
+ [chunk]. For instance, 8-bit sign extension is performed if
+ [chunk] is [Mint8signed]. *)
+
+Definition make_cast (chunk: memory_chunk) (e: expr): expr :=
+ match chunk with
+ | Mint8signed => Cmconstr.cast8signed e
+ | Mint8unsigned => Cmconstr.cast8unsigned e
+ | Mint16signed => Cmconstr.cast16signed e
+ | Mint16unsigned => Cmconstr.cast16unsigned e
+ | Mint32 => e
+ | Mfloat32 => Cmconstr.singleoffloat e
+ | Mfloat64 => e
+ end.
+
+Definition make_load (chunk: memory_chunk) (e: expr): expr :=
+ Cmconstr.load chunk e.
+
+(** In Csharpminor, the value of a store expression is the stored data
+ normalized to the memory chunk. In Cminor, it is the stored data.
+ For the translation, we could normalize before storing. However,
+ the memory model performs automatic normalization of the stored
+ data. It is therefore correct to store the data as is, then
+ normalize the result value of the store expression. This is more
+ efficient in general because often the result value is ignored:
+ the normalization code will therefore be eliminated later as dead
+ code. *)
+
+Definition make_store (chunk: memory_chunk) (e1 e2: expr): expr :=
+ make_cast chunk (Cmconstr.store chunk e1 e2).
+
+Definition make_stackaddr (ofs: Z): expr :=
+ Eop (Oaddrstack (Int.repr ofs)) Enil.
+
+(** Compile-time information attached to each Csharpminor
+ variable: global variables, local variables, function parameters.
+ [Var_local] denotes a scalar local variable whose address is not
+ taken; it will be translated to a Cminor local variable of the
+ same name. [Var_stack_scalar] and [Var_stack_array] denote
+ local variables that are stored as sub-blocks of the Cminor stack
+ data block. [Var_global] denotes a global variable, stored in
+ the global symbol with the same name. *)
+
+Inductive var_info: Set :=
+ | Var_local: memory_chunk -> var_info
+ | Var_stack_scalar: memory_chunk -> Z -> var_info
+ | Var_stack_array: Z -> var_info
+ | Var_global: var_info.
+
+Definition compilenv := PMap.t var_info.
+
+(** Generation of Cminor code corresponding to accesses to Csharpminor
+ local variables: reads, assignments, and taking the address of. *)
+
+Definition var_get (cenv: compilenv) (id: ident): option expr :=
+ match PMap.get id cenv with
+ | Var_local chunk => Some(Evar id)
+ | Var_stack_scalar chunk ofs => Some(make_load chunk (make_stackaddr ofs))
+ | Var_stack_array ofs => None
+ | Var_global => None
+ end.
+
+Definition var_set (cenv: compilenv) (id: ident) (rhs: expr): option expr :=
+ match PMap.get id cenv with
+ | Var_local chunk => Some(Eassign id (make_cast chunk rhs))
+ | Var_stack_scalar chunk ofs =>
+ Some(make_store chunk (make_stackaddr ofs) rhs)
+ | Var_stack_array ofs => None
+ | Var_global => None
+ end.
+
+Definition var_addr (cenv: compilenv) (id: ident): option expr :=
+ match PMap.get id cenv with
+ | Var_local chunk => None
+ | Var_stack_scalar chunk ofs => Some (make_stackaddr ofs)
+ | Var_stack_array ofs => Some (make_stackaddr ofs)
+ | Var_global => Some (Eop (Oaddrsymbol id Int.zero) Enil)
+ end.
+
+(** The translation from Csharpminor to Cminor can fail, which we
+ encode by returning option types ([None] denotes error).
+ Propagation of errors is done in monadic style, using the following
+ [bind] monadic composition operator, and a [do] notation inspired
+ by Haskell's. *)
+
+Definition bind (A B: Set) (a: option A) (b: A -> option B): option B :=
+ match a with
+ | None => None
+ | Some x => b x
+ end.
+
+Notation "'do' X <- A ; B" := (bind _ _ A (fun X => B))
+ (at level 200, X ident, A at level 100, B at level 200).
+
+(** Translation of expressions. All the hard work is done by the
+ [make_*] and [var_*] functions defined above. *)
+
+Fixpoint transl_expr (cenv: compilenv) (e: Csharpminor.expr)
+ {struct e}: option expr :=
+ match e with
+ | Csharpminor.Evar id => var_get cenv id
+ | Csharpminor.Eaddrof id => var_addr cenv id
+ | Csharpminor.Eassign id e =>
+ do te <- transl_expr cenv e; var_set cenv id te
+ | Csharpminor.Eop op el =>
+ do tel <- transl_exprlist cenv el; make_op op tel
+ | Csharpminor.Eload chunk e =>
+ do te <- transl_expr cenv e; Some (make_load chunk te)
+ | Csharpminor.Estore chunk e1 e2 =>
+ do te1 <- transl_expr cenv e1;
+ do te2 <- transl_expr cenv e2;
+ Some (make_store chunk te1 te2)
+ | Csharpminor.Ecall sig e el =>
+ do te <- transl_expr cenv e;
+ do tel <- transl_exprlist cenv el;
+ Some (Ecall sig te tel)
+ | Csharpminor.Econdition e1 e2 e3 =>
+ do te1 <- transl_expr cenv e1;
+ do te2 <- transl_expr cenv e2;
+ do te3 <- transl_expr cenv e3;
+ Some (Cmconstr.conditionalexpr te1 te2 te3)
+ | Csharpminor.Elet e1 e2 =>
+ do te1 <- transl_expr cenv e1;
+ do te2 <- transl_expr cenv e2;
+ Some (Elet te1 te2)
+ | Csharpminor.Eletvar n =>
+ Some (Eletvar n)
+ end
+
+with transl_exprlist (cenv: compilenv) (el: Csharpminor.exprlist)
+ {struct el}: option exprlist :=
+ match el with
+ | Csharpminor.Enil =>
+ Some Enil
+ | Csharpminor.Econs e1 e2 =>
+ do te1 <- transl_expr cenv e1;
+ do te2 <- transl_exprlist cenv e2;
+ Some (Econs te1 te2)
+ end.
+
+(** Translation of statements. Entirely straightforward. *)
+
+Fixpoint transl_stmt (cenv: compilenv) (s: Csharpminor.stmt)
+ {struct s}: option stmt :=
+ match s with
+ | Csharpminor.Sexpr e =>
+ do te <- transl_expr cenv e; Some(Sexpr te)
+ | Csharpminor.Sifthenelse e s1 s2 =>
+ do te <- transl_expr cenv e;
+ do ts1 <- transl_stmtlist cenv s1;
+ do ts2 <- transl_stmtlist cenv s2;
+ Some (Cmconstr.ifthenelse te ts1 ts2)
+ | Csharpminor.Sloop s =>
+ do ts <- transl_stmtlist cenv s;
+ Some (Sloop ts)
+ | Csharpminor.Sblock s =>
+ do ts <- transl_stmtlist cenv s;
+ Some (Sblock ts)
+ | Csharpminor.Sexit n =>
+ Some (Sexit n)
+ | Csharpminor.Sreturn None =>
+ Some (Sreturn None)
+ | Csharpminor.Sreturn (Some e) =>
+ do te <- transl_expr cenv e;
+ Some (Sreturn (Some te))
+ end
+
+with transl_stmtlist (cenv: compilenv) (s: Csharpminor.stmtlist)
+ {struct s}: option stmtlist :=
+ match s with
+ | Csharpminor.Snil => Some Snil
+ | Csharpminor.Scons s1 s2 =>
+ do ts1 <- transl_stmt cenv s1;
+ do ts2 <- transl_stmtlist cenv s2;
+ Some (Scons ts1 ts2)
+ end.
+
+(** Computation of the set of variables whose address is taken in
+ a piece of Csharpminor code. *)
+
+Module Identset := MakeSet(PTree).
+
+Fixpoint addr_taken_expr (e: Csharpminor.expr): Identset.t :=
+ match e with
+ | Csharpminor.Evar id => Identset.empty
+ | Csharpminor.Eaddrof id => Identset.add id Identset.empty
+ | Csharpminor.Eassign id e => addr_taken_expr e
+ | Csharpminor.Eop op el => addr_taken_exprlist el
+ | Csharpminor.Eload chunk e => addr_taken_expr e
+ | Csharpminor.Estore chunk e1 e2 =>
+ Identset.union (addr_taken_expr e1) (addr_taken_expr e2)
+ | Csharpminor.Ecall sig e el =>
+ Identset.union (addr_taken_expr e) (addr_taken_exprlist el)
+ | Csharpminor.Econdition e1 e2 e3 =>
+ Identset.union (addr_taken_expr e1)
+ (Identset.union (addr_taken_expr e2) (addr_taken_expr e3))
+ | Csharpminor.Elet e1 e2 =>
+ Identset.union (addr_taken_expr e1) (addr_taken_expr e2)
+ | Csharpminor.Eletvar n => Identset.empty
+ end
+
+with addr_taken_exprlist (e: Csharpminor.exprlist): Identset.t :=
+ match e with
+ | Csharpminor.Enil => Identset.empty
+ | Csharpminor.Econs e1 e2 =>
+ Identset.union (addr_taken_expr e1) (addr_taken_exprlist e2)
+ end.
+
+Fixpoint addr_taken_stmt (s: Csharpminor.stmt): Identset.t :=
+ match s with
+ | Csharpminor.Sexpr e => addr_taken_expr e
+ | Csharpminor.Sifthenelse e s1 s2 =>
+ Identset.union (addr_taken_expr e)
+ (Identset.union (addr_taken_stmtlist s1) (addr_taken_stmtlist s2))
+ | Csharpminor.Sloop s => addr_taken_stmtlist s
+ | Csharpminor.Sblock s => addr_taken_stmtlist s
+ | Csharpminor.Sexit n => Identset.empty
+ | Csharpminor.Sreturn None => Identset.empty
+ | Csharpminor.Sreturn (Some e) => addr_taken_expr e
+ end
+
+with addr_taken_stmtlist (s: Csharpminor.stmtlist): Identset.t :=
+ match s with
+ | Csharpminor.Snil => Identset.empty
+ | Csharpminor.Scons s1 s2 =>
+ Identset.union (addr_taken_stmt s1) (addr_taken_stmtlist s2)
+ end.
+
+(** Layout of the Cminor stack data block and construction of the
+ compilation environment. Csharpminor local variables that are
+ arrays or whose address is taken are allocated a slot in the Cminor
+ stack data. While this is not important for correctness, sufficient
+ padding is inserted to ensure adequate alignment of addresses. *)
+
+Definition assign_variable
+ (atk: Identset.t)
+ (id_lv: ident * local_variable)
+ (cenv_stacksize: compilenv * Z) : compilenv * Z :=
+ let (cenv, stacksize) := cenv_stacksize in
+ match id_lv with
+ | (id, LVarray sz) =>
+ let ofs := align stacksize 8 in
+ (PMap.set id (Var_stack_array ofs) cenv, ofs + Zmax 0 sz)
+ | (id, LVscalar chunk) =>
+ if Identset.mem id atk then
+ let sz := Mem.size_chunk chunk in
+ let ofs := align stacksize sz in
+ (PMap.set id (Var_stack_scalar chunk ofs) cenv, ofs + sz)
+ else
+ (PMap.set id (Var_local chunk) cenv, stacksize)
+ end.
+
+Fixpoint assign_variables
+ (atk: Identset.t)
+ (id_lv_list: list (ident * local_variable))
+ (cenv_stacksize: compilenv * Z)
+ {struct id_lv_list}: compilenv * Z :=
+ match id_lv_list with
+ | nil => cenv_stacksize
+ | id_lv :: rem =>
+ assign_variables atk rem (assign_variable atk id_lv cenv_stacksize)
+ end.
+
+Definition build_compilenv (f: Csharpminor.function) : compilenv * Z :=
+ assign_variables
+ (addr_taken_stmtlist f.(Csharpminor.fn_body))
+ (fn_variables f)
+ (PMap.init Var_global, 0).
+
+(** Function parameters whose address is taken must be stored in their
+ stack slots at function entry. (Cminor passes these parameters in
+ local variables.) *)
+
+Fixpoint store_parameters
+ (cenv: compilenv) (params: list (ident * memory_chunk))
+ {struct params} : stmtlist :=
+ match params with
+ | nil => Snil
+ | (id, chunk) :: rem =>
+ match PMap.get id cenv with
+ | Var_local chunk =>
+ Scons (Sexpr (Eassign id (make_cast chunk (Evar id))))
+ (store_parameters cenv rem)
+ | Var_stack_scalar chunk ofs =>
+ Scons (Sexpr (make_store chunk (make_stackaddr ofs) (Evar id)))
+ (store_parameters cenv rem)
+ | _ =>
+ Snil (* should never happen *)
+ end
+ end.
+
+(** Translation of a Csharpminor function. We must check that the
+ required Cminor stack block is no bigger than [Int.max_signed],
+ otherwise address computations within the stack block could
+ overflow machine arithmetic and lead to incorrect code. *)
+
+Definition transl_function (f: Csharpminor.function): option function :=
+ let (cenv, stacksize) := build_compilenv f in
+ if zle stacksize Int.max_signed then
+ do tbody <- transl_stmtlist cenv f.(Csharpminor.fn_body);
+ Some (mkfunction
+ (Csharpminor.fn_sig f)
+ (Csharpminor.fn_params_names f)
+ (Csharpminor.fn_vars_names f)
+ stacksize
+ (Scons (Sblock (store_parameters cenv f.(Csharpminor.fn_params))) tbody))
+ else None.
+
+Definition transl_program (p: Csharpminor.program) : option program :=
+ transform_partial_program transl_function p.
diff --git a/backend/Cminorgenproof.v b/backend/Cminorgenproof.v
new file mode 100644
index 0000000..b7c7884
--- /dev/null
+++ b/backend/Cminorgenproof.v
@@ -0,0 +1,2409 @@
+(** Correctness proof for Cminor generation. *)
+
+Require Import Coqlib.
+Require Import Maps.
+Require Import Sets.
+Require Import AST.
+Require Import Integers.
+Require Import Floats.
+Require Import Values.
+Require Import Mem.
+Require Import Globalenvs.
+Require Import Csharpminor.
+Require Import Op.
+Require Import Cminor.
+Require Cmconstr.
+Require Import Cminorgen.
+Require Import Cmconstrproof.
+
+Section TRANSLATION.
+
+Variable prog: Csharpminor.program.
+Variable tprog: program.
+Hypothesis TRANSL: transl_program prog = Some tprog.
+Let ge : Csharpminor.genv := Genv.globalenv prog.
+Let tge: genv := Genv.globalenv tprog.
+
+Lemma symbols_preserved:
+ forall (s: ident), Genv.find_symbol tge s = Genv.find_symbol ge s.
+Proof.
+ intro. unfold ge, tge.
+ apply Genv.find_symbol_transf_partial with transl_function.
+ exact TRANSL.
+Qed.
+
+Lemma function_ptr_translated:
+ forall (b: block) (f: Csharpminor.function),
+ Genv.find_funct_ptr ge b = Some f ->
+ exists tf,
+ Genv.find_funct_ptr tge b = Some tf /\ transl_function f = Some tf.
+Proof.
+ intros.
+ generalize
+ (Genv.find_funct_ptr_transf_partial transl_function TRANSL H).
+ case (transl_function f).
+ intros tf [A B]. exists tf. tauto.
+ intros [A B]. elim B. reflexivity.
+Qed.
+
+Lemma functions_translated:
+ forall (v: val) (f: Csharpminor.function),
+ Genv.find_funct ge v = Some f ->
+ exists tf,
+ Genv.find_funct tge v = Some tf /\ transl_function f = Some tf.
+Proof.
+ intros.
+ generalize
+ (Genv.find_funct_transf_partial transl_function TRANSL H).
+ case (transl_function f).
+ intros tf [A B]. exists tf. tauto.
+ intros [A B]. elim B. reflexivity.
+Qed.
+
+(** * Correspondence between Csharpminor's and Cminor's environments and memory states *)
+
+(** In Csharpminor, every variable is stored in a separate memory block.
+ In the corresponding Cminor code, some of these variables reside in
+ the local variable environment; others are sub-blocks of the stack data
+ block. We capture these changes in memory via a memory injection [f]:
+- [f b = None] means that the Csharpminor block [b] no longer exist
+ in the execution of the generated Cminor code. This corresponds to
+ a Csharpminor local variable translated to a Cminor local variable.
+- [f b = Some(b', ofs)] means that Csharpminor block [b] corresponds
+ to a sub-block of Cminor block [b] at offset [ofs].
+
+ A memory injection [f] defines a relation [val_inject f] between
+ values and a relation [mem_inject f] between memory states.
+ These relations, defined in file [Memory], will be used intensively
+ in our proof of simulation between Csharpminor and Cminor executions.
+
+ In the remainder of this section, we define relations between
+ Csharpminor and Cminor environments and call stacks.
+
+ Global environments match if the memory injection [f] leaves unchanged
+ the references to global symbols and functions. *)
+
+Record match_globalenvs (f: meminj) : Prop :=
+ mk_match_globalenvs {
+ mg_symbols:
+ forall id b,
+ Genv.find_symbol ge id = Some b ->
+ f b = Some (b, 0) /\ Genv.find_symbol tge id = Some b;
+ mg_functions:
+ forall b, b < 0 -> f b = Some(b, 0)
+ }.
+
+(** Matching for a Csharpminor variable [id].
+- If this variable is mapped to a Cminor local variable, the
+ corresponding Csharpminor memory block [b] must no longer exist in
+ Cminor ([f b = None]). Moreover, the content of block [b] must
+ match the value of [id] found in the Cminor local environment [te].
+- If this variable is mapped to a sub-block of the Cminor stack data
+ at offset [ofs], the address of this variable in Csharpminor [Vptr b
+ Int.zero] must match the address of the sub-block [Vptr sp (Int.repr
+ ofs)].
+*)
+
+Inductive match_var (f: meminj) (id: ident)
+ (e: Csharpminor.env) (m: mem) (te: env) (sp: block) :
+ var_info -> Prop :=
+ | match_var_local:
+ forall chunk b v v',
+ PTree.get id e = Some (b, LVscalar chunk) ->
+ Mem.load chunk m b 0 = Some v ->
+ f b = None ->
+ PTree.get id te = Some v' ->
+ val_inject f v v' ->
+ match_var f id e m te sp (Var_local chunk)
+ | match_var_stack_scalar:
+ forall chunk ofs b,
+ PTree.get id e = Some (b, LVscalar chunk) ->
+ val_inject f (Vptr b Int.zero) (Vptr sp (Int.repr ofs)) ->
+ match_var f id e m te sp (Var_stack_scalar chunk ofs)
+ | match_var_stack_array:
+ forall ofs sz b,
+ PTree.get id e = Some (b, LVarray sz) ->
+ val_inject f (Vptr b Int.zero) (Vptr sp (Int.repr ofs)) ->
+ match_var f id e m te sp (Var_stack_array ofs)
+ | match_var_global:
+ PTree.get id e = None ->
+ match_var f id e m te sp (Var_global).
+
+(** Matching between a Csharpminor environment [e] and a Cminor
+ environment [te]. The [lo] and [hi] parameters delimit the range
+ of addresses for the blocks referenced from [te]. *)
+
+Record match_env (f: meminj) (cenv: compilenv)
+ (e: Csharpminor.env) (m: mem) (te: env) (sp: block)
+ (lo hi: Z) : Prop :=
+ mk_match_env {
+
+(** Each variable mentioned in the compilation environment must match
+ as defined above. *)
+ me_vars:
+ forall id, match_var f id e m te sp (PMap.get id cenv);
+
+(** The range [lo, hi] must not be empty. *)
+ me_low_high:
+ lo <= hi;
+
+(** Every block appearing in the Csharpminor environment [e] must be
+ in the range [lo, hi]. *)
+ me_bounded:
+ forall id b lv, PTree.get id e = Some(b, lv) -> lo <= b < hi;
+
+(** Distinct Csharpminor local variables must be mapped to distinct blocks. *)
+ me_inj:
+ forall id1 b1 lv1 id2 b2 lv2,
+ PTree.get id1 e = Some(b1, lv1) ->
+ PTree.get id2 e = Some(b2, lv2) ->
+ id1 <> id2 -> b1 <> b2;
+
+(** All blocks mapped to sub-blocks of the Cminor stack data must be in
+ the range [lo, hi]. *)
+ me_inv:
+ forall b delta,
+ f b = Some(sp, delta) -> lo <= b < hi;
+
+(** All Csharpminor blocks below [lo] (i.e. allocated before the blocks
+ referenced from [e]) must map to blocks that are below [sp]
+ (i.e. allocated before the stack data for the current Cminor function). *)
+ me_incr:
+ forall b tb delta,
+ f b = Some(tb, delta) -> b < lo -> tb < sp
+ }.
+
+(** Call stacks represent abstractly the execution state of the current
+ Csharpminor and Cminor functions, as well as the states of the
+ calling functions. A call stack is a list of frames, each frame
+ collecting information on the current execution state of a Csharpminor
+ function and its Cminor translation. *)
+
+Record frame : Set :=
+ mkframe {
+ fr_cenv: compilenv;
+ fr_e: Csharpminor.env;
+ fr_te: env;
+ fr_sp: block;
+ fr_low: Z;
+ fr_high: Z
+ }.
+
+Definition callstack : Set := list frame.
+
+(** Matching of call stacks imply matching of environments for each of
+ the frames, plus matching of the global environments, plus disjointness
+ conditions over the memory blocks allocated for local variables
+ and Cminor stack data. *)
+
+Inductive match_callstack: meminj -> callstack -> Z -> Z -> mem -> Prop :=
+ | mcs_nil:
+ forall f bound tbound m,
+ match_globalenvs f ->
+ match_callstack f nil bound tbound m
+ | mcs_cons:
+ forall f cenv e te sp lo hi cs bound tbound m,
+ hi <= bound ->
+ sp < tbound ->
+ match_env f cenv e m te sp lo hi ->
+ match_callstack f cs lo sp m ->
+ match_callstack f (mkframe cenv e te sp lo hi :: cs) bound tbound m.
+
+(** The remainder of this section is devoted to showing preservation
+ of the [match_callstack] invariant under various assignments and memory
+ stores. First: preservation by memory stores to ``mapped'' blocks
+ (block that have a counterpart in the Cminor execution). *)
+
+Lemma match_env_store_mapped:
+ forall f cenv e m1 m2 te sp lo hi chunk b ofs v,
+ f b <> None ->
+ store chunk m1 b ofs v = Some m2 ->
+ match_env f cenv e m1 te sp lo hi ->
+ match_env f cenv e m2 te sp lo hi.
+Proof.
+ intros. inversion H1. constructor; auto.
+ (* vars *)
+ intros. generalize (me_vars0 id); intro.
+ inversion H2; econstructor; eauto.
+ rewrite <- H5. eapply load_store_other; eauto.
+ left. congruence.
+Qed.
+
+Lemma match_callstack_mapped:
+ forall f cs bound tbound m1,
+ match_callstack f cs bound tbound m1 ->
+ forall chunk b ofs v m2,
+ f b <> None ->
+ store chunk m1 b ofs v = Some m2 ->
+ match_callstack f cs bound tbound m2.
+Proof.
+ induction 1; intros; econstructor; eauto.
+ eapply match_env_store_mapped; eauto.
+Qed.
+
+(** Preservation by assignment to a Csharpminor variable that is
+ translated to a Cminor local variable. The value being assigned
+ must be normalized with respect to the memory chunk of the variable,
+ in the following sense. *)
+
+Definition val_normalized (chunk: memory_chunk) (v: val) : Prop :=
+ exists v0, v = Val.load_result chunk v0.
+
+Lemma load_result_idem:
+ forall chunk v,
+ Val.load_result chunk (Val.load_result chunk v) =
+ Val.load_result chunk v.
+Proof.
+ destruct chunk; destruct v; simpl; auto.
+ rewrite Int.cast8_signed_idem; auto.
+ rewrite Int.cast8_unsigned_idem; auto.
+ rewrite Int.cast16_signed_idem; auto.
+ rewrite Int.cast16_unsigned_idem; auto.
+ rewrite Float.singleoffloat_idem; auto.
+Qed.
+
+Lemma load_result_normalized:
+ forall chunk v,
+ val_normalized chunk v -> Val.load_result chunk v = v.
+Proof.
+ intros chunk v [v0 EQ]. rewrite EQ. apply load_result_idem.
+Qed.
+
+Lemma match_env_store_local:
+ forall f cenv e m1 m2 te sp lo hi id b chunk v tv,
+ e!id = Some(b, LVscalar chunk) ->
+ val_inject f v tv ->
+ val_normalized chunk tv ->
+ store chunk m1 b 0 v = Some m2 ->
+ match_env f cenv e m1 te sp lo hi ->
+ match_env f cenv e m2 (PTree.set id tv te) sp lo hi.
+Proof.
+ intros. inversion H3. constructor; auto.
+ intros. generalize (me_vars0 id0); intro.
+ inversion H4.
+ (* var_local *)
+ case (peq id id0); intro.
+ (* the stored variable *)
+ subst id0.
+ change Csharpminor.local_variable with local_variable in H6.
+ rewrite H in H6. injection H6; clear H6; intros; subst b0 chunk0.
+ econstructor. eauto.
+ eapply load_store_same; eauto. auto.
+ rewrite PTree.gss. reflexivity.
+ replace tv with (Val.load_result chunk tv).
+ apply Mem.load_result_inject. constructor; auto.
+ apply load_result_normalized; auto.
+ (* a different variable *)
+ econstructor; eauto.
+ rewrite <- H7. eapply load_store_other; eauto.
+ rewrite PTree.gso; auto.
+ (* var_stack_scalar *)
+ econstructor; eauto.
+ (* var_stack_array *)
+ econstructor; eauto.
+ (* var_global *)
+ econstructor; eauto.
+Qed.
+
+Lemma match_env_store_above:
+ forall f cenv e m1 m2 te sp lo hi chunk b v,
+ store chunk m1 b 0 v = Some m2 ->
+ hi <= b ->
+ match_env f cenv e m1 te sp lo hi ->
+ match_env f cenv e m2 te sp lo hi.
+Proof.
+ intros. inversion H1; constructor; auto.
+ intros. generalize (me_vars0 id); intro.
+ inversion H2; econstructor; eauto.
+ rewrite <- H5. eapply load_store_other; eauto.
+ left. generalize (me_bounded0 _ _ _ H4). unfold block in *. omega.
+Qed.
+
+Lemma match_callstack_store_above:
+ forall f cs bound tbound m1,
+ match_callstack f cs bound tbound m1 ->
+ forall chunk b v m2,
+ store chunk m1 b 0 v = Some m2 ->
+ bound <= b ->
+ match_callstack f cs bound tbound m2.
+Proof.
+ induction 1; intros; econstructor; eauto.
+ eapply match_env_store_above with (b := b); eauto. omega.
+ eapply IHmatch_callstack; eauto.
+ inversion H1. omega.
+Qed.
+
+Lemma match_callstack_store_local:
+ forall f cenv e te sp lo hi cs bound tbound m1 m2 id b chunk v tv,
+ e!id = Some(b, LVscalar chunk) ->
+ val_inject f v tv ->
+ val_normalized chunk tv ->
+ store chunk m1 b 0 v = Some m2 ->
+ match_callstack f (mkframe cenv e te sp lo hi :: cs) bound tbound m1 ->
+ match_callstack f (mkframe cenv e (PTree.set id tv te) sp lo hi :: cs) bound tbound m2.
+Proof.
+ intros. inversion H3. constructor; auto.
+ eapply match_env_store_local; eauto.
+ eapply match_callstack_store_above; eauto.
+ inversion H17.
+ generalize (me_bounded0 _ _ _ H). omega.
+Qed.
+
+(** A variant of [match_callstack_store_local] where the Cminor environment
+ [te] already associates to [id] a value that matches the assigned value.
+ In this case, [match_callstack] is preserved even if no assignment
+ takes place on the Cminor side. *)
+
+Lemma match_env_extensional:
+ forall f cenv e m te1 sp lo hi,
+ match_env f cenv e m te1 sp lo hi ->
+ forall te2,
+ (forall id, te2!id = te1!id) ->
+ match_env f cenv e m te2 sp lo hi.
+Proof.
+ induction 1; intros; econstructor; eauto.
+ intros. generalize (me_vars0 id); intro.
+ inversion H0; econstructor; eauto.
+ rewrite H. auto.
+Qed.
+
+Lemma match_callstack_store_local_unchanged:
+ forall f cenv e te sp lo hi cs bound tbound m1 m2 id b chunk v tv,
+ e!id = Some(b, LVscalar chunk) ->
+ val_inject f v tv ->
+ val_normalized chunk tv ->
+ store chunk m1 b 0 v = Some m2 ->
+ te!id = Some tv ->
+ match_callstack f (mkframe cenv e te sp lo hi :: cs) bound tbound m1 ->
+ match_callstack f (mkframe cenv e te sp lo hi :: cs) bound tbound m2.
+Proof.
+ intros. inversion H4. constructor; auto.
+ apply match_env_extensional with (PTree.set id tv te).
+ eapply match_env_store_local; eauto.
+ intros. rewrite PTree.gsspec.
+ case (peq id0 id); intros. congruence. auto.
+ eapply match_callstack_store_above; eauto.
+ inversion H18.
+ generalize (me_bounded0 _ _ _ H). omega.
+Qed.
+
+(** Preservation of [match_callstack] by freeing all blocks allocated
+ for local variables at function entry (on the Csharpminor side). *)
+
+Lemma match_callstack_incr_bound:
+ forall f cs bound tbound m,
+ match_callstack f cs bound tbound m ->
+ forall bound' tbound',
+ bound <= bound' -> tbound <= tbound' ->
+ match_callstack f cs bound' tbound' m.
+Proof.
+ intros. inversion H; constructor; auto. omega. omega.
+Qed.
+
+Lemma load_freelist:
+ forall fbl chunk m b ofs,
+ (forall b', In b' fbl -> b' <> b) ->
+ load chunk (free_list m fbl) b ofs = load chunk m b ofs.
+Proof.
+ induction fbl; simpl; intros.
+ auto.
+ rewrite load_free. apply IHfbl.
+ intros. apply H. tauto.
+ apply sym_not_equal. apply H. tauto.
+Qed.
+
+Lemma match_env_freelist:
+ forall f cenv e m te sp lo hi fbl,
+ match_env f cenv e m te sp lo hi ->
+ (forall b, In b fbl -> hi <= b) ->
+ match_env f cenv e (free_list m fbl) te sp lo hi.
+Proof.
+ intros. inversion H. econstructor; eauto.
+ intros. generalize (me_vars0 id); intro.
+ inversion H1; econstructor; eauto.
+ rewrite <- H4. apply load_freelist.
+ intros. generalize (H0 _ H8); intro.
+ generalize (me_bounded0 _ _ _ H3). unfold block; omega.
+Qed.
+
+Lemma match_callstack_freelist_rec:
+ forall f cs bound tbound m,
+ match_callstack f cs bound tbound m ->
+ forall fbl,
+ (forall b, In b fbl -> bound <= b) ->
+ match_callstack f cs bound tbound (free_list m fbl).
+Proof.
+ induction 1; intros; constructor; auto.
+ eapply match_env_freelist; eauto.
+ intros. generalize (H3 _ H4). omega.
+ apply IHmatch_callstack. intros.
+ generalize (H3 _ H4). inversion H1. omega.
+Qed.
+
+Lemma match_callstack_freelist:
+ forall f cenv e te sp lo hi cs bound tbound m fbl,
+ (forall b, In b fbl -> lo <= b) ->
+ match_callstack f (mkframe cenv e te sp lo hi :: cs) bound tbound m ->
+ match_callstack f cs bound tbound (free_list m fbl).
+Proof.
+ intros. inversion H0. inversion H14.
+ apply match_callstack_incr_bound with lo sp.
+ apply match_callstack_freelist_rec. auto.
+ assumption.
+ omega. omega.
+Qed.
+
+(** Preservation of [match_callstack] when allocating a block for
+ a local variable on the Csharpminor side. *)
+
+Lemma load_from_alloc_is_undef:
+ forall m1 chunk m2 b,
+ alloc m1 0 (size_chunk chunk) = (m2, b) ->
+ load chunk m2 b 0 = Some Vundef.
+Proof.
+ intros.
+ assert (valid_block m2 b). eapply valid_new_block; eauto.
+ assert (low_bound m2 b <= 0).
+ generalize (low_bound_alloc _ _ b _ _ _ H). rewrite zeq_true. omega.
+ assert (0 + size_chunk chunk <= high_bound m2 b).
+ generalize (high_bound_alloc _ _ b _ _ _ H). rewrite zeq_true. omega.
+ elim (load_in_bounds _ _ _ _ H0 H1 H2). intros v LOAD.
+ assert (v = Vundef). eapply load_alloc_same; eauto.
+ congruence.
+Qed.
+
+Lemma match_env_alloc_same:
+ forall m1 lv m2 b info f1 cenv1 e1 te sp lo id data tv,
+ alloc m1 0 (sizeof lv) = (m2, b) ->
+ match info with
+ | Var_local chunk => data = None /\ lv = LVscalar chunk
+ | Var_stack_scalar chunk pos => data = Some(sp, pos) /\ lv = LVscalar chunk
+ | Var_stack_array pos => data = Some(sp, pos) /\ exists sz, lv = LVarray sz
+ | Var_global => False
+ end ->
+ match_env f1 cenv1 e1 m1 te sp lo m1.(nextblock) ->
+ te!id = Some tv ->
+ let f2 := extend_inject b data f1 in
+ let cenv2 := PMap.set id info cenv1 in
+ let e2 := PTree.set id (b, lv) e1 in
+ inject_incr f1 f2 ->
+ match_env f2 cenv2 e2 m2 te sp lo m2.(nextblock).
+Proof.
+ intros.
+ assert (b = m1.(nextblock)).
+ injection H; intros. auto.
+ assert (m2.(nextblock) = Zsucc m1.(nextblock)).
+ injection H; intros. rewrite <- H6; reflexivity.
+ inversion H1. constructor.
+ (* me_vars *)
+ intros. unfold cenv2. rewrite PMap.gsspec. case (peq id0 id); intro.
+ (* same var *)
+ subst id0. destruct info.
+ (* info = Var_local chunk *)
+ elim H0; intros.
+ apply match_var_local with b Vundef tv.
+ unfold e2; rewrite PTree.gss. congruence.
+ eapply load_from_alloc_is_undef; eauto.
+ rewrite H7 in H. unfold sizeof in H. eauto.
+ unfold f2, extend_inject, eq_block. rewrite zeq_true. auto.
+ auto.
+ constructor.
+ (* info = Var_stack_scalar chunk ofs *)
+ elim H0; intros.
+ apply match_var_stack_scalar with b.
+ unfold e2; rewrite PTree.gss. congruence.
+ eapply val_inject_ptr.
+ unfold f2, extend_inject, eq_block. rewrite zeq_true. eauto.
+ rewrite Int.add_commut. rewrite Int.add_zero. auto.
+ (* info = Var_stack_array z *)
+ elim H0; intros A [sz B].
+ apply match_var_stack_array with sz b.
+ unfold e2; rewrite PTree.gss. congruence.
+ eapply val_inject_ptr.
+ unfold f2, extend_inject, eq_block. rewrite zeq_true. eauto.
+ rewrite Int.add_commut. rewrite Int.add_zero. auto.
+ (* info = Var_global *)
+ contradiction.
+ (* other vars *)
+ generalize (me_vars0 id0); intros.
+ inversion H6; econstructor; eauto.
+ unfold e2; rewrite PTree.gso; auto.
+ unfold f2, extend_inject, eq_block; rewrite zeq_false; auto.
+ generalize (me_bounded0 _ _ _ H8). unfold block in *; omega.
+ unfold e2; rewrite PTree.gso; eauto.
+ unfold e2; rewrite PTree.gso; eauto.
+ unfold e2; rewrite PTree.gso; eauto.
+ (* lo <= hi *)
+ unfold block in *; omega.
+ (* me_bounded *)
+ intros until lv0. unfold e2; rewrite PTree.gsspec.
+ case (peq id0 id); intros.
+ subst id0. inversion H6. subst b0. unfold block in *; omega.
+ generalize (me_bounded0 _ _ _ H6). rewrite H5. omega.
+ (* me_inj *)
+ intros until lv2. unfold e2; repeat rewrite PTree.gsspec.
+ case (peq id1 id); case (peq id2 id); intros.
+ congruence.
+ inversion H6. subst b1. rewrite H4.
+ generalize (me_bounded0 _ _ _ H7). unfold block; omega.
+ inversion H7. subst b2. rewrite H4.
+ generalize (me_bounded0 _ _ _ H6). unfold block; omega.
+ eauto.
+ (* me_inv *)
+ intros until delta. unfold f2, extend_inject, eq_block.
+ case (zeq b0 b); intros.
+ subst b0. rewrite H4; rewrite H5. omega.
+ generalize (me_inv0 _ _ H6). rewrite H5. omega.
+ (* me_incr *)
+ intros until delta. unfold f2, extend_inject, eq_block.
+ case (zeq b0 b); intros.
+ subst b0. unfold block in *; omegaContradiction.
+ eauto.
+Qed.
+
+Lemma match_env_alloc_other:
+ forall f1 cenv e m1 m2 te sp lo hi chunk b data,
+ alloc m1 0 (sizeof chunk) = (m2, b) ->
+ match data with None => True | Some (b', delta') => sp < b' end ->
+ hi <= m1.(nextblock) ->
+ match_env f1 cenv e m1 te sp lo hi ->
+ let f2 := extend_inject b data f1 in
+ inject_incr f1 f2 ->
+ match_env f2 cenv e m2 te sp lo hi.
+Proof.
+ intros.
+ assert (b = m1.(nextblock)). injection H; auto.
+ rewrite <- H4 in H1.
+ inversion H2. constructor; auto.
+ (* me_vars *)
+ intros. generalize (me_vars0 id); intro.
+ inversion H5; econstructor; eauto.
+ unfold f2, extend_inject, eq_block. rewrite zeq_false. auto.
+ generalize (me_bounded0 _ _ _ H7). unfold block in *; omega.
+ (* me_bounded *)
+ intros until delta. unfold f2, extend_inject, eq_block.
+ case (zeq b0 b); intros. rewrite H5 in H0. omegaContradiction.
+ eauto.
+ (* me_incr *)
+ intros until delta. unfold f2, extend_inject, eq_block.
+ case (zeq b0 b); intros. subst b0. omegaContradiction.
+ eauto.
+Qed.
+
+Lemma match_callstack_alloc_other:
+ forall f1 cs bound tbound m1,
+ match_callstack f1 cs bound tbound m1 ->
+ forall lv m2 b data,
+ alloc m1 0 (sizeof lv) = (m2, b) ->
+ match data with None => True | Some (b', delta') => tbound <= b' end ->
+ bound <= m1.(nextblock) ->
+ let f2 := extend_inject b data f1 in
+ inject_incr f1 f2 ->
+ match_callstack f2 cs bound tbound m2.
+Proof.
+ induction 1; intros.
+ constructor.
+ inversion H. constructor.
+ intros. elim (mg_symbols0 _ _ H4); intros.
+ split; auto. elim (H3 b0); intros; congruence.
+ intros. generalize (mg_functions0 _ H4). elim (H3 b0); congruence.
+ constructor. auto. auto.
+ unfold f2; eapply match_env_alloc_other; eauto.
+ destruct data; auto. destruct p. omega. omega.
+ unfold f2; eapply IHmatch_callstack; eauto.
+ destruct data; auto. destruct p. omega.
+ inversion H1; omega.
+Qed.
+
+Lemma match_callstack_alloc_left:
+ forall m1 lv m2 b info f1 cenv1 e1 te sp lo id data cs tv tbound,
+ alloc m1 0 (sizeof lv) = (m2, b) ->
+ match info with
+ | Var_local chunk => data = None /\ lv = LVscalar chunk
+ | Var_stack_scalar chunk pos => data = Some(sp, pos) /\ lv = LVscalar chunk
+ | Var_stack_array pos => data = Some(sp, pos) /\ exists sz, lv = LVarray sz
+ | Var_global => False
+ end ->
+ match_callstack f1 (mkframe cenv1 e1 te sp lo m1.(nextblock) :: cs) m1.(nextblock) tbound m1 ->
+ te!id = Some tv ->
+ let f2 := extend_inject b data f1 in
+ let cenv2 := PMap.set id info cenv1 in
+ let e2 := PTree.set id (b, lv) e1 in
+ inject_incr f1 f2 ->
+ match_callstack f2 (mkframe cenv2 e2 te sp lo m2.(nextblock) :: cs) m2.(nextblock) tbound m2.
+Proof.
+ intros. inversion H1. constructor. omega. auto.
+ unfold f2, cenv2, e2. eapply match_env_alloc_same; eauto.
+ unfold f2; eapply match_callstack_alloc_other; eauto.
+ destruct info.
+ elim H0; intros. rewrite H19. auto.
+ elim H0; intros. rewrite H19. omega.
+ elim H0; intros. rewrite H19. omega.
+ contradiction.
+ inversion H17; omega.
+Qed.
+
+Lemma match_callstack_alloc_right:
+ forall f cs bound tm1 m tm2 lo hi b,
+ alloc tm1 lo hi = (tm2, b) ->
+ match_callstack f cs bound tm1.(nextblock) m ->
+ match_callstack f cs bound tm2.(nextblock) m.
+Proof.
+ intros. eapply match_callstack_incr_bound; eauto. omega.
+ injection H; intros. rewrite <- H2; simpl. omega.
+Qed.
+
+(** [match_callstack] implies [match_globalenvs]. *)
+
+Lemma match_callstack_match_globalenvs:
+ forall f cs bound tbound m,
+ match_callstack f cs bound tbound m ->
+ match_globalenvs f.
+Proof.
+ induction 1; eauto.
+Qed.
+
+(** * Correctness of Cminor construction functions *)
+
+Hint Resolve eval_negint eval_negfloat eval_absfloat eval_intoffloat
+ eval_floatofint eval_floatofintu eval_notint eval_notbool
+ eval_cast8signed eval_cast8unsigned eval_cast16signed
+ eval_cast16unsigned eval_singleoffloat eval_add eval_add_ptr
+ eval_add_ptr_2 eval_sub eval_sub_ptr_int eval_sub_ptr_ptr
+ eval_mul eval_divs eval_mods eval_divu eval_modu
+ eval_and eval_or eval_xor eval_shl eval_shr eval_shru
+ eval_addf eval_subf eval_mulf eval_divf
+ eval_cmp eval_cmp_null_r eval_cmp_null_l eval_cmp_ptr
+ eval_cmpu eval_cmpf: evalexpr.
+
+Remark val_inject_val_of_bool:
+ forall f b, val_inject f (Val.of_bool b) (Val.of_bool b).
+Proof.
+ intros; destruct b; unfold Val.of_bool, Vtrue, Vfalse; constructor.
+Qed.
+
+Ltac TrivialOp :=
+ match goal with
+ | [ |- exists x, _ /\ val_inject _ (Vint ?x) _ ] =>
+ exists (Vint x); split;
+ [eauto with evalexpr | constructor]
+ | [ |- exists x, _ /\ val_inject _ (Vfloat ?x) _ ] =>
+ exists (Vfloat x); split;
+ [eauto with evalexpr | constructor]
+ | [ |- exists x, _ /\ val_inject _ (Val.of_bool ?x) _ ] =>
+ exists (Val.of_bool x); split;
+ [eauto with evalexpr | apply val_inject_val_of_bool]
+ | _ => idtac
+ end.
+
+Remark eval_compare_null_inv:
+ forall c i v,
+ Csharpminor.eval_compare_null c i = Some v ->
+ i = Int.zero /\ (c = Ceq /\ v = Vfalse \/ c = Cne /\ v = Vtrue).
+Proof.
+ intros until v. unfold Csharpminor.eval_compare_null.
+ predSpec Int.eq Int.eq_spec i Int.zero.
+ case c; intro EQ; simplify_eq EQ; intro; subst v; tauto.
+ congruence.
+Qed.
+
+(** Correctness of [make_op]. The generated Cminor code evaluates
+ to a value that matches the result value of the Csharpminor operation,
+ provided arguments match pairwise ([val_list_inject f] hypothesis). *)
+
+Lemma make_op_correct:
+ forall al a op vl m2 v sp le te1 tm1 te2 tm2 tvl f,
+ make_op op al = Some a ->
+ Csharpminor.eval_operation op vl m2 = Some v ->
+ eval_exprlist tge (Vptr sp Int.zero) le te1 tm1 al te2 tm2 tvl ->
+ val_list_inject f vl tvl ->
+ mem_inject f m2 tm2 ->
+ exists tv,
+ eval_expr tge (Vptr sp Int.zero) le te1 tm1 a te2 tm2 tv
+ /\ val_inject f v tv.
+Proof.
+ intros.
+ destruct al as [ | a1 al];
+ [idtac | destruct al as [ | a2 al];
+ [idtac | destruct al as [ | a3 al]]];
+ simpl in H; try discriminate.
+ (* Constant operators *)
+ inversion H1. subst sp0 le0 e m te2 tm1 tvl.
+ inversion H2. subst vl.
+ destruct op; simplify_eq H; intro; subst a;
+ simpl in H0; injection H0; intro; subst v.
+ (* intconst *)
+ TrivialOp. econstructor. constructor. reflexivity.
+ (* floatconst *)
+ TrivialOp. econstructor. constructor. reflexivity.
+ (* Unary operators *)
+ inversion H1. subst sp0 le0 e m a0 bl e2 m0 tvl.
+ inversion H14. subst sp0 le0 e m e1 m1 vl0.
+ inversion H2. subst vl v' vl'. inversion H8. subst vl0.
+ destruct op; simplify_eq H; intro; subst a;
+ simpl in H0; destruct v1; simplify_eq H0; intro; subst v;
+ inversion H7; subst v0;
+ TrivialOp.
+ (* Binary operations *)
+ inversion H1. subst sp0 le0 e m a0 bl e2 m0 tvl.
+ inversion H14. subst sp0 le0 e m a0 bl e2 m3 vl0.
+ inversion H16. subst sp0 le0 e m e0 m0 vl1.
+ inversion H2. subst vl v' vl'.
+ inversion H8. subst vl0 v' vl'.
+ inversion H12. subst vl.
+ destruct op; simplify_eq H; intro; subst a;
+ simpl in H0; destruct v2; destruct v3; simplify_eq H0; intro; try subst v;
+ inversion H7; inversion H9; subst v0; subst v1;
+ TrivialOp.
+ (* add int ptr *)
+ exists (Vptr b2 (Int.add ofs2 i)); split.
+ eauto with evalexpr. apply val_inject_ptr with x. auto.
+ subst ofs2. repeat rewrite Int.add_assoc. decEq. apply Int.add_commut.
+ (* add ptr int *)
+ exists (Vptr b2 (Int.add ofs2 i0)); split.
+ eauto with evalexpr. apply val_inject_ptr with x. auto.
+ subst ofs2. repeat rewrite Int.add_assoc. decEq. apply Int.add_commut.
+ (* sub ptr int *)
+ exists (Vptr b2 (Int.sub ofs2 i0)); split.
+ eauto with evalexpr. apply val_inject_ptr with x. auto.
+ subst ofs2. apply Int.sub_add_l.
+ (* sub ptr ptr *)
+ destruct (eq_block b b0); simplify_eq H0; intro; subst v; subst b0.
+ assert (b4 = b2). congruence. subst b4.
+ exists (Vint (Int.sub ofs2 ofs3)); split. eauto with evalexpr.
+ subst ofs2 ofs3. replace x0 with x. rewrite Int.sub_shifted. constructor.
+ congruence.
+ (* divs *)
+ generalize (Int.eq_spec i0 Int.zero); destruct (Int.eq i0 Int.zero); intro;
+ simplify_eq H0; intro; subst v. TrivialOp.
+ (* divu *)
+ generalize (Int.eq_spec i0 Int.zero); destruct (Int.eq i0 Int.zero); intro;
+ simplify_eq H0; intro; subst v. TrivialOp.
+ (* mods *)
+ generalize (Int.eq_spec i0 Int.zero); destruct (Int.eq i0 Int.zero); intro;
+ simplify_eq H0; intro; subst v. TrivialOp.
+ (* modu *)
+ generalize (Int.eq_spec i0 Int.zero); destruct (Int.eq i0 Int.zero); intro;
+ simplify_eq H0; intro; subst v. TrivialOp.
+ (* shl *)
+ caseEq (Int.ltu i0 (Int.repr 32)); intro EQ; rewrite EQ in H0;
+ simplify_eq H0; intro; subst v. TrivialOp.
+ (* shr *)
+ caseEq (Int.ltu i0 (Int.repr 32)); intro EQ; rewrite EQ in H0;
+ simplify_eq H0; intro; subst v. TrivialOp.
+ (* shru *)
+ caseEq (Int.ltu i0 (Int.repr 32)); intro EQ; rewrite EQ in H0;
+ simplify_eq H0; intro; subst v. TrivialOp.
+ (* cmp int ptr *)
+ elim (eval_compare_null_inv _ _ _ H0); intros; subst i1 i.
+ exists v; split. eauto with evalexpr.
+ elim H18; intros [A B]; subst v; unfold Vtrue, Vfalse; constructor.
+ (* cmp ptr int *)
+ elim (eval_compare_null_inv _ _ _ H0); intros; subst i1 i0.
+ exists v; split. eauto with evalexpr.
+ elim H18; intros [A B]; subst v; unfold Vtrue, Vfalse; constructor.
+ (* cmp ptr ptr *)
+ caseEq (valid_pointer m2 b (Int.signed i) && valid_pointer m2 b0 (Int.signed i0));
+ intro EQ; rewrite EQ in H0; try discriminate.
+ destruct (eq_block b b0); simplify_eq H0; intro; subst v b0.
+ assert (b4 = b2); [congruence|subst b4].
+ assert (x0 = x); [congruence|subst x0].
+ elim (andb_prop _ _ EQ); intros.
+ exists (Val.of_bool (Int.cmp c ofs2 ofs3)); split.
+ eauto with evalexpr.
+ subst ofs2 ofs3. rewrite Int.translate_cmp.
+ apply val_inject_val_of_bool.
+ eapply valid_pointer_inject_no_overflow; eauto.
+ eapply valid_pointer_inject_no_overflow; eauto.
+Qed.
+
+(** Correctness of [make_cast]. Note that the resulting Cminor value is
+ normalized according to the given memory chunk. *)
+
+Lemma make_cast_correct:
+ forall f sp le te1 tm1 a te2 tm2 v chunk v' tv,
+ eval_expr tge (Vptr sp Int.zero) le te1 tm1 a te2 tm2 tv ->
+ cast chunk v = Some v' ->
+ val_inject f v tv ->
+ exists tv',
+ eval_expr tge (Vptr sp Int.zero) le
+ te1 tm1 (make_cast chunk a)
+ te2 tm2 tv'
+ /\ val_inject f v' tv'
+ /\ val_normalized chunk tv'.
+Proof.
+ intros. destruct chunk; destruct v; simplify_eq H0; intro; subst v'; simpl;
+ inversion H1; subst tv.
+
+ exists (Vint (Int.cast8signed i)).
+ split. apply eval_cast8signed; auto.
+ split. constructor. exists (Vint i); reflexivity.
+
+ exists (Vint (Int.cast8unsigned i)).
+ split. apply eval_cast8unsigned; auto.
+ split. constructor. exists (Vint i); reflexivity.
+
+ exists (Vint (Int.cast16signed i)).
+ split. apply eval_cast16signed; auto.
+ split. constructor. exists (Vint i); reflexivity.
+
+ exists (Vint (Int.cast16unsigned i)).
+ split. apply eval_cast16unsigned; auto.
+ split. constructor. exists (Vint i); reflexivity.
+
+ exists (Vint i).
+ split. auto. split. auto. exists (Vint i); reflexivity.
+
+ exists (Vptr b2 ofs2).
+ split. auto. split. auto. exists (Vptr b2 ofs2); reflexivity.
+
+ exists (Vfloat (Float.singleoffloat f0)).
+ split. apply eval_singleoffloat; auto.
+ split. constructor. exists (Vfloat f0); reflexivity.
+
+ exists (Vfloat f0).
+ split. auto. split. auto. exists (Vfloat f0); reflexivity.
+Qed.
+
+Lemma make_stackaddr_correct:
+ forall sp le te tm ofs,
+ eval_expr tge (Vptr sp Int.zero) le
+ te tm (make_stackaddr ofs)
+ te tm (Vptr sp (Int.repr ofs)).
+Proof.
+ intros; unfold make_stackaddr.
+ eapply eval_Eop. econstructor. simpl. decEq. decEq.
+ rewrite Int.add_commut. apply Int.add_zero.
+Qed.
+
+(** Correctness of [make_load] and [make_store]. *)
+
+Lemma make_load_correct:
+ forall sp le te1 tm1 a te2 tm2 va chunk v,
+ eval_expr tge (Vptr sp Int.zero) le te1 tm1 a te2 tm2 va ->
+ Mem.loadv chunk tm2 va = Some v ->
+ eval_expr tge (Vptr sp Int.zero) le
+ te1 tm1 (make_load chunk a)
+ te2 tm2 v.
+Proof.
+ intros; unfold make_load.
+ eapply eval_load; eauto.
+Qed.
+
+Lemma val_content_inject_cast:
+ forall f chunk v1 v2 tv1,
+ cast chunk v1 = Some v2 ->
+ val_inject f v1 tv1 ->
+ val_content_inject f (mem_chunk chunk) v2 tv1.
+Proof.
+ intros. destruct chunk; destruct v1; simplify_eq H; intro; subst v2;
+ inversion H0; simpl.
+ apply val_content_inject_8. apply Int.cast8_unsigned_signed.
+ apply val_content_inject_8. apply Int.cast8_unsigned_idem.
+ apply val_content_inject_16. apply Int.cast16_unsigned_signed.
+ apply val_content_inject_16. apply Int.cast16_unsigned_idem.
+ constructor; constructor.
+ constructor; econstructor; eauto.
+ apply val_content_inject_32. apply Float.singleoffloat_idem.
+ constructor; constructor.
+Qed.
+
+Lemma make_store_correct:
+ forall f sp le te1 tm1 addr te2 tm2 tvaddr rhs te3 tm3 tvrhs
+ chunk vrhs v m3 vaddr m4,
+ eval_expr tge (Vptr sp Int.zero) le
+ te1 tm1 addr te2 tm2 tvaddr ->
+ eval_expr tge (Vptr sp Int.zero) le
+ te2 tm2 rhs te3 tm3 tvrhs ->
+ cast chunk vrhs = Some v ->
+ Mem.storev chunk m3 vaddr v = Some m4 ->
+ mem_inject f m3 tm3 ->
+ val_inject f vaddr tvaddr ->
+ val_inject f vrhs tvrhs ->
+ exists tm4, exists tv,
+ eval_expr tge (Vptr sp Int.zero) le
+ te1 tm1 (make_store chunk addr rhs)
+ te3 tm4 tv
+ /\ mem_inject f m4 tm4
+ /\ val_inject f v tv
+ /\ nextblock tm4 = nextblock tm3.
+Proof.
+ intros. unfold make_store.
+ assert (val_content_inject f (mem_chunk chunk) v tvrhs).
+ eapply val_content_inject_cast; eauto.
+ elim (storev_mapped_inject_1 _ _ _ _ _ _ _ _ _ H3 H2 H4 H6).
+ intros tm4 [STORE MEMINJ].
+ generalize (eval_store _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ H H0 STORE).
+ intro EVALSTORE.
+ elim (make_cast_correct _ _ _ _ _ _ _ _ _ _ _ _ EVALSTORE H1 H5).
+ intros tv [EVALCAST [VALINJ VALNORM]].
+ exists tm4; exists tv. intuition.
+ unfold storev in STORE; destruct tvaddr; try discriminate.
+ generalize (store_inv _ _ _ _ _ _ STORE). simpl. tauto.
+Qed.
+
+(** Correctness of the variable accessors [var_get], [var_set]
+ and [var_addr]. *)
+
+Lemma var_get_correct:
+ forall cenv id a f e te sp lo hi m cs tm b chunk v le,
+ var_get cenv id = Some a ->
+ match_callstack f (mkframe cenv e te sp lo hi :: cs) m.(nextblock) tm.(nextblock) m ->
+ mem_inject f m tm ->
+ e!id = Some(b, LVscalar chunk) ->
+ load chunk m b 0 = Some v ->
+ exists tv,
+ eval_expr tge (Vptr sp Int.zero) le te tm a te tm tv /\
+ val_inject f v tv.
+Proof.
+ unfold var_get; intros.
+ assert (match_var f id e m te sp cenv!!id).
+ inversion H0. inversion H17. auto.
+ caseEq (cenv!!id); intros; rewrite H5 in H; simplify_eq H; clear H; intros; subst a.
+ (* var_local *)
+ rewrite H5 in H4. inversion H4.
+ exists v'; split.
+ apply eval_Evar. auto.
+ replace v with v0. auto. congruence.
+ (* var_stack_scalar *)
+ rewrite H5 in H4. inversion H4.
+ inversion H8. subst b1 b2 ofs1 ofs2.
+ assert (b0 = b). congruence. subst b0.
+ assert (m0 = chunk). congruence. subst m0.
+ assert (loadv chunk m (Vptr b Int.zero) = Some v). assumption.
+ generalize (loadv_inject _ _ _ _ _ _ _ H1 H H8).
+ subst chunk0.
+ intros [tv [LOAD INJ]].
+ exists tv; split.
+ eapply make_load_correct; eauto. eapply make_stackaddr_correct; eauto.
+ auto.
+Qed.
+
+Lemma var_addr_local_correct:
+ forall cenv id a f e te sp lo hi m cs tm b lv le,
+ var_addr cenv id = Some a ->
+ match_callstack f (mkframe cenv e te sp lo hi :: cs) m.(nextblock) tm.(nextblock) m ->
+ e!id = Some(b, lv) ->
+ exists tv,
+ eval_expr tge (Vptr sp Int.zero) le te tm a te tm tv /\
+ val_inject f (Vptr b Int.zero) tv.
+Proof.
+ unfold var_addr; intros.
+ assert (match_var f id e m te sp cenv!!id).
+ inversion H0. inversion H15. auto.
+ caseEq (cenv!!id); intros; rewrite H3 in H; simplify_eq H; clear H; intros; subst a;
+ rewrite H3 in H2; inversion H2.
+ (* var_stack_scalar *)
+ exists (Vptr sp (Int.repr z)); split.
+ eapply make_stackaddr_correct.
+ replace b with b0. auto. congruence.
+ (* var_stack_array *)
+ exists (Vptr sp (Int.repr z)); split.
+ eapply make_stackaddr_correct.
+ replace b with b0. auto. congruence.
+ (* var_global *)
+ congruence.
+Qed.
+
+Lemma var_addr_global_correct:
+ forall cenv id a f e te sp lo hi m cs tm b le,
+ var_addr cenv id = Some a ->
+ match_callstack f (mkframe cenv e te sp lo hi :: cs) m.(nextblock) tm.(nextblock) m ->
+ e!id = None ->
+ Genv.find_symbol ge id = Some b ->
+ exists tv,
+ eval_expr tge (Vptr sp Int.zero) le te tm a te tm tv /\
+ val_inject f (Vptr b Int.zero) tv.
+Proof.
+ unfold var_addr; intros.
+ assert (match_var f id e m te sp cenv!!id).
+ inversion H0. inversion H16. auto.
+ destruct (cenv!!id); inversion H3; try congruence.
+ injection H; intro; subst a.
+ (* var_global *)
+ generalize (match_callstack_match_globalenvs _ _ _ _ _ H0); intro.
+ inversion H5.
+ elim (mg_symbols0 _ _ H2); intros.
+ exists (Vptr b Int.zero); split.
+ eapply eval_Eop. econstructor. simpl. rewrite H7. auto.
+ econstructor. eauto. reflexivity.
+Qed.
+
+Lemma var_set_correct:
+ forall cenv id rhs a f e te2 sp lo hi m2 cs tm2 le te1 tm1 vrhs b chunk v1 v2 m3,
+ var_set cenv id rhs = Some a ->
+ match_callstack f (mkframe cenv e te2 sp lo hi :: cs) m2.(nextblock) tm2.(nextblock) m2 ->
+ eval_expr tge (Vptr sp Int.zero) le te1 tm1 rhs te2 tm2 vrhs ->
+ val_inject f v1 vrhs ->
+ mem_inject f m2 tm2 ->
+ e!id = Some(b, LVscalar chunk) ->
+ cast chunk v1 = Some v2 ->
+ store chunk m2 b 0 v2 = Some m3 ->
+ exists te3, exists tm3, exists tv,
+ eval_expr tge (Vptr sp Int.zero) le te1 tm1 a te3 tm3 tv /\
+ val_inject f v2 tv /\
+ mem_inject f m3 tm3 /\
+ match_callstack f (mkframe cenv e te3 sp lo hi :: cs) m3.(nextblock) tm3.(nextblock) m3.
+Proof.
+ unfold var_set; intros.
+ assert (NEXTBLOCK: nextblock m3 = nextblock m2).
+ generalize (store_inv _ _ _ _ _ _ H6). simpl. tauto.
+ inversion H0. subst f0 cenv0 e0 te sp0 lo0 hi0 cs0 bound tbound m.
+ inversion H20.
+ caseEq (cenv!!id); intros; rewrite H7 in H; simplify_eq H; clear H; intros; subst a.
+ (* var_local *)
+ generalize (me_vars0 id); intro. rewrite H7 in H. inversion H.
+ subst chunk0.
+ assert (b0 = b). congruence. subst b0.
+ assert (m = chunk). congruence. subst m.
+ elim (make_cast_correct _ _ _ _ _ _ _ _ _ _ _ _ H1 H5 H2).
+ intros tv [EVAL [INJ NORM]].
+ exists (PTree.set id tv te2); exists tm2; exists tv.
+ split. eapply eval_Eassign. auto.
+ split. auto.
+ split. eapply store_unmapped_inject; eauto.
+ rewrite NEXTBLOCK. eapply match_callstack_store_local; eauto.
+ (* var_stack_scalar *)
+ generalize (me_vars0 id); intro. rewrite H7 in H. inversion H.
+ subst chunk0 z.
+ assert (b0 = b). congruence. subst b0.
+ assert (m = chunk). congruence. subst m.
+ assert (storev chunk m2 (Vptr b Int.zero) v2 = Some m3). assumption.
+ generalize (make_stackaddr_correct sp le te1 tm1 ofs). intro EVALSTACKADDR.
+ generalize (make_store_correct _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
+ EVALSTACKADDR H1 H5 H8 H3 H11 H2).
+ intros [tm3 [tv [EVAL [MEMINJ [VALINJ TNEXTBLOCK]]]]].
+ exists te2; exists tm3; exists tv.
+ split. auto. split. auto. split. auto.
+ rewrite NEXTBLOCK; rewrite TNEXTBLOCK.
+ eapply match_callstack_mapped; eauto.
+ inversion H11; congruence.
+Qed.
+
+(** * Correctness of stack allocation of local variables *)
+
+(** This section shows the correctness of the translation of Csharpminor
+ local variables, either as Cminor local variables or as sub-blocks
+ of the Cminor stack data. This is the most difficult part of the proof. *)
+
+Remark assign_variables_incr:
+ forall atk vars cenv sz cenv' sz',
+ assign_variables atk vars (cenv, sz) = (cenv', sz') -> sz <= sz'.
+Proof.
+ induction vars; intros until sz'; simpl.
+ intro. replace sz' with sz. omega. congruence.
+ destruct a. destruct l. case (Identset.mem i atk); intros.
+ generalize (IHvars _ _ _ _ H).
+ generalize (size_chunk_pos m). intro.
+ generalize (align_le sz (size_chunk m) H0). omega.
+ eauto.
+ intro. generalize (IHvars _ _ _ _ H).
+ assert (8 > 0). omega. generalize (align_le sz 8 H0).
+ assert (0 <= Zmax 0 z). apply Zmax_bound_l. omega.
+ omega.
+Qed.
+
+Lemma match_callstack_alloc_variables_rec:
+ forall tm sp cenv' sz' te lo cs atk,
+ valid_block tm sp ->
+ low_bound tm sp = 0 ->
+ high_bound tm sp = sz' ->
+ sz' <= Int.max_signed ->
+ forall e m vars e' m' lb,
+ alloc_variables e m vars e' m' lb ->
+ forall f cenv sz,
+ assign_variables atk vars (cenv, sz) = (cenv', sz') ->
+ match_callstack f (mkframe cenv e te sp lo m.(nextblock) :: cs)
+ m.(nextblock) tm.(nextblock) m ->
+ mem_inject f m tm ->
+ 0 <= sz ->
+ (forall b delta, f b = Some(sp, delta) -> high_bound m b + delta <= sz) ->
+ (forall id lv, In (id, lv) vars -> te!id <> None) ->
+ exists f',
+ inject_incr f f'
+ /\ mem_inject f' m' tm
+ /\ match_callstack f' (mkframe cenv' e' te sp lo m'.(nextblock) :: cs)
+ m'.(nextblock) tm.(nextblock) m'.
+Proof.
+ intros until atk. intros VB LB HB NOOV.
+ induction 1.
+ (* base case *)
+ intros. simpl in H. inversion H; subst cenv sz.
+ exists f. split. apply inject_incr_refl. split. auto. auto.
+ (* inductive case *)
+ intros until sz.
+ change (assign_variables atk ((id, lv) :: vars) (cenv, sz))
+ with (assign_variables atk vars (assign_variable atk (id, lv) (cenv, sz))).
+ caseEq (assign_variable atk (id, lv) (cenv, sz)).
+ intros cenv1 sz1 ASV1 ASVS MATCH MINJ SZPOS BOUND DEFINED.
+ assert (DEFINED1: forall id0 lv0, In (id0, lv0) vars -> te!id0 <> None).
+ intros. eapply DEFINED. simpl. right. eauto.
+ assert (exists tv, te!id = Some tv).
+ assert (te!id <> None). eapply DEFINED. simpl; left; auto.
+ destruct (te!id). exists v; auto. congruence.
+ elim H1; intros tv TEID; clear H1.
+ generalize ASV1. unfold assign_variable.
+ caseEq lv.
+ (* 1. lv = LVscalar chunk *)
+ intros chunk LV. case (Identset.mem id atk).
+ (* 1.1 info = Var_stack_scalar chunk ... *)
+ set (ofs := align sz (size_chunk chunk)).
+ intro EQ; injection EQ; intros; clear EQ.
+ set (f1 := extend_inject b1 (Some (sp, ofs)) f).
+ generalize (size_chunk_pos chunk); intro SIZEPOS.
+ generalize (align_le sz (size_chunk chunk) SIZEPOS). fold ofs. intro SZOFS.
+ assert (mem_inject f1 m1 tm /\ inject_incr f f1).
+ assert (Int.min_signed < 0). compute; auto.
+ generalize (assign_variables_incr _ _ _ _ _ _ ASVS). intro.
+ unfold f1; eapply alloc_mapped_inject; eauto.
+ omega. omega. omega. omega. unfold sizeof; rewrite LV. omega.
+ intros. left. generalize (BOUND _ _ H5). omega.
+ elim H3; intros MINJ1 INCR1; clear H3.
+ assert (MATCH1: match_callstack f1
+ (mkframe cenv1 (PTree.set id (b1, lv) e) te sp lo (nextblock m1) :: cs)
+ (nextblock m1) (nextblock tm) m1).
+ unfold f1; rewrite <- H2; eapply match_callstack_alloc_left; eauto.
+ assert (SZ1POS: 0 <= sz1). rewrite <- H1. omega.
+ assert (BOUND1: forall b delta, f1 b = Some(sp, delta) ->
+ high_bound m1 b + delta <= sz1).
+ intros until delta; unfold f1, extend_inject, eq_block.
+ rewrite (high_bound_alloc _ _ b _ _ _ H).
+ case (zeq b b1); intros.
+ inversion H3. unfold sizeof; rewrite LV. omega.
+ generalize (BOUND _ _ H3). omega.
+ generalize (IHalloc_variables _ _ _ ASVS MATCH1 MINJ1 SZ1POS BOUND1 DEFINED1).
+ intros [f' [INCR2 [MINJ2 MATCH2]]].
+ exists f'; intuition. eapply inject_incr_trans; eauto.
+ (* 1.2 info = Var_local chunk *)
+ intro EQ; injection EQ; intros; clear EQ. subst sz1.
+ generalize (alloc_unmapped_inject _ _ _ _ _ _ _ MINJ H).
+ set (f1 := extend_inject b1 None f). intros [MINJ1 INCR1].
+ assert (MATCH1: match_callstack f1
+ (mkframe cenv1 (PTree.set id (b1, lv) e) te sp lo (nextblock m1) :: cs)
+ (nextblock m1) (nextblock tm) m1).
+ unfold f1; rewrite <- H2; eapply match_callstack_alloc_left; eauto.
+ assert (BOUND1: forall b delta, f1 b = Some(sp, delta) ->
+ high_bound m1 b + delta <= sz).
+ intros until delta; unfold f1, extend_inject, eq_block.
+ rewrite (high_bound_alloc _ _ b _ _ _ H).
+ case (zeq b b1); intros. discriminate.
+ eapply BOUND; eauto.
+ generalize (IHalloc_variables _ _ _ ASVS MATCH1 MINJ1 SZPOS BOUND1 DEFINED1).
+ intros [f' [INCR2 [MINJ2 MATCH2]]].
+ exists f'; intuition. eapply inject_incr_trans; eauto.
+ (* 2. lv = LVarray dim, info = Var_stack_array *)
+ intros dim LV EQ. injection EQ; clear EQ; intros.
+ assert (0 <= Zmax 0 dim). apply Zmax1.
+ assert (8 > 0). omega.
+ generalize (align_le sz 8 H4). intro.
+ set (ofs := align sz 8) in *.
+ set (f1 := extend_inject b1 (Some (sp, ofs)) f).
+ assert (mem_inject f1 m1 tm /\ inject_incr f f1).
+ assert (Int.min_signed < 0). compute; auto.
+ generalize (assign_variables_incr _ _ _ _ _ _ ASVS). intro.
+ unfold f1; eapply alloc_mapped_inject; eauto.
+ omega. omega. omega. omega. unfold sizeof; rewrite LV. omega.
+ intros. left. generalize (BOUND _ _ H8). omega.
+ elim H6; intros MINJ1 INCR1; clear H6.
+ assert (MATCH1: match_callstack f1
+ (mkframe cenv1 (PTree.set id (b1, lv) e) te sp lo (nextblock m1) :: cs)
+ (nextblock m1) (nextblock tm) m1).
+ unfold f1; rewrite <- H2; eapply match_callstack_alloc_left; eauto.
+ assert (SZ1POS: 0 <= sz1). rewrite <- H1. omega.
+ assert (BOUND1: forall b delta, f1 b = Some(sp, delta) ->
+ high_bound m1 b + delta <= sz1).
+ intros until delta; unfold f1, extend_inject, eq_block.
+ rewrite (high_bound_alloc _ _ b _ _ _ H).
+ case (zeq b b1); intros.
+ inversion H6. unfold sizeof; rewrite LV. omega.
+ generalize (BOUND _ _ H6). omega.
+ generalize (IHalloc_variables _ _ _ ASVS MATCH1 MINJ1 SZ1POS BOUND1 DEFINED1).
+ intros [f' [INCR2 [MINJ2 MATCH2]]].
+ exists f'; intuition. eapply inject_incr_trans; eauto.
+Qed.
+
+Lemma set_params_defined:
+ forall params args id,
+ In id params -> (set_params args params)!id <> None.
+Proof.
+ induction params; simpl; intros.
+ elim H.
+ destruct args.
+ rewrite PTree.gsspec. case (peq id a); intro.
+ congruence. eapply IHparams. elim H; intro. congruence. auto.
+ rewrite PTree.gsspec. case (peq id a); intro.
+ congruence. eapply IHparams. elim H; intro. congruence. auto.
+Qed.
+
+Lemma set_locals_defined:
+ forall e vars id,
+ In id vars \/ e!id <> None -> (set_locals vars e)!id <> None.
+Proof.
+ induction vars; simpl; intros.
+ tauto.
+ rewrite PTree.gsspec. case (peq id a); intro.
+ congruence.
+ apply IHvars. assert (a <> id). congruence. tauto.
+Qed.
+
+Lemma set_locals_params_defined:
+ forall args params vars id,
+ In id (params ++ vars) ->
+ (set_locals vars (set_params args params))!id <> None.
+Proof.
+ intros. apply set_locals_defined.
+ elim (in_app_or _ _ _ H); intro.
+ right. apply set_params_defined; auto.
+ left; auto.
+Qed.
+
+(** Preservation of [match_callstack] by simultaneous allocation
+ of Csharpminor local variables and of the Cminor stack data block. *)
+
+Lemma match_callstack_alloc_variables:
+ forall fn cenv sz m e m' lb tm tm' sp f cs targs,
+ build_compilenv fn = (cenv, sz) ->
+ sz <= Int.max_signed ->
+ alloc_variables Csharpminor.empty_env m (fn_variables fn) e m' lb ->
+ Mem.alloc tm 0 sz = (tm', sp) ->
+ match_callstack f cs m.(nextblock) tm.(nextblock) m ->
+ mem_inject f m tm ->
+ let tparams := List.map (@fst ident memory_chunk) fn.(Csharpminor.fn_params) in
+ let tvars := List.map (@fst ident local_variable) fn.(Csharpminor.fn_vars) in
+ let te := set_locals tvars (set_params targs tparams) in
+ exists f',
+ inject_incr f f'
+ /\ mem_inject f' m' tm'
+ /\ match_callstack f' (mkframe cenv e te sp m.(nextblock) m'.(nextblock) :: cs)
+ m'.(nextblock) tm'.(nextblock) m'.
+Proof.
+ intros.
+ assert (SP: sp = nextblock tm). injection H2; auto.
+ unfold build_compilenv in H.
+ eapply match_callstack_alloc_variables_rec with (sz' := sz); eauto.
+ eapply valid_new_block; eauto.
+ rewrite (low_bound_alloc _ _ sp _ _ _ H2). apply zeq_true.
+ rewrite (high_bound_alloc _ _ sp _ _ _ H2). apply zeq_true.
+ (* match_callstack *)
+ constructor. omega. change (valid_block tm' sp). eapply valid_new_block; eauto.
+ constructor.
+ (* me_vars *)
+ intros. rewrite PMap.gi. constructor.
+ unfold Csharpminor.empty_env. apply PTree.gempty.
+ (* me_low_high *)
+ omega.
+ (* me_bounded *)
+ intros until lv. unfold Csharpminor.empty_env. rewrite PTree.gempty. congruence.
+ (* me_inj *)
+ intros until lv2. unfold Csharpminor.empty_env; rewrite PTree.gempty; congruence.
+ (* me_inv *)
+ intros. elim (mi_mappedblocks _ _ _ H4 _ _ _ H5); intros.
+ elim (fresh_block_alloc _ _ _ _ _ H2 H6).
+ (* me_incr *)
+ intros. elim (mi_mappedblocks _ _ _ H4 _ _ _ H5); intros.
+ rewrite SP; auto.
+ rewrite SP; auto.
+ eapply alloc_right_inject; eauto.
+ omega.
+ intros. elim (mi_mappedblocks _ _ _ H4 _ _ _ H5); intros.
+ unfold block in SP; omegaContradiction.
+ (* defined *)
+ intros. unfold te. apply set_locals_params_defined.
+ unfold tparams, tvars. unfold fn_variables in H5.
+ change Csharpminor.fn_params with Csharpminor.fn_params in H5.
+ change Csharpminor.fn_vars with Csharpminor.fn_vars in H5.
+ elim (in_app_or _ _ _ H5); intros.
+ elim (list_in_map_inv _ _ _ H6). intros x [A B].
+ apply in_or_app; left. inversion A. apply List.in_map. auto.
+ apply in_or_app; right.
+ change id with (fst (id, lv)). apply List.in_map; auto.
+Qed.
+
+(** Characterization of the range of addresses for the blocks allocated
+ to hold Csharpminor local variables. *)
+
+Lemma alloc_variables_nextblock_incr:
+ forall e1 m1 vars e2 m2 lb,
+ alloc_variables e1 m1 vars e2 m2 lb ->
+ nextblock m1 <= nextblock m2.
+Proof.
+ induction 1; intros.
+ omega.
+ inversion H; subst m1; simpl in IHalloc_variables. omega.
+Qed.
+
+Lemma alloc_variables_list_block:
+ forall e1 m1 vars e2 m2 lb,
+ alloc_variables e1 m1 vars e2 m2 lb ->
+ forall b, m1.(nextblock) <= b < m2.(nextblock) <-> In b lb.
+Proof.
+ induction 1; intros.
+ simpl; split; intro. omega. contradiction.
+ elim (IHalloc_variables b); intros A B.
+ assert (nextblock m = b1). injection H; intros. auto.
+ assert (nextblock m1 = Zsucc (nextblock m)).
+ injection H; intros; subst m1; reflexivity.
+ simpl; split; intro.
+ assert (nextblock m = b \/ nextblock m1 <= b < nextblock m2).
+ unfold block; rewrite H2; omega.
+ elim H4; intro. left; congruence. right; auto.
+ elim H3; intro. subst b b1.
+ generalize (alloc_variables_nextblock_incr _ _ _ _ _ _ H0).
+ rewrite H2. omega.
+ generalize (B H4). rewrite H2. omega.
+Qed.
+
+(** Correctness of the code generated by [store_parameters]
+ to store in memory the values of parameters that are stack-allocated. *)
+
+Inductive vars_vals_match:
+ meminj -> list (ident * memory_chunk) -> list val -> env -> Prop :=
+ | vars_vals_nil:
+ forall f te,
+ vars_vals_match f nil nil te
+ | vars_vals_cons:
+ forall f te id chunk vars v vals tv,
+ te!id = Some tv ->
+ val_inject f v tv ->
+ vars_vals_match f vars vals te ->
+ vars_vals_match f ((id, chunk) :: vars) (v :: vals) te.
+
+Lemma vars_vals_match_extensional:
+ forall f vars vals te,
+ vars_vals_match f vars vals te ->
+ forall te',
+ (forall id lv, In (id, lv) vars -> te'!id = te!id) ->
+ vars_vals_match f vars vals te'.
+Proof.
+ induction 1; intros.
+ constructor.
+ econstructor; eauto. rewrite <- H. eapply H2. left. reflexivity.
+ apply IHvars_vals_match. intros. eapply H2; eauto. right. eauto.
+Qed.
+
+Lemma store_parameters_correct:
+ forall e m1 params vl m2,
+ bind_parameters e m1 params vl m2 ->
+ forall f te1 cenv sp lo hi cs tm1,
+ vars_vals_match f params vl te1 ->
+ list_norepet (List.map (@fst ident memory_chunk) params) ->
+ mem_inject f m1 tm1 ->
+ match_callstack f (mkframe cenv e te1 sp lo hi :: cs) m1.(nextblock) tm1.(nextblock) m1 ->
+ exists te2, exists tm2,
+ exec_stmtlist tge (Vptr sp Int.zero)
+ te1 tm1 (store_parameters cenv params)
+ te2 tm2 Out_normal
+ /\ mem_inject f m2 tm2
+ /\ match_callstack f (mkframe cenv e te2 sp lo hi :: cs) m2.(nextblock) tm2.(nextblock) m2.
+Proof.
+ induction 1.
+ (* base case *)
+ intros; simpl. exists te1; exists tm1. split. constructor. tauto.
+ (* inductive case *)
+ intros until tm1. intros VVM NOREPET MINJ MATCH. simpl.
+ inversion VVM. subst f0 id0 chunk0 vars v vals te.
+ inversion MATCH. subst f0 cenv0 e0 te sp0 lo0 hi0 cs0 bound tbound m0.
+ inversion H19.
+ inversion NOREPET. subst hd tl.
+ assert (NEXT: nextblock m1 = nextblock m).
+ generalize (store_inv _ _ _ _ _ _ H1). simpl; tauto.
+ generalize (me_vars0 id); intro MV. inversion MV.
+ (* cenv!!id = Var_local chunk *)
+ change Csharpminor.local_variable with local_variable in H4.
+ rewrite H in H4. injection H4; clear H4; intros; subst b0 chunk0.
+ assert (v' = tv). congruence. subst v'.
+ assert (eval_expr tge (Vptr sp Int.zero) nil te1 tm1 (Evar id) te1 tm1 tv).
+ constructor. auto.
+ generalize (make_cast_correct _ _ _ _ _ _ _ _ _ _ _ _
+ H4 H0 H11).
+ intros [tv' [EVAL1 [VINJ1 VNORM]]].
+ set (te2 := PTree.set id tv' te1).
+ assert (VVM2: vars_vals_match f params vl te2).
+ apply vars_vals_match_extensional with te1; auto.
+ intros. unfold te2; apply PTree.gso. red; intro; subst id0.
+ elim H5. change id with (fst (id, lv)). apply List.in_map; auto.
+ generalize (store_unmapped_inject _ _ _ _ _ _ _ _ MINJ H1 H8); intro MINJ2.
+ generalize (match_callstack_store_local _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
+ H VINJ1 VNORM H1 MATCH);
+ fold te2; rewrite <- NEXT; intro MATCH2.
+ destruct (IHbind_parameters _ _ _ _ _ _ _ _ VVM2 H6 MINJ2 MATCH2)
+ as [te3 [tm3 [EXEC3 [MINJ3 MATCH3]]]].
+ exists te3; exists tm3.
+ (* execution *)
+ split. apply exec_Scons_continue with te2 tm1.
+ econstructor. unfold te2. constructor. assumption.
+ assumption.
+ (* meminj & match_callstack *)
+ tauto.
+
+ (* cenv!!id = Var_stack_scalar *)
+ change Csharpminor.local_variable with local_variable in H4.
+ rewrite H in H4. injection H4; clear H4; intros; subst b0 chunk0.
+ pose (EVAL1 := make_stackaddr_correct sp nil te1 tm1 ofs).
+ assert (EVAL2: eval_expr tge (Vptr sp Int.zero) nil te1 tm1 (Evar id) te1 tm1 tv).
+ constructor. auto.
+ destruct (make_store_correct _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
+ (Vptr b Int.zero) _
+ EVAL1 EVAL2 H0 H1 MINJ H7 H11)
+ as [tm2 [tv' [EVAL3 [MINJ2 [VINJ NEXT1]]]]].
+ assert (f b <> None). inversion H7. congruence.
+ generalize (match_callstack_mapped _ _ _ _ _ MATCH _ _ _ _ _ H4 H1).
+ rewrite <- NEXT; rewrite <- NEXT1; intro MATCH2.
+ destruct (IHbind_parameters _ _ _ _ _ _ _ _
+ H12 H6 MINJ2 MATCH2) as [te3 [tm3 [EVAL4 [MINJ3 MATCH3]]]].
+ exists te3; exists tm3.
+ (* execution *)
+ split. apply exec_Scons_continue with te1 tm2.
+ econstructor. eauto.
+ assumption.
+ (* meminj & match_callstack *)
+ tauto.
+
+ (* Impossible cases on cenv!!id *)
+ change Csharpminor.local_variable with local_variable in H4.
+ congruence.
+ change Csharpminor.local_variable with local_variable in H4.
+ congruence.
+Qed.
+
+Lemma vars_vals_match_holds_1:
+ forall f params args targs,
+ list_norepet (List.map (@fst ident memory_chunk) params) ->
+ List.length params = List.length args ->
+ val_list_inject f args targs ->
+ vars_vals_match f params args
+ (set_params targs (List.map (@fst ident memory_chunk) params)).
+Proof.
+ induction params; destruct args; simpl; intros; try discriminate.
+ constructor.
+ inversion H1. subst v0 vl targs.
+ inversion H. subst hd tl.
+ destruct a as [id chunk]. econstructor.
+ simpl. rewrite PTree.gss. reflexivity.
+ auto.
+ apply vars_vals_match_extensional
+ with (set_params vl' (map (@fst ident memory_chunk) params)).
+ eapply IHparams; eauto.
+ intros. simpl. apply PTree.gso. red; intro; subst id0.
+ elim H5. change (fst (id, chunk)) with (fst (id, lv)).
+ apply List.in_map; auto.
+Qed.
+
+Lemma vars_vals_match_holds:
+ forall f params args targs,
+ List.length params = List.length args ->
+ val_list_inject f args targs ->
+ forall vars,
+ list_norepet (List.map (@fst ident local_variable) vars
+ ++ List.map (@fst ident memory_chunk) params) ->
+ vars_vals_match f params args
+ (set_locals (List.map (@fst ident local_variable) vars)
+ (set_params targs (List.map (@fst ident memory_chunk) params))).
+Proof.
+ induction vars; simpl; intros.
+ eapply vars_vals_match_holds_1; eauto.
+ inversion H1. subst hd tl.
+ eapply vars_vals_match_extensional; eauto.
+ intros. apply PTree.gso. red; intro; subst id; elim H4.
+ apply in_or_app. right. change (fst a) with (fst (fst a, lv)).
+ apply List.in_map; auto.
+Qed.
+
+Lemma bind_parameters_length:
+ forall e m1 params args m2,
+ bind_parameters e m1 params args m2 ->
+ List.length params = List.length args.
+Proof.
+ induction 1; simpl; eauto.
+Qed.
+
+(** The final result in this section: the behaviour of function entry
+ in the generated Cminor code (allocate stack data block and store
+ parameters whose address is taken) simulates what happens at function
+ entry in the original Csharpminor (allocate one block per local variable
+ and initialize the blocks corresponding to function parameters). *)
+
+Lemma function_entry_ok:
+ forall fn m e m1 lb vargs m2 f cs tm cenv sz tm1 sp tvargs,
+ alloc_variables empty_env m (fn_variables fn) e m1 lb ->
+ bind_parameters e m1 fn.(Csharpminor.fn_params) vargs m2 ->
+ match_callstack f cs m.(nextblock) tm.(nextblock) m ->
+ build_compilenv fn = (cenv, sz) ->
+ sz <= Int.max_signed ->
+ Mem.alloc tm 0 sz = (tm1, sp) ->
+ let te :=
+ set_locals (fn_vars_names fn) (set_params tvargs (fn_params_names fn)) in
+ val_list_inject f vargs tvargs ->
+ mem_inject f m tm ->
+ list_norepet (fn_params_names fn ++ fn_vars_names fn) ->
+ exists f2, exists te2, exists tm2,
+ exec_stmtlist tge (Vptr sp Int.zero)
+ te tm1 (store_parameters cenv fn.(Csharpminor.fn_params))
+ te2 tm2 Out_normal
+ /\ mem_inject f2 m2 tm2
+ /\ inject_incr f f2
+ /\ match_callstack f2
+ (mkframe cenv e te2 sp m.(nextblock) m1.(nextblock) :: cs)
+ m2.(nextblock) tm2.(nextblock) m2
+ /\ (forall b, m.(nextblock) <= b < m1.(nextblock) <-> In b lb).
+Proof.
+ intros.
+ generalize (bind_parameters_length _ _ _ _ _ H0); intro LEN1.
+ destruct (match_callstack_alloc_variables _ _ _ _ _ _ _ _ _ _ _ _ tvargs
+ H2 H3 H H4 H1 H6)
+ as [f1 [INCR1 [MINJ1 MATCH1]]].
+ fold te in MATCH1.
+ assert (VLI: val_list_inject f1 vargs tvargs).
+ eapply val_list_inject_incr; eauto.
+ generalize (vars_vals_match_holds _ _ _ _ LEN1 VLI _
+ (list_norepet_append_commut _ _ H7)).
+ fold te. intro VVM.
+ assert (NOREPET: list_norepet (List.map (@fst ident memory_chunk) fn.(Csharpminor.fn_params))).
+ unfold fn_params_names in H7.
+ eapply list_norepet_append_left; eauto.
+ destruct (store_parameters_correct _ _ _ _ _ H0 _ _ _ _ _ _ _ _
+ VVM NOREPET MINJ1 MATCH1)
+ as [te2 [tm2 [EXEC [MINJ2 MATCH2]]]].
+ exists f1; exists te2; exists tm2.
+ split. auto. split. auto. split. auto. split. auto.
+ intros; eapply alloc_variables_list_block; eauto.
+Qed.
+
+(** * Semantic preservation for the translation *)
+
+(** These tactics simplify hypotheses of the form [f ... = Some x]. *)
+
+Ltac monadSimpl1 :=
+ match goal with
+ | [ |- (bind _ _ ?F ?G = Some ?X) -> _ ] =>
+ unfold bind at 1;
+ generalize (refl_equal F);
+ pattern F at -1 in |- *;
+ case F;
+ [ (let EQ := fresh "EQ" in
+ (intro; intro EQ;
+ try monadSimpl1))
+ | intros; discriminate ]
+ | [ |- (None = Some _) -> _ ] =>
+ intro; discriminate
+ | [ |- (Some _ = Some _) -> _ ] =>
+ let h := fresh "H" in
+ (intro h; injection h; intro; clear h)
+ end.
+
+Ltac monadSimpl :=
+ match goal with
+ | [ |- (bind _ _ ?F ?G = Some ?X) -> _ ] => monadSimpl1
+ | [ |- (None = Some _) -> _ ] => monadSimpl1
+ | [ |- (Some _ = Some _) -> _ ] => monadSimpl1
+ | [ |- (?F _ _ _ _ _ _ _ = Some _) -> _ ] => simpl F; monadSimpl1
+ | [ |- (?F _ _ _ _ _ _ = Some _) -> _ ] => simpl F; monadSimpl1
+ | [ |- (?F _ _ _ _ _ = Some _) -> _ ] => simpl F; monadSimpl1
+ | [ |- (?F _ _ _ _ = Some _) -> _ ] => simpl F; monadSimpl1
+ | [ |- (?F _ _ _ = Some _) -> _ ] => simpl F; monadSimpl1
+ | [ |- (?F _ _ = Some _) -> _ ] => simpl F; monadSimpl1
+ | [ |- (?F _ = Some _) -> _ ] => simpl F; monadSimpl1
+ end.
+
+Ltac monadInv H :=
+ generalize H; monadSimpl.
+
+(** The proof of semantic preservation uses simulation diagrams of the
+ following form:
+<<
+ le, e, m1, a --------------- tle, sp, te1, tm1, ta
+ | |
+ | |
+ v v
+ le, e, m2, v --------------- tle, sp, te2, tm2, tv
+>>
+ where [ta] is the Cminor expression obtained by translating the
+ Csharpminor expression [a]. The left vertical arrow is an evaluation
+ of a Csharpminor expression. The right vertical arrow is an evaluation
+ of a Cminor expression. The precondition (top vertical bar)
+ includes a [mem_inject] relation between the memory states [m1] and [tm1],
+ a [val_list_inject] relation between the let environments [le] and [tle],
+ and a [match_callstack] relation for any callstack having
+ [e], [te1], [sp] as top frame. The postcondition (bottom vertical bar)
+ is the existence of a memory injection [f2] that extends the injection
+ [f1] we started with, preserves the [match_callstack] relation for
+ the transformed callstack at the final state, and validates a
+ [val_inject] relation between the result values [v] and [tv].
+
+ We capture these diagrams by the following predicates, parameterized
+ over the Csharpminor executions, which will serve as induction
+ hypotheses in the proof of simulation. *)
+
+Definition eval_expr_prop
+ (le: Csharpminor.letenv) (e: Csharpminor.env) (m1: mem) (a: Csharpminor.expr) (m2: mem) (v: val) : Prop :=
+ forall cenv ta f1 tle te1 tm1 sp lo hi cs
+ (TR: transl_expr cenv a = Some ta)
+ (LINJ: val_list_inject f1 le tle)
+ (MINJ: mem_inject f1 m1 tm1)
+ (MATCH: match_callstack f1
+ (mkframe cenv e te1 sp lo hi :: cs)
+ m1.(nextblock) tm1.(nextblock) m1),
+ exists f2, exists te2, exists tm2, exists tv,
+ eval_expr tge (Vptr sp Int.zero) tle te1 tm1 ta te2 tm2 tv
+ /\ val_inject f2 v tv
+ /\ mem_inject f2 m2 tm2
+ /\ inject_incr f1 f2
+ /\ match_callstack f2
+ (mkframe cenv e te2 sp lo hi :: cs)
+ m2.(nextblock) tm2.(nextblock) m2.
+
+Definition eval_exprlist_prop
+ (le: Csharpminor.letenv) (e: Csharpminor.env) (m1: mem) (al: Csharpminor.exprlist) (m2: mem) (vl: list val) : Prop :=
+ forall cenv tal f1 tle te1 tm1 sp lo hi cs
+ (TR: transl_exprlist cenv al = Some tal)
+ (LINJ: val_list_inject f1 le tle)
+ (MINJ: mem_inject f1 m1 tm1)
+ (MATCH: match_callstack f1
+ (mkframe cenv e te1 sp lo hi :: cs)
+ m1.(nextblock) tm1.(nextblock) m1),
+ exists f2, exists te2, exists tm2, exists tvl,
+ eval_exprlist tge (Vptr sp Int.zero) tle te1 tm1 tal te2 tm2 tvl
+ /\ val_list_inject f2 vl tvl
+ /\ mem_inject f2 m2 tm2
+ /\ inject_incr f1 f2
+ /\ match_callstack f2
+ (mkframe cenv e te2 sp lo hi :: cs)
+ m2.(nextblock) tm2.(nextblock) m2.
+
+Definition eval_funcall_prop
+ (m1: mem) (fn: Csharpminor.function) (args: list val) (m2: mem) (res: val) : Prop :=
+ forall tfn f1 tm1 cs targs
+ (TR: transl_function fn = Some tfn)
+ (MINJ: mem_inject f1 m1 tm1)
+ (MATCH: match_callstack f1 cs m1.(nextblock) tm1.(nextblock) m1)
+ (ARGSINJ: val_list_inject f1 args targs),
+ exists f2, exists tm2, exists tres,
+ eval_funcall tge tm1 tfn targs tm2 tres
+ /\ val_inject f2 res tres
+ /\ mem_inject f2 m2 tm2
+ /\ inject_incr f1 f2
+ /\ match_callstack f2 cs m2.(nextblock) tm2.(nextblock) m2.
+
+Inductive outcome_inject (f: meminj) : Csharpminor.outcome -> outcome -> Prop :=
+ | outcome_inject_normal:
+ outcome_inject f Csharpminor.Out_normal Out_normal
+ | outcome_inject_exit:
+ forall n, outcome_inject f (Csharpminor.Out_exit n) (Out_exit n)
+ | outcome_inject_return_none:
+ outcome_inject f (Csharpminor.Out_return None) (Out_return None)
+ | outcome_inject_return_some:
+ forall v1 v2,
+ val_inject f v1 v2 ->
+ outcome_inject f (Csharpminor.Out_return (Some v1)) (Out_return (Some v2)).
+
+Definition exec_stmt_prop
+ (e: Csharpminor.env) (m1: mem) (s: Csharpminor.stmt) (m2: mem) (out: Csharpminor.outcome): Prop :=
+ forall cenv ts f1 te1 tm1 sp lo hi cs
+ (TR: transl_stmt cenv s = Some ts)
+ (MINJ: mem_inject f1 m1 tm1)
+ (MATCH: match_callstack f1
+ (mkframe cenv e te1 sp lo hi :: cs)
+ m1.(nextblock) tm1.(nextblock) m1),
+ exists f2, exists te2, exists tm2, exists tout,
+ exec_stmt tge (Vptr sp Int.zero) te1 tm1 ts te2 tm2 tout
+ /\ outcome_inject f2 out tout
+ /\ mem_inject f2 m2 tm2
+ /\ inject_incr f1 f2
+ /\ match_callstack f2
+ (mkframe cenv e te2 sp lo hi :: cs)
+ m2.(nextblock) tm2.(nextblock) m2.
+
+Definition exec_stmtlist_prop
+ (e: Csharpminor.env) (m1: mem) (s: Csharpminor.stmtlist) (m2: mem) (out: Csharpminor.outcome): Prop :=
+ forall cenv ts f1 te1 tm1 sp lo hi cs
+ (TR: transl_stmtlist cenv s = Some ts)
+ (MINJ: mem_inject f1 m1 tm1)
+ (MATCH: match_callstack f1
+ (mkframe cenv e te1 sp lo hi :: cs)
+ m1.(nextblock) tm1.(nextblock) m1),
+ exists f2, exists te2, exists tm2, exists tout,
+ exec_stmtlist tge (Vptr sp Int.zero) te1 tm1 ts te2 tm2 tout
+ /\ outcome_inject f2 out tout
+ /\ mem_inject f2 m2 tm2
+ /\ inject_incr f1 f2
+ /\ match_callstack f2
+ (mkframe cenv e te2 sp lo hi :: cs)
+ m2.(nextblock) tm2.(nextblock) m2.
+
+(** There are as many cases in the inductive proof as there are evaluation
+ rules in the Csharpminor semantics. We treat each case as a separate
+ lemma. *)
+
+Lemma transl_expr_Evar_correct:
+ forall (le : Csharpminor.letenv)
+ (e : PTree.t (block * local_variable)) (m : mem) (id : positive)
+ (b : block) (chunk : memory_chunk) (v : val),
+ e ! id = Some (b, LVscalar chunk) ->
+ load chunk m b 0 = Some v ->
+ eval_expr_prop le e m (Csharpminor.Evar id) m v.
+Proof.
+ intros; red; intros. unfold transl_expr in TR.
+ generalize (var_get_correct _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ tle
+ TR MATCH MINJ H H0).
+ intros [tv [EVAL VINJ]].
+ exists f1; exists te1; exists tm1; exists tv; intuition.
+Qed.
+
+Lemma transl_expr_Eassign_correct:
+ forall (le : Csharpminor.letenv) (e : Csharpminor.env) (m : mem)
+ (id : positive) (a : Csharpminor.expr) (m1 : mem) (b : block)
+ (chunk : memory_chunk) (v1 v2 : val) (m2 : mem),
+ Csharpminor.eval_expr ge le e m a m1 v1 ->
+ eval_expr_prop le e m a m1 v1 ->
+ e ! id = Some (b, LVscalar chunk) ->
+ cast chunk v1 = Some v2 ->
+ store chunk m1 b 0 v2 = Some m2 ->
+ eval_expr_prop le e m (Csharpminor.Eassign id a) m2 v2.
+Proof.
+ intros; red; intros. monadInv TR; intro EQ0.
+ generalize (H0 _ _ _ _ _ _ _ _ _ _ EQ LINJ MINJ MATCH).
+ intros [f2 [te2 [tm2 [tv1 [EVAL1 [VINJ1 [MINJ1 [INCR12 MATCH1]]]]]]]].
+ generalize (var_set_correct _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
+ EQ0 MATCH1 EVAL1 VINJ1 MINJ1 H1 H2 H3).
+ intros [te3 [tm3 [tv2 [EVAL2 [VINJ2 [MINJ2 MATCH2]]]]]].
+ exists f2; exists te3; exists tm3; exists tv2. tauto.
+Qed.
+
+Lemma transl_expr_Eaddrof_local_correct:
+ forall (le : Csharpminor.letenv)
+ (e : PTree.t (block * local_variable)) (m : mem) (id : positive)
+ (b : block) (lv : local_variable),
+ e ! id = Some (b, lv) ->
+ eval_expr_prop le e m (Eaddrof id) m (Vptr b Int.zero).
+Proof.
+ intros; red; intros. simpl in TR.
+ generalize (var_addr_local_correct _ _ _ _ _ _ _ _ _ _ _ _ _ _ tle
+ TR MATCH H).
+ intros [tv [EVAL VINJ]].
+ exists f1; exists te1; exists tm1; exists tv. intuition.
+Qed.
+
+Lemma transl_expr_Eaddrof_global_correct:
+ forall (le : Csharpminor.letenv)
+ (e : PTree.t (block * local_variable)) (m : mem) (id : positive)
+ (b : block),
+ e ! id = None ->
+ Genv.find_symbol ge id = Some b ->
+ eval_expr_prop le e m (Eaddrof id) m (Vptr b Int.zero).
+Proof.
+ intros; red; intros. simpl in TR.
+ generalize (var_addr_global_correct _ _ _ _ _ _ _ _ _ _ _ _ _ tle
+ TR MATCH H H0).
+ intros [tv [EVAL VINJ]].
+ exists f1; exists te1; exists tm1; exists tv. intuition.
+Qed.
+
+Lemma transl_expr_Eop_correct:
+ forall (le : Csharpminor.letenv) (e : Csharpminor.env) (m : mem)
+ (op : Csharpminor.operation) (al : Csharpminor.exprlist) (m1 : mem)
+ (vl : list val) (v : val),
+ Csharpminor.eval_exprlist ge le e m al m1 vl ->
+ eval_exprlist_prop le e m al m1 vl ->
+ Csharpminor.eval_operation op vl m1 = Some v ->
+ eval_expr_prop le e m (Csharpminor.Eop op al) m1 v.
+Proof.
+ intros; red; intros. monadInv TR; intro EQ0.
+ generalize (H0 _ _ _ _ _ _ _ _ _ _ EQ LINJ MINJ MATCH).
+ intros [f2 [te2 [tm2 [tvl [EVAL1 [VINJ1 [MINJ1 [INCR1 MATCH1]]]]]]]].
+ generalize (make_op_correct _ _ _ _ _ _ _ _ _ _ _ _ _ _
+ EQ0 H1 EVAL1 VINJ1 MINJ1).
+ intros [tv [EVAL2 VINJ2]].
+ exists f2; exists te2; exists tm2; exists tv. intuition.
+Qed.
+
+Lemma transl_expr_Eload_correct:
+ forall (le : Csharpminor.letenv) (e : Csharpminor.env) (m : mem)
+ (chunk : memory_chunk) (a : Csharpminor.expr) (m1 : mem)
+ (v1 v : val),
+ Csharpminor.eval_expr ge le e m a m1 v1 ->
+ eval_expr_prop le e m a m1 v1 ->
+ loadv chunk m1 v1 = Some v ->
+ eval_expr_prop le e m (Csharpminor.Eload chunk a) m1 v.
+Proof.
+ intros; red; intros.
+ monadInv TR.
+ destruct (H0 _ _ _ _ _ _ _ _ _ _ EQ LINJ MINJ MATCH)
+ as [f2 [te2 [tm2 [tv1 [EVAL [VINJ1 [MINJ2 [INCR MATCH2]]]]]]]].
+ destruct (loadv_inject _ _ _ _ _ _ _ MINJ2 H1 VINJ1)
+ as [tv [TLOAD VINJ]].
+ exists f2; exists te2; exists tm2; exists tv.
+ intuition.
+ subst ta. eapply make_load_correct; eauto.
+Qed.
+
+Lemma transl_expr_Estore_correct:
+ forall (le : Csharpminor.letenv) (e : Csharpminor.env) (m : mem)
+ (chunk : memory_chunk) (a b : Csharpminor.expr) (m1 : mem)
+ (v1 : val) (m2 : mem) (v2 : val) (m3 : mem) (v3 : val),
+ Csharpminor.eval_expr ge le e m a m1 v1 ->
+ eval_expr_prop le e m a m1 v1 ->
+ Csharpminor.eval_expr ge le e m1 b m2 v2 ->
+ eval_expr_prop le e m1 b m2 v2 ->
+ cast chunk v2 = Some v3 ->
+ storev chunk m2 v1 v3 = Some m3 ->
+ eval_expr_prop le e m (Csharpminor.Estore chunk a b) m3 v3.
+Proof.
+ intros; red; intros. monadInv TR.
+ destruct (H0 _ _ _ _ _ _ _ _ _ _ EQ LINJ MINJ MATCH)
+ as [f2 [te2 [tm2 [tv1 [EVAL1 [VINJ1 [MINJ2 [INCR2 MATCH2]]]]]]]].
+ assert (LINJ2: val_list_inject f2 le tle). eapply val_list_inject_incr; eauto.
+ destruct (H2 _ _ _ _ _ _ _ _ _ _ EQ0 LINJ2 MINJ2 MATCH2)
+ as [f3 [te3 [tm3 [tv2 [EVAL2 [VINJ2 [MINJ3 [INCR3 MATCH3]]]]]]]].
+ assert (VINJ1': val_inject f3 v1 tv1). eapply val_inject_incr; eauto.
+ destruct (make_store_correct _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
+ EVAL1 EVAL2 H3 H4 MINJ3 VINJ1' VINJ2)
+ as [tm4 [tv [EVAL [MINJ4 [VINJ4 NEXTBLOCK]]]]].
+ exists f3; exists te3; exists tm4; exists tv.
+ rewrite <- H6. intuition.
+ eapply inject_incr_trans; eauto.
+ assert (val_inject f3 v1 tv1). eapply val_inject_incr; eauto.
+ unfold storev in H4; destruct v1; try discriminate.
+ inversion H5.
+ rewrite NEXTBLOCK. replace (nextblock m3) with (nextblock m2).
+ eapply match_callstack_mapped; eauto. congruence.
+ generalize (store_inv _ _ _ _ _ _ H4). simpl; symmetry; tauto.
+Qed.
+
+Lemma sig_transl_function:
+ forall f tf, transl_function f = Some tf -> tf.(fn_sig) = f.(Csharpminor.fn_sig).
+Proof.
+ intros f tf. unfold transl_function.
+ destruct (build_compilenv f).
+ case (zle z Int.max_signed); intros.
+ monadInv H. subst tf; reflexivity.
+ congruence.
+Qed.
+
+Lemma transl_expr_Ecall_correct:
+ forall (le : Csharpminor.letenv) (e : Csharpminor.env) (m : mem)
+ (sig : signature) (a : Csharpminor.expr) (bl : Csharpminor.exprlist)
+ (m1 m2 m3 : mem) (vf : val) (vargs : list val) (vres : val)
+ (f : Csharpminor.function),
+ Csharpminor.eval_expr ge le e m a m1 vf ->
+ eval_expr_prop le e m a m1 vf ->
+ Csharpminor.eval_exprlist ge le e m1 bl m2 vargs ->
+ eval_exprlist_prop le e m1 bl m2 vargs ->
+ Genv.find_funct ge vf = Some f ->
+ Csharpminor.fn_sig f = sig ->
+ Csharpminor.eval_funcall ge m2 f vargs m3 vres ->
+ eval_funcall_prop m2 f vargs m3 vres ->
+ eval_expr_prop le e m (Csharpminor.Ecall sig a bl) m3 vres.
+Proof.
+ intros;red;intros. monadInv TR. subst ta.
+ generalize (H0 _ _ _ _ _ _ _ _ _ _ EQ LINJ MINJ MATCH).
+ intros [f2 [te2 [tm2 [tv1 [EVAL1 [VINJ1 [MINJ1 [INCR1 MATCH1]]]]]]]].
+ assert (LINJ1: val_list_inject f2 le tle). eapply val_list_inject_incr; eauto.
+ generalize (H2 _ _ _ _ _ _ _ _ _ _ EQ0 LINJ1 MINJ1 MATCH1).
+ intros [f3 [te3 [tm3 [tv2 [EVAL2 [VINJ2 [MINJ2 [INCR2 MATCH2]]]]]]]].
+ assert (tv1 = vf).
+ elim (Genv.find_funct_inv H3). intros bf VF. rewrite VF in H3.
+ rewrite Genv.find_funct_find_funct_ptr in H3.
+ generalize (Genv.find_funct_ptr_inv H3). intro.
+ assert (match_globalenvs f2). eapply match_callstack_match_globalenvs; eauto.
+ generalize (mg_functions _ H8 _ H7). intro.
+ rewrite VF in VINJ1. inversion VINJ1. subst vf.
+ decEq. congruence.
+ subst ofs2. replace x with 0. reflexivity. congruence.
+ subst tv1. elim (functions_translated _ _ H3). intros tf [FIND TRF].
+ generalize (H6 _ _ _ _ _ TRF MINJ2 MATCH2 VINJ2).
+ intros [f4 [tm4 [tres [EVAL3 [VINJ3 [MINJ3 [INCR3 MATCH3]]]]]]].
+ exists f4; exists te3; exists tm4; exists tres. intuition.
+ eapply eval_Ecall; eauto. rewrite <- H4. apply sig_transl_function; auto.
+ apply inject_incr_trans with f2; auto.
+ apply inject_incr_trans with f3; auto.
+Qed.
+
+Lemma transl_expr_Econdition_true_correct:
+ forall (le : Csharpminor.letenv) (e : Csharpminor.env) (m : mem)
+ (a b c : Csharpminor.expr) (m1 : mem) (v1 : val) (m2 : mem)
+ (v2 : val),
+ Csharpminor.eval_expr ge le e m a m1 v1 ->
+ eval_expr_prop le e m a m1 v1 ->
+ Val.is_true v1 ->
+ Csharpminor.eval_expr ge le e m1 b m2 v2 ->
+ eval_expr_prop le e m1 b m2 v2 ->
+ eval_expr_prop le e m (Csharpminor.Econdition a b c) m2 v2.
+Proof.
+ intros; red; intros. monadInv TR.
+ destruct (H0 _ _ _ _ _ _ _ _ _ _ EQ LINJ MINJ MATCH)
+ as [f2 [te2 [tm2 [tv1 [EVAL1 [VINJ1 [MINJ1 [INCR1 MATCH1]]]]]]]].
+ assert (LINJ1: val_list_inject f2 le tle). eapply val_list_inject_incr; eauto.
+ destruct (H3 _ _ _ _ _ _ _ _ _ _ EQ0 LINJ1 MINJ1 MATCH1)
+ as [f3 [te3 [tm3 [tv2 [EVAL2 [VINJ2 [MINJ2 [INCR2 MATCH2]]]]]]]].
+ exists f3; exists te3; exists tm3; exists tv2.
+ intuition.
+ rewrite <- H5. eapply eval_conditionalexpr_true; eauto.
+ inversion VINJ1; subst v1 tv1; simpl in H1; simpl; contradiction || auto.
+ eapply inject_incr_trans; eauto.
+Qed.
+
+Lemma transl_expr_Econdition_false_correct:
+ forall (le : Csharpminor.letenv) (e : Csharpminor.env) (m : mem)
+ (a b c : Csharpminor.expr) (m1 : mem) (v1 : val) (m2 : mem)
+ (v2 : val),
+ Csharpminor.eval_expr ge le e m a m1 v1 ->
+ eval_expr_prop le e m a m1 v1 ->
+ Val.is_false v1 ->
+ Csharpminor.eval_expr ge le e m1 c m2 v2 ->
+ eval_expr_prop le e m1 c m2 v2 ->
+ eval_expr_prop le e m (Csharpminor.Econdition a b c) m2 v2.
+Proof.
+ intros; red; intros. monadInv TR.
+ destruct (H0 _ _ _ _ _ _ _ _ _ _ EQ LINJ MINJ MATCH)
+ as [f2 [te2 [tm2 [tv1 [EVAL1 [VINJ1 [MINJ1 [INCR1 MATCH1]]]]]]]].
+ assert (LINJ1: val_list_inject f2 le tle). eapply val_list_inject_incr; eauto.
+ destruct (H3 _ _ _ _ _ _ _ _ _ _ EQ1 LINJ1 MINJ1 MATCH1)
+ as [f3 [te3 [tm3 [tv2 [EVAL2 [VINJ2 [MINJ2 [INCR2 MATCH2]]]]]]]].
+ exists f3; exists te3; exists tm3; exists tv2.
+ intuition.
+ rewrite <- H5. eapply eval_conditionalexpr_false; eauto.
+ inversion VINJ1; subst v1 tv1; simpl in H1; simpl; contradiction || auto.
+ eapply inject_incr_trans; eauto.
+Qed.
+
+Lemma transl_expr_Elet_correct:
+ forall (le : Csharpminor.letenv) (e : Csharpminor.env) (m : mem)
+ (a b : Csharpminor.expr) (m1 : mem) (v1 : val) (m2 : mem) (v2 : val),
+ Csharpminor.eval_expr ge le e m a m1 v1 ->
+ eval_expr_prop le e m a m1 v1 ->
+ Csharpminor.eval_expr ge (v1 :: le) e m1 b m2 v2 ->
+ eval_expr_prop (v1 :: le) e m1 b m2 v2 ->
+ eval_expr_prop le e m (Csharpminor.Elet a b) m2 v2.
+Proof.
+ intros; red; intros. monadInv TR.
+ destruct (H0 _ _ _ _ _ _ _ _ _ _ EQ LINJ MINJ MATCH)
+ as [f2 [te2 [tm2 [tv1 [EVAL1 [VINJ1 [MINJ1 [INCR1 MATCH1]]]]]]]].
+ assert (LINJ1: val_list_inject f2 (v1 :: le) (tv1 :: tle)).
+ constructor. auto. eapply val_list_inject_incr; eauto.
+ destruct (H2 _ _ _ _ _ _ _ _ _ _ EQ0 LINJ1 MINJ1 MATCH1)
+ as [f3 [te3 [tm3 [tv2 [EVAL2 [VINJ2 [MINJ2 [INCR2 MATCH2]]]]]]]].
+ exists f3; exists te3; exists tm3; exists tv2.
+ intuition.
+ subst ta; eapply eval_Elet; eauto.
+ eapply inject_incr_trans; eauto.
+Qed.
+
+Remark val_list_inject_nth:
+ forall f l1 l2, val_list_inject f l1 l2 ->
+ forall n v1, nth_error l1 n = Some v1 ->
+ exists v2, nth_error l2 n = Some v2 /\ val_inject f v1 v2.
+Proof.
+ induction 1; destruct n; simpl; intros.
+ discriminate. discriminate.
+ injection H1; intros; subst v. exists v'; split; auto.
+ eauto.
+Qed.
+
+Lemma transl_expr_Eletvar_correct:
+ forall (le : list val) (e : Csharpminor.env) (m : mem) (n : nat)
+ (v : val),
+ nth_error le n = Some v ->
+ eval_expr_prop le e m (Csharpminor.Eletvar n) m v.
+Proof.
+ intros; red; intros. monadInv TR.
+ destruct (val_list_inject_nth _ _ _ LINJ _ _ H)
+ as [tv [A B]].
+ exists f1; exists te1; exists tm1; exists tv.
+ intuition.
+ subst ta. eapply eval_Eletvar; auto.
+Qed.
+
+Lemma transl_exprlist_Enil_correct:
+ forall (le : Csharpminor.letenv) (e : Csharpminor.env) (m : mem),
+ eval_exprlist_prop le e m Csharpminor.Enil m nil.
+Proof.
+ intros; red; intros. monadInv TR.
+ exists f1; exists te1; exists tm1; exists (@nil val).
+ intuition. subst tal; constructor.
+Qed.
+
+Lemma transl_exprlist_Econs_correct:
+ forall (le : Csharpminor.letenv) (e : Csharpminor.env) (m : mem)
+ (a : Csharpminor.expr) (bl : Csharpminor.exprlist) (m1 : mem)
+ (v : val) (m2 : mem) (vl : list val),
+ Csharpminor.eval_expr ge le e m a m1 v ->
+ eval_expr_prop le e m a m1 v ->
+ Csharpminor.eval_exprlist ge le e m1 bl m2 vl ->
+ eval_exprlist_prop le e m1 bl m2 vl ->
+ eval_exprlist_prop le e m (Csharpminor.Econs a bl) m2 (v :: vl).
+Proof.
+ intros; red; intros. monadInv TR.
+ destruct (H0 _ _ _ _ _ _ _ _ _ _ EQ LINJ MINJ MATCH)
+ as [f2 [te2 [tm2 [tv1 [EVAL1 [VINJ1 [MINJ2 [INCR2 MATCH2]]]]]]]].
+ assert (LINJ2: val_list_inject f2 le tle). eapply val_list_inject_incr; eauto.
+ destruct (H2 _ _ _ _ _ _ _ _ _ _ EQ0 LINJ2 MINJ2 MATCH2)
+ as [f3 [te3 [tm3 [tv2 [EVAL2 [VINJ2 [MINJ3 [INCR3 MATCH3]]]]]]]].
+ assert (VINJ1': val_inject f3 v tv1). eapply val_inject_incr; eauto.
+ exists f3; exists te3; exists tm3; exists (tv1 :: tv2).
+ intuition. subst tal; econstructor; eauto.
+ eapply inject_incr_trans; eauto.
+Qed.
+
+Lemma transl_funcall_correct:
+ forall (m : mem) (f : Csharpminor.function) (vargs : list val)
+ (e : Csharpminor.env) (m1 : mem) (lb : list block) (m2 m3 : mem)
+ (out : Csharpminor.outcome) (vres : val),
+ list_norepet (fn_params_names f ++ fn_vars_names f) ->
+ alloc_variables empty_env m (fn_variables f) e m1 lb ->
+ bind_parameters e m1 (Csharpminor.fn_params f) vargs m2 ->
+ Csharpminor.exec_stmtlist ge e m2 (Csharpminor.fn_body f) m3 out ->
+ exec_stmtlist_prop e m2 (Csharpminor.fn_body f) m3 out ->
+ Csharpminor.outcome_result_value out (sig_res (Csharpminor.fn_sig f)) vres ->
+ eval_funcall_prop m f vargs (free_list m3 lb) vres.
+Proof.
+ intros; red. intros tfn f1 tm; intros.
+ unfold transl_function in TR.
+ caseEq (build_compilenv f); intros cenv stacksize CENV.
+ rewrite CENV in TR.
+ destruct (zle stacksize Int.max_signed); try discriminate.
+ monadInv TR. clear TR.
+ caseEq (alloc tm 0 stacksize). intros tm1 sp ALLOC.
+ destruct (function_entry_ok _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
+ H0 H1 MATCH CENV z ALLOC ARGSINJ MINJ H)
+ as [f2 [te2 [tm2 [STOREPARAM [MINJ2 [INCR12 [MATCH2 BLOCKS]]]]]]].
+ destruct (H3 _ _ _ _ _ _ _ _ _ EQ MINJ2 MATCH2)
+ as [f3 [te3 [tm3 [tout [EXECBODY [OUTINJ [MINJ3 [INCR23 MATCH3]]]]]]]].
+ assert (exists tvres,
+ outcome_result_value tout f.(Csharpminor.fn_sig).(sig_res) tvres /\
+ val_inject f3 vres tvres).
+ generalize H4. unfold Csharpminor.outcome_result_value, outcome_result_value.
+ inversion OUTINJ.
+ destruct (sig_res (Csharpminor.fn_sig f)); intro. contradiction.
+ exists Vundef; split. auto. subst vres; constructor.
+ tauto.
+ destruct (sig_res (Csharpminor.fn_sig f)); intro. contradiction.
+ exists Vundef; split. auto. subst vres; constructor.
+ destruct (sig_res (Csharpminor.fn_sig f)); intro.
+ exists v2; split. auto. subst vres; auto.
+ contradiction.
+ elim H5; clear H5; intros tvres [TOUT VINJRES].
+ exists f3; exists (Mem.free tm3 sp); exists tvres.
+ (* execution *)
+ split. rewrite <- H6; econstructor; simpl; eauto.
+ apply exec_Scons_continue with te2 tm2.
+ change Out_normal with (outcome_block Out_normal).
+ apply exec_Sblock. exact STOREPARAM.
+ eexact EXECBODY.
+ (* val_inject *)
+ split. assumption.
+ (* mem_inject *)
+ split. apply free_inject; auto.
+ intros. elim (BLOCKS b1); intros B1 B2. apply B1. inversion MATCH3. inversion H20.
+ eapply me_inv0. eauto.
+ (* inject_incr *)
+ split. eapply inject_incr_trans; eauto.
+ (* match_callstack *)
+ assert (forall bl mm, nextblock (free_list mm bl) = nextblock mm).
+ induction bl; intros. reflexivity. simpl. auto.
+ unfold free; simpl nextblock. rewrite H5.
+ eapply match_callstack_freelist; eauto.
+ intros. elim (BLOCKS b); intros B1 B2. generalize (B2 H7). omega.
+Qed.
+
+Lemma transl_stmt_Sexpr_correct:
+ forall (e : Csharpminor.env) (m : mem) (a : Csharpminor.expr)
+ (m1 : mem) (v : val),
+ Csharpminor.eval_expr ge nil e m a m1 v ->
+ eval_expr_prop nil e m a m1 v ->
+ exec_stmt_prop e m (Csharpminor.Sexpr a) m1 Csharpminor.Out_normal.
+Proof.
+ intros; red; intros. monadInv TR.
+ destruct (H0 _ _ _ _ _ _ _ _ _ _ EQ (val_nil_inject f1) MINJ MATCH)
+ as [f2 [te2 [tm2 [tv1 [EVAL1 [VINJ1 [MINJ2 [INCR2 MATCH2]]]]]]]].
+ exists f2; exists te2; exists tm2; exists Out_normal.
+ intuition. subst ts. econstructor; eauto.
+ constructor.
+Qed.
+
+Lemma transl_stmt_Sifthenelse_true_correct:
+ forall (e : Csharpminor.env) (m : mem) (a : Csharpminor.expr)
+ (sl1 sl2 : Csharpminor.stmtlist) (m1 : mem) (v1 : val) (m2 : mem)
+ (out : Csharpminor.outcome),
+ Csharpminor.eval_expr ge nil e m a m1 v1 ->
+ eval_expr_prop nil e m a m1 v1 ->
+ Val.is_true v1 ->
+ Csharpminor.exec_stmtlist ge e m1 sl1 m2 out ->
+ exec_stmtlist_prop e m1 sl1 m2 out ->
+ exec_stmt_prop e m (Csharpminor.Sifthenelse a sl1 sl2) m2 out.
+Proof.
+ intros; red; intros. monadInv TR.
+ destruct (H0 _ _ _ _ _ _ _ _ _ _ EQ (val_nil_inject f1) MINJ MATCH)
+ as [f2 [te2 [tm2 [tv1 [EVAL1 [VINJ1 [MINJ2 [INCR2 MATCH2]]]]]]]].
+ destruct (H3 _ _ _ _ _ _ _ _ _ EQ0 MINJ2 MATCH2)
+ as [f3 [te3 [tm3 [tout [EVAL2 [OINJ [MINJ3 [INCR3 MATCH3]]]]]]]].
+ exists f3; exists te3; exists tm3; exists tout.
+ intuition.
+ subst ts. eapply exec_ifthenelse_true; eauto.
+ inversion VINJ1; subst v1 tv1; simpl in H1; simpl; contradiction || auto.
+ eapply inject_incr_trans; eauto.
+Qed.
+
+Lemma transl_stmt_Sifthenelse_false_correct:
+ forall (e : Csharpminor.env) (m : mem) (a : Csharpminor.expr)
+ (sl1 sl2 : Csharpminor.stmtlist) (m1 : mem) (v1 : val) (m2 : mem)
+ (out : Csharpminor.outcome),
+ Csharpminor.eval_expr ge nil e m a m1 v1 ->
+ eval_expr_prop nil e m a m1 v1 ->
+ Val.is_false v1 ->
+ Csharpminor.exec_stmtlist ge e m1 sl2 m2 out ->
+ exec_stmtlist_prop e m1 sl2 m2 out ->
+ exec_stmt_prop e m (Csharpminor.Sifthenelse a sl1 sl2) m2 out.
+Proof.
+ intros; red; intros. monadInv TR.
+ destruct (H0 _ _ _ _ _ _ _ _ _ _ EQ (val_nil_inject f1) MINJ MATCH)
+ as [f2 [te2 [tm2 [tv1 [EVAL1 [VINJ1 [MINJ2 [INCR2 MATCH2]]]]]]]].
+ destruct (H3 _ _ _ _ _ _ _ _ _ EQ1 MINJ2 MATCH2)
+ as [f3 [te3 [tm3 [tout [EVAL2 [OINJ [MINJ3 [INCR3 MATCH3]]]]]]]].
+ exists f3; exists te3; exists tm3; exists tout.
+ intuition.
+ subst ts. eapply exec_ifthenelse_false; eauto.
+ inversion VINJ1; subst v1 tv1; simpl in H1; simpl; contradiction || auto.
+ eapply inject_incr_trans; eauto.
+Qed.
+
+Lemma transl_stmt_Sloop_loop_correct:
+ forall (e : Csharpminor.env) (m : mem) (sl : Csharpminor.stmtlist)
+ (m1 m2 : mem) (out : Csharpminor.outcome),
+ Csharpminor.exec_stmtlist ge e m sl m1 Csharpminor.Out_normal ->
+ exec_stmtlist_prop e m sl m1 Csharpminor.Out_normal ->
+ Csharpminor.exec_stmt ge e m1 (Csharpminor.Sloop sl) m2 out ->
+ exec_stmt_prop e m1 (Csharpminor.Sloop sl) m2 out ->
+ exec_stmt_prop e m (Csharpminor.Sloop sl) m2 out.
+Proof.
+ intros; red; intros. monadInv TR.
+ destruct (H0 _ _ _ _ _ _ _ _ _ EQ MINJ MATCH)
+ as [f2 [te2 [tm2 [tout1 [EVAL1 [OINJ1 [MINJ2 [INCR2 MATCH2]]]]]]]].
+ destruct (H2 _ _ _ _ _ _ _ _ _ TR MINJ2 MATCH2)
+ as [f3 [te3 [tm3 [tout2 [EVAL2 [OINJ2 [MINJ3 [INCR3 MATCH3]]]]]]]].
+ exists f3; exists te3; exists tm3; exists tout2.
+ intuition.
+ subst ts. eapply exec_Sloop_loop; eauto.
+ inversion OINJ1; subst tout1; eauto.
+ eapply inject_incr_trans; eauto.
+Qed.
+
+
+Lemma transl_stmt_Sloop_exit_correct:
+ forall (e : Csharpminor.env) (m : mem) (sl : Csharpminor.stmtlist)
+ (m1 : mem) (out : Csharpminor.outcome),
+ Csharpminor.exec_stmtlist ge e m sl m1 out ->
+ exec_stmtlist_prop e m sl m1 out ->
+ out <> Csharpminor.Out_normal ->
+ exec_stmt_prop e m (Csharpminor.Sloop sl) m1 out.
+Proof.
+ intros; red; intros. monadInv TR.
+ destruct (H0 _ _ _ _ _ _ _ _ _ EQ MINJ MATCH)
+ as [f2 [te2 [tm2 [tout1 [EVAL1 [OINJ1 [MINJ2 [INCR2 MATCH2]]]]]]]].
+ exists f2; exists te2; exists tm2; exists tout1.
+ intuition. subst ts; eapply exec_Sloop_stop; eauto.
+ inversion OINJ1; subst out tout1; congruence.
+Qed.
+
+Lemma transl_stmt_Sblock_correct:
+ forall (e : Csharpminor.env) (m : mem) (sl : Csharpminor.stmtlist)
+ (m1 : mem) (out : Csharpminor.outcome),
+ Csharpminor.exec_stmtlist ge e m sl m1 out ->
+ exec_stmtlist_prop e m sl m1 out ->
+ exec_stmt_prop e m (Csharpminor.Sblock sl) m1
+ (Csharpminor.outcome_block out).
+Proof.
+ intros; red; intros. monadInv TR.
+ destruct (H0 _ _ _ _ _ _ _ _ _ EQ MINJ MATCH)
+ as [f2 [te2 [tm2 [tout1 [EVAL1 [OINJ1 [MINJ2 [INCR2 MATCH2]]]]]]]].
+ exists f2; exists te2; exists tm2; exists (outcome_block tout1).
+ intuition. subst ts; eapply exec_Sblock; eauto.
+ inversion OINJ1; subst out tout1; simpl.
+ constructor.
+ destruct n; constructor.
+ constructor.
+ constructor; auto.
+Qed.
+
+Lemma transl_stmt_Sexit_correct:
+ forall (e : Csharpminor.env) (m : mem) (n : nat),
+ exec_stmt_prop e m (Csharpminor.Sexit n) m (Csharpminor.Out_exit n).
+Proof.
+ intros; red; intros. monadInv TR.
+ exists f1; exists te1; exists tm1; exists (Out_exit n).
+ intuition. subst ts; constructor. constructor.
+Qed.
+
+Lemma transl_stmt_Sreturn_none_correct:
+ forall (e : Csharpminor.env) (m : mem),
+ exec_stmt_prop e m (Csharpminor.Sreturn None) m
+ (Csharpminor.Out_return None).
+Proof.
+ intros; red; intros. monadInv TR.
+ exists f1; exists te1; exists tm1; exists (Out_return None).
+ intuition. subst ts; constructor. constructor.
+Qed.
+
+Lemma transl_stmt_Sreturn_some_correct:
+ forall (e : Csharpminor.env) (m : mem) (a : Csharpminor.expr)
+ (m1 : mem) (v : val),
+ Csharpminor.eval_expr ge nil e m a m1 v ->
+ eval_expr_prop nil e m a m1 v ->
+ exec_stmt_prop e m (Csharpminor.Sreturn (Some a)) m1
+ (Csharpminor.Out_return (Some v)).
+Proof.
+ intros; red; intros; monadInv TR.
+ destruct (H0 _ _ _ _ _ _ _ _ _ _ EQ (val_nil_inject f1) MINJ MATCH)
+ as [f2 [te2 [tm2 [tv1 [EVAL [VINJ1 [MINJ2 [INCR MATCH2]]]]]]]].
+ exists f2; exists te2; exists tm2; exists (Out_return (Some tv1)).
+ intuition. subst ts; econstructor; eauto. constructor; auto.
+Qed.
+
+Lemma transl_stmtlist_Snil_correct:
+ forall (e : Csharpminor.env) (m : mem),
+ exec_stmtlist_prop e m Csharpminor.Snil m Csharpminor.Out_normal.
+Proof.
+ intros; red; intros; monadInv TR.
+ exists f1; exists te1; exists tm1; exists Out_normal.
+ intuition. subst ts; constructor. constructor.
+Qed.
+
+Lemma transl_stmtlist_Scons_2_correct:
+ forall (e : Csharpminor.env) (m : mem) (s : Csharpminor.stmt)
+ (sl : Csharpminor.stmtlist) (m1 m2 : mem) (out : Csharpminor.outcome),
+ Csharpminor.exec_stmt ge e m s m1 Csharpminor.Out_normal ->
+ exec_stmt_prop e m s m1 Csharpminor.Out_normal ->
+ Csharpminor.exec_stmtlist ge e m1 sl m2 out ->
+ exec_stmtlist_prop e m1 sl m2 out ->
+ exec_stmtlist_prop e m (Csharpminor.Scons s sl) m2 out.
+Proof.
+ intros; red; intros; monadInv TR.
+ destruct (H0 _ _ _ _ _ _ _ _ _ EQ MINJ MATCH)
+ as [f2 [te2 [tm2 [tout1 [EXEC1 [OINJ1 [MINJ2 [INCR2 MATCH2]]]]]]]].
+ destruct (H2 _ _ _ _ _ _ _ _ _ EQ0 MINJ2 MATCH2)
+ as [f3 [te3 [tm3 [tout2 [EXEC2 [OINJ2 [MINJ3 [INCR3 MATCH3]]]]]]]].
+ exists f3; exists te3; exists tm3; exists tout2.
+ intuition. subst ts; eapply exec_Scons_continue; eauto.
+ inversion OINJ1. subst tout1. auto.
+ eapply inject_incr_trans; eauto.
+Qed.
+
+Lemma transl_stmtlist_Scons_1_correct:
+ forall (e : Csharpminor.env) (m : mem) (s : Csharpminor.stmt)
+ (sl : Csharpminor.stmtlist) (m1 : mem) (out : Csharpminor.outcome),
+ Csharpminor.exec_stmt ge e m s m1 out ->
+ exec_stmt_prop e m s m1 out ->
+ out <> Csharpminor.Out_normal ->
+ exec_stmtlist_prop e m (Csharpminor.Scons s sl) m1 out.
+Proof.
+ intros; red; intros; monadInv TR.
+ destruct (H0 _ _ _ _ _ _ _ _ _ EQ MINJ MATCH)
+ as [f2 [te2 [tm2 [tout1 [EXEC1 [OINJ1 [MINJ2 [INCR2 MATCH2]]]]]]]].
+ exists f2; exists te2; exists tm2; exists tout1.
+ intuition. subst ts; eapply exec_Scons_stop; eauto.
+ inversion OINJ1; subst out tout1; congruence.
+Qed.
+
+(** We conclude by an induction over the structure of the Csharpminor
+ evaluation derivation, using the lemmas above for each case. *)
+
+Lemma transl_function_correct:
+ forall m1 f vargs m2 vres,
+ Csharpminor.eval_funcall ge m1 f vargs m2 vres ->
+ eval_funcall_prop m1 f vargs m2 vres.
+Proof
+ (eval_funcall_ind5 ge
+ eval_expr_prop
+ eval_exprlist_prop
+ eval_funcall_prop
+ exec_stmt_prop
+ exec_stmtlist_prop
+
+ transl_expr_Evar_correct
+ transl_expr_Eassign_correct
+ transl_expr_Eaddrof_local_correct
+ transl_expr_Eaddrof_global_correct
+ transl_expr_Eop_correct
+ transl_expr_Eload_correct
+ transl_expr_Estore_correct
+ transl_expr_Ecall_correct
+ transl_expr_Econdition_true_correct
+ transl_expr_Econdition_false_correct
+ transl_expr_Elet_correct
+ transl_expr_Eletvar_correct
+ transl_exprlist_Enil_correct
+ transl_exprlist_Econs_correct
+ transl_funcall_correct
+ transl_stmt_Sexpr_correct
+ transl_stmt_Sifthenelse_true_correct
+ transl_stmt_Sifthenelse_false_correct
+ transl_stmt_Sloop_loop_correct
+ transl_stmt_Sloop_exit_correct
+ transl_stmt_Sblock_correct
+ transl_stmt_Sexit_correct
+ transl_stmt_Sreturn_none_correct
+ transl_stmt_Sreturn_some_correct
+ transl_stmtlist_Snil_correct
+ transl_stmtlist_Scons_2_correct
+ transl_stmtlist_Scons_1_correct).
+
+(** The [match_globalenvs] relation holds for the global environments
+ of the source program and the transformed program. *)
+
+Lemma match_globalenvs_init:
+ let m := Genv.init_mem prog in
+ let tm := Genv.init_mem tprog in
+ let f := fun b => if zlt b m.(nextblock) then Some(b, 0) else None in
+ match_globalenvs f.
+Proof.
+ intros. constructor.
+ (* symbols *)
+ intros. split.
+ unfold f. rewrite zlt_true. auto. unfold m.
+ eapply Genv.find_symbol_inv; eauto.
+ rewrite <- H. apply symbols_preserved.
+ intros. unfold f. rewrite zlt_true. auto.
+ generalize (nextblock_pos m). omega.
+Qed.
+
+(** The correctness of the translation of a whole Csharpminor program
+ follows. *)
+
+Theorem transl_program_correct:
+ forall n,
+ Csharpminor.exec_program prog (Vint n) ->
+ exec_program tprog (Vint n).
+Proof.
+ intros n [b [fn [m [FINDS [FINDF [SIG EVAL]]]]]].
+ elim (function_ptr_translated _ _ FINDF). intros tfn [TFIND TR].
+ set (m0 := Genv.init_mem prog) in *.
+ set (f := fun b => if zlt b m0.(nextblock) then Some(b, 0) else None).
+ assert (MINJ0: mem_inject f m0 m0).
+ unfold f; constructor; intros.
+ apply zlt_false; auto.
+ destruct (zlt b0 (nextblock m0)); try discriminate.
+ inversion H; subst b' delta.
+ split. auto.
+ constructor. compute. split; congruence. left; auto.
+ intros; omega.
+ generalize (Genv.initmem_undef prog b0). fold m0. intros [lo [hi EQ]].
+ rewrite EQ. simpl. constructor.
+ destruct (zlt b1 (nextblock m0)); try discriminate.
+ destruct (zlt b2 (nextblock m0)); try discriminate.
+ left; congruence.
+ assert (MATCH0: match_callstack f nil m0.(nextblock) m0.(nextblock) m0).
+ constructor. unfold f; apply match_globalenvs_init.
+ fold ge in EVAL.
+ destruct (transl_function_correct _ _ _ _ _ EVAL
+ _ _ _ _ _ TR MINJ0 MATCH0 (val_nil_inject f))
+ as [f1 [tm1 [tres [TEVAL [VINJ [MINJ1 [INCR MATCH1]]]]]]].
+ exists b; exists tfn; exists tm1.
+ split. fold tge. rewrite <- FINDS.
+ replace (prog_main prog) with (prog_main tprog). fold ge. apply symbols_preserved.
+ apply transform_partial_program_main with transl_function. assumption.
+ split. assumption.
+ split. rewrite <- SIG. apply sig_transl_function; auto.
+ rewrite (Genv.init_mem_transf_partial transl_function _ TRANSL).
+ inversion VINJ; subst tres. assumption.
+Qed.
+
+End TRANSLATION.
diff --git a/backend/Coloring.v b/backend/Coloring.v
new file mode 100644
index 0000000..1a34a12
--- /dev/null
+++ b/backend/Coloring.v
@@ -0,0 +1,267 @@
+(** Construction and coloring of the interference graph. *)
+
+Require Import Coqlib.
+Require Import Maps.
+Require Import AST.
+Require Import Op.
+Require Import Registers.
+Require Import RTL.
+Require Import RTLtyping.
+Require Import Locations.
+Require Import Conventions.
+Require Import InterfGraph.
+
+(** * Construction of the interference graph *)
+
+(** Two registers interfere if there exists a program point where
+ they are both simultaneously live, and it is possible that they
+ contain different values at this program point. Consequently,
+ two registers that do not interfere can be merged into one register
+ while preserving the program behavior: there is no program point
+ where this merged register would have to hold two different values
+ (for the two original registers), so to speak.
+
+ The simplified algorithm for constructing the interference graph
+ from the results of the liveness analysis is as follows:
+<<
+ start with empty interference graph
+ for each parameter p and register r live at the function entry point:
+ add conflict edge p <-> r
+ for each instruction I in function:
+ let L be the live registers "after" I
+ if I is a "move" instruction dst <- src, and dst is live:
+ add conflict edges dst <-> r for each r in L \ {dst, src}
+ else if I is an instruction with result dst, and dst is live:
+ add conflict edges dst <-> r for each r in L \ {dst};
+ if I is a "call" instruction dst <- f(args),
+ add conflict edges between all pseudo-registers in L \ {dst}
+ and all caller-save machine registers
+ done
+>>
+ Notice that edges are added only when a register becomes live.
+ A register becomes live either if it is the result of an operation
+ (and is live afterwards), or if we are at the function entrance
+ and the register is a function parameter. For two registers to
+ be simultaneously live at some program point, it must be the case
+ that one becomes live at a point where the other is already live.
+ Hence, it suffices to add interference edges between registers
+ that become live at some instruction and registers that are already
+ live at this instruction.
+
+ Notice also the special treatment of ``move'' instructions:
+ since the destination register of the ``move'' is assigned the same value
+ as the source register, it is semantically correct to assign
+ the destination and the source registers to the same register,
+ even if the source register remains live afterwards.
+ (This is even desirable, since the ``move'' instruction can then
+ be eliminated.) Thus, no interference is added between the
+ source and the destination of a ``move'' instruction.
+
+ Finally, for ``call'' instructions, we must make sure that
+ pseudo-registers live across the instruction are allocated to
+ callee-save machine register or to stack slots, but never to
+ caller-save machine registers (these lose their values across
+ the call). We therefore add the corresponding conflict edges
+ between pseudo-registers live across and caller-save machine
+ registers (pairwise).
+
+ The full algorithm is similar to the simplified algorithm above,
+ but records preference edges in addition to conflict edges.
+ Preference edges guide the graph coloring algorithm by telling it
+ that better code will be obtained eventually if it is possible
+ to allocate certain pseudo-registers to the same location or to
+ a given machine register. Preference edges are added:
+- between the destination and source pseudo-registers of a ``move''
+ instruction;
+- between the arguments of a ``call'' instruction and the locations
+ of the arguments as dictated by the calling conventions;
+- between the result of a ``call'' instruction and the location
+ of the result as dictated by the calling conventions.
+*)
+
+Definition add_interf_live
+ (filter: reg -> bool) (res: reg) (live: Regset.t) (g: graph): graph :=
+ Regset.fold
+ (fun g r => if filter r then add_interf r res g else g) live g.
+
+Definition add_interf_op
+ (res: reg) (live: Regset.t) (g: graph): graph :=
+ add_interf_live
+ (fun r => if Reg.eq r res then false else true)
+ res live g.
+
+Definition add_interf_move
+ (arg res: reg) (live: Regset.t) (g: graph): graph :=
+ add_interf_live
+ (fun r =>
+ if Reg.eq r res then false else
+ if Reg.eq r arg then false else true)
+ res live g.
+
+Definition add_interf_call
+ (live: Regset.t) (destroyed: list mreg) (g: graph): graph :=
+ List.fold_left
+ (fun g mr => Regset.fold (fun g r => add_interf_mreg r mr g) live g)
+ destroyed g.
+
+Fixpoint add_prefs_call
+ (args: list reg) (locs: list loc) (g: graph) {struct args} : graph :=
+ match args, locs with
+ | a1 :: al, l1 :: ll =>
+ add_prefs_call al ll
+ (match l1 with R mr => add_pref_mreg a1 mr g | _ => g end)
+ | _, _ => g
+ end.
+
+Definition add_interf_entry
+ (params: list reg) (live: Regset.t) (g: graph): graph :=
+ List.fold_left (fun g r => add_interf_op r live g) params g.
+
+Fixpoint add_interf_params
+ (params: list reg) (g: graph) {struct params}: graph :=
+ match params with
+ | nil => g
+ | p1 :: pl =>
+ add_interf_params pl
+ (List.fold_left
+ (fun g r => if Reg.eq r p1 then g else add_interf r p1 g)
+ pl g)
+ end.
+
+Definition add_edges_instr
+ (sig: signature) (i: instruction) (live: Regset.t) (g: graph) : graph :=
+ match i with
+ | Iop op args res s =>
+ if Regset.mem res live then
+ match is_move_operation op args with
+ | Some arg =>
+ add_pref arg res (add_interf_move arg res live g)
+ | None =>
+ add_interf_op res live g
+ end
+ else g
+ | Iload chunk addr args dst s =>
+ if Regset.mem dst live
+ then add_interf_op dst live g
+ else g
+ | Icall sig ros args res s =>
+ add_prefs_call args (loc_arguments sig)
+ (add_pref_mreg res (loc_result sig)
+ (add_interf_op res live
+ (add_interf_call
+ (Regset.remove res live) destroyed_at_call_regs g)))
+ | Ireturn (Some r) =>
+ add_pref_mreg r (loc_result sig) g
+ | _ => g
+ end.
+
+Definition add_edges_instrs (f: function) (live: PMap.t Regset.t) : graph :=
+ PTree.fold
+ (fun g pc i => add_edges_instr f.(fn_sig) i live!!pc g)
+ f.(fn_code)
+ empty_graph.
+
+Definition interf_graph (f: function) (live: PMap.t Regset.t) (live0: Regset.t) :=
+ add_prefs_call f.(fn_params) (loc_parameters f.(fn_sig))
+ (add_interf_params f.(fn_params)
+ (add_interf_entry f.(fn_params) live0
+ (add_edges_instrs f live))).
+
+(** * Graph coloring *)
+
+(** The actual coloring of the graph is performed by a function written
+ directly in Caml, and not proved correct in any way. This function
+ takes as argument the [RTL] function, the interference graph for
+ this function, an assignment of types to [RTL] pseudo-registers,
+ and the set of all [RTL] pseudo-registers mentioned in the
+ interference graph. It returns the coloring as a function from
+ pseudo-registers to locations. *)
+
+Parameter graph_coloring:
+ function -> graph -> regenv -> Regset.t -> (reg -> loc).
+
+(** To ensure that the result of [graph_coloring] is a correct coloring,
+ we check a posteriori its result using the following Coq functions.
+ Let [coloring] be the function [reg -> loc] returned by [graph_coloring].
+ The three properties checked are:
+- [coloring r1 <> coloring r2] if there is a conflict edge between
+ [r1] and [r2] in the interference graph.
+- [coloring r1 <> R m2] if there is a conflict edge between pseudo-register
+ [r1] and machine register [m2] in the interference graph.
+- For all [r] mentioned in the interference graph,
+ the location [coloring r] is acceptable and has the same type as [r].
+*)
+
+Definition check_coloring_1 (g: graph) (coloring: reg -> loc) :=
+ SetRegReg.for_all
+ (fun r1r2 =>
+ if Loc.eq (coloring (fst r1r2)) (coloring (snd r1r2)) then false else true)
+ g.(interf_reg_reg).
+
+Definition check_coloring_2 (g: graph) (coloring: reg -> loc) :=
+ SetRegMreg.for_all
+ (fun r1mr2 =>
+ if Loc.eq (coloring (fst r1mr2)) (R (snd r1mr2)) then false else true)
+ g.(interf_reg_mreg).
+
+Definition same_typ (t1 t2: typ) :=
+ match t1, t2 with
+ | Tint, Tint => true
+ | Tfloat, Tfloat => true
+ | _, _ => false
+ end.
+
+Definition loc_is_acceptable (l: loc) :=
+ match l with
+ | R r =>
+ if In_dec Loc.eq l temporaries then false else true
+ | S (Local ofs ty) =>
+ if zlt ofs 0 then false else true
+ | _ =>
+ false
+ end.
+
+Definition check_coloring_3 (rs: Regset.t) (env: regenv) (coloring: reg -> loc) :=
+ Regset.for_all
+ (fun r =>
+ let l := coloring r in
+ andb (loc_is_acceptable l) (same_typ (env r) (Loc.type l)))
+ rs.
+
+Definition check_coloring
+ (g: graph) (env: regenv) (rs: Regset.t) (coloring: reg -> loc) :=
+ andb (check_coloring_1 g coloring)
+ (andb (check_coloring_2 g coloring)
+ (check_coloring_3 rs env coloring)).
+
+(** To preserve decidability of checking, the checks
+ (especially the third one) are performed for the pseudo-registers
+ mentioned in the interference graph. To facilitate the proofs,
+ it is convenient to ensure that the properties hold for all
+ pseudo-registers. To this end, we ``clip'' the candidate coloring
+ returned by [graph_coloring]: the final coloring behave identically
+ over pseudo-registers mentioned in the interference graph,
+ but returns a dummy machine register of the correct type otherwise. *)
+
+Definition alloc_of_coloring (coloring: reg -> loc) (env: regenv) (rs: Regset.t) :=
+ fun r =>
+ if Regset.mem r rs
+ then coloring r
+ else match env r with Tint => R R3 | Tfloat => R F1 end.
+
+(** * Coloring of the interference graph *)
+
+(** The following function combines the phases described above:
+ construction of the interference graph, coloring by untrusted
+ Caml code, checking of the candidate coloring returned,
+ and adjustment of this coloring. If the coloring candidate is
+ incorrect, [None] is returned, causing register allocation to fail. *)
+
+Definition regalloc
+ (f: function) (live: PMap.t Regset.t) (live0: Regset.t) (env: regenv) :=
+ let g := interf_graph f live live0 in
+ let rs := all_interf_regs g in
+ let coloring := graph_coloring f g env rs in
+ if check_coloring g env rs coloring
+ then Some (alloc_of_coloring coloring env rs)
+ else None.
diff --git a/backend/Coloringproof.v b/backend/Coloringproof.v
new file mode 100644
index 0000000..39b208e
--- /dev/null
+++ b/backend/Coloringproof.v
@@ -0,0 +1,845 @@
+(** Correctness of graph coloring. *)
+
+Require Import Coqlib.
+Require Import Maps.
+Require Import AST.
+Require Import Op.
+Require Import Registers.
+Require Import RTL.
+Require Import RTLtyping.
+Require Import Locations.
+Require Import Conventions.
+Require Import InterfGraph.
+Require Import Coloring.
+
+(** * Correctness of the interference graph *)
+
+(** We show that the interference graph built by [interf_graph]
+ is correct in the sense that it contains all conflict edges
+ that we need.
+
+ Many boring lemmas on the auxiliary functions used to construct
+ the interference graph follow. The lemmas are of two kinds:
+ the ``increasing'' lemmas show that the auxiliary functions only add
+ edges to the interference graph, but do not remove existing edges;
+ and the ``correct'' lemmas show that the auxiliary functions
+ correctly add the edges that we'd like them to add. *)
+
+Lemma graph_incl_refl:
+ forall g, graph_incl g g.
+Proof.
+ intros; split; auto.
+Qed.
+
+Lemma add_interf_live_incl_aux:
+ forall (filter: reg -> bool) res live g,
+ graph_incl g
+ (List.fold_left
+ (fun g r => if filter r then add_interf r res g else g)
+ live g).
+Proof.
+ induction live; simpl; intros.
+ apply graph_incl_refl.
+ apply graph_incl_trans with (if filter a then add_interf a res g else g).
+ case (filter a).
+ apply add_interf_incl.
+ apply graph_incl_refl.
+ apply IHlive.
+Qed.
+
+Lemma add_interf_live_incl:
+ forall (filter: reg -> bool) res live g,
+ graph_incl g (add_interf_live filter res live g).
+Proof.
+ intros. unfold add_interf_live. rewrite Regset.fold_spec.
+ apply add_interf_live_incl_aux.
+Qed.
+
+Lemma add_interf_live_correct_aux:
+ forall filter res live g r,
+ In r live -> filter r = true ->
+ interfere r res
+ (List.fold_left
+ (fun g r => if filter r then add_interf r res g else g)
+ live g).
+Proof.
+ induction live; simpl; intros.
+ contradiction.
+ elim H; intros.
+ subst a. rewrite H0.
+ generalize (add_interf_live_incl_aux filter res live (add_interf r res g)).
+ intros [A B].
+ apply A. apply add_interf_correct.
+ apply IHlive; auto.
+Qed.
+
+Lemma add_interf_live_correct:
+ forall filter res live g r,
+ Regset.mem r live = true ->
+ filter r = true ->
+ interfere r res (add_interf_live filter res live g).
+Proof.
+ intros. unfold add_interf_live. rewrite Regset.fold_spec.
+ apply add_interf_live_correct_aux; auto.
+ apply Regset.elements_correct. auto.
+Qed.
+
+Lemma add_interf_op_incl:
+ forall res live g,
+ graph_incl g (add_interf_op res live g).
+Proof.
+ intros; unfold add_interf_op. apply add_interf_live_incl.
+Qed.
+
+Lemma add_interf_op_correct:
+ forall res live g r,
+ Regset.mem r live = true ->
+ r <> res ->
+ interfere r res (add_interf_op res live g).
+Proof.
+ intros. unfold add_interf_op.
+ apply add_interf_live_correct.
+ auto.
+ case (Reg.eq r res); intro.
+ contradiction. auto.
+Qed.
+
+Lemma add_interf_move_incl:
+ forall arg res live g,
+ graph_incl g (add_interf_move arg res live g).
+Proof.
+ intros; unfold add_interf_move. apply add_interf_live_incl.
+Qed.
+
+Lemma add_interf_move_correct:
+ forall arg res live g r,
+ Regset.mem r live = true ->
+ r <> arg -> r <> res ->
+ interfere r res (add_interf_move arg res live g).
+Proof.
+ intros. unfold add_interf_move.
+ apply add_interf_live_correct.
+ auto.
+ case (Reg.eq r res); intro.
+ contradiction.
+ case (Reg.eq r arg); intro.
+ contradiction.
+ auto.
+Qed.
+
+Lemma add_interf_call_incl_aux_1:
+ forall mr live g,
+ graph_incl g
+ (List.fold_left (fun g r => add_interf_mreg r mr g) live g).
+Proof.
+ induction live; simpl; intros.
+ apply graph_incl_refl.
+ apply graph_incl_trans with (add_interf_mreg a mr g).
+ apply add_interf_mreg_incl.
+ auto.
+Qed.
+
+Lemma add_interf_call_incl_aux_2:
+ forall mr live g,
+ graph_incl g
+ (Regset.fold (fun g r => add_interf_mreg r mr g) live g).
+Proof.
+ intros. rewrite Regset.fold_spec. apply add_interf_call_incl_aux_1.
+Qed.
+
+Lemma add_interf_call_incl:
+ forall live destroyed g,
+ graph_incl g (add_interf_call live destroyed g).
+Proof.
+ induction destroyed; simpl; intros.
+ apply graph_incl_refl.
+ eapply graph_incl_trans; [idtac|apply IHdestroyed].
+ apply add_interf_call_incl_aux_2.
+Qed.
+
+Lemma interfere_incl:
+ forall r1 r2 g1 g2,
+ graph_incl g1 g2 ->
+ interfere r1 r2 g1 ->
+ interfere r1 r2 g2.
+Proof.
+ unfold graph_incl; intros. elim H; auto.
+Qed.
+
+Lemma interfere_mreg_incl:
+ forall r1 r2 g1 g2,
+ graph_incl g1 g2 ->
+ interfere_mreg r1 r2 g1 ->
+ interfere_mreg r1 r2 g2.
+Proof.
+ unfold graph_incl; intros. elim H; auto.
+Qed.
+
+Lemma add_interf_call_correct_aux_1:
+ forall mr live g r,
+ In r live ->
+ interfere_mreg r mr
+ (List.fold_left (fun g r => add_interf_mreg r mr g) live g).
+Proof.
+ induction live; simpl; intros.
+ elim H.
+ elim H; intros.
+ subst a. eapply interfere_mreg_incl.
+ apply add_interf_call_incl_aux_1.
+ apply add_interf_mreg_correct.
+ apply IHlive; auto.
+Qed.
+
+Lemma add_interf_call_correct_aux_2:
+ forall mr live g r,
+ Regset.mem r live = true ->
+ interfere_mreg r mr
+ (Regset.fold (fun g r => add_interf_mreg r mr g) live g).
+Proof.
+ intros. rewrite Regset.fold_spec. apply add_interf_call_correct_aux_1.
+ apply Regset.elements_correct; auto.
+Qed.
+
+Lemma add_interf_call_correct:
+ forall live destroyed g r mr,
+ Regset.mem r live = true ->
+ In mr destroyed ->
+ interfere_mreg r mr (add_interf_call live destroyed g).
+Proof.
+ induction destroyed; simpl; intros.
+ elim H0.
+ elim H0; intros.
+ subst a. eapply interfere_mreg_incl.
+ apply add_interf_call_incl.
+ apply add_interf_call_correct_aux_2; auto.
+ apply IHdestroyed; auto.
+Qed.
+
+Lemma add_prefs_call_incl:
+ forall args locs g,
+ graph_incl g (add_prefs_call args locs g).
+Proof.
+ induction args; destruct locs; simpl; intros;
+ try apply graph_incl_refl.
+ destruct l.
+ eapply graph_incl_trans; [idtac|eauto].
+ apply add_pref_mreg_incl.
+ auto.
+Qed.
+
+Lemma add_interf_entry_incl:
+ forall params live g,
+ graph_incl g (add_interf_entry params live g).
+Proof.
+ unfold add_interf_entry; induction params; simpl; intros.
+ apply graph_incl_refl.
+ eapply graph_incl_trans; [idtac|eauto].
+ apply add_interf_op_incl.
+Qed.
+
+Lemma add_interf_entry_correct:
+ forall params live g r1 r2,
+ In r1 params ->
+ Regset.mem r2 live = true ->
+ r1 <> r2 ->
+ interfere r1 r2 (add_interf_entry params live g).
+Proof.
+ unfold add_interf_entry; induction params; simpl; intros.
+ elim H.
+ elim H; intro.
+ subst a. apply interfere_incl with (add_interf_op r1 live g).
+ exact (add_interf_entry_incl _ _ _).
+ apply interfere_sym. apply add_interf_op_correct; auto.
+ auto.
+Qed.
+
+Lemma add_interf_params_incl_aux:
+ forall p1 pl g,
+ graph_incl g
+ (List.fold_left
+ (fun g r => if Reg.eq r p1 then g else add_interf r p1 g)
+ pl g).
+Proof.
+ induction pl; simpl; intros.
+ apply graph_incl_refl.
+ eapply graph_incl_trans; [idtac|eauto].
+ case (Reg.eq a p1); intro.
+ apply graph_incl_refl. apply add_interf_incl.
+Qed.
+
+Lemma add_interf_params_incl:
+ forall pl g,
+ graph_incl g (add_interf_params pl g).
+Proof.
+ induction pl; simpl; intros.
+ apply graph_incl_refl.
+ eapply graph_incl_trans; [idtac|eauto].
+ apply add_interf_params_incl_aux.
+Qed.
+
+Lemma add_interf_params_correct_aux:
+ forall p1 pl g p2,
+ In p2 pl ->
+ p1 <> p2 ->
+ interfere p1 p2
+ (List.fold_left
+ (fun g r => if Reg.eq r p1 then g else add_interf r p1 g)
+ pl g).
+Proof.
+ induction pl; simpl; intros.
+ elim H.
+ elim H; intro; clear H.
+ subst a. apply interfere_sym. eapply interfere_incl.
+ apply add_interf_params_incl_aux.
+ case (Reg.eq p2 p1); intro.
+ congruence. apply add_interf_correct.
+ auto.
+Qed.
+
+Lemma add_interf_params_correct:
+ forall pl g r1 r2,
+ In r1 pl -> In r2 pl -> r1 <> r2 ->
+ interfere r1 r2 (add_interf_params pl g).
+Proof.
+ induction pl; simpl; intros.
+ elim H.
+ elim H; intro; clear H; elim H0; intro; clear H0.
+ congruence.
+ subst a. eapply interfere_incl. apply add_interf_params_incl.
+ apply add_interf_params_correct_aux; auto.
+ subst a. apply interfere_sym.
+ eapply interfere_incl. apply add_interf_params_incl.
+ apply add_interf_params_correct_aux; auto.
+ auto.
+Qed.
+
+Lemma add_edges_instr_incl:
+ forall sig instr live g,
+ graph_incl g (add_edges_instr sig instr live g).
+Proof.
+ intros. destruct instr; unfold add_edges_instr;
+ try apply graph_incl_refl.
+ case (Regset.mem r live).
+ destruct (is_move_operation o l).
+ eapply graph_incl_trans; [idtac|apply add_pref_incl].
+ apply add_interf_move_incl.
+ apply add_interf_op_incl.
+ apply graph_incl_refl.
+ case (Regset.mem r live).
+ apply add_interf_op_incl.
+ apply graph_incl_refl.
+ eapply graph_incl_trans; [idtac|apply add_prefs_call_incl].
+ eapply graph_incl_trans; [idtac|apply add_pref_mreg_incl].
+ eapply graph_incl_trans; [idtac|apply add_interf_op_incl].
+ apply add_interf_call_incl.
+ destruct o.
+ apply add_pref_mreg_incl.
+ apply graph_incl_refl.
+Qed.
+
+(** The proposition below states that graph [g] contains
+ all the conflict edges expected for instruction [instr]. *)
+
+Definition correct_interf_instr
+ (live: Regset.t) (instr: instruction) (g: graph) : Prop :=
+ match instr with
+ | Iop op args res s =>
+ match is_move_operation op args with
+ | Some arg =>
+ forall r,
+ Regset.mem res live = true ->
+ Regset.mem r live = true ->
+ r <> res -> r <> arg -> interfere r res g
+ | None =>
+ forall r,
+ Regset.mem res live = true ->
+ Regset.mem r live = true ->
+ r <> res -> interfere r res g
+ end
+ | Iload chunk addr args res s =>
+ forall r,
+ Regset.mem res live = true ->
+ Regset.mem r live = true ->
+ r <> res -> interfere r res g
+ | Icall sig ros args res s =>
+ (forall r mr,
+ Regset.mem r live = true ->
+ In mr destroyed_at_call_regs ->
+ r <> res ->
+ interfere_mreg r mr g)
+ /\ (forall r,
+ Regset.mem r live = true ->
+ r <> res -> interfere r res g)
+ | _ =>
+ True
+ end.
+
+Lemma correct_interf_instr_incl:
+ forall live instr g1 g2,
+ graph_incl g1 g2 ->
+ correct_interf_instr live instr g1 ->
+ correct_interf_instr live instr g2.
+Proof.
+ intros until g2. intro.
+ unfold correct_interf_instr; destruct instr; auto.
+ destruct (is_move_operation o l).
+ intros. eapply interfere_incl; eauto.
+ intros. eapply interfere_incl; eauto.
+ intros. eapply interfere_incl; eauto.
+ intros [A B]. split.
+ intros. eapply interfere_mreg_incl; eauto.
+ intros. eapply interfere_incl; eauto.
+Qed.
+
+Lemma add_edges_instr_correct:
+ forall sig instr live g,
+ correct_interf_instr live instr (add_edges_instr sig instr live g).
+Proof.
+ intros.
+ destruct instr; unfold add_edges_instr; unfold correct_interf_instr; auto.
+ destruct (is_move_operation o l); intros.
+ rewrite H. eapply interfere_incl.
+ apply add_pref_incl. apply add_interf_move_correct; auto.
+ rewrite H. apply add_interf_op_correct; auto.
+
+ intros. rewrite H. apply add_interf_op_correct; auto.
+
+ split; intros.
+ apply interfere_mreg_incl with
+ (add_interf_call (Regset.remove r live) destroyed_at_call_regs g).
+ eapply graph_incl_trans; [idtac|apply add_prefs_call_incl].
+ eapply graph_incl_trans; [idtac|apply add_pref_mreg_incl].
+ apply add_interf_op_incl.
+ apply add_interf_call_correct; auto.
+ rewrite Regset.mem_remove_other; auto.
+
+ eapply interfere_incl.
+ eapply graph_incl_trans; [idtac|apply add_prefs_call_incl].
+ apply add_pref_mreg_incl.
+ apply add_interf_op_correct; auto.
+Qed.
+
+Lemma add_edges_instrs_incl_aux:
+ forall sig live instrs g,
+ graph_incl g
+ (fold_left
+ (fun (a : graph) (p : positive * instruction) =>
+ add_edges_instr sig (snd p) live !! (fst p) a)
+ instrs g).
+Proof.
+ induction instrs; simpl; intros.
+ apply graph_incl_refl.
+ eapply graph_incl_trans; [idtac|eauto].
+ apply add_edges_instr_incl.
+Qed.
+
+Lemma add_edges_instrs_correct_aux:
+ forall sig live instrs g pc i,
+ In (pc, i) instrs ->
+ correct_interf_instr live!!pc i
+ (fold_left
+ (fun (a : graph) (p : positive * instruction) =>
+ add_edges_instr sig (snd p) live !! (fst p) a)
+ instrs g).
+Proof.
+ induction instrs; simpl; intros.
+ elim H.
+ elim H; intro.
+ subst a; simpl. eapply correct_interf_instr_incl.
+ apply add_edges_instrs_incl_aux.
+ apply add_edges_instr_correct.
+ auto.
+Qed.
+
+Lemma add_edges_instrs_correct:
+ forall f live pc i,
+ f.(fn_code)!pc = Some i ->
+ correct_interf_instr live!!pc i (add_edges_instrs f live).
+Proof.
+ intros.
+ unfold add_edges_instrs.
+ rewrite PTree.fold_spec.
+ apply add_edges_instrs_correct_aux.
+ apply PTree.elements_correct. auto.
+Qed.
+
+(** Here are the three correctness properties of the generated
+ inference graph. First, it contains the conflict edges
+ needed by every instruction of the function. *)
+
+Lemma interf_graph_correct_1:
+ forall f live live0 pc i,
+ f.(fn_code)!pc = Some i ->
+ correct_interf_instr live!!pc i (interf_graph f live live0).
+Proof.
+ intros. unfold interf_graph.
+ apply correct_interf_instr_incl with (add_edges_instrs f live).
+ eapply graph_incl_trans; [idtac|apply add_prefs_call_incl].
+ eapply graph_incl_trans; [idtac|apply add_interf_params_incl].
+ apply add_interf_entry_incl.
+ apply add_edges_instrs_correct; auto.
+Qed.
+
+(** Second, function parameters conflict pairwise. *)
+
+Lemma interf_graph_correct_2:
+ forall f live live0 r1 r2,
+ In r1 f.(fn_params) ->
+ In r2 f.(fn_params) ->
+ r1 <> r2 ->
+ interfere r1 r2 (interf_graph f live live0).
+Proof.
+ intros. unfold interf_graph.
+ eapply interfere_incl.
+ apply add_prefs_call_incl.
+ apply add_interf_params_correct; auto.
+Qed.
+
+(** Third, function parameters conflict pairwise with pseudo-registers
+ live at function entry. If the function never uses a pseudo-register
+ before it is defined, pseudo-registers live at function entry
+ are a subset of the function parameters and therefore this condition
+ is implied by [interf_graph_correct_3]. However, we prefer not
+ to make this assumption. *)
+
+Lemma interf_graph_correct_3:
+ forall f live live0 r1 r2,
+ In r1 f.(fn_params) ->
+ Regset.mem r2 live0 = true ->
+ r1 <> r2 ->
+ interfere r1 r2 (interf_graph f live live0).
+Proof.
+ intros. unfold interf_graph.
+ eapply interfere_incl.
+ eapply graph_incl_trans; [idtac|apply add_prefs_call_incl].
+ apply add_interf_params_incl.
+ apply add_interf_entry_correct; auto.
+Qed.
+
+(** * Correctness of the a priori checks over the result of graph coloring *)
+
+(** We now show that the checks performed over the candidate coloring
+ returned by [graph_coloring] are correct: candidate colorings that
+ pass these checks are indeed correct colorings. *)
+
+Section CORRECT_COLORING.
+
+Variable g: graph.
+Variable env: regenv.
+Variable allregs: Regset.t.
+Variable coloring: reg -> loc.
+
+Lemma check_coloring_1_correct:
+ forall r1 r2,
+ check_coloring_1 g coloring = true ->
+ SetRegReg.In (r1, r2) g.(interf_reg_reg) ->
+ coloring r1 <> coloring r2.
+Proof.
+ unfold check_coloring_1. intros.
+ assert (FSetInterface.compat_bool OrderedRegReg.eq
+ (fun r1r2 => if Loc.eq (coloring (fst r1r2)) (coloring (snd r1r2))
+ then false else true)).
+ red. unfold OrderedRegReg.eq. unfold OrderedReg.eq.
+ intros x y [EQ1 EQ2]. rewrite EQ1; rewrite EQ2; auto.
+ generalize (SetRegReg.for_all_2 H1 H H0).
+ simpl. case (Loc.eq (coloring r1) (coloring r2)); intro.
+ intro; discriminate. auto.
+Qed.
+
+Lemma check_coloring_2_correct:
+ forall r1 mr2,
+ check_coloring_2 g coloring = true ->
+ SetRegMreg.In (r1, mr2) g.(interf_reg_mreg) ->
+ coloring r1 <> R mr2.
+Proof.
+ unfold check_coloring_2. intros.
+ assert (FSetInterface.compat_bool OrderedRegMreg.eq
+ (fun r1r2 => if Loc.eq (coloring (fst r1r2)) (R (snd r1r2))
+ then false else true)).
+ red. unfold OrderedRegMreg.eq. unfold OrderedReg.eq.
+ intros x y [EQ1 EQ2]. rewrite EQ1; rewrite EQ2; auto.
+ generalize (SetRegMreg.for_all_2 H1 H H0).
+ simpl. case (Loc.eq (coloring r1) (R mr2)); intro.
+ intro; discriminate. auto.
+Qed.
+
+Lemma same_typ_correct:
+ forall t1 t2, same_typ t1 t2 = true -> t1 = t2.
+Proof.
+ destruct t1; destruct t2; simpl; congruence.
+Qed.
+
+Lemma loc_is_acceptable_correct:
+ forall l, loc_is_acceptable l = true -> loc_acceptable l.
+Proof.
+ destruct l; unfold loc_is_acceptable, loc_acceptable.
+ case (In_dec Loc.eq (R m) temporaries); intro.
+ intro; discriminate. auto.
+ destruct s.
+ case (zlt z 0); intro. intro; discriminate. auto.
+ intro; discriminate.
+ intro; discriminate.
+Qed.
+
+Lemma check_coloring_3_correct:
+ forall r,
+ check_coloring_3 allregs env coloring = true ->
+ Regset.mem r allregs = true ->
+ loc_acceptable (coloring r) /\ env r = Loc.type (coloring r).
+Proof.
+ unfold check_coloring_3; intros.
+ generalize (Regset.for_all_spec _ H H0). intro.
+ elim (andb_prop _ _ H1); intros.
+ split. apply loc_is_acceptable_correct; auto.
+ apply same_typ_correct; auto.
+Qed.
+
+End CORRECT_COLORING.
+
+(** * Correctness of clipping *)
+
+(** We then show the correctness of the ``clipped'' coloring
+ returned by [alloc_of_coloring] applied to a candidate coloring
+ that passes the a posteriori checks. *)
+
+Section ALLOC_OF_COLORING.
+
+Variable g: graph.
+Variable env: regenv.
+Let allregs := all_interf_regs g.
+Variable coloring: reg -> loc.
+Let alloc := alloc_of_coloring coloring env allregs.
+
+Lemma alloc_of_coloring_correct_1:
+ forall r1 r2,
+ check_coloring g env allregs coloring = true ->
+ SetRegReg.In (r1, r2) g.(interf_reg_reg) ->
+ alloc r1 <> alloc r2.
+Proof.
+ unfold check_coloring, alloc, alloc_of_coloring; intros.
+ elim (andb_prop _ _ H); intros.
+ generalize (all_interf_regs_correct_1 _ _ _ H0).
+ intros [A B].
+ unfold allregs. rewrite A; rewrite B.
+ eapply check_coloring_1_correct; eauto.
+Qed.
+
+Lemma alloc_of_coloring_correct_2:
+ forall r1 mr2,
+ check_coloring g env allregs coloring = true ->
+ SetRegMreg.In (r1, mr2) g.(interf_reg_mreg) ->
+ alloc r1 <> R mr2.
+Proof.
+ unfold check_coloring, alloc, alloc_of_coloring; intros.
+ elim (andb_prop _ _ H); intros.
+ elim (andb_prop _ _ H2); intros.
+ generalize (all_interf_regs_correct_2 _ _ _ H0). intros.
+ unfold allregs. rewrite H5.
+ eapply check_coloring_2_correct; eauto.
+Qed.
+
+Lemma alloc_of_coloring_correct_3:
+ forall r,
+ check_coloring g env allregs coloring = true ->
+ loc_acceptable (alloc r).
+Proof.
+ unfold check_coloring, alloc, alloc_of_coloring; intros.
+ elim (andb_prop _ _ H); intros.
+ elim (andb_prop _ _ H1); intros.
+ caseEq (Regset.mem r allregs); intro.
+ generalize (check_coloring_3_correct _ _ _ r H3 H4). tauto.
+ case (env r); simpl; intuition congruence.
+Qed.
+
+Lemma alloc_of_coloring_correct_4:
+ forall r,
+ check_coloring g env allregs coloring = true ->
+ env r = Loc.type (alloc r).
+Proof.
+ unfold check_coloring, alloc, alloc_of_coloring; intros.
+ elim (andb_prop _ _ H); intros.
+ elim (andb_prop _ _ H1); intros.
+ caseEq (Regset.mem r allregs); intro.
+ generalize (check_coloring_3_correct _ _ _ r H3 H4). tauto.
+ case (env r); reflexivity.
+Qed.
+
+End ALLOC_OF_COLORING.
+
+(** * Correctness of the whole graph coloring algorithm *)
+
+(** Combining results from the previous sections, we now summarize
+ the correctness properties of the assignment (of locations to
+ registers) returned by [regalloc]. *)
+
+Definition correct_alloc_instr
+ (live: PMap.t Regset.t) (alloc: reg -> loc)
+ (pc: node) (instr: instruction) : Prop :=
+ match instr with
+ | Iop op args res s =>
+ match is_move_operation op args with
+ | Some arg =>
+ forall r,
+ Regset.mem res live!!pc = true ->
+ Regset.mem r live!!pc = true ->
+ r <> res -> r <> arg -> alloc r <> alloc res
+ | None =>
+ forall r,
+ Regset.mem res live!!pc = true ->
+ Regset.mem r live!!pc = true ->
+ r <> res -> alloc r <> alloc res
+ end
+ | Iload chunk addr args res s =>
+ forall r,
+ Regset.mem res live!!pc = true ->
+ Regset.mem r live!!pc = true ->
+ r <> res -> alloc r <> alloc res
+ | Icall sig ros args res s =>
+ (forall r,
+ Regset.mem r live!!pc = true ->
+ r <> res ->
+ ~(In (alloc r) Conventions.destroyed_at_call))
+ /\ (forall r,
+ Regset.mem r live!!pc = true ->
+ r <> res -> alloc r <> alloc res)
+ | _ =>
+ True
+ end.
+
+Section REGALLOC_PROPERTIES.
+
+Variable f: function.
+Variable env: regenv.
+Variable live: PMap.t Regset.t.
+Variable live0: Regset.t.
+Variable alloc: reg -> loc.
+
+Let g := interf_graph f live live0.
+Let allregs := all_interf_regs g.
+Let coloring := graph_coloring f g env allregs.
+
+Lemma regalloc_ok:
+ regalloc f live live0 env = Some alloc ->
+ check_coloring g env allregs coloring = true /\
+ alloc = alloc_of_coloring coloring env allregs.
+Proof.
+ unfold regalloc, coloring, allregs, g.
+ case (check_coloring (interf_graph f live live0) env).
+ intro EQ; injection EQ; intro; clear EQ.
+ split. auto. auto.
+ intro; discriminate.
+Qed.
+
+Lemma regalloc_acceptable:
+ forall r,
+ regalloc f live live0 env = Some alloc ->
+ loc_acceptable (alloc r).
+Proof.
+ intros. elim (regalloc_ok H); intros.
+ rewrite H1. unfold allregs. apply alloc_of_coloring_correct_3.
+ exact H0.
+Qed.
+
+Lemma regsalloc_acceptable:
+ forall rl,
+ regalloc f live live0 env = Some alloc ->
+ locs_acceptable (List.map alloc rl).
+Proof.
+ intros; red; intros.
+ elim (list_in_map_inv _ _ _ H0). intros r [EQ IN].
+ subst l. apply regalloc_acceptable. auto.
+Qed.
+
+Lemma regalloc_preserves_types:
+ forall r,
+ regalloc f live live0 env = Some alloc ->
+ Loc.type (alloc r) = env r.
+Proof.
+ intros. elim (regalloc_ok H); intros.
+ rewrite H1. unfold allregs. symmetry.
+ apply alloc_of_coloring_correct_4.
+ exact H0.
+Qed.
+
+Lemma correct_interf_alloc_instr:
+ forall pc instr,
+ (forall r1 r2, interfere r1 r2 g -> alloc r1 <> alloc r2) ->
+ (forall r1 mr2, interfere_mreg r1 mr2 g -> alloc r1 <> R mr2) ->
+ correct_interf_instr live!!pc instr g ->
+ correct_alloc_instr live alloc pc instr.
+Proof.
+ intros pc instr ALL1 ALL2.
+ unfold correct_interf_instr, correct_alloc_instr;
+ destruct instr; auto.
+ destruct (is_move_operation o l); auto.
+ intros [A B]. split.
+ intros; red; intros.
+ unfold destroyed_at_call in H1.
+ generalize (list_in_map_inv R _ _ H1).
+ intros [mr [EQ IN]].
+ generalize (A r0 mr H IN H0). intro.
+ generalize (ALL2 _ _ H2). contradiction.
+ auto.
+Qed.
+
+Lemma regalloc_correct_1:
+ forall pc instr,
+ regalloc f live live0 env = Some alloc ->
+ f.(fn_code)!pc = Some instr ->
+ correct_alloc_instr live alloc pc instr.
+Proof.
+ intros. elim (regalloc_ok H); intros.
+ apply correct_interf_alloc_instr.
+ intros. rewrite H2. unfold allregs. red in H3.
+ elim (ordered_pair_charact r1 r2); intro.
+ apply alloc_of_coloring_correct_1. auto. rewrite H4 in H3; auto.
+ apply sym_not_equal.
+ apply alloc_of_coloring_correct_1. auto. rewrite H4 in H3; auto.
+ intros. rewrite H2. unfold allregs.
+ apply alloc_of_coloring_correct_2. auto. exact H3.
+ unfold g. apply interf_graph_correct_1. auto.
+Qed.
+
+Lemma regalloc_correct_2:
+ regalloc f live live0 env = Some alloc ->
+ list_norepet f.(fn_params) ->
+ list_norepet (List.map alloc f.(fn_params)).
+Proof.
+ intros. elim (regalloc_ok H); intros.
+ apply list_map_norepet; auto.
+ intros. rewrite H2. unfold allregs.
+ elim (ordered_pair_charact x y); intro.
+ apply alloc_of_coloring_correct_1. auto.
+ change OrderedReg.t with reg. rewrite <- H6.
+ change (interfere x y g). unfold g.
+ apply interf_graph_correct_2; auto.
+ apply sym_not_equal.
+ apply alloc_of_coloring_correct_1. auto.
+ change OrderedReg.t with reg. rewrite <- H6.
+ change (interfere x y g). unfold g.
+ apply interf_graph_correct_2; auto.
+Qed.
+
+Lemma regalloc_correct_3:
+ forall r1 r2,
+ regalloc f live live0 env = Some alloc ->
+ In r1 f.(fn_params) ->
+ Regset.mem r2 live0 = true ->
+ r1 <> r2 ->
+ alloc r1 <> alloc r2.
+Proof.
+ intros. elim (regalloc_ok H); intros.
+ rewrite H4; unfold allregs.
+ elim (ordered_pair_charact r1 r2); intro.
+ apply alloc_of_coloring_correct_1. auto.
+ change OrderedReg.t with reg. rewrite <- H5.
+ change (interfere r1 r2 g). unfold g.
+ apply interf_graph_correct_3; auto.
+ apply sym_not_equal.
+ apply alloc_of_coloring_correct_1. auto.
+ change OrderedReg.t with reg. rewrite <- H5.
+ change (interfere r1 r2 g). unfold g.
+ apply interf_graph_correct_3; auto.
+Qed.
+
+End REGALLOC_PROPERTIES.
diff --git a/backend/Constprop.v b/backend/Constprop.v
new file mode 100644
index 0000000..b1c5a2b
--- /dev/null
+++ b/backend/Constprop.v
@@ -0,0 +1,1032 @@
+(** Constant propagation over RTL. This is the first of the two
+ optimizations performed at RTL level. It proceeds by a standard
+ dataflow analysis and the corresponding code transformation. *)
+
+Require Import Coqlib.
+Require Import Maps.
+Require Import AST.
+Require Import Integers.
+Require Import Floats.
+Require Import Values.
+Require Import Globalenvs.
+Require Import Op.
+Require Import Registers.
+Require Import RTL.
+Require Import Lattice.
+Require Import Kildall.
+
+(** * Static analysis *)
+
+(** To each pseudo-register at each program point, the static analysis
+ associates a compile-time approximation taken from the following set. *)
+
+Inductive approx : Set :=
+ | Novalue: approx (** No value possible, code is unreachable. *)
+ | Unknown: approx (** All values are possible,
+ no compile-time information is available. *)
+ | I: int -> approx (** A known integer value. *)
+ | F: float -> approx (** A known floating-point value. *)
+ | S: ident -> int -> approx.
+ (** The value is the address of the given global
+ symbol plus the given integer offset. *)
+
+(** We equip this set of approximations with a semi-lattice structure.
+ The ordering is inclusion between the sets of values denoted by
+ the approximations. *)
+
+Module Approx <: SEMILATTICE_WITH_TOP.
+ Definition t := approx.
+ Lemma eq: forall (x y: t), {x=y} + {x<>y}.
+ Proof.
+ decide equality.
+ apply Int.eq_dec.
+ apply Float.eq_dec.
+ apply Int.eq_dec.
+ apply ident_eq.
+ Qed.
+ Definition ge (x y: t) : Prop :=
+ x = Unknown \/ y = Novalue \/ x = y.
+ Lemma ge_refl: forall x, ge x x.
+ Proof.
+ unfold ge; tauto.
+ Qed.
+ Lemma ge_trans: forall x y z, ge x y -> ge y z -> ge x z.
+ Proof.
+ unfold ge; intuition congruence.
+ Qed.
+ Definition bot := Novalue.
+ Definition top := Unknown.
+ Lemma ge_bot: forall x, ge x bot.
+ Proof.
+ unfold ge, bot; tauto.
+ Qed.
+ Lemma ge_top: forall x, ge top x.
+ Proof.
+ unfold ge, bot; tauto.
+ Qed.
+ Definition lub (x y: t) : t :=
+ if eq x y then x else
+ match x, y with
+ | Novalue, _ => y
+ | _, Novalue => x
+ | _, _ => Unknown
+ end.
+ Lemma lub_commut: forall x y, lub x y = lub y x.
+ Proof.
+ unfold lub; intros.
+ case (eq x y); case (eq y x); intros; try congruence.
+ destruct x; destruct y; auto.
+ Qed.
+ Lemma ge_lub_left: forall x y, ge (lub x y) x.
+ Proof.
+ unfold lub; intros.
+ case (eq x y); intro.
+ apply ge_refl.
+ destruct x; destruct y; unfold ge; tauto.
+ Qed.
+End Approx.
+
+Module D := LPMap Approx.
+
+(** We now define the abstract interpretations of conditions and operators
+ over this set of approximations. For instance, the abstract interpretation
+ of the operator [Oaddf] applied to two expressions [a] and [b] is
+ [F(Float.add f g)] if [a] and [b] have static approximations [Vfloat f]
+ and [Vfloat g] respectively, and [Unknown] otherwise.
+
+ The static approximations are defined by large pattern-matchings over
+ the approximations of the results. We write these matchings in the
+ indirect style described in file [Cmconstr] to avoid excessive
+ duplication of cases in proofs. *)
+
+(*
+Definition eval_static_condition (cond: condition) (vl: list approx) :=
+ match cond, vl with
+ | Ccomp c, I n1 :: I n2 :: nil => Some(Int.cmp c n1 n2)
+ | Ccompu c, I n1 :: I n2 :: nil => Some(Int.cmpu c n1 n2)
+ | Ccompimm c n, I n1 :: nil => Some(Int.cmp c n1 n)
+ | Ccompuimm c n, I n1 :: nil => Some(Int.cmpu c n1 n)
+ | Ccompf c, F n1 :: F n2 :: nil => Some(Float.cmp c n1 n2)
+ | Cnotcompf c, F n1 :: F n2 :: nil => Some(negb(Float.cmp c n1 n2))
+ | Cmaskzero n, I n1 :: nil => Some(Int.eq (Int.and n1 n) Int.zero)
+ | Cmasknotzero n, n1::nil => Some(negb(Int.eq (Int.and n1 n) Int.zero))
+ | _, _ => None
+ end.
+*)
+
+Inductive eval_static_condition_cases: forall (cond: condition) (vl: list approx), Set :=
+ | eval_static_condition_case1:
+ forall c n1 n2,
+ eval_static_condition_cases (Ccomp c) (I n1 :: I n2 :: nil)
+ | eval_static_condition_case2:
+ forall c n1 n2,
+ eval_static_condition_cases (Ccompu c) (I n1 :: I n2 :: nil)
+ | eval_static_condition_case3:
+ forall c n n1,
+ eval_static_condition_cases (Ccompimm c n) (I n1 :: nil)
+ | eval_static_condition_case4:
+ forall c n n1,
+ eval_static_condition_cases (Ccompuimm c n) (I n1 :: nil)
+ | eval_static_condition_case5:
+ forall c n1 n2,
+ eval_static_condition_cases (Ccompf c) (F n1 :: F n2 :: nil)
+ | eval_static_condition_case6:
+ forall c n1 n2,
+ eval_static_condition_cases (Cnotcompf c) (F n1 :: F n2 :: nil)
+ | eval_static_condition_case7:
+ forall n n1,
+ eval_static_condition_cases (Cmaskzero n) (I n1 :: nil)
+ | eval_static_condition_case8:
+ forall n n1,
+ eval_static_condition_cases (Cmasknotzero n) (I n1 :: nil)
+ | eval_static_condition_default:
+ forall (cond: condition) (vl: list approx),
+ eval_static_condition_cases cond vl.
+
+Definition eval_static_condition_match (cond: condition) (vl: list approx) :=
+ match cond as z1, vl as z2 return eval_static_condition_cases z1 z2 with
+ | Ccomp c, I n1 :: I n2 :: nil =>
+ eval_static_condition_case1 c n1 n2
+ | Ccompu c, I n1 :: I n2 :: nil =>
+ eval_static_condition_case2 c n1 n2
+ | Ccompimm c n, I n1 :: nil =>
+ eval_static_condition_case3 c n n1
+ | Ccompuimm c n, I n1 :: nil =>
+ eval_static_condition_case4 c n n1
+ | Ccompf c, F n1 :: F n2 :: nil =>
+ eval_static_condition_case5 c n1 n2
+ | Cnotcompf c, F n1 :: F n2 :: nil =>
+ eval_static_condition_case6 c n1 n2
+ | Cmaskzero n, I n1 :: nil =>
+ eval_static_condition_case7 n n1
+ | Cmasknotzero n, I n1 :: nil =>
+ eval_static_condition_case8 n n1
+ | cond, vl =>
+ eval_static_condition_default cond vl
+ end.
+
+Definition eval_static_condition (cond: condition) (vl: list approx) :=
+ match eval_static_condition_match cond vl with
+ | eval_static_condition_case1 c n1 n2 =>
+ Some(Int.cmp c n1 n2)
+ | eval_static_condition_case2 c n1 n2 =>
+ Some(Int.cmpu c n1 n2)
+ | eval_static_condition_case3 c n n1 =>
+ Some(Int.cmp c n1 n)
+ | eval_static_condition_case4 c n n1 =>
+ Some(Int.cmpu c n1 n)
+ | eval_static_condition_case5 c n1 n2 =>
+ Some(Float.cmp c n1 n2)
+ | eval_static_condition_case6 c n1 n2 =>
+ Some(negb(Float.cmp c n1 n2))
+ | eval_static_condition_case7 n n1 =>
+ Some(Int.eq (Int.and n1 n) Int.zero)
+ | eval_static_condition_case8 n n1 =>
+ Some(negb(Int.eq (Int.and n1 n) Int.zero))
+ | eval_static_condition_default cond vl =>
+ None
+ end.
+
+(*
+Definition eval_static_operation (op: operation) (vl: list approx) :=
+ match op, vl with
+ | Omove, v1::nil => v1
+ | Ointconst n, nil => I n
+ | Ofloatconst n, nil => F n
+ | Oaddrsymbol s n, nil => S s n
+ | Ocast8signed, I n1 :: nil => I(Int.cast8signed n)
+ | Ocast16signed, I n1 :: nil => I(Int.cast16signed n)
+ | Oadd, I n1 :: I n2 :: nil => I(Int.add n1 n2)
+ | Oadd, S s1 n1 :: I n2 :: nil => S s1 (Int.add n1 n2)
+ | Oaddimm n, I n1 :: nil => I (Int.add n1 n)
+ | Oaddimm n, S s1 n1 :: nil => S s1 (Int.add n1 n)
+ | Osub, I n1 :: I n2 :: nil => I(Int.sub n1 n2)
+ | Osub, S s1 n1 :: I n2 :: nil => S s1 (Int.sub n1 n2)
+ | Osubimm n, I n1 :: nil => I (Int.sub n n1)
+ | Omul, I n1 :: I n2 :: nil => I(Int.mul n1 n2)
+ | Omulimm n, I n1 :: nil => I(Int.mul n1 n)
+ | Odiv, I n1 :: I n2 :: nil => if Int.eq n2 Int.zero then Unknown else I(Int.divs n1 n2)
+ | Odivu, I n1 :: I n2 :: nil => if Int.eq n2 Int.zero then Unknown else I(Int.divu n1 n2)
+ | Oand, I n1 :: I n2 :: nil => I(Int.and n1 n2)
+ | Oandimm n, I n1 :: nil => I(Int.and n1 n)
+ | Oor, I n1 :: I n2 :: nil => I(Int.or n1 n2)
+ | Oorimm n, I n1 :: nil => I(Int.or n1 n)
+ | Oxor, I n1 :: I n2 :: nil => I(Int.xor n1 n2)
+ | Oxorimm n, I n1 :: nil => I(Int.xor n1 n)
+ | Onand, I n1 :: I n2 :: nil => I(Int.xor (Int.and n1 n2) Int.mone)
+ | Onor, I n1 :: I n2 :: nil => I(Int.xor (Int.or n1 n2) Int.mone)
+ | Onxor, I n1 :: I n2 :: nil => I(Int.xor (Int.xor n1 n2) Int.mone)
+ | Oshl, I n1 :: I n2 :: nil => if Int.ltu n2 (Int.repr 32) then I(Int.shl n1 n2) else Unknown
+ | Oshr, I n1 :: I n2 :: nil => if Int.ltu n2 (Int.repr 32) then I(Int.shr n1 n2) else Unknown
+ | Oshrimm n, I n1 :: nil => if Int.ltu n (Int.repr 32) then I(Int.shr n1 n) else Unknown
+ | Oshrximm n, I n1 :: nil => if Int.ltu n (Int.repr 32) then I(Int.shrx n1 n) else Unknown
+ | Oshru, I n1 :: I n2 :: nil => if Int.ltu n2 (Int.repr 32) then I(Int.shru n1 n2) else Unknown
+ | Orolm amount mask, I n1 :: nil => I(Int.rolm n1 amount mask)
+ | Onegf, F n1 :: nil => F(Float.neg n1)
+ | Oabsf, F n1 :: nil => F(Float.abs n1)
+ | Oaddf, F n1 :: F n2 :: nil => F(Float.add n1 n2)
+ | Osubf, F n1 :: F n2 :: nil => F(Float.sub n1 n2)
+ | Omulf, F n1 :: F n2 :: nil => F(Float.mul n1 n2)
+ | Odivf, F n1 :: F n2 :: nil => F(Float.div n1 n2)
+ | Omuladdf, F n1 :: F n2 :: F n3 :: nil => F(Float.add (Float.mul n1 n2) n3)
+ | Omulsubf, F n1 :: F n2 :: F n3 :: nil => F(Float.sub (Float.mul n1 n2) n3)
+ | Osingleoffloat, F n1 :: nil => F(Float.singleoffloat n1)
+ | Ointoffloat, F n1 :: nil => I(Float.intoffloat n1)
+ | Ofloatofint, I n1 :: nil => F(Float.floatofint n1)
+ | Ofloatofintu, I n1 :: nil => F(Float.floatofintu n1)
+ | Ocmp c, vl =>
+ match eval_static_condition c vl with
+ | None => Unknown
+ | Some b => I(if b then Int.one else Int.zero)
+ end
+ | _, _ => Unknown
+ end.
+*)
+
+Inductive eval_static_operation_cases: forall (op: operation) (vl: list approx), Set :=
+ | eval_static_operation_case1:
+ forall v1,
+ eval_static_operation_cases (Omove) (v1::nil)
+ | eval_static_operation_case2:
+ forall n,
+ eval_static_operation_cases (Ointconst n) (nil)
+ | eval_static_operation_case3:
+ forall n,
+ eval_static_operation_cases (Ofloatconst n) (nil)
+ | eval_static_operation_case4:
+ forall s n,
+ eval_static_operation_cases (Oaddrsymbol s n) (nil)
+ | eval_static_operation_case6:
+ forall n1,
+ eval_static_operation_cases (Ocast8signed) (I n1 :: nil)
+ | eval_static_operation_case7:
+ forall n1,
+ eval_static_operation_cases (Ocast16signed) (I n1 :: nil)
+ | eval_static_operation_case8:
+ forall n1 n2,
+ eval_static_operation_cases (Oadd) (I n1 :: I n2 :: nil)
+ | eval_static_operation_case9:
+ forall s1 n1 n2,
+ eval_static_operation_cases (Oadd) (S s1 n1 :: I n2 :: nil)
+ | eval_static_operation_case11:
+ forall n n1,
+ eval_static_operation_cases (Oaddimm n) (I n1 :: nil)
+ | eval_static_operation_case12:
+ forall n s1 n1,
+ eval_static_operation_cases (Oaddimm n) (S s1 n1 :: nil)
+ | eval_static_operation_case13:
+ forall n1 n2,
+ eval_static_operation_cases (Osub) (I n1 :: I n2 :: nil)
+ | eval_static_operation_case14:
+ forall s1 n1 n2,
+ eval_static_operation_cases (Osub) (S s1 n1 :: I n2 :: nil)
+ | eval_static_operation_case15:
+ forall n n1,
+ eval_static_operation_cases (Osubimm n) (I n1 :: nil)
+ | eval_static_operation_case16:
+ forall n1 n2,
+ eval_static_operation_cases (Omul) (I n1 :: I n2 :: nil)
+ | eval_static_operation_case17:
+ forall n n1,
+ eval_static_operation_cases (Omulimm n) (I n1 :: nil)
+ | eval_static_operation_case18:
+ forall n1 n2,
+ eval_static_operation_cases (Odiv) (I n1 :: I n2 :: nil)
+ | eval_static_operation_case19:
+ forall n1 n2,
+ eval_static_operation_cases (Odivu) (I n1 :: I n2 :: nil)
+ | eval_static_operation_case20:
+ forall n1 n2,
+ eval_static_operation_cases (Oand) (I n1 :: I n2 :: nil)
+ | eval_static_operation_case21:
+ forall n n1,
+ eval_static_operation_cases (Oandimm n) (I n1 :: nil)
+ | eval_static_operation_case22:
+ forall n1 n2,
+ eval_static_operation_cases (Oor) (I n1 :: I n2 :: nil)
+ | eval_static_operation_case23:
+ forall n n1,
+ eval_static_operation_cases (Oorimm n) (I n1 :: nil)
+ | eval_static_operation_case24:
+ forall n1 n2,
+ eval_static_operation_cases (Oxor) (I n1 :: I n2 :: nil)
+ | eval_static_operation_case25:
+ forall n n1,
+ eval_static_operation_cases (Oxorimm n) (I n1 :: nil)
+ | eval_static_operation_case26:
+ forall n1 n2,
+ eval_static_operation_cases (Onand) (I n1 :: I n2 :: nil)
+ | eval_static_operation_case27:
+ forall n1 n2,
+ eval_static_operation_cases (Onor) (I n1 :: I n2 :: nil)
+ | eval_static_operation_case28:
+ forall n1 n2,
+ eval_static_operation_cases (Onxor) (I n1 :: I n2 :: nil)
+ | eval_static_operation_case29:
+ forall n1 n2,
+ eval_static_operation_cases (Oshl) (I n1 :: I n2 :: nil)
+ | eval_static_operation_case30:
+ forall n1 n2,
+ eval_static_operation_cases (Oshr) (I n1 :: I n2 :: nil)
+ | eval_static_operation_case31:
+ forall n n1,
+ eval_static_operation_cases (Oshrimm n) (I n1 :: nil)
+ | eval_static_operation_case32:
+ forall n n1,
+ eval_static_operation_cases (Oshrximm n) (I n1 :: nil)
+ | eval_static_operation_case33:
+ forall n1 n2,
+ eval_static_operation_cases (Oshru) (I n1 :: I n2 :: nil)
+ | eval_static_operation_case34:
+ forall amount mask n1,
+ eval_static_operation_cases (Orolm amount mask) (I n1 :: nil)
+ | eval_static_operation_case35:
+ forall n1,
+ eval_static_operation_cases (Onegf) (F n1 :: nil)
+ | eval_static_operation_case36:
+ forall n1,
+ eval_static_operation_cases (Oabsf) (F n1 :: nil)
+ | eval_static_operation_case37:
+ forall n1 n2,
+ eval_static_operation_cases (Oaddf) (F n1 :: F n2 :: nil)
+ | eval_static_operation_case38:
+ forall n1 n2,
+ eval_static_operation_cases (Osubf) (F n1 :: F n2 :: nil)
+ | eval_static_operation_case39:
+ forall n1 n2,
+ eval_static_operation_cases (Omulf) (F n1 :: F n2 :: nil)
+ | eval_static_operation_case40:
+ forall n1 n2,
+ eval_static_operation_cases (Odivf) (F n1 :: F n2 :: nil)
+ | eval_static_operation_case41:
+ forall n1 n2 n3,
+ eval_static_operation_cases (Omuladdf) (F n1 :: F n2 :: F n3 :: nil)
+ | eval_static_operation_case42:
+ forall n1 n2 n3,
+ eval_static_operation_cases (Omulsubf) (F n1 :: F n2 :: F n3 :: nil)
+ | eval_static_operation_case43:
+ forall n1,
+ eval_static_operation_cases (Osingleoffloat) (F n1 :: nil)
+ | eval_static_operation_case44:
+ forall n1,
+ eval_static_operation_cases (Ointoffloat) (F n1 :: nil)
+ | eval_static_operation_case45:
+ forall n1,
+ eval_static_operation_cases (Ofloatofint) (I n1 :: nil)
+ | eval_static_operation_case46:
+ forall n1,
+ eval_static_operation_cases (Ofloatofintu) (I n1 :: nil)
+ | eval_static_operation_case47:
+ forall c vl,
+ eval_static_operation_cases (Ocmp c) (vl)
+ | eval_static_operation_default:
+ forall (op: operation) (vl: list approx),
+ eval_static_operation_cases op vl.
+
+Definition eval_static_operation_match (op: operation) (vl: list approx) :=
+ match op as z1, vl as z2 return eval_static_operation_cases z1 z2 with
+ | Omove, v1::nil =>
+ eval_static_operation_case1 v1
+ | Ointconst n, nil =>
+ eval_static_operation_case2 n
+ | Ofloatconst n, nil =>
+ eval_static_operation_case3 n
+ | Oaddrsymbol s n, nil =>
+ eval_static_operation_case4 s n
+ | Ocast8signed, I n1 :: nil =>
+ eval_static_operation_case6 n1
+ | Ocast16signed, I n1 :: nil =>
+ eval_static_operation_case7 n1
+ | Oadd, I n1 :: I n2 :: nil =>
+ eval_static_operation_case8 n1 n2
+ | Oadd, S s1 n1 :: I n2 :: nil =>
+ eval_static_operation_case9 s1 n1 n2
+ | Oaddimm n, I n1 :: nil =>
+ eval_static_operation_case11 n n1
+ | Oaddimm n, S s1 n1 :: nil =>
+ eval_static_operation_case12 n s1 n1
+ | Osub, I n1 :: I n2 :: nil =>
+ eval_static_operation_case13 n1 n2
+ | Osub, S s1 n1 :: I n2 :: nil =>
+ eval_static_operation_case14 s1 n1 n2
+ | Osubimm n, I n1 :: nil =>
+ eval_static_operation_case15 n n1
+ | Omul, I n1 :: I n2 :: nil =>
+ eval_static_operation_case16 n1 n2
+ | Omulimm n, I n1 :: nil =>
+ eval_static_operation_case17 n n1
+ | Odiv, I n1 :: I n2 :: nil =>
+ eval_static_operation_case18 n1 n2
+ | Odivu, I n1 :: I n2 :: nil =>
+ eval_static_operation_case19 n1 n2
+ | Oand, I n1 :: I n2 :: nil =>
+ eval_static_operation_case20 n1 n2
+ | Oandimm n, I n1 :: nil =>
+ eval_static_operation_case21 n n1
+ | Oor, I n1 :: I n2 :: nil =>
+ eval_static_operation_case22 n1 n2
+ | Oorimm n, I n1 :: nil =>
+ eval_static_operation_case23 n n1
+ | Oxor, I n1 :: I n2 :: nil =>
+ eval_static_operation_case24 n1 n2
+ | Oxorimm n, I n1 :: nil =>
+ eval_static_operation_case25 n n1
+ | Onand, I n1 :: I n2 :: nil =>
+ eval_static_operation_case26 n1 n2
+ | Onor, I n1 :: I n2 :: nil =>
+ eval_static_operation_case27 n1 n2
+ | Onxor, I n1 :: I n2 :: nil =>
+ eval_static_operation_case28 n1 n2
+ | Oshl, I n1 :: I n2 :: nil =>
+ eval_static_operation_case29 n1 n2
+ | Oshr, I n1 :: I n2 :: nil =>
+ eval_static_operation_case30 n1 n2
+ | Oshrimm n, I n1 :: nil =>
+ eval_static_operation_case31 n n1
+ | Oshrximm n, I n1 :: nil =>
+ eval_static_operation_case32 n n1
+ | Oshru, I n1 :: I n2 :: nil =>
+ eval_static_operation_case33 n1 n2
+ | Orolm amount mask, I n1 :: nil =>
+ eval_static_operation_case34 amount mask n1
+ | Onegf, F n1 :: nil =>
+ eval_static_operation_case35 n1
+ | Oabsf, F n1 :: nil =>
+ eval_static_operation_case36 n1
+ | Oaddf, F n1 :: F n2 :: nil =>
+ eval_static_operation_case37 n1 n2
+ | Osubf, F n1 :: F n2 :: nil =>
+ eval_static_operation_case38 n1 n2
+ | Omulf, F n1 :: F n2 :: nil =>
+ eval_static_operation_case39 n1 n2
+ | Odivf, F n1 :: F n2 :: nil =>
+ eval_static_operation_case40 n1 n2
+ | Omuladdf, F n1 :: F n2 :: F n3 :: nil =>
+ eval_static_operation_case41 n1 n2 n3
+ | Omulsubf, F n1 :: F n2 :: F n3 :: nil =>
+ eval_static_operation_case42 n1 n2 n3
+ | Osingleoffloat, F n1 :: nil =>
+ eval_static_operation_case43 n1
+ | Ointoffloat, F n1 :: nil =>
+ eval_static_operation_case44 n1
+ | Ofloatofint, I n1 :: nil =>
+ eval_static_operation_case45 n1
+ | Ofloatofintu, I n1 :: nil =>
+ eval_static_operation_case46 n1
+ | Ocmp c, vl =>
+ eval_static_operation_case47 c vl
+ | op, vl =>
+ eval_static_operation_default op vl
+ end.
+
+Definition eval_static_operation (op: operation) (vl: list approx) :=
+ match eval_static_operation_match op vl with
+ | eval_static_operation_case1 v1 =>
+ v1
+ | eval_static_operation_case2 n =>
+ I n
+ | eval_static_operation_case3 n =>
+ F n
+ | eval_static_operation_case4 s n =>
+ S s n
+ | eval_static_operation_case6 n1 =>
+ I(Int.cast8signed n1)
+ | eval_static_operation_case7 n1 =>
+ I(Int.cast16signed n1)
+ | eval_static_operation_case8 n1 n2 =>
+ I(Int.add n1 n2)
+ | eval_static_operation_case9 s1 n1 n2 =>
+ S s1 (Int.add n1 n2)
+ | eval_static_operation_case11 n n1 =>
+ I (Int.add n1 n)
+ | eval_static_operation_case12 n s1 n1 =>
+ S s1 (Int.add n1 n)
+ | eval_static_operation_case13 n1 n2 =>
+ I(Int.sub n1 n2)
+ | eval_static_operation_case14 s1 n1 n2 =>
+ S s1 (Int.sub n1 n2)
+ | eval_static_operation_case15 n n1 =>
+ I (Int.sub n n1)
+ | eval_static_operation_case16 n1 n2 =>
+ I(Int.mul n1 n2)
+ | eval_static_operation_case17 n n1 =>
+ I(Int.mul n1 n)
+ | eval_static_operation_case18 n1 n2 =>
+ if Int.eq n2 Int.zero then Unknown else I(Int.divs n1 n2)
+ | eval_static_operation_case19 n1 n2 =>
+ if Int.eq n2 Int.zero then Unknown else I(Int.divu n1 n2)
+ | eval_static_operation_case20 n1 n2 =>
+ I(Int.and n1 n2)
+ | eval_static_operation_case21 n n1 =>
+ I(Int.and n1 n)
+ | eval_static_operation_case22 n1 n2 =>
+ I(Int.or n1 n2)
+ | eval_static_operation_case23 n n1 =>
+ I(Int.or n1 n)
+ | eval_static_operation_case24 n1 n2 =>
+ I(Int.xor n1 n2)
+ | eval_static_operation_case25 n n1 =>
+ I(Int.xor n1 n)
+ | eval_static_operation_case26 n1 n2 =>
+ I(Int.xor (Int.and n1 n2) Int.mone)
+ | eval_static_operation_case27 n1 n2 =>
+ I(Int.xor (Int.or n1 n2) Int.mone)
+ | eval_static_operation_case28 n1 n2 =>
+ I(Int.xor (Int.xor n1 n2) Int.mone)
+ | eval_static_operation_case29 n1 n2 =>
+ if Int.ltu n2 (Int.repr 32) then I(Int.shl n1 n2) else Unknown
+ | eval_static_operation_case30 n1 n2 =>
+ if Int.ltu n2 (Int.repr 32) then I(Int.shr n1 n2) else Unknown
+ | eval_static_operation_case31 n n1 =>
+ if Int.ltu n (Int.repr 32) then I(Int.shr n1 n) else Unknown
+ | eval_static_operation_case32 n n1 =>
+ if Int.ltu n (Int.repr 32) then I(Int.shrx n1 n) else Unknown
+ | eval_static_operation_case33 n1 n2 =>
+ if Int.ltu n2 (Int.repr 32) then I(Int.shru n1 n2) else Unknown
+ | eval_static_operation_case34 amount mask n1 =>
+ I(Int.rolm n1 amount mask)
+ | eval_static_operation_case35 n1 =>
+ F(Float.neg n1)
+ | eval_static_operation_case36 n1 =>
+ F(Float.abs n1)
+ | eval_static_operation_case37 n1 n2 =>
+ F(Float.add n1 n2)
+ | eval_static_operation_case38 n1 n2 =>
+ F(Float.sub n1 n2)
+ | eval_static_operation_case39 n1 n2 =>
+ F(Float.mul n1 n2)
+ | eval_static_operation_case40 n1 n2 =>
+ F(Float.div n1 n2)
+ | eval_static_operation_case41 n1 n2 n3 =>
+ F(Float.add (Float.mul n1 n2) n3)
+ | eval_static_operation_case42 n1 n2 n3 =>
+ F(Float.sub (Float.mul n1 n2) n3)
+ | eval_static_operation_case43 n1 =>
+ F(Float.singleoffloat n1)
+ | eval_static_operation_case44 n1 =>
+ I(Float.intoffloat n1)
+ | eval_static_operation_case45 n1 =>
+ F(Float.floatofint n1)
+ | eval_static_operation_case46 n1 =>
+ F(Float.floatofintu n1)
+ | eval_static_operation_case47 c vl =>
+ match eval_static_condition c vl with
+ | None => Unknown
+ | Some b => I(if b then Int.one else Int.zero)
+ end
+ | eval_static_operation_default op vl =>
+ Unknown
+ end.
+
+(** The transfer function for the dataflow analysis is straightforward:
+ for [Iop] instructions, we set the approximation of the destination
+ register to the result of executing abstractly the operation;
+ for [Iload] and [Icall], we set the approximation of the destination
+ to [Unknown]. *)
+
+Definition approx_regs (rl: list reg) (approx: D.t) :=
+ List.map (fun r => D.get r approx) rl.
+
+Definition transfer (f: function) (pc: node) (before: D.t) :=
+ match f.(fn_code)!pc with
+ | None => before
+ | Some i =>
+ match i with
+ | Inop s =>
+ before
+ | Iop op args res s =>
+ let a := eval_static_operation op (approx_regs args before) in
+ D.set res a before
+ | Iload chunk addr args dst s =>
+ D.set dst Unknown before
+ | Istore chunk addr args src s =>
+ before
+ | Icall sig ros args res s =>
+ D.set res Unknown before
+ | Icond cond args ifso ifnot =>
+ before
+ | Ireturn optarg =>
+ before
+ end
+ end.
+
+(** The static analysis itself is then an instantiation of Kildall's
+ generic solver for forward dataflow inequations. [analyze f]
+ returns a mapping from program points to mappings of pseudo-registers
+ to approximations. It can fail to reach a fixpoint in a reasonable
+ number of iterations, in which case [None] is returned. *)
+
+Module DS := Dataflow_Solver D.
+
+Definition analyze (f: RTL.function): option (PMap.t D.t) :=
+ DS.fixpoint (successors f) f.(fn_nextpc) (transfer f)
+ ((f.(fn_entrypoint), D.top) :: nil).
+
+(** * Code transformation *)
+
+(** ** Operator strength reduction *)
+
+(** We now define auxiliary functions for strength reduction of
+ operators and addressing modes: replacing an operator with a cheaper
+ one if some of its arguments are statically known. These are again
+ large pattern-matchings expressed in indirect style. *)
+
+Section STRENGTH_REDUCTION.
+
+Variable approx: D.t.
+
+Definition intval (r: reg) : option int :=
+ match D.get r approx with I n => Some n | _ => None end.
+
+Inductive cond_strength_reduction_cases: condition -> list reg -> Set :=
+ | csr_case1:
+ forall c r1 r2,
+ cond_strength_reduction_cases (Ccomp c) (r1 :: r2 :: nil)
+ | csr_case2:
+ forall c r1 r2,
+ cond_strength_reduction_cases (Ccompu c) (r1 :: r2 :: nil)
+ | csr_default:
+ forall c rl,
+ cond_strength_reduction_cases c rl.
+
+Definition cond_strength_reduction_match (cond: condition) (rl: list reg) :=
+ match cond as x, rl as y return cond_strength_reduction_cases x y with
+ | Ccomp c, r1 :: r2 :: nil =>
+ csr_case1 c r1 r2
+ | Ccompu c, r1 :: r2 :: nil =>
+ csr_case2 c r1 r2
+ | cond, rl =>
+ csr_default cond rl
+ end.
+
+Definition cond_strength_reduction
+ (cond: condition) (args: list reg) : condition * list reg :=
+ match cond_strength_reduction_match cond args with
+ | csr_case1 c r1 r2 =>
+ match intval r1, intval r2 with
+ | Some n, _ =>
+ (Ccompimm (swap_comparison c) n, r2 :: nil)
+ | _, Some n =>
+ (Ccompimm c n, r1 :: nil)
+ | _, _ =>
+ (cond, args)
+ end
+ | csr_case2 c r1 r2 =>
+ match intval r1, intval r2 with
+ | Some n, _ =>
+ (Ccompuimm (swap_comparison c) n, r2 :: nil)
+ | _, Some n =>
+ (Ccompuimm c n, r1 :: nil)
+ | _, _ =>
+ (cond, args)
+ end
+ | csr_default cond args =>
+ (cond, args)
+ end.
+
+Definition make_addimm (n: int) (r: reg) :=
+ if Int.eq n Int.zero
+ then (Omove, r :: nil)
+ else (Oaddimm n, r :: nil).
+
+Definition make_shlimm (n: int) (r: reg) :=
+ if Int.eq n Int.zero
+ then (Omove, r :: nil)
+ else (Orolm n (Int.shl Int.mone n), r :: nil).
+
+Definition make_shrimm (n: int) (r: reg) :=
+ if Int.eq n Int.zero
+ then (Omove, r :: nil)
+ else (Oshrimm n, r :: nil).
+
+Definition make_shruimm (n: int) (r: reg) :=
+ if Int.eq n Int.zero
+ then (Omove, r :: nil)
+ else (Orolm (Int.sub (Int.repr 32) n) (Int.shru Int.mone n), r :: nil).
+
+Definition make_mulimm (n: int) (r: reg) :=
+ if Int.eq n Int.zero then
+ (Ointconst Int.zero, nil)
+ else if Int.eq n Int.one then
+ (Omove, r :: nil)
+ else
+ match Int.is_power2 n with
+ | Some l => make_shlimm l r
+ | None => (Omulimm n, r :: nil)
+ end.
+
+Definition make_andimm (n: int) (r: reg) :=
+ if Int.eq n Int.zero
+ then (Ointconst Int.zero, nil)
+ else if Int.eq n Int.mone then (Omove, r :: nil)
+ else (Oandimm n, r :: nil).
+
+Definition make_orimm (n: int) (r: reg) :=
+ if Int.eq n Int.zero then (Omove, r :: nil)
+ else if Int.eq n Int.mone then (Ointconst Int.mone, nil)
+ else (Oorimm n, r :: nil).
+
+Definition make_xorimm (n: int) (r: reg) :=
+ if Int.eq n Int.zero
+ then (Omove, r :: nil)
+ else (Oxorimm n, r :: nil).
+
+Inductive op_strength_reduction_cases: operation -> list reg -> Set :=
+ | op_strength_reduction_case1:
+ forall (r1: reg) (r2: reg),
+ op_strength_reduction_cases Oadd (r1 :: r2 :: nil)
+ | op_strength_reduction_case2:
+ forall (r1: reg) (r2: reg),
+ op_strength_reduction_cases Osub (r1 :: r2 :: nil)
+ | op_strength_reduction_case3:
+ forall (r1: reg) (r2: reg),
+ op_strength_reduction_cases Omul (r1 :: r2 :: nil)
+ | op_strength_reduction_case4:
+ forall (r1: reg) (r2: reg),
+ op_strength_reduction_cases Odiv (r1 :: r2 :: nil)
+ | op_strength_reduction_case5:
+ forall (r1: reg) (r2: reg),
+ op_strength_reduction_cases Odivu (r1 :: r2 :: nil)
+ | op_strength_reduction_case6:
+ forall (r1: reg) (r2: reg),
+ op_strength_reduction_cases Oand (r1 :: r2 :: nil)
+ | op_strength_reduction_case7:
+ forall (r1: reg) (r2: reg),
+ op_strength_reduction_cases Oor (r1 :: r2 :: nil)
+ | op_strength_reduction_case8:
+ forall (r1: reg) (r2: reg),
+ op_strength_reduction_cases Oxor (r1 :: r2 :: nil)
+ | op_strength_reduction_case9:
+ forall (r1: reg) (r2: reg),
+ op_strength_reduction_cases Oshl (r1 :: r2 :: nil)
+ | op_strength_reduction_case10:
+ forall (r1: reg) (r2: reg),
+ op_strength_reduction_cases Oshr (r1 :: r2 :: nil)
+ | op_strength_reduction_case11:
+ forall (r1: reg) (r2: reg),
+ op_strength_reduction_cases Oshru (r1 :: r2 :: nil)
+ | op_strength_reduction_case12:
+ forall (c: condition) (rl: list reg),
+ op_strength_reduction_cases (Ocmp c) rl
+ | op_strength_reduction_default:
+ forall (op: operation) (args: list reg),
+ op_strength_reduction_cases op args.
+
+Definition op_strength_reduction_match (op: operation) (args: list reg) :=
+ match op as z1, args as z2 return op_strength_reduction_cases z1 z2 with
+ | Oadd, r1 :: r2 :: nil =>
+ op_strength_reduction_case1 r1 r2
+ | Osub, r1 :: r2 :: nil =>
+ op_strength_reduction_case2 r1 r2
+ | Omul, r1 :: r2 :: nil =>
+ op_strength_reduction_case3 r1 r2
+ | Odiv, r1 :: r2 :: nil =>
+ op_strength_reduction_case4 r1 r2
+ | Odivu, r1 :: r2 :: nil =>
+ op_strength_reduction_case5 r1 r2
+ | Oand, r1 :: r2 :: nil =>
+ op_strength_reduction_case6 r1 r2
+ | Oor, r1 :: r2 :: nil =>
+ op_strength_reduction_case7 r1 r2
+ | Oxor, r1 :: r2 :: nil =>
+ op_strength_reduction_case8 r1 r2
+ | Oshl, r1 :: r2 :: nil =>
+ op_strength_reduction_case9 r1 r2
+ | Oshr, r1 :: r2 :: nil =>
+ op_strength_reduction_case10 r1 r2
+ | Oshru, r1 :: r2 :: nil =>
+ op_strength_reduction_case11 r1 r2
+ | Ocmp c, rl =>
+ op_strength_reduction_case12 c rl
+ | op, args =>
+ op_strength_reduction_default op args
+ end.
+
+Definition op_strength_reduction (op: operation) (args: list reg) :=
+ match op_strength_reduction_match op args with
+ | op_strength_reduction_case1 r1 r2 => (* Oadd *)
+ match intval r1, intval r2 with
+ | Some n, _ => make_addimm n r2
+ | _, Some n => make_addimm n r1
+ | _, _ => (op, args)
+ end
+ | op_strength_reduction_case2 r1 r2 => (* Osub *)
+ match intval r1, intval r2 with
+ | Some n, _ => (Osubimm n, r2 :: nil)
+ | _, Some n => make_addimm (Int.neg n) r1
+ | _, _ => (op, args)
+ end
+ | op_strength_reduction_case3 r1 r2 => (* Omul *)
+ match intval r1, intval r2 with
+ | Some n, _ => make_mulimm n r2
+ | _, Some n => make_mulimm n r1
+ | _, _ => (op, args)
+ end
+ | op_strength_reduction_case4 r1 r2 => (* Odiv *)
+ match intval r2 with
+ | Some n =>
+ match Int.is_power2 n with
+ | Some l => (Oshrximm l, r1 :: nil)
+ | None => (op, args)
+ end
+ | None =>
+ (op, args)
+ end
+ | op_strength_reduction_case5 r1 r2 => (* Odivu *)
+ match intval r2 with
+ | Some n =>
+ match Int.is_power2 n with
+ | Some l => make_shruimm l r1
+ | None => (op, args)
+ end
+ | None =>
+ (op, args)
+ end
+ | op_strength_reduction_case6 r1 r2 => (* Oand *)
+ match intval r1, intval r2 with
+ | Some n, _ => make_andimm n r2
+ | _, Some n => make_andimm n r1
+ | _, _ => (op, args)
+ end
+ | op_strength_reduction_case7 r1 r2 => (* Oor *)
+ match intval r1, intval r2 with
+ | Some n, _ => make_orimm n r2
+ | _, Some n => make_orimm n r1
+ | _, _ => (op, args)
+ end
+ | op_strength_reduction_case8 r1 r2 => (* Oxor *)
+ match intval r1, intval r2 with
+ | Some n, _ => make_xorimm n r2
+ | _, Some n => make_xorimm n r1
+ | _, _ => (op, args)
+ end
+ | op_strength_reduction_case9 r1 r2 => (* Oshl *)
+ match intval r2 with
+ | Some n =>
+ if Int.ltu n (Int.repr 32)
+ then make_shlimm n r1
+ else (op, args)
+ | _ => (op, args)
+ end
+ | op_strength_reduction_case10 r1 r2 => (* Oshr *)
+ match intval r2 with
+ | Some n =>
+ if Int.ltu n (Int.repr 32)
+ then make_shrimm n r1
+ else (op, args)
+ | _ => (op, args)
+ end
+ | op_strength_reduction_case11 r1 r2 => (* Oshru *)
+ match intval r2 with
+ | Some n =>
+ if Int.ltu n (Int.repr 32)
+ then make_shruimm n r1
+ else (op, args)
+ | _ => (op, args)
+ end
+ | op_strength_reduction_case12 c args => (* Ocmp *)
+ let (c', args') := cond_strength_reduction c args in
+ (Ocmp c', args')
+ | op_strength_reduction_default op args => (* default *)
+ (op, args)
+ end.
+
+Inductive addr_strength_reduction_cases: forall (addr: addressing) (args: list reg), Set :=
+ | addr_strength_reduction_case1:
+ forall (r1: reg) (r2: reg),
+ addr_strength_reduction_cases (Aindexed2) (r1 :: r2 :: nil)
+ | addr_strength_reduction_case2:
+ forall (symb: ident) (ofs: int) (r1: reg),
+ addr_strength_reduction_cases (Abased symb ofs) (r1 :: nil)
+ | addr_strength_reduction_case3:
+ forall n r1,
+ addr_strength_reduction_cases (Aindexed n) (r1 :: nil)
+ | addr_strength_reduction_default:
+ forall (addr: addressing) (args: list reg),
+ addr_strength_reduction_cases addr args.
+
+Definition addr_strength_reduction_match (addr: addressing) (args: list reg) :=
+ match addr as z1, args as z2 return addr_strength_reduction_cases z1 z2 with
+ | Aindexed2, r1 :: r2 :: nil =>
+ addr_strength_reduction_case1 r1 r2
+ | Abased symb ofs, r1 :: nil =>
+ addr_strength_reduction_case2 symb ofs r1
+ | Aindexed n, r1 :: nil =>
+ addr_strength_reduction_case3 n r1
+ | addr, args =>
+ addr_strength_reduction_default addr args
+ end.
+
+Definition addr_strength_reduction (addr: addressing) (args: list reg) :=
+ match addr_strength_reduction_match addr args with
+ | addr_strength_reduction_case1 r1 r2 => (* Aindexed2 *)
+ match D.get r1 approx, D.get r2 approx with
+ | S symb n1, I n2 => (Aglobal symb (Int.add n1 n2), nil)
+ | S symb n1, _ => (Abased symb n1, r2 :: nil)
+ | I n1, S symb n2 => (Aglobal symb (Int.add n1 n2), nil)
+ | I n1, _ => (Aindexed n1, r2 :: nil)
+ | _, S symb n2 => (Abased symb n2, r1 :: nil)
+ | _, I n2 => (Aindexed n2, r1 :: nil)
+ | _, _ => (addr, args)
+ end
+ | addr_strength_reduction_case2 symb ofs r1 => (* Abased *)
+ match intval r1 with
+ | Some n => (Aglobal symb (Int.add ofs n), nil)
+ | _ => (addr, args)
+ end
+ | addr_strength_reduction_case3 n r1 => (* Aindexed *)
+ match D.get r1 approx with
+ | S symb ofs => (Aglobal symb (Int.add ofs n), nil)
+ | _ => (addr, args)
+ end
+ | addr_strength_reduction_default addr args => (* default *)
+ (addr, args)
+ end.
+
+End STRENGTH_REDUCTION.
+
+(** ** Code transformation *)
+
+(** The code transformation proceeds instruction by instruction.
+ Operators whose arguments are all statically known are turned
+ into ``load integer constant'', ``load float constant'' or
+ ``load symbol address'' operations. Operators for which some
+ but not all arguments are known are subject to strength reduction,
+ and similarly for the addressing modes of load and store instructions.
+ Other instructions are unchanged. *)
+
+Definition transf_instr (approx: D.t) (instr: instruction) :=
+ match instr with
+ | Iop op args res s =>
+ match eval_static_operation op (approx_regs args approx) with
+ | I n =>
+ Iop (Ointconst n) nil res s
+ | F n =>
+ Iop (Ofloatconst n) nil res s
+ | S symb ofs =>
+ Iop (Oaddrsymbol symb ofs) nil res s
+ | _ =>
+ let (op', args') := op_strength_reduction approx op args in
+ Iop op' args' res s
+ end
+ | Iload chunk addr args dst s =>
+ let (addr', args') := addr_strength_reduction approx addr args in
+ Iload chunk addr' args' dst s
+ | Istore chunk addr args src s =>
+ let (addr', args') := addr_strength_reduction approx addr args in
+ Istore chunk addr' args' src s
+ | Icall sig ros args res s =>
+ let ros' :=
+ match ros with
+ | inl r =>
+ match D.get r approx with
+ | S symb ofs => if Int.eq ofs Int.zero then inr _ symb else ros
+ | _ => ros
+ end
+ | inr s => ros
+ end in
+ Icall sig ros' args res s
+ | Icond cond args s1 s2 =>
+ match eval_static_condition cond (approx_regs args approx) with
+ | Some b =>
+ if b then Inop s1 else Inop s2
+ | None =>
+ let (cond', args') := cond_strength_reduction approx cond args in
+ Icond cond' args' s1 s2
+ end
+ | _ =>
+ instr
+ end.
+
+Definition transf_code (approxs: PMap.t D.t) (instrs: code) : code :=
+ PTree.map (fun pc instr => transf_instr approxs!!pc instr) instrs.
+
+Lemma transf_code_wf:
+ forall f approxs,
+ (forall pc, Plt pc f.(fn_nextpc) \/ f.(fn_code)!pc = None) ->
+ (forall pc, Plt pc f.(fn_nextpc)
+ \/ (transf_code approxs f.(fn_code))!pc = None).
+Proof.
+ intros.
+ elim (H pc); intro.
+ left; auto.
+ right. unfold transf_code. rewrite PTree.gmap.
+ unfold option_map; rewrite H0. reflexivity.
+Qed.
+
+Definition transf_function (f: function) : function :=
+ match analyze f with
+ | None => f
+ | Some approxs =>
+ mkfunction
+ f.(fn_sig)
+ f.(fn_params)
+ f.(fn_stacksize)
+ (transf_code approxs f.(fn_code))
+ f.(fn_entrypoint)
+ f.(fn_nextpc)
+ (transf_code_wf f approxs f.(fn_code_wf))
+ end.
+
+Definition transf_program (p: program) : program :=
+ transform_program transf_function p.
diff --git a/backend/Constpropproof.v b/backend/Constpropproof.v
new file mode 100644
index 0000000..080aa74
--- /dev/null
+++ b/backend/Constpropproof.v
@@ -0,0 +1,883 @@
+(** Correctness proof for constant propagation. *)
+
+Require Import Coqlib.
+Require Import Maps.
+Require Import AST.
+Require Import Integers.
+Require Import Floats.
+Require Import Values.
+Require Import Mem.
+Require Import Globalenvs.
+Require Import Op.
+Require Import Registers.
+Require Import RTL.
+Require Import Lattice.
+Require Import Kildall.
+Require Import Constprop.
+
+(** * Correctness of the static analysis *)
+
+Section ANALYSIS.
+
+Variable ge: genv.
+
+(** We first show that the dataflow analysis is correct with respect
+ to the dynamic semantics: the approximations (sets of values)
+ of a register at a program point predicted by the static analysis
+ are a superset of the values actually encountered during concrete
+ executions. We formalize this correspondence between run-time values and
+ compile-time approximations by the following predicate. *)
+
+Definition val_match_approx (a: approx) (v: val) : Prop :=
+ match a with
+ | Unknown => True
+ | I p => v = Vint p
+ | F p => v = Vfloat p
+ | S symb ofs => exists b, Genv.find_symbol ge symb = Some b /\ v = Vptr b ofs
+ | _ => False
+ end.
+
+Definition regs_match_approx (a: D.t) (rs: regset) : Prop :=
+ forall r, val_match_approx (D.get r a) rs#r.
+
+Lemma val_match_approx_increasing:
+ forall a1 a2 v,
+ Approx.ge a1 a2 -> val_match_approx a2 v -> val_match_approx a1 v.
+Proof.
+ intros until v.
+ intros [A|[B|C]].
+ subst a1. simpl. auto.
+ subst a2. simpl. tauto.
+ subst a2. auto.
+Qed.
+
+Lemma regs_match_approx_increasing:
+ forall a1 a2 rs,
+ D.ge a1 a2 -> regs_match_approx a2 rs -> regs_match_approx a1 rs.
+Proof.
+ unfold D.ge, regs_match_approx. intros.
+ apply val_match_approx_increasing with (D.get r a2); auto.
+Qed.
+
+Lemma regs_match_approx_update:
+ forall ra rs a v r,
+ val_match_approx a v ->
+ regs_match_approx ra rs ->
+ regs_match_approx (D.set r a ra) (rs#r <- v).
+Proof.
+ intros; red; intros. rewrite Regmap.gsspec.
+ case (peq r0 r); intro.
+ subst r0. rewrite D.gss. auto.
+ rewrite D.gso; auto.
+Qed.
+
+Inductive val_list_match_approx: list approx -> list val -> Prop :=
+ | vlma_nil:
+ val_list_match_approx nil nil
+ | vlma_cons:
+ forall a al v vl,
+ val_match_approx a v ->
+ val_list_match_approx al vl ->
+ val_list_match_approx (a :: al) (v :: vl).
+
+Lemma approx_regs_val_list:
+ forall ra rs rl,
+ regs_match_approx ra rs ->
+ val_list_match_approx (approx_regs rl ra) rs##rl.
+Proof.
+ induction rl; simpl; intros.
+ constructor.
+ constructor. apply H. auto.
+Qed.
+
+Ltac SimplVMA :=
+ match goal with
+ | H: (val_match_approx (I _) ?v) |- _ =>
+ simpl in H; (try subst v); SimplVMA
+ | H: (val_match_approx (F _) ?v) |- _ =>
+ simpl in H; (try subst v); SimplVMA
+ | H: (val_match_approx (S _ _) ?v) |- _ =>
+ simpl in H;
+ (try (elim H;
+ let b := fresh "b" in let A := fresh in let B := fresh in
+ (intros b [A B]; subst v; clear H)));
+ SimplVMA
+ | _ =>
+ idtac
+ end.
+
+Ltac InvVLMA :=
+ match goal with
+ | H: (val_list_match_approx nil ?vl) |- _ =>
+ inversion H
+ | H: (val_list_match_approx (?a :: ?al) ?vl) |- _ =>
+ inversion H; SimplVMA; InvVLMA
+ | _ =>
+ idtac
+ end.
+
+(** We then show that [eval_static_operation] is a correct abstract
+ interpretations of [eval_operation]: if the concrete arguments match
+ the given approximations, the concrete results match the
+ approximations returned by [eval_static_operation]. *)
+
+Lemma eval_static_condition_correct:
+ forall cond al vl b,
+ val_list_match_approx al vl ->
+ eval_static_condition cond al = Some b ->
+ eval_condition cond vl = Some b.
+Proof.
+ intros until b.
+ unfold eval_static_condition.
+ case (eval_static_condition_match cond al); intros;
+ InvVLMA; simpl; congruence.
+Qed.
+
+Lemma eval_static_operation_correct:
+ forall op sp al vl v,
+ val_list_match_approx al vl ->
+ eval_operation ge sp op vl = Some v ->
+ val_match_approx (eval_static_operation op al) v.
+Proof.
+ intros until v.
+ unfold eval_static_operation.
+ case (eval_static_operation_match op al); intros;
+ InvVLMA; simpl in *; FuncInv; try congruence.
+
+ replace v with v0. auto. congruence.
+
+ destruct (Genv.find_symbol ge s). exists b. intuition congruence.
+ congruence.
+
+ exists b. split. auto. congruence.
+ exists b. split. auto. congruence.
+ exists b. split. auto. congruence.
+
+ replace n2 with i0. destruct (Int.eq i0 Int.zero).
+ discriminate. injection H0; intro; subst v. simpl. congruence. congruence.
+
+ replace n2 with i0. destruct (Int.eq i0 Int.zero).
+ discriminate. injection H0; intro; subst v. simpl. congruence. congruence.
+
+ subst v. unfold Int.not. congruence.
+ subst v. unfold Int.not. congruence.
+ subst v. unfold Int.not. congruence.
+
+ replace n2 with i0. destruct (Int.ltu i0 (Int.repr 32)).
+ injection H0; intro; subst v. simpl. congruence. discriminate. congruence.
+
+ replace n2 with i0. destruct (Int.ltu i0 (Int.repr 32)).
+ injection H0; intro; subst v. simpl. congruence. discriminate. congruence.
+
+ destruct (Int.ltu n (Int.repr 32)).
+ injection H0; intro; subst v. simpl. congruence. discriminate.
+
+ destruct (Int.ltu n (Int.repr 32)).
+ injection H0; intro; subst v. simpl. congruence. discriminate.
+
+ replace n2 with i0. destruct (Int.ltu i0 (Int.repr 32)).
+ injection H0; intro; subst v. simpl. congruence. discriminate. congruence.
+
+ caseEq (eval_static_condition c vl0).
+ intros. generalize (eval_static_condition_correct _ _ _ _ H H1).
+ intro. rewrite H2 in H0.
+ destruct b; injection H0; intro; subst v; simpl; auto.
+ intros; simpl; auto.
+
+ auto.
+Qed.
+
+(** The correctness of the transfer function follows: if the register
+ state before a transition matches the static approximations at that
+ program point, the register state after that transition matches
+ the static approximation returned by the transfer function. *)
+
+Lemma transfer_correct:
+ forall f c sp pc rs m pc' rs' m' ra,
+ exec_instr ge c sp pc rs m pc' rs' m' ->
+ c = f.(fn_code) ->
+ regs_match_approx ra rs ->
+ regs_match_approx (transfer f pc ra) rs'.
+Proof.
+ induction 1; intros; subst c; unfold transfer; rewrite H; auto.
+ (* Iop *)
+ apply regs_match_approx_update.
+ apply eval_static_operation_correct with sp rs##args.
+ eapply approx_regs_val_list. auto. auto. auto.
+ (* Iload *)
+ apply regs_match_approx_update; auto. simpl; auto.
+ (* Icall *)
+ apply regs_match_approx_update; auto. simpl; auto.
+Qed.
+
+(** The correctness of the static analysis follows from the results
+ above and the fact that the result of the static analysis is
+ a solution of the forward dataflow inequations. *)
+
+Lemma analyze_correct_1:
+ forall f approxs,
+ analyze f = Some approxs ->
+ forall c sp pc rs m pc' rs' m',
+ exec_instr ge c sp pc rs m pc' rs' m' ->
+ c = f.(fn_code) ->
+ regs_match_approx approxs!!pc rs ->
+ regs_match_approx approxs!!pc' rs'.
+Proof.
+ intros.
+ apply regs_match_approx_increasing with (transfer f pc approxs!!pc).
+ eapply DS.fixpoint_solution.
+ unfold analyze in H. eexact H.
+ elim (fn_code_wf f pc); intro. auto.
+ generalize (exec_instr_present _ _ _ _ _ _ _ _ _ H0).
+ rewrite H1. intro. contradiction.
+ eapply successors_correct. rewrite <- H1. eauto.
+ eapply transfer_correct; eauto.
+Qed.
+
+Lemma analyze_correct_2:
+ forall f approxs,
+ analyze f = Some approxs ->
+ forall c sp pc rs m pc' rs' m',
+ exec_instrs ge c sp pc rs m pc' rs' m' ->
+ c = f.(fn_code) ->
+ regs_match_approx approxs!!pc rs ->
+ regs_match_approx approxs!!pc' rs'.
+Proof.
+ intros f approxs ANL. induction 1.
+ auto.
+ intros. eapply analyze_correct_1; eauto.
+ eauto.
+Qed.
+
+Lemma analyze_correct_3:
+ forall f approxs rs,
+ analyze f = Some approxs ->
+ regs_match_approx approxs!!(f.(fn_entrypoint)) rs.
+Proof.
+ intros.
+ apply regs_match_approx_increasing with D.top.
+ eapply DS.fixpoint_entry. unfold analyze in H; eexact H.
+ auto with coqlib.
+ red; intros. rewrite D.get_top. simpl; auto.
+Qed.
+
+(** * Correctness of strength reduction *)
+
+(** We now show that strength reduction over operators and addressing
+ modes preserve semantics: the strength-reduced operations and
+ addressings evaluate to the same values as the original ones if the
+ actual arguments match the static approximations used for strength
+ reduction. *)
+
+Section STRENGTH_REDUCTION.
+
+Variable approx: D.t.
+Variable sp: val.
+Variable rs: regset.
+Hypothesis MATCH: regs_match_approx approx rs.
+
+Lemma intval_correct:
+ forall r n,
+ intval approx r = Some n -> rs#r = Vint n.
+Proof.
+ intros until n.
+ unfold intval. caseEq (D.get r approx); intros; try discriminate.
+ generalize (MATCH r). unfold val_match_approx. rewrite H.
+ congruence.
+Qed.
+
+Lemma cond_strength_reduction_correct:
+ forall cond args,
+ let (cond', args') := cond_strength_reduction approx cond args in
+ eval_condition cond' rs##args' = eval_condition cond rs##args.
+Proof.
+ intros. unfold cond_strength_reduction.
+ case (cond_strength_reduction_match cond args); intros.
+ caseEq (intval approx r1); intros.
+ simpl. rewrite (intval_correct _ _ H).
+ destruct (rs#r2); auto. rewrite Int.swap_cmp. auto.
+ destruct c; reflexivity.
+ caseEq (intval approx r2); intros.
+ simpl. rewrite (intval_correct _ _ H0). auto.
+ auto.
+ caseEq (intval approx r1); intros.
+ simpl. rewrite (intval_correct _ _ H).
+ destruct (rs#r2); auto. rewrite Int.swap_cmpu. auto.
+ destruct c; reflexivity.
+ caseEq (intval approx r2); intros.
+ simpl. rewrite (intval_correct _ _ H0). auto.
+ auto.
+ auto.
+Qed.
+
+Lemma make_addimm_correct:
+ forall n r v,
+ let (op, args) := make_addimm n r in
+ eval_operation ge sp Oadd (rs#r :: Vint n :: nil) = Some v ->
+ eval_operation ge sp op rs##args = Some v.
+Proof.
+ intros; unfold make_addimm.
+ generalize (Int.eq_spec n Int.zero); case (Int.eq n Int.zero); intros.
+ subst n. simpl in *. FuncInv. rewrite Int.add_zero in H. congruence.
+ rewrite Int.add_zero in H. congruence.
+ exact H0.
+Qed.
+
+Lemma make_shlimm_correct:
+ forall n r v,
+ let (op, args) := make_shlimm n r in
+ eval_operation ge sp Oshl (rs#r :: Vint n :: nil) = Some v ->
+ eval_operation ge sp op rs##args = Some v.
+Proof.
+ intros; unfold make_shlimm.
+ generalize (Int.eq_spec n Int.zero); case (Int.eq n Int.zero); intros.
+ subst n. simpl in *. FuncInv. rewrite Int.shl_zero in H. congruence.
+ simpl in *. FuncInv. caseEq (Int.ltu n (Int.repr 32)); intros.
+ rewrite H1 in H0. rewrite Int.shl_rolm in H0. auto. exact H1.
+ rewrite H1 in H0. discriminate.
+Qed.
+
+Lemma make_shrimm_correct:
+ forall n r v,
+ let (op, args) := make_shrimm n r in
+ eval_operation ge sp Oshr (rs#r :: Vint n :: nil) = Some v ->
+ eval_operation ge sp op rs##args = Some v.
+Proof.
+ intros; unfold make_shrimm.
+ generalize (Int.eq_spec n Int.zero); case (Int.eq n Int.zero); intros.
+ subst n. simpl in *. FuncInv. rewrite Int.shr_zero in H. congruence.
+ assumption.
+Qed.
+
+Lemma make_shruimm_correct:
+ forall n r v,
+ let (op, args) := make_shruimm n r in
+ eval_operation ge sp Oshru (rs#r :: Vint n :: nil) = Some v ->
+ eval_operation ge sp op rs##args = Some v.
+Proof.
+ intros; unfold make_shruimm.
+ generalize (Int.eq_spec n Int.zero); case (Int.eq n Int.zero); intros.
+ subst n. simpl in *. FuncInv. rewrite Int.shru_zero in H. congruence.
+ simpl in *. FuncInv. caseEq (Int.ltu n (Int.repr 32)); intros.
+ rewrite H1 in H0. rewrite Int.shru_rolm in H0. auto. exact H1.
+ rewrite H1 in H0. discriminate.
+Qed.
+
+Lemma make_mulimm_correct:
+ forall n r v,
+ let (op, args) := make_mulimm n r in
+ eval_operation ge sp Omul (rs#r :: Vint n :: nil) = Some v ->
+ eval_operation ge sp op rs##args = Some v.
+Proof.
+ intros; unfold make_mulimm.
+ generalize (Int.eq_spec n Int.zero); case (Int.eq n Int.zero); intros.
+ subst n. simpl in H0. FuncInv. rewrite Int.mul_zero in H. simpl. congruence.
+ generalize (Int.eq_spec n Int.one); case (Int.eq n Int.one); intros.
+ subst n. simpl in H1. simpl. FuncInv. rewrite Int.mul_one in H0. congruence.
+ caseEq (Int.is_power2 n); intros.
+ replace (eval_operation ge sp Omul (rs # r :: Vint n :: nil))
+ with (eval_operation ge sp Oshl (rs # r :: Vint i :: nil)).
+ apply make_shlimm_correct.
+ simpl. generalize (Int.is_power2_range _ _ H1).
+ change (Z_of_nat wordsize) with 32. intro. rewrite H2.
+ destruct rs#r; auto. rewrite (Int.mul_pow2 i0 _ _ H1). auto.
+ exact H2.
+Qed.
+
+Lemma make_andimm_correct:
+ forall n r v,
+ let (op, args) := make_andimm n r in
+ eval_operation ge sp Oand (rs#r :: Vint n :: nil) = Some v ->
+ eval_operation ge sp op rs##args = Some v.
+Proof.
+ intros; unfold make_andimm.
+ generalize (Int.eq_spec n Int.zero); case (Int.eq n Int.zero); intros.
+ subst n. simpl in *. FuncInv. rewrite Int.and_zero in H. congruence.
+ generalize (Int.eq_spec n Int.mone); case (Int.eq n Int.mone); intros.
+ subst n. simpl in *. FuncInv. rewrite Int.and_mone in H0. congruence.
+ exact H1.
+Qed.
+
+Lemma make_orimm_correct:
+ forall n r v,
+ let (op, args) := make_orimm n r in
+ eval_operation ge sp Oor (rs#r :: Vint n :: nil) = Some v ->
+ eval_operation ge sp op rs##args = Some v.
+Proof.
+ intros; unfold make_orimm.
+ generalize (Int.eq_spec n Int.zero); case (Int.eq n Int.zero); intros.
+ subst n. simpl in *. FuncInv. rewrite Int.or_zero in H. congruence.
+ generalize (Int.eq_spec n Int.mone); case (Int.eq n Int.mone); intros.
+ subst n. simpl in *. FuncInv. rewrite Int.or_mone in H0. congruence.
+ exact H1.
+Qed.
+
+Lemma make_xorimm_correct:
+ forall n r v,
+ let (op, args) := make_xorimm n r in
+ eval_operation ge sp Oxor (rs#r :: Vint n :: nil) = Some v ->
+ eval_operation ge sp op rs##args = Some v.
+Proof.
+ intros; unfold make_xorimm.
+ generalize (Int.eq_spec n Int.zero); case (Int.eq n Int.zero); intros.
+ subst n. simpl in *. FuncInv. rewrite Int.xor_zero in H. congruence.
+ exact H0.
+Qed.
+
+Lemma op_strength_reduction_correct:
+ forall op args v,
+ let (op', args') := op_strength_reduction approx op args in
+ eval_operation ge sp op rs##args = Some v ->
+ eval_operation ge sp op' rs##args' = Some v.
+Proof.
+ intros; unfold op_strength_reduction;
+ case (op_strength_reduction_match op args); intros; simpl List.map.
+ (* Oadd *)
+ caseEq (intval approx r1); intros.
+ rewrite (intval_correct _ _ H).
+ replace (eval_operation ge sp Oadd (Vint i :: rs # r2 :: nil))
+ with (eval_operation ge sp Oadd (rs # r2 :: Vint i :: nil)).
+ apply make_addimm_correct.
+ simpl. destruct rs#r2; auto. rewrite Int.add_commut; auto.
+ caseEq (intval approx r2); intros.
+ rewrite (intval_correct _ _ H0). apply make_addimm_correct.
+ assumption.
+ (* Osub *)
+ caseEq (intval approx r1); intros.
+ rewrite (intval_correct _ _ H) in H0. assumption.
+ caseEq (intval approx r2); intros.
+ rewrite (intval_correct _ _ H0).
+ replace (eval_operation ge sp Osub (rs # r1 :: Vint i :: nil))
+ with (eval_operation ge sp Oadd (rs # r1 :: Vint (Int.neg i) :: nil)).
+ apply make_addimm_correct.
+ simpl. destruct rs#r1; auto; rewrite Int.sub_add_opp; auto.
+ assumption.
+ (* Omul *)
+ caseEq (intval approx r1); intros.
+ rewrite (intval_correct _ _ H).
+ replace (eval_operation ge sp Omul (Vint i :: rs # r2 :: nil))
+ with (eval_operation ge sp Omul (rs # r2 :: Vint i :: nil)).
+ apply make_mulimm_correct.
+ simpl. destruct rs#r2; auto. rewrite Int.mul_commut; auto.
+ caseEq (intval approx r2); intros.
+ rewrite (intval_correct _ _ H0). apply make_mulimm_correct.
+ assumption.
+ (* Odiv *)
+ caseEq (intval approx r2); intros.
+ caseEq (Int.is_power2 i); intros.
+ rewrite (intval_correct _ _ H) in H1.
+ simpl in *; FuncInv. destruct (Int.eq i Int.zero). congruence.
+ change 32 with (Z_of_nat wordsize).
+ rewrite (Int.is_power2_range _ _ H0).
+ rewrite (Int.divs_pow2 i1 _ _ H0) in H1. auto.
+ assumption.
+ assumption.
+ (* Odivu *)
+ caseEq (intval approx r2); intros.
+ caseEq (Int.is_power2 i); intros.
+ rewrite (intval_correct _ _ H).
+ replace (eval_operation ge sp Odivu (rs # r1 :: Vint i :: nil))
+ with (eval_operation ge sp Oshru (rs # r1 :: Vint i0 :: nil)).
+ apply make_shruimm_correct.
+ simpl. destruct rs#r1; auto.
+ change 32 with (Z_of_nat wordsize).
+ rewrite (Int.is_power2_range _ _ H0).
+ generalize (Int.eq_spec i Int.zero); case (Int.eq i Int.zero); intros.
+ subst i. discriminate.
+ rewrite (Int.divu_pow2 i1 _ _ H0). auto.
+ assumption.
+ assumption.
+ (* Oand *)
+ caseEq (intval approx r1); intros.
+ rewrite (intval_correct _ _ H).
+ replace (eval_operation ge sp Oand (Vint i :: rs # r2 :: nil))
+ with (eval_operation ge sp Oand (rs # r2 :: Vint i :: nil)).
+ apply make_andimm_correct.
+ simpl. destruct rs#r2; auto. rewrite Int.and_commut; auto.
+ caseEq (intval approx r2); intros.
+ rewrite (intval_correct _ _ H0). apply make_andimm_correct.
+ assumption.
+ (* Oor *)
+ caseEq (intval approx r1); intros.
+ rewrite (intval_correct _ _ H).
+ replace (eval_operation ge sp Oor (Vint i :: rs # r2 :: nil))
+ with (eval_operation ge sp Oor (rs # r2 :: Vint i :: nil)).
+ apply make_orimm_correct.
+ simpl. destruct rs#r2; auto. rewrite Int.or_commut; auto.
+ caseEq (intval approx r2); intros.
+ rewrite (intval_correct _ _ H0). apply make_orimm_correct.
+ assumption.
+ (* Oxor *)
+ caseEq (intval approx r1); intros.
+ rewrite (intval_correct _ _ H).
+ replace (eval_operation ge sp Oxor (Vint i :: rs # r2 :: nil))
+ with (eval_operation ge sp Oxor (rs # r2 :: Vint i :: nil)).
+ apply make_xorimm_correct.
+ simpl. destruct rs#r2; auto. rewrite Int.xor_commut; auto.
+ caseEq (intval approx r2); intros.
+ rewrite (intval_correct _ _ H0). apply make_xorimm_correct.
+ assumption.
+ (* Oshl *)
+ caseEq (intval approx r2); intros.
+ caseEq (Int.ltu i (Int.repr 32)); intros.
+ rewrite (intval_correct _ _ H). apply make_shlimm_correct.
+ assumption.
+ assumption.
+ (* Oshr *)
+ caseEq (intval approx r2); intros.
+ caseEq (Int.ltu i (Int.repr 32)); intros.
+ rewrite (intval_correct _ _ H). apply make_shrimm_correct.
+ assumption.
+ assumption.
+ (* Oshru *)
+ caseEq (intval approx r2); intros.
+ caseEq (Int.ltu i (Int.repr 32)); intros.
+ rewrite (intval_correct _ _ H). apply make_shruimm_correct.
+ assumption.
+ assumption.
+ (* Ocmp *)
+ generalize (cond_strength_reduction_correct c rl).
+ destruct (cond_strength_reduction approx c rl).
+ simpl. intro. rewrite H. auto.
+ (* default *)
+ assumption.
+Qed.
+
+Ltac KnownApprox :=
+ match goal with
+ | MATCH: (regs_match_approx ?approx ?rs),
+ H: (D.get ?r ?approx = ?a) |- _ =>
+ generalize (MATCH r); rewrite H; intro; clear H; KnownApprox
+ | _ => idtac
+ end.
+
+Lemma addr_strength_reduction_correct:
+ forall addr args,
+ let (addr', args') := addr_strength_reduction approx addr args in
+ eval_addressing ge sp addr' rs##args' = eval_addressing ge sp addr rs##args.
+Proof.
+ intros.
+
+ (* Useful lemmas *)
+ assert (A0: forall r1 r2,
+ eval_addressing ge sp Aindexed2 (rs ## (r1 :: r2 :: nil)) =
+ eval_addressing ge sp Aindexed2 (rs ## (r2 :: r1 :: nil))).
+ intros. simpl. destruct (rs#r1); destruct (rs#r2); auto;
+ rewrite Int.add_commut; auto.
+
+ assert (A1: forall r1 r2 n,
+ val_match_approx (I n) rs#r2 ->
+ eval_addressing ge sp (Aindexed n) (rs ## (r1 :: nil)) =
+ eval_addressing ge sp Aindexed2 (rs ## (r1 :: r2 :: nil))).
+ intros; simpl in *. rewrite H. auto.
+
+ assert (A2: forall r1 r2 n,
+ val_match_approx (I n) rs#r1 ->
+ eval_addressing ge sp (Aindexed n) (rs ## (r2 :: nil)) =
+ eval_addressing ge sp Aindexed2 (rs ## (r1 :: r2 :: nil))).
+ intros. rewrite A0. apply A1. auto.
+
+ assert (A3: forall r1 r2 id ofs,
+ val_match_approx (S id ofs) rs#r1 ->
+ eval_addressing ge sp (Abased id ofs) (rs ## (r2 :: nil)) =
+ eval_addressing ge sp Aindexed2 (rs ## (r1 :: r2 :: nil))).
+ intros. elim H. intros b [A B]. simpl. rewrite A; rewrite B. auto.
+
+ assert (A4: forall r1 r2 id ofs,
+ val_match_approx (S id ofs) rs#r2 ->
+ eval_addressing ge sp (Abased id ofs) (rs ## (r1 :: nil)) =
+ eval_addressing ge sp Aindexed2 (rs ## (r1 :: r2 :: nil))).
+ intros. rewrite A0. apply A3. auto.
+
+ assert (A5: forall r1 r2 id ofs n,
+ val_match_approx (S id ofs) rs#r1 ->
+ val_match_approx (I n) rs#r2 ->
+ eval_addressing ge sp (Aglobal id (Int.add ofs n)) nil =
+ eval_addressing ge sp Aindexed2 (rs ## (r1 :: r2 :: nil))).
+ intros. elim H. intros b [A B]. simpl. rewrite A; rewrite B.
+ simpl in H0. rewrite H0. auto.
+
+ unfold addr_strength_reduction;
+ case (addr_strength_reduction_match addr args); intros.
+
+ (* Aindexed2 *)
+ caseEq (D.get r1 approx); intros;
+ caseEq (D.get r2 approx); intros;
+ try reflexivity; KnownApprox; auto.
+ rewrite A0. rewrite Int.add_commut. apply A5; auto.
+
+ (* Abased *)
+ caseEq (intval approx r1); intros.
+ simpl; rewrite (intval_correct _ _ H). auto.
+ auto.
+
+ (* Aindexed *)
+ caseEq (D.get r1 approx); intros; auto.
+ simpl; KnownApprox.
+ elim H0. intros b [A B]. rewrite A; rewrite B. auto.
+
+ (* default *)
+ reflexivity.
+Qed.
+
+End STRENGTH_REDUCTION.
+
+End ANALYSIS.
+
+(** * Correctness of the code transformation *)
+
+(** We now show that the transformed code after constant propagation
+ has the same semantics as the original code. *)
+
+Section PRESERVATION.
+
+Variable prog: program.
+Let tprog := transf_program prog.
+Let ge := Genv.globalenv prog.
+Let tge := Genv.globalenv tprog.
+
+Lemma symbols_preserved:
+ forall (s: ident), Genv.find_symbol tge s = Genv.find_symbol ge s.
+Proof (Genv.find_symbol_transf transf_function prog).
+
+Lemma functions_translated:
+ forall (v: val) (f: RTL.function),
+ Genv.find_funct ge v = Some f ->
+ Genv.find_funct tge v = Some (transf_function f).
+Proof (@Genv.find_funct_transf _ _ transf_function prog).
+
+Lemma function_ptr_translated:
+ forall (v: block) (f: RTL.function),
+ Genv.find_funct_ptr ge v = Some f ->
+ Genv.find_funct_ptr tge v = Some (transf_function f).
+Proof (@Genv.find_funct_ptr_transf _ _ transf_function prog).
+
+(** The proof of semantic preservation is a simulation argument
+ based on diagrams of the following form:
+<<
+ pc, rs, m ------------------- pc, rs, m
+ | |
+ | |
+ v v
+ pc', rs', m' ---------------- pc', rs', m'
+>>
+ The left vertical arrow represents a transition in the
+ original RTL code. The top horizontal bar expresses that the values
+ of registers [rs] match their compile-time approximations at point [pc].
+ These two parts of the diagram are the hypotheses. In conclusions,
+ we want to prove the other two parts: the right vertical arrow,
+ which is a transition in the transformed RTL code, and the bottom
+ horizontal bar, which means that [rs'] matches the compile-time
+ approximations at [pc'].
+
+ To help express those diagrams, we define the following propositions
+ parameterized by the transition in the original RTL code (left arrow)
+ and summarizing the three other arrows of the diagram. *)
+
+Definition exec_instr_prop
+ (c: code) (sp: val)
+ (pc: node) (rs: regset) (m: mem)
+ (pc': node) (rs': regset) (m': mem) : Prop :=
+ exec_instr tge c sp pc rs m pc' rs' m' /\
+ forall f approxs
+ (CF: c = f.(RTL.fn_code))
+ (ANL: analyze f = Some approxs)
+ (MATCH: regs_match_approx ge approxs!!pc rs),
+ exec_instr tge (transf_code approxs c) sp pc rs m pc' rs' m'.
+
+Definition exec_instrs_prop
+ (c: code) (sp: val)
+ (pc: node) (rs: regset) (m: mem)
+ (pc': node) (rs': regset) (m': mem) : Prop :=
+ exec_instrs tge c sp pc rs m pc' rs' m' /\
+ forall f approxs
+ (CF: c = f.(RTL.fn_code))
+ (ANL: analyze f = Some approxs)
+ (MATCH: regs_match_approx ge approxs!!pc rs),
+ exec_instrs tge (transf_code approxs c) sp pc rs m pc' rs' m'.
+
+Definition exec_function_prop
+ (f: RTL.function) (args: list val) (m: mem)
+ (res: val) (m': mem) : Prop :=
+ exec_function tge (transf_function f) args m res m'.
+
+Ltac TransfInstr :=
+ match goal with
+ | H1: (PTree.get ?pc ?c = Some ?instr),
+ H2: (analyze ?f = Some ?approxs) |- _ =>
+ cut ((transf_code approxs c)!pc = Some(transf_instr approxs!!pc instr));
+ [ simpl
+ | unfold transf_code; rewrite PTree.gmap;
+ unfold option_map; rewrite H1; reflexivity ]
+ end.
+
+(** The predicates above serve as induction hypotheses in the proof of
+ simulation, which proceeds by induction over the
+ evaluation derivation of the original code. *)
+
+Lemma transf_funct_correct:
+ forall f args m res m',
+ exec_function ge f args m res m' ->
+ exec_function_prop f args m res m'.
+Proof.
+ apply (exec_function_ind_3 ge
+ exec_instr_prop exec_instrs_prop exec_function_prop);
+ intros; red.
+ (* Inop *)
+ split; [idtac| intros; TransfInstr].
+ apply exec_Inop; auto.
+ intros; apply exec_Inop; auto.
+ (* Iop *)
+ split; [idtac| intros; TransfInstr].
+ apply exec_Iop with op args. auto.
+ rewrite (eval_operation_preserved symbols_preserved). auto.
+ caseEq (op_strength_reduction approxs!!pc op args);
+ intros op' args' OSR.
+ assert (eval_operation tge sp op' rs##args' = Some v).
+ rewrite (eval_operation_preserved symbols_preserved).
+ generalize (op_strength_reduction_correct ge approxs!!pc sp rs
+ MATCH op args v).
+ rewrite OSR; simpl. auto.
+ generalize (eval_static_operation_correct ge op sp
+ (approx_regs args approxs!!pc) rs##args v
+ (approx_regs_val_list _ _ _ args MATCH) H0).
+ case (eval_static_operation op (approx_regs args approxs!!pc)); intros;
+ simpl in H1;
+ eapply exec_Iop; eauto; simpl.
+ simpl in H2; congruence.
+ simpl in H2; congruence.
+ elim H2; intros b [A B]. rewrite symbols_preserved.
+ rewrite A; rewrite B; auto.
+ (* Iload *)
+ split; [idtac| intros; TransfInstr].
+ eapply exec_Iload; eauto.
+ rewrite (eval_addressing_preserved symbols_preserved). auto.
+ caseEq (addr_strength_reduction approxs!!pc addr args);
+ intros addr' args' ASR.
+ assert (eval_addressing tge sp addr' rs##args' = Some a).
+ rewrite (eval_addressing_preserved symbols_preserved).
+ generalize (addr_strength_reduction_correct ge approxs!!pc sp rs
+ MATCH addr args).
+ rewrite ASR; simpl. congruence.
+ intro. eapply exec_Iload; eauto.
+ (* Istore *)
+ split; [idtac| intros; TransfInstr].
+ eapply exec_Istore; eauto.
+ rewrite (eval_addressing_preserved symbols_preserved). auto.
+ caseEq (addr_strength_reduction approxs!!pc addr args);
+ intros addr' args' ASR.
+ assert (eval_addressing tge sp addr' rs##args' = Some a).
+ rewrite (eval_addressing_preserved symbols_preserved).
+ generalize (addr_strength_reduction_correct ge approxs!!pc sp rs
+ MATCH addr args).
+ rewrite ASR; simpl. congruence.
+ intro. eapply exec_Istore; eauto.
+ (* Icall *)
+ assert (find_function tge ros rs = Some (transf_function f)).
+ generalize H0; unfold find_function; destruct ros.
+ apply functions_translated.
+ rewrite symbols_preserved. destruct (Genv.find_symbol ge i).
+ apply function_ptr_translated. congruence.
+ assert (sig = fn_sig (transf_function f)).
+ rewrite H1. unfold transf_function. destruct (analyze f); reflexivity.
+ split; [idtac| intros; TransfInstr].
+ eapply exec_Icall; eauto.
+ set (ros' :=
+ match ros with
+ | inl r =>
+ match D.get r approxs !! pc with
+ | Novalue => ros
+ | Unknown => ros
+ | I _ => ros
+ | F _ => ros
+ | S symb ofs => if Int.eq ofs Int.zero then inr reg symb else ros
+ end
+ | inr _ => ros
+ end).
+ intros; eapply exec_Icall; eauto.
+ unfold ros'; destruct ros; auto.
+ caseEq (D.get r approxs!!pc); intros; auto.
+ generalize (Int.eq_spec i0 Int.zero); case (Int.eq i0 Int.zero); intros; auto.
+ generalize (MATCH r). rewrite H7. intros [b [A B]].
+ rewrite <- symbols_preserved in A.
+ generalize H4. simpl. rewrite A. rewrite B. subst i0.
+ rewrite Genv.find_funct_find_funct_ptr. auto.
+
+ (* Icond, true *)
+ split; [idtac| intros; TransfInstr].
+ eapply exec_Icond_true; eauto.
+ caseEq (cond_strength_reduction approxs!!pc cond args);
+ intros cond' args' CSR.
+ assert (eval_condition cond' rs##args' = Some true).
+ generalize (cond_strength_reduction_correct
+ ge approxs!!pc rs MATCH cond args).
+ rewrite CSR. intro. congruence.
+ caseEq (eval_static_condition cond (approx_regs args approxs!!pc)).
+ intros b ESC.
+ generalize (eval_static_condition_correct ge cond _ _ _
+ (approx_regs_val_list _ _ _ args MATCH) ESC); intro.
+ replace b with true. intro; eapply exec_Inop; eauto. congruence.
+ intros. eapply exec_Icond_true; eauto.
+
+ (* Icond, false *)
+ split; [idtac| intros; TransfInstr].
+ eapply exec_Icond_false; eauto.
+ caseEq (cond_strength_reduction approxs!!pc cond args);
+ intros cond' args' CSR.
+ assert (eval_condition cond' rs##args' = Some false).
+ generalize (cond_strength_reduction_correct
+ ge approxs!!pc rs MATCH cond args).
+ rewrite CSR. intro. congruence.
+ caseEq (eval_static_condition cond (approx_regs args approxs!!pc)).
+ intros b ESC.
+ generalize (eval_static_condition_correct ge cond _ _ _
+ (approx_regs_val_list _ _ _ args MATCH) ESC); intro.
+ replace b with false. intro; eapply exec_Inop; eauto. congruence.
+ intros. eapply exec_Icond_false; eauto.
+
+ (* refl *)
+ split. apply exec_refl. intros. apply exec_refl.
+ (* one *)
+ elim H0; intros.
+ split. apply exec_one; auto.
+ intros. apply exec_one. eapply H2; eauto.
+ (* trans *)
+ elim H0; intros. elim H2; intros.
+ split.
+ apply exec_trans with pc2 rs2 m2; auto.
+ intros; apply exec_trans with pc2 rs2 m2.
+ eapply H4; eauto. eapply H6; eauto.
+ eapply analyze_correct_2; eauto.
+
+ (* function *)
+ elim H1; intros.
+ unfold transf_function.
+ caseEq (analyze f).
+ intros approxs ANL.
+ eapply exec_funct; simpl; eauto.
+ eapply H5. reflexivity. auto.
+ apply analyze_correct_3; auto.
+ TransfInstr; auto.
+ intros. eapply exec_funct; eauto.
+Qed.
+
+(** The preservation of the observable behavior of the program then
+ follows. *)
+
+Theorem transf_program_correct:
+ forall (r: val),
+ exec_program prog r -> exec_program tprog r.
+Proof.
+ intros r [b [f [m [SYMB [FIND [SIG EXEC]]]]]].
+ red. exists b. exists (transf_function f). exists m.
+ split. change (prog_main tprog) with (prog_main prog).
+ rewrite symbols_preserved. auto.
+ split. apply function_ptr_translated; auto.
+ split. unfold transf_function.
+ rewrite <- SIG. destruct (analyze f); reflexivity.
+ apply transf_funct_correct.
+ unfold tprog, transf_program. rewrite Genv.init_mem_transf.
+ exact EXEC.
+Qed.
+
+End PRESERVATION.
diff --git a/backend/Conventions.v b/backend/Conventions.v
new file mode 100644
index 0000000..99cc933
--- /dev/null
+++ b/backend/Conventions.v
@@ -0,0 +1,690 @@
+(** Function calling conventions and other conventions regarding the use of
+ machine registers and stack slots. *)
+
+Require Import Coqlib.
+Require Import AST.
+Require Import Locations.
+
+(** * Classification of machine registers *)
+
+(** Machine registers (type [mreg] in module [Locations]) are divided in
+ the following groups:
+- Temporaries used for spilling, reloading, and parallel move operations.
+- Allocatable registers, that can be assigned to RTL pseudo-registers.
+ These are further divided into:
+-- Callee-save registers, whose value is preserved across a function call.
+-- Caller-save registers that can be modified during a function call.
+
+ We follow the PowerPC application binary interface (ABI) in our choice
+ of callee- and caller-save registers.
+*)
+
+Definition destroyed_at_call_regs :=
+ R3 :: R4 :: R5 :: R6 :: R7 :: R8 :: R9 :: R10 ::
+ F1 :: F2 :: F3 :: F4 :: F5 :: F6 :: F7 :: F8 :: F9 :: F10 :: nil.
+
+Definition destroyed_at_call :=
+ List.map R destroyed_at_call_regs.
+
+Definition int_callee_save_regs :=
+ R13 :: R14 :: R15 :: R16 :: R17 :: R18 :: R19 :: R20 :: R21 :: R22 ::
+ R23 :: R24 :: R25 :: R26 :: R27 :: R28 :: R29 :: R30 :: R31 :: nil.
+
+Definition float_callee_save_regs :=
+ F14 :: F15 :: F16 :: F17 :: F18 :: F19 :: F20 :: F21 :: F22 ::
+ F23 :: F24 :: F25 :: F26 :: F27 :: F28 :: F29 :: F30 :: F31 :: nil.
+
+Definition temporaries :=
+ R IT1 :: R IT2 :: R IT3 :: R FT1 :: R FT2 :: R FT3 :: nil.
+
+(** The [index_int_callee_save] and [index_float_callee_save] associate
+ a unique positive integer to callee-save registers. This integer is
+ used in [Stacking] to determine where to save these registers in
+ the activation record if they are used by the current function. *)
+
+Definition index_int_callee_save (r: mreg) :=
+ match r with
+ | R13 => 0 | R14 => 1 | R15 => 2 | R16 => 3
+ | R17 => 4 | R18 => 5 | R19 => 6 | R20 => 7
+ | R21 => 8 | R22 => 9 | R23 => 10 | R24 => 11
+ | R25 => 12 | R26 => 13 | R27 => 14 | R28 => 15
+ | R29 => 16 | R30 => 17 | R31 => 18 | _ => -1
+ end.
+
+Definition index_float_callee_save (r: mreg) :=
+ match r with
+ | F14 => 0 | F15 => 1 | F16 => 2 | F17 => 3
+ | F18 => 4 | F19 => 5 | F20 => 6 | F21 => 7
+ | F22 => 8 | F23 => 9 | F24 => 10 | F25 => 11
+ | F26 => 12 | F27 => 13 | F28 => 14 | F29 => 15
+ | F30 => 16 | F31 => 17 | _ => -1
+ end.
+
+Ltac ElimOrEq :=
+ match goal with
+ | |- (?x = ?y) \/ _ -> _ =>
+ let H := fresh in
+ (intro H; elim H; clear H;
+ [intro H; rewrite <- H; clear H | ElimOrEq])
+ | |- False -> _ =>
+ let H := fresh in (intro H; contradiction)
+ end.
+
+Ltac OrEq :=
+ match goal with
+ | |- (?x = ?x) \/ _ => left; reflexivity
+ | |- (?x = ?y) \/ _ => right; OrEq
+ | |- False => fail
+ end.
+
+Ltac NotOrEq :=
+ match goal with
+ | |- (?x = ?y) \/ _ -> False =>
+ let H := fresh in (
+ intro H; elim H; clear H; [intro; discriminate | NotOrEq])
+ | |- False -> False =>
+ contradiction
+ end.
+
+Lemma index_int_callee_save_pos:
+ forall r, In r int_callee_save_regs -> index_int_callee_save r >= 0.
+Proof.
+ intro r. simpl; ElimOrEq; unfold index_int_callee_save; omega.
+Qed.
+
+Lemma index_float_callee_save_pos:
+ forall r, In r float_callee_save_regs -> index_float_callee_save r >= 0.
+Proof.
+ intro r. simpl; ElimOrEq; unfold index_float_callee_save; omega.
+Qed.
+
+Lemma index_int_callee_save_pos2:
+ forall r, index_int_callee_save r >= 0 -> In r int_callee_save_regs.
+Proof.
+ destruct r; simpl; intro; omegaContradiction || OrEq.
+Qed.
+
+Lemma index_float_callee_save_pos2:
+ forall r, index_float_callee_save r >= 0 -> In r float_callee_save_regs.
+Proof.
+ destruct r; simpl; intro; omegaContradiction || OrEq.
+Qed.
+
+Lemma index_int_callee_save_inj:
+ forall r1 r2,
+ In r1 int_callee_save_regs ->
+ In r2 int_callee_save_regs ->
+ r1 <> r2 ->
+ index_int_callee_save r1 <> index_int_callee_save r2.
+Proof.
+ intros r1 r2.
+ simpl; ElimOrEq; ElimOrEq; unfold index_int_callee_save;
+ intros; congruence.
+Qed.
+
+Lemma index_float_callee_save_inj:
+ forall r1 r2,
+ In r1 float_callee_save_regs ->
+ In r2 float_callee_save_regs ->
+ r1 <> r2 ->
+ index_float_callee_save r1 <> index_float_callee_save r2.
+Proof.
+ intros r1 r2.
+ simpl; ElimOrEq; ElimOrEq; unfold index_float_callee_save;
+ intros; congruence.
+Qed.
+
+(** The following lemmas show that
+ (temporaries, destroyed at call, integer callee-save, float callee-save)
+ is a partition of the set of machine registers. *)
+
+Lemma int_float_callee_save_disjoint:
+ list_disjoint int_callee_save_regs float_callee_save_regs.
+Proof.
+ red; intros r1 r2. simpl; ElimOrEq; ElimOrEq; discriminate.
+Qed.
+
+Lemma register_classification:
+ forall r,
+ (In (R r) temporaries \/ In (R r) destroyed_at_call) \/
+ (In r int_callee_save_regs \/ In r float_callee_save_regs).
+Proof.
+ destruct r;
+ try (left; left; simpl; OrEq);
+ try (left; right; simpl; OrEq);
+ try (right; left; simpl; OrEq);
+ try (right; right; simpl; OrEq).
+Qed.
+
+Lemma int_callee_save_not_destroyed:
+ forall r,
+ In (R r) temporaries \/ In (R r) destroyed_at_call ->
+ ~(In r int_callee_save_regs).
+Proof.
+ intros; red; intros. elim H.
+ generalize H0. simpl; ElimOrEq; NotOrEq.
+ generalize H0. simpl; ElimOrEq; NotOrEq.
+Qed.
+
+Lemma float_callee_save_not_destroyed:
+ forall r,
+ In (R r) temporaries \/ In (R r) destroyed_at_call ->
+ ~(In r float_callee_save_regs).
+Proof.
+ intros; red; intros. elim H.
+ generalize H0. simpl; ElimOrEq; NotOrEq.
+ generalize H0. simpl; ElimOrEq; NotOrEq.
+Qed.
+
+Lemma int_callee_save_type:
+ forall r, In r int_callee_save_regs -> mreg_type r = Tint.
+Proof.
+ intro. simpl; ElimOrEq; reflexivity.
+Qed.
+
+Lemma float_callee_save_type:
+ forall r, In r float_callee_save_regs -> mreg_type r = Tfloat.
+Proof.
+ intro. simpl; ElimOrEq; reflexivity.
+Qed.
+
+Ltac NoRepet :=
+ match goal with
+ | |- list_norepet nil =>
+ apply list_norepet_nil
+ | |- list_norepet (?a :: ?b) =>
+ apply list_norepet_cons; [simpl; intuition discriminate | NoRepet]
+ end.
+
+Lemma int_callee_save_norepet:
+ list_norepet int_callee_save_regs.
+Proof.
+ unfold int_callee_save_regs; NoRepet.
+Qed.
+
+Lemma float_callee_save_norepet:
+ list_norepet float_callee_save_regs.
+Proof.
+ unfold float_callee_save_regs; NoRepet.
+Qed.
+
+(** * Acceptable locations for register allocation *)
+
+(** The following predicate describes the locations that can be assigned
+ to an RTL pseudo-register during register allocation: a non-temporary
+ machine register or a [Local] stack slot are acceptable. *)
+
+Definition loc_acceptable (l: loc) : Prop :=
+ match l with
+ | R r => ~(In l temporaries)
+ | S (Local ofs ty) => ofs >= 0
+ | S (Incoming _ _) => False
+ | S (Outgoing _ _) => False
+ end.
+
+Definition locs_acceptable (ll: list loc) : Prop :=
+ forall l, In l ll -> loc_acceptable l.
+
+Lemma temporaries_not_acceptable:
+ forall l, loc_acceptable l -> Loc.notin l temporaries.
+Proof.
+ unfold loc_acceptable; destruct l.
+ simpl. intuition congruence.
+ destruct s; try contradiction.
+ intro. simpl. tauto.
+Qed.
+Hint Resolve temporaries_not_acceptable: locs.
+
+Lemma locs_acceptable_disj_temporaries:
+ forall ll, locs_acceptable ll -> Loc.disjoint ll temporaries.
+Proof.
+ intros. apply Loc.notin_disjoint. intros.
+ apply temporaries_not_acceptable. auto.
+Qed.
+
+(** * Function calling conventions *)
+
+(** The functions in this section determine the locations (machine registers
+ and stack slots) used to communicate arguments and results between the
+ caller and the callee during function calls. These locations are functions
+ of the signature of the function and of the call instruction.
+ Agreement between the caller and the callee on the locations to use
+ is guaranteed by our dynamic semantics for Cminor and RTL, which demand
+ that the signature of the call instruction is identical to that of the
+ called function.
+
+ Calling conventions are largely arbitrary: they must respect the properties
+ proved in this section (such as no overlapping between the locations
+ of function arguments), but this leaves much liberty in choosing actual
+ locations. To ensure binary interoperability of code generated by our
+ compiler with libraries compiled by another PowerPC compiler, we
+ implement the standard conventions defined in the PowerPC application
+ binary interface. *)
+
+(** ** Location of function result *)
+
+(** The result value of a function is passed back to the caller in
+ registers [R3] or [F1], depending on the type of the returned value.
+ We treat a function without result as a function with one integer result. *)
+
+Definition loc_result (s: signature) : mreg :=
+ match s.(sig_res) with
+ | None => R3
+ | Some Tint => R3
+ | Some Tfloat => F1
+ end.
+
+(** The result location has the type stated in the signature. *)
+
+Lemma loc_result_type:
+ forall sig,
+ mreg_type (loc_result sig) =
+ match sig.(sig_res) with None => Tint | Some ty => ty end.
+Proof.
+ intros; unfold loc_result.
+ destruct (sig_res sig).
+ destruct t; reflexivity.
+ reflexivity.
+Qed.
+
+(** The result location is a caller-save register. *)
+
+Lemma loc_result_acceptable:
+ forall (s: signature), In (R (loc_result s)) destroyed_at_call.
+Proof.
+ intros; unfold loc_result.
+ destruct (sig_res s).
+ destruct t; simpl; OrEq.
+ simpl; OrEq.
+Qed.
+
+(** ** Location of function arguments *)
+
+(** The PowerPC ABI states the following convention for passing arguments
+ to a function:
+- The first 8 integer arguments are passed in registers [R3] to [R10].
+- The first 10 float arguments are passed in registers [F1] to [F10].
+- Each float argument passed in a float register ``consumes'' two
+ integer arguments.
+- Extra arguments are passed on the stack, in [Outgoing] slots, consecutively
+ assigned (1 word for an integer argument, 2 words for a float),
+ starting at word offset 6 (the bottom 24 bytes of the stack are reserved
+ for other purposes).
+- Stack space is reserved (as unused [Outgoing] slots) for the arguments
+ that are passed in registers.
+
+These conventions are somewhat baroque, but they are mandated by the ABI.
+*)
+
+Definition drop1 (x: list mreg) :=
+ match x with nil => nil | hd :: tl => tl end.
+Definition drop2 (x: list mreg) :=
+ match x with nil => nil | hd :: nil => nil | hd1 :: hd2 :: tl => tl end.
+
+Fixpoint loc_arguments_rec
+ (tyl: list typ) (iregl: list mreg) (fregl: list mreg)
+ (ofs: Z) {struct tyl} : list loc :=
+ match tyl with
+ | nil => nil
+ | Tint :: tys =>
+ match iregl with
+ | nil => S (Outgoing ofs Tint)
+ | ireg :: _ => R ireg
+ end ::
+ loc_arguments_rec tys (drop1 iregl) fregl (ofs + 1)
+ | Tfloat :: tys =>
+ match fregl with
+ | nil => S (Outgoing ofs Tfloat)
+ | freg :: _ => R freg
+ end ::
+ loc_arguments_rec tys (drop2 iregl) (drop1 fregl) (ofs + 2)
+ end.
+
+Definition int_param_regs :=
+ R3 :: R4 :: R5 :: R6 :: R7 :: R8 :: R9 :: R10 :: nil.
+Definition float_param_regs :=
+ F1 :: F2 :: F3 :: F4 :: F5 :: F6 :: F7 :: F8 :: F9 :: F10 :: nil.
+
+(** [loc_arguments s] returns the list of locations where to store arguments
+ when calling a function with signature [s]. *)
+
+Definition loc_arguments (s: signature) : list loc :=
+ loc_arguments_rec s.(sig_args) int_param_regs float_param_regs 6.
+
+(** [size_arguments s] returns the number of [Outgoing] slots used
+ to call a function with signature [s]. *)
+
+Fixpoint size_arguments_rec (tyl: list typ) : Z :=
+ match tyl with
+ | nil => 6
+ | Tint :: tys => 1 + size_arguments_rec tys
+ | Tfloat :: tys => 2 + size_arguments_rec tys
+ end.
+
+Definition size_arguments (s: signature) : Z :=
+ size_arguments_rec s.(sig_args).
+
+(** Argument locations are either non-temporary registers or [Outgoing]
+ stack slots at offset 6 or more. *)
+
+Definition loc_argument_acceptable (l: loc) : Prop :=
+ match l with
+ | R r => ~(In l temporaries)
+ | S (Outgoing ofs ty) => ofs >= 6
+ | _ => False
+ end.
+
+Remark drop1_incl:
+ forall x l, In x (drop1 l) -> In x l.
+Proof.
+ intros. destruct l. elim H. simpl in H. auto with coqlib.
+Qed.
+Remark drop2_incl:
+ forall x l, In x (drop2 l) -> In x l.
+Proof.
+ intros. destruct l. elim H. destruct l. elim H.
+ simpl in H. auto with coqlib.
+Qed.
+
+Remark loc_arguments_rec_charact:
+ forall tyl iregl fregl ofs l,
+ In l (loc_arguments_rec tyl iregl fregl ofs) ->
+ match l with
+ | R r => In r iregl \/ In r fregl
+ | S (Outgoing ofs' ty) => ofs' >= ofs
+ | S _ => False
+ end.
+Proof.
+ induction tyl; simpl loc_arguments_rec; intros.
+ elim H.
+ destruct a; elim H; intros.
+ destruct iregl; subst l. omega. left; auto with coqlib.
+ generalize (IHtyl _ _ _ _ H0).
+ destruct l. intros [A|B]. left; apply drop1_incl; auto. tauto.
+ destruct s; try contradiction. omega.
+ destruct fregl; subst l. omega. right; auto with coqlib.
+ generalize (IHtyl _ _ _ _ H0).
+ destruct l. intros [A|B]. left; apply drop2_incl; auto.
+ right; apply drop1_incl; auto.
+ destruct s; try contradiction. omega.
+Qed.
+
+Lemma loc_arguments_acceptable:
+ forall (s: signature) (r: loc),
+ In r (loc_arguments s) -> loc_argument_acceptable r.
+Proof.
+ unfold loc_arguments; intros.
+ generalize (loc_arguments_rec_charact _ _ _ _ _ H).
+ destruct r.
+ intro H0; elim H0. simpl. unfold not. ElimOrEq; NotOrEq.
+ simpl. unfold not. ElimOrEq; NotOrEq.
+ destruct s0; try contradiction.
+ simpl. auto.
+Qed.
+Hint Resolve loc_arguments_acceptable: locs.
+
+(** Arguments are parwise disjoint (in the sense of [Loc.norepet]). *)
+
+Remark drop1_norepet:
+ forall l, list_norepet l -> list_norepet (drop1 l).
+Proof.
+ intros. destruct l; simpl. constructor. inversion H. auto.
+Qed.
+Remark drop2_norepet:
+ forall l, list_norepet l -> list_norepet (drop2 l).
+Proof.
+ intros. destruct l; simpl. constructor.
+ destruct l; simpl. constructor. inversion H. inversion H3. auto.
+Qed.
+
+Remark loc_arguments_rec_notin_reg:
+ forall tyl iregl fregl ofs r,
+ ~(In r iregl) -> ~(In r fregl) ->
+ Loc.notin (R r) (loc_arguments_rec tyl iregl fregl ofs).
+Proof.
+ induction tyl; simpl; intros.
+ auto.
+ destruct a; simpl; split.
+ destruct iregl. auto. red; intro; subst m. apply H. auto with coqlib.
+ apply IHtyl. red; intro. apply H. apply drop1_incl; auto. auto.
+ destruct fregl. auto. red; intro; subst m. apply H0. auto with coqlib.
+ apply IHtyl. red; intro. apply H. apply drop2_incl; auto.
+ red; intro. apply H0. apply drop1_incl; auto.
+Qed.
+
+Remark loc_arguments_rec_notin_local:
+ forall tyl iregl fregl ofs ofs0 ty0,
+ Loc.notin (S (Local ofs0 ty0)) (loc_arguments_rec tyl iregl fregl ofs).
+Proof.
+ induction tyl; simpl; intros.
+ auto.
+ destruct a; simpl; split.
+ destruct iregl. auto. auto.
+ apply IHtyl.
+ destruct fregl. auto. auto.
+ apply IHtyl.
+Qed.
+
+Remark loc_arguments_rec_notin_outgoing:
+ forall tyl iregl fregl ofs ofs0 ty0,
+ ofs0 + typesize ty0 <= ofs ->
+ Loc.notin (S (Outgoing ofs0 ty0)) (loc_arguments_rec tyl iregl fregl ofs).
+Proof.
+ induction tyl; simpl; intros.
+ auto.
+ destruct a; simpl; split.
+ destruct iregl. omega. auto.
+ apply IHtyl. omega.
+ destruct fregl. omega. auto.
+ apply IHtyl. omega.
+Qed.
+
+Lemma loc_arguments_norepet:
+ forall (s: signature), Loc.norepet (loc_arguments s).
+Proof.
+ assert (forall tyl iregl fregl ofs,
+ list_norepet iregl ->
+ list_norepet fregl ->
+ list_disjoint iregl fregl ->
+ Loc.norepet (loc_arguments_rec tyl iregl fregl ofs)).
+ induction tyl; simpl; intros.
+ constructor.
+ destruct a; constructor.
+ destruct iregl.
+ apply loc_arguments_rec_notin_outgoing. simpl; omega.
+ apply loc_arguments_rec_notin_reg. simpl. inversion H. auto.
+ apply list_disjoint_notin with (m :: iregl); auto with coqlib.
+ apply IHtyl. apply drop1_norepet; auto. auto.
+ red; intros. apply H1. apply drop1_incl; auto. auto.
+ destruct fregl.
+ apply loc_arguments_rec_notin_outgoing. simpl; omega.
+ apply loc_arguments_rec_notin_reg. simpl.
+ red; intro. apply (H1 m m). apply drop2_incl; auto.
+ auto with coqlib. auto.
+ simpl. inversion H0. auto.
+ apply IHtyl. apply drop2_norepet; auto. apply drop1_norepet; auto.
+ red; intros. apply H1. apply drop2_incl; auto. apply drop1_incl; auto.
+
+ intro. unfold loc_arguments. apply H.
+ unfold int_param_regs. NoRepet.
+ unfold float_param_regs. NoRepet.
+ red; intros x y; simpl. ElimOrEq; ElimOrEq; discriminate.
+Qed.
+
+(** The offsets of [Outgoing] arguments are below [size_arguments s]. *)
+
+Lemma loc_arguments_bounded:
+ forall (s: signature) (ofs: Z) (ty: typ),
+ In (S (Outgoing ofs ty)) (loc_arguments s) ->
+ ofs + typesize ty <= size_arguments s.
+Proof.
+ intros.
+ assert (forall tyl, size_arguments_rec tyl >= 6).
+ induction tyl; unfold size_arguments_rec; fold size_arguments_rec; intros.
+ omega.
+ destruct a; omega.
+ assert (forall tyl iregl fregl ofs0,
+ In (S (Outgoing ofs ty)) (loc_arguments_rec tyl iregl fregl ofs0) ->
+ ofs + typesize ty <= size_arguments_rec tyl + ofs0 - 6).
+ induction tyl; simpl loc_arguments_rec; intros.
+ elim H1.
+ unfold size_arguments_rec; fold size_arguments_rec.
+ destruct a.
+ elim H1; intro. destruct iregl; simplify_eq H2; intros.
+ subst ty; subst ofs. generalize (H0 tyl). simpl typesize. omega.
+ generalize (IHtyl _ _ _ H2). omega.
+ elim H1; intro. destruct fregl; simplify_eq H2; intros.
+ subst ty; subst ofs. generalize (H0 tyl). simpl typesize. omega.
+ generalize (IHtyl _ _ _ H2). omega.
+ replace (size_arguments s) with (size_arguments s + 6 - 6).
+ unfold size_arguments. eapply H1. unfold loc_arguments in H. eauto.
+ omega.
+Qed.
+
+(** Temporary registers do not overlap with argument locations. *)
+
+Lemma loc_arguments_not_temporaries:
+ forall sig, Loc.disjoint (loc_arguments sig) temporaries.
+Proof.
+ intros; red; intros x1 x2 H.
+ generalize (loc_arguments_rec_charact _ _ _ _ _ H).
+ destruct x1.
+ intro H0; elim H0; simpl; (ElimOrEq; ElimOrEq; congruence).
+ destruct s; try contradiction. intro.
+ simpl; ElimOrEq; auto.
+Qed.
+Hint Resolve loc_arguments_not_temporaries: locs.
+
+(** Callee-save registers do not overlap with argument locations. *)
+
+Lemma arguments_not_preserved:
+ forall sig l,
+ Loc.notin l destroyed_at_call -> loc_acceptable l ->
+ Loc.notin l (loc_arguments sig).
+Proof.
+ intros. unfold loc_arguments. destruct l.
+ apply loc_arguments_rec_notin_reg.
+ generalize (Loc.notin_not_in _ _ H). intro; red; intro.
+ apply H1. generalize H2. simpl. ElimOrEq; OrEq.
+ generalize (Loc.notin_not_in _ _ H). intro; red; intro.
+ apply H1. generalize H2. simpl. ElimOrEq; OrEq.
+ destruct s; simpl in H0; try contradiction.
+ apply loc_arguments_rec_notin_local.
+Qed.
+Hint Resolve arguments_not_preserved: locs.
+
+(** Argument locations agree in number with the function signature. *)
+
+Lemma loc_arguments_length:
+ forall sig,
+ List.length (loc_arguments sig) = List.length sig.(sig_args).
+Proof.
+ assert (forall tyl iregl fregl ofs,
+ List.length (loc_arguments_rec tyl iregl fregl ofs) = List.length tyl).
+ induction tyl; simpl; intros.
+ auto.
+ destruct a; simpl; decEq; auto.
+ intros. unfold loc_arguments. auto.
+Qed.
+
+(** Argument locations agree in types with the function signature. *)
+
+Lemma loc_arguments_type:
+ forall sig, List.map Loc.type (loc_arguments sig) = sig.(sig_args).
+Proof.
+ assert (forall tyl iregl fregl ofs,
+ (forall r, In r iregl -> mreg_type r = Tint) ->
+ (forall r, In r fregl -> mreg_type r = Tfloat) ->
+ List.map Loc.type (loc_arguments_rec tyl iregl fregl ofs) = tyl).
+ induction tyl; simpl; intros.
+ auto.
+ destruct a; simpl; apply (f_equal2 (@cons typ)).
+ destruct iregl. reflexivity. simpl. apply H. auto with coqlib.
+ apply IHtyl.
+ intros. apply H. apply drop1_incl. auto. auto.
+ destruct fregl. reflexivity. simpl. apply H0. auto with coqlib.
+ apply IHtyl.
+ intros. apply H. apply drop2_incl. auto.
+ intros. apply H0. apply drop1_incl. auto.
+
+ intros. unfold loc_arguments. apply H.
+ intro; simpl. ElimOrEq; reflexivity.
+ intro; simpl. ElimOrEq; reflexivity.
+Qed.
+
+(** There is no partial overlap between an argument location and an
+ acceptable location: they are either identical or disjoint. *)
+
+Lemma no_overlap_arguments:
+ forall args sg,
+ locs_acceptable args ->
+ Loc.no_overlap args (loc_arguments sg).
+Proof.
+ unfold Loc.no_overlap; intros.
+ generalize (H r H0).
+ generalize (loc_arguments_acceptable _ _ H1).
+ destruct s; destruct r; simpl.
+ intros. case (mreg_eq m0 m); intro. left; congruence. tauto.
+ intros. right; destruct s; auto.
+ intros. right. auto.
+ destruct s; try tauto. destruct s0; tauto.
+Qed.
+
+(** ** Location of function parameters *)
+
+(** A function finds the values of its parameter in the same locations
+ where its caller stored them, except that the stack-allocated arguments,
+ viewed as [Outgoing] slots by the caller, are accessed via [Incoming]
+ slots (at the same offsets and types) in the callee. *)
+
+Definition parameter_of_argument (l: loc) : loc :=
+ match l with
+ | S (Outgoing n ty) => S (Incoming n ty)
+ | _ => l
+ end.
+
+Definition loc_parameters (s: signature) :=
+ List.map parameter_of_argument (loc_arguments s).
+
+Lemma loc_parameters_type:
+ forall sig, List.map Loc.type (loc_parameters sig) = sig.(sig_args).
+Proof.
+ intros. unfold loc_parameters.
+ rewrite list_map_compose.
+ rewrite <- loc_arguments_type.
+ apply list_map_exten.
+ intros. destruct x; simpl. auto.
+ destruct s; reflexivity.
+Qed.
+
+Lemma loc_parameters_not_temporaries:
+ forall sig, Loc.disjoint (loc_parameters sig) temporaries.
+Proof.
+ intro; red; intros.
+ unfold loc_parameters in H.
+ elim (list_in_map_inv _ _ _ H). intros y [EQ IN].
+ generalize (loc_arguments_not_temporaries sig y x2 IN H0).
+ subst x1. destruct x2.
+ destruct y; simpl. auto. destruct s; auto.
+ byContradiction. generalize H0. simpl. NotOrEq.
+Qed.
+
+Lemma no_overlap_parameters:
+ forall params sg,
+ locs_acceptable params ->
+ Loc.no_overlap (loc_parameters sg) params.
+Proof.
+ unfold Loc.no_overlap; intros.
+ unfold loc_parameters in H0.
+ elim (list_in_map_inv _ _ _ H0). intros t [EQ IN].
+ rewrite EQ.
+ generalize (loc_arguments_acceptable _ _ IN).
+ generalize (H s H1).
+ destruct s; destruct t; simpl.
+ intros. case (mreg_eq m0 m); intro. left; congruence. tauto.
+ intros. right; destruct s; simpl; auto.
+ intros; right; auto.
+ destruct s; try tauto. destruct s0; try tauto.
+ intros; simpl. tauto.
+Qed.
+
diff --git a/backend/Csharpminor.v b/backend/Csharpminor.v
new file mode 100644
index 0000000..858d945
--- /dev/null
+++ b/backend/Csharpminor.v
@@ -0,0 +1,511 @@
+(** Abstract syntax and semantics for the Csharpminor language. *)
+
+Require Import Coqlib.
+Require Import Maps.
+Require Import AST.
+Require Import Integers.
+Require Import Floats.
+Require Import Values.
+Require Import Mem.
+Require Import Globalenvs.
+
+(** Abstract syntax *)
+
+(** Cminor is a low-level imperative language structured in expressions,
+ statements, functions and programs. Expressions include
+ reading and writing local variables, reading and writing store locations,
+ arithmetic operations, function calls, and conditional expressions
+ (similar to [e1 ? e2 : e3] in C). The [Elet] and [Eletvar] constructs
+ enable sharing the computations of subexpressions. De Bruijn notation
+ is used: [Eletvar n] refers to the value bound by then [n+1]-th enclosing
+ [Elet] construct.
+
+ Unlike in Cminor (the next intermediate language of the back-end),
+ Csharpminor local variables reside in memory, and their address can
+ be taken using [Eaddrof] expressions.
+
+ Another difference with Cminor is that Csharpminor is entirely
+ processor-neutral. In particular, Csharpminor uses a standard set of
+ operations: it does not reflect processor-specific operations nor
+ addressing modes. *)
+
+Inductive operation : Set :=
+ | Ointconst: int -> operation (**r integer constant *)
+ | Ofloatconst: float -> operation (**r floating-point constant *)
+ | Ocast8unsigned: operation (**r 8-bit zero extension *)
+ | Ocast8signed: operation (**r 8-bit sign extension *)
+ | Ocast16unsigned: operation (**r 16-bit zero extension *)
+ | Ocast16signed: operation (**r 16-bit sign extension *)
+ | Onotint: operation (**r bitwise complement *)
+ | Oadd: operation (**r integer addition *)
+ | Osub: operation (**r integer subtraction *)
+ | Omul: operation (**r integer multiplication *)
+ | Odiv: operation (**r integer signed division *)
+ | Odivu: operation (**r integer unsigned division *)
+ | Omod: operation (**r integer signed modulus *)
+ | Omodu: operation (**r integer unsigned modulus *)
+ | Oand: operation (**r bitwise ``and'' *)
+ | Oor: operation (**r bitwise ``or'' *)
+ | Oxor: operation (**r bitwise ``xor'' *)
+ | Oshl: operation (**r left shift *)
+ | Oshr: operation (**r right signed shift *)
+ | Oshru: operation (**r right unsigned shift *)
+ | Onegf: operation (**r float opposite *)
+ | Oabsf: operation (**r float absolute value *)
+ | Oaddf: operation (**r float addition *)
+ | Osubf: operation (**r float subtraction *)
+ | Omulf: operation (**r float multiplication *)
+ | Odivf: operation (**r float division *)
+ | Osingleoffloat: operation (**r float truncation *)
+ | Ointoffloat: operation (**r integer to float *)
+ | Ofloatofint: operation (**r float to signed integer *)
+ | Ofloatofintu: operation (**r float to unsigned integer *)
+ | Ocmp: comparison -> operation (**r integer signed comparison *)
+ | Ocmpu: comparison -> operation (**r integer unsigned comparison *)
+ | Ocmpf: comparison -> operation. (**r float comparison *)
+
+Inductive expr : Set :=
+ | Evar : ident -> expr (**r reading a scalar variable *)
+ | Eaddrof : ident -> expr (**r taking the address of a variable *)
+ | Eassign : ident -> expr -> expr (**r assignment to a scalar variable *)
+ | Eop : operation -> exprlist -> expr (**r arithmetic operation *)
+ | Eload : memory_chunk -> expr -> expr (**r memory read *)
+ | Estore : memory_chunk -> expr -> expr -> expr (**r memory write *)
+ | Ecall : signature -> expr -> exprlist -> expr (**r function call *)
+ | Econdition : expr -> expr -> expr -> expr (**r conditional expression *)
+ | Elet : expr -> expr -> expr (**r let binding *)
+ | Eletvar : nat -> expr (**r reference to a let-bound variable *)
+
+with exprlist : Set :=
+ | Enil: exprlist
+ | Econs: expr -> exprlist -> exprlist.
+
+(** Statements include expression evaluation, an if/then/else conditional,
+ infinite loops, blocks and early block exits, and early function returns.
+ [Sexit n] terminates prematurely the execution of the [n+1] enclosing
+ [Sblock] statements. *)
+
+Inductive stmt : Set :=
+ | Sexpr: expr -> stmt
+ | Sifthenelse: expr -> stmtlist -> stmtlist -> stmt
+ | Sloop: stmtlist -> stmt
+ | Sblock: stmtlist -> stmt
+ | Sexit: nat -> stmt
+ | Sreturn: option expr -> stmt
+
+with stmtlist : Set :=
+ | Snil: stmtlist
+ | Scons: stmt -> stmtlist -> stmtlist.
+
+(** The local variables of a function can be either scalar variables
+ (whose type, size and signedness are given by a [memory_chunk]
+ or array variables (of the indicated sizes). The only operation
+ permitted on an array variable is taking its address. *)
+
+Inductive local_variable : Set :=
+ | LVscalar: memory_chunk -> local_variable
+ | LVarray: Z -> local_variable.
+
+(** Functions are composed of a signature, a list of parameter names
+ with associated memory chunks (parameters must be scalar), a list of
+ local variables with associated [local_variable] description, and a
+ list of statements representing the function body. *)
+
+Record function : Set := mkfunction {
+ fn_sig: signature;
+ fn_params: list (ident * memory_chunk);
+ fn_vars: list (ident * local_variable);
+ fn_body: stmtlist
+}.
+
+Definition program := AST.program function.
+
+(** * Operational semantics *)
+
+(** The operational semantics for Csharpminor is given in big-step operational
+ style. Expressions evaluate to values, and statements evaluate to
+ ``outcomes'' indicating how execution should proceed afterwards. *)
+
+Inductive outcome: Set :=
+ | Out_normal: outcome (**r continue in sequence *)
+ | Out_exit: nat -> outcome (**r terminate [n+1] enclosing blocks *)
+ | Out_return: option val -> outcome. (**r return immediately to caller *)
+
+Definition outcome_result_value
+ (out: outcome) (ot: option typ) (v: val) : Prop :=
+ match out, ot with
+ | Out_normal, None => v = Vundef
+ | Out_return None, None => v = Vundef
+ | Out_return (Some v'), Some ty => v = v'
+ | _, _ => False
+ end.
+
+Definition outcome_block (out: outcome) : outcome :=
+ match out with
+ | Out_normal => Out_normal
+ | Out_exit O => Out_normal
+ | Out_exit (S n) => Out_exit n
+ | Out_return optv => Out_return optv
+ end.
+
+(** Three kinds of evaluation environments are involved:
+- [genv]: global environments, define symbols and functions;
+- [env]: local environments, map local variables to memory blocks;
+- [lenv]: let environments, map de Bruijn indices to values.
+*)
+Definition genv := Genv.t function.
+Definition env := PTree.t (block * local_variable).
+Definition empty_env : env := PTree.empty (block * local_variable).
+Definition letenv := list val.
+
+Definition sizeof (lv: local_variable) : Z :=
+ match lv with
+ | LVscalar chunk => size_chunk chunk
+ | LVarray sz => Zmax 0 sz
+ end.
+
+Definition fn_variables (f: function) :=
+ List.map
+ (fun id_chunk => (fst id_chunk, LVscalar (snd id_chunk))) f.(fn_params)
+ ++ f.(fn_vars).
+
+Definition fn_params_names (f: function) :=
+ List.map (@fst ident memory_chunk) f.(fn_params).
+
+Definition fn_vars_names (f: function) :=
+ List.map (@fst ident local_variable) f.(fn_vars).
+
+
+(** Evaluation of operator applications. *)
+
+Definition eval_compare_null (c: comparison) (n: int) : option val :=
+ if Int.eq n Int.zero
+ then match c with Ceq => Some Vfalse | Cne => Some Vtrue | _ => None end
+ else None.
+
+Definition eval_operation (op: operation) (vl: list val) (m: mem): option val :=
+ match op, vl with
+ | Ointconst n, nil => Some (Vint n)
+ | Ofloatconst n, nil => Some (Vfloat n)
+ | Ocast8unsigned, Vint n1 :: nil => Some (Vint (Int.cast8unsigned n1))
+ | Ocast8signed, Vint n1 :: nil => Some (Vint (Int.cast8signed n1))
+ | Ocast16unsigned, Vint n1 :: nil => Some (Vint (Int.cast16unsigned n1))
+ | Ocast16signed, Vint n1 :: nil => Some (Vint (Int.cast16signed n1))
+ | Onotint, Vint n1 :: nil => Some (Vint (Int.not n1))
+ | Oadd, Vint n1 :: Vint n2 :: nil => Some (Vint (Int.add n1 n2))
+ | Oadd, Vint n1 :: Vptr b2 n2 :: nil => Some (Vptr b2 (Int.add n2 n1))
+ | Oadd, Vptr b1 n1 :: Vint n2 :: nil => Some (Vptr b1 (Int.add n1 n2))
+ | Osub, Vint n1 :: Vint n2 :: nil => Some (Vint (Int.sub n1 n2))
+ | Osub, Vptr b1 n1 :: Vint n2 :: nil => Some (Vptr b1 (Int.sub n1 n2))
+ | Osub, Vptr b1 n1 :: Vptr b2 n2 :: nil =>
+ if eq_block b1 b2 then Some (Vint (Int.sub n1 n2)) else None
+ | Omul, Vint n1 :: Vint n2 :: nil => Some (Vint (Int.mul n1 n2))
+ | Odiv, Vint n1 :: Vint n2 :: nil =>
+ if Int.eq n2 Int.zero then None else Some (Vint (Int.divs n1 n2))
+ | Odivu, Vint n1 :: Vint n2 :: nil =>
+ if Int.eq n2 Int.zero then None else Some (Vint (Int.divu n1 n2))
+ | Omod, Vint n1 :: Vint n2 :: nil =>
+ if Int.eq n2 Int.zero then None else Some (Vint (Int.mods n1 n2))
+ | Omodu, Vint n1 :: Vint n2 :: nil =>
+ if Int.eq n2 Int.zero then None else Some (Vint (Int.modu n1 n2))
+ | Oand, Vint n1 :: Vint n2 :: nil => Some (Vint (Int.and n1 n2))
+ | Oor, Vint n1 :: Vint n2 :: nil => Some (Vint (Int.or n1 n2))
+ | Oxor, Vint n1 :: Vint n2 :: nil => Some (Vint (Int.xor n1 n2))
+ | Oshl, Vint n1 :: Vint n2 :: nil =>
+ if Int.ltu n2 (Int.repr 32) then Some (Vint (Int.shl n1 n2)) else None
+ | Oshr, Vint n1 :: Vint n2 :: nil =>
+ if Int.ltu n2 (Int.repr 32) then Some (Vint (Int.shr n1 n2)) else None
+ | Oshru, Vint n1 :: Vint n2 :: nil =>
+ if Int.ltu n2 (Int.repr 32) then Some (Vint (Int.shru n1 n2)) else None
+ | Onegf, Vfloat f1 :: nil => Some (Vfloat (Float.neg f1))
+ | Oabsf, Vfloat f1 :: nil => Some (Vfloat (Float.abs f1))
+ | Oaddf, Vfloat f1 :: Vfloat f2 :: nil => Some (Vfloat (Float.add f1 f2))
+ | Osubf, Vfloat f1 :: Vfloat f2 :: nil => Some (Vfloat (Float.sub f1 f2))
+ | Omulf, Vfloat f1 :: Vfloat f2 :: nil => Some (Vfloat (Float.mul f1 f2))
+ | Odivf, Vfloat f1 :: Vfloat f2 :: nil => Some (Vfloat (Float.div f1 f2))
+ | Osingleoffloat, Vfloat f1 :: nil =>
+ Some (Vfloat (Float.singleoffloat f1))
+ | Ointoffloat, Vfloat f1 :: nil =>
+ Some (Vint (Float.intoffloat f1))
+ | Ofloatofint, Vint n1 :: nil =>
+ Some (Vfloat (Float.floatofint n1))
+ | Ofloatofintu, Vint n1 :: nil =>
+ Some (Vfloat (Float.floatofintu n1))
+ | Ocmp c, Vint n1 :: Vint n2 :: nil =>
+ Some (Val.of_bool(Int.cmp c n1 n2))
+ | Ocmp c, Vptr b1 n1 :: Vptr b2 n2 :: nil =>
+ if valid_pointer m b1 (Int.signed n1)
+ && valid_pointer m b2 (Int.signed n2) then
+ if eq_block b1 b2 then Some(Val.of_bool(Int.cmp c n1 n2)) else None
+ else
+ None
+ | Ocmp c, Vptr b1 n1 :: Vint n2 :: nil => eval_compare_null c n2
+ | Ocmp c, Vint n1 :: Vptr b2 n2 :: nil => eval_compare_null c n1
+ | Ocmpu c, Vint n1 :: Vint n2 :: nil =>
+ Some (Val.of_bool(Int.cmpu c n1 n2))
+ | Ocmpf c, Vfloat f1 :: Vfloat f2 :: nil =>
+ Some (Val.of_bool (Float.cmp c f1 f2))
+ | _, _ => None
+ end.
+
+(** ``Casting'' a value to a memory chunk. The value is truncated and
+ zero- or sign-extended as dictated by the memory chunk. *)
+
+Definition cast (chunk: memory_chunk) (v: val) : option val :=
+ match chunk, v with
+ | Mint8signed, Vint n => Some (Vint (Int.cast8signed n))
+ | Mint8unsigned, Vint n => Some (Vint (Int.cast8unsigned n))
+ | Mint16signed, Vint n => Some (Vint (Int.cast16signed n))
+ | Mint16unsigned, Vint n => Some (Vint (Int.cast16unsigned n))
+ | Mint32, Vint n => Some(Vint n)
+ | Mint32, Vptr b ofs => Some(Vptr b ofs)
+ | Mfloat32, Vfloat f => Some(Vfloat(Float.singleoffloat f))
+ | Mfloat64, Vfloat f => Some(Vfloat f)
+ | _, _ => None
+ end.
+
+(** Allocation of local variables at function entry. Each variable is
+ bound to the reference to a fresh block of the appropriate size. *)
+
+Inductive alloc_variables: env -> mem ->
+ list (ident * local_variable) ->
+ env -> mem -> list block -> Prop :=
+ | alloc_variables_nil:
+ forall e m,
+ alloc_variables e m nil e m nil
+ | alloc_variables_cons:
+ forall e m id lv vars m1 b1 m2 e2 lb,
+ Mem.alloc m 0 (sizeof lv) = (m1, b1) ->
+ alloc_variables (PTree.set id (b1, lv) e) m1 vars e2 m2 lb ->
+ alloc_variables e m ((id, lv) :: vars) e2 m2 (b1 :: lb).
+
+(** Initialization of local variables that are parameters. The value
+ of the corresponding argument is stored into the memory block
+ bound to the parameter. *)
+
+Inductive bind_parameters: env ->
+ mem -> list (ident * memory_chunk) -> list val ->
+ mem -> Prop :=
+ | bind_parameters_nil:
+ forall e m,
+ bind_parameters e m nil nil m
+ | bind_parameters_cons:
+ forall e m id chunk params v1 v2 vl b m1 m2,
+ PTree.get id e = Some(b, LVscalar chunk) ->
+ cast chunk v1 = Some v2 ->
+ Mem.store chunk m b 0 v2 = Some m1 ->
+ bind_parameters e m1 params vl m2 ->
+ bind_parameters e m ((id, chunk) :: params) (v1 :: vl) m2.
+
+Section RELSEM.
+
+Variable ge: genv.
+
+(** Evaluation of an expression: [eval_expr ge le e m a m' v] states
+ that expression [a], in initial memory state [m], evaluates to value
+ [v]. [m'] is the final memory state, respectively, reflecting
+ memory stores possibly performed by [a]. [ge], [e] and [le] are the
+ global environment, local environment and let environment
+ respectively. They do not change during evaluation. *)
+
+Inductive eval_expr:
+ letenv -> env ->
+ mem -> expr -> mem -> val -> Prop :=
+ | eval_Evar:
+ forall le e m id b chunk v,
+ PTree.get id e = Some (b, LVscalar chunk) ->
+ Mem.load chunk m b 0 = Some v ->
+ eval_expr le e m (Evar id) m v
+ | eval_Eassign:
+ forall le e m id a m1 b chunk v1 v2 m2,
+ eval_expr le e m a m1 v1 ->
+ PTree.get id e = Some (b, LVscalar chunk) ->
+ cast chunk v1 = Some v2 ->
+ Mem.store chunk m1 b 0 v2 = Some m2 ->
+ eval_expr le e m (Eassign id a) m2 v2
+ | eval_Eaddrof_local:
+ forall le e m id b lv,
+ PTree.get id e = Some (b, lv) ->
+ eval_expr le e m (Eaddrof id) m (Vptr b Int.zero)
+ | eval_Eaddrof_global:
+ forall le e m id b,
+ PTree.get id e = None ->
+ Genv.find_symbol ge id = Some b ->
+ eval_expr le e m (Eaddrof id) m (Vptr b Int.zero)
+ | eval_Eop:
+ forall le e m op al m1 vl v,
+ eval_exprlist le e m al m1 vl ->
+ eval_operation op vl m1 = Some v ->
+ eval_expr le e m (Eop op al) m1 v
+ | eval_Eload:
+ forall le e m chunk a m1 v1 v,
+ eval_expr le e m a m1 v1 ->
+ Mem.loadv chunk m1 v1 = Some v ->
+ eval_expr le e m (Eload chunk a) m1 v
+ | eval_Estore:
+ forall le e m chunk a b m1 v1 m2 v2 m3 v3,
+ eval_expr le e m a m1 v1 ->
+ eval_expr le e m1 b m2 v2 ->
+ cast chunk v2 = Some v3 ->
+ Mem.storev chunk m2 v1 v3 = Some m3 ->
+ eval_expr le e m (Estore chunk a b) m3 v3
+ | eval_Ecall:
+ forall le e m sig a bl m1 m2 m3 vf vargs vres f,
+ eval_expr le e m a m1 vf ->
+ eval_exprlist le e m1 bl m2 vargs ->
+ Genv.find_funct ge vf = Some f ->
+ f.(fn_sig) = sig ->
+ eval_funcall m2 f vargs m3 vres ->
+ eval_expr le e m (Ecall sig a bl) m3 vres
+ | eval_Econdition_true:
+ forall le e m a b c m1 v1 m2 v2,
+ eval_expr le e m a m1 v1 ->
+ Val.is_true v1 ->
+ eval_expr le e m1 b m2 v2 ->
+ eval_expr le e m (Econdition a b c) m2 v2
+ | eval_Econdition_false:
+ forall le e m a b c m1 v1 m2 v2,
+ eval_expr le e m a m1 v1 ->
+ Val.is_false v1 ->
+ eval_expr le e m1 c m2 v2 ->
+ eval_expr le e m (Econdition a b c) m2 v2
+ | eval_Elet:
+ forall le e m a b m1 v1 m2 v2,
+ eval_expr le e m a m1 v1 ->
+ eval_expr (v1::le) e m1 b m2 v2 ->
+ eval_expr le e m (Elet a b) m2 v2
+ | eval_Eletvar:
+ forall le e m n v,
+ nth_error le n = Some v ->
+ eval_expr le e m (Eletvar n) m v
+
+(** Evaluation of a list of expressions:
+ [eval_exprlist ge le al m a m' vl]
+ states that the list [al] of expressions evaluate
+ to the list [vl] of values.
+ The other parameters are as in [eval_expr].
+*)
+
+with eval_exprlist:
+ letenv -> env ->
+ mem -> exprlist ->
+ mem -> list val -> Prop :=
+ | eval_Enil:
+ forall le e m,
+ eval_exprlist le e m Enil m nil
+ | eval_Econs:
+ forall le e m a bl m1 v m2 vl,
+ eval_expr le e m a m1 v ->
+ eval_exprlist le e m1 bl m2 vl ->
+ eval_exprlist le e m (Econs a bl) m2 (v :: vl)
+
+(** Evaluation of a function invocation: [eval_funcall ge m f args m' res]
+ means that the function [f], applied to the arguments [args] in
+ memory state [m], returns the value [res] in modified memory state [m'].
+*)
+with eval_funcall:
+ mem -> function -> list val ->
+ mem -> val -> Prop :=
+ | eval_funcall_intro:
+ forall m f vargs e m1 lb m2 m3 out vres,
+ list_norepet (fn_params_names f ++ fn_vars_names f) ->
+ alloc_variables empty_env m (fn_variables f) e m1 lb ->
+ bind_parameters e m1 f.(fn_params) vargs m2 ->
+ exec_stmtlist e m2 f.(fn_body) m3 out ->
+ outcome_result_value out f.(fn_sig).(sig_res) vres ->
+ eval_funcall m f vargs (Mem.free_list m3 lb) vres
+
+(** Execution of a statement: [exec_stmt ge e m s m' out]
+ means that statement [s] executes with outcome [out].
+ The other parameters are as in [eval_expr]. *)
+
+with exec_stmt:
+ env ->
+ mem -> stmt ->
+ mem -> outcome -> Prop :=
+ | exec_Sexpr:
+ forall e m a m1 v,
+ eval_expr nil e m a m1 v ->
+ exec_stmt e m (Sexpr a) m1 Out_normal
+ | exec_Sifthenelse_true:
+ forall e m a sl1 sl2 m1 v1 m2 out,
+ eval_expr nil e m a m1 v1 ->
+ Val.is_true v1 ->
+ exec_stmtlist e m1 sl1 m2 out ->
+ exec_stmt e m (Sifthenelse a sl1 sl2) m2 out
+ | exec_Sifthenelse_false:
+ forall e m a sl1 sl2 m1 v1 m2 out,
+ eval_expr nil e m a m1 v1 ->
+ Val.is_false v1 ->
+ exec_stmtlist e m1 sl2 m2 out ->
+ exec_stmt e m (Sifthenelse a sl1 sl2) m2 out
+ | exec_Sloop_loop:
+ forall e m sl m1 m2 out,
+ exec_stmtlist e m sl m1 Out_normal ->
+ exec_stmt e m1 (Sloop sl) m2 out ->
+ exec_stmt e m (Sloop sl) m2 out
+ | exec_Sloop_stop:
+ forall e m sl m1 out,
+ exec_stmtlist e m sl m1 out ->
+ out <> Out_normal ->
+ exec_stmt e m (Sloop sl) m1 out
+ | exec_Sblock:
+ forall e m sl m1 out,
+ exec_stmtlist e m sl m1 out ->
+ exec_stmt e m (Sblock sl) m1 (outcome_block out)
+ | exec_Sexit:
+ forall e m n,
+ exec_stmt e m (Sexit n) m (Out_exit n)
+ | exec_Sreturn_none:
+ forall e m,
+ exec_stmt e m (Sreturn None) m (Out_return None)
+ | exec_Sreturn_some:
+ forall e m a m1 v,
+ eval_expr nil e m a m1 v ->
+ exec_stmt e m (Sreturn (Some a)) m1 (Out_return (Some v))
+
+(** Execution of a list of statements: [exec_stmtlist ge e m sl m' out]
+ means that the list [sl] of statements executes sequentially
+ with outcome [out]. Execution stops at the first statement that
+ leads an outcome different from [Out_normal].
+ The other parameters are as in [eval_expr]. *)
+
+with exec_stmtlist:
+ env ->
+ mem -> stmtlist ->
+ mem -> outcome -> Prop :=
+ | exec_Snil:
+ forall e m,
+ exec_stmtlist e m Snil m Out_normal
+ | exec_Scons_continue:
+ forall e m s sl m1 m2 out,
+ exec_stmt e m s m1 Out_normal ->
+ exec_stmtlist e m1 sl m2 out ->
+ exec_stmtlist e m (Scons s sl) m2 out
+ | exec_Scons_stop:
+ forall e m s sl m1 out,
+ exec_stmt e m s m1 out ->
+ out <> Out_normal ->
+ exec_stmtlist e m (Scons s sl) m1 out.
+
+Scheme eval_expr_ind5 := Minimality for eval_expr Sort Prop
+ with eval_exprlist_ind5 := Minimality for eval_exprlist Sort Prop
+ with eval_funcall_ind5 := Minimality for eval_funcall Sort Prop
+ with exec_stmt_ind5 := Minimality for exec_stmt Sort Prop
+ with exec_stmtlist_ind5 := Minimality for exec_stmtlist Sort Prop.
+
+End RELSEM.
+
+(** Execution of a whole program: [exec_program p r]
+ holds if the application of [p]'s main function to no arguments
+ in the initial memory state for [p] eventually returns value [r]. *)
+
+Definition exec_program (p: program) (r: val) : Prop :=
+ let ge := Genv.globalenv p in
+ let m0 := Genv.init_mem p in
+ exists b, exists f, exists m,
+ Genv.find_symbol ge p.(prog_main) = Some b /\
+ Genv.find_funct_ptr ge b = Some f /\
+ f.(fn_sig) = mksignature nil (Some Tint) /\
+ eval_funcall ge m0 f nil m r.
+
diff --git a/backend/Globalenvs.v b/backend/Globalenvs.v
new file mode 100644
index 0000000..55afc35
--- /dev/null
+++ b/backend/Globalenvs.v
@@ -0,0 +1,587 @@
+(** Global environments are a component of the dynamic semantics of
+ all languages involved in the compiler. A global environment
+ maps symbol names (names of functions and of global variables)
+ to the corresponding memory addresses. It also maps memory addresses
+ of functions to the corresponding function descriptions.
+
+ Global environments, along with the initial memory state at the beginning
+ of program execution, are built from the program of interest, as follows:
+- A distinct memory address is assigned to each function of the program.
+ These function addresses use negative numbers to distinguish them from
+ addresses of memory blocks. The associations of function name to function
+ address and function address to function description are recorded in
+ the global environment.
+- For each global variable, a memory block is allocated and associated to
+ the name of the variable.
+
+ These operations reflect (at a high level of abstraction) what takes
+ place during program linking and program loading in a real operating
+ system. *)
+
+Require Import Coqlib.
+Require Import Maps.
+Require Import AST.
+Require Import Integers.
+Require Import Values.
+Require Import Mem.
+
+Set Implicit Arguments.
+
+Module Type GENV.
+
+(** ** Types and operations *)
+
+ Variable t: Set -> Set.
+ (** The type of global environments. The parameter [F] is the type
+ of function descriptions. *)
+
+ Variable globalenv: forall (F: Set), program F -> t F.
+ (** Return the global environment for the given program. *)
+
+ Variable init_mem: forall (F: Set), program F -> mem.
+ (** Return the initial memory state for the given program. *)
+
+ Variable find_funct_ptr: forall (F: Set), t F -> block -> option F.
+ (** Return the function description associated with the given address,
+ if any. *)
+
+ Variable find_funct: forall (F: Set), t F -> val -> option F.
+ (** Same as [find_funct_ptr] but the function address is given as
+ a value, which must be a pointer with offset 0. *)
+
+ Variable find_symbol: forall (F: Set), t F -> ident -> option block.
+ (** Return the address of the given global symbol, if any. *)
+
+(** ** Properties of the operations. *)
+
+ Hypothesis find_funct_inv:
+ forall (F: Set) (ge: t F) (v: val) (f: F),
+ find_funct ge v = Some f -> exists b, v = Vptr b Int.zero.
+ Hypothesis find_funct_find_funct_ptr:
+ forall (F: Set) (ge: t F) (b: block),
+ find_funct ge (Vptr b Int.zero) = find_funct_ptr ge b.
+ Hypothesis find_funct_ptr_prop:
+ forall (F: Set) (P: F -> Prop) (p: program F) (b: block) (f: F),
+ (forall id f, In (id, f) (prog_funct p) -> P f) ->
+ find_funct_ptr (globalenv p) b = Some f ->
+ P f.
+ Hypothesis find_funct_prop:
+ forall (F: Set) (P: F -> Prop) (p: program F) (v: val) (f: F),
+ (forall id f, In (id, f) (prog_funct p) -> P f) ->
+ find_funct (globalenv p) v = Some f ->
+ P f.
+ Hypothesis initmem_nullptr:
+ forall (F: Set) (p: program F),
+ let m := init_mem p in
+ valid_block m nullptr /\
+ m.(blocks) nullptr = empty_block 0 0.
+ Hypothesis initmem_undef:
+ forall (F: Set) (p: program F) (b: block),
+ exists lo, exists hi,
+ (init_mem p).(blocks) b = empty_block lo hi.
+ Hypothesis find_funct_ptr_inv:
+ forall (F: Set) (p: program F) (b: block) (f: F),
+ find_funct_ptr (globalenv p) b = Some f -> b < 0.
+ Hypothesis find_symbol_inv:
+ forall (F: Set) (p: program F) (id: ident) (b: block),
+ find_symbol (globalenv p) id = Some b -> b < nextblock (init_mem p).
+
+(** Commutation properties between program transformations
+ and operations over global environments. *)
+
+ Hypothesis find_funct_ptr_transf:
+ forall (A B: Set) (transf: A -> B) (p: program A) (b: block) (f: A),
+ find_funct_ptr (globalenv p) b = Some f ->
+ find_funct_ptr (globalenv (transform_program transf p)) b = Some (transf f).
+ Hypothesis find_funct_transf:
+ forall (A B: Set) (transf: A -> B) (p: program A) (v: val) (f: A),
+ find_funct (globalenv p) v = Some f ->
+ find_funct (globalenv (transform_program transf p)) v = Some (transf f).
+ Hypothesis find_symbol_transf:
+ forall (A B: Set) (transf: A -> B) (p: program A) (s: ident),
+ find_symbol (globalenv (transform_program transf p)) s =
+ find_symbol (globalenv p) s.
+ Hypothesis init_mem_transf:
+ forall (A B: Set) (transf: A -> B) (p: program A),
+ init_mem (transform_program transf p) = init_mem p.
+
+(** Commutation properties between partial program transformations
+ and operations over global environments. *)
+
+ Hypothesis find_funct_ptr_transf_partial:
+ forall (A B: Set) (transf: A -> option B)
+ (p: program A) (p': program B),
+ transform_partial_program transf p = Some p' ->
+ forall (b: block) (f: A),
+ find_funct_ptr (globalenv p) b = Some f ->
+ find_funct_ptr (globalenv p') b = transf f /\ transf f <> None.
+ Hypothesis find_funct_transf_partial:
+ forall (A B: Set) (transf: A -> option B)
+ (p: program A) (p': program B),
+ transform_partial_program transf p = Some p' ->
+ forall (v: val) (f: A),
+ find_funct (globalenv p) v = Some f ->
+ find_funct (globalenv p') v = transf f /\ transf f <> None.
+ Hypothesis find_symbol_transf_partial:
+ forall (A B: Set) (transf: A -> option B)
+ (p: program A) (p': program B),
+ transform_partial_program transf p = Some p' ->
+ forall (s: ident),
+ find_symbol (globalenv p') s = find_symbol (globalenv p) s.
+ Hypothesis init_mem_transf_partial:
+ forall (A B: Set) (transf: A -> option B)
+ (p: program A) (p': program B),
+ transform_partial_program transf p = Some p' ->
+ init_mem p' = init_mem p.
+End GENV.
+
+(** The rest of this library is a straightforward implementation of
+ the module signature above. *)
+
+Module Genv: GENV.
+
+Section GENV.
+
+Variable funct: Set. (* The type of functions *)
+
+Record genv : Set := mkgenv {
+ functions: ZMap.t (option funct); (* mapping function ptr -> function *)
+ nextfunction: Z;
+ symbols: PTree.t block (* mapping symbol -> block *)
+}.
+
+Definition t := genv.
+
+Definition add_funct (name_fun: (ident * funct)) (g: genv) : genv :=
+ let b := g.(nextfunction) in
+ mkgenv (ZMap.set b (Some (snd name_fun)) g.(functions))
+ (Zpred b)
+ (PTree.set (fst name_fun) b g.(symbols)).
+
+Definition add_symbol (name: ident) (b: block) (g: genv) : genv :=
+ mkgenv g.(functions)
+ g.(nextfunction)
+ (PTree.set name b g.(symbols)).
+
+Definition find_funct_ptr (g: genv) (b: block) : option funct :=
+ ZMap.get b g.(functions).
+
+Definition find_funct (g: genv) (v: val) : option funct :=
+ match v with
+ | Vptr b ofs =>
+ if Int.eq ofs Int.zero then find_funct_ptr g b else None
+ | _ =>
+ None
+ end.
+
+Definition find_symbol (g: genv) (symb: ident) : option block :=
+ PTree.get symb g.(symbols).
+
+Lemma find_funct_inv:
+ forall (ge: t) (v: val) (f: funct),
+ find_funct ge v = Some f -> exists b, v = Vptr b Int.zero.
+Proof.
+ intros until f. unfold find_funct. destruct v; try (intros; discriminate).
+ generalize (Int.eq_spec i Int.zero). case (Int.eq i Int.zero); intros.
+ exists b. congruence.
+ discriminate.
+Qed.
+
+Lemma find_funct_find_funct_ptr:
+ forall (ge: t) (b: block),
+ find_funct ge (Vptr b Int.zero) = find_funct_ptr ge b.
+Proof.
+ intros. simpl.
+ generalize (Int.eq_spec Int.zero Int.zero).
+ case (Int.eq Int.zero Int.zero); intros.
+ auto. tauto.
+Qed.
+
+(* Construct environment and initial memory store *)
+
+Definition empty : genv :=
+ mkgenv (ZMap.init None) (-1) (PTree.empty block).
+
+Definition add_functs (init: genv) (fns: list (ident * funct)) : genv :=
+ List.fold_right add_funct init fns.
+
+Definition add_globals
+ (init: genv * mem) (vars: list (ident * Z)) : genv * mem :=
+ List.fold_right
+ (fun (id_sz: ident * Z) (g_st: genv * mem) =>
+ let (id, sz) := id_sz in
+ let (g, st) := g_st in
+ let (st', b) := Mem.alloc st 0 sz in
+ (add_symbol id b g, st'))
+ init vars.
+
+Definition globalenv_initmem (p: program funct) : (genv * mem) :=
+ add_globals
+ (add_functs empty p.(prog_funct), Mem.empty)
+ p.(prog_vars).
+
+Definition globalenv (p: program funct) : genv :=
+ fst (globalenv_initmem p).
+Definition init_mem (p: program funct) : mem :=
+ snd (globalenv_initmem p).
+
+Lemma functions_globalenv:
+ forall (p: program funct),
+ functions (globalenv p) = functions (add_functs empty p.(prog_funct)).
+Proof.
+ assert (forall (init: genv * mem) (vars: list (ident * Z)),
+ functions (fst (add_globals init vars)) = functions (fst init)).
+ induction vars; simpl.
+ reflexivity.
+ destruct a. destruct (add_globals init vars).
+ simpl. exact IHvars.
+
+ unfold add_globals; simpl.
+ intros. unfold globalenv; unfold globalenv_initmem.
+ rewrite H. reflexivity.
+Qed.
+
+Lemma initmem_nullptr:
+ forall (p: program funct),
+ let m := init_mem p in
+ valid_block m nullptr /\
+ m.(blocks) nullptr = mkblock 0 0 (fun y => Undef) (undef_undef_outside 0 0).
+Proof.
+ assert
+ (forall (init: genv * mem),
+ let m1 := snd init in
+ 0 < m1.(nextblock) ->
+ m1.(blocks) nullptr = mkblock 0 0 (fun y => Undef) (undef_undef_outside 0 0) ->
+ forall (vars: list (ident * Z)),
+ let m2 := snd (add_globals init vars) in
+ 0 < m2.(nextblock) /\
+ m2.(blocks) nullptr = mkblock 0 0 (fun y => Undef) (undef_undef_outside 0 0)).
+ induction vars; simpl; intros.
+ tauto.
+ destruct a.
+ caseEq (add_globals init vars). intros g m2 EQ.
+ rewrite EQ in IHvars. simpl in IHvars. elim IHvars; intros.
+ simpl. split. omega.
+ rewrite update_o. auto. apply sym_not_equal. apply Zlt_not_eq. exact H1.
+
+ intro. unfold init_mem. unfold globalenv_initmem.
+ unfold valid_block. apply H. simpl. omega. reflexivity.
+Qed.
+
+Lemma initmem_undef:
+ forall (p: program funct) (b: block),
+ exists lo, exists hi,
+ (init_mem p).(blocks) b = empty_block lo hi.
+Proof.
+ assert (forall g0 vars g1 m b,
+ add_globals (g0, Mem.empty) vars = (g1, m) ->
+ exists lo, exists hi,
+ m.(blocks) b = empty_block lo hi).
+ induction vars; simpl.
+ intros. inversion H. unfold Mem.empty; simpl.
+ exists 0; exists 0. auto.
+ destruct a. caseEq (add_globals (g0, Mem.empty) vars). intros g1 m1 EQ.
+ intros g m b EQ1. injection EQ1; intros EQ2 EQ3; clear EQ1.
+ rewrite <- EQ2; simpl. unfold update.
+ case (zeq b (nextblock m1)); intro.
+ exists 0; exists z; auto.
+ eauto.
+ intros. caseEq (globalenv_initmem p).
+ intros g m EQ. unfold init_mem; rewrite EQ; simpl.
+ unfold globalenv_initmem in EQ. eauto.
+Qed.
+
+Remark nextfunction_add_functs_neg:
+ forall fns, nextfunction (add_functs empty fns) < 0.
+Proof.
+ induction fns; simpl; intros. omega. unfold Zpred. omega.
+Qed.
+
+Theorem find_funct_ptr_inv:
+ forall (p: program funct) (b: block) (f: funct),
+ find_funct_ptr (globalenv p) b = Some f -> b < 0.
+Proof.
+ intros until f.
+ assert (forall fns, ZMap.get b (functions (add_functs empty fns)) = Some f -> b < 0).
+ induction fns; simpl.
+ rewrite ZMap.gi. congruence.
+ rewrite ZMap.gsspec. case (ZIndexed.eq b (nextfunction (add_functs empty fns))); intro.
+ intro. rewrite e. apply nextfunction_add_functs_neg.
+ auto.
+ unfold find_funct_ptr. rewrite functions_globalenv.
+ intros. eauto.
+Qed.
+
+Theorem find_symbol_inv:
+ forall (p: program funct) (id: ident) (b: block),
+ find_symbol (globalenv p) id = Some b -> b < nextblock (init_mem p).
+Proof.
+ assert (forall fns s b,
+ (symbols (add_functs empty fns)) ! s = Some b -> b < 0).
+ induction fns; simpl; intros until b.
+ rewrite PTree.gempty. congruence.
+ rewrite PTree.gsspec. destruct a; simpl. case (peq s i); intro.
+ intro EQ; inversion EQ. apply nextfunction_add_functs_neg.
+ eauto.
+ assert (forall fns vars g m s b,
+ add_globals (add_functs empty fns, Mem.empty) vars = (g, m) ->
+ (symbols g)!s = Some b ->
+ b < nextblock m).
+ induction vars; simpl; intros until b.
+ intros. inversion H0. subst g m. simpl.
+ generalize (H fns s b H1). omega.
+ destruct a. caseEq (add_globals (add_functs empty fns, Mem.empty) vars).
+ intros g1 m1 ADG EQ. inversion EQ; subst g m; clear EQ.
+ unfold add_symbol; simpl. rewrite PTree.gsspec. case (peq s i); intro.
+ intro EQ; inversion EQ. omega.
+ intro. generalize (IHvars _ _ _ _ ADG H0). omega.
+ intros until b. unfold find_symbol, globalenv, init_mem, globalenv_initmem; simpl.
+ caseEq (add_globals (add_functs empty (prog_funct p), Mem.empty)
+ (prog_vars p)); intros g m EQ.
+ simpl; intros. eauto.
+Qed.
+
+End GENV.
+
+(* Invariants on functions *)
+Lemma find_funct_ptr_prop:
+ forall (F: Set) (P: F -> Prop) (p: program F) (b: block) (f: F),
+ (forall id f, In (id, f) (prog_funct p) -> P f) ->
+ find_funct_ptr (globalenv p) b = Some f ->
+ P f.
+Proof.
+ intros until f.
+ unfold find_funct_ptr. rewrite functions_globalenv.
+ generalize (prog_funct p). induction l; simpl.
+ rewrite ZMap.gi. intros; discriminate.
+ rewrite ZMap.gsspec.
+ case (ZIndexed.eq b (nextfunction (add_functs (empty F) l))); intros.
+ apply H with (fst a). left. destruct a. simpl in *. congruence.
+ apply IHl. intros. apply H with id. right. auto. auto.
+Qed.
+
+Lemma find_funct_prop:
+ forall (F: Set) (P: F -> Prop) (p: program F) (v: val) (f: F),
+ (forall id f, In (id, f) (prog_funct p) -> P f) ->
+ find_funct (globalenv p) v = Some f ->
+ P f.
+Proof.
+ intros until f. unfold find_funct.
+ destruct v; try (intros; discriminate).
+ case (Int.eq i Int.zero); [idtac | intros; discriminate].
+ intros. eapply find_funct_ptr_prop; eauto.
+Qed.
+
+(* Global environments and program transformations. *)
+
+Section TRANSF_PROGRAM_PARTIAL.
+
+Variable A B: Set.
+Variable transf: A -> option B.
+Variable p: program A.
+Variable p': program B.
+Hypothesis transf_OK: transform_partial_program transf p = Some p'.
+
+Lemma add_functs_transf:
+ forall (fns: list (ident * A)) (tfns: list (ident * B)),
+ transf_partial_program transf fns = Some tfns ->
+ let r := add_functs (empty A) fns in
+ let tr := add_functs (empty B) tfns in
+ nextfunction tr = nextfunction r /\
+ symbols tr = symbols r /\
+ forall (b: block) (f: A),
+ ZMap.get b (functions r) = Some f ->
+ ZMap.get b (functions tr) = transf f /\ transf f <> None.
+Proof.
+ induction fns; simpl.
+
+ intros; injection H; intro; subst tfns.
+ simpl. split. reflexivity. split. reflexivity.
+ intros b f; repeat (rewrite ZMap.gi). intros; discriminate.
+
+ intro tfns. destruct a. caseEq (transf a). intros a' TA.
+ caseEq (transf_partial_program transf fns). intros l TPP EQ.
+ injection EQ; intro; subst tfns.
+ clear EQ. simpl.
+ generalize (IHfns l TPP).
+ intros [HR1 [HR2 HR3]].
+ rewrite HR1. rewrite HR2.
+ split. reflexivity.
+ split. reflexivity.
+ intros b f.
+ case (zeq b (nextfunction (add_functs (empty A) fns))); intro.
+ subst b. repeat (rewrite ZMap.gss).
+ intro EQ; injection EQ; intro; subst f; clear EQ.
+ rewrite TA. split. auto. discriminate.
+ repeat (rewrite ZMap.gso; auto).
+
+ intros; discriminate.
+ intros; discriminate.
+Qed.
+
+Lemma mem_add_globals_transf:
+ forall (g1: genv A) (g2: genv B) (m: mem) (vars: list (ident * Z)),
+ snd (add_globals (g1, m) vars) = snd (add_globals (g2, m) vars).
+Proof.
+ induction vars; simpl.
+ reflexivity.
+ destruct a. destruct (add_globals (g1, m) vars).
+ destruct (add_globals (g2, m) vars).
+ simpl in IHvars. subst m1. reflexivity.
+Qed.
+
+Lemma symbols_add_globals_transf:
+ forall (g1: genv A) (g2: genv B) (m: mem),
+ symbols g1 = symbols g2 ->
+ forall (vars: list (ident * Z)),
+ symbols (fst (add_globals (g1, m) vars)) =
+ symbols (fst (add_globals (g2, m) vars)).
+Proof.
+ induction vars; simpl.
+ assumption.
+ generalize (mem_add_globals_transf g1 g2 m vars); intro.
+ destruct a. destruct (add_globals (g1, m) vars).
+ destruct (add_globals (g2, m) vars).
+ simpl. simpl in IHvars. simpl in H0.
+ rewrite H0; rewrite IHvars. reflexivity.
+Qed.
+
+Lemma prog_funct_transf_OK:
+ transf_partial_program transf p.(prog_funct) = Some p'.(prog_funct).
+Proof.
+ generalize transf_OK; unfold transform_partial_program.
+ case (transf_partial_program transf (prog_funct p)); simpl; intros.
+ injection transf_OK0; intros; subst p'. reflexivity.
+ discriminate.
+Qed.
+
+Theorem find_funct_ptr_transf_partial:
+ forall (b: block) (f: A),
+ find_funct_ptr (globalenv p) b = Some f ->
+ find_funct_ptr (globalenv p') b = transf f /\ transf f <> None.
+Proof.
+ intros until f.
+ generalize (add_functs_transf p.(prog_funct) prog_funct_transf_OK).
+ intros [X [Y Z]].
+ unfold find_funct_ptr.
+ repeat (rewrite functions_globalenv).
+ apply Z.
+Qed.
+
+Theorem find_funct_transf_partial:
+ forall (v: val) (f: A),
+ find_funct (globalenv p) v = Some f ->
+ find_funct (globalenv p') v = transf f /\ transf f <> None.
+Proof.
+ intros until f. unfold find_funct.
+ case v; try (intros; discriminate).
+ intros b ofs.
+ case (Int.eq ofs Int.zero); try (intros; discriminate).
+ apply find_funct_ptr_transf_partial.
+Qed.
+
+Lemma symbols_init_transf:
+ symbols (globalenv p') = symbols (globalenv p).
+Proof.
+ unfold globalenv. unfold globalenv_initmem.
+ generalize (add_functs_transf p.(prog_funct) prog_funct_transf_OK).
+ intros [X [Y Z]].
+ generalize transf_OK.
+ unfold transform_partial_program.
+ case (transf_partial_program transf (prog_funct p)).
+ intros. injection transf_OK0; intro; subst p'; simpl.
+ symmetry. apply symbols_add_globals_transf.
+ symmetry. exact Y.
+ intros; discriminate.
+Qed.
+
+Theorem find_symbol_transf_partial:
+ forall (s: ident),
+ find_symbol (globalenv p') s = find_symbol (globalenv p) s.
+Proof.
+ intros. unfold find_symbol.
+ rewrite symbols_init_transf. auto.
+Qed.
+
+Theorem init_mem_transf_partial:
+ init_mem p' = init_mem p.
+Proof.
+ unfold init_mem. unfold globalenv_initmem.
+ generalize transf_OK.
+ unfold transform_partial_program.
+ case (transf_partial_program transf (prog_funct p)).
+ intros. injection transf_OK0; intro; subst p'; simpl.
+ symmetry. apply mem_add_globals_transf.
+ intros; discriminate.
+Qed.
+
+End TRANSF_PROGRAM_PARTIAL.
+
+Section TRANSF_PROGRAM.
+
+Variable A B: Set.
+Variable transf: A -> B.
+Variable p: program A.
+Let tp := transform_program transf p.
+
+Definition transf_partial (x: A) : option B := Some (transf x).
+
+Lemma transf_program_transf_partial_program:
+ forall (fns: list (ident * A)),
+ transf_partial_program transf_partial fns =
+ Some (transf_program transf fns).
+Proof.
+ induction fns; simpl.
+ reflexivity.
+ destruct a. rewrite IHfns. reflexivity.
+Qed.
+
+Lemma transform_program_transform_partial_program:
+ transform_partial_program transf_partial p = Some tp.
+Proof.
+ unfold tp. unfold transform_partial_program, transform_program.
+ rewrite transf_program_transf_partial_program.
+ reflexivity.
+Qed.
+
+Theorem find_funct_ptr_transf:
+ forall (b: block) (f: A),
+ find_funct_ptr (globalenv p) b = Some f ->
+ find_funct_ptr (globalenv tp) b = Some (transf f).
+Proof.
+ intros.
+ generalize (find_funct_ptr_transf_partial transf_partial p
+ transform_program_transform_partial_program).
+ intros. elim (H0 b f H). intros. exact H1.
+Qed.
+
+Theorem find_funct_transf:
+ forall (v: val) (f: A),
+ find_funct (globalenv p) v = Some f ->
+ find_funct (globalenv tp) v = Some (transf f).
+Proof.
+ intros.
+ generalize (find_funct_transf_partial transf_partial p
+ transform_program_transform_partial_program).
+ intros. elim (H0 v f H). intros. exact H1.
+Qed.
+
+Theorem find_symbol_transf:
+ forall (s: ident),
+ find_symbol (globalenv tp) s = find_symbol (globalenv p) s.
+Proof.
+ intros.
+ apply find_symbol_transf_partial with transf_partial.
+ apply transform_program_transform_partial_program.
+Qed.
+
+Theorem init_mem_transf:
+ init_mem tp = init_mem p.
+Proof.
+ apply init_mem_transf_partial with transf_partial.
+ apply transform_program_transform_partial_program.
+Qed.
+
+End TRANSF_PROGRAM.
+
+End Genv.
diff --git a/backend/InterfGraph.v b/backend/InterfGraph.v
new file mode 100644
index 0000000..37248f5
--- /dev/null
+++ b/backend/InterfGraph.v
@@ -0,0 +1,310 @@
+(** Representation of interference graphs for register allocation. *)
+
+Require Import Coqlib.
+Require Import FSet.
+Require Import Maps.
+Require Import Ordered.
+Require Import Registers.
+Require Import Locations.
+
+(** Interference graphs are undirected graphs with two kinds of nodes:
+- RTL pseudo-registers;
+- Machine registers.
+
+and four kind of edges:
+- Conflict edges between two pseudo-registers.
+ (Meaning: these two pseudo-registers must not be assigned the same
+ location.)
+- Conflict edges between a pseudo-register and a machine register
+ (Meaning: this pseudo-register must not be assigned this machine
+ register.)
+- Preference edges between two pseudo-registers.
+ (Meaning: the generated code would be more efficient if those two
+ pseudo-registers were assigned the same location, but if this is not
+ possible, the generated code will still be correct.)
+- Preference edges between a pseudo-register and a machine register
+ (Meaning: the generated code would be more efficient if this
+ pseudo-register was assigned this machine register, but if this is not
+ possible, the generated code will still be correct.)
+
+A graph is represented by four finite sets of edges (one of each kind
+above). An edge is represented by a pair of two pseudo-registers or
+a pair (pseudo-register, machine register).
+In the case of two pseudo-registers ([r1], [r2]), we adopt the convention
+that [r1] <= [r2], so as to reflect the undirected nature of the edge.
+*)
+
+Module OrderedReg <: OrderedType with Definition t := reg := OrderedPositive.
+Module OrderedRegReg := OrderedPair(OrderedReg)(OrderedReg).
+Module OrderedMreg := OrderedIndexed(IndexedMreg).
+Module OrderedRegMreg := OrderedPair(OrderedReg)(OrderedMreg).
+
+Module SetDepRegReg := FSetAVL.Make(OrderedRegReg).
+Module SetRegReg := NodepOfDep(SetDepRegReg).
+Module SetDepRegMreg := FSetAVL.Make(OrderedRegMreg).
+Module SetRegMreg := NodepOfDep(SetDepRegMreg).
+
+Record graph: Set := mkgraph {
+ interf_reg_reg: SetRegReg.t;
+ interf_reg_mreg: SetRegMreg.t;
+ pref_reg_reg: SetRegReg.t;
+ pref_reg_mreg: SetRegMreg.t
+}.
+
+Definition empty_graph :=
+ mkgraph SetRegReg.empty SetRegMreg.empty
+ SetRegReg.empty SetRegMreg.empty.
+
+(** The following functions add a new edge (if not already present)
+ to the given graph. *)
+
+Definition ordered_pair (x y: reg) :=
+ if plt x y then (x, y) else (y, x).
+
+Definition add_interf (x y: reg) (g: graph) :=
+ mkgraph (SetRegReg.add (ordered_pair x y) g.(interf_reg_reg))
+ g.(interf_reg_mreg)
+ g.(pref_reg_reg)
+ g.(pref_reg_mreg).
+
+Definition add_interf_mreg (x: reg) (y: mreg) (g: graph) :=
+ mkgraph g.(interf_reg_reg)
+ (SetRegMreg.add (x, y) g.(interf_reg_mreg))
+ g.(pref_reg_reg)
+ g.(pref_reg_mreg).
+
+Definition add_pref (x y: reg) (g: graph) :=
+ mkgraph g.(interf_reg_reg)
+ g.(interf_reg_mreg)
+ (SetRegReg.add (ordered_pair x y) g.(pref_reg_reg))
+ g.(pref_reg_mreg).
+
+Definition add_pref_mreg (x: reg) (y: mreg) (g: graph) :=
+ mkgraph g.(interf_reg_reg)
+ g.(interf_reg_mreg)
+ g.(pref_reg_reg)
+ (SetRegMreg.add (x, y) g.(pref_reg_mreg)).
+
+(** [interfere x y g] holds iff there is a conflict edge in [g]
+ between the two pseudo-registers [x] and [y]. *)
+
+Definition interfere (x y: reg) (g: graph) : Prop :=
+ SetRegReg.In (ordered_pair x y) g.(interf_reg_reg).
+
+(** [interfere_mreg x y g] holds iff there is a conflict edge in [g]
+ between the pseudo-register [x] and the machine register [y]. *)
+
+Definition interfere_mreg (x: reg) (y: mreg) (g: graph) : Prop :=
+ SetRegMreg.In (x, y) g.(interf_reg_mreg).
+
+Lemma ordered_pair_charact:
+ forall x y,
+ ordered_pair x y = (x, y) \/ ordered_pair x y = (y, x).
+Proof.
+ unfold ordered_pair; intros.
+ case (plt x y); intro; tauto.
+Qed.
+
+Lemma ordered_pair_sym:
+ forall x y, ordered_pair y x = ordered_pair x y.
+Proof.
+ unfold ordered_pair; intros.
+ case (plt x y); intro.
+ case (plt y x); intro.
+ unfold Plt in *; omegaContradiction.
+ auto.
+ case (plt y x); intro.
+ auto.
+ assert (Zpos x = Zpos y). unfold Plt in *. omega.
+ congruence.
+Qed.
+
+Lemma interfere_sym:
+ forall x y g, interfere x y g -> interfere y x g.
+Proof.
+ unfold interfere; intros.
+ rewrite ordered_pair_sym. auto.
+Qed.
+
+(** [graph_incl g1 g2] holds if [g2] contains all the conflict edges of [g1]
+ and possibly more. *)
+
+Definition graph_incl (g1 g2: graph) : Prop :=
+ (forall x y, interfere x y g1 -> interfere x y g2) /\
+ (forall x y, interfere_mreg x y g1 -> interfere_mreg x y g2).
+
+Lemma graph_incl_trans:
+ forall g1 g2 g3, graph_incl g1 g2 -> graph_incl g2 g3 -> graph_incl g1 g3.
+Proof.
+ unfold graph_incl; intros.
+ elim H0; elim H; intros.
+ split; eauto.
+Qed.
+
+(** We show that the [add_] functions correctly record the desired
+ conflicts, and preserve whatever conflict edges were already present. *)
+
+Lemma add_interf_correct:
+ forall x y g,
+ interfere x y (add_interf x y g).
+Proof.
+ intros. unfold interfere, add_interf; simpl.
+ apply SetRegReg.add_1. red. apply OrderedRegReg.eq_refl.
+Qed.
+
+Lemma add_interf_incl:
+ forall a b g, graph_incl g (add_interf a b g).
+Proof.
+ intros. split; intros.
+ unfold add_interf, interfere; simpl.
+ apply SetRegReg.add_2. exact H.
+ exact H.
+Qed.
+
+Lemma add_interf_mreg_correct:
+ forall x y g,
+ interfere_mreg x y (add_interf_mreg x y g).
+Proof.
+ intros. unfold interfere_mreg, add_interf_mreg; simpl.
+ apply SetRegMreg.add_1. red. apply OrderedRegMreg.eq_refl.
+Qed.
+
+Lemma add_interf_mreg_incl:
+ forall a b g, graph_incl g (add_interf_mreg a b g).
+Proof.
+ intros. split; intros.
+ exact H.
+ unfold add_interf_mreg, interfere_mreg; simpl.
+ apply SetRegMreg.add_2. exact H.
+Qed.
+
+Lemma add_pref_incl:
+ forall a b g, graph_incl g (add_pref a b g).
+Proof.
+ intros. split; intros.
+ exact H.
+ exact H.
+Qed.
+
+Lemma add_pref_mreg_incl:
+ forall a b g, graph_incl g (add_pref_mreg a b g).
+Proof.
+ intros. split; intros.
+ exact H.
+ exact H.
+Qed.
+
+(** [all_interf_regs g] returns the set of pseudo-registers that
+ are nodes of [g]. *)
+
+Definition all_interf_regs (g: graph) : Regset.t :=
+ SetRegReg.fold
+ (fun r1r2 u => Regset.add (fst r1r2) (Regset.add (snd r1r2) u))
+ g.(interf_reg_reg)
+ (SetRegMreg.fold
+ (fun r1m2 u => Regset.add (fst r1m2) u)
+ g.(interf_reg_mreg)
+ Regset.empty).
+
+Lemma mem_add_tail:
+ forall r r' u,
+ Regset.mem r u = true -> Regset.mem r (Regset.add r' u) = true.
+Proof.
+ intros. case (Reg.eq r r'); intro.
+ subst r'. apply Regset.mem_add_same.
+ rewrite Regset.mem_add_other; auto.
+Qed.
+
+Lemma all_interf_regs_correct_aux_1:
+ forall l u r,
+ Regset.mem r u = true ->
+ Regset.mem r
+ (List.fold_right
+ (fun r1r2 u => Regset.add (fst r1r2) (Regset.add (snd r1r2) u))
+ u l) = true.
+Proof.
+ induction l; simpl; intros.
+ auto.
+ apply mem_add_tail. apply mem_add_tail. auto.
+Qed.
+
+Lemma all_interf_regs_correct_aux_2:
+ forall l u r1 r2,
+ InList OrderedRegReg.eq (r1, r2) l ->
+ let u' :=
+ List.fold_right
+ (fun r1r2 u => Regset.add (fst r1r2) (Regset.add (snd r1r2) u))
+ u l in
+ Regset.mem r1 u' = true /\ Regset.mem r2 u' = true.
+Proof.
+ induction l; simpl; intros.
+ inversion H.
+ inversion H. elim H1. simpl. unfold OrderedReg.eq.
+ intros; subst r1; subst r2.
+ split. apply Regset.mem_add_same.
+ apply mem_add_tail. apply Regset.mem_add_same.
+ generalize (IHl u r1 r2 H1). intros [A B].
+ split; repeat rewrite mem_add_tail; auto.
+Qed.
+
+Lemma all_interf_regs_correct_aux_3:
+ forall l u r1 r2,
+ InList OrderedRegMreg.eq (r1, r2) l ->
+ let u' :=
+ List.fold_right
+ (fun r1r2 u => Regset.add (fst r1r2) u)
+ u l in
+ Regset.mem r1 u' = true.
+Proof.
+ induction l; simpl; intros.
+ inversion H.
+ inversion H. elim H1. simpl. unfold OrderedReg.eq.
+ intros; subst r1.
+ apply Regset.mem_add_same.
+ apply mem_add_tail. apply IHl with r2. auto.
+Qed.
+
+Lemma all_interf_regs_correct_1:
+ forall r1 r2 g,
+ SetRegReg.In (r1, r2) g.(interf_reg_reg) ->
+ Regset.mem r1 (all_interf_regs g) = true /\
+ Regset.mem r2 (all_interf_regs g) = true.
+Proof.
+ intros. unfold all_interf_regs.
+ generalize (SetRegReg.fold_1
+ g.(interf_reg_reg)
+ (SetRegMreg.fold
+ (fun (r1m2 : SetDepRegMreg.elt) (u : Regset.t) =>
+ Regset.add (fst r1m2) u) (interf_reg_mreg g) Regset.empty)
+ (fun (r1r2 : SetDepRegReg.elt) (u : Regset.t) =>
+ Regset.add (fst r1r2) (Regset.add (snd r1r2) u))).
+ intros [l [UN [INEQ EQ]]].
+ rewrite EQ. apply all_interf_regs_correct_aux_2.
+ elim (INEQ (r1, r2)); intros. auto.
+Qed.
+
+Lemma all_interf_regs_correct_2:
+ forall r1 mr2 g,
+ SetRegMreg.In (r1, mr2) g.(interf_reg_mreg) ->
+ Regset.mem r1 (all_interf_regs g) = true.
+Proof.
+ intros. unfold all_interf_regs.
+ generalize (SetRegReg.fold_1
+ g.(interf_reg_reg)
+ (SetRegMreg.fold
+ (fun (r1m2 : SetDepRegMreg.elt) (u : Regset.t) =>
+ Regset.add (fst r1m2) u) (interf_reg_mreg g) Regset.empty)
+ (fun (r1r2 : SetDepRegReg.elt) (u : Regset.t) =>
+ Regset.add (fst r1r2) (Regset.add (snd r1r2) u))).
+ intros [l [UN [INEQ EQ]]].
+ rewrite EQ. apply all_interf_regs_correct_aux_1.
+ generalize (SetRegMreg.fold_1
+ g.(interf_reg_mreg)
+ Regset.empty
+ (fun (r1r2 : SetDepRegMreg.elt) (u : Regset.t) =>
+ Regset.add (fst r1r2) u)).
+ change (PTree.t unit) with Regset.t.
+ intros [l' [UN' [INEQ' EQ']]].
+ rewrite EQ'. apply all_interf_regs_correct_aux_3 with mr2.
+ elim (INEQ' (r1, mr2)); intros. auto.
+Qed.
diff --git a/backend/Kildall.v b/backend/Kildall.v
new file mode 100644
index 0000000..10b2e1d
--- /dev/null
+++ b/backend/Kildall.v
@@ -0,0 +1,1231 @@
+(** Solvers for dataflow inequations. *)
+
+Require Import Coqlib.
+Require Import Maps.
+Require Import Lattice.
+
+(** A forward dataflow problem is a set of inequations of the form
+- [X(s) >= transf n X(n)]
+ if program point [s] is a successor of program point [n]
+- [X(n) >= a]
+ if [(n, a)] belongs to a given list of (program points, approximations).
+
+The unknowns are the [X(n)], indexed by program points (e.g. nodes in the
+CFG graph of a RTL function). They range over a given ordered set that
+represents static approximations of the program state at each point.
+The [transf] function is the abstract transfer function: it computes an
+approximation [transf n X(n)] of the program state after executing instruction
+at point [n], as a function of the approximation [X(n)] of the program state
+before executing that instruction.
+
+Symmetrically, a backward dataflow problem is a set of inequations of the form
+- [X(n) >= transf s X(s)]
+ if program point [s] is a successor of program point [n]
+- [X(n) >= a]
+ if [(n, a)] belongs to a given list of (program points, approximations).
+
+The only difference with a forward dataflow problem is that the transfer
+function [transf] now computes the approximation before a program point [s]
+from the approximation [X(s)] after point [s].
+
+This file defines three solvers for dataflow problems. The first two
+solve (optimally) forward and backward problems using Kildall's worklist
+algorithm. They assume that the unknowns range over a semi-lattice, that is,
+an ordered type equipped with a least upper bound operation.
+
+The last solver corresponds to propagation over extended basic blocks:
+it returns approximate solutions of forward problems where the unknowns
+range over any ordered type having a greatest element [top]. It simply
+sets [X(n) = top] for all merge points [n], that is, program points having
+several predecessors. This solver is useful when least upper bounds of
+approximations do not exist or are too expensive to compute. *)
+
+(** * Bounded iteration *)
+
+(** The three solvers proceed iteratively, increasing the value of one of
+ the unknowns [X(n)] at each iteration until a solution is reached.
+ This section defines the general form of iteration used. *)
+
+Section BOUNDED_ITERATION.
+
+Variables A B: Set.
+Variable step: A -> B + A.
+
+(** The [step] parameter represents one step of the iteration. From a
+ current iteration state [a: A], it either returns a value of type [B],
+ meaning that iteration is over and that this [B] value is the final
+ result of the iteration, or a value [a' : A] which is the next state
+ of the iteration.
+
+ The naive way to define the iteration is:
+<<
+Fixpoint iterate (a: A) : B :=
+ match step a with
+ | inl b => b
+ | inr a' => iterate a'
+ end.
+>>
+ However, this is a general recursion, not guaranteed to terminate,
+ and therefore not expressible in Coq. The standard way to work around
+ this difficulty is to use Noetherian recursion (Coq module [Wf]).
+ This requires that we equip the type [A] with a well-founded ordering [<]
+ (no infinite ascending chains) and we demand that [step] satisfies
+ [step a = inr a' -> a < a']. For the types [A] that are of interest to us
+ in this development, it is however very painful to define adequate
+ well-founded orderings, even though we know our iterations always
+ terminate.
+
+ Instead, we choose to bound the number of iterations by an arbitrary
+ constant. [iterate] then becomes a function that can fail,
+ of type [A -> option B]. The [None] result denotes failure to reach
+ a result in the number of iterations prescribed, or, in other terms,
+ failure to find a solution to the dataflow problem. The compiler
+ passes that exploit dataflow analysis (the [Constprop], [CSE] and
+ [Allocation] passes) will, in this case, either fail ([Allocation])
+ or turn off the optimization pass ([Constprop] and [CSE]).
+
+ Since we know (informally) that our computations terminate, we can
+ take a very large constant as the maximal number of iterations.
+ Failure will therefore never happen in practice, but of
+ course our proofs also cover the failure case and show that
+ nothing bad happens in this hypothetical case either. *)
+
+Definition num_iterations := 1000000000000%positive.
+
+(** The simple definition of bounded iteration is:
+<<
+Fixpoint iterate (niter: nat) (a: A) {struct niter} : option B :=
+ match niter with
+ | O => None
+ | S niter' =>
+ match step a with
+ | inl b => b
+ | inr a' => iterate niter' a'
+ end
+ end.
+>>
+ This function is structural recursive over the parameter [niter]
+ (number of iterations), represented here as a Peano integer (type [nat]).
+ However, we want to use very large values of [niter]. As Peano integers,
+ these values would be much too large to fit in memory. Therefore,
+ we must express iteration counts as a binary integer (type [positive]).
+ However, Peano induction over type [positive] is not structural recursion,
+ so we cannot define [iterate] as a Coq fixpoint and must use
+ Noetherian recursion instead. *)
+
+Definition iter_step (x: positive)
+ (next: forall y, Plt y x -> A -> option B)
+ (s: A) : option B :=
+ match peq x xH with
+ | left EQ => None
+ | right NOTEQ =>
+ match step s with
+ | inl res => Some res
+ | inr s' => next (Ppred x) (Ppred_Plt x NOTEQ) s'
+ end
+ end.
+
+Definition iterate: positive -> A -> option B :=
+ Fix Plt_wf (fun _ => A -> option B) iter_step.
+
+(** We then prove the expected unrolling equations for [iterate]. *)
+
+Remark unroll_iterate:
+ forall x, iterate x = iter_step x (fun y _ => iterate y).
+Proof.
+ unfold iterate; apply (Fix_eq Plt_wf (fun _ => A -> option B) iter_step).
+ intros. unfold iter_step. apply extensionality. intro s.
+ case (peq x xH); intro. auto.
+ rewrite H. auto.
+Qed.
+
+Lemma iterate_base:
+ forall s, iterate 1%positive s = None.
+Proof.
+ intro; rewrite unroll_iterate; unfold iter_step.
+ case (peq 1 1); congruence.
+Qed.
+
+Lemma iterate_step:
+ forall x s,
+ iterate (Psucc x) s =
+ match step s with
+ | inl res => Some res
+ | inr s' => iterate x s'
+ end.
+Proof.
+ intro; rewrite unroll_iterate; unfold iter_step; intros.
+ case (peq (Psucc x) 1); intro.
+ destruct x; simpl in e; discriminate.
+ rewrite Ppred_succ. auto.
+Qed.
+
+End BOUNDED_ITERATION.
+
+(** * Solving forward dataflow problems using Kildall's algorithm *)
+
+(** A forward dataflow solver has the following generic interface.
+ Unknowns range over the type [L.t], which is equipped with
+ semi-lattice operations (see file [Lattice]). *)
+
+Module Type DATAFLOW_SOLVER.
+
+ Declare Module L: SEMILATTICE.
+
+ Variable fixpoint:
+ (positive -> list positive) ->
+ positive ->
+ (positive -> L.t -> L.t) ->
+ list (positive * L.t) ->
+ option (PMap.t L.t).
+
+ (** [fixpoint successors topnode transf entrypoints] is the solver.
+ It returns either an error or a mapping from program points to
+ values of type [L.t] representing the solution. [successors]
+ is a function returning the list of successors of the given program
+ point. [topnode] is the maximal number of nodes considered.
+ [transf] is the transfer function, and [entrypoints] the additional
+ constraints imposed on the solution. *)
+
+ Hypothesis fixpoint_solution:
+ forall successors topnode transf entrypoints res n s,
+ fixpoint successors topnode transf entrypoints = Some res ->
+ Plt n topnode -> In s (successors n) ->
+ L.ge res!!s (transf n res!!n).
+
+ (** The [fixpoint_solution] theorem shows that the returned solution,
+ if any, satisfies the dataflow inequations. *)
+
+ Hypothesis fixpoint_entry:
+ forall successors topnode transf entrypoints res n v,
+ fixpoint successors topnode transf entrypoints = Some res ->
+ In (n, v) entrypoints ->
+ L.ge res!!n v.
+
+ (** The [fixpoint_entry] theorem shows that the returned solution,
+ if any, satisfies the additional constraints expressed
+ by [entrypoints]. *)
+
+End DATAFLOW_SOLVER.
+
+(** We now define a generic solver that works over
+ any semi-lattice structure. *)
+
+Module Dataflow_Solver (LAT: SEMILATTICE):
+ DATAFLOW_SOLVER with Module L := LAT.
+
+Module L := LAT.
+
+Section Kildall.
+
+Variable successors: positive -> list positive.
+Variable topnode: positive.
+Variable transf: positive -> L.t -> L.t.
+Variable entrypoints: list (positive * L.t).
+
+(** The state of the iteration has two components:
+- A mapping from program points to values of type [L.t] representing
+ the candidate solution found so far.
+- A worklist of program points that remain to be considered.
+*)
+
+Record state : Set :=
+ mkstate { st_in: PMap.t L.t; st_wrk: list positive }.
+
+(** Kildall's algorithm, in pseudo-code, is as follows:
+<<
+ while st_wrk is not empty, do
+ extract a node n from st_wrk
+ compute out = transf n st_in[n]
+ for each successor s of n:
+ compute in = lub st_in[s] out
+ if in <> st_in[s]:
+ st_in[s] := in
+ st_wrk := st_wrk union {n}
+ end if
+ end for
+ end while
+ return st_in
+>>
+
+The initial state is built as follows:
+- The initial mapping sets all program points to [L.bot], except
+ those mentioned in the [entrypoints] list, for which we take
+ the associated approximation as initial value. Since a program
+ point can be mentioned several times in [entrypoints], with different
+ approximations, we actually take the l.u.b. of these approximations.
+- The initial worklist contains all the program points up to [topnode]. *)
+
+Fixpoint start_state_in (ep: list (positive * L.t)) : PMap.t L.t :=
+ match ep with
+ | nil =>
+ PMap.init L.bot
+ | (n, v) :: rem =>
+ let m := start_state_in rem in PMap.set n (L.lub m!!n v) m
+ end.
+
+Definition start_state_wrk :=
+ positive_rec (list positive) nil (@cons positive) topnode.
+
+Definition start_state :=
+ mkstate (start_state_in entrypoints) start_state_wrk.
+
+(** The worklist is actually treated as a set: it is not useful
+ (and detrimental to performance) to put the same point twice in the
+ worklist. The following function adds a point to the worklist if
+ it was not already there. *)
+
+Definition add_to_worklist (n: positive) (wrk: list positive) :=
+ if List.In_dec peq n wrk then wrk else n :: wrk.
+
+(** [propagate_succ] corresponds, in the pseudocode,
+ to the body of the [for] loop iterating over all successors. *)
+
+Definition propagate_succ (s: state) (out: L.t) (n: positive) :=
+ let oldl := s.(st_in)!!n in
+ let newl := L.lub oldl out in
+ if L.eq oldl newl
+ then s
+ else mkstate (PMap.set n newl s.(st_in)) (add_to_worklist n s.(st_wrk)).
+
+(** [propagate_succ_list] corresponds, in the pseudocode,
+ to the [for] loop iterating over all successors. *)
+
+Fixpoint propagate_succ_list (s: state) (out: L.t) (succs: list positive)
+ {struct succs} : state :=
+ match succs with
+ | nil => s
+ | n :: rem => propagate_succ_list (propagate_succ s out n) out rem
+ end.
+
+(** [step] corresponds to the body of the outer [while] loop in the
+ pseudocode. *)
+
+Definition step (s: state) : PMap.t L.t + state :=
+ match s.(st_wrk) with
+ | nil =>
+ inl _ s.(st_in)
+ | n :: rem =>
+ inr _ (propagate_succ_list
+ (mkstate s.(st_in) rem)
+ (transf n s.(st_in)!!n)
+ (successors n))
+ end.
+
+(** The whole fixpoint computation is the iteration of [step] from
+ the start state. *)
+
+Definition fixpoint : option (PMap.t L.t) :=
+ iterate _ _ step num_iterations start_state.
+
+(** ** Monotonicity properties *)
+
+(** We first show that the [st_in] part of the state evolves monotonically:
+ at each step, the values of the [st_in[n]] either remain the same or
+ increase with respect to the [L.ge] ordering. *)
+
+Definition in_incr (in1 in2: PMap.t L.t) : Prop :=
+ forall n, L.ge in2!!n in1!!n.
+
+Lemma in_incr_refl:
+ forall in1, in_incr in1 in1.
+Proof.
+ unfold in_incr; intros. apply L.ge_refl.
+Qed.
+
+Lemma in_incr_trans:
+ forall in1 in2 in3, in_incr in1 in2 -> in_incr in2 in3 -> in_incr in1 in3.
+Proof.
+ unfold in_incr; intros. apply L.ge_trans with in2!!n; auto.
+Qed.
+
+Lemma propagate_succ_incr:
+ forall st out n,
+ in_incr st.(st_in) (propagate_succ st out n).(st_in).
+Proof.
+ unfold in_incr, propagate_succ; simpl; intros.
+ case (L.eq st.(st_in)!!n (L.lub st.(st_in)!!n out)); intro.
+ apply L.ge_refl.
+ simpl. case (peq n n0); intro.
+ subst n0. rewrite PMap.gss. apply L.ge_lub_left.
+ rewrite PMap.gso; auto. apply L.ge_refl.
+Qed.
+
+Lemma propagate_succ_list_incr:
+ forall out succs st,
+ in_incr st.(st_in) (propagate_succ_list st out succs).(st_in).
+Proof.
+ induction succs; simpl; intros.
+ apply in_incr_refl.
+ apply in_incr_trans with (propagate_succ st out a).(st_in).
+ apply propagate_succ_incr. auto.
+Qed.
+
+Lemma iterate_incr:
+ forall n st res,
+ iterate _ _ step n st = Some res ->
+ in_incr st.(st_in) res.
+Proof.
+ intro n; pattern n. apply positive_Peano_ind; intros until res.
+ rewrite iterate_base. congruence.
+ rewrite iterate_step. unfold step.
+ destruct st.(st_wrk); intros.
+ injection H0; intro; subst res.
+ red; intros; apply L.ge_refl.
+ apply in_incr_trans with
+ (propagate_succ_list (mkstate (st_in st) l)
+ (transf p (st_in st)!!p)
+ (successors p)).(st_in).
+ change (st_in st) with (st_in (mkstate (st_in st) l)).
+ apply propagate_succ_list_incr.
+ apply H. auto.
+Qed.
+
+Lemma fixpoint_incr:
+ forall res,
+ fixpoint = Some res -> in_incr (start_state_in entrypoints) res.
+Proof.
+ unfold fixpoint; intros.
+ change (start_state_in entrypoints) with start_state.(st_in).
+ apply iterate_incr with num_iterations; auto.
+Qed.
+
+(** ** Correctness invariant *)
+
+(** The following invariant is preserved at each iteration of Kildall's
+ algorithm: for all program points [n] below [topnode], either
+ [n] is in the worklist, or the inequations associated with [n]
+ ([st_in[s] >= transf n st_in[n]] for all successors [s] of [n])
+ hold. In other terms, the worklist contains all nodes that do not
+ yet satisfy their inequations. *)
+
+Definition good_state (st: state) : Prop :=
+ forall n,
+ Plt n topnode ->
+ In n st.(st_wrk) \/
+ (forall s, In s (successors n) ->
+ L.ge st.(st_in)!!s (transf n st.(st_in)!!n)).
+
+(** We show that the start state satisfies the invariant, and that
+ the [step] function preserves it. *)
+
+Lemma start_state_good:
+ good_state start_state.
+Proof.
+ unfold good_state, start_state; intros.
+ left; simpl. unfold start_state_wrk.
+ generalize H. pattern topnode. apply positive_Peano_ind.
+ intro. compute in H0. destruct n; discriminate.
+ intros. rewrite positive_rec_succ.
+ elim (Plt_succ_inv _ _ H1); intro.
+ auto with coqlib.
+ subst x; auto with coqlib.
+Qed.
+
+Lemma add_to_worklist_1:
+ forall n wkl, In n (add_to_worklist n wkl).
+Proof.
+ intros. unfold add_to_worklist.
+ case (In_dec peq n wkl); auto with coqlib.
+Qed.
+
+Lemma add_to_worklist_2:
+ forall n wkl n', In n' wkl -> In n' (add_to_worklist n wkl).
+Proof.
+ intros. unfold add_to_worklist.
+ case (In_dec peq n wkl); auto with coqlib.
+Qed.
+
+Lemma propagate_succ_charact:
+ forall st out n,
+ let st' := propagate_succ st out n in
+ L.ge st'.(st_in)!!n out /\
+ (forall s, n <> s -> st'.(st_in)!!s = st.(st_in)!!s).
+Proof.
+ unfold propagate_succ; intros; simpl.
+ case (L.eq (st_in st) !! n (L.lub (st_in st) !! n out)); intro.
+ split. rewrite e. rewrite L.lub_commut. apply L.ge_lub_left.
+ auto.
+ simpl. split.
+ rewrite PMap.gss. rewrite L.lub_commut. apply L.ge_lub_left.
+ intros. rewrite PMap.gso; auto.
+Qed.
+
+Lemma propagate_succ_list_charact:
+ forall out succs st,
+ let st' := propagate_succ_list st out succs in
+ forall s,
+ (In s succs -> L.ge st'.(st_in)!!s out) /\
+ (~(In s succs) -> st'.(st_in)!!s = st.(st_in)!!s).
+Proof.
+ induction succs; simpl; intros.
+ tauto.
+ generalize (IHsuccs (propagate_succ st out a) s). intros [A B].
+ generalize (propagate_succ_charact st out a). intros [C D].
+ split; intros.
+ elim H; intro.
+ subst s.
+ apply L.ge_trans with (propagate_succ st out a).(st_in)!!a.
+ apply propagate_succ_list_incr. assumption.
+ apply A. auto.
+ transitivity (propagate_succ st out a).(st_in)!!s.
+ apply B. tauto.
+ apply D. tauto.
+Qed.
+
+Lemma propagate_succ_incr_worklist:
+ forall st out n,
+ incl st.(st_wrk) (propagate_succ st out n).(st_wrk).
+Proof.
+ intros. unfold propagate_succ.
+ case (L.eq (st_in st) !! n (L.lub (st_in st) !! n out)); intro.
+ apply incl_refl.
+ simpl. red; intros. apply add_to_worklist_2; auto.
+Qed.
+
+Lemma propagate_succ_list_incr_worklist:
+ forall out succs st,
+ incl st.(st_wrk) (propagate_succ_list st out succs).(st_wrk).
+Proof.
+ induction succs; simpl; intros.
+ apply incl_refl.
+ apply incl_tran with (propagate_succ st out a).(st_wrk).
+ apply propagate_succ_incr_worklist.
+ auto.
+Qed.
+
+Lemma propagate_succ_records_changes:
+ forall st out n s,
+ let st' := propagate_succ st out n in
+ In s st'.(st_wrk) \/ st'.(st_in)!!s = st.(st_in)!!s.
+Proof.
+ simpl. intros. unfold propagate_succ.
+ case (L.eq (st_in st) !! n (L.lub (st_in st) !! n out)); intro.
+ right; auto.
+ case (peq s n); intro.
+ subst s. left. simpl. apply add_to_worklist_1.
+ right. simpl. apply PMap.gso. auto.
+Qed.
+
+Lemma propagate_succ_list_records_changes:
+ forall out succs st s,
+ let st' := propagate_succ_list st out succs in
+ In s st'.(st_wrk) \/ st'.(st_in)!!s = st.(st_in)!!s.
+Proof.
+ induction succs; simpl; intros.
+ right; auto.
+ elim (propagate_succ_records_changes st out a s); intro.
+ left. apply propagate_succ_list_incr_worklist. auto.
+ rewrite <- H. auto.
+Qed.
+
+Lemma step_state_good:
+ forall st n rem,
+ st.(st_wrk) = n :: rem ->
+ good_state st ->
+ good_state (propagate_succ_list (mkstate st.(st_in) rem)
+ (transf n st.(st_in)!!n)
+ (successors n)).
+Proof.
+ unfold good_state. intros st n rem WKL GOOD x LTx.
+ set (out := transf n st.(st_in)!!n).
+ rewrite WKL in GOOD.
+ elim (propagate_succ_list_records_changes
+ out (successors n) (mkstate st.(st_in) rem) x).
+ intro; left; auto.
+ simpl; intro EQ. rewrite EQ.
+ (* Case 1: x = n *)
+ case (peq x n); intro.
+ subst x. fold out.
+ right; intros.
+ elim (propagate_succ_list_charact out (successors n)
+ (mkstate st.(st_in) rem) s); intros.
+ auto.
+ (* Case 2: x <> n *)
+ elim (GOOD x LTx); intro.
+ (* Case 2.1: x was already in worklist, still is *)
+ left. apply propagate_succ_list_incr_worklist.
+ simpl. elim H; intro. elim n0; auto. auto.
+ (* Case 2.2: x was not in worklist *)
+ right; intros.
+ case (In_dec peq s (successors n)); intro.
+ (* Case 2.2.1: s is a successor of n, it may have increased *)
+ apply L.ge_trans with st.(st_in)!!s.
+ change st.(st_in)!!s with (mkstate st.(st_in) rem).(st_in)!!s.
+ apply propagate_succ_list_incr.
+ auto.
+ (* Case 2.2.2: s is not a successor of n, it did not change *)
+ elim (propagate_succ_list_charact out (successors n)
+ (mkstate st.(st_in) rem) s); intros.
+ rewrite H2. simpl. auto. auto.
+Qed.
+
+(** ** Correctness of the solution returned by [iterate]. *)
+
+(** As a consequence of the [good_state] invariant, the result of
+ [iterate], if defined, is a solution of the dataflow inequations,
+ since [st_wrk] is empty when [iterate] terminates. *)
+
+Lemma iterate_solution:
+ forall niter st res n s,
+ good_state st ->
+ iterate _ _ step niter st = Some res ->
+ Plt n topnode -> In s (successors n) ->
+ L.ge res!!s (transf n res!!n).
+Proof.
+ intro niter; pattern niter; apply positive_Peano_ind; intros until s.
+ rewrite iterate_base. congruence.
+ intro GS. rewrite iterate_step.
+ unfold step; caseEq (st.(st_wrk)).
+ intros. injection H1; intros; subst res.
+ elim (GS n H2); intro.
+ rewrite H0 in H4. elim H4.
+ auto.
+ intros. apply H with
+ (propagate_succ_list (mkstate st.(st_in) l)
+ (transf p st.(st_in)!!p) (successors p)).
+ apply step_state_good; auto.
+ auto. auto. auto.
+Qed.
+
+Theorem fixpoint_solution:
+ forall res n s,
+ fixpoint = Some res ->
+ Plt n topnode -> In s (successors n) ->
+ L.ge res!!s (transf n res!!n).
+Proof.
+ unfold fixpoint. intros.
+ apply iterate_solution with num_iterations start_state.
+ apply start_state_good.
+ auto. auto. auto.
+Qed.
+
+(** As a consequence of the monotonicity property, the result of
+ [fixpoint], if defined, is pointwise greater than or equal the
+ initial mapping. Therefore, it satisfies the additional constraints
+ stated in [entrypoints]. *)
+
+Lemma start_state_in_entry:
+ forall ep n v,
+ In (n, v) ep ->
+ L.ge (start_state_in ep)!!n v.
+Proof.
+ induction ep; simpl; intros.
+ elim H.
+ elim H; intros.
+ subst a. rewrite PMap.gss. rewrite L.lub_commut. apply L.ge_lub_left.
+ destruct a. rewrite PMap.gsspec. case (peq n p); intro.
+ subst p. apply L.ge_trans with (start_state_in ep)!!n.
+ apply L.ge_lub_left. auto.
+ auto.
+Qed.
+
+Theorem fixpoint_entry:
+ forall res n v,
+ fixpoint = Some res ->
+ In (n, v) entrypoints ->
+ L.ge res!!n v.
+Proof.
+ intros.
+ apply L.ge_trans with (start_state_in entrypoints)!!n.
+ apply fixpoint_incr. auto.
+ apply start_state_in_entry. auto.
+Qed.
+
+End Kildall.
+
+End Dataflow_Solver.
+
+(** * Solving backward dataflow problems using Kildall's algorithm *)
+
+(** A backward dataflow problem on a given flow graph is a forward
+ dataflow program on the reversed flow graph, where predecessors replace
+ successors. We exploit this observation to cheaply derive a backward
+ solver from the forward solver. *)
+
+(** ** Construction of the predecessor relation *)
+
+Section Predecessor.
+
+Variable successors: positive -> list positive.
+Variable topnode: positive.
+
+Fixpoint add_successors (pred: PMap.t (list positive))
+ (from: positive) (tolist: list positive)
+ {struct tolist} : PMap.t (list positive) :=
+ match tolist with
+ | nil => pred
+ | to :: rem =>
+ add_successors (PMap.set to (from :: pred!!to) pred) from rem
+ end.
+
+Lemma add_successors_correct:
+ forall tolist from pred n s,
+ In n pred!!s \/ (n = from /\ In s tolist) ->
+ In n (add_successors pred from tolist)!!s.
+Proof.
+ induction tolist; simpl; intros.
+ tauto.
+ apply IHtolist.
+ rewrite PMap.gsspec. case (peq s a); intro.
+ subst a. elim H; intro. left; auto with coqlib.
+ elim H0; intros. subst n. left; auto with coqlib.
+ intuition. elim n0; auto.
+Qed.
+
+Definition make_predecessors : PMap.t (list positive) :=
+ positive_rec (PMap.t (list positive)) (PMap.init nil)
+ (fun n pred => add_successors pred n (successors n))
+ topnode.
+
+Lemma make_predecessors_correct:
+ forall n s,
+ Plt n topnode ->
+ In s (successors n) ->
+ In n make_predecessors!!s.
+Proof.
+ unfold make_predecessors. pattern topnode.
+ apply positive_Peano_ind; intros.
+ compute in H. destruct n; discriminate.
+ rewrite positive_rec_succ.
+ apply add_successors_correct.
+ elim (Plt_succ_inv _ _ H0); intro.
+ left; auto.
+ right. subst x. tauto.
+Qed.
+
+End Predecessor.
+
+(** ** Solving backward dataflow problems *)
+
+(** The interface to a backward dataflow solver is as follows. *)
+
+Module Type BACKWARD_DATAFLOW_SOLVER.
+
+ Declare Module L: SEMILATTICE.
+
+ Variable fixpoint:
+ (positive -> list positive) ->
+ positive ->
+ (positive -> L.t -> L.t) ->
+ list (positive * L.t) ->
+ option (PMap.t L.t).
+
+ Hypothesis fixpoint_solution:
+ forall successors topnode transf entrypoints res n s,
+ fixpoint successors topnode transf entrypoints = Some res ->
+ Plt n topnode -> Plt s topnode -> In s (successors n) ->
+ L.ge res!!n (transf s res!!s).
+
+ Hypothesis fixpoint_entry:
+ forall successors topnode transf entrypoints res n v,
+ fixpoint successors topnode transf entrypoints = Some res ->
+ In (n, v) entrypoints ->
+ L.ge res!!n v.
+
+End BACKWARD_DATAFLOW_SOLVER.
+
+(** We construct a generic backward dataflow solver, working over any
+ semi-lattice structure, by applying the forward dataflow solver
+ with the predecessor relation instead of the successor relation. *)
+
+Module Backward_Dataflow_Solver (LAT: SEMILATTICE):
+ BACKWARD_DATAFLOW_SOLVER with Module L := LAT.
+
+Module L := LAT.
+
+Module DS := Dataflow_Solver L.
+
+Section Kildall.
+
+Variable successors: positive -> list positive.
+Variable topnode: positive.
+Variable transf: positive -> L.t -> L.t.
+Variable entrypoints: list (positive * L.t).
+
+Definition fixpoint :=
+ let pred := make_predecessors successors topnode in
+ DS.fixpoint (fun s => pred!!s) topnode transf entrypoints.
+
+Theorem fixpoint_solution:
+ forall res n s,
+ fixpoint = Some res ->
+ Plt n topnode -> Plt s topnode ->
+ In s (successors n) ->
+ L.ge res!!n (transf s res!!s).
+Proof.
+ intros. apply DS.fixpoint_solution with
+ (fun s => (make_predecessors successors topnode)!!s) topnode entrypoints.
+ exact H.
+ assumption.
+ apply make_predecessors_correct; auto.
+Qed.
+
+Theorem fixpoint_entry:
+ forall res n v,
+ fixpoint = Some res ->
+ In (n, v) entrypoints ->
+ L.ge res!!n v.
+Proof.
+ intros. apply DS.fixpoint_entry with
+ (fun s => (make_predecessors successors topnode)!!s) topnode transf entrypoints.
+ exact H. auto.
+Qed.
+
+End Kildall.
+
+End Backward_Dataflow_Solver.
+
+(** * Analysis on extended basic blocks *)
+
+(** We now define an approximate solver for forward dataflow problems
+ that proceeds by forward propagation over extended basic blocks.
+ In other terms, program points with multiple predecessors are mapped
+ to [L.top] (the greatest, or coarsest, approximation) and the other
+ program points are mapped to [transf p X[p]] where [p] is their unique
+ predecessor.
+
+ This analysis applies to any type of approximations equipped with
+ an ordering and a greatest element. *)
+
+Module Type ORDERED_TYPE_WITH_TOP.
+
+ Variable t: Set.
+ Variable ge: t -> t -> Prop.
+ Variable top: t.
+ Hypothesis top_ge: forall x, ge top x.
+ Hypothesis refl_ge: forall x, ge x x.
+
+End ORDERED_TYPE_WITH_TOP.
+
+(** The interface of the solver is similar to that of Kildall's forward
+ solver. We provide one additional theorem [fixpoint_invariant]
+ stating that any property preserved by the [transf] function
+ holds for the returned solution. *)
+
+Module Type BBLOCK_SOLVER.
+
+ Declare Module L: ORDERED_TYPE_WITH_TOP.
+
+ Variable fixpoint:
+ (positive -> list positive) ->
+ positive ->
+ (positive -> L.t -> L.t) ->
+ positive ->
+ option (PMap.t L.t).
+
+ Hypothesis fixpoint_solution:
+ forall successors topnode transf entrypoint res n s,
+ fixpoint successors topnode transf entrypoint = Some res ->
+ Plt n topnode -> In s (successors n) ->
+ L.ge res!!s (transf n res!!n).
+
+ Hypothesis fixpoint_entry:
+ forall successors topnode transf entrypoint res,
+ fixpoint successors topnode transf entrypoint = Some res ->
+ res!!entrypoint = L.top.
+
+ Hypothesis fixpoint_invariant:
+ forall successors topnode transf entrypoint
+ (P: L.t -> Prop),
+ P L.top ->
+ (forall pc x, P x -> P (transf pc x)) ->
+ forall res pc,
+ fixpoint successors topnode transf entrypoint = Some res ->
+ P res!!pc.
+
+End BBLOCK_SOLVER.
+
+(** The implementation of the ``extended basic block'' solver is a
+ functor parameterized by any ordered type with a top element. *)
+
+Module BBlock_solver(LAT: ORDERED_TYPE_WITH_TOP):
+ BBLOCK_SOLVER with Module L := LAT.
+
+Module L := LAT.
+
+Section Solver.
+
+Variable successors: positive -> list positive.
+Variable topnode: positive.
+Variable transf: positive -> L.t -> L.t.
+Variable entrypoint: positive.
+Variable P: L.t -> Prop.
+Hypothesis Ptop: P L.top.
+Hypothesis Ptransf: forall pc x, P x -> P (transf pc x).
+
+Definition bbmap := positive -> bool.
+Definition result := PMap.t L.t.
+
+(** As in Kildall's solver, the state of the iteration has two components:
+- A mapping from program points to values of type [L.t] representing
+ the candidate solution found so far.
+- A worklist of program points that remain to be considered.
+*)
+
+Record state : Set := mkstate
+ { st_in: result; st_wrk: list positive }.
+
+(** The ``extended basic block'' algorithm, in pseudo-code, is as follows:
+<<
+ st_wrk := the set of all points n having multiple predecessors
+ st_in := the mapping n -> L.top
+
+ while st_wrk is not empty, do
+ extract a node n from st_wrk
+ compute out = transf n st_in[n]
+ for each successor s of n:
+ compute in = lub st_in[s] out
+ if s has only one predecessor (namely, n):
+ st_in[s] := in
+ st_wrk := st_wrk union {s}
+ end if
+ end for
+ end while
+ return st_in
+>>
+**)
+
+Fixpoint propagate_successors
+ (bb: bbmap) (succs: list positive) (l: L.t) (st: state)
+ {struct succs} : state :=
+ match succs with
+ | nil => st
+ | s1 :: sl =>
+ if bb s1 then
+ propagate_successors bb sl l st
+ else
+ propagate_successors bb sl l
+ (mkstate (PMap.set s1 l st.(st_in))
+ (s1 :: st.(st_wrk)))
+ end.
+
+Definition step (bb: bbmap) (st: state) : result + state :=
+ match st.(st_wrk) with
+ | nil => inl _ st.(st_in)
+ | pc :: rem =>
+ if plt pc topnode then
+ inr _ (propagate_successors
+ bb (successors pc)
+ (transf pc st.(st_in)!!pc)
+ (mkstate st.(st_in) rem))
+ else
+ inr _ (mkstate st.(st_in) rem)
+ end.
+
+(** Recognition of program points that have more than one predecessor. *)
+
+Definition is_basic_block_head
+ (preds: PMap.t (list positive)) (pc: positive) : bool :=
+ match preds!!pc with
+ | nil => true
+ | s :: nil =>
+ if peq s pc then true else
+ if peq pc entrypoint then true else false
+ | _ :: _ :: _ => true
+ end.
+
+Definition basic_block_map : bbmap :=
+ is_basic_block_head (make_predecessors successors topnode).
+
+Definition basic_block_list (bb: bbmap) : list positive :=
+ positive_rec (list positive) nil
+ (fun pc l => if bb pc then pc :: l else l) topnode.
+
+(** The computation of the approximate solution. *)
+
+Definition fixpoint : option result :=
+ let bb := basic_block_map in
+ iterate _ _ (step bb) num_iterations
+ (mkstate (PMap.init L.top) (basic_block_list bb)).
+
+(** ** Properties of predecessors and multiple-predecessors nodes *)
+
+Definition predecessors := make_predecessors successors topnode.
+
+Lemma predecessors_correct:
+ forall n s,
+ Plt n topnode -> In s (successors n) -> In n predecessors!!s.
+Proof.
+ intros. unfold predecessors. eapply make_predecessors_correct; eauto.
+Qed.
+
+Lemma multiple_predecessors:
+ forall s n1 n2,
+ Plt n1 topnode -> In s (successors n1) ->
+ Plt n2 topnode -> In s (successors n2) ->
+ n1 <> n2 ->
+ basic_block_map s = true.
+Proof.
+ intros.
+ assert (In n1 predecessors!!s). apply predecessors_correct; auto.
+ assert (In n2 predecessors!!s). apply predecessors_correct; auto.
+ unfold basic_block_map, is_basic_block_head.
+ fold predecessors.
+ destruct (predecessors!!s).
+ auto.
+ destruct l.
+ simpl in H4. simpl in H5. intuition congruence.
+ auto.
+Qed.
+
+Lemma no_self_loop:
+ forall n,
+ Plt n topnode -> In n (successors n) -> basic_block_map n = true.
+Proof.
+ intros. unfold basic_block_map, is_basic_block_head.
+ fold predecessors.
+ generalize (predecessors_correct n n H H0). intro.
+ destruct (predecessors!!n). auto.
+ destruct l. replace n with p. apply peq_true. simpl in H1. tauto.
+ auto.
+Qed.
+
+(** ** Correctness invariant *)
+
+(** The invariant over the state is as follows:
+- Points with several predecessors are mapped to [L.top]
+- Points not in the worklist satisfy their inequations
+ (as in Kildall's algorithm).
+*)
+
+Definition state_invariant (st: state) : Prop :=
+ (forall n, basic_block_map n = true -> st.(st_in)!!n = L.top)
+/\
+ (forall n, Plt n topnode ->
+ In n st.(st_wrk) \/
+ (forall s, In s (successors n) ->
+ L.ge st.(st_in)!!s (transf n st.(st_in)!!n))).
+
+Lemma propagate_successors_charact1:
+ forall bb succs l st,
+ incl st.(st_wrk)
+ (propagate_successors bb succs l st).(st_wrk).
+Proof.
+ induction succs; simpl; intros.
+ apply incl_refl.
+ case (bb a).
+ auto.
+ apply incl_tran with (a :: st_wrk st).
+ apply incl_tl. apply incl_refl.
+ set (st1 := (mkstate (PMap.set a l (st_in st)) (a :: st_wrk st))).
+ change (a :: st_wrk st) with (st_wrk st1).
+ auto.
+Qed.
+
+Lemma propagate_successors_charact2:
+ forall bb succs l st n,
+ let st' := propagate_successors bb succs l st in
+ (In n succs -> bb n = false -> In n st'.(st_wrk) /\ st'.(st_in)!!n = l)
+/\ (~In n succs \/ bb n = true -> st'.(st_in)!!n = st.(st_in)!!n).
+Proof.
+ induction succs; simpl; intros.
+ (* Base case *)
+ split. tauto. auto.
+ (* Inductive case *)
+ caseEq (bb a); intro.
+ elim (IHsuccs l st n); intros A B.
+ split; intros. apply A; auto.
+ elim H0; intro. subst a. congruence. auto.
+ apply B. tauto.
+ set (st1 := mkstate (PMap.set a l (st_in st)) (a :: st_wrk st)).
+ elim (IHsuccs l st1 n); intros A B.
+ split; intros.
+ elim H0; intros.
+ subst n. split.
+ apply propagate_successors_charact1. simpl. tauto.
+ case (In_dec peq a succs); intro.
+ elim (A i H1); auto.
+ rewrite B. unfold st1; simpl. apply PMap.gss. tauto.
+ apply A; auto.
+ rewrite B. unfold st1; simpl. apply PMap.gso.
+ red; intro; subst n. elim H0; intro. tauto. congruence.
+ tauto.
+Qed.
+
+Lemma propagate_successors_invariant:
+ forall pc res rem,
+ Plt pc topnode ->
+ state_invariant (mkstate res (pc :: rem)) ->
+ state_invariant
+ (propagate_successors basic_block_map (successors pc)
+ (transf pc res!!pc)
+ (mkstate res rem)).
+Proof.
+ intros until rem. intros PC [INV1 INV2]. simpl in INV1. simpl in INV2.
+ set (l := transf pc res!!pc).
+ generalize (propagate_successors_charact1 basic_block_map
+ (successors pc) l (mkstate res rem)).
+ generalize (propagate_successors_charact2 basic_block_map
+ (successors pc) l (mkstate res rem)).
+ set (st1 := propagate_successors basic_block_map
+ (successors pc) l (mkstate res rem)).
+ intros A B.
+ (* First part: BB entries remain at top *)
+ split; intros.
+ elim (A n); intros C D. rewrite D. simpl. apply INV1. auto. tauto.
+ (* Second part: monotonicity *)
+ (* Case 1: n = pc *)
+ case (peq pc n); intros.
+ subst n. right; intros.
+ elim (A s); intros C D.
+ replace (st1.(st_in)!!pc) with res!!pc. fold l.
+ caseEq (basic_block_map s); intro.
+ rewrite D. simpl. rewrite INV1. apply L.top_ge. auto. tauto.
+ elim (C H0 H1); intros. rewrite H3. apply L.refl_ge.
+ elim (A pc); intros E F. rewrite F. reflexivity.
+ case (In_dec peq pc (successors pc)); intro.
+ right. apply no_self_loop; auto.
+ left; auto.
+ (* Case 2: n <> pc *)
+ elim (INV2 n H); intro.
+ (* Case 2.1: n was already in worklist, still is *)
+ left. apply B. simpl. simpl in H0. tauto.
+ (* Case 2.2: n was not in worklist *)
+ assert (INV3: forall s, In s (successors n) -> st1.(st_in)!!s = res!!s).
+ (* Amazingly, successors of n do not change. The only way
+ they could change is if they were successors of pc as well,
+ but that gives them two different predecessors, so
+ they are basic block heads, and thus do not change! *)
+ intros. elim (A s); intros C D. rewrite D. reflexivity.
+ case (In_dec peq s (successors pc)); intro.
+ right. apply multiple_predecessors with n pc; auto.
+ left; auto.
+ case (In_dec peq n (successors pc)); intro.
+ (* Case 2.2.1: n is a successor of pc. Either it is in the
+ worklist or it did not change *)
+ caseEq (basic_block_map n); intro.
+ right; intros.
+ elim (A n); intros C D. rewrite D. simpl.
+ rewrite INV3; auto.
+ tauto.
+ left. elim (A n); intros C D. elim (C i H1); intros. auto.
+ (* Case 2.2.2: n is not a successor of pc. It did not change. *)
+ right; intros.
+ elim (A n); intros C D. rewrite D. simpl.
+ rewrite INV3; auto.
+ tauto.
+Qed.
+
+Lemma discard_top_worklist_invariant:
+ forall pc res rem,
+ ~(Plt pc topnode) ->
+ state_invariant (mkstate res (pc :: rem)) ->
+ state_invariant (mkstate res rem).
+Proof.
+ intros; red; intros.
+ elim H0; simpl; intros A B.
+ split. assumption.
+ intros. elim (B n H1); intros.
+ left. elim H2; intro. subst n. contradiction. auto.
+ right. assumption.
+Qed.
+
+Lemma analyze_invariant:
+ forall res count st,
+ iterate _ _ (step basic_block_map) count st = Some res ->
+ state_invariant st ->
+ state_invariant (mkstate res nil).
+Proof.
+ intros until count. pattern count.
+ apply positive_Peano_ind; intros until st.
+ rewrite iterate_base. congruence.
+ rewrite iterate_step. unfold step at 1. case st; intros r w; simpl.
+ case w.
+ intros. replace res with r. auto. congruence.
+ intros pc wl. case (plt pc topnode); intros.
+ eapply H. eauto. apply propagate_successors_invariant; auto.
+ eapply H. eauto. eapply discard_top_worklist_invariant; eauto.
+Qed.
+
+Lemma initial_state_invariant:
+ state_invariant (mkstate (PMap.init L.top) (basic_block_list basic_block_map)).
+Proof.
+ split; simpl; intros.
+ apply PMap.gi.
+ right. intros. repeat rewrite PMap.gi. apply L.top_ge.
+Qed.
+
+(** ** Correctness of the returned solution *)
+
+Theorem fixpoint_solution:
+ forall res n s,
+ fixpoint = Some res ->
+ Plt n topnode -> In s (successors n) ->
+ L.ge res!!s (transf n res!!n).
+Proof.
+ unfold fixpoint.
+ intros.
+ assert (state_invariant (mkstate res nil)).
+ eapply analyze_invariant; eauto. apply initial_state_invariant.
+ elim H2; simpl; intros.
+ elim (H4 n H0); intros.
+ contradiction.
+ auto.
+Qed.
+
+Theorem fixpoint_entry:
+ forall res,
+ fixpoint = Some res ->
+ res!!entrypoint = L.top.
+Proof.
+ unfold fixpoint.
+ intros.
+ assert (state_invariant (mkstate res nil)).
+ eapply analyze_invariant; eauto. apply initial_state_invariant.
+ elim H0; simpl; intros.
+ apply H1. unfold basic_block_map, is_basic_block_head.
+ fold predecessors.
+ destruct (predecessors!!entrypoint). auto.
+ destruct l. destruct (peq p entrypoint). auto. apply peq_true.
+ auto.
+Qed.
+
+(** ** Preservation of a property over solutions *)
+
+Definition Pstate (st: state) : Prop :=
+ forall pc, P st.(st_in)!!pc.
+
+Lemma propagate_successors_P:
+ forall bb l,
+ P l ->
+ forall succs st,
+ Pstate st ->
+ Pstate (propagate_successors bb succs l st).
+Proof.
+ induction succs; simpl; intros.
+ auto.
+ case (bb a). auto.
+ apply IHsuccs. red; simpl; intros.
+ rewrite PMap.gsspec. case (peq pc a); intro.
+ auto. apply H0.
+Qed.
+
+Lemma analyze_P:
+ forall bb res count st,
+ iterate _ _ (step bb) count st = Some res ->
+ Pstate st ->
+ (forall pc, P res!!pc).
+Proof.
+ intros until count; pattern count; apply positive_Peano_ind; intros until st.
+ rewrite iterate_base. congruence.
+ rewrite iterate_step; unfold step at 1; destruct st.(st_wrk).
+ intros. inversion H0. apply H1.
+ destruct (plt p topnode).
+ intros. eapply H. eauto.
+ apply propagate_successors_P. apply Ptransf. apply H1.
+ red; intro; simpl. apply H1.
+ intros. eauto.
+Qed.
+
+Theorem fixpoint_invariant:
+ forall res pc, fixpoint = Some res -> P res!!pc.
+Proof.
+ intros. unfold fixpoint in H. eapply analyze_P; eauto.
+ red; intro; simpl. rewrite PMap.gi. apply Ptop.
+Qed.
+
+End Solver.
+
+End BBlock_solver.
+
diff --git a/backend/LTL.v b/backend/LTL.v
new file mode 100644
index 0000000..2c36cba
--- /dev/null
+++ b/backend/LTL.v
@@ -0,0 +1,357 @@
+(** The LTL intermediate language: abstract syntax and semantics.
+
+ LTL (``Location Transfer Language'') is the target language
+ for register allocation and the source language for linearization. *)
+
+Require Import Relations.
+Require Import Coqlib.
+Require Import Maps.
+Require Import AST.
+Require Import Integers.
+Require Import Values.
+Require Import Mem.
+Require Import Globalenvs.
+Require Import Op.
+Require Import Locations.
+Require Conventions.
+
+(** * Abstract syntax *)
+
+(** LTL is close to RTL, but uses locations instead of pseudo-registers,
+ and basic blocks instead of single instructions as nodes of its
+ control-flow graph. *)
+
+Definition node := positive.
+
+(** A basic block is a sequence of instructions terminated by
+ a [Bgoto], [Bcond] or [Breturn] instruction. (This invariant
+ is enforced by the following inductive type definition.)
+ The instructions behave like the similarly-named instructions
+ of RTL. They take machine registers (type [mreg]) as arguments
+ and results. Two new instructions are added: [Bgetstack]
+ and [Bsetstack], which are ``move'' instructions between
+ a machine register and a stack slot. *)
+
+Inductive block: Set :=
+ | Bgetstack: slot -> mreg -> block -> block
+ | Bsetstack: mreg -> slot -> block -> block
+ | Bop: operation -> list mreg -> mreg -> block -> block
+ | Bload: memory_chunk -> addressing -> list mreg -> mreg -> block -> block
+ | Bstore: memory_chunk -> addressing -> list mreg -> mreg -> block -> block
+ | Bcall: signature -> mreg + ident -> block -> block
+ | Bgoto: node -> block
+ | Bcond: condition -> list mreg -> node -> node -> block
+ | Breturn: block.
+
+Definition code: Set := PTree.t block.
+
+(** Unlike in RTL, parameter passing (passing values of the arguments
+ to a function call to the parameters of the called function) is done
+ via conventional locations (machine registers and stack slots).
+ Consequently, the [Bcall] instruction has no list of argument registers,
+ and function descriptions have no list of parameter registers. *)
+
+Record function: Set := mkfunction {
+ fn_sig: signature;
+ fn_stacksize: Z;
+ fn_code: code;
+ fn_entrypoint: node;
+ fn_code_wf:
+ forall (pc: node), Plt pc (Psucc fn_entrypoint) \/ fn_code!pc = None
+}.
+
+Definition program := AST.program function.
+
+(** * Operational semantics *)
+
+Definition genv := Genv.t function.
+Definition locset := Locmap.t.
+
+Section RELSEM.
+
+(** Calling conventions are reflected at the level of location sets
+ (environments mapping locations to values) by the following two
+ functions.
+
+ [call_regs caller] returns the location set at function entry,
+ as a function of the location set [caller] of the calling function.
+- Machine registers have the same values as in the caller.
+- Incoming stack slots (used for parameter passing) have the same
+ values as the corresponding outgoing stack slots (used for argument
+ passing) in the caller.
+- Local and outgoing stack slots are initialized to undefined values.
+*)
+
+Definition call_regs (caller: locset) : locset :=
+ fun (l: loc) =>
+ match l with
+ | R r => caller (R r)
+ | S (Local ofs ty) => Vundef
+ | S (Incoming ofs ty) => caller (S (Outgoing ofs ty))
+ | S (Outgoing ofs ty) => Vundef
+ end.
+
+(** [return_regs caller callee] returns the location set after
+ a call instruction, as a function of the location set [caller]
+ of the caller before the call instruction and of the location
+ set [callee] of the callee at the return instruction.
+- Callee-save machine registers have the same values as in the caller
+ before the call.
+- Caller-save and temporary machine registers have the same values
+ as in the callee at the return point.
+- Stack slots have the same values as in the caller before the call.
+*)
+
+Definition return_regs (caller callee: locset) : locset :=
+ fun (l: loc) =>
+ match l with
+ | R r =>
+ if In_dec Loc.eq (R r) Conventions.temporaries then
+ callee (R r)
+ else if In_dec Loc.eq (R r) Conventions.destroyed_at_call then
+ callee (R r)
+ else
+ caller (R r)
+ | S s => caller (S s)
+ end.
+
+Variable ge: genv.
+
+Definition find_function (ros: mreg + ident) (rs: locset) : option function :=
+ match ros with
+ | inl r => Genv.find_funct ge (rs (R r))
+ | inr symb =>
+ match Genv.find_symbol ge symb with
+ | None => None
+ | Some b => Genv.find_funct_ptr ge b
+ end
+ end.
+
+Definition reglist (rl: list mreg) (rs: locset) : list val :=
+ List.map (fun r => rs (R r)) rl.
+
+(** The dynamic semantics of LTL, like that of RTL, is a combination
+ of small-step transition semantics and big-step semantics.
+ Function calls are treated in big-step style so that they appear
+ as a single transition in the caller function. Other instructions
+ are treated in purely small-step style, as a single transition.
+
+ The introduction of basic blocks increases the number of inductive
+ predicates needed to express the semantics:
+- [exec_instr ge sp b ls m b' ls' m'] is the execution of the first
+ instruction of block [b]. [b'] is the remainder of the block.
+- [exec_instrs ge sp b ls m b' ls' m'] is similar, but executes
+ zero, one or several instructions at the beginning of block [b].
+- [exec_block ge sp b ls m out ls' m'] executes all instructions
+ of block [b]. The outcome [out] is either [Cont s], indicating
+ that the block terminates by branching to block labeled [s],
+ or [Return], indicating that the block terminates by returning
+ from the current function.
+- [exec_blocks ge code sp pc ls m out ls' m'] executes a sequence
+ of zero, one or several blocks, starting at the block labeled [pc].
+ [code] is the control-flow graph for the current function.
+ The outcome [out] indicates how the last block in this sequence
+ terminates: by branching to another block or by returning from the
+ function.
+- [exec_function ge f ls m ls' m'] executes the body of function [f],
+ from its entry point to the first [Lreturn] instruction encountered.
+
+ In all these predicates, [ls] and [ls'] are the location sets
+ (values of locations) at the beginning and end of the transitions,
+ respectively.
+*)
+
+Inductive outcome: Set :=
+ | Cont: node -> outcome
+ | Return: outcome.
+
+Inductive exec_instr: val ->
+ block -> locset -> mem ->
+ block -> locset -> mem -> Prop :=
+ | exec_Bgetstack:
+ forall sp sl r b rs m,
+ exec_instr sp (Bgetstack sl r b) rs m
+ b (Locmap.set (R r) (rs (S sl)) rs) m
+ | exec_Bsetstack:
+ forall sp r sl b rs m,
+ exec_instr sp (Bsetstack r sl b) rs m
+ b (Locmap.set (S sl) (rs (R r)) rs) m
+ | exec_Bop:
+ forall sp op args res b rs m v,
+ eval_operation ge sp op (reglist args rs) = Some v ->
+ exec_instr sp (Bop op args res b) rs m
+ b (Locmap.set (R res) v rs) m
+ | exec_Bload:
+ forall sp chunk addr args dst b rs m a v,
+ eval_addressing ge sp addr (reglist args rs) = Some a ->
+ loadv chunk m a = Some v ->
+ exec_instr sp (Bload chunk addr args dst b) rs m
+ b (Locmap.set (R dst) v rs) m
+ | exec_Bstore:
+ forall sp chunk addr args src b rs m m' a,
+ eval_addressing ge sp addr (reglist args rs) = Some a ->
+ storev chunk m a (rs (R src)) = Some m' ->
+ exec_instr sp (Bstore chunk addr args src b) rs m
+ b rs m'
+ | exec_Bcall:
+ forall sp sig ros b rs m f rs' m',
+ find_function ros rs = Some f ->
+ sig = f.(fn_sig) ->
+ exec_function f rs m rs' m' ->
+ exec_instr sp (Bcall sig ros b) rs m
+ b (return_regs rs rs') m'
+
+with exec_instrs: val ->
+ block -> locset -> mem ->
+ block -> locset -> mem -> Prop :=
+ | exec_refl:
+ forall sp b rs m,
+ exec_instrs sp b rs m b rs m
+ | exec_one:
+ forall sp b1 rs1 m1 b2 rs2 m2,
+ exec_instr sp b1 rs1 m1 b2 rs2 m2 ->
+ exec_instrs sp b1 rs1 m1 b2 rs2 m2
+ | exec_trans:
+ forall sp b1 rs1 m1 b2 rs2 m2 b3 rs3 m3,
+ exec_instrs sp b1 rs1 m1 b2 rs2 m2 ->
+ exec_instrs sp b2 rs2 m2 b3 rs3 m3 ->
+ exec_instrs sp b1 rs1 m1 b3 rs3 m3
+
+with exec_block: val ->
+ block -> locset -> mem ->
+ outcome -> locset -> mem -> Prop :=
+ | exec_Bgoto:
+ forall sp b rs m s rs' m',
+ exec_instrs sp b rs m (Bgoto s) rs' m' ->
+ exec_block sp b rs m (Cont s) rs' m'
+ | exec_Bcond_true:
+ forall sp b rs m cond args ifso ifnot rs' m',
+ exec_instrs sp b rs m (Bcond cond args ifso ifnot) rs' m' ->
+ eval_condition cond (reglist args rs') = Some true ->
+ exec_block sp b rs m (Cont ifso) rs' m'
+ | exec_Bcond_false:
+ forall sp b rs m cond args ifso ifnot rs' m',
+ exec_instrs sp b rs m (Bcond cond args ifso ifnot) rs' m' ->
+ eval_condition cond (reglist args rs') = Some false ->
+ exec_block sp b rs m (Cont ifnot) rs' m'
+ | exec_Breturn:
+ forall sp b rs m rs' m',
+ exec_instrs sp b rs m Breturn rs' m' ->
+ exec_block sp b rs m Return rs' m'
+
+with exec_blocks: code -> val ->
+ node -> locset -> mem ->
+ outcome -> locset -> mem -> Prop :=
+ | exec_blocks_refl:
+ forall c sp pc rs m,
+ exec_blocks c sp pc rs m (Cont pc) rs m
+ | exec_blocks_one:
+ forall c sp pc b m rs out rs' m',
+ c!pc = Some b ->
+ exec_block sp b rs m out rs' m' ->
+ exec_blocks c sp pc rs m out rs' m'
+ | exec_blocks_trans:
+ forall c sp pc1 rs1 m1 pc2 rs2 m2 out rs3 m3,
+ exec_blocks c sp pc1 rs1 m1 (Cont pc2) rs2 m2 ->
+ exec_blocks c sp pc2 rs2 m2 out rs3 m3 ->
+ exec_blocks c sp pc1 rs1 m1 out rs3 m3
+
+with exec_function: function -> locset -> mem ->
+ locset -> mem -> Prop :=
+ | exec_funct:
+ forall f rs m m1 stk rs2 m2,
+ alloc m 0 f.(fn_stacksize) = (m1, stk) ->
+ exec_blocks f.(fn_code) (Vptr stk Int.zero)
+ f.(fn_entrypoint) (call_regs rs) m1 Return rs2 m2 ->
+ exec_function f rs m rs2 (free m2 stk).
+
+End RELSEM.
+
+(** Execution of a whole program boils down to invoking its main
+ function. The result of the program is the return value of the
+ main function, to be found in the machine register dictated
+ by the calling conventions. *)
+
+Definition exec_program (p: program) (r: val) : Prop :=
+ let ge := Genv.globalenv p in
+ let m0 := Genv.init_mem p in
+ exists b, exists f, exists rs, exists m,
+ Genv.find_symbol ge p.(prog_main) = Some b /\
+ Genv.find_funct_ptr ge b = Some f /\
+ f.(fn_sig) = mksignature nil (Some Tint) /\
+ exec_function ge f (Locmap.init Vundef) m0 rs m /\
+ rs (R (Conventions.loc_result f.(fn_sig))) = r.
+
+(** We remark that the [exec_blocks] relation is stable if
+ the control-flow graph is extended by adding new basic blocks
+ at previously unused graph nodes. *)
+
+Section EXEC_BLOCKS_EXTENDS.
+
+Variable ge: genv.
+Variable c1 c2: code.
+Hypothesis EXT: forall pc, c2!pc = c1!pc \/ c1!pc = None.
+
+Lemma exec_blocks_extends:
+ forall sp pc1 rs1 m1 out rs2 m2,
+ exec_blocks ge c1 sp pc1 rs1 m1 out rs2 m2 ->
+ exec_blocks ge c2 sp pc1 rs1 m1 out rs2 m2.
+Proof.
+ induction 1.
+ apply exec_blocks_refl.
+ apply exec_blocks_one with b.
+ elim (EXT pc); intro; congruence. assumption.
+ eapply exec_blocks_trans; eauto.
+Qed.
+
+End EXEC_BLOCKS_EXTENDS.
+
+(** * Operations over LTL *)
+
+(** Computation of the possible successors of a basic block.
+ This is used for dataflow analyses. *)
+
+Fixpoint successors_aux (b: block) : list node :=
+ match b with
+ | Bgetstack s r b => successors_aux b
+ | Bsetstack r s b => successors_aux b
+ | Bop op args res b => successors_aux b
+ | Bload chunk addr args dst b => successors_aux b
+ | Bstore chunk addr args src b => successors_aux b
+ | Bcall sig ros b => successors_aux b
+ | Bgoto n => n :: nil
+ | Bcond cond args ifso ifnot => ifso :: ifnot :: nil
+ | Breturn => nil
+ end.
+
+Definition successors (f: function) (pc: node) : list node :=
+ match f.(fn_code)!pc with
+ | None => nil
+ | Some b => successors_aux b
+ end.
+
+Lemma successors_aux_invariant:
+ forall ge sp b rs m b' rs' m',
+ exec_instrs ge sp b rs m b' rs' m' ->
+ successors_aux b = successors_aux b'.
+Proof.
+ induction 1; simpl; intros.
+ reflexivity.
+ inversion H; reflexivity.
+ transitivity (successors_aux b2); auto.
+Qed.
+
+Lemma successors_correct:
+ forall ge f sp pc rs m pc' rs' m' b,
+ f.(fn_code)!pc = Some b ->
+ exec_block ge sp b rs m (Cont pc') rs' m' ->
+ In pc' (successors f pc).
+Proof.
+ intros. unfold successors. rewrite H. inversion H0.
+ rewrite (successors_aux_invariant _ _ _ _ _ _ _ _ H6); simpl.
+ tauto.
+ rewrite (successors_aux_invariant _ _ _ _ _ _ _ _ H2); simpl.
+ tauto.
+ rewrite (successors_aux_invariant _ _ _ _ _ _ _ _ H2); simpl.
+ tauto.
+Qed.
diff --git a/backend/LTLtyping.v b/backend/LTLtyping.v
new file mode 100644
index 0000000..3f13ac3
--- /dev/null
+++ b/backend/LTLtyping.v
@@ -0,0 +1,93 @@
+(** Typing rules for LTL. *)
+
+Require Import Coqlib.
+Require Import Maps.
+Require Import AST.
+Require Import Op.
+Require Import RTL.
+Require Import Locations.
+Require Import LTL.
+Require Import Conventions.
+
+(** The following predicates define a type system for LTL similar to that
+ of [RTL] (see file [RTLtyping]): it statically guarantees that operations
+ and addressing modes are applied to the right number of arguments
+ and that the arguments are of the correct types. Moreover, it also
+ enforces some correctness conditions on the offsets of stack slots
+ accessed through [Bgetstack] and [Bsetstack] LTL instructions. *)
+
+Section WT_BLOCK.
+
+Variable funct: function.
+
+Definition slot_bounded (s: slot) :=
+ match s with
+ | Local ofs ty => 0 <= ofs
+ | Outgoing ofs ty => 6 <= ofs
+ | Incoming ofs ty => 6 <= ofs /\ ofs + typesize ty <= size_arguments funct.(fn_sig)
+ end.
+
+Inductive wt_block : block -> Prop :=
+ | wt_Bgetstack:
+ forall s r b,
+ slot_type s = mreg_type r ->
+ slot_bounded s ->
+ wt_block b ->
+ wt_block (Bgetstack s r b)
+ | wt_Bsetstack:
+ forall r s b,
+ match s with Incoming _ _ => False | _ => True end ->
+ slot_type s = mreg_type r ->
+ slot_bounded s ->
+ wt_block b ->
+ wt_block (Bsetstack r s b)
+ | wt_Bopmove:
+ forall r1 r b,
+ mreg_type r1 = mreg_type r ->
+ wt_block b ->
+ wt_block (Bop Omove (r1 :: nil) r b)
+ | wt_Bopundef:
+ forall r b,
+ wt_block b ->
+ wt_block (Bop Oundef nil r b)
+ | wt_Bop:
+ forall op args res b,
+ op <> Omove -> op <> Oundef ->
+ (List.map mreg_type args, mreg_type res) = type_of_operation op ->
+ wt_block b ->
+ wt_block (Bop op args res b)
+ | wt_Bload:
+ forall chunk addr args dst b,
+ List.map mreg_type args = type_of_addressing addr ->
+ mreg_type dst = type_of_chunk chunk ->
+ wt_block b ->
+ wt_block (Bload chunk addr args dst b)
+ | wt_Bstore:
+ forall chunk addr args src b,
+ List.map mreg_type args = type_of_addressing addr ->
+ mreg_type src = type_of_chunk chunk ->
+ wt_block b ->
+ wt_block (Bstore chunk addr args src b)
+ | wt_Bcall:
+ forall sig ros b,
+ match ros with inl r => mreg_type r = Tint | _ => True end ->
+ wt_block b ->
+ wt_block (Bcall sig ros b)
+ | wt_Bgoto:
+ forall lbl,
+ wt_block (Bgoto lbl)
+ | wt_Bcond:
+ forall cond args ifso ifnot,
+ List.map mreg_type args = type_of_condition cond ->
+ wt_block (Bcond cond args ifso ifnot)
+ | wt_Breturn:
+ wt_block (Breturn).
+
+End WT_BLOCK.
+
+Definition wt_function (f: function) : Prop :=
+ forall pc b, f.(fn_code)!pc = Some b -> wt_block f b.
+
+Definition wt_program (p: program) : Prop :=
+ forall i f, In (i, f) (prog_funct p) -> wt_function f.
+
diff --git a/backend/Linear.v b/backend/Linear.v
new file mode 100644
index 0000000..f4ed045
--- /dev/null
+++ b/backend/Linear.v
@@ -0,0 +1,203 @@
+(** The Linear intermediate language: abstract syntax and semantcs *)
+
+(** The Linear language is a variant of LTL where control-flow is not
+ expressed as a graph of basic blocks, but as a linear list of
+ instructions with explicit labels and ``goto'' instructions. *)
+
+Require Import Relations.
+Require Import Coqlib.
+Require Import Maps.
+Require Import AST.
+Require Import Integers.
+Require Import Values.
+Require Import Mem.
+Require Import Globalenvs.
+Require Import Op.
+Require Import Locations.
+Require Import LTL.
+Require Conventions.
+
+(** * Abstract syntax *)
+
+Definition label := positive.
+
+(** Linear instructions are similar to their LTL counterpart:
+ arguments and results are machine registers, except for the
+ [Lgetstack] and [Lsetstack] instructions which are register-stack moves.
+ Except the last three, these instructions continue in sequence
+ with the next instruction in the linear list of instructions.
+ Unconditional branches [Lgoto] and conditional branches [Lcond]
+ transfer control to the given code label. Labels are explicitly
+ inserted in the instruction list as pseudo-instructions [Llabel]. *)
+
+Inductive instruction: Set :=
+ | Lgetstack: slot -> mreg -> instruction
+ | Lsetstack: mreg -> slot -> instruction
+ | Lop: operation -> list mreg -> mreg -> instruction
+ | Lload: memory_chunk -> addressing -> list mreg -> mreg -> instruction
+ | Lstore: memory_chunk -> addressing -> list mreg -> mreg -> instruction
+ | Lcall: signature -> mreg + ident -> instruction
+ | Llabel: label -> instruction
+ | Lgoto: label -> instruction
+ | Lcond: condition -> list mreg -> label -> instruction
+ | Lreturn: instruction.
+
+Definition code: Set := list instruction.
+
+Record function: Set := mkfunction {
+ fn_sig: signature;
+ fn_stacksize: Z;
+ fn_code: code
+}.
+
+Definition program := AST.program function.
+
+Definition genv := Genv.t function.
+Definition locset := Locmap.t.
+
+(** * Operational semantics *)
+
+(** Looking up labels in the instruction list. *)
+
+Definition is_label (lbl: label) (instr: instruction) : bool :=
+ match instr with
+ | Llabel lbl' => if peq lbl lbl' then true else false
+ | _ => false
+ end.
+
+Lemma is_label_correct:
+ forall lbl instr,
+ if is_label lbl instr then instr = Llabel lbl else instr <> Llabel lbl.
+Proof.
+ intros. destruct instr; simpl; try discriminate.
+ case (peq lbl l); intro; congruence.
+Qed.
+
+(** [find_label lbl c] returns a list of instruction, suffix of the
+ code [c], that immediately follows the [Llabel lbl] pseudo-instruction.
+ If the label [lbl] is multiply-defined, the first occurrence is
+ retained. If the label [lbl] is not defined, [None] is returned. *)
+
+Fixpoint find_label (lbl: label) (c: code) {struct c} : option code :=
+ match c with
+ | nil => None
+ | i1 :: il => if is_label lbl i1 then Some il else find_label lbl il
+ end.
+
+Section RELSEM.
+
+Variable ge: genv.
+
+Definition find_function (ros: mreg + ident) (rs: locset) : option function :=
+ match ros with
+ | inl r => Genv.find_funct ge (rs (R r))
+ | inr symb =>
+ match Genv.find_symbol ge symb with
+ | None => None
+ | Some b => Genv.find_funct_ptr ge b
+ end
+ end.
+
+(** [exec_instr ge f sp c ls m c' ls' m'] represents the execution
+ of the first instruction in the code sequence [c]. [ls] and [m]
+ are the initial location set and memory state, respectively.
+ [c'] is the current code sequence after execution of the instruction:
+ it is the tail of [c] if the instruction falls through.
+ [ls'] and [m'] are the final location state and memory state. *)
+
+Inductive exec_instr: function -> val ->
+ code -> locset -> mem ->
+ code -> locset -> mem -> Prop :=
+ | exec_Lgetstack:
+ forall f sp sl r b rs m,
+ exec_instr f sp (Lgetstack sl r :: b) rs m
+ b (Locmap.set (R r) (rs (S sl)) rs) m
+ | exec_Lsetstack:
+ forall f sp r sl b rs m,
+ exec_instr f sp (Lsetstack r sl :: b) rs m
+ b (Locmap.set (S sl) (rs (R r)) rs) m
+ | exec_Lop:
+ forall f sp op args res b rs m v,
+ eval_operation ge sp op (reglist args rs) = Some v ->
+ exec_instr f sp (Lop op args res :: b) rs m
+ b (Locmap.set (R res) v rs) m
+ | exec_Lload:
+ forall f sp chunk addr args dst b rs m a v,
+ eval_addressing ge sp addr (reglist args rs) = Some a ->
+ loadv chunk m a = Some v ->
+ exec_instr f sp (Lload chunk addr args dst :: b) rs m
+ b (Locmap.set (R dst) v rs) m
+ | exec_Lstore:
+ forall f sp chunk addr args src b rs m m' a,
+ eval_addressing ge sp addr (reglist args rs) = Some a ->
+ storev chunk m a (rs (R src)) = Some m' ->
+ exec_instr f sp (Lstore chunk addr args src :: b) rs m
+ b rs m'
+ | exec_Lcall:
+ forall f sp sig ros b rs m f' rs' m',
+ find_function ros rs = Some f' ->
+ sig = f'.(fn_sig) ->
+ exec_function f' rs m rs' m' ->
+ exec_instr f sp (Lcall sig ros :: b) rs m
+ b (return_regs rs rs') m'
+ | exec_Llabel:
+ forall f sp lbl b rs m,
+ exec_instr f sp (Llabel lbl :: b) rs m
+ b rs m
+ | exec_Lgoto:
+ forall f sp lbl b rs m b',
+ find_label lbl f.(fn_code) = Some b' ->
+ exec_instr f sp (Lgoto lbl :: b) rs m
+ b' rs m
+ | exec_Lcond_true:
+ forall f sp cond args lbl b rs m b',
+ eval_condition cond (reglist args rs) = Some true ->
+ find_label lbl f.(fn_code) = Some b' ->
+ exec_instr f sp (Lcond cond args lbl :: b) rs m
+ b' rs m
+ | exec_Lcond_false:
+ forall f sp cond args lbl b rs m,
+ eval_condition cond (reglist args rs) = Some false ->
+ exec_instr f sp (Lcond cond args lbl :: b) rs m
+ b rs m
+
+with exec_instrs: function -> val ->
+ code -> locset -> mem ->
+ code -> locset -> mem -> Prop :=
+ | exec_refl:
+ forall f sp b rs m,
+ exec_instrs f sp b rs m b rs m
+ | exec_one:
+ forall f sp b1 rs1 m1 b2 rs2 m2,
+ exec_instr f sp b1 rs1 m1 b2 rs2 m2 ->
+ exec_instrs f sp b1 rs1 m1 b2 rs2 m2
+ | exec_trans:
+ forall f sp b1 rs1 m1 b2 rs2 m2 b3 rs3 m3,
+ exec_instrs f sp b1 rs1 m1 b2 rs2 m2 ->
+ exec_instrs f sp b2 rs2 m2 b3 rs3 m3 ->
+ exec_instrs f sp b1 rs1 m1 b3 rs3 m3
+
+with exec_function: function -> locset -> mem -> locset -> mem -> Prop :=
+ | exec_funct:
+ forall f rs m m1 stk rs2 m2 b,
+ alloc m 0 f.(fn_stacksize) = (m1, stk) ->
+ exec_instrs f (Vptr stk Int.zero)
+ f.(fn_code) (call_regs rs) m1 (Lreturn :: b) rs2 m2 ->
+ exec_function f rs m rs2 (free m2 stk).
+
+Scheme exec_instr_ind3 := Minimality for exec_instr Sort Prop
+ with exec_instrs_ind3 := Minimality for exec_instrs Sort Prop
+ with exec_function_ind3 := Minimality for exec_function Sort Prop.
+
+End RELSEM.
+
+Definition exec_program (p: program) (r: val) : Prop :=
+ let ge := Genv.globalenv p in
+ let m0 := Genv.init_mem p in
+ exists b, exists f, exists rs, exists m,
+ Genv.find_symbol ge p.(prog_main) = Some b /\
+ Genv.find_funct_ptr ge b = Some f /\
+ f.(fn_sig) = mksignature nil (Some Tint) /\
+ exec_function ge f (Locmap.init Vundef) m0 rs m /\
+ rs (R (Conventions.loc_result f.(fn_sig))) = r.
+
diff --git a/backend/Linearize.v b/backend/Linearize.v
new file mode 100644
index 0000000..af70b0f
--- /dev/null
+++ b/backend/Linearize.v
@@ -0,0 +1,212 @@
+(** Linearization of the control-flow graph:
+ translation from LTL to Linear *)
+
+Require Import Coqlib.
+Require Import Maps.
+Require Import Sets.
+Require Import AST.
+Require Import Values.
+Require Import Globalenvs.
+Require Import Op.
+Require Import Locations.
+Require Import LTL.
+Require Import Linear.
+Require Import Kildall.
+Require Import Lattice.
+
+(** To translate from LTL to Linear, we must layout the basic blocks
+ of the LTL control-flow graph in some linear order, and insert
+ explicit branches and conditional branches to make sure that
+ each basic block jumps to its successors as prescribed by the
+ LTL control-flow graph. However, branches are not necessary
+ if the fall-through behaviour of Linear instructions already
+ implements the desired flow of control. For instance,
+ consider the two LTL basic blocks
+<<
+ L1: Bop op args res (Bgoto L2)
+ L2: ...
+>>
+ If the blocks [L1] and [L2] are laid out consecutively in the Linear
+ code, we can generate the following Linear code:
+<<
+ L1: Lop op args res
+ L2: ...
+>>
+ However, if this is not possible, an explicit [Lgoto] is needed:
+<<
+ L1: Lop op args res
+ Lgoto L2
+ ...
+ L2: ...
+>>
+ The main challenge in code linearization is therefore to pick a
+ ``good'' order for the basic blocks that exploits well the
+ fall-through behavior. Many clever trace picking heuristics
+ have been developed for this purpose.
+
+ In this file, we present linearization in a way that clearly
+ separates the heuristic part (choosing an order for the basic blocks)
+ from the actual code transformation parts. We proceed in three passes:
+- Choosing an order for the basic blocks. This returns an enumeration
+ of CFG nodes stating that the basic blocks must be laid out in
+ the order shown in the list.
+- Generate naive Linear code where each basic block branches explicitly
+ to its successors, even if one of these successors is the next basic
+ block.
+- Simplify the naive Linear code, removing unconditional branches to
+ a label that immediately follows:
+<<
+ ... ...
+ Igoto L1; becomes L1: ...
+ L1: ...
+>>
+ The beauty of this approach is that correct code is generated
+ under surprisingly weak hypotheses on the enumeration of
+ CFG nodes: it suffices that every reachable basic block occurs
+ exactly once in the enumeration. While the enumeration heuristic we use
+ is quite trivial, it is easy to implement more sophisticated
+ trace picking heuristics: as long as they satisfy the property above,
+ we do not need to re-do the proof of semantic preservation.
+ The enumeration could even be performed by external, untrusted
+ Caml code, then verified (for the property above) by certified Coq code.
+*)
+
+(** * Determination of the order of basic blocks *)
+
+(** We first compute a mapping from CFG nodes to booleans,
+ indicating whether a CFG basic block is reachable or not.
+ This computation is a trivial forward dataflow analysis
+ where the transfer function is the identity: the successors
+ of a reachable block are reachable, by the very
+ definition of reachability. *)
+
+Module DS := Dataflow_Solver(LBoolean).
+
+Definition reachable_aux (f: LTL.function) : option (PMap.t bool) :=
+ DS.fixpoint
+ (successors f)
+ (Psucc f.(fn_entrypoint))
+ (fun pc r => r)
+ ((f.(fn_entrypoint), true) :: nil).
+
+Definition reachable (f: LTL.function) : PMap.t bool :=
+ match reachable_aux f with
+ | None => PMap.init true
+ | Some rs => rs
+ end.
+
+(** We then enumerate the nodes of reachable basic blocks. The heuristic
+ we take is trivial: nodes are enumerated in decreasing numerical
+ order. Remember that CFG nodes are positive integers, and that
+ the [RTLgen] pass allocated fresh nodes 1, 2, 3, ..., but generated
+ instructions in roughly reverse control-flow order: often,
+ a basic block at label [n] has [n-1] as its only successor.
+ Therefore, by enumerating reachable nodes in decreasing order,
+ we recover a reasonable layout of basic blocks that globally respects
+ the structure of the original Cminor code. *)
+
+Definition enumerate (f: LTL.function) : list node :=
+ let reach := reachable f in
+ positive_rec (list node) nil
+ (fun pc nodes => if reach!!pc then pc :: nodes else nodes)
+ (Psucc f.(fn_entrypoint)).
+
+(** * Translation from LTL to Linear *)
+
+(** We now flatten the structure of the CFG graph, laying out
+ basic blocks consecutively in the order computed by [enumerate],
+ and inserting a branch at the end of every basic block.
+
+ For blocks ending in a conditional branch [Bcond cond args s1 s2],
+ we have two possible translations:
+<<
+ Lcond cond args s1; or Lcond (not cond) args s2;
+ Lgoto s2 Lgoto s1
+>>
+ We favour the first translation if [s2] is the label of the
+ next instruction, and the second if [s1] is the label of the
+ next instruction, thus exhibiting more opportunities for
+ fall-through optimization later. *)
+
+Fixpoint starts_with (lbl: label) (k: code) {struct k} : bool :=
+ match k with
+ | Llabel lbl' :: k' => if peq lbl lbl' then true else starts_with lbl k'
+ | _ => false
+ end.
+
+Fixpoint linearize_block (b: block) (k: code) {struct b} : code :=
+ match b with
+ | Bgetstack s r b =>
+ Lgetstack s r :: linearize_block b k
+ | Bsetstack r s b =>
+ Lsetstack r s :: linearize_block b k
+ | Bop op args res b =>
+ Lop op args res :: linearize_block b k
+ | Bload chunk addr args dst b =>
+ Lload chunk addr args dst :: linearize_block b k
+ | Bstore chunk addr args src b =>
+ Lstore chunk addr args src :: linearize_block b k
+ | Bcall sig ros b =>
+ Lcall sig ros :: linearize_block b k
+ | Bgoto s =>
+ Lgoto s :: k
+ | Bcond cond args s1 s2 =>
+ if starts_with s1 k then
+ Lcond (negate_condition cond) args s2 :: Lgoto s1 :: k
+ else
+ Lcond cond args s1 :: Lgoto s2 :: k
+ | Breturn =>
+ Lreturn :: k
+ end.
+
+(* Linearize a function body according to an enumeration of its
+ nodes. *)
+
+Fixpoint linearize_body (f: LTL.function) (enum: list node)
+ {struct enum} : code :=
+ match enum with
+ | nil => nil
+ | pc :: rem =>
+ match f.(LTL.fn_code)!pc with
+ | None => linearize_body f rem
+ | Some b => Llabel pc :: linearize_block b (linearize_body f rem)
+ end
+ end.
+
+Definition linearize_function (f: LTL.function) : Linear.function :=
+ mkfunction
+ (LTL.fn_sig f)
+ (LTL.fn_stacksize f)
+ (linearize_body f (enumerate f)).
+
+(** * Cleanup of the linearized code *)
+
+(** We now eliminate [Lgoto] instructions that branch to an
+ immediately following label: these are redundant, as the fall-through
+ behaviour obtained by removing the [Lgoto] instruction is
+ semantically equivalent. *)
+
+Fixpoint cleanup_code (c: code) {struct c} : code :=
+ match c with
+ | nil => nil
+ | Lgoto lbl :: c' =>
+ if starts_with lbl c'
+ then cleanup_code c'
+ else Lgoto lbl :: cleanup_code c'
+ | i :: c' =>
+ i :: cleanup_code c'
+ end.
+
+Definition cleanup_function (f: Linear.function) : Linear.function :=
+ mkfunction
+ (fn_sig f)
+ (fn_stacksize f)
+ (cleanup_code f.(fn_code)).
+
+(** * Entry points for code linearization *)
+
+Definition transf_function (f: LTL.function) : Linear.function :=
+ cleanup_function (linearize_function f).
+
+Definition transf_program (p: LTL.program) : Linear.program :=
+ transform_program transf_function p.
diff --git a/backend/Linearizeproof.v b/backend/Linearizeproof.v
new file mode 100644
index 0000000..b80acb4
--- /dev/null
+++ b/backend/Linearizeproof.v
@@ -0,0 +1,711 @@
+(** Correctness proof for code linearization *)
+
+Require Import Coqlib.
+Require Import Maps.
+Require Import AST.
+Require Import Integers.
+Require Import Values.
+Require Import Mem.
+Require Import Globalenvs.
+Require Import Op.
+Require Import Locations.
+Require Import LTL.
+Require Import Linear.
+Require Import Linearize.
+Require Import Lattice.
+
+Section LINEARIZATION.
+
+Variable prog: LTL.program.
+Let tprog := transf_program prog.
+
+Let ge := Genv.globalenv prog.
+Let tge := Genv.globalenv tprog.
+
+Lemma functions_translated:
+ forall v f,
+ Genv.find_funct ge v = Some f ->
+ Genv.find_funct tge v = Some (transf_function f).
+Proof (@Genv.find_funct_transf _ _ transf_function prog).
+
+Lemma function_ptr_translated:
+ forall v f,
+ Genv.find_funct_ptr ge v = Some f ->
+ Genv.find_funct_ptr tge v = Some (transf_function f).
+Proof (@Genv.find_funct_ptr_transf _ _ transf_function prog).
+
+Lemma symbols_preserved:
+ forall id,
+ Genv.find_symbol tge id = Genv.find_symbol ge id.
+Proof (@Genv.find_symbol_transf _ _ transf_function prog).
+
+(** * Correctness of reachability analysis *)
+
+(** The entry point of the function is reachable. *)
+
+Lemma reachable_entrypoint:
+ forall f, (reachable f)!!(f.(fn_entrypoint)) = true.
+Proof.
+ intros. unfold reachable.
+ caseEq (reachable_aux f).
+ unfold reachable_aux; intros reach A.
+ assert (LBoolean.ge reach!!(f.(fn_entrypoint)) true).
+ eapply DS.fixpoint_entry. eexact A. auto with coqlib.
+ unfold LBoolean.ge in H. tauto.
+ intros. apply PMap.gi.
+Qed.
+
+(** The successors of a reachable basic block are reachable. *)
+
+Lemma reachable_successors:
+ forall f pc pc',
+ f.(LTL.fn_code)!pc <> None ->
+ In pc' (successors f pc) ->
+ (reachable f)!!pc = true ->
+ (reachable f)!!pc' = true.
+Proof.
+ intro f. unfold reachable.
+ caseEq (reachable_aux f).
+ unfold reachable_aux. intro reach; intros.
+ assert (LBoolean.ge reach!!pc' reach!!pc).
+ change (reach!!pc) with ((fun pc r => r) pc (reach!!pc)).
+ eapply DS.fixpoint_solution. eexact H.
+ elim (fn_code_wf f pc); intro. auto. contradiction.
+ auto.
+ elim H3; intro. congruence. auto.
+ intros. apply PMap.gi.
+Qed.
+
+(* If we have a valid LTL transition from [pc] to [pc'], and
+ [pc] is reachable, then [pc'] is reachable. *)
+
+Lemma reachable_correct_1:
+ forall f sp pc rs m pc' rs' m' b,
+ f.(LTL.fn_code)!pc = Some b ->
+ exec_block ge sp b rs m (Cont pc') rs' m' ->
+ (reachable f)!!pc = true ->
+ (reachable f)!!pc' = true.
+Proof.
+ intros. apply reachable_successors with pc; auto.
+ congruence.
+ eapply successors_correct; eauto.
+Qed.
+
+Lemma reachable_correct_2:
+ forall c sp pc rs m out rs' m',
+ exec_blocks ge c sp pc rs m out rs' m' ->
+ forall f pc',
+ c = f.(LTL.fn_code) ->
+ out = Cont pc' ->
+ (reachable f)!!pc = true ->
+ (reachable f)!!pc' = true.
+Proof.
+ induction 1; intros.
+ congruence.
+ eapply reachable_correct_1. rewrite <- H1; eauto.
+ subst out; eauto. auto.
+ auto.
+Qed.
+
+(** * Properties of node enumeration *)
+
+(** An enumeration of CFG nodes is correct if the following conditions hold:
+- All nodes for reachable basic blocks must be in the list.
+- The function entry point is the first element in the list.
+- The list is without repetition (so that no code duplication occurs).
+
+We prove that our [enumerate] function satisfies all three. *)
+
+Lemma enumerate_complete:
+ forall f pc i,
+ f.(LTL.fn_code)!pc = Some i ->
+ (reachable f)!!pc = true ->
+ In pc (enumerate f).
+Proof.
+ intros.
+ assert (forall p,
+ Plt p (Psucc f.(fn_entrypoint)) ->
+ (reachable f)!!p = true ->
+ In p (enumerate f)).
+ unfold enumerate. pattern (Psucc (fn_entrypoint f)).
+ apply positive_Peano_ind.
+ intros. compute in H1. destruct p; discriminate.
+ intros. rewrite positive_rec_succ. elim (Plt_succ_inv _ _ H2); intro.
+ case (reachable f)!!x. apply in_cons. auto. auto.
+ subst x. rewrite H3. apply in_eq.
+ elim (LTL.fn_code_wf f pc); intro. auto. congruence.
+Qed.
+
+Lemma enumerate_head:
+ forall f, exists l, enumerate f = f.(LTL.fn_entrypoint) :: l.
+Proof.
+ intro. unfold enumerate. rewrite positive_rec_succ.
+ rewrite reachable_entrypoint.
+ exists (positive_rec (list node) nil
+ (fun (pc : positive) (nodes : list node) =>
+ if (reachable f) !! pc then pc :: nodes else nodes)
+ (fn_entrypoint f) ).
+ auto.
+Qed.
+
+Lemma enumerate_norepet:
+ forall f, list_norepet (enumerate f).
+Proof.
+ intro.
+ unfold enumerate. pattern (Psucc (fn_entrypoint f)).
+ apply positive_Peano_ind.
+ rewrite positive_rec_base. constructor.
+ intros. rewrite positive_rec_succ.
+ case (reachable f)!!x. auto.
+ constructor.
+ assert (forall y,
+ In y (positive_rec
+ (list node) nil
+ (fun (pc : positive) (nodes : list node) =>
+ if (reachable f) !! pc then pc :: nodes else nodes) x) ->
+ Plt y x).
+ pattern x. apply positive_Peano_ind.
+ rewrite positive_rec_base. intros. elim H0.
+ intros until y. rewrite positive_rec_succ.
+ case (reachable f)!!x0.
+ simpl. intros [A|B].
+ subst x0. apply Plt_succ.
+ apply Plt_trans_succ. auto.
+ intro. apply Plt_trans_succ. auto.
+ red; intro. generalize (H0 x H1). exact (Plt_strict x). auto.
+ auto.
+Qed.
+
+(** * Correctness of the cleanup pass *)
+
+(** If labels are globally unique and the Linear code [c] contains
+ a subsequence [Llabel lbl :: c1], [find_label lbl c] returns [c1].
+*)
+
+Fixpoint unique_labels (c: code) : Prop :=
+ match c with
+ | nil => True
+ | Llabel lbl :: c => ~(In (Llabel lbl) c) /\ unique_labels c
+ | i :: c => unique_labels c
+ end.
+
+Inductive is_tail: code -> code -> Prop :=
+ | is_tail_refl:
+ forall c, is_tail c c
+ | is_tail_cons:
+ forall i c1 c2, is_tail c1 c2 -> is_tail c1 (i :: c2).
+
+Lemma is_tail_in:
+ forall i c1 c2, is_tail (i :: c1) c2 -> In i c2.
+Proof.
+ induction c2; simpl; intros.
+ inversion H.
+ inversion H. tauto. right; auto.
+Qed.
+
+Lemma is_tail_cons_left:
+ forall i c1 c2, is_tail (i :: c1) c2 -> is_tail c1 c2.
+Proof.
+ induction c2; intros; inversion H.
+ constructor. constructor. constructor. auto.
+Qed.
+
+Lemma find_label_unique:
+ forall lbl c1 c2 c3,
+ is_tail (Llabel lbl :: c1) c2 ->
+ unique_labels c2 ->
+ find_label lbl c2 = Some c3 ->
+ c1 = c3.
+Proof.
+ induction c2.
+ simpl; intros; discriminate.
+ intros c3 TAIL UNIQ. simpl.
+ generalize (is_label_correct lbl a). case (is_label lbl a); intro ISLBL.
+ subst a. intro. inversion TAIL. congruence.
+ elim UNIQ; intros. elim H4. apply is_tail_in with c1; auto.
+ inversion TAIL. congruence. apply IHc2. auto.
+ destruct a; simpl in UNIQ; tauto.
+Qed.
+
+(** Correctness of the [starts_with] test. *)
+
+Lemma starts_with_correct:
+ forall lbl c1 c2 c3 f sp ls m,
+ is_tail c1 c2 ->
+ unique_labels c2 ->
+ starts_with lbl c1 = true ->
+ find_label lbl c2 = Some c3 ->
+ exec_instrs tge f sp (cleanup_code c1) ls m
+ (cleanup_code c3) ls m.
+Proof.
+ induction c1.
+ simpl; intros; discriminate.
+ simpl starts_with. destruct a; try (intros; discriminate).
+ intros. apply exec_trans with (cleanup_code c1) ls m.
+ simpl.
+ constructor. constructor.
+ destruct (peq lbl l).
+ subst l. replace c3 with c1. constructor.
+ apply find_label_unique with lbl c2; auto.
+ apply IHc1 with c2; auto. eapply is_tail_cons_left; eauto.
+Qed.
+
+(** Code cleanup preserves the labeling of the code. *)
+
+Lemma find_label_cleanup_code:
+ forall lbl c c',
+ find_label lbl c = Some c' ->
+ find_label lbl (cleanup_code c) = Some (cleanup_code c').
+Proof.
+ induction c.
+ simpl. intros; discriminate.
+ generalize (is_label_correct lbl a).
+ simpl find_label. case (is_label lbl a); intro.
+ subst a. intros. injection H; intros. subst c'.
+ simpl. rewrite peq_true. auto.
+ intros. destruct a; auto.
+ simpl. rewrite peq_false. auto.
+ congruence.
+ case (starts_with l c). auto. simpl. auto.
+Qed.
+
+(** One transition in the original Linear code corresponds to zero
+ or one transitions in the cleaned-up code. *)
+
+Lemma cleanup_code_correct_1:
+ forall f sp c1 ls1 m1 c2 ls2 m2,
+ exec_instr tge f sp c1 ls1 m1 c2 ls2 m2 ->
+ is_tail c1 f.(fn_code) ->
+ unique_labels f.(fn_code) ->
+ exec_instrs tge (cleanup_function f) sp
+ (cleanup_code c1) ls1 m1
+ (cleanup_code c2) ls2 m2.
+Proof.
+ induction 1; simpl; intros;
+ try (apply exec_one; econstructor; eauto; fail).
+ (* goto *)
+ caseEq (starts_with lbl b); intro SW.
+ eapply starts_with_correct; eauto.
+ eapply is_tail_cons_left; eauto.
+ constructor. constructor.
+ unfold cleanup_function; simpl.
+ apply find_label_cleanup_code. auto.
+ (* cond, taken *)
+ constructor. apply exec_Lcond_true. auto.
+ unfold cleanup_function; simpl.
+ apply find_label_cleanup_code. auto.
+ (* cond, not taken *)
+ constructor. apply exec_Lcond_false. auto.
+Qed.
+
+Lemma is_tail_find_label:
+ forall lbl c2 c1,
+ find_label lbl c1 = Some c2 -> is_tail c2 c1.
+Proof.
+ induction c1; simpl.
+ intros; discriminate.
+ case (is_label lbl a). intro. injection H; intro. subst c2.
+ constructor. constructor.
+ intro. constructor. auto.
+Qed.
+
+Lemma is_tail_exec_instr:
+ forall f sp c1 ls1 m1 c2 ls2 m2,
+ exec_instr tge f sp c1 ls1 m1 c2 ls2 m2 ->
+ is_tail c1 f.(fn_code) -> is_tail c2 f.(fn_code).
+Proof.
+ induction 1; intros;
+ try (eapply is_tail_cons_left; eauto; fail).
+ eapply is_tail_find_label; eauto.
+ eapply is_tail_find_label; eauto.
+Qed.
+
+Lemma is_tail_exec_instrs:
+ forall f sp c1 ls1 m1 c2 ls2 m2,
+ exec_instrs tge f sp c1 ls1 m1 c2 ls2 m2 ->
+ is_tail c1 f.(fn_code) -> is_tail c2 f.(fn_code).
+Proof.
+ induction 1; intros.
+ auto.
+ eapply is_tail_exec_instr; eauto.
+ auto.
+Qed.
+
+(** Zero, one or several transitions in the original Linear code correspond
+ to zero, one or several transitions in the cleaned-up code. *)
+
+Lemma cleanup_code_correct_2:
+ forall f sp c1 ls1 m1 c2 ls2 m2,
+ exec_instrs tge f sp c1 ls1 m1 c2 ls2 m2 ->
+ is_tail c1 f.(fn_code) ->
+ unique_labels f.(fn_code) ->
+ exec_instrs tge (cleanup_function f) sp
+ (cleanup_code c1) ls1 m1
+ (cleanup_code c2) ls2 m2.
+Proof.
+ induction 1; simpl; intros.
+ apply exec_refl.
+ eapply cleanup_code_correct_1; eauto.
+ apply exec_trans with (cleanup_code b2) rs2 m2.
+ auto.
+ apply IHexec_instrs2; auto.
+ eapply is_tail_exec_instrs; eauto.
+Qed.
+
+Lemma cleanup_function_correct:
+ forall f ls1 m1 ls2 m2,
+ exec_function tge f ls1 m1 ls2 m2 ->
+ unique_labels f.(fn_code) ->
+ exec_function tge (cleanup_function f) ls1 m1 ls2 m2.
+Proof.
+ induction 1; intro.
+ generalize (cleanup_code_correct_2 _ _ _ _ _ _ _ _ H0 (is_tail_refl _) H1).
+ simpl. intro.
+ econstructor; eauto.
+Qed.
+
+(** * Properties of linearized code *)
+
+(** We now state useful properties of the Linear code generated by
+ the naive LTL-to-Linear translation. *)
+
+(** Connection between [find_label] and linearization. *)
+
+Lemma find_label_lin_block:
+ forall lbl k b,
+ find_label lbl (linearize_block b k) = find_label lbl k.
+Proof.
+ induction b; simpl; auto.
+ case (starts_with n k); reflexivity.
+Qed.
+
+Lemma find_label_lin_rec:
+ forall f enum pc b,
+ In pc enum ->
+ f.(LTL.fn_code)!pc = Some b ->
+ exists k,
+ find_label pc (linearize_body f enum) = Some (linearize_block b k).
+Proof.
+ induction enum; intros.
+ elim H.
+ case (peq a pc); intro.
+ subst a. exists (linearize_body f enum).
+ simpl. rewrite H0. simpl. rewrite peq_true. auto.
+ assert (In pc enum). simpl in H. tauto.
+ elim (IHenum pc b H1 H0). intros k FIND.
+ exists k. simpl. destruct (LTL.fn_code f)!a.
+ simpl. rewrite peq_false. rewrite find_label_lin_block. auto. auto.
+ auto.
+Qed.
+
+Lemma find_label_lin:
+ forall f pc b,
+ f.(LTL.fn_code)!pc = Some b ->
+ (reachable f)!!pc = true ->
+ exists k,
+ find_label pc (fn_code (linearize_function f)) = Some (linearize_block b k).
+Proof.
+ intros. unfold linearize_function; simpl. apply find_label_lin_rec.
+ eapply enumerate_complete; eauto. auto.
+Qed.
+
+(** Unique label property for linearized code. *)
+
+Lemma label_in_lin_block:
+ forall lbl k b,
+ In (Llabel lbl) (linearize_block b k) -> In (Llabel lbl) k.
+Proof.
+ induction b; simpl; try (intuition congruence).
+ case (starts_with n k); simpl; intuition congruence.
+Qed.
+
+Lemma label_in_lin_rec:
+ forall f lbl enum,
+ In (Llabel lbl) (linearize_body f enum) -> In lbl enum.
+Proof.
+ induction enum.
+ simpl; auto.
+ simpl. destruct (LTL.fn_code f)!a.
+ simpl. intros [A|B]. left; congruence.
+ right. apply IHenum. eapply label_in_lin_block; eauto.
+ intro; right; auto.
+Qed.
+
+Lemma unique_labels_lin_block:
+ forall k b,
+ unique_labels k -> unique_labels (linearize_block b k).
+Proof.
+ induction b; simpl; auto.
+ case (starts_with n k); simpl; auto.
+Qed.
+
+Lemma unique_labels_lin_rec:
+ forall f enum,
+ list_norepet enum ->
+ unique_labels (linearize_body f enum).
+Proof.
+ induction enum.
+ simpl; auto.
+ intro. simpl. destruct (LTL.fn_code f)!a.
+ simpl. split. red. intro. inversion H. elim H3.
+ apply label_in_lin_rec with f.
+ apply label_in_lin_block with b. auto.
+ apply unique_labels_lin_block. apply IHenum. inversion H; auto.
+ apply IHenum. inversion H; auto.
+Qed.
+
+Lemma unique_labels_lin_function:
+ forall f,
+ unique_labels (fn_code (linearize_function f)).
+Proof.
+ intros. unfold linearize_function; simpl.
+ apply unique_labels_lin_rec. apply enumerate_norepet.
+Qed.
+
+(** * Correctness of linearization *)
+
+(** The outcome of an LTL [exec_block] or [exec_blocks] execution
+ is valid if it corresponds to a reachable, existing basic block.
+ All outcomes occurring in an LTL program execution are actually
+ valid, but we will prove that along with the main simulation proof. *)
+
+Definition valid_outcome (f: LTL.function) (out: outcome) :=
+ match out with
+ | Cont s =>
+ (reachable f)!!s = true /\ exists b, f.(LTL.fn_code)!s = Some b
+ | Return => True
+ end.
+
+(** Auxiliary lemma used to establish the [valid_outcome] property. *)
+
+Lemma exec_blocks_valid_outcome:
+ forall c sp pc ls1 m1 out ls2 m2,
+ exec_blocks ge c sp pc ls1 m1 out ls2 m2 ->
+ forall f,
+ c = f.(LTL.fn_code) ->
+ (reachable f)!!pc = true ->
+ valid_outcome f out ->
+ valid_outcome f (Cont pc).
+Proof.
+ induction 1.
+ auto.
+ intros. simpl. split. auto. exists b. congruence.
+ intros. apply IHexec_blocks1. auto. auto.
+ apply IHexec_blocks2. auto.
+ eapply reachable_correct_2. eexact H. auto. auto. auto.
+ auto.
+Qed.
+
+(** Correspondence between an LTL outcome and a fragment of generated
+ Linear code. *)
+
+Inductive cont_for_outcome: LTL.function -> outcome -> code -> Prop :=
+ | co_return:
+ forall f k,
+ cont_for_outcome f Return (Lreturn :: k)
+ | co_goto:
+ forall f s k,
+ find_label s (linearize_function f).(fn_code) = Some k ->
+ cont_for_outcome f (Cont s) k.
+
+(** The simulation properties used in the inductive proof.
+ They are parameterized by an LTL execution, and state
+ that a matching execution is possible in the generated Linear code. *)
+
+Definition exec_instr_prop
+ (sp: val) (b1: block) (ls1: locset) (m1: mem)
+ (b2: block) (ls2: locset) (m2: mem) : Prop :=
+ forall f k,
+ exec_instr tge (linearize_function f) sp
+ (linearize_block b1 k) ls1 m1
+ (linearize_block b2 k) ls2 m2.
+
+Definition exec_instrs_prop
+ (sp: val) (b1: block) (ls1: locset) (m1: mem)
+ (b2: block) (ls2: locset) (m2: mem) : Prop :=
+ forall f k,
+ exec_instrs tge (linearize_function f) sp
+ (linearize_block b1 k) ls1 m1
+ (linearize_block b2 k) ls2 m2.
+
+Definition exec_block_prop
+ (sp: val) (b: block) (ls1: locset) (m1: mem)
+ (out: outcome) (ls2: locset) (m2: mem): Prop :=
+ forall f k,
+ valid_outcome f out ->
+ exists k',
+ exec_instrs tge (linearize_function f) sp
+ (linearize_block b k) ls1 m1
+ k' ls2 m2
+ /\ cont_for_outcome f out k'.
+
+Definition exec_blocks_prop
+ (c: LTL.code) (sp: val) (pc: node) (ls1: locset) (m1: mem)
+ (out: outcome) (ls2: locset) (m2: mem): Prop :=
+ forall f k,
+ c = f.(LTL.fn_code) ->
+ (reachable f)!!pc = true ->
+ find_label pc (fn_code (linearize_function f)) = Some k ->
+ valid_outcome f out ->
+ exists k',
+ exec_instrs tge (linearize_function f) sp
+ k ls1 m1
+ k' ls2 m2
+ /\ cont_for_outcome f out k'.
+
+Definition exec_function_prop
+ (f: LTL.function) (ls1: locset) (m1: mem) (ls2: locset) (m2: mem): Prop :=
+ exec_function tge (transf_function f) ls1 m1 ls2 m2.
+
+Scheme exec_instr_ind5 := Minimality for LTL.exec_instr Sort Prop
+ with exec_instrs_ind5 := Minimality for LTL.exec_instrs Sort Prop
+ with exec_block_ind5 := Minimality for LTL.exec_block Sort Prop
+ with exec_blocks_ind5 := Minimality for LTL.exec_blocks Sort Prop
+ with exec_function_ind5 := Minimality for LTL.exec_function Sort Prop.
+
+(** The obligatory proof by structural induction on the LTL evaluation
+ derivation. *)
+
+Lemma transf_function_correct:
+ forall f ls1 m1 ls2 m2,
+ LTL.exec_function ge f ls1 m1 ls2 m2 ->
+ exec_function_prop f ls1 m1 ls2 m2.
+Proof.
+ apply (exec_function_ind5 ge
+ exec_instr_prop
+ exec_instrs_prop
+ exec_block_prop
+ exec_blocks_prop
+ exec_function_prop);
+ intros; red; intros; simpl.
+ (* getstack *)
+ constructor.
+ (* setstack *)
+ constructor.
+ (* op *)
+ constructor. rewrite <- H. apply eval_operation_preserved.
+ exact symbols_preserved.
+ (* load *)
+ apply exec_Lload with a.
+ rewrite <- H. apply eval_addressing_preserved.
+ exact symbols_preserved.
+ auto.
+ (* store *)
+ apply exec_Lstore with a.
+ rewrite <- H. apply eval_addressing_preserved.
+ exact symbols_preserved.
+ auto.
+ (* call *)
+ apply exec_Lcall with (transf_function f).
+ generalize H. destruct ros; simpl.
+ intro; apply functions_translated; auto.
+ rewrite symbols_preserved. destruct (Genv.find_symbol ge i).
+ intro; apply function_ptr_translated; auto. congruence.
+ rewrite H0; reflexivity.
+ apply H2.
+ (* instr_refl *)
+ apply exec_refl.
+ (* instr_one *)
+ apply exec_one. apply H0.
+ (* instr_trans *)
+ apply exec_trans with (linearize_block b2 k) rs2 m2.
+ apply H0. apply H2.
+ (* goto *)
+ elim H1. intros REACH [b2 AT2].
+ generalize (H0 f k). simpl. intro.
+ elim (find_label_lin f s b2 AT2 REACH). intros k2 FIND.
+ exists (linearize_block b2 k2).
+ split.
+ eapply exec_trans. eexact H2. constructor. constructor. auto.
+ constructor. auto.
+ (* cond, true *)
+ elim H2. intros REACH [b2 AT2].
+ elim (find_label_lin f ifso b2 AT2 REACH). intros k2 FIND.
+ exists (linearize_block b2 k2).
+ split.
+ generalize (H0 f k). simpl.
+ case (starts_with ifso k); intro.
+ eapply exec_trans. eexact H3.
+ eapply exec_trans. apply exec_one. apply exec_Lcond_false.
+ change false with (negb true). apply eval_negate_condition. auto.
+ apply exec_one. apply exec_Lgoto. auto.
+ eapply exec_trans. eexact H3.
+ apply exec_one. apply exec_Lcond_true.
+ auto. auto.
+ constructor; auto.
+ (* cond, false *)
+ elim H2. intros REACH [b2 AT2].
+ elim (find_label_lin f ifnot b2 AT2 REACH). intros k2 FIND.
+ exists (linearize_block b2 k2).
+ split.
+ generalize (H0 f k). simpl.
+ case (starts_with ifso k); intro.
+ eapply exec_trans. eexact H3.
+ apply exec_one. apply exec_Lcond_true.
+ change true with (negb false). apply eval_negate_condition. auto.
+ auto.
+ eapply exec_trans. eexact H3.
+ eapply exec_trans. apply exec_one. apply exec_Lcond_false. auto.
+ apply exec_one. apply exec_Lgoto. auto.
+ constructor; auto.
+ (* return *)
+ exists (Lreturn :: k). split.
+ exact (H0 f k). constructor.
+ (* refl blocks *)
+ exists k. split. apply exec_refl. constructor. auto.
+ (* one blocks *)
+ subst c. elim (find_label_lin f pc b H H3). intros k' FIND.
+ assert (k = linearize_block b k'). congruence. subst k.
+ elim (H1 f k' H5). intros k'' [EXEC CFO].
+ exists k''. tauto.
+ (* trans blocks *)
+ assert ((reachable f)!!pc2 = true).
+ eapply reachable_correct_2. eexact H. auto. auto. auto.
+ assert (valid_outcome f (Cont pc2)).
+ eapply exec_blocks_valid_outcome; eauto.
+ generalize (H0 f k H3 H4 H5 H8). intros [k1 [EX1 CFO2]].
+ inversion CFO2.
+ generalize (H2 f k1 H3 H7 H11 H6). intros [k2 [EX2 CFO3]].
+ exists k2. split. eapply exec_trans; eauto. auto.
+ (* function -- TA-DA! *)
+ assert (REACH0: (reachable f)!!(fn_entrypoint f) = true).
+ apply reachable_entrypoint.
+ assert (VO2: valid_outcome f Return). simpl; auto.
+ assert (VO1: valid_outcome f (Cont (fn_entrypoint f))).
+ eapply exec_blocks_valid_outcome; eauto.
+ assert (exists k, fn_code (linearize_function f) = Llabel f.(fn_entrypoint) :: k).
+ unfold linearize_function; simpl.
+ elim (enumerate_head f). intros tl EN. rewrite EN.
+ simpl. elim VO1. intros REACH [b EQ]. rewrite EQ.
+ exists (linearize_block b (linearize_body f tl)). auto.
+ elim H2; intros k EQ.
+ assert (find_label (fn_entrypoint f) (fn_code (linearize_function f)) =
+ Some k).
+ rewrite EQ. simpl. rewrite peq_true. auto.
+ generalize (H1 f k (refl_equal _) REACH0 H3 VO2).
+ intros [k' [EX CO]].
+ inversion CO. subst k'.
+ unfold transf_function. apply cleanup_function_correct.
+ econstructor. eauto. rewrite EQ. eapply exec_trans.
+ apply exec_one. constructor. eauto.
+ apply unique_labels_lin_function.
+Qed.
+
+End LINEARIZATION.
+
+Theorem transf_program_correct:
+ forall (p: LTL.program) (r: val),
+ LTL.exec_program p r ->
+ Linear.exec_program (transf_program p) r.
+Proof.
+ intros p r [b [f [ls [m [FIND1 [FIND2 [SIG [EX RES]]]]]]]].
+ red. exists b; exists (transf_function f); exists ls; exists m.
+ split. change (prog_main (transf_program p)) with (prog_main p).
+ rewrite symbols_preserved; auto.
+ split. apply function_ptr_translated. auto.
+ split. auto.
+ split. apply transf_function_correct.
+ unfold transf_program. rewrite Genv.init_mem_transf. auto.
+ exact RES.
+Qed.
+
diff --git a/backend/Linearizetyping.v b/backend/Linearizetyping.v
new file mode 100644
index 0000000..6cebca8
--- /dev/null
+++ b/backend/Linearizetyping.v
@@ -0,0 +1,340 @@
+(** Type preservation for the Linearize pass *)
+
+Require Import Coqlib.
+Require Import Maps.
+Require Import AST.
+Require Import Op.
+Require Import Locations.
+Require Import LTL.
+Require Import Linear.
+Require Import Linearize.
+Require Import LTLtyping.
+Require Import Lineartyping.
+Require Import Conventions.
+
+(** * Validity of resource bounds *)
+
+(** In this section, we show that the resource bounds computed by
+ [function_bounds] are valid: all references to callee-save registers
+ and stack slots in the code of the function are within those bounds. *)
+
+Section BOUNDS.
+
+Variable f: Linear.function.
+Let b := function_bounds f.
+
+Lemma max_over_list_bound:
+ forall (A: Set) (valu: A -> Z) (l: list A) (x: A),
+ In x l -> valu x <= max_over_list A valu l.
+Proof.
+ intros until x. unfold max_over_list.
+ assert (forall c z,
+ let f := fold_left (fun x y => Zmax x (valu y)) c z in
+ z <= f /\ (In x c -> valu x <= f)).
+ induction c; simpl; intros.
+ split. omega. tauto.
+ elim (IHc (Zmax z (valu a))); intros.
+ split. apply Zle_trans with (Zmax z (valu a)). apply Zmax1. auto.
+ intro H1; elim H1; intro.
+ subst a. apply Zle_trans with (Zmax z (valu x)).
+ apply Zmax2. auto. auto.
+ intro. elim (H l 0); intros. auto.
+Qed.
+
+Lemma max_over_instrs_bound:
+ forall (valu: instruction -> Z) i,
+ In i f.(fn_code) -> valu i <= max_over_instrs f valu.
+Proof.
+ intros. unfold max_over_instrs. apply max_over_list_bound; auto.
+Qed.
+
+Lemma max_over_regs_of_funct_bound:
+ forall (valu: mreg -> Z) i r,
+ In i f.(fn_code) -> In r (regs_of_instr i) ->
+ valu r <= max_over_regs_of_funct f valu.
+Proof.
+ intros. unfold max_over_regs_of_funct.
+ apply Zle_trans with (max_over_regs_of_instr valu i).
+ unfold max_over_regs_of_instr. apply max_over_list_bound. auto.
+ apply max_over_instrs_bound. auto.
+Qed.
+
+Lemma max_over_slots_of_funct_bound:
+ forall (valu: slot -> Z) i s,
+ In i f.(fn_code) -> In s (slots_of_instr i) ->
+ valu s <= max_over_slots_of_funct f valu.
+Proof.
+ intros. unfold max_over_slots_of_funct.
+ apply Zle_trans with (max_over_slots_of_instr valu i).
+ unfold max_over_slots_of_instr. apply max_over_list_bound. auto.
+ apply max_over_instrs_bound. auto.
+Qed.
+
+Lemma int_callee_save_bound:
+ forall i r,
+ In i f.(fn_code) -> In r (regs_of_instr i) ->
+ index_int_callee_save r < bound_int_callee_save b.
+Proof.
+ intros. apply Zlt_le_trans with (int_callee_save r).
+ unfold int_callee_save. omega.
+ unfold b, function_bounds, bound_int_callee_save.
+ eapply max_over_regs_of_funct_bound; eauto.
+Qed.
+
+Lemma float_callee_save_bound:
+ forall i r,
+ In i f.(fn_code) -> In r (regs_of_instr i) ->
+ index_float_callee_save r < bound_float_callee_save b.
+Proof.
+ intros. apply Zlt_le_trans with (float_callee_save r).
+ unfold float_callee_save. omega.
+ unfold b, function_bounds, bound_float_callee_save.
+ eapply max_over_regs_of_funct_bound; eauto.
+Qed.
+
+Lemma int_local_slot_bound:
+ forall i ofs,
+ In i f.(fn_code) -> In (Local ofs Tint) (slots_of_instr i) ->
+ ofs < bound_int_local b.
+Proof.
+ intros. apply Zlt_le_trans with (int_local (Local ofs Tint)).
+ unfold int_local. omega.
+ unfold b, function_bounds, bound_int_local.
+ eapply max_over_slots_of_funct_bound; eauto.
+Qed.
+
+Lemma float_local_slot_bound:
+ forall i ofs,
+ In i f.(fn_code) -> In (Local ofs Tfloat) (slots_of_instr i) ->
+ ofs < bound_float_local b.
+Proof.
+ intros. apply Zlt_le_trans with (float_local (Local ofs Tfloat)).
+ unfold float_local. omega.
+ unfold b, function_bounds, bound_float_local.
+ eapply max_over_slots_of_funct_bound; eauto.
+Qed.
+
+Lemma outgoing_slot_bound:
+ forall i ofs ty,
+ In i f.(fn_code) -> In (Outgoing ofs ty) (slots_of_instr i) ->
+ ofs + typesize ty <= bound_outgoing b.
+Proof.
+ intros. change (ofs + typesize ty) with (outgoing_slot (Outgoing ofs ty)).
+ unfold b, function_bounds, bound_outgoing.
+ apply Zmax_bound_r. apply Zmax_bound_r.
+ eapply max_over_slots_of_funct_bound; eauto.
+Qed.
+
+Lemma size_arguments_bound:
+ forall sig ros,
+ In (Lcall sig ros) f.(fn_code) ->
+ size_arguments sig <= bound_outgoing b.
+Proof.
+ intros. change (size_arguments sig) with (outgoing_space (Lcall sig ros)).
+ unfold b, function_bounds, bound_outgoing.
+ apply Zmax_bound_r. apply Zmax_bound_l.
+ apply max_over_instrs_bound; auto.
+Qed.
+
+End BOUNDS.
+
+(** Consequently, all machine registers or stack slots mentioned by one
+ of the instructions of function [f] are within bounds. *)
+
+Lemma mreg_is_bounded:
+ forall f i r,
+ In i f.(fn_code) -> In r (regs_of_instr i) ->
+ mreg_bounded f r.
+Proof.
+ intros. unfold mreg_bounded.
+ case (mreg_type r).
+ eapply int_callee_save_bound; eauto.
+ eapply float_callee_save_bound; eauto.
+Qed.
+
+Lemma slot_is_bounded:
+ forall f i s,
+ In i (transf_function f).(fn_code) -> In s (slots_of_instr i) ->
+ LTLtyping.slot_bounded f s ->
+ slot_bounded (transf_function f) s.
+Proof.
+ intros. unfold slot_bounded.
+ destruct s.
+ destruct t.
+ split. exact H1. eapply int_local_slot_bound; eauto.
+ split. exact H1. eapply float_local_slot_bound; eauto.
+ unfold linearize_function; simpl. exact H1.
+ split. exact H1. eapply outgoing_slot_bound; eauto.
+Qed.
+
+(** * Conservation property of the cleanup pass *)
+
+(** We show that the cleanup pass only deletes some [Lgoto] instructions:
+ all other instructions present in the output of naive linearization
+ are in the cleaned-up code, and all instructions in the cleaned-up code
+ are in the output of naive linearization. *)
+
+Lemma cleanup_code_conservation:
+ forall i,
+ match i with Lgoto _ => False | _ => True end ->
+ forall c,
+ In i c -> In i (cleanup_code c).
+Proof.
+ induction c; simpl.
+ auto.
+ intro.
+ assert (In i (a :: cleanup_code c)).
+ elim H0; intro. subst i. auto with coqlib.
+ apply in_cons. auto.
+ destruct a; auto.
+ assert (In i (cleanup_code c)).
+ elim H1; intro. subst i. contradiction. auto.
+ case (starts_with l c). auto. apply in_cons; auto.
+Qed.
+
+Lemma cleanup_function_conservation:
+ forall f i,
+ In i (linearize_function f).(fn_code) ->
+ match i with Lgoto _ => False | _ => True end ->
+ In i (transf_function f).(fn_code).
+Proof.
+ intros. unfold transf_function. unfold cleanup_function.
+ simpl. simpl in H0. eapply cleanup_code_conservation; eauto.
+Qed.
+
+Lemma cleanup_code_conservation_2:
+ forall i c, In i (cleanup_code c) -> In i c.
+Proof.
+ induction c; simpl.
+ auto.
+ assert (In i (a :: cleanup_code c) -> a = i \/ In i c).
+ intro. elim H; tauto.
+ destruct a; auto.
+ case (starts_with l c). auto. auto.
+Qed.
+
+Lemma cleanup_function_conservation_2:
+ forall f i,
+ In i (transf_function f).(fn_code) ->
+ In i (linearize_function f).(fn_code).
+Proof.
+ simpl. intros. eapply cleanup_code_conservation_2; eauto.
+Qed.
+
+(** * Type preservation for the linearization pass *)
+
+Lemma linearize_block_incl:
+ forall k b, incl k (linearize_block b k).
+Proof.
+ induction b; simpl; auto with coqlib.
+ case (starts_with n k); auto with coqlib.
+Qed.
+
+Lemma wt_linearize_block:
+ forall f k,
+ (forall i, In i k -> wt_instr (transf_function f) i) ->
+ forall b i,
+ wt_block f b ->
+ incl (linearize_block b k) (linearize_function f).(fn_code) ->
+ In i (linearize_block b k) -> wt_instr (transf_function f) i.
+Proof.
+ induction b; simpl; intros;
+ try (generalize (cleanup_function_conservation
+ _ _ (H1 _ (in_eq _ _)) I));
+ inversion H0;
+ try (elim H2; intro; [subst i|eauto with coqlib]);
+ intros.
+ (* getstack *)
+ constructor. auto. eapply slot_is_bounded; eauto.
+ simpl; auto with coqlib.
+ eapply mreg_is_bounded; eauto.
+ simpl; auto with coqlib.
+ (* setstack *)
+ constructor. auto. auto.
+ eapply slot_is_bounded; eauto.
+ simpl; auto with coqlib.
+ (* move *)
+ subst o; subst l. constructor. auto.
+ eapply mreg_is_bounded; eauto.
+ simpl; auto with coqlib.
+ (* undef *)
+ subst o; subst l. constructor.
+ eapply mreg_is_bounded; eauto.
+ simpl; auto with coqlib.
+ (* other ops *)
+ constructor; auto.
+ eapply mreg_is_bounded; eauto.
+ simpl; auto with coqlib.
+ (* load *)
+ constructor; auto.
+ eapply mreg_is_bounded; eauto.
+ simpl; auto with coqlib.
+ (* store *)
+ constructor; auto.
+ (* call *)
+ constructor; auto.
+ eapply size_arguments_bound; eauto.
+ (* goto *)
+ constructor.
+ (* cond *)
+ destruct (starts_with n k).
+ elim H2; intro.
+ subst i. constructor.
+ rewrite H4. destruct c; reflexivity.
+ elim H8; intro.
+ subst i. constructor.
+ eauto with coqlib.
+ elim H2; intro.
+ subst i. constructor. auto.
+ elim H8; intro.
+ subst i. constructor.
+ eauto with coqlib.
+ (* return *)
+ constructor.
+Qed.
+
+Lemma wt_linearize_body:
+ forall f,
+ LTLtyping.wt_function f ->
+ forall enum i,
+ incl (linearize_body f enum) (linearize_function f).(fn_code) ->
+ In i (linearize_body f enum) -> wt_instr (transf_function f) i.
+Proof.
+ induction enum.
+ simpl; intros; contradiction.
+ intro i. simpl.
+ caseEq (LTL.fn_code f)!a. intros b EQ INCL IN.
+ elim IN; intro. subst i; constructor.
+ apply wt_linearize_block with (linearize_body f enum) b.
+ intros; apply IHenum.
+ apply incl_tran with (linearize_block b (linearize_body f enum)).
+ apply linearize_block_incl.
+ eauto with coqlib.
+ auto.
+ eapply H; eauto.
+ eauto with coqlib. auto.
+ auto.
+Qed.
+
+Lemma wt_transf_function:
+ forall f,
+ LTLtyping.wt_function f ->
+ wt_function (transf_function f).
+Proof.
+ intros; red; intros.
+ apply wt_linearize_body with (enumerate f); auto.
+ simpl. apply incl_refl.
+ apply cleanup_function_conservation_2; auto.
+Qed.
+
+Lemma program_typing_preserved:
+ forall (p: LTL.program),
+ LTLtyping.wt_program p ->
+ Lineartyping.wt_program (transf_program p).
+Proof.
+ intros; red; intros.
+ generalize (transform_program_function transf_function p i f H0).
+ intros [f0 [IN TR]].
+ subst f. apply wt_transf_function; auto.
+ apply (H i f0 IN).
+Qed.
diff --git a/backend/Lineartyping.v b/backend/Lineartyping.v
new file mode 100644
index 0000000..0b13b40
--- /dev/null
+++ b/backend/Lineartyping.v
@@ -0,0 +1,254 @@
+(** Typing rules and computation of stack bounds for Linear. *)
+
+Require Import Coqlib.
+Require Import Maps.
+Require Import AST.
+Require Import Op.
+Require Import RTL.
+Require Import Locations.
+Require Import Linear.
+Require Import Conventions.
+
+(** * Resource bounds for a function *)
+
+(** The [bounds] record capture how many local and outgoing stack slots
+ and callee-save registers are used by a function. *)
+
+Record bounds : Set := mkbounds {
+ bound_int_local: Z;
+ bound_float_local: Z;
+ bound_int_callee_save: Z;
+ bound_float_callee_save: Z;
+ bound_outgoing: Z
+}.
+
+(** The resource bounds for a function are computed by a linear scan
+ of its instructions. *)
+
+Section BOUNDS.
+
+Variable f: function.
+
+Definition regs_of_instr (i: instruction) : list mreg :=
+ match i with
+ | Lgetstack s r => r :: nil
+ | Lsetstack r s => r :: nil
+ | Lop op args res => res :: args
+ | Lload chunk addr args dst => dst :: args
+ | Lstore chunk addr args src => src :: args
+ | Lcall sig (inl fn) => fn :: nil
+ | Lcall sig (inr _) => nil
+ | Llabel lbl => nil
+ | Lgoto lbl => nil
+ | Lcond cond args lbl => args
+ | Lreturn => nil
+ end.
+
+Definition slots_of_instr (i: instruction) : list slot :=
+ match i with
+ | Lgetstack s r => s :: nil
+ | Lsetstack r s => s :: nil
+ | _ => nil
+ end.
+
+Definition max_over_list (A: Set) (valu: A -> Z) (l: list A) : Z :=
+ List.fold_left (fun m l => Zmax m (valu l)) l 0.
+
+Definition max_over_instrs (valu: instruction -> Z) : Z :=
+ max_over_list instruction valu f.(fn_code).
+
+Definition max_over_regs_of_instr (valu: mreg -> Z) (i: instruction) : Z :=
+ max_over_list mreg valu (regs_of_instr i).
+
+Definition max_over_slots_of_instr (valu: slot -> Z) (i: instruction) : Z :=
+ max_over_list slot valu (slots_of_instr i).
+
+Definition max_over_regs_of_funct (valu: mreg -> Z) : Z :=
+ max_over_instrs (max_over_regs_of_instr valu).
+
+Definition max_over_slots_of_funct (valu: slot -> Z) : Z :=
+ max_over_instrs (max_over_slots_of_instr valu).
+
+Definition int_callee_save (r: mreg) := 1 + index_int_callee_save r.
+
+Definition float_callee_save (r: mreg) := 1 + index_float_callee_save r.
+
+Definition int_local (s: slot) :=
+ match s with Local ofs Tint => 1 + ofs | _ => 0 end.
+
+Definition float_local (s: slot) :=
+ match s with Local ofs Tfloat => 1 + ofs | _ => 0 end.
+
+Definition outgoing_slot (s: slot) :=
+ match s with Outgoing ofs ty => ofs + typesize ty | _ => 0 end.
+
+Definition outgoing_space (i: instruction) :=
+ match i with Lcall sig _ => size_arguments sig | _ => 0 end.
+
+Definition function_bounds :=
+ mkbounds
+ (max_over_slots_of_funct int_local)
+ (max_over_slots_of_funct float_local)
+ (max_over_regs_of_funct int_callee_save)
+ (max_over_regs_of_funct float_callee_save)
+ (Zmax 6
+ (Zmax (max_over_instrs outgoing_space)
+ (max_over_slots_of_funct outgoing_slot))).
+
+(** We show that bounds computed by [function_bounds] are all positive
+ or null, and moreiver [bound_outgoing] is greater or equal to 6.
+ These properties are used later to reason about the layout of
+ the activation record. *)
+
+Lemma max_over_list_pos:
+ forall (A: Set) (valu: A -> Z) (l: list A),
+ max_over_list A valu l >= 0.
+Proof.
+ intros until valu. unfold max_over_list.
+ assert (forall l z, fold_left (fun x y => Zmax x (valu y)) l z >= z).
+ induction l; simpl; intros.
+ omega. apply Zge_trans with (Zmax z (valu a)).
+ auto. apply Zle_ge. apply Zmax1. auto.
+Qed.
+
+Lemma max_over_slots_of_funct_pos:
+ forall (valu: slot -> Z), max_over_slots_of_funct valu >= 0.
+Proof.
+ intros. unfold max_over_slots_of_funct.
+ unfold max_over_instrs. apply max_over_list_pos.
+Qed.
+
+Lemma max_over_regs_of_funct_pos:
+ forall (valu: mreg -> Z), max_over_regs_of_funct valu >= 0.
+Proof.
+ intros. unfold max_over_regs_of_funct.
+ unfold max_over_instrs. apply max_over_list_pos.
+Qed.
+
+Lemma bound_int_local_pos:
+ bound_int_local function_bounds >= 0.
+Proof.
+ simpl. apply max_over_slots_of_funct_pos.
+Qed.
+
+Lemma bound_float_local_pos:
+ bound_float_local function_bounds >= 0.
+Proof.
+ simpl. apply max_over_slots_of_funct_pos.
+Qed.
+
+Lemma bound_int_callee_save_pos:
+ bound_int_callee_save function_bounds >= 0.
+Proof.
+ simpl. apply max_over_regs_of_funct_pos.
+Qed.
+
+Lemma bound_float_callee_save_pos:
+ bound_float_callee_save function_bounds >= 0.
+Proof.
+ simpl. apply max_over_regs_of_funct_pos.
+Qed.
+
+Lemma bound_outgoing_pos:
+ bound_outgoing function_bounds >= 6.
+Proof.
+ simpl. apply Zle_ge. apply Zmax_bound_l. omega.
+Qed.
+
+End BOUNDS.
+
+(** * Typing rules for Linear *)
+
+(** The typing rules for Linear are similar to those for LTL: we check
+ that instructions receive the right number of arguments,
+ and that the types of the argument and result registers agree
+ with what the instruction expects. Moreover, we state that references
+ to callee-save registers and to stack slots are within the bounds
+ computed by [function_bounds]. This is true by construction of
+ [function_bounds], and is proved in [Linearizetyping], but it
+ is convenient to integrate this property within the typing judgement.
+*)
+
+Section WT_INSTR.
+
+Variable funct: function.
+Let b := function_bounds funct.
+
+Definition mreg_bounded (r: mreg) :=
+ match mreg_type r with
+ | Tint => index_int_callee_save r < bound_int_callee_save b
+ | Tfloat => index_float_callee_save r < bound_float_callee_save b
+ end.
+
+Definition slot_bounded (s: slot) :=
+ match s with
+ | Local ofs Tint => 0 <= ofs < bound_int_local b
+ | Local ofs Tfloat => 0 <= ofs < bound_float_local b
+ | Outgoing ofs ty => 6 <= ofs /\ ofs + typesize ty <= bound_outgoing b
+ | Incoming ofs ty => 6 <= ofs /\ ofs + typesize ty <= size_arguments funct.(fn_sig)
+ end.
+
+Inductive wt_instr : instruction -> Prop :=
+ | wt_Lgetstack:
+ forall s r,
+ slot_type s = mreg_type r ->
+ slot_bounded s -> mreg_bounded r ->
+ wt_instr (Lgetstack s r)
+ | wt_Lsetstack:
+ forall s r,
+ match s with Incoming _ _ => False | _ => True end ->
+ slot_type s = mreg_type r ->
+ slot_bounded s ->
+ wt_instr (Lsetstack r s)
+ | wt_Lopmove:
+ forall r1 r,
+ mreg_type r1 = mreg_type r ->
+ mreg_bounded r ->
+ wt_instr (Lop Omove (r1 :: nil) r)
+ | wt_Lopundef:
+ forall r,
+ mreg_bounded r ->
+ wt_instr (Lop Oundef nil r)
+ | wt_Lop:
+ forall op args res,
+ op <> Omove -> op <> Oundef ->
+ (List.map mreg_type args, mreg_type res) = type_of_operation op ->
+ mreg_bounded res ->
+ wt_instr (Lop op args res)
+ | wt_Lload:
+ forall chunk addr args dst,
+ List.map mreg_type args = type_of_addressing addr ->
+ mreg_type dst = type_of_chunk chunk ->
+ mreg_bounded dst ->
+ wt_instr (Lload chunk addr args dst)
+ | wt_Lstore:
+ forall chunk addr args src,
+ List.map mreg_type args = type_of_addressing addr ->
+ mreg_type src = type_of_chunk chunk ->
+ wt_instr (Lstore chunk addr args src)
+ | wt_Lcall:
+ forall sig ros,
+ size_arguments sig <= bound_outgoing b ->
+ match ros with inl r => mreg_type r = Tint | _ => True end ->
+ wt_instr (Lcall sig ros)
+ | wt_Llabel:
+ forall lbl,
+ wt_instr (Llabel lbl)
+ | wt_Lgoto:
+ forall lbl,
+ wt_instr (Lgoto lbl)
+ | wt_Lcond:
+ forall cond args lbl,
+ List.map mreg_type args = type_of_condition cond ->
+ wt_instr (Lcond cond args lbl)
+ | wt_Lreturn:
+ wt_instr (Lreturn).
+
+End WT_INSTR.
+
+Definition wt_function (f: function) : Prop :=
+ forall instr, In instr f.(fn_code) -> wt_instr f instr.
+
+Definition wt_program (p: program) : Prop :=
+ forall i f, In (i, f) (prog_funct p) -> wt_function f.
+
diff --git a/backend/Locations.v b/backend/Locations.v
new file mode 100644
index 0000000..c97855e
--- /dev/null
+++ b/backend/Locations.v
@@ -0,0 +1,476 @@
+(** Locations are a refinement of RTL pseudo-registers, used to reflect
+ the results of register allocation (file [Allocation]). *)
+
+Require Import Coqlib.
+Require Import Maps.
+Require Import AST.
+Require Import Values.
+
+(** * Representation of locations *)
+
+(** A location is either a processor register or (an abstract designation of)
+ a slot in the activation record of the current function. *)
+
+(** ** Machine registers *)
+
+(** The following type defines the machine registers that can be referenced
+ as locations. These include:
+- Integer registers that can be allocated to RTL pseudo-registers ([Rxx]).
+- Floating-point registers that can be allocated to RTL pseudo-registers
+ ([Fxx]).
+- Three integer registers, not allocatable, reserved as temporaries for
+ spilling and reloading ([ITx]).
+- Three float registers, not allocatable, reserved as temporaries for
+ spilling and reloading ([FTx]).
+
+ The type [mreg] does not include special-purpose machine registers
+ such as the stack pointer and the condition codes. *)
+
+Inductive mreg: Set :=
+ (** Allocatable integer regs *)
+ | R3: mreg | R4: mreg | R5: mreg | R6: mreg
+ | R7: mreg | R8: mreg | R9: mreg | R10: mreg
+ | R13: mreg | R14: mreg | R15: mreg | R16: mreg
+ | R17: mreg | R18: mreg | R19: mreg | R20: mreg
+ | R21: mreg | R22: mreg | R23: mreg | R24: mreg
+ | R25: mreg | R26: mreg | R27: mreg | R28: mreg
+ | R29: mreg | R30: mreg | R31: mreg
+ (** Allocatable float regs *)
+ | F1: mreg | F2: mreg | F3: mreg | F4: mreg
+ | F5: mreg | F6: mreg | F7: mreg | F8: mreg
+ | F9: mreg | F10: mreg | F14: mreg | F15: mreg
+ | F16: mreg | F17: mreg | F18: mreg | F19: mreg
+ | F20: mreg | F21: mreg | F22: mreg | F23: mreg
+ | F24: mreg | F25: mreg | F26: mreg | F27: mreg
+ | F28: mreg | F29: mreg | F30: mreg | F31: mreg
+ (** Integer temporaries *)
+ | IT1: mreg (* R11 *) | IT2: mreg (* R12 *) | IT3: mreg (* R0 *)
+ (** Float temporaries *)
+ | FT1: mreg (* F11 *) | FT2: mreg (* F12 *) | FT3: mreg (* F0 *).
+
+Lemma mreg_eq: forall (r1 r2: mreg), {r1 = r2} + {r1 <> r2}.
+Proof. decide equality. Qed.
+
+Definition mreg_type (r: mreg): typ :=
+ match r with
+ | R3 => Tint | R4 => Tint | R5 => Tint | R6 => Tint
+ | R7 => Tint | R8 => Tint | R9 => Tint | R10 => Tint
+ | R13 => Tint | R14 => Tint | R15 => Tint | R16 => Tint
+ | R17 => Tint | R18 => Tint | R19 => Tint | R20 => Tint
+ | R21 => Tint | R22 => Tint | R23 => Tint | R24 => Tint
+ | R25 => Tint | R26 => Tint | R27 => Tint | R28 => Tint
+ | R29 => Tint | R30 => Tint | R31 => Tint
+ | F1 => Tfloat | F2 => Tfloat | F3 => Tfloat | F4 => Tfloat
+ | F5 => Tfloat | F6 => Tfloat | F7 => Tfloat | F8 => Tfloat
+ | F9 => Tfloat | F10 => Tfloat | F14 => Tfloat | F15 => Tfloat
+ | F16 => Tfloat | F17 => Tfloat | F18 => Tfloat | F19 => Tfloat
+ | F20 => Tfloat | F21 => Tfloat | F22 => Tfloat | F23 => Tfloat
+ | F24 => Tfloat | F25 => Tfloat | F26 => Tfloat | F27 => Tfloat
+ | F28 => Tfloat | F29 => Tfloat | F30 => Tfloat | F31 => Tfloat
+ | IT1 => Tint | IT2 => Tint | IT3 => Tint
+ | FT1 => Tfloat | FT2 => Tfloat | FT3 => Tfloat
+ end.
+
+Open Scope positive_scope.
+
+Module IndexedMreg <: INDEXED_TYPE.
+ Definition t := mreg.
+ Definition eq := mreg_eq.
+ Definition index (r: mreg): positive :=
+ match r with
+ | R3 => 1 | R4 => 2 | R5 => 3 | R6 => 4
+ | R7 => 5 | R8 => 6 | R9 => 7 | R10 => 8
+ | R13 => 9 | R14 => 10 | R15 => 11 | R16 => 12
+ | R17 => 13 | R18 => 14 | R19 => 15 | R20 => 16
+ | R21 => 17 | R22 => 18 | R23 => 19 | R24 => 20
+ | R25 => 21 | R26 => 22 | R27 => 23 | R28 => 24
+ | R29 => 25 | R30 => 26 | R31 => 27
+ | F1 => 28 | F2 => 29 | F3 => 30 | F4 => 31
+ | F5 => 32 | F6 => 33 | F7 => 34 | F8 => 35
+ | F9 => 36 | F10 => 37 | F14 => 38 | F15 => 39
+ | F16 => 40 | F17 => 41 | F18 => 42 | F19 => 43
+ | F20 => 44 | F21 => 45 | F22 => 46 | F23 => 47
+ | F24 => 48 | F25 => 49 | F26 => 50 | F27 => 51
+ | F28 => 52 | F29 => 53 | F30 => 54 | F31 => 55
+ | IT1 => 56 | IT2 => 57 | IT3 => 58
+ | FT1 => 59 | FT2 => 60 | FT3 => 61
+ end.
+ Lemma index_inj:
+ forall r1 r2, index r1 = index r2 -> r1 = r2.
+ Proof.
+ destruct r1; destruct r2; simpl; intro; discriminate || reflexivity.
+ Qed.
+End IndexedMreg.
+
+(** ** Slots in activation records *)
+
+(** A slot in an activation record is designated abstractly by a kind,
+ a type and an integer offset. Three kinds are considered:
+- [Local]: these are the slots used by register allocation for
+ pseudo-registers that cannot be assigned a hardware register.
+- [Incoming]: used to store the parameters of the current function
+ that cannot reside in hardware registers, as determined by the
+ calling conventions.
+- [Outgoing]: used to store arguments to called functions that
+ cannot reside in hardware registers, as determined by the
+ calling conventions. *)
+
+Inductive slot: Set :=
+ | Local: Z -> typ -> slot
+ | Incoming: Z -> typ -> slot
+ | Outgoing: Z -> typ -> slot.
+
+(** Morally, the [Incoming] slots of a function are the [Outgoing]
+slots of its caller function.
+
+The type of a slot indicates how it will be accessed later once mapped to
+actual memory locations inside a memory-allocated activation record:
+as 32-bit integers/pointers (type [Tint]) or as 64-bit floats (type [Tfloat]).
+
+The offset of a slot, combined with its type and its kind, identifies
+uniquely the slot and will determine later where it resides within the
+memory-allocated activation record. Offsets are always positive.
+
+Conceptually, slots will be mapped to four non-overlapping memory areas
+within activation records:
+- The area for [Local] slots of type [Tint]. The offset is interpreted
+ as a 4-byte word index.
+- The area for [Local] slots of type [Tfloat]. The offset is interpreted
+ as a 8-byte word index. Thus, two [Local] slots always refer either
+ to the same memory chunk (if they have the same types and offsets)
+ or to non-overlapping memory chunks (if the types or offsets differ).
+- The area for [Outgoing] slots. The offset is a 4-byte word index.
+ Unlike [Local] slots, the PowerPC calling conventions demand that
+ integer and float [Outgoing] slots reside in the same memory area.
+ Therefore, [Outgoing Tint 0] and [Outgoing Tfloat 0] refer to
+ overlapping memory chunks and cannot be used simultaneously: one will
+ lose its value when the other is assigned. We will reflect this
+ overlapping behaviour in the environments mapping locations to values
+ defined later in this file.
+- The area for [Incoming] slots. Same structure as the [Outgoing] slots.
+*)
+
+Definition slot_type (s: slot): typ :=
+ match s with
+ | Local ofs ty => ty
+ | Incoming ofs ty => ty
+ | Outgoing ofs ty => ty
+ end.
+
+Lemma slot_eq: forall (p q: slot), {p = q} + {p <> q}.
+Proof.
+ assert (typ_eq: forall (t1 t2: typ), {t1 = t2} + {t1 <> t2}).
+ decide equality.
+ generalize zeq; intro.
+ decide equality.
+Qed.
+
+Open Scope Z_scope.
+
+Definition typesize (ty: typ) : Z :=
+ match ty with Tint => 1 | Tfloat => 2 end.
+
+Lemma typesize_pos:
+ forall (ty: typ), typesize ty > 0.
+Proof.
+ destruct ty; compute; auto.
+Qed.
+
+(** ** Locations *)
+
+(** Locations are just the disjoint union of machine registers and
+ activation record slots. *)
+
+Inductive loc : Set :=
+ | R: mreg -> loc
+ | S: slot -> loc.
+
+Module Loc.
+
+ Definition type (l: loc) : typ :=
+ match l with
+ | R r => mreg_type r
+ | S s => slot_type s
+ end.
+
+ Lemma eq: forall (p q: loc), {p = q} + {p <> q}.
+ Proof.
+ decide equality. apply mreg_eq. apply slot_eq.
+ Qed.
+
+(** As mentioned previously, two locations can be different (in the sense
+ of the [<>] mathematical disequality), yet denote
+ overlapping memory chunks within the activation record.
+ Given two locations, three cases are possible:
+- They are equal (in the sense of the [=] equality)
+- They are different and non-overlapping.
+- They are different but overlapping.
+
+ The second case (different and non-overlapping) is characterized
+ by the following [Loc.diff] predicate.
+*)
+ Definition diff (l1 l2: loc) : Prop :=
+ match l1, l2 with
+ | R r1, R r2 => r1 <> r2
+ | S (Local d1 t1), S (Local d2 t2) =>
+ d1 <> d2 \/ t1 <> t2
+ | S (Incoming d1 t1), S (Incoming d2 t2) =>
+ d1 + typesize t1 <= d2 \/ d2 + typesize t2 <= d1
+ | S (Outgoing d1 t1), S (Outgoing d2 t2) =>
+ d1 + typesize t1 <= d2 \/ d2 + typesize t2 <= d1
+ | _, _ =>
+ True
+ end.
+
+ Lemma same_not_diff:
+ forall l, ~(diff l l).
+ Proof.
+ destruct l; unfold diff; try tauto.
+ destruct s.
+ tauto.
+ generalize (typesize_pos t); omega.
+ generalize (typesize_pos t); omega.
+ Qed.
+
+ Lemma diff_not_eq:
+ forall l1 l2, diff l1 l2 -> l1 <> l2.
+ Proof.
+ unfold not; intros. subst l2. elim (same_not_diff l1 H).
+ Qed.
+
+ Lemma diff_sym:
+ forall l1 l2, diff l1 l2 -> diff l2 l1.
+ Proof.
+ destruct l1; destruct l2; unfold diff; auto.
+ destruct s; auto.
+ destruct s; destruct s0; intuition auto.
+ Qed.
+
+(** [Loc.overlap l1 l2] returns [false] if [l1] and [l2] are different and
+ non-overlapping, and [true] otherwise: either [l1 = l2] or they partially
+ overlap. *)
+
+ Definition overlap_aux (t1: typ) (d1 d2: Z) : bool :=
+ if zeq d1 d2 then true else
+ match t1 with
+ | Tint => false
+ | Tfloat => if zeq (d1 + 1) d2 then true else false
+ end.
+
+ Definition overlap (l1 l2: loc) : bool :=
+ match l1, l2 with
+ | S (Incoming d1 t1), S (Incoming d2 t2) =>
+ overlap_aux t1 d1 d2 || overlap_aux t2 d2 d1
+ | S (Outgoing d1 t1), S (Outgoing d2 t2) =>
+ overlap_aux t1 d1 d2 || overlap_aux t2 d2 d1
+ | _, _ => false
+ end.
+
+ Lemma overlap_aux_true_1:
+ forall d1 t1 d2 t2,
+ overlap_aux t1 d1 d2 = true ->
+ ~(d1 + typesize t1 <= d2 \/ d2 + typesize t2 <= d1).
+ Proof.
+ intros until t2.
+ generalize (typesize_pos t1); intro.
+ generalize (typesize_pos t2); intro.
+ unfold overlap_aux.
+ case (zeq d1 d2).
+ intros. omega.
+ case t1. intros; discriminate.
+ case (zeq (d1 + 1) d2); intros.
+ subst d2. simpl. omega.
+ discriminate.
+ Qed.
+
+ Lemma overlap_aux_true_2:
+ forall d1 t1 d2 t2,
+ overlap_aux t2 d2 d1 = true ->
+ ~(d1 + typesize t1 <= d2 \/ d2 + typesize t2 <= d1).
+ Proof.
+ intros. generalize (overlap_aux_true_1 d2 t2 d1 t1 H).
+ tauto.
+ Qed.
+
+ Lemma overlap_not_diff:
+ forall l1 l2, overlap l1 l2 = true -> ~(diff l1 l2).
+ Proof.
+ unfold overlap, diff; destruct l1; destruct l2; intros; try discriminate.
+ destruct s; discriminate.
+ destruct s; destruct s0; try discriminate.
+ elim (orb_true_elim _ _ H); intro.
+ apply overlap_aux_true_1; auto.
+ apply overlap_aux_true_2; auto.
+ elim (orb_true_elim _ _ H); intro.
+ apply overlap_aux_true_1; auto.
+ apply overlap_aux_true_2; auto.
+ Qed.
+
+ Lemma overlap_aux_false_1:
+ forall t1 d1 t2 d2,
+ overlap_aux t1 d1 d2 || overlap_aux t2 d2 d1 = false ->
+ d1 + typesize t1 <= d2 \/ d2 + typesize t2 <= d1.
+ Proof.
+ intros until d2. intro OV.
+ generalize (orb_false_elim _ _ OV). intro OV'. elim OV'.
+ unfold overlap_aux.
+ case (zeq d1 d2); intro.
+ intros; discriminate.
+ case (zeq d2 d1); intro.
+ intros; discriminate.
+ case t1; case t2; simpl.
+ intros; omega.
+ case (zeq (d2 + 1) d1); intros. discriminate. omega.
+ case (zeq (d1 + 1) d2); intros. discriminate. omega.
+ case (zeq (d1 + 1) d2); intros H1 H2. discriminate.
+ case (zeq (d2 + 1) d1); intros. discriminate. omega.
+ Qed.
+
+ Lemma non_overlap_diff:
+ forall l1 l2, l1 <> l2 -> overlap l1 l2 = false -> diff l1 l2.
+ Proof.
+ intros. unfold diff; destruct l1; destruct l2.
+ congruence.
+ auto.
+ destruct s; auto.
+ destruct s; destruct s0; auto.
+ case (zeq z z0); intro.
+ compare t t0; intro.
+ congruence. tauto. tauto.
+ apply overlap_aux_false_1. exact H0.
+ apply overlap_aux_false_1. exact H0.
+ Qed.
+
+(** We now redefine some standard notions over lists, using the [Loc.diff]
+ predicate instead of standard disequality [<>].
+
+ [Loc.notin l ll] holds if the location [l] is different from all locations
+ in the list [ll]. *)
+
+ Fixpoint notin (l: loc) (ll: list loc) {struct ll} : Prop :=
+ match ll with
+ | nil => True
+ | l1 :: ls => diff l l1 /\ notin l ls
+ end.
+
+ Lemma notin_not_in:
+ forall l ll, notin l ll -> ~(In l ll).
+ Proof.
+ unfold not; induction ll; simpl; intros.
+ auto.
+ elim H; intros. elim H0; intro.
+ subst l. exact (same_not_diff a H1).
+ auto.
+ Qed.
+
+(** [Loc.disjoint l1 l2] is true if the locations in list [l1]
+ are different from all locations in list [l2]. *)
+
+ Definition disjoint (l1 l2: list loc) : Prop :=
+ forall x1 x2, In x1 l1 -> In x2 l2 -> diff x1 x2.
+
+ Lemma disjoint_cons_left:
+ forall a l1 l2,
+ disjoint (a :: l1) l2 -> disjoint l1 l2.
+ Proof.
+ unfold disjoint; intros. auto with coqlib.
+ Qed.
+ Lemma disjoint_cons_right:
+ forall a l1 l2,
+ disjoint l1 (a :: l2) -> disjoint l1 l2.
+ Proof.
+ unfold disjoint; intros. auto with coqlib.
+ Qed.
+
+ Lemma disjoint_sym:
+ forall l1 l2, disjoint l1 l2 -> disjoint l2 l1.
+ Proof.
+ unfold disjoint; intros. apply diff_sym; auto.
+ Qed.
+
+ Lemma in_notin_diff:
+ forall l1 l2 ll, notin l1 ll -> In l2 ll -> diff l1 l2.
+ Proof.
+ induction ll; simpl; intros.
+ elim H0.
+ elim H0; intro. subst a. tauto. apply IHll; tauto.
+ Qed.
+
+ Lemma notin_disjoint:
+ forall l1 l2,
+ (forall x, In x l1 -> notin x l2) -> disjoint l1 l2.
+ Proof.
+ unfold disjoint; induction l1; intros.
+ elim H0.
+ elim H0; intro.
+ subst x1. eapply in_notin_diff. apply H. auto with coqlib. auto.
+ eapply IHl1; eauto. intros. apply H. auto with coqlib.
+ Qed.
+
+ Lemma disjoint_notin:
+ forall l1 l2 x, disjoint l1 l2 -> In x l1 -> notin x l2.
+ Proof.
+ unfold disjoint; induction l2; simpl; intros.
+ auto.
+ split. apply H. auto. tauto.
+ apply IHl2. intros. apply H. auto. tauto. auto.
+ Qed.
+
+(** [Loc.norepet ll] holds if the locations in list [ll] are pairwise
+ different. *)
+
+ Inductive norepet : list loc -> Prop :=
+ | norepet_nil:
+ norepet nil
+ | norepet_cons:
+ forall hd tl, notin hd tl -> norepet tl -> norepet (hd :: tl).
+
+ Definition no_overlap (l1 l2 : list loc) :=
+ forall r, In r l1 -> forall s, In s l2 -> r = s \/ Loc.diff r s.
+
+End Loc.
+
+(** * Mappings from locations to values *)
+
+(** The [Locmap] module defines mappings from locations to values,
+ used as evaluation environments for the semantics of the [LTL]
+ and [Linear] intermediate languages. *)
+
+Set Implicit Arguments.
+
+Module Locmap.
+
+ Definition t := loc -> val.
+
+ Definition init (x: val) : t := fun (_: loc) => x.
+
+ Definition get (l: loc) (m: t) : val := m l.
+
+ (** The [set] operation over location mappings reflects the overlapping
+ properties of locations: changing the value of a location [l]
+ invalidates (sets to [Vundef]) the locations that partially overlap
+ with [l]. In other terms, the result of [set l v m]
+ maps location [l] to value [v], locations that overlap with [l]
+ to [Vundef], and locations that are different (and non-overlapping)
+ from [l] to their previous values in [m]. This is apparent in the
+ ``good variables'' properties [Locmap.gss] and [Locmap.gso]. *)
+
+ Definition set (l: loc) (v: val) (m: t) : t :=
+ fun (p: loc) =>
+ if Loc.eq l p then v else if Loc.overlap l p then Vundef else m p.
+
+ Lemma gss: forall l v m, (set l v m) l = v.
+ Proof.
+ intros. unfold set. case (Loc.eq l l); tauto.
+ Qed.
+
+ Lemma gso: forall l v m p, Loc.diff l p -> (set l v m) p = m p.
+ Proof.
+ intros. unfold set. case (Loc.eq l p); intro.
+ subst p. elim (Loc.same_not_diff _ H).
+ caseEq (Loc.overlap l p); intro.
+ elim (Loc.overlap_not_diff _ _ H0 H).
+ auto.
+ Qed.
+
+End Locmap.
diff --git a/backend/Mach.v b/backend/Mach.v
new file mode 100644
index 0000000..f953798
--- /dev/null
+++ b/backend/Mach.v
@@ -0,0 +1,295 @@
+(** The Mach intermediate language: abstract syntax and semantics.
+
+ Mach is the last intermediate language before generation of assembly
+ code.
+*)
+
+Require Import Coqlib.
+Require Import Maps.
+Require Import AST.
+Require Import Integers.
+Require Import Values.
+Require Import Mem.
+Require Import Globalenvs.
+Require Import Op.
+Require Import Locations.
+
+(** * Abstract syntax *)
+
+(** Like Linear, the Mach language is organized as lists of instructions
+ operating over machine registers, with default fall-through behaviour
+ and explicit labels and branch instructions.
+
+ The main difference with Linear lies in the instructions used to
+ access the activation record. Mach has three such instructions:
+ [Mgetstack] and [Msetstack] to read and write within the activation
+ record for the current function, at a given word offset and with a
+ given type; and [Mgetparam], to read within the activation record of
+ the caller.
+
+ These instructions implement a more concrete view of the activation
+ record than the the [Bgetstack] and [Bsetstack] instructions of
+ Linear: actual offsets are used instead of abstract stack slots; the
+ distinction between the caller's frame and the callee's frame is
+ made explicit. *)
+
+Definition label := positive.
+
+Inductive instruction: Set :=
+ | Mgetstack: int -> typ -> mreg -> instruction
+ | Msetstack: mreg -> int -> typ -> instruction
+ | Mgetparam: int -> typ -> mreg -> instruction
+ | Mop: operation -> list mreg -> mreg -> instruction
+ | Mload: memory_chunk -> addressing -> list mreg -> mreg -> instruction
+ | Mstore: memory_chunk -> addressing -> list mreg -> mreg -> instruction
+ | Mcall: signature -> mreg + ident -> instruction
+ | Mlabel: label -> instruction
+ | Mgoto: label -> instruction
+ | Mcond: condition -> list mreg -> label -> instruction
+ | Mreturn: instruction.
+
+Definition code := list instruction.
+
+Record function: Set := mkfunction
+ { fn_sig: signature;
+ fn_code: code;
+ fn_stacksize: Z;
+ fn_framesize: Z }.
+
+Definition program := AST.program function.
+
+Definition genv := Genv.t function.
+
+(** * Dynamic semantics *)
+
+Module RegEq.
+ Definition t := mreg.
+ Definition eq := mreg_eq.
+End RegEq.
+
+Module Regmap := EMap(RegEq).
+
+Definition regset := Regmap.t val.
+
+Notation "a ## b" := (List.map a b) (at level 1).
+Notation "a # b <- c" := (Regmap.set b c a) (at level 1, b at next level).
+
+Definition is_label (lbl: label) (instr: instruction) : bool :=
+ match instr with
+ | Mlabel lbl' => if peq lbl lbl' then true else false
+ | _ => false
+ end.
+
+Lemma is_label_correct:
+ forall lbl instr,
+ if is_label lbl instr then instr = Mlabel lbl else instr <> Mlabel lbl.
+Proof.
+ intros. destruct instr; simpl; try discriminate.
+ case (peq lbl l); intro; congruence.
+Qed.
+
+Fixpoint find_label (lbl: label) (c: code) {struct c} : option code :=
+ match c with
+ | nil => None
+ | i1 :: il => if is_label lbl i1 then Some il else find_label lbl il
+ end.
+
+(** The three stack-related Mach instructions are interpreted as
+ memory accesses relative to the stack pointer. More precisely:
+- [Mgetstack ofs ty r] is a memory load at offset [ofs * 4] relative
+ to the stack pointer.
+- [Msetstack r ofs ty] is a memory store at offset [ofs * 4] relative
+ to the stack pointer.
+- [Mgetparam ofs ty r] is a memory load at offset [ofs * 4]
+ relative to the pointer found at offset 0 from the stack pointer.
+ The semantics maintain a linked structure of activation records,
+ with the current record containing a pointer to the record of the
+ caller function at offset 0. *)
+
+Definition chunk_of_type (ty: typ) :=
+ match ty with Tint => Mint32 | Tfloat => Mfloat64 end.
+
+Definition load_stack (m: mem) (sp: val) (ty: typ) (ofs: int) :=
+ Mem.loadv (chunk_of_type ty) m (Val.add sp (Vint ofs)).
+
+Definition store_stack (m: mem) (sp: val) (ty: typ) (ofs: int) (v: val) :=
+ Mem.storev (chunk_of_type ty) m (Val.add sp (Vint ofs)) v.
+
+Definition align_16_top (lo hi: Z) :=
+ Zmax 0 (((hi - lo + 15) / 16) * 16 + lo).
+
+Section RELSEM.
+
+Variable ge: genv.
+
+Definition find_function (ros: mreg + ident) (rs: regset) : option function :=
+ match ros with
+ | inl r => Genv.find_funct ge (rs r)
+ | inr symb =>
+ match Genv.find_symbol ge symb with
+ | None => None
+ | Some b => Genv.find_funct_ptr ge b
+ end
+ end.
+
+(** [exec_instr ge f sp c rs m c' rs' m'] reflects the execution of
+ the first instruction in the current instruction sequence [c].
+ [c'] is the current instruction sequence after this execution.
+ [rs] and [rs'] map machine registers to values, respectively
+ before and after instruction execution. [m] and [m'] are the
+ memory states before and after. *)
+
+Inductive exec_instr:
+ function -> val ->
+ code -> regset -> mem ->
+ code -> regset -> mem -> Prop :=
+ | exec_Mlabel:
+ forall f sp lbl c rs m,
+ exec_instr f sp
+ (Mlabel lbl :: c) rs m
+ c rs m
+ | exec_Mgetstack:
+ forall f sp ofs ty dst c rs m v,
+ load_stack m sp ty ofs = Some v ->
+ exec_instr f sp
+ (Mgetstack ofs ty dst :: c) rs m
+ c (rs#dst <- v) m
+ | exec_Msetstack:
+ forall f sp src ofs ty c rs m m',
+ store_stack m sp ty ofs (rs src) = Some m' ->
+ exec_instr f sp
+ (Msetstack src ofs ty :: c) rs m
+ c rs m'
+ | exec_Mgetparam:
+ forall f sp parent ofs ty dst c rs m v,
+ load_stack m sp Tint (Int.repr 0) = Some parent ->
+ load_stack m parent ty ofs = Some v ->
+ exec_instr f sp
+ (Mgetparam ofs ty dst :: c) rs m
+ c (rs#dst <- v) m
+ | exec_Mop:
+ forall f sp op args res c rs m v,
+ eval_operation ge sp op rs##args = Some v ->
+ exec_instr f sp
+ (Mop op args res :: c) rs m
+ c (rs#res <- v) m
+ | exec_Mload:
+ forall f sp chunk addr args dst c rs m a v,
+ eval_addressing ge sp addr rs##args = Some a ->
+ Mem.loadv chunk m a = Some v ->
+ exec_instr f sp
+ (Mload chunk addr args dst :: c) rs m
+ c (rs#dst <- v) m
+ | exec_Mstore:
+ forall f sp chunk addr args src c rs m m' a,
+ eval_addressing ge sp addr rs##args = Some a ->
+ Mem.storev chunk m a (rs src) = Some m' ->
+ exec_instr f sp
+ (Mstore chunk addr args src :: c) rs m
+ c rs m'
+ | exec_Mcall:
+ forall f sp sig ros c rs m f' rs' m',
+ find_function ros rs = Some f' ->
+ exec_function f' sp rs m rs' m' ->
+ exec_instr f sp
+ (Mcall sig ros :: c) rs m
+ c rs' m'
+ | exec_Mgoto:
+ forall f sp lbl c rs m c',
+ find_label lbl f.(fn_code) = Some c' ->
+ exec_instr f sp
+ (Mgoto lbl :: c) rs m
+ c' rs m
+ | exec_Mcond_true:
+ forall f sp cond args lbl c rs m c',
+ eval_condition cond rs##args = Some true ->
+ find_label lbl f.(fn_code) = Some c' ->
+ exec_instr f sp
+ (Mcond cond args lbl :: c) rs m
+ c' rs m
+ | exec_Mcond_false:
+ forall f sp cond args lbl c rs m,
+ eval_condition cond rs##args = Some false ->
+ exec_instr f sp
+ (Mcond cond args lbl :: c) rs m
+ c rs m
+
+with exec_instrs:
+ function -> val ->
+ code -> regset -> mem ->
+ code -> regset -> mem -> Prop :=
+ | exec_refl:
+ forall f sp c rs m,
+ exec_instrs f sp c rs m c rs m
+ | exec_one:
+ forall f sp c rs m c' rs' m',
+ exec_instr f sp c rs m c' rs' m' ->
+ exec_instrs f sp c rs m c' rs' m'
+ | exec_trans:
+ forall f sp c1 rs1 m1 c2 rs2 m2 c3 rs3 m3,
+ exec_instrs f sp c1 rs1 m1 c2 rs2 m2 ->
+ exec_instrs f sp c2 rs2 m2 c3 rs3 m3 ->
+ exec_instrs f sp c1 rs1 m1 c3 rs3 m3
+
+(** In addition to reserving the word at offset 0 in the activation
+ record for maintaining the linking of activation records,
+ we need to reserve the word at offset 4 to store the return address
+ into the caller. However, the return address (a pointer within
+ the code of the caller) is not precisely known at this point:
+ it will be determined only after the final translation to PowerPC
+ assembly code. Therefore, we simply reserve that word in the strongest
+ sense of the word ``reserve'': we make sure that whatever pointer
+ is stored there at function entry keeps the same value until the
+ final return instruction, and that the return value and final memory
+ state are the same regardless of the return address.
+ This is captured in the evaluation rule [exec_function]
+ that quantifies universally over all possible values of the return
+ address, and pass this value to [exec_function_body]. In other
+ terms, the inference rule [exec_function] has an infinity of
+ premises, one for each possible return address. Such infinitely
+ branching inference rules are uncommon in operational semantics,
+ but cause no difficulties in Coq. *)
+
+with exec_function_body:
+ function -> val -> val ->
+ regset -> mem -> regset -> mem -> Prop :=
+ | exec_funct_body:
+ forall f parent ra rs m rs' m1 m2 m3 m4 stk c,
+ Mem.alloc m (- f.(fn_framesize))
+ (align_16_top (- f.(fn_framesize)) f.(fn_stacksize))
+ = (m1, stk) ->
+ let sp := Vptr stk (Int.repr (-f.(fn_framesize))) in
+ store_stack m1 sp Tint (Int.repr 0) parent = Some m2 ->
+ store_stack m2 sp Tint (Int.repr 4) ra = Some m3 ->
+ exec_instrs f sp
+ f.(fn_code) rs m3
+ (Mreturn :: c) rs' m4 ->
+ load_stack m4 sp Tint (Int.repr 0) = Some parent ->
+ load_stack m4 sp Tint (Int.repr 4) = Some ra ->
+ exec_function_body f parent ra rs m rs' (Mem.free m4 stk)
+
+with exec_function:
+ function -> val -> regset -> mem -> regset -> mem -> Prop :=
+ | exec_funct:
+ forall f parent rs m rs' m',
+ (forall ra,
+ Val.has_type ra Tint ->
+ exec_function_body f parent ra rs m rs' m') ->
+ exec_function f parent rs m rs' m'.
+
+Scheme exec_instr_ind4 := Minimality for exec_instr Sort Prop
+ with exec_instrs_ind4 := Minimality for exec_instrs Sort Prop
+ with exec_function_body_ind4 := Minimality for exec_function_body Sort Prop
+ with exec_function_ind4 := Minimality for exec_function Sort Prop.
+
+End RELSEM.
+
+Definition exec_program (p: program) (r: val) : Prop :=
+ let ge := Genv.globalenv p in
+ let m0 := Genv.init_mem p in
+ exists b, exists f, exists rs, exists m,
+ Genv.find_symbol ge p.(prog_main) = Some b /\
+ Genv.find_funct_ptr ge b = Some f /\
+ exec_function ge f (Vptr Mem.nullptr Int.zero) (Regmap.init Vundef) m0 rs m /\
+ rs R3 = r.
+
diff --git a/backend/Machabstr.v b/backend/Machabstr.v
new file mode 100644
index 0000000..25458dc
--- /dev/null
+++ b/backend/Machabstr.v
@@ -0,0 +1,371 @@
+(** Alternate semantics for the Mach intermediate language. *)
+
+Require Import Coqlib.
+Require Import Maps.
+Require Import AST.
+Require Import Mem.
+Require Import Integers.
+Require Import Values.
+Require Import Mem.
+Require Import Globalenvs.
+Require Import Op.
+Require Import Locations.
+Require Conventions.
+Require Import Mach.
+
+(** This file defines an alternate semantics for the Mach intermediate
+ language, which differ from the standard semantics given in file [Mach]
+ as follows: the stack access instructions [Mgetstack], [Msetstack]
+ and [Mgetparam] are interpreted not as memory accesses, but as
+ accesses in a frame environment, not resident in memory. The evaluation
+ relations take two such frame environments as parameters and results,
+ one for the current function and one for its caller.
+
+ Not having the frame data in memory facilitates the proof of
+ the [Stacking] pass, which shows that the generated code executes
+ correctly with the alternate semantics. In file [Machabstr2mach],
+ we show an implication from this alternate semantics to
+ the standard semantics, thus establishing that the [Stacking] pass
+ generates code that behaves correctly against the standard [Mach]
+ semantics as well. *)
+
+(** * Structure of abstract stack frames *)
+
+(** A frame has the same structure as the contents of a memory block. *)
+
+Definition frame := block_contents.
+
+Definition empty_frame := empty_block 0 0.
+
+Definition mem_type (ty: typ) :=
+ match ty with Tint => Size32 | Tfloat => Size64 end.
+
+(** [get_slot fr ty ofs v] holds if the frame [fr] contains value [v]
+ with type [ty] at word offset [ofs]. *)
+
+Inductive get_slot: frame -> typ -> Z -> val -> Prop :=
+ | get_slot_intro:
+ forall fr ty ofs v,
+ 0 <= ofs ->
+ fr.(low) + ofs + 4 * typesize ty <= 0 ->
+ v = load_contents (mem_type ty) fr.(contents) (fr.(low) + ofs) ->
+ get_slot fr ty ofs v.
+
+Remark size_mem_type:
+ forall ty, size_mem (mem_type ty) = 4 * typesize ty.
+Proof.
+ destruct ty; reflexivity.
+Qed.
+
+Remark set_slot_undef_outside:
+ forall fr ty ofs v,
+ fr.(high) = 0 ->
+ 0 <= ofs ->
+ fr.(low) + ofs + 4 * typesize ty <= 0 ->
+ (forall x, x < fr.(low) \/ x >= fr.(high) -> fr.(contents) x = Undef) ->
+ (forall x, x < fr.(low) \/ x >= fr.(high) ->
+ store_contents (mem_type ty) fr.(contents) (fr.(low) + ofs) v x = Undef).
+Proof.
+ intros. apply store_contents_undef_outside with fr.(low) fr.(high).
+ rewrite <- size_mem_type in H1. omega. assumption. assumption.
+Qed.
+
+(** [set_slot fr ty ofs v fr'] holds if frame [fr'] is obtained from
+ frame [fr] by storing value [v] with type [ty] at word offset [ofs]. *)
+
+Inductive set_slot: frame -> typ -> Z -> val -> frame -> Prop :=
+ | set_slot_intro:
+ forall fr ty ofs v
+ (A: fr.(high) = 0)
+ (B: 0 <= ofs)
+ (C: fr.(low) + ofs + 4 * typesize ty <= 0),
+ set_slot fr ty ofs v
+ (mkblock fr.(low) fr.(high)
+ (store_contents (mem_type ty) fr.(contents) (fr.(low) + ofs) v)
+ (set_slot_undef_outside fr ty ofs v A B C fr.(undef_outside))).
+
+Definition init_frame (f: function) :=
+ empty_block (- f.(fn_framesize)) 0.
+
+Section RELSEM.
+
+Variable ge: genv.
+
+(** Execution of one instruction has the form
+ [exec_instr ge f sp parent c rs fr m c' rs' fr' m'],
+ where [parent] is the caller's frame (read-only)
+ and [fr], [fr'] are the current frame, before and after execution
+ of one instruction. The other parameters are as in the Mach semantics. *)
+
+Inductive exec_instr:
+ function -> val -> frame ->
+ code -> regset -> frame -> mem ->
+ code -> regset -> frame -> mem -> Prop :=
+ | exec_Mlabel:
+ forall f sp parent lbl c rs fr m,
+ exec_instr f sp parent
+ (Mlabel lbl :: c) rs fr m
+ c rs fr m
+ | exec_Mgetstack:
+ forall f sp parent ofs ty dst c rs fr m v,
+ get_slot fr ty (Int.signed ofs) v ->
+ exec_instr f sp parent
+ (Mgetstack ofs ty dst :: c) rs fr m
+ c (rs#dst <- v) fr m
+ | exec_Msetstack:
+ forall f sp parent src ofs ty c rs fr m fr',
+ set_slot fr ty (Int.signed ofs) (rs src) fr' ->
+ exec_instr f sp parent
+ (Msetstack src ofs ty :: c) rs fr m
+ c rs fr' m
+ | exec_Mgetparam:
+ forall f sp parent ofs ty dst c rs fr m v,
+ get_slot parent ty (Int.signed ofs) v ->
+ exec_instr f sp parent
+ (Mgetparam ofs ty dst :: c) rs fr m
+ c (rs#dst <- v) fr m
+ | exec_Mop:
+ forall f sp parent op args res c rs fr m v,
+ eval_operation ge sp op rs##args = Some v ->
+ exec_instr f sp parent
+ (Mop op args res :: c) rs fr m
+ c (rs#res <- v) fr m
+ | exec_Mload:
+ forall f sp parent chunk addr args dst c rs fr m a v,
+ eval_addressing ge sp addr rs##args = Some a ->
+ Mem.loadv chunk m a = Some v ->
+ exec_instr f sp parent
+ (Mload chunk addr args dst :: c) rs fr m
+ c (rs#dst <- v) fr m
+ | exec_Mstore:
+ forall f sp parent chunk addr args src c rs fr m m' a,
+ eval_addressing ge sp addr rs##args = Some a ->
+ Mem.storev chunk m a (rs src) = Some m' ->
+ exec_instr f sp parent
+ (Mstore chunk addr args src :: c) rs fr m
+ c rs fr m'
+ | exec_Mcall:
+ forall f sp parent sig ros c rs fr m f' rs' m',
+ find_function ge ros rs = Some f' ->
+ exec_function f' fr rs m rs' m' ->
+ exec_instr f sp parent
+ (Mcall sig ros :: c) rs fr m
+ c rs' fr m'
+ | exec_Mgoto:
+ forall f sp parent lbl c rs fr m c',
+ find_label lbl f.(fn_code) = Some c' ->
+ exec_instr f sp parent
+ (Mgoto lbl :: c) rs fr m
+ c' rs fr m
+ | exec_Mcond_true:
+ forall f sp parent cond args lbl c rs fr m c',
+ eval_condition cond rs##args = Some true ->
+ find_label lbl f.(fn_code) = Some c' ->
+ exec_instr f sp parent
+ (Mcond cond args lbl :: c) rs fr m
+ c' rs fr m
+ | exec_Mcond_false:
+ forall f sp parent cond args lbl c rs fr m,
+ eval_condition cond rs##args = Some false ->
+ exec_instr f sp parent
+ (Mcond cond args lbl :: c) rs fr m
+ c rs fr m
+
+with exec_instrs:
+ function -> val -> frame ->
+ code -> regset -> frame -> mem ->
+ code -> regset -> frame -> mem -> Prop :=
+ | exec_refl:
+ forall f sp parent c rs fr m,
+ exec_instrs f sp parent c rs fr m c rs fr m
+ | exec_one:
+ forall f sp parent c rs fr m c' rs' fr' m',
+ exec_instr f sp parent c rs fr m c' rs' fr' m' ->
+ exec_instrs f sp parent c rs fr m c' rs' fr' m'
+ | exec_trans:
+ forall f sp parent c1 rs1 fr1 m1 c2 rs2 fr2 m2 c3 rs3 fr3 m3,
+ exec_instrs f sp parent c1 rs1 fr1 m1 c2 rs2 fr2 m2 ->
+ exec_instrs f sp parent c2 rs2 fr2 m2 c3 rs3 fr3 m3 ->
+ exec_instrs f sp parent c1 rs1 fr1 m1 c3 rs3 fr3 m3
+
+with exec_function_body:
+ function -> frame -> val -> val ->
+ regset -> mem -> regset -> mem -> Prop :=
+ | exec_funct_body:
+ forall f parent link ra rs m rs' m1 m2 stk fr1 fr2 fr3 c,
+ Mem.alloc m 0 f.(fn_stacksize) = (m1, stk) ->
+ set_slot (init_frame f) Tint 0 link fr1 ->
+ set_slot fr1 Tint 4 ra fr2 ->
+ exec_instrs f (Vptr stk (Int.repr (-f.(fn_framesize)))) parent
+ f.(fn_code) rs fr2 m1
+ (Mreturn :: c) rs' fr3 m2 ->
+ exec_function_body f parent link ra rs m rs' (Mem.free m2 stk)
+
+with exec_function:
+ function -> frame -> regset -> mem -> regset -> mem -> Prop :=
+ | exec_funct:
+ forall f parent rs m rs' m',
+ (forall link ra,
+ Val.has_type link Tint ->
+ Val.has_type ra Tint ->
+ exec_function_body f parent link ra rs m rs' m') ->
+ exec_function f parent rs m rs' m'.
+
+Scheme exec_instr_ind4 := Minimality for exec_instr Sort Prop
+ with exec_instrs_ind4 := Minimality for exec_instrs Sort Prop
+ with exec_function_body_ind4 := Minimality for exec_function_body Sort Prop
+ with exec_function_ind4 := Minimality for exec_function Sort Prop.
+
+(** Ugly mutual induction principle over evaluation derivations.
+ Coq is not able to generate it directly, even though it is
+ an immediate consequence of the 4 induction principles generated
+ by the [Scheme] command above. *)
+
+Lemma exec_mutual_induction:
+ forall (P
+ P0 : function ->
+ val ->
+ frame ->
+ code ->
+ regset ->
+ frame -> mem -> code -> regset -> frame -> mem -> Prop)
+ (P1 : function ->
+ frame -> val -> val -> regset -> mem -> regset -> mem -> Prop)
+ (P2 : function -> frame -> regset -> mem -> regset -> mem -> Prop),
+ (forall (f : function) (sp : val) (parent : frame) (lbl : label)
+ (c : list instruction) (rs : regset) (fr : frame) (m : mem),
+ P f sp parent (Mlabel lbl :: c) rs fr m c rs fr m) ->
+ (forall (f : function) (sp : val) (parent : frame) (ofs : int)
+ (ty : typ) (dst : mreg) (c : list instruction) (rs : regset)
+ (fr : frame) (m : mem) (v : val),
+ get_slot fr ty (Int.signed ofs) v ->
+ P f sp parent (Mgetstack ofs ty dst :: c) rs fr m c rs # dst <- v fr
+ m) ->
+ (forall (f : function) (sp : val) (parent : frame) (src : mreg)
+ (ofs : int) (ty : typ) (c : list instruction) (rs : mreg -> val)
+ (fr : frame) (m : mem) (fr' : frame),
+ set_slot fr ty (Int.signed ofs) (rs src) fr' ->
+ P f sp parent (Msetstack src ofs ty :: c) rs fr m c rs fr' m) ->
+ (forall (f : function) (sp : val) (parent : frame) (ofs : int)
+ (ty : typ) (dst : mreg) (c : list instruction) (rs : regset)
+ (fr : frame) (m : mem) (v : val),
+ get_slot parent ty (Int.signed ofs) v ->
+ P f sp parent (Mgetparam ofs ty dst :: c) rs fr m c rs # dst <- v fr
+ m) ->
+ (forall (f : function) (sp : val) (parent : frame) (op : operation)
+ (args : list mreg) (res : mreg) (c : list instruction)
+ (rs : mreg -> val) (fr : frame) (m : mem) (v : val),
+ eval_operation ge sp op rs ## args = Some v ->
+ P f sp parent (Mop op args res :: c) rs fr m c rs # res <- v fr m) ->
+ (forall (f : function) (sp : val) (parent : frame)
+ (chunk : memory_chunk) (addr : addressing) (args : list mreg)
+ (dst : mreg) (c : list instruction) (rs : mreg -> val) (fr : frame)
+ (m : mem) (a v : val),
+ eval_addressing ge sp addr rs ## args = Some a ->
+ loadv chunk m a = Some v ->
+ P f sp parent (Mload chunk addr args dst :: c) rs fr m c
+ rs # dst <- v fr m) ->
+ (forall (f : function) (sp : val) (parent : frame)
+ (chunk : memory_chunk) (addr : addressing) (args : list mreg)
+ (src : mreg) (c : list instruction) (rs : mreg -> val) (fr : frame)
+ (m m' : mem) (a : val),
+ eval_addressing ge sp addr rs ## args = Some a ->
+ storev chunk m a (rs src) = Some m' ->
+ P f sp parent (Mstore chunk addr args src :: c) rs fr m c rs fr m') ->
+ (forall (f : function) (sp : val) (parent : frame) (sig : signature)
+ (ros : mreg + ident) (c : list instruction) (rs : regset)
+ (fr : frame) (m : mem) (f' : function) (rs' : regset) (m' : mem),
+ find_function ge ros rs = Some f' ->
+ exec_function f' fr rs m rs' m' ->
+ P2 f' fr rs m rs' m' ->
+ P f sp parent (Mcall sig ros :: c) rs fr m c rs' fr m') ->
+ (forall (f : function) (sp : val) (parent : frame) (lbl : label)
+ (c : list instruction) (rs : regset) (fr : frame) (m : mem)
+ (c' : code),
+ find_label lbl (fn_code f) = Some c' ->
+ P f sp parent (Mgoto lbl :: c) rs fr m c' rs fr m) ->
+ (forall (f : function) (sp : val) (parent : frame)
+ (cond : condition) (args : list mreg) (lbl : label)
+ (c : list instruction) (rs : mreg -> val) (fr : frame) (m : mem)
+ (c' : code),
+ eval_condition cond rs ## args = Some true ->
+ find_label lbl (fn_code f) = Some c' ->
+ P f sp parent (Mcond cond args lbl :: c) rs fr m c' rs fr m) ->
+ (forall (f : function) (sp : val) (parent : frame)
+ (cond : condition) (args : list mreg) (lbl : label)
+ (c : list instruction) (rs : mreg -> val) (fr : frame) (m : mem),
+ eval_condition cond rs ## args = Some false ->
+ P f sp parent (Mcond cond args lbl :: c) rs fr m c rs fr m) ->
+ (forall (f : function) (sp : val) (parent : frame) (c : code)
+ (rs : regset) (fr : frame) (m : mem),
+ P0 f sp parent c rs fr m c rs fr m) ->
+ (forall (f : function) (sp : val) (parent : frame) (c : code)
+ (rs : regset) (fr : frame) (m : mem) (c' : code) (rs' : regset)
+ (fr' : frame) (m' : mem),
+ exec_instr f sp parent c rs fr m c' rs' fr' m' ->
+ P f sp parent c rs fr m c' rs' fr' m' ->
+ P0 f sp parent c rs fr m c' rs' fr' m') ->
+ (forall (f : function) (sp : val) (parent : frame) (c1 : code)
+ (rs1 : regset) (fr1 : frame) (m1 : mem) (c2 : code) (rs2 : regset)
+ (fr2 : frame) (m2 : mem) (c3 : code) (rs3 : regset) (fr3 : frame)
+ (m3 : mem),
+ exec_instrs f sp parent c1 rs1 fr1 m1 c2 rs2 fr2 m2 ->
+ P0 f sp parent c1 rs1 fr1 m1 c2 rs2 fr2 m2 ->
+ exec_instrs f sp parent c2 rs2 fr2 m2 c3 rs3 fr3 m3 ->
+ P0 f sp parent c2 rs2 fr2 m2 c3 rs3 fr3 m3 ->
+ P0 f sp parent c1 rs1 fr1 m1 c3 rs3 fr3 m3) ->
+ (forall (f : function) (parent : frame) (link ra : val) (rs : regset)
+ (m : mem) (rs' : regset) (m1 m2 : mem) (stk : block)
+ (fr1 fr2 fr3 : frame) (c : list instruction),
+ alloc m 0 (fn_stacksize f) = (m1, stk) ->
+ set_slot (init_frame f) Tint 0 link fr1 ->
+ set_slot fr1 Tint 4 ra fr2 ->
+ exec_instrs f (Vptr stk (Int.repr (-f.(fn_framesize)))) parent (fn_code f) rs fr2 m1 (Mreturn :: c) rs' fr3
+ m2 ->
+ P0 f (Vptr stk (Int.repr (-f.(fn_framesize)))) parent (fn_code f) rs fr2 m1 (Mreturn :: c) rs' fr3 m2 ->
+ P1 f parent link ra rs m rs' (free m2 stk)) ->
+ (forall (f : function) (parent : frame) (rs : regset) (m : mem)
+ (rs' : regset) (m' : mem),
+ (forall link ra : val,
+ Val.has_type link Tint ->
+ Val.has_type ra Tint ->
+ exec_function_body f parent link ra rs m rs' m') ->
+ (forall link ra : val,
+ Val.has_type link Tint ->
+ Val.has_type ra Tint -> P1 f parent link ra rs m rs' m') ->
+ P2 f parent rs m rs' m') ->
+ (forall (f15 : function) (sp : val) (f16 : frame) (c : code)
+ (r : regset) (f17 : frame) (m : mem) (c0 : code) (r0 : regset)
+ (f18 : frame) (m0 : mem),
+ exec_instr f15 sp f16 c r f17 m c0 r0 f18 m0 ->
+ P f15 sp f16 c r f17 m c0 r0 f18 m0)
+ /\ (forall (f15 : function) (sp : val) (f16 : frame) (c : code)
+ (r : regset) (f17 : frame) (m : mem) (c0 : code) (r0 : regset)
+ (f18 : frame) (m0 : mem),
+ exec_instrs f15 sp f16 c r f17 m c0 r0 f18 m0 ->
+ P0 f15 sp f16 c r f17 m c0 r0 f18 m0)
+ /\ (forall (f15 : function) (f16 : frame) (v1 v2 : val) (r : regset) (m : mem)
+ (r0 : regset) (m0 : mem),
+ exec_function_body f15 f16 v1 v2 r m r0 m0 -> P1 f15 f16 v1 v2 r m r0 m0)
+ /\ (forall (f15 : function) (f16 : frame) (r : regset) (m : mem)
+ (r0 : regset) (m0 : mem),
+ exec_function f15 f16 r m r0 m0 -> P2 f15 f16 r m r0 m0).
+Proof.
+ intros. split. apply (exec_instr_ind4 P P0 P1 P2); assumption.
+ split. apply (exec_instrs_ind4 P P0 P1 P2); assumption.
+ split. apply (exec_function_body_ind4 P P0 P1 P2); assumption.
+ apply (exec_function_ind4 P P0 P1 P2); assumption.
+Qed.
+
+End RELSEM.
+
+Definition exec_program (p: program) (r: val) : Prop :=
+ let ge := Genv.globalenv p in
+ let m0 := Genv.init_mem p in
+ exists b, exists f, exists rs, exists m,
+ Genv.find_symbol ge p.(prog_main) = Some b /\
+ Genv.find_funct_ptr ge b = Some f /\
+ f.(fn_sig) = mksignature nil (Some Tint) /\
+ exec_function ge f empty_frame (Regmap.init Vundef) m0 rs m /\
+ rs (Conventions.loc_result f.(fn_sig)) = r.
+
diff --git a/backend/Machabstr2mach.v b/backend/Machabstr2mach.v
new file mode 100644
index 0000000..8549cef
--- /dev/null
+++ b/backend/Machabstr2mach.v
@@ -0,0 +1,1120 @@
+(** Simulation between the two semantics for the Mach language. *)
+
+Require Import Coqlib.
+Require Import Maps.
+Require Import AST.
+Require Import Integers.
+Require Import Values.
+Require Import Mem.
+Require Import Globalenvs.
+Require Import Op.
+Require Import Locations.
+Require Import Machabstr.
+Require Import Mach.
+Require Import Machtyping.
+Require Import Stackingproof.
+
+(** Two semantics were defined for the Mach intermediate language:
+- The concrete semantics (file [Mach]), where the whole activation
+ record resides in memory and the [Mgetstack], [Msetstack] and
+ [Mgetparent] are interpreted as [sp]-relative memory accesses.
+- The abstract semantics (file [Machabstr]), where the activation
+ record is split in two parts: the Cminor stack data, resident in
+ memory, and the frame information, residing not in memory but
+ in additional evaluation environments.
+
+ In this file, we show a simulation result between these
+ semantics: if a program executes to some result [r] in the
+ abstract semantics, it also executes to the same result in
+ the concrete semantics. This result bridges the correctness proof
+ in file [Stackingproof] (which uses the abstract Mach semantics
+ as output) and that in file [PPCgenproof] (which uses the concrete
+ Mach semantics as input).
+*)
+
+Remark align_16_top_ge:
+ forall lo hi,
+ hi <= align_16_top lo hi.
+Proof.
+ intros. unfold align_16_top. apply Zmax_bound_r.
+ assert (forall x, x <= (x + 15) / 16 * 16).
+ intro. assert (16 > 0). omega.
+ generalize (Z_div_mod_eq (x + 15) 16 H). intro.
+ replace ((x + 15) / 16 * 16) with ((x + 15) - (x + 15) mod 16).
+ generalize (Z_mod_lt (x + 15) 16 H). omega.
+ rewrite Zmult_comm. omega.
+ generalize (H (hi - lo)). omega.
+Qed.
+
+Remark align_16_top_pos:
+ forall lo hi,
+ 0 <= align_16_top lo hi.
+Proof.
+ intros. unfold align_16_top. apply Zmax_bound_l. omega.
+Qed.
+
+Remark size_mem_pos:
+ forall sz, size_mem sz > 0.
+Proof.
+ destruct sz; simpl; compute; auto.
+Qed.
+
+Remark size_type_chunk:
+ forall ty, size_chunk (chunk_of_type ty) = 4 * typesize ty.
+Proof.
+ destruct ty; reflexivity.
+Qed.
+
+Remark mem_chunk_type:
+ forall ty, mem_chunk (chunk_of_type ty) = mem_type ty.
+Proof.
+ destruct ty; reflexivity.
+Qed.
+
+Remark size_mem_type:
+ forall ty, size_mem (mem_type ty) = 4 * typesize ty.
+Proof.
+ destruct ty; reflexivity.
+Qed.
+
+(** * Agreement between frames and memory-resident activation records *)
+
+(** ** Agreement for one frame *)
+
+(** The core idea of the simulation proof is that for all active
+ functions, the memory-allocated activation record, in the concrete
+ semantics, contains the same data as the Cminor stack block
+ (at positive offsets) and the frame of the function (at negative
+ offsets) in the abstract semantics.
+
+ This intuition (activation record = Cminor stack data + frame)
+ is formalized by the following predicate [frame_match fr sp base mm ms].
+ [fr] is a frame and [mm] the current memory state in the abstract
+ semantics. [ms] is the current memory state in the concrete semantics.
+ The stack pointer is [Vptr sp base] in both semantics. *)
+
+Inductive frame_match: frame -> block -> int -> mem -> mem -> Prop :=
+ frame_match_intro:
+ forall fr sp base mm ms,
+ valid_block ms sp ->
+ low_bound mm sp = 0 ->
+ low_bound ms sp = fr.(low) ->
+ high_bound ms sp = align_16_top fr.(low) (high_bound mm sp) ->
+ fr.(low) <= 0 ->
+ Int.min_signed <= fr.(low) ->
+ base = Int.repr fr.(low) ->
+ block_contents_agree fr.(low) 0 fr (ms.(blocks) sp) ->
+ block_contents_agree 0 (high_bound ms sp)
+ (mm.(blocks) sp) (ms.(blocks) sp) ->
+ frame_match fr sp base mm ms.
+
+(** [frame_match], while presented as a relation for convenience,
+ is actually a function: it fully determines the contents of the
+ activation record [ms.(blocks) sp]. *)
+
+Lemma frame_match_exten:
+ forall fr sp base mm ms1 ms2,
+ frame_match fr sp base mm ms1 ->
+ frame_match fr sp base mm ms2 ->
+ ms1.(blocks) sp = ms2.(blocks) sp.
+Proof.
+ intros. inversion H. inversion H0.
+ unfold low_bound, high_bound in *.
+ apply block_contents_exten.
+ congruence.
+ congruence.
+ hnf; intros.
+ elim H29. rewrite H3; rewrite H4; intros.
+ case (zlt ofs 0); intro.
+ assert (low fr <= ofs < 0). tauto.
+ transitivity (contents fr ofs).
+ symmetry. apply H8; auto.
+ apply H22; auto.
+ transitivity (contents (blocks mm sp) ofs).
+ symmetry. apply H9. rewrite H4. omega.
+ apply H23. rewrite H18. omega.
+Qed.
+
+(** The following two innocuous-looking lemmas are the key results
+ showing that [sp]-relative memory accesses in the concrete
+ semantics behave like the direct frame accesses in the abstract
+ semantics. First, a value [v] that has type [ty] is preserved
+ when stored in memory with chunk [chunk_of_type ty], then read
+ back with the same chunk. The typing hypothesis is crucial here:
+ for instance, a float value reads back as [Vundef] when stored
+ and load with chunk [Mint32]. *)
+
+Lemma load_result_ty:
+ forall v ty,
+ Val.has_type v ty -> Val.load_result (chunk_of_type ty) v = v.
+Proof.
+ destruct v; destruct ty; simpl; contradiction || reflexivity.
+Qed.
+
+(** Second, computations of [sp]-relative offsets using machine
+ arithmetic (as done in the concrete semantics) never overflows
+ and behaves identically to the offset computations using exact
+ arithmetic (as done in the abstract semantics). *)
+
+Lemma int_add_no_overflow:
+ forall x y,
+ Int.min_signed <= Int.signed x + Int.signed y <= Int.max_signed ->
+ Int.signed (Int.add x y) = Int.signed x + Int.signed y.
+Proof.
+ intros. rewrite Int.add_signed. rewrite Int.signed_repr. auto. auto.
+Qed.
+
+(** Given matching frames and activation records, loading from the
+ activation record (in the concrete semantics) behaves identically
+ to reading the corresponding slot from the frame
+ (in the abstract semantics). *)
+
+Lemma frame_match_get_slot:
+ forall fr sp base mm ms ty ofs v,
+ frame_match fr sp base mm ms ->
+ get_slot fr ty (Int.signed ofs) v ->
+ Val.has_type v ty ->
+ load_stack ms (Vptr sp base) ty ofs = Some v.
+Proof.
+ intros. inversion H. inversion H0. subst v.
+ unfold load_stack, Val.add, loadv.
+ assert (Int.signed base = low fr).
+ rewrite H8. apply Int.signed_repr.
+ split. auto. apply Zle_trans with 0. auto. compute; congruence.
+ assert (Int.signed (Int.add base ofs) = low fr + Int.signed ofs).
+ rewrite int_add_no_overflow. rewrite H18. auto.
+ rewrite H18. split. omega. apply Zle_trans with 0.
+ generalize (typesize_pos ty). omega. compute. congruence.
+ rewrite H23.
+ assert (BND1: low_bound ms sp <= low fr + Int.signed ofs).
+ omega.
+ assert (BND2: (low fr + Int.signed ofs) + size_chunk (chunk_of_type ty) <= high_bound ms sp).
+ rewrite size_type_chunk. apply Zle_trans with 0.
+ assumption. rewrite H5. apply align_16_top_pos.
+ generalize (load_in_bounds (chunk_of_type ty) ms sp (low fr + Int.signed ofs) H2 BND1 BND2).
+ intros [v' LOAD].
+ generalize (load_inv _ _ _ _ _ LOAD).
+ intros [A [B [C D]]].
+ rewrite LOAD. rewrite <- D.
+ decEq. rewrite mem_chunk_type.
+ rewrite <- size_mem_type in H17.
+ assert (low fr <= low fr + Int.signed ofs). omega.
+ generalize (load_contentmap_agree _ _ _ _ _ _ H9 H24 H17).
+ intro. rewrite H25.
+ apply load_result_ty.
+ assumption.
+Qed.
+
+(** Loads from [sp], corresponding to accesses to Cminor stack data
+ in the abstract semantics, give the same results in the concrete
+ semantics. This is because the offset from [sp] must be positive or
+ null for the original load to succeed, and because the part
+ of the activation record at positive offsets matches the Cminor
+ stack data block. *)
+
+Lemma frame_match_load:
+ forall fr sp base mm ms chunk ofs v,
+ frame_match fr sp base mm ms ->
+ load chunk mm sp ofs = Some v ->
+ load chunk ms sp ofs = Some v.
+Proof.
+ intros. inversion H.
+ generalize (load_inv _ _ _ _ _ H0). intros [A [B [C D]]].
+ change (low (blocks mm sp)) with (low_bound mm sp) in B.
+ change (high (blocks mm sp)) with (high_bound mm sp) in C.
+ unfold load. rewrite zlt_true; auto.
+ rewrite in_bounds_holds.
+ rewrite <- D. decEq. decEq. eapply load_contentmap_agree.
+ red in H9. eexact H9.
+ omega.
+ unfold size_chunk in C. rewrite H4.
+ apply Zle_trans with (high_bound mm sp). auto.
+ apply align_16_top_ge.
+ change (low (blocks ms sp)) with (low_bound ms sp).
+ rewrite H3. omega.
+ change (high (blocks ms sp)) with (high_bound ms sp).
+ rewrite H4. apply Zle_trans with (high_bound mm sp). auto.
+ apply align_16_top_ge.
+Qed.
+
+(** Assigning a value to a frame slot (in the abstract semantics)
+ corresponds to storing this value in the activation record
+ (in the concrete semantics). Moreover, agreement between frames
+ and activation records is preserved. *)
+
+Lemma frame_match_set_slot:
+ forall fr sp base mm ms ty ofs v fr',
+ frame_match fr sp base mm ms ->
+ set_slot fr ty (Int.signed ofs) v fr' ->
+ exists ms',
+ store_stack ms (Vptr sp base) ty ofs v = Some ms' /\
+ frame_match fr' sp base mm ms'.
+Proof.
+ intros. inversion H. inversion H0. subst ty0.
+ unfold store_stack, Val.add, storev.
+ assert (Int.signed base = low fr).
+ rewrite H7. apply Int.signed_repr.
+ split. auto. apply Zle_trans with 0. auto. compute; congruence.
+ assert (Int.signed (Int.add base ofs) = low fr + Int.signed ofs).
+ rewrite int_add_no_overflow. rewrite H16. auto.
+ rewrite H16. split. omega. apply Zle_trans with 0.
+ generalize (typesize_pos ty). omega. compute. congruence.
+ rewrite H20.
+ assert (BND1: low_bound ms sp <= low fr + Int.signed ofs).
+ omega.
+ assert (BND2: (low fr + Int.signed ofs) + size_chunk (chunk_of_type ty) <= high_bound ms sp).
+ rewrite size_type_chunk. rewrite H4.
+ apply Zle_trans with 0. subst ofs0. auto. apply align_16_top_pos.
+ generalize (store_in_bounds _ _ _ _ v H1 BND1 BND2).
+ intros [ms' STORE].
+ generalize (store_inv _ _ _ _ _ _ STORE). intros [P [Q [R [S [x T]]]]].
+ generalize (low_bound_store _ _ _ _ sp _ _ STORE). intro LB.
+ generalize (high_bound_store _ _ _ _ sp _ _ STORE). intro HB.
+ exists ms'.
+ split. exact STORE.
+ apply frame_match_intro; auto.
+ eapply valid_block_store; eauto.
+ rewrite LB. auto.
+ rewrite HB. auto.
+ red. rewrite T; rewrite update_s; simpl.
+ rewrite mem_chunk_type.
+ subst ofs0. eapply store_contentmap_agree; eauto.
+ rewrite HB; rewrite T; rewrite update_s.
+ red. simpl. apply store_contentmap_outside_agree.
+ assumption. left. rewrite mem_chunk_type.
+ rewrite size_mem_type. subst ofs0. auto.
+Qed.
+
+(** Agreement is preserved by stores within blocks other than the
+ one pointed to by [sp]. *)
+
+Lemma frame_match_store_stack_other:
+ forall fr sp base mm ms sp' base' ty ofs v ms',
+ frame_match fr sp base mm ms ->
+ store_stack ms (Vptr sp' base') ty ofs v = Some ms' ->
+ sp <> sp' ->
+ frame_match fr sp base mm ms'.
+Proof.
+ unfold store_stack, Val.add, storev. intros. inversion H.
+ generalize (store_inv _ _ _ _ _ _ H0). intros [P [Q [R [S [x T]]]]].
+ generalize (low_bound_store _ _ _ _ sp _ _ H0). intro LB.
+ generalize (high_bound_store _ _ _ _ sp _ _ H0). intro HB.
+ apply frame_match_intro; auto.
+ eapply valid_block_store; eauto.
+ rewrite LB; auto.
+ rewrite HB; auto.
+ rewrite T; rewrite update_o; auto.
+ rewrite HB; rewrite T; rewrite update_o; auto.
+Qed.
+
+(** Stores relative to [sp], corresponding to accesses to Cminor stack data
+ in the abstract semantics, give the same results in the concrete
+ semantics. Moreover, agreement between frames and activation
+ records is preserved. *)
+
+Lemma frame_match_store_ok:
+ forall fr sp base mm ms chunk ofs v mm',
+ frame_match fr sp base mm ms ->
+ store chunk mm sp ofs v = Some mm' ->
+ exists ms', store chunk ms sp ofs v = Some ms'.
+Proof.
+ intros. inversion H.
+ generalize (store_inv _ _ _ _ _ _ H0). intros [P [Q [R [S [x T]]]]].
+ change (low (blocks mm sp)) with (low_bound mm sp) in Q.
+ change (high (blocks mm sp)) with (high_bound mm sp) in R.
+ apply store_in_bounds.
+ auto.
+ omega.
+ apply Zle_trans with (high_bound mm sp).
+ auto. rewrite H4. apply align_16_top_ge.
+Qed.
+
+Lemma frame_match_store:
+ forall fr sp base mm ms chunk b ofs v mm' ms',
+ frame_match fr sp base mm ms ->
+ store chunk mm b ofs v = Some mm' ->
+ store chunk ms b ofs v = Some ms' ->
+ frame_match fr sp base mm' ms'.
+Proof.
+ intros. inversion H.
+ generalize (store_inv _ _ _ _ _ _ H1). intros [A [B [C [D [x1 E]]]]].
+ generalize (store_inv _ _ _ _ _ _ H0). intros [I [J [K [L [x2 M]]]]].
+ generalize (low_bound_store _ _ _ _ sp _ _ H0). intro LBm.
+ generalize (low_bound_store _ _ _ _ sp _ _ H1). intro LBs.
+ generalize (high_bound_store _ _ _ _ sp _ _ H0). intro HBm.
+ generalize (high_bound_store _ _ _ _ sp _ _ H1). intro HBs.
+ apply frame_match_intro; auto.
+ eapply valid_block_store; eauto.
+ congruence. congruence. congruence.
+ rewrite E. unfold update. case (zeq sp b); intro.
+ subst b. red; simpl.
+ apply store_contentmap_outside_agree; auto.
+ right. unfold low_bound in H3. omega.
+ assumption.
+ rewrite HBs; rewrite E; rewrite M; unfold update.
+ case (zeq sp b); intro.
+ subst b. red; simpl.
+ apply store_contentmap_agree; auto.
+ assumption.
+Qed.
+
+(** Memory allocation of the Cminor stack data block (in the abstract
+ semantics) and of the whole activation record (in the concrete
+ semantics) return memory states that agree according to [frame_match].
+ Moreover, [frame_match] relations over already allocated blocks
+ remain true. *)
+
+Lemma frame_match_new:
+ forall mm ms mm' ms' sp sp' f,
+ mm.(nextblock) = ms.(nextblock) ->
+ alloc mm 0 f.(fn_stacksize) = (mm', sp) ->
+ alloc ms (- f.(fn_framesize)) (align_16_top (- f.(fn_framesize)) f.(fn_stacksize)) = (ms', sp') ->
+ f.(fn_framesize) >= 0 ->
+ f.(fn_framesize) <= -Int.min_signed ->
+ frame_match (init_frame f) sp (Int.repr (-f.(fn_framesize))) mm' ms'.
+Proof.
+ intros.
+ injection H0; intros. injection H1; intros.
+ assert (sp = sp'). congruence. rewrite <- H8 in H6. subst sp'.
+ generalize (low_bound_alloc _ _ sp _ _ _ H0). rewrite zeq_true. intro LBm.
+ generalize (low_bound_alloc _ _ sp _ _ _ H1). rewrite zeq_true. intro LBs.
+ generalize (high_bound_alloc _ _ sp _ _ _ H0). rewrite zeq_true. intro HBm.
+ generalize (high_bound_alloc _ _ sp _ _ _ H1). rewrite zeq_true. intro HBs.
+ apply frame_match_intro; auto.
+ eapply valid_new_block; eauto.
+ simpl. congruence.
+ simpl. omega.
+ simpl. omega.
+ rewrite <- H7. simpl. rewrite H6; simpl. rewrite update_s.
+ hnf; simpl; auto.
+ rewrite HBs; rewrite <- H5; simpl; rewrite H4; rewrite <- H7; simpl; rewrite H6; simpl;
+ repeat (rewrite update_s).
+ hnf; simpl; auto.
+Qed.
+
+Lemma frame_match_alloc:
+ forall mm ms fr sp base lom him los his mm' ms' bm bs,
+ mm.(nextblock) = ms.(nextblock) ->
+ frame_match fr sp base mm ms ->
+ alloc mm lom him = (mm', bm) ->
+ alloc ms los his = (ms', bs) ->
+ frame_match fr sp base mm' ms'.
+Proof.
+ intros. inversion H0.
+ assert (sp <> bm).
+ apply valid_not_valid_diff with mm.
+ red. rewrite H. exact H3.
+ eapply fresh_block_alloc; eauto.
+ assert (sp <> bs).
+ apply valid_not_valid_diff with ms. auto.
+ eapply fresh_block_alloc; eauto.
+ generalize (low_bound_alloc _ _ sp _ _ _ H1).
+ rewrite zeq_false; auto; intro LBm.
+ generalize (low_bound_alloc _ _ sp _ _ _ H2).
+ rewrite zeq_false; auto; intro LBs.
+ generalize (high_bound_alloc _ _ sp _ _ _ H1).
+ rewrite zeq_false; auto; intro HBm.
+ generalize (high_bound_alloc _ _ sp _ _ _ H2).
+ rewrite zeq_false; auto; intro HBs.
+ apply frame_match_intro.
+ eapply valid_block_alloc; eauto.
+ congruence. congruence. congruence. auto. auto. auto.
+ injection H2; intros. rewrite <- H20; simpl; rewrite H19; simpl.
+ rewrite update_o; auto.
+ rewrite HBs;
+ injection H2; intros. rewrite <- H20; simpl; rewrite H19; simpl.
+ injection H1; intros. rewrite <- H22; simpl; rewrite H21; simpl.
+ repeat (rewrite update_o; auto).
+Qed.
+
+(** [frame_match] relations are preserved by freeing a block
+ other than the one pointed to by [sp]. *)
+
+Lemma frame_match_free:
+ forall fr sp base mm ms b,
+ frame_match fr sp base mm ms ->
+ sp <> b ->
+ frame_match fr sp base (free mm b) (free ms b).
+Proof.
+ intros. inversion H.
+ generalize (low_bound_free mm _ _ H0); intro LBm.
+ generalize (low_bound_free ms _ _ H0); intro LBs.
+ generalize (high_bound_free mm _ _ H0); intro HBm.
+ generalize (high_bound_free ms _ _ H0); intro HBs.
+ apply frame_match_intro; auto.
+ congruence. congruence. congruence.
+ unfold free; simpl. rewrite update_o; auto.
+ rewrite HBs.
+ unfold free; simpl. repeat (rewrite update_o; auto).
+Qed.
+
+(** ** Agreement for all the frames in a call stack *)
+
+(** We need to reason about all the frames and activation records
+ active at any given time during the executions: not just
+ about those for the currently executing function, but also
+ those for the callers. These collections of
+ active frames are called ``call stacks''. They are lists
+ of triples representing a frame and a stack pointer
+ (reference and offset) in the abstract semantics. *)
+
+Definition callstack : Set := list (frame * block * int).
+
+(** The correct linking of frames (each frame contains a pointer
+ to the frame of its caller at the lowest offset) is captured
+ by the following predicate. *)
+
+Inductive callstack_linked: callstack -> Prop :=
+ | callstack_linked_nil:
+ callstack_linked nil
+ | callstack_linked_one:
+ forall fr1 sp1 base1,
+ callstack_linked ((fr1, sp1, base1) :: nil)
+ | callstack_linked_cons:
+ forall fr1 sp1 base1 fr2 base2 sp2 cs,
+ get_slot fr1 Tint 0 (Vptr sp2 base2) ->
+ callstack_linked ((fr2, sp2, base2) :: cs) ->
+ callstack_linked ((fr1, sp1, base1) :: (fr2, sp2, base2) :: cs).
+
+(** [callstack_dom cs b] (read: call stack [cs] is ``dominated''
+ by block reference [b]) means that the stack pointers in [cs]
+ strictly decrease and are all below [b]. This ensures that
+ the stack block for a function was allocated after that for its
+ callers. A consequence is that no two active functions share
+ the same stack block. *)
+
+Inductive callstack_dom: callstack -> block -> Prop :=
+ | callstack_dom_nil:
+ forall b, callstack_dom nil b
+ | callstack_dom_cons:
+ forall fr sp base cs b,
+ sp < b ->
+ callstack_dom cs sp ->
+ callstack_dom ((fr, sp, base) :: cs) b.
+
+Lemma callstack_dom_less:
+ forall cs b, callstack_dom cs b ->
+ forall fr sp base, In (fr, sp, base) cs -> sp < b.
+Proof.
+ induction 1. simpl. tauto.
+ simpl. intros fr0 sp0 base0 [A|B].
+ injection A; intros; subst fr0; subst sp0; subst base0. auto.
+ apply Zlt_trans with sp. eapply IHcallstack_dom; eauto. auto.
+Qed.
+
+Lemma callstack_dom_diff:
+ forall cs b, callstack_dom cs b ->
+ forall fr sp base, In (fr, sp, base) cs -> sp <> b.
+Proof.
+ intros. apply Zlt_not_eq. eapply callstack_dom_less; eauto.
+Qed.
+
+Lemma callstack_dom_incr:
+ forall cs b, callstack_dom cs b ->
+ forall b', b < b' -> callstack_dom cs b'.
+Proof.
+ induction 1; intros.
+ apply callstack_dom_nil.
+ apply callstack_dom_cons. omega. auto.
+Qed.
+
+(** Every block reference is either ``in'' a call stack (that is,
+ refers to the stack block of one of the calls) or ``not in''
+ a call stack (that is, differs from all the stack blocks). *)
+
+Inductive notin_callstack: block -> callstack -> Prop :=
+ | notin_callstack_nil:
+ forall b, notin_callstack b nil
+ | notin_callstack_cons:
+ forall b fr sp base cs,
+ b <> sp ->
+ notin_callstack b cs ->
+ notin_callstack b ((fr, sp, base) :: cs).
+
+Lemma in_or_notin_callstack:
+ forall b cs,
+ (exists fr, exists base, In (fr, b, base) cs) \/ notin_callstack b cs.
+Proof.
+ induction cs.
+ right; constructor.
+ elim IHcs.
+ intros [fr [base IN]]. left. exists fr; exists base; auto with coqlib.
+ intro NOTIN. destruct a. destruct p. case (eq_block b b0); intro.
+ left. exists f; exists i. subst b0. auto with coqlib.
+ right. apply notin_callstack_cons; auto.
+Qed.
+
+(** [callstack_invariant cs mm ms] relates the memory state [mm]
+ from the abstract semantics with the memory state [ms] from the
+ concrete semantics, relative to the current call stack [cs].
+ Five conditions are enforced:
+- All frames in [cs] agree with the corresponding activation records
+ (in the sense of [frame_match]).
+- The frames in the call stack are properly linked.
+- Memory blocks that are not activation records for active function
+ calls are exactly identical in [mm] and [ms].
+- The allocation pointers are the same in [mm] and [ms].
+- The call stack [cs] is ``dominated'' by this allocation pointer,
+ implying that all activation records are valid, allocated blocks,
+ pairwise disjoint, and they were allocated in the order implied
+ by [cs]. *)
+
+Record callstack_invariant (cs: callstack) (mm ms: mem) : Prop :=
+ mk_callstack_invariant {
+ cs_frame:
+ forall fr sp base,
+ In (fr, sp, base) cs -> frame_match fr sp base mm ms;
+ cs_linked:
+ callstack_linked cs;
+ cs_others:
+ forall b, notin_callstack b cs ->
+ mm.(blocks) b = ms.(blocks) b;
+ cs_next:
+ mm.(nextblock) = ms.(nextblock);
+ cs_dom:
+ callstack_dom cs ms.(nextblock)
+ }.
+
+(** Again, while [callstack_invariant] is presented as a relation,
+ it actually fully determines the concrete memory state [ms]
+ from the abstract memory state [mm] and the call stack [cs]. *)
+
+Lemma callstack_exten:
+ forall cs mm ms1 ms2,
+ callstack_invariant cs mm ms1 ->
+ callstack_invariant cs mm ms2 ->
+ ms1 = ms2.
+Proof.
+ intros. inversion H; inversion H0.
+ apply mem_exten.
+ congruence.
+ intros. elim (in_or_notin_callstack b cs).
+ intros [fr [base FM]]. apply frame_match_exten with fr base mm; auto.
+ intro. transitivity (blocks mm b).
+ symmetry. auto. auto.
+Qed.
+
+(** The following properties of [callstack_invariant] are the
+ building blocks for the proof of simulation. First, a [get_slot]
+ operation in the abstract semantics corresponds to a [sp]-relative
+ memory load in the concrete semantics. *)
+
+Lemma callstack_get_slot:
+ forall fr sp base cs mm ms ty ofs v,
+ callstack_invariant ((fr, sp, base) :: cs) mm ms ->
+ get_slot fr ty (Int.signed ofs) v ->
+ Val.has_type v ty ->
+ load_stack ms (Vptr sp base) ty ofs = Some v.
+Proof.
+ intros. inversion H.
+ apply frame_match_get_slot with fr mm.
+ apply cs_frame0. apply in_eq.
+ auto. auto.
+Qed.
+
+(** Similarly, a [get_parent] operation corresponds to loading
+ the back-link from the current activation record, then loading
+ from this back-link. *)
+
+Lemma callstack_get_parent:
+ forall fr1 sp1 base1 fr2 sp2 base2 cs mm ms ty ofs v,
+ callstack_invariant ((fr1, sp1, base1) :: (fr2, sp2, base2) :: cs) mm ms ->
+ get_slot fr2 ty (Int.signed ofs) v ->
+ Val.has_type v ty ->
+ load_stack ms (Vptr sp1 base1) Tint (Int.repr 0) = Some (Vptr sp2 base2) /\
+ load_stack ms (Vptr sp2 base2) ty ofs = Some v.
+Proof.
+ intros. inversion H. split.
+ inversion cs_linked0.
+ apply frame_match_get_slot with fr1 mm.
+ apply cs_frame0. auto with coqlib.
+ rewrite Int.signed_repr. auto. compute. intuition congruence.
+ exact I.
+ apply frame_match_get_slot with fr2 mm.
+ apply cs_frame0. auto with coqlib.
+ auto. auto.
+Qed.
+
+(** A memory load valid in the abstract semantics can also be performed
+ in the concrete semantics. *)
+
+Lemma callstack_load:
+ forall cs chunk mm ms a v,
+ callstack_invariant cs mm ms ->
+ loadv chunk mm a = Some v ->
+ loadv chunk ms a = Some v.
+Proof.
+ unfold loadv. intros. destruct a; try discriminate.
+ inversion H.
+ elim (in_or_notin_callstack b cs).
+ intros [fr [base IN]]. apply frame_match_load with fr base mm; auto.
+ intro. rewrite <- H0. unfold load.
+ rewrite (cs_others0 b H1). rewrite cs_next0. reflexivity.
+Qed.
+
+(** A [set_slot] operation in the abstract semantics corresponds
+ to a [sp]-relative memory store in the concrete semantics.
+ Moreover, the property [callstack_invariant] still holds for
+ the final call stacks and memory states. *)
+
+Lemma callstack_set_slot:
+ forall fr sp base cs mm ms ty ofs v fr',
+ callstack_invariant ((fr, sp, base) :: cs) mm ms ->
+ set_slot fr ty (Int.signed ofs) v fr' ->
+ 4 <= Int.signed ofs ->
+ exists ms',
+ store_stack ms (Vptr sp base) ty ofs v = Some ms' /\
+ callstack_invariant ((fr', sp, base) :: cs) mm ms'.
+Proof.
+ intros. inversion H.
+ assert (frame_match fr sp base mm ms). apply cs_frame0. apply in_eq.
+ generalize (frame_match_set_slot _ _ _ _ _ _ _ _ _ H2 H0).
+ intros [ms' [SS FM]].
+ generalize (store_inv _ _ _ _ _ _ SS). intros [A [B [C [D [x E]]]]].
+ exists ms'.
+ split. auto.
+ constructor.
+ (* cs_frame *)
+ intros. elim H3; intros.
+ injection H4; intros; clear H4.
+ subst fr0; subst sp0; subst base0. auto.
+ apply frame_match_store_stack_other with ms sp base ty ofs v.
+ apply cs_frame0. auto with coqlib. auto.
+ apply callstack_dom_diff with cs fr0 base0. inversion cs_dom0; auto. auto.
+ (* cs_linked *)
+ inversion cs_linked0. apply callstack_linked_one.
+ apply callstack_linked_cons.
+ eapply slot_gso; eauto.
+ auto.
+ (* cs_others *)
+ intros. inversion H3.
+ rewrite E; simpl. rewrite update_o; auto. apply cs_others0.
+ constructor; auto.
+ (* cs_next *)
+ congruence.
+ (* cs_dom *)
+ inversion cs_dom0. constructor. rewrite D; auto. auto.
+Qed.
+
+(** A memory store in the abstract semantics can also be performed
+ in the concrete semantics. Moreover, the property
+ [callstack_invariant] is preserved. *)
+
+Lemma callstack_store_aux:
+ forall cs mm ms chunk b ofs v mm' ms',
+ callstack_invariant cs mm ms ->
+ store chunk mm b ofs v = Some mm' ->
+ store chunk ms b ofs v = Some ms' ->
+ callstack_invariant cs mm' ms'.
+Proof.
+ intros. inversion H.
+ generalize (store_inv _ _ _ _ _ _ H0). intros [A [B [C [D [x E]]]]].
+ generalize (store_inv _ _ _ _ _ _ H1). intros [P [Q [R [S [y T]]]]].
+ constructor; auto.
+ (* cs_frame *)
+ intros. eapply frame_match_store; eauto.
+ (* cs_others *)
+ intros. generalize (cs_others0 b0 H2); intro.
+ rewrite E; rewrite T; unfold update.
+ case (zeq b0 b); intro.
+ subst b0.
+ generalize x; generalize y. rewrite H3.
+ intros. replace y0 with x0. reflexivity. apply proof_irrelevance.
+ auto.
+ (* cs_nextblock *)
+ congruence.
+ (* cs_dom *)
+ rewrite S. auto.
+Qed.
+
+Lemma callstack_store_ok:
+ forall cs mm ms chunk b ofs v mm',
+ callstack_invariant cs mm ms ->
+ store chunk mm b ofs v = Some mm' ->
+ exists ms', store chunk ms b ofs v = Some ms'.
+Proof.
+ intros. inversion H.
+ elim (in_or_notin_callstack b cs).
+ intros [fr [base IN]].
+ apply frame_match_store_ok with fr base mm mm'; auto.
+ intro. generalize (cs_others0 b H1). intro.
+ generalize (store_inv _ _ _ _ _ _ H0).
+ rewrite cs_next0; rewrite H2. intros [A [B [C [D [x E]]]]].
+ apply store_in_bounds; auto.
+Qed.
+
+Lemma callstack_store:
+ forall cs mm ms chunk a v mm',
+ callstack_invariant cs mm ms ->
+ storev chunk mm a v = Some mm' ->
+ exists ms',
+ storev chunk ms a v = Some ms' /\
+ callstack_invariant cs mm' ms'.
+Proof.
+ unfold storev; intros. destruct a; try discriminate.
+ generalize (callstack_store_ok _ _ _ _ _ _ _ _ H H0).
+ intros [ms' STORE].
+ exists ms'. split. auto. eapply callstack_store_aux; eauto.
+Qed.
+
+(** At function entry, a new frame is pushed on the call stack,
+ and memory blocks are allocated in both semantics. Moreover,
+ the back link to the caller's activation record is set up
+ in the concrete semantics. All this preserves [callstack_invariant]. *)
+
+Lemma callstack_function_entry:
+ forall fr0 sp0 base0 cs mm ms f fr mm' sp ms' sp',
+ callstack_invariant ((fr0, sp0, base0) :: cs) mm ms ->
+ alloc mm 0 f.(fn_stacksize) = (mm', sp) ->
+ alloc ms (- f.(fn_framesize)) (align_16_top (- f.(fn_framesize)) f.(fn_stacksize)) = (ms', sp') ->
+ f.(fn_framesize) >= 0 ->
+ f.(fn_framesize) <= -Int.min_signed ->
+ set_slot (init_frame f) Tint 0 (Vptr sp0 base0) fr ->
+ let base := Int.repr (-f.(fn_framesize)) in
+ exists ms'',
+ store_stack ms' (Vptr sp base) Tint (Int.repr 0) (Vptr sp0 base0) = Some ms''
+ /\ callstack_invariant ((fr, sp, base) :: (fr0, sp0, base0) :: cs) mm' ms''
+ /\ sp' = sp.
+Proof.
+ assert (ZERO: 0 = Int.signed (Int.repr 0)).
+ rewrite Int.signed_repr. auto. compute; intuition congruence.
+ intros. inversion H.
+ injection H0; intros. injection H1; intros.
+ assert (sp' = sp). congruence. rewrite H9 in H7. subst sp'.
+ assert (frame_match (init_frame f) sp base mm' ms').
+ unfold base. eapply frame_match_new; eauto.
+ rewrite ZERO in H4.
+ generalize (frame_match_set_slot _ _ _ _ _ _ _ _ _ H9 H4).
+ intros [ms'' [SS FM]].
+ generalize (store_inv _ _ _ _ _ _ SS).
+ intros [A [B [C [D [x E]]]]].
+ exists ms''. split; auto. split.
+ constructor.
+ (* cs_frame *)
+ intros. elim H10; intro.
+ injection H11; intros; clear H11.
+ subst fr1; subst sp1; subst base1. auto.
+ eapply frame_match_store_stack_other; eauto.
+ eapply frame_match_alloc; [idtac|idtac|eexact H0|eexact H1].
+ congruence. eapply cs_frame; eauto with coqlib.
+ rewrite <- H7. eapply callstack_dom_diff; eauto with coqlib.
+ (* cs_linked *)
+ constructor. rewrite ZERO. eapply slot_gss; eauto. auto.
+ (* cs_others *)
+ intros. inversion H10.
+ rewrite E; rewrite update_o; auto.
+ rewrite <- H6; rewrite <- H8; simpl; rewrite H5; rewrite H7; simpl.
+ repeat (rewrite update_o; auto).
+ (* cs_next *)
+ rewrite D. rewrite <- H6; rewrite <- H8; simpl. congruence.
+ (* cs_dom *)
+ constructor. rewrite D; auto. rewrite <- H7. auto.
+ auto.
+Qed.
+
+(** At function return, the memory blocks corresponding to Cminor
+ stack data and activation record for the function are freed.
+ This preserves [callstack_invariant]. *)
+
+Lemma callstack_function_return:
+ forall fr sp base cs mm ms,
+ callstack_invariant ((fr, sp, base) :: cs) mm ms ->
+ callstack_invariant cs (free mm sp) (free ms sp).
+Proof.
+ intros. inversion H. inversion cs_dom0.
+ constructor.
+ (* cs_frame *)
+ intros. apply frame_match_free. apply cs_frame0; auto with coqlib.
+ apply callstack_dom_diff with cs fr1 base1. auto. auto.
+ (* cs_linked *)
+ inversion cs_linked0. apply callstack_linked_nil. auto.
+ (* cs_others *)
+ intros.
+ unfold free; simpl; unfold update.
+ case (zeq b0 sp); intro.
+ auto.
+ apply cs_others0. apply notin_callstack_cons; auto.
+ (* cs_nextblock *)
+ simpl. auto.
+ (* cs_dom *)
+ simpl. apply callstack_dom_incr with sp; auto.
+Qed.
+
+(** Finally, [callstack_invariant] holds for the initial memory states
+ in the two semantics. *)
+
+Lemma callstack_init:
+ forall (p: program),
+ callstack_invariant ((empty_frame, nullptr, Int.zero) :: nil)
+ (Genv.init_mem p) (Genv.init_mem p).
+Proof.
+ intros.
+ generalize (Genv.initmem_nullptr p). intros [A B].
+ constructor.
+ (* cs_frame *)
+ intros. elim H; intro.
+ injection H0; intros; subst fr; subst sp; subst base.
+ constructor.
+ assumption.
+ unfold low_bound. rewrite B. reflexivity.
+ unfold low_bound, empty_frame. rewrite B. reflexivity.
+ unfold high_bound. rewrite B. reflexivity.
+ simpl. omega.
+ simpl. compute. intuition congruence.
+ reflexivity.
+ rewrite B. unfold empty_frame. simpl. hnf. auto.
+ rewrite B. hnf. auto.
+ elim H0.
+ (* cs_linked *)
+ apply callstack_linked_one.
+ (* cs_others *)
+ auto.
+ (* cs_nextblock *)
+ reflexivity.
+ (* cs_dom *)
+ constructor. exact A. constructor.
+Qed.
+
+(** * The proof of simulation *)
+
+Section SIMULATION.
+
+Variable p: program.
+Hypothesis wt_p: wt_program p.
+Let ge := Genv.globalenv p.
+
+(** The proof of simulation relies on diagrams of the following form:
+<<
+ sp, parent, c, rs, fr, mm ----------- sp, c, rs, ms
+ | |
+ | |
+ v v
+ sp, parent, c', rs', fr', mm' -------- sp, c', rs', ms'
+>>
+ The left vertical arrow is a transition in the abstract semantics.
+ The right vertical arrow is a transition in the concrete semantics.
+ The precondition (top horizontal line) is the appropriate
+ [callstack_invariant] property between the initial memory states
+ [mm] and [ms] and any call stack with [fr] as top frame and
+ [parent] as second frame. In addition, well-typedness conditions
+ over the code [c], the register [rs] and the frame [fr] are demanded.
+ The postcondition (bottom horizontal line) is [callstack_invariant]
+ between the final memory states [mm'] and [ms'] and the final
+ call stack.
+*)
+
+Definition exec_instr_prop
+ (f: function) (sp: val) (parent: frame)
+ (c: code) (rs: regset) (fr: frame) (mm: mem)
+ (c': code) (rs': regset) (fr': frame) (mm': mem) : Prop :=
+ forall ms stk base pstk pbase cs
+ (WTF: wt_function f)
+ (INCL: incl c f.(fn_code))
+ (WTRS: wt_regset rs)
+ (WTFR: wt_frame fr)
+ (WTPA: wt_frame parent)
+ (CSI: callstack_invariant ((fr, stk, base) :: (parent, pstk, pbase) :: cs) mm ms)
+ (SP: sp = Vptr stk base),
+ exists ms',
+ exec_instr ge f sp c rs ms c' rs' ms' /\
+ callstack_invariant ((fr', stk, base) :: (parent, pstk, pbase) :: cs) mm' ms'.
+
+Definition exec_instrs_prop
+ (f: function) (sp: val) (parent: frame)
+ (c: code) (rs: regset) (fr: frame) (mm: mem)
+ (c': code) (rs': regset) (fr': frame) (mm': mem) : Prop :=
+ forall ms stk base pstk pbase cs
+ (WTF: wt_function f)
+ (INCL: incl c f.(fn_code))
+ (WTRS: wt_regset rs)
+ (WTFR: wt_frame fr)
+ (WTPA: wt_frame parent)
+ (CSI: callstack_invariant ((fr, stk, base) :: (parent, pstk, pbase) :: cs) mm ms)
+ (SP: sp = Vptr stk base),
+ exists ms',
+ exec_instrs ge f sp c rs ms c' rs' ms' /\
+ callstack_invariant ((fr', stk, base) :: (parent, pstk, pbase) :: cs) mm' ms'.
+
+Definition exec_function_body_prop
+ (f: function) (parent: frame) (link ra: val)
+ (rs: regset) (mm: mem)
+ (rs': regset) (mm': mem) : Prop :=
+ forall ms pstk pbase cs
+ (WTF: wt_function f)
+ (WTRS: wt_regset rs)
+ (WTPA: wt_frame parent)
+ (WTRA: Val.has_type ra Tint)
+ (LINK: link = Vptr pstk pbase)
+ (CSI: callstack_invariant ((parent, pstk, pbase) :: cs) mm ms),
+ exists ms',
+ exec_function_body ge f (Vptr pstk pbase) ra rs ms rs' ms' /\
+ callstack_invariant ((parent, pstk, pbase) :: cs) mm' ms'.
+
+Definition exec_function_prop
+ (f: function) (parent: frame)
+ (rs: regset) (mm: mem)
+ (rs': regset) (mm': mem) : Prop :=
+ forall ms pstk pbase cs
+ (WTF: wt_function f)
+ (WTRS: wt_regset rs)
+ (WTPA: wt_frame parent)
+ (CSI: callstack_invariant ((parent, pstk, pbase) :: cs) mm ms),
+ exists ms',
+ exec_function ge f (Vptr pstk pbase) rs ms rs' ms' /\
+ callstack_invariant ((parent, pstk, pbase) :: cs) mm' ms'.
+
+Lemma exec_function_equiv:
+ forall f parent rs mm rs' mm',
+ Machabstr.exec_function ge f parent rs mm rs' mm' ->
+ exec_function_prop f parent rs mm rs' mm'.
+Proof.
+ apply (Machabstr.exec_function_ind4 ge
+ exec_instr_prop
+ exec_instrs_prop
+ exec_function_body_prop
+ exec_function_prop);
+ intros; red; intros.
+
+ (* Mlabel *)
+ exists ms. split. constructor. auto.
+ (* Mgetstack *)
+ exists ms. split.
+ constructor. rewrite SP. eapply callstack_get_slot; eauto.
+ apply wt_get_slot with fr (Int.signed ofs); auto.
+ auto.
+ (* Msetstack *)
+ generalize (wt_function_instrs f WTF _ (INCL _ (in_eq _ _))).
+ intro WTI. inversion WTI.
+ assert (4 <= Int.signed ofs). omega.
+ generalize (callstack_set_slot _ _ _ _ _ _ _ _ _ _ CSI H H5).
+ intros [ms' [STO CSI']].
+ exists ms'. split. constructor. rewrite SP. auto. auto.
+ (* Mgetparam *)
+ exists ms. split.
+ assert (WTV: Val.has_type v ty). eapply wt_get_slot; eauto.
+ generalize (callstack_get_parent _ _ _ _ _ _ _ _ _ _ _ _
+ CSI H WTV).
+ intros [L1 L2].
+ eapply exec_Mgetparam. rewrite SP; eexact L1. eexact L2.
+ auto.
+ (* Mop *)
+ exists ms. split. constructor. auto. auto.
+ (* Mload *)
+ exists ms. split. econstructor. eauto. eapply callstack_load; eauto.
+ auto.
+ (* Mstore *)
+ generalize (callstack_store _ _ _ _ _ _ _ CSI H0).
+ intros [ms' [STO CSI']].
+ exists ms'. split. econstructor. eauto. auto.
+ auto.
+ (* Mcall *)
+ red in H1.
+ assert (WTF': wt_function f').
+ destruct ros; simpl in H.
+ apply (Genv.find_funct_prop wt_function wt_p H).
+ destruct (Genv.find_symbol ge i); try discriminate.
+ apply (Genv.find_funct_ptr_prop wt_function wt_p H).
+ generalize (H1 _ _ _ _ WTF' WTRS WTFR CSI).
+ intros [ms' [EXF CSI']].
+ exists ms'. split. apply exec_Mcall with f'; auto.
+ rewrite SP. auto.
+ auto.
+ (* Mgoto *)
+ exists ms. split. constructor; auto. auto.
+ (* Mcond *)
+ exists ms. split. apply exec_Mcond_true; auto. auto.
+ exists ms. split. apply exec_Mcond_false; auto. auto.
+
+ (* refl *)
+ exists ms. split. apply exec_refl. auto.
+ (* one *)
+ generalize (H0 _ _ _ _ _ _ WTF INCL WTRS WTFR WTPA CSI SP).
+ intros [ms' [EX CSI']].
+ exists ms'. split. apply exec_one; auto. auto.
+ (* trans *)
+ generalize (subject_reduction_instrs p wt_p
+ _ _ _ _ _ _ _ _ _ _ _ H WTF INCL WTRS WTFR WTPA).
+ intros [INCL2 [WTRS2 WTFR2]].
+ generalize (H0 _ _ _ _ _ _ WTF INCL WTRS WTFR WTPA CSI SP).
+ intros [ms1 [EX1 CSI1]].
+ generalize (H2 _ _ _ _ _ _ WTF INCL2 WTRS2 WTFR2 WTPA CSI1 SP).
+ intros [ms2 [EX2 CSI2]].
+ exists ms2. split. eapply exec_trans; eauto. auto.
+
+ (* function body *)
+ caseEq (alloc ms (- f.(fn_framesize))
+ (align_16_top (- f.(fn_framesize)) f.(fn_stacksize))).
+ intros ms1 stk1 ALL.
+ subst link.
+ assert (FS: f.(fn_framesize) >= 0).
+ generalize (wt_function_framesize f WTF). omega.
+ generalize (callstack_function_entry _ _ _ _ _ _ _ _ _ _ _ _
+ CSI H ALL FS
+ (wt_function_no_overflow f WTF) H0).
+ intros [ms2 [STORELINK [CSI2 EQ]]].
+ subst stk1.
+ assert (ZERO: Int.signed (Int.repr 0) = 0). reflexivity.
+ assert (FOUR: Int.signed (Int.repr 4) = 4). reflexivity.
+ assert (BND: 4 <= Int.signed (Int.repr 4)).
+ rewrite FOUR; omega.
+ rewrite <- FOUR in H1.
+ generalize (callstack_set_slot _ _ _ _ _ _ _ _ _ _
+ CSI2 H1 BND).
+ intros [ms3 [STORERA CSI3]].
+ assert (WTFR2: wt_frame fr2).
+ eapply wt_set_slot; eauto. eapply wt_set_slot; eauto.
+ red. intros. simpl. auto.
+ exact I.
+ red in H3.
+ generalize (H3 _ _ _ _ _ _ WTF (incl_refl _) WTRS WTFR2 WTPA
+ CSI3 (refl_equal _)).
+ intros [ms4 [EXEC CSI4]].
+ generalize (exec_instrs_link_invariant _ _ _ _ _ _ _ _ _ _ _ _
+ H2 WTF (incl_refl _)).
+ intros [INCL LINKINV].
+ exists (free ms4 stk). split.
+ eapply exec_funct_body; eauto.
+ eapply callstack_get_slot. eexact CSI4.
+ apply LINKINV. rewrite ZERO. omega.
+ eapply slot_gso; eauto. rewrite ZERO. eapply slot_gss; eauto.
+ exact I.
+ eapply callstack_get_slot. eexact CSI4.
+ apply LINKINV. rewrite FOUR. omega. eapply slot_gss; eauto. auto.
+ eapply callstack_function_return; eauto.
+
+ (* function *)
+ generalize (H0 (Vptr pstk pbase) Vzero I I
+ ms pstk pbase cs WTF WTRS WTPA I (refl_equal _) CSI).
+ intros [ms' [EXEC CSI']].
+ exists ms'. split. constructor. intros.
+ generalize (H0 (Vptr pstk pbase) ra I H1
+ ms pstk pbase cs WTF WTRS WTPA H1 (refl_equal _) CSI).
+ intros [ms1 [EXEC1 CSI1]].
+ rewrite (callstack_exten _ _ _ _ CSI' CSI1). auto.
+ auto.
+Qed.
+
+End SIMULATION.
+
+Theorem exec_program_equiv:
+ forall p r,
+ wt_program p ->
+ Machabstr.exec_program p r ->
+ Mach.exec_program p r.
+Proof.
+ intros p r WTP [fptr [f [rs [mm [FINDPTR [FINDF [SIG [EXEC RES]]]]]]]].
+ assert (WTF: wt_function f).
+ apply (Genv.find_funct_ptr_prop wt_function WTP FINDF).
+ assert (WTRS: wt_regset (Regmap.init Vundef)).
+ red; intros. rewrite Regmap.gi; simpl; auto.
+ assert (WTFR: wt_frame empty_frame).
+ red; intros. simpl. auto.
+ generalize (exec_function_equiv p WTP
+ f empty_frame
+ (Regmap.init Vundef) (Genv.init_mem p) rs mm
+ EXEC (Genv.init_mem p) nullptr Int.zero nil
+ WTF WTRS WTFR (callstack_init p)).
+ intros [ms' [EXEC' CSI]].
+ red. exists fptr; exists f; exists rs; exists ms'.
+ intuition. rewrite SIG in RES. exact RES.
+Qed.
diff --git a/backend/Machtyping.v b/backend/Machtyping.v
new file mode 100644
index 0000000..987269b
--- /dev/null
+++ b/backend/Machtyping.v
@@ -0,0 +1,367 @@
+(** Type system for the Mach intermediate language. *)
+
+Require Import Coqlib.
+Require Import Maps.
+Require Import AST.
+Require Import Mem.
+Require Import Integers.
+Require Import Values.
+Require Import Mem.
+Require Import Globalenvs.
+Require Import Op.
+Require Import Locations.
+Require Conventions.
+Require Import Mach.
+
+(** * Typing rules *)
+
+Inductive wt_instr : instruction -> Prop :=
+ | wt_Mlabel:
+ forall lbl,
+ wt_instr (Mlabel lbl)
+ | wt_Mgetstack:
+ forall ofs ty r,
+ mreg_type r = ty ->
+ wt_instr (Mgetstack ofs ty r)
+ | wt_Msetstack:
+ forall ofs ty r,
+ mreg_type r = ty -> 24 <= Int.signed ofs ->
+ wt_instr (Msetstack r ofs ty)
+ | wt_Mgetparam:
+ forall ofs ty r,
+ mreg_type r = ty ->
+ wt_instr (Mgetparam ofs ty r)
+ | wt_Mopmove:
+ forall r1 r,
+ mreg_type r1 = mreg_type r ->
+ wt_instr (Mop Omove (r1 :: nil) r)
+ | wt_Mopundef:
+ forall r,
+ wt_instr (Mop Oundef nil r)
+ | wt_Mop:
+ forall op args res,
+ op <> Omove -> op <> Oundef ->
+ (List.map mreg_type args, mreg_type res) = type_of_operation op ->
+ wt_instr (Mop op args res)
+ | wt_Mload:
+ forall chunk addr args dst,
+ List.map mreg_type args = type_of_addressing addr ->
+ mreg_type dst = type_of_chunk chunk ->
+ wt_instr (Mload chunk addr args dst)
+ | wt_Mstore:
+ forall chunk addr args src,
+ List.map mreg_type args = type_of_addressing addr ->
+ mreg_type src = type_of_chunk chunk ->
+ wt_instr (Mstore chunk addr args src)
+ | wt_Mcall:
+ forall sig ros,
+ match ros with inl r => mreg_type r = Tint | inr s => True end ->
+ wt_instr (Mcall sig ros)
+ | wt_Mgoto:
+ forall lbl,
+ wt_instr (Mgoto lbl)
+ | wt_Mcond:
+ forall cond args lbl,
+ List.map mreg_type args = type_of_condition cond ->
+ wt_instr (Mcond cond args lbl)
+ | wt_Mreturn:
+ wt_instr Mreturn.
+
+Record wt_function (f: function) : Prop := mk_wt_function {
+ wt_function_instrs:
+ forall instr, In instr f.(fn_code) -> wt_instr instr;
+ wt_function_stacksize:
+ f.(fn_stacksize) >= 0;
+ wt_function_framesize:
+ f.(fn_framesize) >= 24;
+ wt_function_no_overflow:
+ f.(fn_framesize) <= -Int.min_signed
+}.
+
+Definition wt_program (p: program) : Prop :=
+ forall i f, In (i, f) (prog_funct p) -> wt_function f.
+
+(** * Type soundness *)
+
+Require Import Machabstr.
+
+(** We show a weak type soundness result for the alternate semantics
+ of Mach: for a well-typed Mach program, if a transition is taken
+ from a state where registers hold values of their static types,
+ registers in the final state hold values of their static types
+ as well. This is a progress theorem for our type system.
+ It is used in the proof of implcation from the abstract Mach
+ semantics to the concrete Mach semantics (file [Machabstr2mach]).
+*)
+
+Definition wt_regset (rs: regset) : Prop :=
+ forall r, Val.has_type (rs r) (mreg_type r).
+
+Definition wt_content (c: content) : Prop :=
+ match c with
+ | Datum32 v => Val.has_type v Tint
+ | Datum64 v => Val.has_type v Tfloat
+ | _ => True
+ end.
+
+Definition wt_frame (fr: frame) : Prop :=
+ forall ofs, wt_content (fr.(contents) ofs).
+
+Lemma wt_setreg:
+ forall (rs: regset) (r: mreg) (v: val),
+ Val.has_type v (mreg_type r) ->
+ wt_regset rs -> wt_regset (rs#r <- v).
+Proof.
+ intros; red; intros. unfold Regmap.set.
+ case (RegEq.eq r0 r); intro.
+ subst r0; assumption.
+ apply H0.
+Qed.
+
+Lemma wt_get_slot:
+ forall fr ty ofs v,
+ get_slot fr ty ofs v ->
+ wt_frame fr ->
+ Val.has_type v ty.
+Proof.
+ induction 1; intro. subst v.
+ set (pos := low fr + ofs).
+ case ty; simpl.
+ unfold getN. case (check_cont 3 (pos + 1) (contents fr)).
+ generalize (H2 pos). unfold wt_content.
+ destruct (contents fr pos); simpl; tauto.
+ simpl; auto.
+ unfold getN. case (check_cont 7 (pos + 1) (contents fr)).
+ generalize (H2 pos). unfold wt_content.
+ destruct (contents fr pos); simpl; tauto.
+ simpl; auto.
+Qed.
+
+Lemma wt_set_slot:
+ forall fr ty ofs v fr',
+ set_slot fr ty ofs v fr' ->
+ wt_frame fr ->
+ Val.has_type v ty ->
+ wt_frame fr'.
+Proof.
+ intros. induction H.
+ set (i := low fr + ofs).
+ red; intro j; simpl.
+ assert (forall n ofs c,
+ let c' := set_cont n ofs c in
+ forall k, c' k = c k \/ c' k = Cont).
+ induction n; simpl; intros.
+ left; auto.
+ unfold update. case (zeq k ofs0); intro.
+ right; auto.
+ apply IHn.
+ destruct ty; simpl; unfold store_contents; unfold setN;
+ unfold update; case (zeq j i); intro.
+ red. assumption.
+ elim (H 3%nat (i + 1) (contents fr) j); intro; rewrite H2.
+ apply H0. red; auto.
+ red. assumption.
+ elim (H 7%nat (i + 1) (contents fr) j); intro; rewrite H2.
+ apply H0. red; auto.
+Qed.
+
+Lemma wt_init_frame:
+ forall f,
+ wt_frame (init_frame f).
+Proof.
+ intros. unfold init_frame.
+ red; intros. simpl. exact I.
+Qed.
+
+Lemma incl_find_label:
+ forall lbl c c', find_label lbl c = Some c' -> incl c' c.
+Proof.
+ induction c; simpl.
+ intros; discriminate.
+ case (is_label lbl a); intros.
+ injection H; intro; subst c'; apply incl_tl; apply incl_refl.
+ apply incl_tl; auto.
+Qed.
+
+Section SUBJECT_REDUCTION.
+
+Variable p: program.
+Hypothesis wt_p: wt_program p.
+Let ge := Genv.globalenv p.
+
+Definition exec_instr_prop
+ (f: function) (sp: val) (parent: frame)
+ (c1: code) (rs1: regset) (fr1: frame) (m1: mem)
+ (c2: code) (rs2: regset) (fr2: frame) (m2: mem) :=
+ forall (WTF: wt_function f)
+ (INCL: incl c1 f.(fn_code))
+ (WTRS: wt_regset rs1)
+ (WTFR: wt_frame fr1)
+ (WTPA: wt_frame parent),
+ incl c2 f.(fn_code) /\ wt_regset rs2 /\ wt_frame fr2.
+Definition exec_function_body_prop
+ (f: function) (parent: frame) (link ra: val)
+ (rs1: regset) (m1: mem) (rs2: regset) (m2: mem) :=
+ forall (WTF: wt_function f)
+ (WTRS: wt_regset rs1)
+ (WTPA: wt_frame parent)
+ (WTLINK: Val.has_type link Tint)
+ (WTRA: Val.has_type ra Tint),
+ wt_regset rs2.
+Definition exec_function_prop
+ (f: function) (parent: frame)
+ (rs1: regset) (m1: mem) (rs2: regset) (m2: mem) :=
+ forall (WTF: wt_function f)
+ (WTRS: wt_regset rs1)
+ (WTPA: wt_frame parent),
+ wt_regset rs2.
+
+Lemma subject_reduction:
+ (forall f sp parent c1 rs1 fr1 m1 c2 rs2 fr2 m2,
+ exec_instr ge f sp parent c1 rs1 fr1 m1 c2 rs2 fr2 m2 ->
+ exec_instr_prop f sp parent c1 rs1 fr1 m1 c2 rs2 fr2 m2)
+/\ (forall f sp parent c1 rs1 fr1 m1 c2 rs2 fr2 m2,
+ exec_instrs ge f sp parent c1 rs1 fr1 m1 c2 rs2 fr2 m2 ->
+ exec_instr_prop f sp parent c1 rs1 fr1 m1 c2 rs2 fr2 m2)
+/\ (forall f parent link ra rs1 m1 rs2 m2,
+ exec_function_body ge f parent link ra rs1 m1 rs2 m2 ->
+ exec_function_body_prop f parent link ra rs1 m1 rs2 m2)
+/\ (forall f parent rs1 m1 rs2 m2,
+ exec_function ge f parent rs1 m1 rs2 m2 ->
+ exec_function_prop f parent rs1 m1 rs2 m2).
+Proof.
+ apply exec_mutual_induction; red; intros;
+ try (generalize (wt_function_instrs _ WTF _ (INCL _ (in_eq _ _))); intro;
+ intuition eauto with coqlib).
+
+ apply wt_setreg; auto.
+ inversion H0. rewrite H2. apply wt_get_slot with fr (Int.signed ofs); auto.
+
+ inversion H0. eapply wt_set_slot; eauto.
+ rewrite <- H3. apply WTRS.
+
+ inversion H0. apply wt_setreg; auto.
+ rewrite H2. apply wt_get_slot with parent (Int.signed ofs); auto.
+
+ apply wt_setreg; auto. inversion H0.
+ simpl. subst args; subst op. simpl in H.
+ rewrite <- H2. replace v with (rs r1). apply WTRS. congruence.
+ subst args; subst op. simpl in H.
+ replace v with Vundef. simpl; auto. congruence.
+ replace (mreg_type res) with (snd (type_of_operation op)).
+ apply type_of_operation_sound with function ge rs##args sp; auto.
+ rewrite <- H6; reflexivity.
+
+ apply wt_setreg; auto. inversion H1. rewrite H7.
+ eapply type_of_chunk_correct; eauto.
+
+ apply H1; auto.
+ destruct ros; simpl in H.
+ apply (Genv.find_funct_prop wt_function wt_p H).
+ destruct (Genv.find_symbol ge i).
+ apply (Genv.find_funct_ptr_prop wt_function wt_p H).
+ discriminate.
+
+ apply incl_find_label with lbl; auto.
+ apply incl_find_label with lbl; auto.
+
+ tauto.
+ apply H0; auto.
+ generalize (H0 WTF INCL WTRS WTFR WTPA). intros [A [B C]].
+ apply H2; auto.
+
+ assert (WTFR2: wt_frame fr2).
+ eapply wt_set_slot; eauto.
+ eapply wt_set_slot; eauto.
+ apply wt_init_frame.
+ generalize (H3 WTF (incl_refl _) WTRS WTFR2 WTPA).
+ tauto.
+
+ apply (H0 Vzero Vzero). exact I. exact I. auto. auto. auto.
+ exact I. exact I.
+Qed.
+
+Lemma subject_reduction_instr:
+ forall f sp parent c1 rs1 fr1 m1 c2 rs2 fr2 m2,
+ exec_instr ge f sp parent c1 rs1 fr1 m1 c2 rs2 fr2 m2 ->
+ exec_instr_prop f sp parent c1 rs1 fr1 m1 c2 rs2 fr2 m2.
+Proof (proj1 subject_reduction).
+
+Lemma subject_reduction_instrs:
+ forall f sp parent c1 rs1 fr1 m1 c2 rs2 fr2 m2,
+ exec_instrs ge f sp parent c1 rs1 fr1 m1 c2 rs2 fr2 m2 ->
+ exec_instr_prop f sp parent c1 rs1 fr1 m1 c2 rs2 fr2 m2.
+Proof (proj1 (proj2 subject_reduction)).
+
+Lemma subject_reduction_function:
+ forall f parent rs1 m1 rs2 m2,
+ exec_function ge f parent rs1 m1 rs2 m2 ->
+ exec_function_prop f parent rs1 m1 rs2 m2.
+Proof (proj2 (proj2 (proj2 subject_reduction))).
+
+End SUBJECT_REDUCTION.
+
+(** * Preservation of the reserved frame slots during execution *)
+
+(** We now show another result useful for the proof of implication
+ between the two Mach semantics: well-typed functions do not
+ change the values of the back link and return address fields
+ of the frame slot (at offsets 0 and 4) during their execution.
+ Actually, we show that the whole reserved part of the frame
+ (between offsets 0 and 24) does not change. *)
+
+Definition link_invariant (fr1 fr2: frame) : Prop :=
+ forall pos v,
+ 0 <= pos < 20 ->
+ get_slot fr1 Tint pos v -> get_slot fr2 Tint pos v.
+
+Remark link_invariant_refl:
+ forall fr, link_invariant fr fr.
+Proof.
+ intros; red; auto.
+Qed.
+
+Lemma set_slot_link_invariant:
+ forall fr ty ofs v fr',
+ set_slot fr ty ofs v fr' ->
+ 24 <= ofs ->
+ link_invariant fr fr'.
+Proof.
+ induction 1. intros; red; intros.
+ inversion H1. constructor. auto. exact H3.
+ simpl contents. simpl low. symmetry. rewrite H4.
+ apply load_store_contents_other. simpl. simpl in H3.
+ omega.
+Qed.
+
+Lemma exec_instr_link_invariant:
+ forall ge f sp parent c1 rs1 fr1 m1 c2 rs2 fr2 m2,
+ exec_instr ge f sp parent c1 rs1 fr1 m1 c2 rs2 fr2 m2 ->
+ wt_function f ->
+ incl c1 f.(fn_code) ->
+ incl c2 f.(fn_code) /\ link_invariant fr1 fr2.
+Proof.
+ induction 1; intros;
+ (split; [eauto with coqlib | try (apply link_invariant_refl)]).
+ eapply set_slot_link_invariant; eauto.
+ generalize (wt_function_instrs _ H0 _ (H1 _ (in_eq _ _))); intro.
+ inversion H2. auto.
+ eapply incl_find_label; eauto.
+ eapply incl_find_label; eauto.
+Qed.
+
+Lemma exec_instrs_link_invariant:
+ forall ge f sp parent c1 rs1 fr1 m1 c2 rs2 fr2 m2,
+ exec_instrs ge f sp parent c1 rs1 fr1 m1 c2 rs2 fr2 m2 ->
+ wt_function f ->
+ incl c1 f.(fn_code) ->
+ incl c2 f.(fn_code) /\ link_invariant fr1 fr2.
+Proof.
+ induction 1; intros.
+ split. auto. apply link_invariant_refl.
+ eapply exec_instr_link_invariant; eauto.
+ generalize (IHexec_instrs1 H1 H2); intros [A B].
+ generalize (IHexec_instrs2 H1 A); intros [C D].
+ split. auto. red; auto.
+Qed.
+
diff --git a/backend/Main.v b/backend/Main.v
new file mode 100644
index 0000000..6647e26
--- /dev/null
+++ b/backend/Main.v
@@ -0,0 +1,307 @@
+(** The compiler back-end and its proof of semantic preservation *)
+
+(** Libraries. *)
+Require Import Coqlib.
+Require Import Maps.
+Require Import AST.
+Require Import Values.
+(** Languages (syntax and semantics). *)
+Require Csharpminor.
+Require Cminor.
+Require RTL.
+Require LTL.
+Require Linear.
+Require Mach.
+Require PPC.
+(** Translation passes. *)
+Require Cminorgen.
+Require RTLgen.
+Require Constprop.
+Require CSE.
+Require Allocation.
+Require Tunneling.
+Require Linearize.
+Require Stacking.
+Require PPCgen.
+(** Type systems. *)
+Require RTLtyping.
+Require LTLtyping.
+Require Lineartyping.
+Require Machtyping.
+(** Proofs of semantic preservation and typing preservation. *)
+Require Cminorgenproof.
+Require RTLgenproof.
+Require Constpropproof.
+Require CSEproof.
+Require Allocproof.
+Require Alloctyping.
+Require Tunnelingproof.
+Require Tunnelingtyping.
+Require Linearizeproof.
+Require Linearizetyping.
+Require Stackingproof.
+Require Stackingtyping.
+Require Machabstr2mach.
+Require PPCgenproof.
+
+(** * Composing the translation passes *)
+
+(** We first define useful monadic composition operators,
+ along with funny (but convenient) notations. *)
+
+Definition apply_total (A B: Set) (x: option A) (f: A -> B) : option B :=
+ match x with None => None | Some x1 => Some (f x1) end.
+
+Definition apply_partial (A B: Set)
+ (x: option A) (f: A -> option B) : option B :=
+ match x with None => None | Some x1 => f x1 end.
+
+Notation "a @@@ b" :=
+ (apply_partial _ _ a b) (at level 50, left associativity).
+Notation "a @@ b" :=
+ (apply_total _ _ a b) (at level 50, left associativity).
+
+(** We define two translation functions for whole programs: one starting with
+ a Csharpminor program, the other with a Cminor program. Both
+ translations produce PPC programs ready for pretty-printing and
+ assembling. Some front-ends will prefer to generate Csharpminor
+ (e.g. a C front-end) while some others (e.g. an ML compiler) might
+ find it more convenient to generate Cminor directly, bypassing
+ Csharpminor.
+
+ There are two ways to compose the compiler passes. The first translates
+ every function from the Cminor program from Cminor to RTL, then to LTL, etc,
+ all the way to PPC, and iterates this transformation for every function.
+ The second translates the whole Cminor program to a RTL program, then to
+ an LTL program, etc. We follow the first approach because it has lower
+ memory requirements.
+
+ The translation of a Cminor function to a PPC function is as follows. *)
+
+Definition transf_cminor_function (f: Cminor.function) : option PPC.code :=
+ Some f
+ @@@ RTLgen.transl_function
+ @@ Constprop.transf_function
+ @@ CSE.transf_function
+ @@@ Allocation.transf_function
+ @@ Tunneling.tunnel_function
+ @@ Linearize.transf_function
+ @@@ Stacking.transf_function
+ @@@ PPCgen.transf_function.
+
+(** And here is the translation for Csharpminor functions. *)
+
+Definition transf_csharpminor_function (f: Csharpminor.function) : option PPC.code :=
+ Some f
+ @@@ Cminorgen.transl_function
+ @@@ transf_cminor_function.
+
+(** The corresponding translations for whole program follow. *)
+
+Definition transf_cminor_program (p: Cminor.program) : option PPC.program :=
+ transform_partial_program transf_cminor_function p.
+
+Definition transf_csharpminor_program (p: Csharpminor.program) : option PPC.program :=
+ transform_partial_program transf_csharpminor_function p.
+
+(** * Equivalence with whole program transformations *)
+
+(** To prove semantic preservation for the whole compiler, it is easier to reason
+ over the second way to compose the compiler pass: the one that translate
+ whole programs through each compiler pass. We now define this second translation
+ and prove that it produces the same PPC programs as the first translation. *)
+
+Definition transf_cminor_program2 (p: Cminor.program) : option PPC.program :=
+ Some p
+ @@@ RTLgen.transl_program
+ @@ Constprop.transf_program
+ @@ CSE.transf_program
+ @@@ Allocation.transf_program
+ @@ Tunneling.tunnel_program
+ @@ Linearize.transf_program
+ @@@ Stacking.transf_program
+ @@@ PPCgen.transf_program.
+
+Definition transf_csharpminor_program2 (p: Csharpminor.program) : option PPC.program :=
+ Some p
+ @@@ Cminorgen.transl_program
+ @@@ transf_cminor_program2.
+
+Lemma transf_partial_program_compose:
+ forall (A B C: Set)
+ (f1: A -> option B) (f2: B -> option C)
+ (p: list (ident * A)),
+ transf_partial_program f1 p @@@ transf_partial_program f2 =
+ transf_partial_program (fun f => f1 f @@@ f2) p.
+Proof.
+ induction p. simpl. auto.
+ simpl. destruct a. destruct (f1 a).
+ simpl. simpl in IHp. destruct (transf_partial_program f1 p).
+ simpl. simpl in IHp. destruct (f2 b).
+ destruct (transf_partial_program f2 l).
+ rewrite <- IHp. auto.
+ rewrite <- IHp. auto.
+ auto.
+ simpl. rewrite <- IHp. simpl. destruct (f2 b); auto.
+ simpl. auto.
+Qed.
+
+Lemma transform_partial_program_compose:
+ forall (A B C: Set)
+ (f1: A -> option B) (f2: B -> option C)
+ (p: program A),
+ transform_partial_program f1 p @@@
+ (fun p' => transform_partial_program f2 p') =
+ transform_partial_program (fun f => f1 f @@@ f2) p.
+Proof.
+ unfold transform_partial_program; intros.
+ rewrite <- transf_partial_program_compose. simpl.
+ destruct (transf_partial_program f1 (prog_funct p)); simpl.
+ auto. auto.
+Qed.
+
+Lemma transf_program_partial_total:
+ forall (A B: Set) (f: A -> B) (l: list (ident * A)),
+ Some (AST.transf_program f l) =
+ AST.transf_partial_program (fun x => Some (f x)) l.
+Proof.
+ induction l. simpl. auto.
+ simpl. destruct a. rewrite <- IHl. auto.
+Qed.
+
+Lemma transform_program_partial_total:
+ forall (A B: Set) (f: A -> B) (p: program A),
+ Some (transform_program f p) =
+ transform_partial_program (fun x => Some (f x)) p.
+Proof.
+ intros. unfold transform_program, transform_partial_program.
+ rewrite <- transf_program_partial_total. auto.
+Qed.
+
+Lemma apply_total_transf_program:
+ forall (A B: Set) (f: A -> B) (x: option (program A)),
+ x @@ (fun p => transform_program f p) =
+ x @@@ (fun p => transform_partial_program (fun x => Some (f x)) p).
+Proof.
+ intros. unfold apply_total, apply_partial.
+ destruct x. apply transform_program_partial_total. auto.
+Qed.
+
+Lemma transf_cminor_program_equiv:
+ forall p, transf_cminor_program2 p = transf_cminor_program p.
+Proof.
+ intro. unfold transf_cminor_program, transf_cminor_program2, transf_cminor_function.
+ simpl.
+ unfold RTLgen.transl_program,
+ Constprop.transf_program, RTL.program.
+ rewrite apply_total_transf_program.
+ rewrite transform_partial_program_compose.
+ unfold CSE.transf_program, RTL.program.
+ rewrite apply_total_transf_program.
+ rewrite transform_partial_program_compose.
+ unfold Allocation.transf_program,
+ LTL.program, RTL.program.
+ rewrite transform_partial_program_compose.
+ unfold Tunneling.tunnel_program, LTL.program.
+ rewrite apply_total_transf_program.
+ rewrite transform_partial_program_compose.
+ unfold Linearize.transf_program, LTL.program, Linear.program.
+ rewrite apply_total_transf_program.
+ rewrite transform_partial_program_compose.
+ unfold Stacking.transf_program, Linear.program, Mach.program.
+ rewrite transform_partial_program_compose.
+ unfold PPCgen.transf_program, Mach.program, PPC.program.
+ rewrite transform_partial_program_compose.
+ reflexivity.
+Qed.
+
+Lemma transf_csharpminor_program_equiv:
+ forall p, transf_csharpminor_program2 p = transf_csharpminor_program p.
+Proof.
+ intros.
+ unfold transf_csharpminor_program2, transf_csharpminor_program, transf_csharpminor_function.
+ simpl.
+ replace transf_cminor_program2 with transf_cminor_program.
+ unfold transf_cminor_program, Cminorgen.transl_program, Cminor.program, PPC.program.
+ apply transform_partial_program_compose.
+ symmetry. apply extensionality. exact transf_cminor_program_equiv.
+Qed.
+
+(** * Semantic preservation *)
+
+(** We prove that the [transf_program2] translations preserve semantics. The proof
+ composes the semantic preservation results for each pass. *)
+
+Lemma transf_cminor_program2_correct:
+ forall p tp n,
+ transf_cminor_program2 p = Some tp ->
+ Cminor.exec_program p (Vint n) ->
+ PPC.exec_program tp (Vint n).
+Proof.
+ intros until n.
+ unfold transf_cminor_program2.
+ simpl. caseEq (RTLgen.transl_program p). intros p1 EQ1.
+ simpl. set (p2 := CSE.transf_program (Constprop.transf_program p1)).
+ caseEq (Allocation.transf_program p2). intros p3 EQ3.
+ simpl. set (p4 := Tunneling.tunnel_program p3).
+ set (p5 := Linearize.transf_program p4).
+ caseEq (Stacking.transf_program p5). intros p6 EQ6.
+ simpl. intros EQTP EXEC.
+ assert (WT3 : LTLtyping.wt_program p3).
+ apply Alloctyping.program_typing_preserved with p2. auto.
+ assert (WT4 : LTLtyping.wt_program p4).
+ unfold p4. apply Tunnelingtyping.program_typing_preserved. auto.
+ assert (WT5 : Lineartyping.wt_program p5).
+ unfold p5. apply Linearizetyping.program_typing_preserved. auto.
+ assert (WT6: Machtyping.wt_program p6).
+ apply Stackingtyping.program_typing_preserved with p5. auto. auto.
+ apply PPCgenproof.transf_program_correct with p6; auto.
+ apply Machabstr2mach.exec_program_equiv; auto.
+ apply Stackingproof.transl_program_correct with p5; auto.
+ unfold p5; apply Linearizeproof.transf_program_correct.
+ unfold p4; apply Tunnelingproof.transf_program_correct.
+ apply Allocproof.transl_program_correct with p2; auto.
+ unfold p2; apply CSEproof.transf_program_correct;
+ apply Constpropproof.transf_program_correct.
+ apply RTLgenproof.transl_program_correct with p; auto.
+ simpl; intros; discriminate.
+ simpl; intros; discriminate.
+ simpl; intros; discriminate.
+Qed.
+
+Lemma transf_csharpminor_program2_correct:
+ forall p tp n,
+ transf_csharpminor_program2 p = Some tp ->
+ Csharpminor.exec_program p (Vint n) ->
+ PPC.exec_program tp (Vint n).
+Proof.
+ intros until n; unfold transf_csharpminor_program2; simpl.
+ caseEq (Cminorgen.transl_program p).
+ simpl; intros p1 EQ1 EQ2 EXEC.
+ apply transf_cminor_program2_correct with p1. auto.
+ apply Cminorgenproof.transl_program_correct with p. auto.
+ assumption.
+ simpl; intros; discriminate.
+Qed.
+
+(** It follows that the whole compiler is semantic-preserving. *)
+
+Theorem transf_cminor_program_correct:
+ forall p tp n,
+ transf_cminor_program p = Some tp ->
+ Cminor.exec_program p (Vint n) ->
+ PPC.exec_program tp (Vint n).
+Proof.
+ intros. apply transf_cminor_program2_correct with p.
+ rewrite transf_cminor_program_equiv. assumption. assumption.
+Qed.
+
+Theorem transf_csharpminor_program_correct:
+ forall p tp n,
+ transf_csharpminor_program p = Some tp ->
+ Csharpminor.exec_program p (Vint n) ->
+ PPC.exec_program tp (Vint n).
+Proof.
+ intros. apply transf_csharpminor_program2_correct with p.
+ rewrite transf_csharpminor_program_equiv. assumption. assumption.
+Qed.
diff --git a/backend/Mem.v b/backend/Mem.v
new file mode 100644
index 0000000..26d4c49
--- /dev/null
+++ b/backend/Mem.v
@@ -0,0 +1,2253 @@
+(** This file develops the memory model that is used in the dynamic
+ semantics of all the languages of the compiler back-end.
+ It defines a type [mem] of memory states, the following 4 basic
+ operations over memory states, and their properties:
+- [alloc]: allocate a fresh memory block;
+- [free]: invalidate a memory block;
+- [load]: read a memory chunk at a given address;
+- [store]: store a memory chunk at a given address.
+*)
+
+Require Import Coqlib.
+Require Import Maps.
+Require Import AST.
+Require Import Integers.
+Require Import Floats.
+Require Import Values.
+
+(** * Structure of memory states *)
+
+(** A memory state is organized in several disjoint blocks. Each block
+ has a low and a high bound that defines its size. Each block map
+ byte offsets to the contents of this byte. *)
+
+Definition update (A: Set) (x: Z) (v: A) (f: Z -> A) : Z -> A :=
+ fun y => if zeq y x then v else f y.
+
+Implicit Arguments update [A].
+
+Lemma update_s:
+ forall (A: Set) (x: Z) (v: A) (f: Z -> A),
+ update x v f x = v.
+Proof.
+ intros; unfold update. apply zeq_true.
+Qed.
+
+Lemma update_o:
+ forall (A: Set) (x: Z) (v: A) (f: Z -> A) (y: Z),
+ x <> y -> update x v f y = f y.
+Proof.
+ intros; unfold update. apply zeq_false; auto.
+Qed.
+
+(** The possible contents of a byte-sized memory cell. To give intuitions,
+ a 4-byte value [v] stored at offset [d] will be represented by
+ the content [Datum32 v] at offset [d] and [Cont] at offsets [d+1],
+ [d+2] and [d+3]. The [Cont] contents enable detecting future writes
+ that would overlap partially the 4-byte value. *)
+
+Inductive content : Set :=
+ | Undef: content (**r undefined contents *)
+ | Datum8: val -> content (**r a value that fits in 1 byte *)
+ | Datum16: val -> content (**r first byte of a 2-byte value *)
+ | Datum32: val -> content (**r first byte of a 4-byte value *)
+ | Datum64: val -> content (**r first byte of a 8-byte value *)
+ | Cont: content. (**r continuation bytes for a multi-byte value *)
+
+Definition contentmap : Set := Z -> content.
+
+(** A memory block comprises the dimensions of the block (low and high bounds)
+ plus a mapping from byte offsets to contents. For technical reasons,
+ we also carry around a proof that the mapping is equal to [Undef]
+ outside the range of allowed byte offsets. *)
+
+Record block_contents : Set := mkblock {
+ low: Z;
+ high: Z;
+ contents: contentmap;
+ undef_outside: forall ofs, ofs < low \/ ofs >= high -> contents ofs = Undef
+}.
+
+(** A memory state is a mapping from block addresses (represented by [Z]
+ integers) to blocks. We also maintain the address of the next
+ unallocated block, and a proof that this address is positive. *)
+
+Record mem : Set := mkmem {
+ blocks: Z -> block_contents;
+ nextblock: block;
+ nextblock_pos: nextblock > 0
+}.
+
+(** * Operations on memory stores *)
+
+(** Memory reads and writes are performed by quantities called memory chunks,
+ encoding the type, size and signedness of the chunk being addressed.
+ It is useful to extract only the size information as given by the
+ following [memory_size] type. *)
+
+Inductive memory_size : Set :=
+ | Size8: memory_size
+ | Size16: memory_size
+ | Size32: memory_size
+ | Size64: memory_size.
+
+Definition size_mem (sz: memory_size) :=
+ match sz with
+ | Size8 => 1
+ | Size16 => 2
+ | Size32 => 4
+ | Size64 => 8
+ end.
+
+Definition mem_chunk (chunk: memory_chunk) :=
+ match chunk with
+ | Mint8signed => Size8
+ | Mint8unsigned => Size8
+ | Mint16signed => Size16
+ | Mint16unsigned => Size16
+ | Mint32 => Size32
+ | Mfloat32 => Size32
+ | Mfloat64 => Size64
+ end.
+
+Definition size_chunk (chunk: memory_chunk) := size_mem (mem_chunk chunk).
+
+(** The initial store. *)
+
+Remark one_pos: 1 > 0.
+Proof. omega. Qed.
+
+Remark undef_undef_outside:
+ forall lo hi ofs, ofs < lo \/ ofs >= hi -> (fun y => Undef) ofs = Undef.
+Proof.
+ auto.
+Qed.
+
+Definition empty_block (lo hi: Z) : block_contents :=
+ mkblock lo hi (fun y => Undef) (undef_undef_outside lo hi).
+
+Definition empty: mem :=
+ mkmem (fun x => empty_block 0 0) 1 one_pos.
+
+Definition nullptr: block := 0.
+
+(** Allocation of a fresh block with the given bounds. Return an updated
+ memory state and the address of the fresh block, which initially contains
+ undefined cells. Note that allocation never fails: we model an
+ infinite memory. *)
+
+Remark succ_nextblock_pos:
+ forall m, Zsucc m.(nextblock) > 0.
+Proof. intro. generalize (nextblock_pos m). omega. Qed.
+
+Definition alloc (m: mem) (lo hi: Z) :=
+ (mkmem (update m.(nextblock)
+ (empty_block lo hi)
+ m.(blocks))
+ (Zsucc m.(nextblock))
+ (succ_nextblock_pos m),
+ m.(nextblock)).
+
+(** Freeing a block. Return the updated memory state where the given
+ block address has been invalidated: future reads and writes to this
+ address will fail. Note that we make no attempt to return the block
+ to an allocation pool: the given block address will never be allocated
+ later. *)
+
+Definition free (m: mem) (b: block) :=
+ mkmem (update b
+ (empty_block 0 0)
+ m.(blocks))
+ m.(nextblock)
+ m.(nextblock_pos).
+
+(** Freeing of a list of blocks. *)
+
+Definition free_list (m:mem) (l:list block) :=
+ List.fold_right (fun b m => free m b) m l.
+
+(** Return the low and high bounds for the given block address.
+ Those bounds are 0 for freed or not yet allocated address. *)
+
+Definition low_bound (m: mem) (b: block) :=
+ low (m.(blocks) b).
+Definition high_bound (m: mem) (b: block) :=
+ high (m.(blocks) b).
+
+(** A block address is valid if it was previously allocated. It remains valid
+ even after being freed. *)
+
+Definition valid_block (m: mem) (b: block) :=
+ b < m.(nextblock).
+
+(** Reading and writing [N] adjacent locations in a [contentmap].
+
+ We define two functions and prove some of their properties:
+ - [getN n ofs m] returns the datum at offset [ofs] in block contents [m]
+ after checking that the contents of offsets [ofs+1] to [ofs+n+1]
+ are [Cont].
+ - [setN n ofs v m] updates the block contents [m], storing the content [v]
+ at offset [ofs] and the content [Cont] at offsets [ofs+1] to [ofs+n+1].
+ *)
+
+Fixpoint check_cont (n: nat) (p: Z) (m: contentmap) {struct n} : bool :=
+ match n with
+ | O => true
+ | S n1 =>
+ match m p with
+ | Cont => check_cont n1 (p + 1) m
+ | _ => false
+ end
+ end.
+
+Definition getN (n: nat) (p: Z) (m: contentmap) : content :=
+ if check_cont n (p + 1) m then m p else Undef.
+
+Fixpoint set_cont (n: nat) (p: Z) (m: contentmap) {struct n} : contentmap :=
+ match n with
+ | O => m
+ | S n1 => update p Cont (set_cont n1 (p + 1) m)
+ end.
+
+Definition setN (n: nat) (p: Z) (v: content) (m: contentmap) : contentmap :=
+ update p v (set_cont n (p + 1) m).
+
+Lemma check_cont_true:
+ forall n p m,
+ (forall q, p <= q < p + Z_of_nat n -> m q = Cont) ->
+ check_cont n p m = true.
+Proof.
+ induction n; intros.
+ reflexivity.
+ simpl. rewrite H. apply IHn.
+ intros. apply H. rewrite inj_S. omega.
+ rewrite inj_S. omega.
+Qed.
+
+Hint Resolve check_cont_true.
+
+Lemma check_cont_inv:
+ forall n p m,
+ check_cont n p m = true ->
+ (forall q, p <= q < p + Z_of_nat n -> m q = Cont).
+Proof.
+ induction n; intros until m.
+ unfold Z_of_nat. intros. omegaContradiction.
+ unfold check_cont; fold check_cont.
+ caseEq (m p); intros; try discriminate.
+ assert (p = q \/ p + 1 <= q < (p + 1) + Z_of_nat n).
+ rewrite inj_S in H1. omega.
+ elim H2; intro.
+ subst q. auto.
+ apply IHn with (p + 1); auto.
+Qed.
+
+Hint Resolve check_cont_inv.
+
+Lemma check_cont_false:
+ forall n p q m,
+ p <= q < p + Z_of_nat n ->
+ m q <> Cont ->
+ check_cont n p m = false.
+Proof.
+ intros. caseEq (check_cont n p m); intro.
+ generalize (check_cont_inv _ _ _ H1 q H). intro. contradiction.
+ auto.
+Qed.
+
+Hint Resolve check_cont_false.
+
+Lemma set_cont_inside:
+ forall n p m q,
+ p <= q < p + Z_of_nat n ->
+ (set_cont n p m) q = Cont.
+Proof.
+ induction n; intros.
+ unfold Z_of_nat in H. omegaContradiction.
+ simpl.
+ assert (p = q \/ p + 1 <= q < (p + 1) + Z_of_nat n).
+ rewrite inj_S in H. omega.
+ elim H0; intro.
+ subst q. apply update_s.
+ rewrite update_o. apply IHn. auto.
+ red; intro; subst q. omega.
+Qed.
+
+Hint Resolve set_cont_inside.
+
+Lemma set_cont_outside:
+ forall n p m q,
+ q < p \/ p + Z_of_nat n <= q ->
+ (set_cont n p m) q = m q.
+Proof.
+ induction n; intros.
+ simpl. auto.
+ simpl. rewrite inj_S in H.
+ rewrite update_o. apply IHn. omega. omega.
+Qed.
+
+Hint Resolve set_cont_outside.
+
+Lemma getN_setN_same:
+ forall n p v m,
+ getN n p (setN n p v m) = v.
+Proof.
+ intros. unfold getN, setN.
+ rewrite check_cont_true. apply update_s.
+ intros. rewrite update_o. apply set_cont_inside. auto.
+ omega.
+Qed.
+
+Hint Resolve getN_setN_same.
+
+Lemma getN_setN_other:
+ forall n1 n2 p1 p2 v m,
+ p1 + Z_of_nat n1 < p2 \/ p2 + Z_of_nat n2 < p1 ->
+ getN n2 p2 (setN n1 p1 v m) = getN n2 p2 m.
+Proof.
+ intros. unfold getN, setN.
+ caseEq (check_cont n2 (p2 + 1) m); intro.
+ rewrite check_cont_true. rewrite update_o.
+ apply set_cont_outside. omega. omega.
+ intros. rewrite update_o. rewrite set_cont_outside.
+ eapply check_cont_inv. eauto. auto.
+ omega. omega.
+ caseEq (check_cont n2 (p2 + 1) (update p1 v (set_cont n1 (p1 + 1) m))); intros.
+ assert (check_cont n2 (p2 + 1) m = true).
+ apply check_cont_true. intros.
+ generalize (check_cont_inv _ _ _ H1 q H2).
+ rewrite update_o. rewrite set_cont_outside. auto. omega. omega.
+ rewrite H0 in H2; discriminate.
+ auto.
+Qed.
+
+Hint Resolve getN_setN_other.
+
+Lemma getN_setN_overlap:
+ forall n1 n2 p1 p2 v m,
+ p1 <> p2 ->
+ p1 + Z_of_nat n1 >= p2 -> p2 + Z_of_nat n2 >= p1 ->
+ v <> Cont ->
+ getN n2 p2 (setN n1 p1 v m) = Cont \/
+ getN n2 p2 (setN n1 p1 v m) = Undef.
+Proof.
+ intros. unfold getN.
+ caseEq (check_cont n2 (p2 + 1) (setN n1 p1 v m)); intro.
+ case (zlt p2 p1); intro.
+ assert (p2 + 1 <= p1 < p2 + 1 + Z_of_nat n2). omega.
+ generalize (check_cont_inv _ _ _ H3 p1 H4).
+ unfold setN. rewrite update_s. intro. contradiction.
+ left. unfold setN. rewrite update_o.
+ apply set_cont_inside. omega. auto.
+ right; auto.
+Qed.
+
+Hint Resolve getN_setN_overlap.
+
+Lemma getN_setN_mismatch:
+ forall n1 n2 p v m,
+ getN n2 p (setN n1 p v m) = v \/ getN n2 p (setN n1 p v m) = Undef.
+Proof.
+ intros. unfold getN.
+ caseEq (check_cont n2 (p + 1) (setN n1 p v m)); intro.
+ left. unfold setN. apply update_s.
+ right. auto.
+Qed.
+
+Hint Resolve getN_setN_mismatch.
+
+Lemma getN_init:
+ forall n p,
+ getN n p (fun y => Undef) = Undef.
+Proof.
+ intros. unfold getN.
+ case (check_cont n (p + 1) (fun y => Undef)); auto.
+Qed.
+
+Hint Resolve getN_init.
+
+(** The following function checks whether accessing the given memory chunk
+ at the given offset in the given block respects the bounds of the block. *)
+
+Definition in_bounds (chunk: memory_chunk) (ofs: Z) (c: block_contents) :
+ {c.(low) <= ofs /\ ofs + size_chunk chunk <= c.(high)}
+ + {c.(low) > ofs \/ ofs + size_chunk chunk > c.(high)} :=
+ match zle c.(low) ofs, zle (ofs + size_chunk chunk) c.(high) with
+ | left P1, left P2 => left _ (conj P1 P2)
+ | left P1, right P2 => right _ (or_intror _ P2)
+ | right P1, _ => right _ (or_introl _ P1)
+ end.
+
+Lemma in_bounds_holds:
+ forall (chunk: memory_chunk) (ofs: Z) (c: block_contents)
+ (A: Set) (a b: A),
+ c.(low) <= ofs -> ofs + size_chunk chunk <= c.(high) ->
+ (if in_bounds chunk ofs c then a else b) = a.
+Proof.
+ intros. case (in_bounds chunk ofs c); intro.
+ auto.
+ omegaContradiction.
+Qed.
+
+Lemma in_bounds_exten:
+ forall (chunk: memory_chunk) (ofs: Z) (c: block_contents) (x: contentmap) P,
+ in_bounds chunk ofs (mkblock (low c) (high c) x P) =
+ in_bounds chunk ofs c.
+Proof.
+ intros; reflexivity.
+Qed.
+
+Hint Resolve in_bounds_holds in_bounds_exten.
+
+(** [valid_pointer] holds if the given block address is valid and the
+ given offset falls within the bounds of the corresponding block. *)
+
+Definition valid_pointer (m: mem) (b: block) (ofs: Z) : bool :=
+ if zlt b m.(nextblock) then
+ (let c := m.(blocks) b in
+ if zle c.(low) ofs then if zlt ofs c.(high) then true else false
+ else false)
+ else false.
+
+(** Read a quantity of size [sz] at offset [ofs] in block contents [c].
+ Return [Vundef] if the requested size does not match that of the
+ current contents, or if the following offsets do not contain [Cont].
+ The first check captures a size mismatch between the read and the
+ latest write at this offset. The second check captures partial overwriting
+ of the latest write at this offset by a more recent write at a nearby
+ offset. *)
+
+Definition load_contents (sz: memory_size) (c: contentmap) (ofs: Z) : val :=
+ match sz with
+ | Size8 =>
+ match getN 0%nat ofs c with
+ | Datum8 n => n
+ | _ => Vundef
+ end
+ | Size16 =>
+ match getN 1%nat ofs c with
+ | Datum16 n => n
+ | _ => Vundef
+ end
+ | Size32 =>
+ match getN 3%nat ofs c with
+ | Datum32 n => n
+ | _ => Vundef
+ end
+ | Size64 =>
+ match getN 7%nat ofs c with
+ | Datum64 n => n
+ | _ => Vundef
+ end
+ end.
+
+(** [load chunk m b ofs] perform a read in memory state [m], at address
+ [b] and offset [ofs]. [None] is returned if the address is invalid
+ or the memory access is out of bounds. *)
+
+Definition load (chunk: memory_chunk) (m: mem) (b: block) (ofs: Z)
+ : option val :=
+ if zlt b m.(nextblock) then
+ (let c := m.(blocks) b in
+ if in_bounds chunk ofs c
+ then Some (Val.load_result chunk
+ (load_contents (mem_chunk chunk) c.(contents) ofs))
+ else None)
+ else
+ None.
+
+(** [loadv chunk m addr] is similar, but the address and offset are given
+ as a single value [addr], which must be a pointer value. *)
+
+Definition loadv (chunk: memory_chunk) (m: mem) (addr: val) : option val :=
+ match addr with
+ | Vptr b ofs => load chunk m b (Int.signed ofs)
+ | _ => None
+ end.
+
+Theorem load_in_bounds:
+ forall (chunk: memory_chunk) (m: mem) (b: block) (ofs: Z),
+ valid_block m b ->
+ low_bound m b <= ofs ->
+ ofs + size_chunk chunk <= high_bound m b ->
+ exists v, load chunk m b ofs = Some v.
+Proof.
+ intros. unfold load. rewrite zlt_true; auto.
+ rewrite in_bounds_holds.
+ exists (Val.load_result chunk
+ (load_contents (mem_chunk chunk)
+ (contents (m.(blocks) b))
+ ofs)).
+ auto.
+ exact H0. exact H1.
+Qed.
+
+Lemma load_inv:
+ forall (chunk: memory_chunk) (m: mem) (b: block) (ofs: Z) (v: val),
+ load chunk m b ofs = Some v ->
+ let c := m.(blocks) b in
+ b < m.(nextblock) /\
+ c.(low) <= ofs /\
+ ofs + size_chunk chunk <= c.(high) /\
+ Val.load_result chunk (load_contents (mem_chunk chunk) c.(contents) ofs) = v.
+Proof.
+ intros until v; unfold load.
+ case (zlt b (nextblock m)); intro.
+ set (c := m.(blocks) b).
+ case (in_bounds chunk ofs c).
+ intuition congruence.
+ intros; discriminate.
+ intros; discriminate.
+Qed.
+Hint Resolve load_in_bounds load_inv.
+
+(* Write the value [v] with size [sz] at offset [ofs] in block contents [c].
+ Return updated block contents. [Cont] contents are stored at the following
+ offsets. *)
+
+Definition store_contents (sz: memory_size) (c: contentmap)
+ (ofs: Z) (v: val) : contentmap :=
+ match sz with
+ | Size8 =>
+ setN 0%nat ofs (Datum8 v) c
+ | Size16 =>
+ setN 1%nat ofs (Datum16 v) c
+ | Size32 =>
+ setN 3%nat ofs (Datum32 v) c
+ | Size64 =>
+ setN 7%nat ofs (Datum64 v) c
+ end.
+
+Remark store_contents_undef_outside:
+ forall sz c ofs v lo hi,
+ lo <= ofs /\ ofs + size_mem sz <= hi ->
+ (forall x, x < lo \/ x >= hi -> c x = Undef) ->
+ (forall x, x < lo \/ x >= hi ->
+ store_contents sz c ofs v x = Undef).
+Proof.
+ intros until hi; intros [LO HI] UO.
+ assert (forall n d x,
+ ofs + (1 + Z_of_nat n) <= hi ->
+ x < lo \/ x >= hi ->
+ setN n ofs d c x = Undef).
+ intros. unfold setN. rewrite update_o.
+ transitivity (c x). apply set_cont_outside. omega.
+ apply UO. omega. omega.
+ unfold store_contents; destruct sz; unfold size_mem in HI;
+ intros; apply H; auto; simpl Z_of_nat; auto.
+Qed.
+
+Definition unchecked_store
+ (chunk: memory_chunk) (m: mem) (b: block)
+ (ofs: Z) (v: val)
+ (P: (m.(blocks) b).(low) <= ofs /\
+ ofs + size_chunk chunk <= (m.(blocks) b).(high)) : mem :=
+ let c := m.(blocks) b in
+ mkmem
+ (update b
+ (mkblock c.(low) c.(high)
+ (store_contents (mem_chunk chunk) c.(contents) ofs v)
+ (store_contents_undef_outside (mem_chunk chunk) c.(contents)
+ ofs v _ _ P c.(undef_outside)))
+ m.(blocks))
+ m.(nextblock)
+ m.(nextblock_pos).
+
+(** [store chunk m b ofs v] perform a write in memory state [m].
+ Value [v] is stored at address [b] and offset [ofs].
+ Return the updated memory store, or [None] if the address is invalid
+ or the memory access is out of bounds. *)
+
+Definition store (chunk: memory_chunk) (m: mem) (b: block)
+ (ofs: Z) (v: val) : option mem :=
+ if zlt b m.(nextblock) then
+ match in_bounds chunk ofs (m.(blocks) b) with
+ | left P => Some(unchecked_store chunk m b ofs v P)
+ | right _ => None
+ end
+ else
+ None.
+
+(** [storev chunk m addr v] is similar, but the address and offset are given
+ as a single value [addr], which must be a pointer value. *)
+
+Definition storev (chunk: memory_chunk) (m: mem) (addr v: val) : option mem :=
+ match addr with
+ | Vptr b ofs => store chunk m b (Int.signed ofs) v
+ | _ => None
+ end.
+
+Theorem store_in_bounds:
+ forall (chunk: memory_chunk) (m: mem) (b: block) (ofs: Z) (v: val),
+ valid_block m b ->
+ low_bound m b <= ofs ->
+ ofs + size_chunk chunk <= high_bound m b ->
+ exists m', store chunk m b ofs v = Some m'.
+Proof.
+ intros. unfold store.
+ rewrite zlt_true; auto.
+ case (in_bounds chunk ofs (blocks m b)); intro P.
+ exists (unchecked_store chunk m b ofs v P). reflexivity.
+ unfold low_bound in H0. unfold high_bound in H1. omegaContradiction.
+Qed.
+
+Lemma store_inv:
+ forall (chunk: memory_chunk) (m m': mem) (b: block) (ofs: Z) (v: val),
+ store chunk m b ofs v = Some m' ->
+ let c := m.(blocks) b in
+ b < m.(nextblock) /\
+ c.(low) <= ofs /\
+ ofs + size_chunk chunk <= c.(high) /\
+ m'.(nextblock) = m.(nextblock) /\
+ exists P, m'.(blocks) =
+ update b (mkblock c.(low) c.(high)
+ (store_contents (mem_chunk chunk) c.(contents) ofs v) P)
+ m.(blocks).
+Proof.
+ intros until v; unfold store.
+ case (zlt b (nextblock m)); intro.
+ set (c := m.(blocks) b).
+ case (in_bounds chunk ofs c).
+ intros; injection H; intro; subst m'. simpl.
+ intuition. fold c.
+ exists (store_contents_undef_outside (mem_chunk chunk)
+ (contents c) ofs v (low c) (high c) a (undef_outside c)).
+ auto.
+ intros; discriminate.
+ intros; discriminate.
+Qed.
+
+Hint Resolve store_in_bounds store_inv.
+
+(** * Properties of the memory operations *)
+
+(** ** Properties related to block validity *)
+
+Lemma valid_not_valid_diff:
+ forall m b b', valid_block m b -> ~(valid_block m b') -> b <> b'.
+Proof.
+ intros; red; intros. subst b'. contradiction.
+Qed.
+
+Theorem fresh_block_alloc:
+ forall (m1 m2: mem) (lo hi: Z) (b: block),
+ alloc m1 lo hi = (m2, b) -> ~(valid_block m1 b).
+Proof.
+ intros. injection H; intros; subst b.
+ unfold valid_block. omega.
+Qed.
+
+Theorem valid_new_block:
+ forall (m1 m2: mem) (lo hi: Z) (b: block),
+ alloc m1 lo hi = (m2, b) -> valid_block m2 b.
+Proof.
+ unfold alloc, valid_block; intros.
+ injection H; intros. subst b; subst m2; simpl. omega.
+Qed.
+
+Theorem valid_block_alloc:
+ forall (m1 m2: mem) (lo hi: Z) (b b': block),
+ alloc m1 lo hi = (m2, b') ->
+ valid_block m1 b -> valid_block m2 b.
+Proof.
+ unfold alloc, valid_block; intros.
+ injection H; intros. subst m2; simpl. omega.
+Qed.
+
+Theorem valid_block_store:
+ forall (chunk: memory_chunk) (m1 m2: mem) (b b': block) (ofs: Z) (v: val),
+ store chunk m1 b' ofs v = Some m2 ->
+ valid_block m1 b -> valid_block m2 b.
+Proof.
+ intros. generalize (store_inv _ _ _ _ _ _ H).
+ intros [A [B [C [D [P E]]]]].
+ red. rewrite D. exact H0.
+Qed.
+
+Theorem valid_block_free:
+ forall (m: mem) (b b': block),
+ valid_block m b -> valid_block (free m b') b.
+Proof.
+ unfold valid_block, free; intros.
+ simpl. auto.
+Qed.
+
+(** ** Properties related to [alloc] *)
+
+Theorem load_alloc_other:
+ forall (chunk: memory_chunk) (m1 m2: mem)
+ (b b': block) (ofs lo hi: Z) (v: val),
+ alloc m1 lo hi = (m2, b') ->
+ load chunk m1 b ofs = Some v ->
+ load chunk m2 b ofs = Some v.
+Proof.
+ unfold alloc; intros.
+ injection H; intros; subst m2; clear H.
+ generalize (load_inv _ _ _ _ _ H0).
+ intros (A, (B, (C, D))).
+ unfold load; simpl.
+ rewrite zlt_true.
+ repeat (rewrite update_o).
+ rewrite in_bounds_holds. congruence. auto. auto.
+ omega. omega.
+Qed.
+
+Lemma load_contents_init:
+ forall (sz: memory_size) (ofs: Z),
+ load_contents sz (fun y => Undef) ofs = Vundef.
+Proof.
+ intros. destruct sz; reflexivity.
+Qed.
+
+Theorem load_alloc_same:
+ forall (chunk: memory_chunk) (m1 m2: mem)
+ (b b': block) (ofs lo hi: Z) (v: val),
+ alloc m1 lo hi = (m2, b') ->
+ load chunk m2 b' ofs = Some v ->
+ v = Vundef.
+Proof.
+ unfold alloc; intros.
+ injection H; intros; subst m2; clear H.
+ generalize (load_inv _ _ _ _ _ H0).
+ simpl. rewrite H1. rewrite update_s. simpl. intros (A, (B, (C, D))).
+ rewrite <- D. rewrite load_contents_init.
+ destruct chunk; reflexivity.
+Qed.
+
+Theorem low_bound_alloc:
+ forall (m1 m2: mem) (b b': block) (lo hi: Z),
+ alloc m1 lo hi = (m2, b') ->
+ low_bound m2 b = if zeq b b' then lo else low_bound m1 b.
+Proof.
+ unfold alloc; intros.
+ injection H; intros; subst m2; clear H.
+ unfold low_bound; simpl.
+ unfold update.
+ subst b'.
+ case (zeq b (nextblock m1)); reflexivity.
+Qed.
+
+Theorem high_bound_alloc:
+ forall (m1 m2: mem) (b b': block) (lo hi: Z),
+ alloc m1 lo hi = (m2, b') ->
+ high_bound m2 b = if zeq b b' then hi else high_bound m1 b.
+Proof.
+ unfold alloc; intros.
+ injection H; intros; subst m2; clear H.
+ unfold high_bound; simpl.
+ unfold update.
+ subst b'.
+ case (zeq b (nextblock m1)); reflexivity.
+Qed.
+
+Theorem store_alloc:
+ forall (chunk: memory_chunk) (m1 m2: mem) (b: block) (ofs lo hi: Z) (v: val),
+ alloc m1 lo hi = (m2, b) ->
+ lo <= ofs -> ofs + size_chunk chunk <= hi ->
+ exists m2', store chunk m2 b ofs v = Some m2'.
+Proof.
+ unfold alloc; intros.
+ injection H; intros.
+ assert (A: b < m2.(nextblock)).
+ subst m2; subst b; simpl; omega.
+ assert (B: low_bound m2 b <= ofs).
+ subst m2; subst b. unfold low_bound; simpl. rewrite update_s.
+ simpl. assumption.
+ assert (C: ofs + size_chunk chunk <= high_bound m2 b).
+ subst m2; subst b. unfold high_bound; simpl. rewrite update_s.
+ simpl. assumption.
+ exact (store_in_bounds chunk m2 b ofs v A B C).
+Qed.
+
+Hint Resolve store_alloc high_bound_alloc low_bound_alloc load_alloc_same
+load_contents_init load_alloc_other.
+
+(** ** Properties related to [free] *)
+
+Theorem load_free:
+ forall (chunk: memory_chunk) (m: mem) (b bf: block) (ofs: Z),
+ b <> bf ->
+ load chunk (free m bf) b ofs = load chunk m b ofs.
+Proof.
+ intros. unfold free, load; simpl.
+ case (zlt b (nextblock m)).
+ repeat (rewrite update_o; auto).
+ reflexivity.
+Qed.
+
+Theorem low_bound_free:
+ forall (m: mem) (b bf: block),
+ b <> bf ->
+ low_bound (free m bf) b = low_bound m b.
+Proof.
+ intros. unfold free, low_bound; simpl.
+ rewrite update_o; auto.
+Qed.
+
+Theorem high_bound_free:
+ forall (m: mem) (b bf: block),
+ b <> bf ->
+ high_bound (free m bf) b = high_bound m b.
+Proof.
+ intros. unfold free, high_bound; simpl.
+ rewrite update_o; auto.
+Qed.
+Hint Resolve load_free low_bound_free high_bound_free.
+
+(** ** Properties related to [store] *)
+
+Lemma store_is_in_bounds:
+ forall chunk m1 b ofs v m2,
+ store chunk m1 b ofs v = Some m2 ->
+ low_bound m1 b <= ofs /\ ofs + size_chunk chunk <= high_bound m1 b.
+Proof.
+ intros. generalize (store_inv _ _ _ _ _ _ H).
+ intros [A [B [C [P D]]]].
+ unfold low_bound, high_bound. tauto.
+Qed.
+
+Lemma load_store_contents_same:
+ forall (sz: memory_size) (c: contentmap) (ofs: Z) (v: val),
+ load_contents sz (store_contents sz c ofs v) ofs = v.
+Proof.
+ intros until v.
+ unfold load_contents, store_contents in |- *; case sz;
+ rewrite getN_setN_same; reflexivity.
+Qed.
+
+Theorem load_store_same:
+ forall (chunk: memory_chunk) (m1 m2: mem) (b: block) (ofs: Z) (v: val),
+ store chunk m1 b ofs v = Some m2 ->
+ load chunk m2 b ofs = Some (Val.load_result chunk v).
+Proof.
+ intros.
+ generalize (store_inv _ _ _ _ _ _ H).
+ intros (A, (B, (C, (D, (P, E))))).
+ unfold load. rewrite D.
+ rewrite zlt_true; auto. rewrite E.
+ repeat (rewrite update_s). simpl.
+ rewrite in_bounds_exten. rewrite in_bounds_holds; auto.
+ rewrite load_store_contents_same; auto.
+Qed.
+
+Lemma load_store_contents_other:
+ forall (sz1 sz2: memory_size) (c: contentmap)
+ (ofs1 ofs2: Z) (v: val),
+ ofs2 + size_mem sz2 <= ofs1 \/ ofs1 + size_mem sz1 <= ofs2 ->
+ load_contents sz2 (store_contents sz1 c ofs1 v) ofs2 =
+ load_contents sz2 c ofs2.
+Proof.
+ intros until v.
+ unfold size_mem, store_contents, load_contents;
+ case sz1; case sz2; intros;
+ (rewrite getN_setN_other;
+ [reflexivity | simpl Z_of_nat; omega]).
+Qed.
+
+Theorem load_store_other:
+ forall (chunk1 chunk2: memory_chunk) (m1 m2: mem)
+ (b1 b2: block) (ofs1 ofs2: Z) (v: val),
+ store chunk1 m1 b1 ofs1 v = Some m2 ->
+ b1 <> b2
+ \/ ofs2 + size_chunk chunk2 <= ofs1
+ \/ ofs1 + size_chunk chunk1 <= ofs2 ->
+ load chunk2 m2 b2 ofs2 = load chunk2 m1 b2 ofs2.
+Proof.
+ intros.
+ generalize (store_inv _ _ _ _ _ _ H).
+ intros (A, (B, (C, (D, (P, E))))).
+ unfold load. rewrite D.
+ case (zlt b2 (nextblock m1)); intro.
+ rewrite E; unfold update; case (zeq b2 b1); intro; simpl.
+ subst b2. rewrite in_bounds_exten.
+ rewrite load_store_contents_other. auto.
+ tauto.
+ reflexivity.
+ reflexivity.
+Qed.
+
+Ltac LSCO :=
+ match goal with
+ | |- (match getN ?sz2 ?ofs2 (setN ?sz1 ?ofs1 ?v ?c) with
+ | Undef => _
+ | Datum8 _ => _
+ | Datum16 _ => _
+ | Datum32 _ => _
+ | Datum64 _ => _
+ | Cont => _
+ end = _) =>
+ elim (getN_setN_overlap sz1 sz2 ofs1 ofs2 v c);
+ [ let H := fresh in (intro H; rewrite H; reflexivity)
+ | let H := fresh in (intro H; rewrite H; reflexivity)
+ | assumption
+ | simpl Z_of_nat; omega
+ | simpl Z_of_nat; omega
+ | discriminate ]
+ end.
+
+Lemma load_store_contents_overlap:
+ forall (sz1 sz2: memory_size) (c: contentmap)
+ (ofs1 ofs2: Z) (v: val),
+ ofs1 <> ofs2 ->
+ ofs2 + size_mem sz2 > ofs1 -> ofs1 + size_mem sz1 > ofs2 ->
+ load_contents sz2 (store_contents sz1 c ofs1 v) ofs2 = Vundef.
+Proof.
+ intros.
+ destruct sz1; destruct sz2; simpl in H0; simpl in H1; simpl; LSCO.
+Qed.
+
+Ltac LSCM :=
+ match goal with
+ | H:(?x <> ?x) |- _ =>
+ elim H; reflexivity
+ | |- (match getN ?sz2 ?ofs (setN ?sz1 ?ofs ?v ?c) with
+ | Undef => _
+ | Datum8 _ => _
+ | Datum16 _ => _
+ | Datum32 _ => _
+ | Datum64 _ => _
+ | Cont => _
+ end = _) =>
+ elim (getN_setN_mismatch sz1 sz2 ofs v c);
+ [ let H := fresh in (intro H; rewrite H; reflexivity)
+ | let H := fresh in (intro H; rewrite H; reflexivity) ]
+ end.
+
+Lemma load_store_contents_mismatch:
+ forall (sz1 sz2: memory_size) (c: contentmap)
+ (ofs: Z) (v: val),
+ sz1 <> sz2 ->
+ load_contents sz2 (store_contents sz1 c ofs v) ofs = Vundef.
+Proof.
+ intros.
+ destruct sz1; destruct sz2; simpl; LSCM.
+Qed.
+
+Theorem low_bound_store:
+ forall (chunk: memory_chunk) (m1 m2: mem) (b b': block) (ofs: Z) (v: val),
+ store chunk m1 b ofs v = Some m2 ->
+ low_bound m2 b' = low_bound m1 b'.
+Proof.
+ intros.
+ generalize (store_inv _ _ _ _ _ _ H).
+ intros (A, (B, (C, (D, (P, E))))).
+ unfold low_bound. rewrite E; unfold update.
+ case (zeq b' b); intro.
+ subst b'. reflexivity.
+ reflexivity.
+Qed.
+
+Theorem high_bound_store:
+ forall (chunk: memory_chunk) (m1 m2: mem) (b b': block) (ofs: Z) (v: val),
+ store chunk m1 b ofs v = Some m2 ->
+ high_bound m2 b' = high_bound m1 b'.
+Proof.
+ intros.
+ generalize (store_inv _ _ _ _ _ _ H).
+ intros (A, (B, (C, (D, (P, E))))).
+ unfold high_bound. rewrite E; unfold update.
+ case (zeq b' b); intro.
+ subst b'. reflexivity.
+ reflexivity.
+Qed.
+
+Hint Resolve high_bound_store low_bound_store load_store_contents_mismatch
+ load_store_contents_overlap load_store_other store_is_in_bounds
+ load_store_contents_same load_store_same load_store_contents_other.
+
+(** * Agreement between memory blocks. *)
+
+(** Two memory blocks [c1] and [c2] agree on a range [lo] to [hi]
+ if they associate the same contents to byte offsets in the range
+ [lo] (included) to [hi] (excluded). *)
+
+Definition contentmap_agree (lo hi: Z) (c1 c2: contentmap) :=
+ forall (ofs: Z),
+ lo <= ofs < hi -> c1 ofs = c2 ofs.
+
+Definition block_contents_agree (lo hi: Z) (c1 c2: block_contents) :=
+ contentmap_agree lo hi c1.(contents) c2.(contents).
+
+Definition block_agree (b: block) (lo hi: Z) (m1 m2: mem) :=
+ block_contents_agree lo hi
+ (m1.(blocks) b) (m2.(blocks) b).
+
+Theorem block_agree_refl:
+ forall (m: mem) (b: block) (lo hi: Z),
+ block_agree b lo hi m m.
+Proof.
+ intros. hnf. auto.
+Qed.
+
+Theorem block_agree_sym:
+ forall (m1 m2: mem) (b: block) (lo hi: Z),
+ block_agree b lo hi m1 m2 ->
+ block_agree b lo hi m2 m1.
+Proof.
+ intros. hnf. intros. symmetry. apply H. auto.
+Qed.
+
+Theorem block_agree_trans:
+ forall (m1 m2 m3: mem) (b: block) (lo hi: Z),
+ block_agree b lo hi m1 m2 ->
+ block_agree b lo hi m2 m3 ->
+ block_agree b lo hi m1 m3.
+Proof.
+ intros. hnf. intros.
+ transitivity (contents (blocks m2 b) ofs).
+ apply H; auto. apply H0; auto.
+Qed.
+
+Lemma check_cont_agree:
+ forall (c1 c2: contentmap) (lo hi: Z),
+ contentmap_agree lo hi c1 c2 ->
+ forall (n: nat) (ofs: Z),
+ lo <= ofs -> ofs + Z_of_nat n <= hi ->
+ check_cont n ofs c2 = check_cont n ofs c1.
+Proof.
+ induction n; intros; simpl.
+ auto.
+ rewrite inj_S in H1.
+ rewrite H. case (c2 ofs); intros; auto.
+ apply IHn; omega.
+ omega.
+Qed.
+
+Lemma getN_agree:
+ forall (c1 c2: contentmap) (lo hi: Z),
+ contentmap_agree lo hi c1 c2 ->
+ forall (n: nat) (ofs: Z),
+ lo <= ofs -> ofs + Z_of_nat n < hi ->
+ getN n ofs c2 = getN n ofs c1.
+Proof.
+ intros. unfold getN.
+ rewrite (check_cont_agree c1 c2 lo hi H n (ofs + 1)).
+ case (check_cont n (ofs + 1) c1).
+ symmetry. apply H. omega. auto.
+ omega. omega.
+Qed.
+
+Lemma load_contentmap_agree:
+ forall (sz: memory_size) (c1 c2: contentmap) (lo hi ofs: Z),
+ contentmap_agree lo hi c1 c2 ->
+ lo <= ofs -> ofs + size_mem sz <= hi ->
+ load_contents sz c2 ofs = load_contents sz c1 ofs.
+Proof.
+ intros sz c1 c2 lo hi ofs EX LO.
+ unfold load_contents, size_mem; case sz; intro HI;
+ rewrite (getN_agree c1 c2 lo hi EX); auto; simpl Z_of_nat; omega.
+Qed.
+
+Lemma set_cont_agree:
+ forall (lo hi: Z) (n: nat) (c1 c2: contentmap) (ofs: Z),
+ contentmap_agree lo hi c1 c2 ->
+ contentmap_agree lo hi (set_cont n ofs c1) (set_cont n ofs c2).
+Proof.
+ induction n; simpl; intros.
+ auto.
+ red. intros p B.
+ case (zeq p ofs); intro.
+ subst p. repeat (rewrite update_s). reflexivity.
+ repeat (rewrite update_o). apply IHn. assumption.
+ assumption. auto. auto.
+Qed.
+
+Lemma setN_agree:
+ forall (lo hi: Z) (n: nat) (c1 c2: contentmap) (ofs: Z) (v: content),
+ contentmap_agree lo hi c1 c2 ->
+ contentmap_agree lo hi (setN n ofs v c1) (setN n ofs v c2).
+Proof.
+ intros. unfold setN. red; intros p B.
+ case (zeq p ofs); intro.
+ subst p. repeat (rewrite update_s). reflexivity.
+ repeat (rewrite update_o; auto).
+ exact (set_cont_agree lo hi n c1 c2 (ofs + 1) H p B).
+Qed.
+
+Lemma store_contentmap_agree:
+ forall (sz: memory_size) (c1 c2: contentmap) (lo hi ofs: Z) (v: val),
+ contentmap_agree lo hi c1 c2 ->
+ contentmap_agree lo hi
+ (store_contents sz c1 ofs v) (store_contents sz c2 ofs v).
+Proof.
+ intros. unfold store_contents; case sz; apply setN_agree; auto.
+Qed.
+
+Lemma set_cont_outside_agree:
+ forall (lo hi: Z) (n: nat) (c1 c2: contentmap) (ofs: Z),
+ contentmap_agree lo hi c1 c2 ->
+ ofs + Z_of_nat n <= lo \/ hi <= ofs ->
+ contentmap_agree lo hi c1 (set_cont n ofs c2).
+Proof.
+ induction n; intros; simpl.
+ auto.
+ red; intros p R. rewrite inj_S in H0.
+ unfold update. case (zeq p ofs); intro.
+ subst p. omegaContradiction.
+ apply IHn. auto. omega. auto.
+Qed.
+
+Lemma setN_outside_agree:
+ forall (lo hi: Z) (n: nat) (c1 c2: contentmap) (ofs: Z) (v: content),
+ contentmap_agree lo hi c1 c2 ->
+ ofs + Z_of_nat n < lo \/ hi <= ofs ->
+ contentmap_agree lo hi c1 (setN n ofs v c2).
+Proof.
+ intros. unfold setN. red; intros p R.
+ unfold update. case (zeq p ofs); intro.
+ omegaContradiction.
+ apply (set_cont_outside_agree lo hi n c1 c2 (ofs + 1) H).
+ omega. auto.
+Qed.
+
+Lemma store_contentmap_outside_agree:
+ forall (sz: memory_size) (c1 c2: contentmap) (lo hi ofs: Z) (v: val),
+ contentmap_agree lo hi c1 c2 ->
+ ofs + size_mem sz <= lo \/ hi <= ofs ->
+ contentmap_agree lo hi c1 (store_contents sz c2 ofs v).
+Proof.
+ intros until v.
+ unfold store_contents; case sz; simpl; intros;
+ apply setN_outside_agree; auto; simpl Z_of_nat; omega.
+Qed.
+
+Theorem load_agree:
+ forall (chunk: memory_chunk) (m1 m2: mem)
+ (b: block) (lo hi: Z) (ofs: Z) (v1 v2: val),
+ block_agree b lo hi m1 m2 ->
+ lo <= ofs -> ofs + size_chunk chunk <= hi ->
+ load chunk m1 b ofs = Some v1 ->
+ load chunk m2 b ofs = Some v2 ->
+ v1 = v2.
+Proof.
+ intros.
+ generalize (load_inv _ _ _ _ _ H2). intros [K [L [M N]]].
+ generalize (load_inv _ _ _ _ _ H3). intros [P [Q [R S]]].
+ subst v1; subst v2. symmetry.
+ decEq. eapply load_contentmap_agree.
+ apply H. auto. auto.
+Qed.
+
+Theorem store_agree:
+ forall (chunk: memory_chunk) (m1 m2 m1' m2': mem)
+ (b: block) (lo hi: Z)
+ (b': block) (ofs: Z) (v: val),
+ block_agree b lo hi m1 m2 ->
+ store chunk m1 b' ofs v = Some m1' ->
+ store chunk m2 b' ofs v = Some m2' ->
+ block_agree b lo hi m1' m2'.
+Proof.
+ intros.
+ generalize (store_inv _ _ _ _ _ _ H0).
+ intros [I [J [K [L [x M]]]]].
+ generalize (store_inv _ _ _ _ _ _ H1).
+ intros [P [Q [R [S [y T]]]]].
+ red. red.
+ rewrite M; rewrite T; unfold update.
+ case (zeq b b'); intro; simpl.
+ subst b'. apply store_contentmap_agree. assumption.
+ apply H.
+Qed.
+
+Theorem store_outside_agree:
+ forall (chunk: memory_chunk) (m1 m2 m2': mem)
+ (b: block) (lo hi: Z)
+ (b': block) (ofs: Z) (v: val),
+ block_agree b lo hi m1 m2 ->
+ b <> b' \/ ofs + size_chunk chunk <= lo \/ hi <= ofs ->
+ store chunk m2 b' ofs v = Some m2' ->
+ block_agree b lo hi m1 m2'.
+Proof.
+ intros.
+ generalize (store_inv _ _ _ _ _ _ H1).
+ intros [I [J [K [L [x M]]]]].
+ red. red. rewrite M; unfold update;
+ case (zeq b b'); intro; simpl.
+ subst b'. apply store_contentmap_outside_agree.
+ assumption.
+ elim H0; intro. tauto. exact H2.
+ apply H.
+Qed.
+
+(** * Store extensions *)
+
+(** A store [m2] extends a store [m1] if [m2] can be obtained from [m1]
+ by increasing the sizes of the memory blocks of [m1] (decreasing
+ the low bounds, increasing the high bounds), while still keeping the
+ same contents for block offsets that are valid in [m1].
+ This notion is used in the proof of semantic equivalence in
+ module [Machenv]. *)
+
+Definition block_contents_extends (c1 c2: block_contents) :=
+ c2.(low) <= c1.(low) /\ c1.(high) <= c2.(high) /\
+ contentmap_agree c1.(low) c1.(high) c1.(contents) c2.(contents).
+
+Definition extends (m1 m2: mem) :=
+ m1.(nextblock) = m2.(nextblock) /\
+ forall (b: block),
+ b < m1.(nextblock) ->
+ block_contents_extends (m1.(blocks) b) (m2.(blocks) b).
+
+Theorem extends_refl:
+ forall (m: mem), extends m m.
+Proof.
+ intro. red. split.
+ reflexivity.
+ intros. red.
+ split. omega. split. omega.
+ red. intros. reflexivity.
+Qed.
+
+Theorem alloc_extends:
+ forall (m1 m2 m1' m2': mem) (lo1 hi1 lo2 hi2: Z) (b1 b2: block),
+ extends m1 m2 ->
+ lo2 <= lo1 -> hi1 <= hi2 ->
+ alloc m1 lo1 hi1 = (m1', b1) ->
+ alloc m2 lo2 hi2 = (m2', b2) ->
+ b1 = b2 /\ extends m1' m2'.
+Proof.
+ unfold extends, alloc; intros.
+ injection H2; intros; subst m1'; subst b1.
+ injection H3; intros; subst m2'; subst b2.
+ simpl. intuition.
+ rewrite <- H4. case (zeq b (nextblock m1)); intro.
+ subst b. repeat rewrite update_s.
+ red; simpl. intuition.
+ red; intros; reflexivity.
+ repeat rewrite update_o. apply H5. omega.
+ auto. auto.
+Qed.
+
+Theorem free_extends:
+ forall (m1 m2: mem) (b: block),
+ extends m1 m2 ->
+ extends (free m1 b) (free m2 b).
+Proof.
+ unfold extends, free; intros.
+ simpl. intuition.
+ red; intros; simpl.
+ case (zeq b0 b); intro.
+ subst b0; repeat (rewrite update_s).
+ simpl. split. omega. split. omega.
+ red. intros. omegaContradiction.
+ repeat (rewrite update_o).
+ exact (H1 b0 H).
+ auto. auto.
+Qed.
+
+Theorem load_extends:
+ forall (chunk: memory_chunk) (m1 m2: mem) (b: block) (ofs: Z) (v: val),
+ extends m1 m2 ->
+ load chunk m1 b ofs = Some v ->
+ load chunk m2 b ofs = Some v.
+Proof.
+ intros sz m1 m2 b ofs v (X, Y) L.
+ generalize (load_inv _ _ _ _ _ L).
+ intros (A, (B, (C, D))).
+ unfold load. rewrite <- X. rewrite zlt_true; auto.
+ generalize (Y b A); intros [M [P Q]].
+ rewrite in_bounds_holds.
+ rewrite <- D.
+ decEq. decEq.
+ apply load_contentmap_agree with
+ (lo := low((blocks m1) b))
+ (hi := high((blocks m1) b)); auto.
+ omega. omega.
+Qed.
+
+Theorem store_within_extends:
+ forall (chunk: memory_chunk) (m1 m2 m1': mem) (b: block) (ofs: Z) (v: val),
+ extends m1 m2 ->
+ store chunk m1 b ofs v = Some m1' ->
+ exists m2', store chunk m2 b ofs v = Some m2' /\ extends m1' m2'.
+Proof.
+ intros sz m1 m2 m1' b ofs v (X, Y) STORE.
+ generalize (store_inv _ _ _ _ _ _ STORE).
+ intros (A, (B, (C, (D, (x, E))))).
+ generalize (Y b A); intros [M [P Q]].
+ unfold store. rewrite <- X. rewrite zlt_true; auto.
+ case (in_bounds sz ofs (blocks m2 b)); intro.
+ exists (unchecked_store sz m2 b ofs v a).
+ split. auto.
+ split.
+ unfold unchecked_store; simpl. congruence.
+ intros b' LT.
+ unfold block_contents_extends, unchecked_store, block_contents_agree.
+ rewrite E; unfold update; simpl.
+ case (zeq b' b); intro; simpl.
+ subst b'. split. omega. split. omega.
+ apply store_contentmap_agree. auto.
+ apply Y. rewrite <- D. auto.
+ omegaContradiction.
+Qed.
+
+Theorem store_outside_extends:
+ forall (chunk: memory_chunk) (m1 m2 m2': mem) (b: block) (ofs: Z) (v: val),
+ extends m1 m2 ->
+ ofs + size_chunk chunk <= low_bound m1 b \/ high_bound m1 b <= ofs ->
+ store chunk m2 b ofs v = Some m2' ->
+ extends m1 m2'.
+Proof.
+ intros sz m1 m2 m2' b ofs v (X, Y) BOUNDS STORE.
+ generalize (store_inv _ _ _ _ _ _ STORE).
+ intros (A, (B, (C, (D, (x, E))))).
+ split.
+ congruence.
+ intros b' LT.
+ rewrite E; unfold update; case (zeq b' b); intro.
+ subst b'. generalize (Y b LT). intros [M [P Q]].
+ red; simpl. split. omega. split. omega.
+ apply store_contentmap_outside_agree.
+ assumption. exact BOUNDS.
+ auto.
+Qed.
+
+(** * Memory extensionality properties *)
+
+Lemma block_contents_exten:
+ forall (c1 c2: block_contents),
+ c1.(low) = c2.(low) ->
+ c1.(high) = c2.(high) ->
+ block_contents_agree c1.(low) c1.(high) c1 c2 ->
+ c1 = c2.
+Proof.
+ intros. caseEq c1; intros lo1 hi1 m1 UO1 EQ1. subst c1.
+ caseEq c2; intros lo2 hi2 m2 UO2 EQ2. subst c2.
+ simpl in *. subst lo2 hi2.
+ assert (m1 = m2).
+ unfold contentmap. apply extensionality. intro.
+ case (zlt x lo1); intro.
+ rewrite UO1. rewrite UO2. auto. tauto. tauto.
+ case (zlt x hi1); intro.
+ apply H1. omega.
+ rewrite UO1. rewrite UO2. auto. tauto. tauto.
+ subst m2.
+ assert (UO1 = UO2).
+ apply proof_irrelevance.
+ subst UO2. reflexivity.
+Qed.
+
+Theorem mem_exten:
+ forall m1 m2,
+ m1.(nextblock) = m2.(nextblock) ->
+ (forall b, m1.(blocks) b = m2.(blocks) b) ->
+ m1 = m2.
+Proof.
+ intros. destruct m1 as [map1 nb1 nextpos1]. destruct m2 as [map2 nb2 nextpos2].
+ simpl in *. subst nb2.
+ assert (map1 = map2). apply extensionality. assumption.
+ assert (nextpos1 = nextpos2). apply proof_irrelevance.
+ congruence.
+Qed.
+
+(** * Store injections *)
+
+(** A memory injection [f] is a function from addresses to either [None]
+ or [Some] of an address and an offset. It defines a correspondence
+ between the blocks of two memory states [m1] and [m2]:
+- if [f b = None], the block [b] of [m1] has no equivalent in [m2];
+- if [f b = Some(b', ofs)], the block [b] of [m2] corresponds to
+ a sub-block at offset [ofs] of the block [b'] in [m2].
+*)
+
+Definition meminj := (block -> option (block * Z))%type.
+
+Section MEM_INJECT.
+
+Variable f: meminj.
+
+(** A memory injection defines a relation between values that is the
+ identity relation, except for pointer values which are shifted
+ as prescribed by the memory injection. *)
+
+Inductive val_inject: val -> val -> Prop :=
+ | val_inject_int:
+ forall i, val_inject (Vint i) (Vint i)
+ | val_inject_float:
+ forall f, val_inject (Vfloat f) (Vfloat f)
+ | val_inject_ptr:
+ forall b1 ofs1 b2 ofs2 x,
+ f b1 = Some (b2, x) ->
+ ofs2 = Int.add ofs1 (Int.repr x) ->
+ val_inject (Vptr b1 ofs1) (Vptr b2 ofs2)
+ | val_inject_undef: forall v,
+ val_inject Vundef v.
+
+Hint Resolve val_inject_int val_inject_float val_inject_ptr
+val_inject_undef.
+
+Inductive val_list_inject: list val -> list val-> Prop:=
+ | val_nil_inject :
+ val_list_inject nil nil
+ | val_cons_inject : forall v v' vl vl' ,
+ val_inject v v' -> val_list_inject vl vl'->
+ val_list_inject (v::vl) (v':: vl').
+
+Inductive val_content_inject: memory_size -> val -> val -> Prop :=
+ | val_content_inject_base:
+ forall sz v1 v2,
+ val_inject v1 v2 ->
+ val_content_inject sz v1 v2
+ | val_content_inject_8:
+ forall n1 n2,
+ Int.cast8unsigned n1 = Int.cast8unsigned n2 ->
+ val_content_inject Size8 (Vint n1) (Vint n2)
+ | val_content_inject_16:
+ forall n1 n2,
+ Int.cast16unsigned n1 = Int.cast16unsigned n2 ->
+ val_content_inject Size16 (Vint n1) (Vint n2)
+ | val_content_inject_32:
+ forall f1 f2,
+ Float.singleoffloat f1 = Float.singleoffloat f2 ->
+ val_content_inject Size32 (Vfloat f1) (Vfloat f2).
+
+Hint Resolve val_content_inject_base.
+
+Inductive content_inject: content -> content -> Prop :=
+ | content_inject_undef:
+ forall c,
+ content_inject Undef c
+ | content_inject_datum8:
+ forall v1 v2,
+ val_content_inject Size8 v1 v2 ->
+ content_inject (Datum8 v1) (Datum8 v2)
+ | content_inject_datum16:
+ forall v1 v2,
+ val_content_inject Size16 v1 v2 ->
+ content_inject (Datum16 v1) (Datum16 v2)
+ | content_inject_datum32:
+ forall v1 v2,
+ val_content_inject Size32 v1 v2 ->
+ content_inject (Datum32 v1) (Datum32 v2)
+ | content_inject_datum64:
+ forall v1 v2,
+ val_content_inject Size64 v1 v2 ->
+ content_inject (Datum64 v1) (Datum64 v2)
+ | content_inject_cont:
+ content_inject Cont Cont.
+
+Hint Resolve content_inject_undef content_inject_datum8
+content_inject_datum16 content_inject_datum32 content_inject_datum64
+content_inject_cont.
+
+Definition contentmap_inject (c1 c2: contentmap) (lo hi delta: Z) : Prop :=
+ forall x, lo <= x < hi ->
+ content_inject (c1 x) (c2 (x + delta)).
+
+(** A block contents [c1] injects into another block content [c2] at
+ offset [delta] if the contents of [c1] at all valid offsets
+ correspond to the contents of [c2] at the same offsets shifted by [delta].
+ Some additional conditions are imposed to guard against arithmetic
+ overflow in address computations. *)
+
+Record block_contents_inject (c1 c2: block_contents) (delta: Z) : Prop :=
+ mk_block_contents_inject {
+ bci_range1: Int.min_signed <= delta <= Int.max_signed;
+ bci_range2: delta = 0 \/
+ (Int.min_signed <= c2.(low) /\ c2.(high) <= Int.max_signed);
+ bci_lowhigh:forall x, c1.(low) <= x < c1.(high) ->
+ c2.(low) <= x+delta < c2.(high) ;
+ bci_contents:
+ contentmap_inject c1.(contents) c2.(contents) c1.(low) c1.(high) delta
+ }.
+
+(** A memory state [m1] injects into another memory state [m2] via the
+ memory injection [f] if the following conditions hold:
+- unallocated blocks in [m1] must be mapped to [None] by [f];
+- if [f b = Some(b', delta)], [b'] must be valid in [m2] and
+ the contents of [b] in [m1] must inject into the contents of [b'] in [m2]
+ with offset [delta];
+- distinct blocks in [m1] cannot be mapped to overlapping sub-blocks in [m2].
+*)
+
+Record mem_inject (m1 m2: mem) : Prop :=
+ mk_mem_inject {
+ mi_freeblocks:
+ forall b, b >= m1.(nextblock) -> f b = None;
+ mi_mappedblocks:
+ forall b b' delta,
+ f b = Some(b', delta) ->
+ b' < m2.(nextblock) /\
+ block_contents_inject (m1.(blocks) b)
+ (m2.(blocks) b')
+ delta;
+ mi_no_overlap:
+ forall b1 b2 b1' b2' delta1 delta2,
+ b1 <> b2 ->
+ f b1 = Some (b1', delta1) ->
+ f b2 = Some (b2', delta2) ->
+ b1' <> b2'
+ \/ (forall x1 x2, low_bound m1 b1 <= x1 < high_bound m1 b1 ->
+ low_bound m1 b2 <= x2 < high_bound m1 b2 ->
+ x1+delta1 <> x2+delta2)
+ }.
+
+(** The following lemmas establish the absence of machine integer overflow
+ during address computations. *)
+
+Lemma size_mem_pos: forall sz, size_mem sz > 0.
+Proof. destruct sz; simpl; omega. Qed.
+
+Lemma size_chunk_pos: forall chunk, size_chunk chunk > 0.
+Proof. intros. unfold size_chunk. apply size_mem_pos. Qed.
+
+Lemma address_inject:
+ forall m1 m2 chunk b1 ofs1 b2 ofs2 x,
+ mem_inject m1 m2 ->
+ (m1.(blocks) b1).(low) <= Int.signed ofs1 ->
+ Int.signed ofs1 + size_chunk chunk <= (m1.(blocks) b1).(high) ->
+ f b1 = Some (b2, x) ->
+ ofs2 = Int.add ofs1 (Int.repr x) ->
+ Int.signed ofs2 = Int.signed ofs1 + x.
+Proof.
+ intros.
+ generalize (size_chunk_pos chunk). intro.
+ generalize (mi_mappedblocks m1 m2 H _ _ _ H2). intros [C D].
+ inversion D.
+ elim bci_range4 ; intro.
+ (**x=0**)
+ subst x . rewrite Zplus_0_r. rewrite Int.add_zero in H3.
+ subst ofs2 ; auto .
+ (**x<>0**)
+ rewrite H3. rewrite Int.add_signed. repeat rewrite Int.signed_repr.
+ auto. auto.
+ assert (low (blocks m1 b1) <= Int.signed ofs1 < high (blocks m1 b1)).
+ omega.
+ generalize (bci_lowhigh0 (Int.signed ofs1) H6). omega.
+ auto.
+Qed.
+
+Lemma valid_pointer_inject_no_overflow:
+ forall m1 m2 b ofs b' x,
+ mem_inject m1 m2 ->
+ valid_pointer m1 b (Int.signed ofs) = true ->
+ f b = Some(b', x) ->
+ Int.min_signed <= Int.signed ofs + Int.signed (Int.repr x) <= Int.max_signed.
+Proof.
+ intros. unfold valid_pointer in H0.
+ destruct (zlt b (nextblock m1)); try discriminate.
+ destruct (zle (low (blocks m1 b)) (Int.signed ofs)); try discriminate.
+ destruct (zlt (Int.signed ofs) (high (blocks m1 b))); try discriminate.
+ inversion H. generalize (mi_mappedblocks0 _ _ _ H1).
+ intros [A B]. inversion B.
+ elim bci_range4 ; intro.
+ (**x=0**)
+ rewrite Int.signed_repr ; auto.
+ subst x . rewrite Zplus_0_r. apply Int.signed_range .
+ (**x<>0**)
+ generalize (bci_lowhigh0 _ (conj z0 z1)). intro.
+ rewrite Int.signed_repr. omega. auto.
+Qed.
+
+(** Relation between injections and loads. *)
+
+Lemma check_cont_inject:
+ forall c1 c2 lo hi delta,
+ contentmap_inject c1 c2 lo hi delta ->
+ forall n p,
+ lo <= p -> p + Z_of_nat n <= hi ->
+ check_cont n p c1 = true ->
+ check_cont n (p + delta) c2 = true.
+Proof.
+ induction n.
+ intros. simpl. reflexivity.
+ simpl check_cont. rewrite inj_S. intros p H0 H1.
+ assert (lo <= p < hi). omega.
+ generalize (H p H2). intro. inversion H3; intros; try discriminate.
+ replace (p + delta + 1) with ((p + 1) + delta).
+ apply IHn. omega. omega. auto.
+ omega.
+Qed.
+
+Hint Resolve check_cont_inject.
+
+Lemma getN_inject:
+ forall c1 c2 lo hi delta,
+ contentmap_inject c1 c2 lo hi delta ->
+ forall n p,
+ lo <= p -> p + Z_of_nat n < hi ->
+ content_inject (getN n p c1) (getN n (p + delta) c2).
+Proof.
+ intros. simpl in H1.
+ assert (lo <= p < hi). omega.
+ unfold getN.
+ caseEq (check_cont n (p + 1) c1); intro.
+ replace (check_cont n (p + delta + 1) c2) with true.
+ apply H. assumption.
+ symmetry. replace (p + delta + 1) with ((p + 1) + delta).
+ eapply check_cont_inject; eauto.
+ omega. omega. omega.
+ constructor.
+Qed.
+
+Hint Resolve getN_inject.
+
+Definition ztonat (z:Z): nat:=
+match z with
+| Z0 => O
+| Zpos p => (nat_of_P p)
+| Zneg p =>O
+end.
+
+Lemma load_contents_inject:
+ forall sz c1 c2 lo hi delta p,
+ contentmap_inject c1 c2 lo hi delta ->
+ lo <= p -> p + size_mem sz <= hi ->
+ val_content_inject sz (load_contents sz c1 p) (load_contents sz c2 (p + delta)).
+Proof.
+intros.
+assert (content_inject (getN (ztonat (size_mem sz)-1) p c1)
+(getN (ztonat(size_mem sz)-1) (p + delta) c2)).
+induction sz; assert (lo<= p< hi); simpl in H1; try omega;
+apply getN_inject with lo hi; try assumption; simpl ; try omega.
+induction sz ; simpl; inversion H2; auto.
+Qed.
+
+Hint Resolve load_contents_inject.
+
+Lemma load_result_inject:
+ forall chunk v1 v2,
+ val_content_inject (mem_chunk chunk) v1 v2 ->
+ val_inject (Val.load_result chunk v1) (Val.load_result chunk v2).
+Proof.
+intros.
+destruct chunk; simpl in H; inversion H; simpl; auto;
+try (inversion H0; simpl; auto; fail).
+replace (Int.cast8signed n2) with (Int.cast8signed n1). constructor.
+apply Int.cast8_signed_equal_if_unsigned_equal; auto.
+rewrite H0; constructor.
+replace (Int.cast16signed n2) with (Int.cast16signed n1). constructor.
+apply Int.cast16_signed_equal_if_unsigned_equal; auto.
+rewrite H0; constructor.
+inversion H0; simpl; auto.
+apply val_inject_ptr with x; auto.
+Qed.
+
+Lemma in_bounds_inject:
+ forall chunk c1 c2 delta p,
+ block_contents_inject c1 c2 delta ->
+ c1.(low) <= p /\ p + size_chunk chunk <= c1.(high) ->
+ c2.(low) <= p + delta /\ (p + delta) + size_chunk chunk <= c2.(high).
+Proof.
+ intros.
+ inversion H.
+ generalize (size_chunk_pos chunk); intro.
+ assert (low c1 <= p + size_chunk chunk - 1 < high c1).
+ omega.
+ generalize (bci_lowhigh0 _ H2). intro.
+ assert (low c1 <= p < high c1).
+ omega.
+ generalize (bci_lowhigh0 _ H4). intro.
+ omega.
+Qed.
+
+Lemma block_cont_val:
+forall c1 c2 delta p sz,
+block_contents_inject c1 c2 delta ->
+c1.(low) <= p -> p + size_mem sz <= c1.(high) ->
+ val_content_inject sz (load_contents sz c1.(contents) p)
+ (load_contents sz c2.(contents) (p + delta)).
+Proof.
+intros.
+inversion H .
+apply load_contents_inject with c1.(low) c1.(high) ;assumption.
+Qed.
+
+Lemma load_inject:
+ forall m1 m2 chunk b1 ofs b2 delta v1,
+ mem_inject m1 m2 ->
+ load chunk m1 b1 ofs = Some v1 ->
+ f b1 = Some (b2, delta) ->
+ exists v2, load chunk m2 b2 (ofs + delta) = Some v2 /\ val_inject v1 v2.
+Proof.
+ intros.
+ generalize (load_inv _ _ _ _ _ H0). intros [A [B [C D]]].
+ inversion H.
+ generalize (mi_mappedblocks0 _ _ _ H1). intros [U V].
+ inversion V.
+ exists (Val.load_result chunk (load_contents (mem_chunk chunk)
+ (m2.(blocks) b2).(contents) (ofs+delta))).
+ split.
+ unfold load.
+ generalize (size_chunk_pos chunk); intro.
+ rewrite zlt_true. rewrite in_bounds_holds. auto.
+ assert (low (blocks m1 b1) <= ofs < high (blocks m1 b1)).
+ omega.
+ generalize (bci_lowhigh0 _ H3). tauto.
+ assert (low (blocks m1 b1) <= ofs + size_chunk chunk - 1 < high(blocks m1 b1)).
+ omega.
+ generalize (bci_lowhigh0 _ H3). omega.
+ assumption.
+ rewrite <- D. apply load_result_inject.
+ eapply load_contents_inject; eauto.
+Qed.
+
+Lemma loadv_inject:
+ forall m1 m2 chunk a1 a2 v1,
+ mem_inject m1 m2 ->
+ loadv chunk m1 a1 = Some v1 ->
+ val_inject a1 a2 ->
+ exists v2, loadv chunk m2 a2 = Some v2 /\ val_inject v1 v2.
+Proof.
+ intros.
+ induction H1 ; simpl in H0 ; try discriminate H0.
+ simpl.
+ replace (Int.signed ofs2) with (Int.signed ofs1 + x).
+ apply load_inject with m1 b1 ; assumption.
+ symmetry. generalize (load_inv _ _ _ _ _ H0). intros [A [B [C D]]].
+ apply address_inject with m1 m2 chunk b1 b2; auto.
+Qed.
+
+(** Relation between injections and stores. *)
+
+Lemma set_cont_inject:
+ forall c1 c2 lo hi delta,
+ contentmap_inject c1 c2 lo hi delta ->
+ forall n p,
+ lo <= p -> p + Z_of_nat n <= hi ->
+ contentmap_inject (set_cont n p c1) (set_cont n (p + delta) c2) lo hi delta.
+Proof.
+induction n. intros. simpl. assumption.
+intros. simpl. unfold contentmap_inject.
+intros p2 Hp2. unfold update.
+case (zeq p2 p); intro.
+subst p2. rewrite zeq_true. constructor.
+rewrite zeq_false. replace (p + delta + 1) with ((p + 1) + delta).
+apply IHn. omega. rewrite inj_S in H1. omega. assumption.
+omega. omega.
+Qed.
+
+Lemma setN_inject:
+ forall c1 c2 lo hi delta n p v1 v2,
+ contentmap_inject c1 c2 lo hi delta ->
+ content_inject v1 v2 ->
+ lo <= p -> p + Z_of_nat n < hi ->
+ contentmap_inject (setN n p v1 c1) (setN n (p + delta) v2 c2)
+ lo hi delta.
+Proof.
+ intros. unfold setN. red; intros.
+ unfold update.
+ case (zeq x p); intro.
+ subst p. rewrite zeq_true. assumption.
+ rewrite zeq_false.
+ replace (p + delta + 1) with ((p + 1) + delta).
+ apply set_cont_inject with lo hi.
+ assumption. omega. omega. assumption. omega.
+ omega.
+Qed.
+
+Lemma store_contents_inject:
+ forall c1 c2 lo hi delta sz p v1 v2,
+ contentmap_inject c1 c2 lo hi delta ->
+ val_content_inject sz v1 v2 ->
+ lo <= p -> p + size_mem sz <= hi ->
+ contentmap_inject (store_contents sz c1 p v1)
+ (store_contents sz c2 (p + delta) v2)
+ lo hi delta.
+Proof.
+ intros.
+ destruct sz; simpl in *; apply setN_inject; auto; simpl; omega.
+Qed.
+
+Lemma set_cont_outside1 :
+ forall n p m q ,
+ (forall x , p <= x < p + Z_of_nat n -> x <> q) ->
+ (set_cont n p m) q = m q.
+Proof.
+ induction n; intros; simpl.
+ auto.
+ rewrite inj_S in H. rewrite update_o. apply IHn.
+ intros. apply H. omega.
+ apply H. omega.
+Qed.
+
+Lemma set_cont_outside_inject:
+ forall c1 c2 lo hi delta,
+ contentmap_inject c1 c2 lo hi delta ->
+ forall n p,
+ (forall x1 x2, p <= x1 < p + Z_of_nat n ->
+ lo <= x2 < hi ->
+ x1 <> x2 + delta) ->
+ contentmap_inject c1 (set_cont n p c2) lo hi delta.
+Proof.
+ unfold contentmap_inject. intros.
+ rewrite set_cont_outside1. apply H. assumption.
+ intros. apply H0. auto. auto.
+Qed.
+
+Lemma setN_outside_inject:
+ forall n c1 c2 lo hi delta p v,
+ contentmap_inject c1 c2 lo hi delta ->
+ (forall x1 x2, p <= x1 < p + Z_of_nat (S n) ->
+ lo <= x2 < hi ->
+ x1 <> x2 + delta) ->
+ contentmap_inject c1 (setN n p v c2) lo hi delta.
+Proof.
+ intros. unfold setN. red; intros. rewrite update_o.
+ apply set_cont_outside_inject with lo hi. auto.
+ intros. apply H0. rewrite inj_S. omega. auto. auto.
+ apply H0. rewrite inj_S. omega. auto.
+Qed.
+
+Lemma store_contents_outside_inject:
+ forall c1 c2 lo hi delta sz p v,
+ contentmap_inject c1 c2 lo hi delta ->
+ (forall x1 x2, p <= x1 < p + size_mem sz ->
+ lo <= x2 < hi ->
+ x1 <> x2 + delta)->
+ contentmap_inject c1 (store_contents sz c2 p v) lo hi delta.
+Proof.
+ intros c1 c2 lo hi delta sz. generalize (size_mem_pos sz) . intro .
+ induction sz ;intros ;simpl ; apply setN_outside_inject ; assumption .
+Qed.
+
+Lemma store_mapped_inject_1:
+ forall chunk m1 b1 ofs v1 n1 m2 b2 delta v2,
+ mem_inject m1 m2 ->
+ store chunk m1 b1 ofs v1 = Some n1 ->
+ f b1 = Some (b2, delta) ->
+ val_content_inject (mem_chunk chunk) v1 v2 ->
+ exists n2,
+ store chunk m2 b2 (ofs + delta) v2 = Some n2
+ /\ mem_inject n1 n2.
+Proof.
+intros.
+generalize (size_chunk_pos chunk); intro SIZEPOS.
+generalize (store_inv _ _ _ _ _ _ H0).
+intros [A [B [C [D [P E]]]]].
+inversion H.
+generalize (mi_mappedblocks0 _ _ _ H1). intros [U V].
+inversion V.
+generalize (in_bounds_inject _ _ _ _ _ V (conj B C)). intro BND.
+exists (unchecked_store chunk m2 b2 (ofs+delta) v2 BND).
+split. unfold store.
+rewrite zlt_true; auto.
+case (in_bounds chunk (ofs + delta) (blocks m2 b2)); intro.
+assert (a = BND). apply proof_irrelevance. congruence.
+omegaContradiction.
+constructor.
+intros. apply mi_freeblocks0. rewrite <- D. assumption.
+intros. generalize (mi_mappedblocks0 b b' delta0 H3).
+intros [W Y]. split. simpl. auto.
+rewrite E; simpl. unfold update.
+(* Cas 1: memes blocs b = b1 b'= b2 *)
+case (zeq b b1); intro.
+subst b. assert (b'= b2). congruence. subst b'.
+assert (delta0 = delta). congruence. subst delta0.
+rewrite zeq_true. inversion Y. constructor; simpl; auto.
+apply store_contents_inject; auto.
+(* Cas 2: blocs differents dans m1 mais mappes sur le meme bloc de m2 *)
+case (zeq b' b2); intro.
+subst b'.
+inversion Y. constructor; simpl; auto.
+generalize (store_contents_outside_inject _ _ _ _ _ (mem_chunk chunk)
+ (ofs+delta) v2 bci_contents1).
+intros.
+apply H4.
+elim (mi_no_overlap0 b b1 b2 b2 delta0 delta n H3 H1).
+tauto.
+unfold high_bound, low_bound. intros.
+apply sym_not_equal. replace x1 with ((x1 - delta) + delta).
+apply H5. assumption. unfold size_chunk in C. omega. omega.
+(* Cas 3: blocs differents dans m1 et dans m2 *)
+auto.
+
+unfold high_bound, low_bound.
+rewrite E; simpl; intros.
+unfold high_bound, low_bound in mi_no_overlap0.
+unfold update.
+case (zeq b0 b1).
+intro. subst b1. simpl.
+rewrite zeq_false; auto.
+intro. case (zeq b3 b1); intro.
+subst b3. simpl. auto.
+auto.
+Qed.
+
+Lemma store_mapped_inject:
+ forall chunk m1 b1 ofs v1 n1 m2 b2 delta v2,
+ mem_inject m1 m2 ->
+ store chunk m1 b1 ofs v1 = Some n1 ->
+ f b1 = Some (b2, delta) ->
+ val_inject v1 v2 ->
+ exists n2,
+ store chunk m2 b2 (ofs + delta) v2 = Some n2
+ /\ mem_inject n1 n2.
+Proof.
+ intros. eapply store_mapped_inject_1; eauto.
+Qed.
+
+Lemma store_unmapped_inject:
+ forall chunk m1 b1 ofs v1 n1 m2,
+ mem_inject m1 m2 ->
+ store chunk m1 b1 ofs v1 = Some n1 ->
+ f b1 = None ->
+ mem_inject n1 m2.
+Proof.
+intros.
+inversion H.
+generalize (store_inv _ _ _ _ _ _ H0).
+intros [A [B [C [D [P E]]]]].
+constructor.
+rewrite D. assumption.
+intros. elim (mi_mappedblocks0 _ _ _ H2); intros.
+split. auto.
+rewrite E; unfold update.
+rewrite zeq_false. assumption.
+congruence.
+intros.
+assert (forall b, low_bound n1 b = low_bound m1 b).
+ intros. unfold low_bound; rewrite E; unfold update.
+ case (zeq b b1); intros. subst b1; reflexivity. reflexivity.
+assert (forall b, high_bound n1 b = high_bound m1 b).
+ intros. unfold high_bound; rewrite E; unfold update.
+ case (zeq b b1); intros. subst b1; reflexivity. reflexivity.
+repeat rewrite H5. repeat rewrite H6. auto.
+Qed.
+
+Lemma storev_mapped_inject_1:
+ forall chunk m1 a1 v1 n1 m2 a2 v2,
+ mem_inject m1 m2 ->
+ storev chunk m1 a1 v1 = Some n1 ->
+ val_inject a1 a2 ->
+ val_content_inject (mem_chunk chunk) v1 v2 ->
+ exists n2,
+ storev chunk m2 a2 v2 = Some n2 /\ mem_inject n1 n2.
+Proof.
+ intros. destruct a1; simpl in H0; try discriminate.
+ inversion H1. subst b.
+ simpl. replace (Int.signed ofs2) with (Int.signed i + x).
+ eapply store_mapped_inject_1; eauto.
+ symmetry. generalize (store_inv _ _ _ _ _ _ H0). intros [A [B [C [D [P E]]]]].
+ apply address_inject with m1 m2 chunk b1 b2; auto.
+Qed.
+
+Lemma storev_mapped_inject:
+ forall chunk m1 a1 v1 n1 m2 a2 v2,
+ mem_inject m1 m2 ->
+ storev chunk m1 a1 v1 = Some n1 ->
+ val_inject a1 a2 ->
+ val_inject v1 v2 ->
+ exists n2,
+ storev chunk m2 a2 v2 = Some n2 /\ mem_inject n1 n2.
+Proof.
+ intros. eapply storev_mapped_inject_1; eauto.
+Qed.
+
+(** Relation between injections and [free] *)
+
+Lemma free_first_inject :
+ forall m1 m2 b,
+ mem_inject m1 m2 ->
+ mem_inject (free m1 b) m2.
+Proof.
+ intros. inversion H. constructor . auto.
+ simpl. intros.
+ generalize (mi_mappedblocks0 b0 b' delta H0).
+ intros [A B] . split. assumption . unfold update.
+ case (zeq b0 b); intro. inversion B. constructor; simpl; auto.
+ intros. omega.
+ unfold contentmap_inject.
+ intros. omegaContradiction.
+ auto. intros.
+ unfold free . unfold low_bound , high_bound. simpl. unfold update.
+ case (zeq b1 b);intro. simpl.
+ right. intros. omegaContradiction.
+ case (zeq b2 b);intro. simpl.
+ right . intros. omegaContradiction.
+ unfold low_bound, high_bound in mi_no_overlap0. auto.
+Qed.
+
+Lemma free_first_list_inject :
+ forall l m1 m2,
+ mem_inject m1 m2 ->
+ mem_inject (free_list m1 l) m2.
+Proof.
+ induction l; simpl; intros.
+ auto.
+ apply free_first_inject. auto.
+Qed.
+
+Lemma free_snd_inject:
+ forall m1 m2 b,
+ (forall b1 delta, f b1 = Some(b, delta) ->
+ low_bound m1 b1 >= high_bound m1 b1) ->
+ mem_inject m1 m2 ->
+ mem_inject m1 (free m2 b).
+Proof.
+ intros. inversion H0. constructor. auto.
+ simpl. intros.
+ generalize (mi_mappedblocks0 b0 b' delta H1).
+ intros [A B] . split. assumption .
+ inversion B. unfold update.
+ case (zeq b' b); intro.
+ subst b'. generalize (H _ _ H1). unfold low_bound, high_bound; intro.
+ constructor. auto. elim bci_range4 ; intro.
+ (**delta=0**)
+ left ; auto .
+ (** delta<>0**)
+ right .
+ simpl. compute. split; intro; congruence.
+ intros. omegaContradiction.
+ red; intros. omegaContradiction.
+ auto.
+ auto.
+Qed.
+
+Lemma bounds_free_block:
+ forall m1 b m1' , free m1 b = m1' ->
+ low_bound m1' b >= high_bound m1' b.
+Proof.
+ intros. unfold free in H.
+ rewrite<- H . unfold low_bound , high_bound .
+ simpl . rewrite update_s. simpl. omega.
+Qed.
+
+Lemma free_empty_bounds:
+ forall l m1 ,
+ let m1' := free_list m1 l in
+ (forall b, In b l -> low_bound m1' b >= high_bound m1' b).
+Proof.
+ induction l . intros . inversion H.
+ intros.
+ generalize (in_inv H).
+ intro . elim H0. intro . subst b. simpl in m1' .
+ generalize ( bounds_free_block
+ (fold_right (fun (b : block) (m : mem) => free m b) m1 l) a m1') .
+ intros. apply H1. auto . intros. simpl in m1'. unfold m1' .
+ unfold low_bound , high_bound . simpl .
+ unfold update; case (zeq b a); intro; simpl.
+ omega .
+ unfold low_bound , high_bound in IHl . auto.
+Qed.
+
+Lemma free_inject:
+ forall m1 m2 l b,
+ (forall b1 delta, f b1 = Some(b, delta) -> In b1 l) ->
+ mem_inject m1 m2 ->
+ mem_inject (free_list m1 l) (free m2 b).
+Proof.
+ intros. apply free_snd_inject.
+ intros. apply free_empty_bounds. apply H with delta. auto.
+ apply free_first_list_inject. auto.
+Qed.
+
+End MEM_INJECT.
+
+Hint Resolve val_inject_int val_inject_float val_inject_ptr val_inject_undef.
+Hint Resolve val_nil_inject val_cons_inject.
+
+(** Monotonicity properties of memory injections. *)
+
+Definition inject_incr (f1 f2: meminj) : Prop :=
+ forall b, f1 b = f2 b \/ f1 b = None.
+
+Lemma inject_incr_refl :
+ forall f , inject_incr f f .
+Proof. unfold inject_incr . intros. left . auto . Qed.
+
+Lemma inject_incr_trans :
+ forall f1 f2 f3 ,
+ inject_incr f1 f2 -> inject_incr f2 f3 -> inject_incr f1 f3 .
+Proof .
+ unfold inject_incr . intros .
+ generalize (H b) . intro . generalize (H0 b) . intro .
+ elim H1 ; elim H2 ; intros.
+ rewrite H3 in H4 . left . auto .
+ rewrite H3 in H4 . right . auto .
+ right ; auto .
+ right ; auto .
+Qed.
+
+Lemma val_inject_incr:
+ forall f1 f2 v v',
+ inject_incr f1 f2 ->
+ val_inject f1 v v' ->
+ val_inject f2 v v'.
+Proof.
+ intros. inversion H0.
+ constructor.
+ constructor.
+ elim (H b1); intro.
+ apply val_inject_ptr with x. congruence. auto.
+ congruence.
+ constructor.
+Qed.
+
+Lemma val_list_inject_incr:
+ forall f1 f2 vl vl' ,
+ inject_incr f1 f2 -> val_list_inject f1 vl vl' ->
+ val_list_inject f2 vl vl'.
+Proof.
+ induction vl ; intros; inversion H0. auto .
+ subst a . generalize (val_inject_incr f1 f2 v v' H H3) .
+ intro . auto .
+Qed.
+
+Hint Resolve inject_incr_refl val_inject_incr val_list_inject_incr.
+
+Section MEM_INJECT_INCR.
+
+Variable f1 f2: meminj.
+Hypothesis INCR: inject_incr f1 f2.
+
+Lemma val_content_inject_incr:
+ forall chunk v v',
+ val_content_inject f1 chunk v v' ->
+ val_content_inject f2 chunk v v'.
+Proof.
+ intros. inversion H.
+ apply val_content_inject_base. eapply val_inject_incr; eauto.
+ apply val_content_inject_8; auto.
+ apply val_content_inject_16; auto.
+ apply val_content_inject_32; auto.
+Qed.
+
+Lemma content_inject_incr:
+ forall c c', content_inject f1 c c' -> content_inject f2 c c'.
+Proof.
+ induction 1; constructor; eapply val_content_inject_incr; eauto.
+Qed.
+
+Lemma contentmap_inject_incr:
+ forall c c' lo hi delta,
+ contentmap_inject f1 c c' lo hi delta ->
+ contentmap_inject f2 c c' lo hi delta.
+Proof.
+ unfold contentmap_inject; intros.
+ apply content_inject_incr. auto.
+Qed.
+
+Lemma block_contents_inject_incr:
+ forall c c' delta,
+ block_contents_inject f1 c c' delta ->
+ block_contents_inject f2 c c' delta.
+Proof.
+ intros. inversion H. constructor; auto.
+ apply contentmap_inject_incr; auto.
+Qed.
+
+End MEM_INJECT_INCR.
+
+(** Properties of injections and allocations. *)
+
+Definition extend_inject
+ (b: block) (x: option (block * Z)) (f: meminj) : meminj :=
+ fun b' => if eq_block b' b then x else f b'.
+
+Lemma extend_inject_incr:
+ forall f b x,
+ f b = None ->
+ inject_incr f (extend_inject b x f).
+Proof.
+ intros; red; intros. unfold extend_inject.
+ case (eq_block b0 b); intro. subst b0. right; auto. left; auto.
+Qed.
+
+Lemma alloc_right_inject:
+ forall f m1 m2 lo hi m2' b,
+ mem_inject f m1 m2 ->
+ alloc m2 lo hi = (m2', b) ->
+ mem_inject f m1 m2'.
+Proof.
+ intros. unfold alloc in H0. injection H0; intros A B; clear H0.
+ inversion H.
+ constructor.
+ assumption.
+ intros. generalize (mi_mappedblocks0 _ _ _ H0). intros [C D].
+ rewrite <- B; simpl. split. omega.
+ rewrite update_o. auto. omega.
+ assumption.
+Qed.
+
+Lemma alloc_unmapped_inject:
+ forall f m1 m2 lo hi m1' b,
+ mem_inject f m1 m2 ->
+ alloc m1 lo hi = (m1', b) ->
+ mem_inject (extend_inject b None f) m1' m2 /\
+ inject_incr f (extend_inject b None f).
+Proof.
+ intros. unfold alloc in H0. injection H0; intros; clear H0.
+ inversion H.
+ assert (inject_incr f (extend_inject b None f)).
+ apply extend_inject_incr. apply mi_freeblocks0. rewrite H1. omega.
+ split; auto.
+ constructor.
+ rewrite <- H2; simpl; intros. unfold extend_inject.
+ case (eq_block b0 b); intro. auto. apply mi_freeblocks0. omega.
+ intros until delta. unfold extend_inject at 1. case (eq_block b0 b); intro.
+ intros; discriminate.
+ intros. rewrite <- H2; simpl. rewrite H1.
+ rewrite update_o; auto.
+ elim (mi_mappedblocks0 _ _ _ H3). intros A B.
+ split. auto. apply block_contents_inject_incr with f. auto. auto.
+ intros until delta2. unfold extend_inject.
+ case (eq_block b1 b); intro. congruence.
+ case (eq_block b2 b); intro. congruence.
+ rewrite <- H2. unfold low_bound, high_bound; simpl. rewrite H1.
+ repeat rewrite update_o; auto.
+ exact (mi_no_overlap0 b1 b2 b1' b2' delta1 delta2).
+Qed.
+
+Lemma alloc_mapped_inject:
+ forall f m1 m2 lo hi m1' b b' ofs,
+ mem_inject f m1 m2 ->
+ alloc m1 lo hi = (m1', b) ->
+ valid_block m2 b' ->
+ Int.min_signed <= ofs <= Int.max_signed ->
+ Int.min_signed <= low_bound m2 b' ->
+ high_bound m2 b' <= Int.max_signed ->
+ low_bound m2 b' <= lo + ofs ->
+ hi + ofs <= high_bound m2 b' ->
+ (forall b0 ofs0,
+ f b0 = Some (b', ofs0) ->
+ high_bound m1 b0 + ofs0 <= lo + ofs \/
+ hi + ofs <= low_bound m1 b0 + ofs0) ->
+ mem_inject (extend_inject b (Some (b', ofs)) f) m1' m2 /\
+ inject_incr f (extend_inject b (Some (b', ofs)) f).
+Proof.
+ intros.
+ generalize (fun b' => low_bound_alloc _ _ b' _ _ _ H0).
+ intro LOW.
+ generalize (fun b' => high_bound_alloc _ _ b' _ _ _ H0).
+ intro HIGH.
+ unfold alloc in H0. injection H0; intros A B; clear H0.
+ inversion H.
+ (* inject_incr *)
+ assert (inject_incr f (extend_inject b (Some (b', ofs)) f)).
+ apply extend_inject_incr. apply mi_freeblocks0. rewrite A. omega.
+ split; auto.
+ constructor.
+ (* mi_freeblocks *)
+ rewrite <- B; simpl; intros. unfold extend_inject.
+ case (eq_block b0 b); intro. unfold block in *. omegaContradiction.
+ apply mi_freeblocks0. omega.
+ (* mi_mappedblocks *)
+ intros until delta. unfold extend_inject at 1.
+ case (eq_block b0 b); intro.
+ intros. subst b0. inversion H8. subst b'0; subst delta.
+ split. assumption.
+ rewrite <- B; simpl. rewrite A. rewrite update_s.
+ constructor; auto.
+ unfold empty_block. simpl. intros. unfold low_bound in H5. unfold high_bound in H6. omega.
+ simpl. red; intros. constructor.
+ intros.
+ generalize (mi_mappedblocks0 _ _ _ H8). intros [C D].
+ split. auto.
+ rewrite <- B; simpl; rewrite A; rewrite update_o; auto.
+ apply block_contents_inject_incr with f; auto.
+ (* no overlap *)
+ intros until delta2. unfold extend_inject.
+ repeat rewrite LOW. repeat rewrite HIGH. unfold eq_block.
+ case (zeq b1 b); case (zeq b2 b); intros.
+ congruence.
+ inversion H9. subst b1'; subst delta1.
+ case (eq_block b' b2'); intro.
+ subst b2'. generalize (H7 _ _ H10). intro.
+ right. intros. omega. left. auto.
+ inversion H10. subst b2'; subst delta2.
+ case (eq_block b' b1'); intro.
+ subst b1'. generalize (H7 _ _ H9). intro.
+ right. intros. omega. left. auto.
+ apply mi_no_overlap0; auto.
+Qed.
diff --git a/backend/Op.v b/backend/Op.v
new file mode 100644
index 0000000..e0dcfa4
--- /dev/null
+++ b/backend/Op.v
@@ -0,0 +1,691 @@
+(** Operators and addressing modes. The abstract syntax and dynamic
+ semantics for the Cminor, RTL, LTL and Mach languages depend on the
+ following types, defined in this library:
+- [condition]: boolean conditions for conditional branches;
+- [operation]: arithmetic and logical operations;
+- [addressing]: addressing modes for load and store operations.
+
+ These types are PowerPC-specific and correspond roughly to what the
+ processor can compute in one instruction. In other terms, these
+ types reflect the state of the program after instruction selection.
+ For a processor-independent set of operations, see the abstract
+ syntax and dynamic semantics of the Csharpminor input language.
+*)
+
+Require Import Coqlib.
+Require Import AST.
+Require Import Integers.
+Require Import Floats.
+Require Import Values.
+Require Import Mem.
+Require Import Globalenvs.
+
+Set Implicit Arguments.
+
+(** Conditions (boolean-valued operators). *)
+
+Inductive condition : Set :=
+ | Ccomp: comparison -> condition (**r signed integer comparison *)
+ | Ccompu: comparison -> condition (**r unsigned integer comparison *)
+ | Ccompimm: comparison -> int -> condition (**r signed integer comparison with a constant *)
+ | Ccompuimm: comparison -> int -> condition (**r unsigned integer comparison with a constant *)
+ | Ccompf: comparison -> condition (**r floating-point comparison *)
+ | Cnotcompf: comparison -> condition (**r negation of a floating-point comparison *)
+ | Cmaskzero: int -> condition (**r test [(arg & constant) == 0] *)
+ | Cmasknotzero: int -> condition. (**r test [(arg & constant) != 0] *)
+
+(** Arithmetic and logical operations. In the descriptions, [rd] is the
+ result of the operation and [r1], [r2], etc, are the arguments. *)
+
+Inductive operation : Set :=
+ | Omove: operation (**r [rd = r1] *)
+ | Ointconst: int -> operation (**r [rd] is set to the given integer constant *)
+ | Ofloatconst: float -> operation (**r [rd] is set to the given float constant *)
+ | Oaddrsymbol: ident -> int -> operation (**r [rd] is set to the the address of the symbol plus the offset *)
+ | Oaddrstack: int -> operation (**r [rd] is set to the stack pointer plus the given offset *)
+ | Oundef: operation (**r set [rd] to undefined value *)
+(*c Integer arithmetic: *)
+ | Ocast8signed: operation (**r [rd] is 8-bit sign extension of [r1] *)
+ | Ocast16signed: operation (**r [rd] is 16-bit sign extension of [r1] *)
+ | Oadd: operation (**r [rd = r1 + r2] *)
+ | Oaddimm: int -> operation (**r [rd = r1 + n] *)
+ | Osub: operation (**r [rd = r1 - r2] *)
+ | Osubimm: int -> operation (**r [rd = n - r1] *)
+ | Omul: operation (**r [rd = r1 * r2] *)
+ | Omulimm: int -> operation (**r [rd = r1 * n] *)
+ | Odiv: operation (**r [rd = r1 / r2] (signed) *)
+ | Odivu: operation (**r [rd = r1 / r2] (unsigned) *)
+ | Oand: operation (**r [rd = r1 & r2] *)
+ | Oandimm: int -> operation (**r [rd = r1 & n] *)
+ | Oor: operation (**r [rd = r1 | r2] *)
+ | Oorimm: int -> operation (**r [rd = r1 | n] *)
+ | Oxor: operation (**r [rd = r1 ^ r2] *)
+ | Oxorimm: int -> operation (**r [rd = r1 ^ n] *)
+ | Onand: operation (**r [rd = ~(r1 & r2)] *)
+ | Onor: operation (**r [rd = ~(r1 | r2)] *)
+ | Onxor: operation (**r [rd = ~(r1 ^ r2)] *)
+ | Oshl: operation (**r [rd = r1 << r2] *)
+ | Oshr: operation (**r [rd = r1 >> r2] (signed) *)
+ | Oshrimm: int -> operation (**r [rd = r1 >> n] (signed) *)
+ | Oshrximm: int -> operation (**r [rd = r1 / 2^n] (signed) *)
+ | Oshru: operation (**r [rd = r1 >> r2] (unsigned) *)
+ | Orolm: int -> int -> operation (**r rotate left and mask *)
+(*c Floating-point arithmetic: *)
+ | Onegf: operation (**r [rd = - r1] *)
+ | Oabsf: operation (**r [rd = abs(r1)] *)
+ | Oaddf: operation (**r [rd = r1 + r2] *)
+ | Osubf: operation (**r [rd = r1 - r2] *)
+ | Omulf: operation (**r [rd = r1 * r2] *)
+ | Odivf: operation (**r [rd = r1 / r2] *)
+ | Omuladdf: operation (**r [rd = r1 * r2 + r3] *)
+ | Omulsubf: operation (**r [rd = r1 * r2 - r3] *)
+ | Osingleoffloat: operation (**r [rd] is [r1] truncated to single-precision float *)
+(*c Conversions between int and float: *)
+ | Ointoffloat: operation (**r [rd = int_of_float(r1)] *)
+ | Ofloatofint: operation (**r [rd = float_of_signed_int(r1)] *)
+ | Ofloatofintu: operation (**r [rd = float_of_unsigned_int(r1)] *)
+(*c Boolean tests: *)
+ | Ocmp: condition -> operation. (**r [rd = 1] if condition holds, [rd = 0] otherwise. *)
+
+(** Addressing modes. [r1], [r2], etc, are the arguments to the
+ addressing. *)
+
+Inductive addressing: Set :=
+ | Aindexed: int -> addressing (**r Address is [r1 + offset] *)
+ | Aindexed2: addressing (**r Address is [r1 + r2] *)
+ | Aglobal: ident -> int -> addressing (**r Address is [symbol + offset] *)
+ | Abased: ident -> int -> addressing (**r Address is [symbol + offset + r1] *)
+ | Ainstack: int -> addressing. (**r Address is [stack_pointer + offset] *)
+
+(** Evaluation of conditions, operators and addressing modes applied
+ to lists of values. Return [None] when the computation is undefined:
+ wrong number of arguments, arguments of the wrong types, undefined
+ operations such as division by zero. [eval_condition] returns a boolean,
+ [eval_operation] and [eval_addressing] return a value. *)
+
+Definition eval_compare_null (c: comparison) (n: int) : option bool :=
+ if Int.eq n Int.zero
+ then match c with Ceq => Some false | Cne => Some true | _ => None end
+ else None.
+
+Definition eval_condition (cond: condition) (vl: list val) : option bool :=
+ match cond, vl with
+ | Ccomp c, Vint n1 :: Vint n2 :: nil =>
+ Some (Int.cmp c n1 n2)
+ | Ccomp c, Vptr b1 n1 :: Vptr b2 n2 :: nil =>
+ if eq_block b1 b2 then Some (Int.cmp c n1 n2) else None
+ | Ccomp c, Vptr b1 n1 :: Vint n2 :: nil =>
+ eval_compare_null c n2
+ | Ccomp c, Vint n1 :: Vptr b2 n2 :: nil =>
+ eval_compare_null c n1
+ | Ccompu c, Vint n1 :: Vint n2 :: nil =>
+ Some (Int.cmpu c n1 n2)
+ | Ccompu c, Vptr b1 n1 :: Vptr b2 n2 :: nil =>
+ if eq_block b1 b2 then Some (Int.cmpu c n1 n2) else None
+ | Ccompu c, Vptr b1 n1 :: Vint n2 :: nil =>
+ eval_compare_null c n2
+ | Ccompu c, Vint n1 :: Vptr b2 n2 :: nil =>
+ eval_compare_null c n1
+ | Ccompimm c n, Vint n1 :: nil =>
+ Some (Int.cmp c n1 n)
+ | Ccompimm c n, Vptr b1 n1 :: nil =>
+ eval_compare_null c n
+ | Ccompuimm c n, Vint n1 :: nil =>
+ Some (Int.cmpu c n1 n)
+ | Ccompuimm c n, Vptr b1 n1 :: nil =>
+ eval_compare_null c n
+ | Ccompf c, Vfloat f1 :: Vfloat f2 :: nil =>
+ Some (Float.cmp c f1 f2)
+ | Cnotcompf c, Vfloat f1 :: Vfloat f2 :: nil =>
+ Some (negb (Float.cmp c f1 f2))
+ | Cmaskzero n, Vint n1 :: nil =>
+ Some (Int.eq (Int.and n1 n) Int.zero)
+ | Cmasknotzero n, Vint n1 :: nil =>
+ Some (negb (Int.eq (Int.and n1 n) Int.zero))
+ | _, _ =>
+ None
+ end.
+
+Definition offset_sp (sp: val) (delta: int) : option val :=
+ match sp with
+ | Vptr b n => Some (Vptr b (Int.add n delta))
+ | _ => None
+ end.
+
+Definition eval_operation
+ (F: Set) (genv: Genv.t F) (sp: val)
+ (op: operation) (vl: list val) : option val :=
+ match op, vl with
+ | Omove, v1::nil => Some v1
+ | Ointconst n, nil => Some (Vint n)
+ | Ofloatconst n, nil => Some (Vfloat n)
+ | Oaddrsymbol s ofs, nil =>
+ match Genv.find_symbol genv s with
+ | None => None
+ | Some b => Some (Vptr b ofs)
+ end
+ | Oaddrstack ofs, nil => offset_sp sp ofs
+ | Oundef, nil => Some Vundef
+ | Ocast8signed, Vint n1 :: nil => Some (Vint (Int.cast8signed n1))
+ | Ocast16signed, Vint n1 :: nil => Some (Vint (Int.cast16signed n1))
+ | Oadd, Vint n1 :: Vint n2 :: nil => Some (Vint (Int.add n1 n2))
+ | Oadd, Vint n1 :: Vptr b2 n2 :: nil => Some (Vptr b2 (Int.add n2 n1))
+ | Oadd, Vptr b1 n1 :: Vint n2 :: nil => Some (Vptr b1 (Int.add n1 n2))
+ | Oaddimm n, Vint n1 :: nil => Some (Vint (Int.add n1 n))
+ | Oaddimm n, Vptr b1 n1 :: nil => Some (Vptr b1 (Int.add n1 n))
+ | Osub, Vint n1 :: Vint n2 :: nil => Some (Vint (Int.sub n1 n2))
+ | Osub, Vptr b1 n1 :: Vint n2 :: nil => Some (Vptr b1 (Int.sub n1 n2))
+ | Osub, Vptr b1 n1 :: Vptr b2 n2 :: nil =>
+ if eq_block b1 b2 then Some (Vint (Int.sub n1 n2)) else None
+ | Osubimm n, Vint n1 :: nil => Some (Vint (Int.sub n n1))
+ | Omul, Vint n1 :: Vint n2 :: nil => Some (Vint (Int.mul n1 n2))
+ | Omulimm n, Vint n1 :: nil => Some (Vint (Int.mul n1 n))
+ | Odiv, Vint n1 :: Vint n2 :: nil =>
+ if Int.eq n2 Int.zero then None else Some (Vint (Int.divs n1 n2))
+ | Odivu, Vint n1 :: Vint n2 :: nil =>
+ if Int.eq n2 Int.zero then None else Some (Vint (Int.divu n1 n2))
+ | Oand, Vint n1 :: Vint n2 :: nil => Some (Vint (Int.and n1 n2))
+ | Oandimm n, Vint n1 :: nil => Some (Vint (Int.and n1 n))
+ | Oor, Vint n1 :: Vint n2 :: nil => Some (Vint (Int.or n1 n2))
+ | Oorimm n, Vint n1 :: nil => Some (Vint (Int.or n1 n))
+ | Oxor, Vint n1 :: Vint n2 :: nil => Some (Vint (Int.xor n1 n2))
+ | Oxorimm n, Vint n1 :: nil => Some (Vint (Int.xor n1 n))
+ | Onand, Vint n1 :: Vint n2 :: nil => Some (Vint (Int.not (Int.and n1 n2)))
+ | Onor, Vint n1 :: Vint n2 :: nil => Some (Vint (Int.not (Int.or n1 n2)))
+ | Onxor, Vint n1 :: Vint n2 :: nil => Some (Vint (Int.not (Int.xor n1 n2)))
+ | Oshl, Vint n1 :: Vint n2 :: nil =>
+ if Int.ltu n2 (Int.repr 32) then Some (Vint (Int.shl n1 n2)) else None
+ | Oshr, Vint n1 :: Vint n2 :: nil =>
+ if Int.ltu n2 (Int.repr 32) then Some (Vint (Int.shr n1 n2)) else None
+ | Oshrimm n, Vint n1 :: nil =>
+ if Int.ltu n (Int.repr 32) then Some (Vint (Int.shr n1 n)) else None
+ | Oshrximm n, Vint n1 :: nil =>
+ if Int.ltu n (Int.repr 32) then Some (Vint (Int.shrx n1 n)) else None
+ | Oshru, Vint n1 :: Vint n2 :: nil =>
+ if Int.ltu n2 (Int.repr 32) then Some (Vint (Int.shru n1 n2)) else None
+ | Orolm amount mask, Vint n1 :: nil =>
+ Some (Vint (Int.rolm n1 amount mask))
+ | Onegf, Vfloat f1 :: nil => Some (Vfloat (Float.neg f1))
+ | Oabsf, Vfloat f1 :: nil => Some (Vfloat (Float.abs f1))
+ | Oaddf, Vfloat f1 :: Vfloat f2 :: nil => Some (Vfloat (Float.add f1 f2))
+ | Osubf, Vfloat f1 :: Vfloat f2 :: nil => Some (Vfloat (Float.sub f1 f2))
+ | Omulf, Vfloat f1 :: Vfloat f2 :: nil => Some (Vfloat (Float.mul f1 f2))
+ | Odivf, Vfloat f1 :: Vfloat f2 :: nil => Some (Vfloat (Float.div f1 f2))
+ | Omuladdf, Vfloat f1 :: Vfloat f2 :: Vfloat f3 :: nil =>
+ Some (Vfloat (Float.add (Float.mul f1 f2) f3))
+ | Omulsubf, Vfloat f1 :: Vfloat f2 :: Vfloat f3 :: nil =>
+ Some (Vfloat (Float.sub (Float.mul f1 f2) f3))
+ | Osingleoffloat, Vfloat f1 :: nil =>
+ Some (Vfloat (Float.singleoffloat f1))
+ | Ointoffloat, Vfloat f1 :: nil =>
+ Some (Vint (Float.intoffloat f1))
+ | Ofloatofint, Vint n1 :: nil =>
+ Some (Vfloat (Float.floatofint n1))
+ | Ofloatofintu, Vint n1 :: nil =>
+ Some (Vfloat (Float.floatofintu n1))
+ | Ocmp c, _ =>
+ match eval_condition c vl with
+ | None => None
+ | Some false => Some Vfalse
+ | Some true => Some Vtrue
+ end
+ | _, _ => None
+ end.
+
+Definition eval_addressing
+ (F: Set) (genv: Genv.t F) (sp: val)
+ (addr: addressing) (vl: list val) : option val :=
+ match addr, vl with
+ | Aindexed n, Vptr b1 n1 :: nil =>
+ Some (Vptr b1 (Int.add n1 n))
+ | Aindexed2, Vptr b1 n1 :: Vint n2 :: nil =>
+ Some (Vptr b1 (Int.add n1 n2))
+ | Aindexed2, Vint n1 :: Vptr b2 n2 :: nil =>
+ Some (Vptr b2 (Int.add n1 n2))
+ | Aglobal s ofs, nil =>
+ match Genv.find_symbol genv s with
+ | None => None
+ | Some b => Some (Vptr b ofs)
+ end
+ | Abased s ofs, Vint n1 :: nil =>
+ match Genv.find_symbol genv s with
+ | None => None
+ | Some b => Some (Vptr b (Int.add ofs n1))
+ end
+ | Ainstack ofs, nil =>
+ offset_sp sp ofs
+ | _, _ => None
+ end.
+
+Definition negate_condition (cond: condition): condition :=
+ match cond with
+ | Ccomp c => Ccomp(negate_comparison c)
+ | Ccompu c => Ccompu(negate_comparison c)
+ | Ccompimm c n => Ccompimm (negate_comparison c) n
+ | Ccompuimm c n => Ccompuimm (negate_comparison c) n
+ | Ccompf c => Cnotcompf c
+ | Cnotcompf c => Ccompf c
+ | Cmaskzero n => Cmasknotzero n
+ | Cmasknotzero n => Cmaskzero n
+ end.
+
+Ltac FuncInv :=
+ match goal with
+ | H: (match ?x with nil => _ | _ :: _ => _ end = Some _) |- _ =>
+ destruct x; simpl in H; try discriminate; FuncInv
+ | H: (match ?v with Vundef => _ | Vint _ => _ | Vfloat _ => _ | Vptr _ _ => _ end = Some _) |- _ =>
+ destruct v; simpl in H; try discriminate; FuncInv
+ | H: (Some _ = Some _) |- _ =>
+ injection H; intros; clear H; FuncInv
+ | _ =>
+ idtac
+ end.
+
+Remark eval_negate_compare_null:
+ forall c n b,
+ eval_compare_null c n = Some b ->
+ eval_compare_null (negate_comparison c) n = Some (negb b).
+Proof.
+ intros until b. unfold eval_compare_null.
+ case (Int.eq n Int.zero).
+ destruct c; intro EQ; simplify_eq EQ; intros; subst b; reflexivity.
+ intro; discriminate.
+Qed.
+
+Lemma eval_negate_condition:
+ forall (cond: condition) (vl: list val) (b: bool),
+ eval_condition cond vl = Some b ->
+ eval_condition (negate_condition cond) vl = Some (negb b).
+Proof.
+ intros.
+ destruct cond; simpl in H; FuncInv; try subst b; simpl.
+ rewrite Int.negate_cmp. auto.
+ apply eval_negate_compare_null; auto.
+ apply eval_negate_compare_null; auto.
+ destruct (eq_block b0 b1). rewrite Int.negate_cmp. congruence.
+ discriminate.
+ rewrite Int.negate_cmpu. auto.
+ apply eval_negate_compare_null; auto.
+ apply eval_negate_compare_null; auto.
+ destruct (eq_block b0 b1). rewrite Int.negate_cmpu. congruence.
+ discriminate.
+ rewrite Int.negate_cmp. auto.
+ apply eval_negate_compare_null; auto.
+ rewrite Int.negate_cmpu. auto.
+ apply eval_negate_compare_null; auto.
+ auto.
+ rewrite negb_elim. auto.
+ auto.
+ rewrite negb_elim. auto.
+Qed.
+
+(** [eval_operation] and [eval_addressing] depend on a global environment
+ for resolving references to global symbols. We show that they give
+ the same results if a global environment is replaced by another that
+ assigns the same addresses to the same symbols. *)
+
+Section GENV_TRANSF.
+
+Variable F1 F2: Set.
+Variable ge1: Genv.t F1.
+Variable ge2: Genv.t F2.
+Hypothesis agree_on_symbols:
+ forall (s: ident), Genv.find_symbol ge2 s = Genv.find_symbol ge1 s.
+
+Lemma eval_operation_preserved:
+ forall sp op vl,
+ eval_operation ge2 sp op vl = eval_operation ge1 sp op vl.
+Proof.
+ intros.
+ unfold eval_operation; destruct op; try rewrite agree_on_symbols;
+ reflexivity.
+Qed.
+
+Lemma eval_addressing_preserved:
+ forall sp addr vl,
+ eval_addressing ge2 sp addr vl = eval_addressing ge1 sp addr vl.
+Proof.
+ intros.
+ unfold eval_addressing; destruct addr; try rewrite agree_on_symbols;
+ reflexivity.
+Qed.
+
+End GENV_TRANSF.
+
+(** Recognition of move operations. *)
+
+Definition is_move_operation
+ (A: Set) (op: operation) (args: list A) : option A :=
+ match op, args with
+ | Omove, arg :: nil => Some arg
+ | _, _ => None
+ end.
+
+Lemma is_move_operation_correct:
+ forall (A: Set) (op: operation) (args: list A) (a: A),
+ is_move_operation op args = Some a ->
+ op = Omove /\ args = a :: nil.
+Proof.
+ intros until a. unfold is_move_operation; destruct op;
+ try (intros; discriminate).
+ destruct args. intros; discriminate.
+ destruct args. intros. intuition congruence.
+ intros; discriminate.
+Qed.
+
+(** Static typing of conditions, operators and addressing modes. *)
+
+Definition type_of_condition (c: condition) : list typ :=
+ match c with
+ | Ccomp _ => Tint :: Tint :: nil
+ | Ccompu _ => Tint :: Tint :: nil
+ | Ccompimm _ _ => Tint :: nil
+ | Ccompuimm _ _ => Tint :: nil
+ | Ccompf _ => Tfloat :: Tfloat :: nil
+ | Cnotcompf _ => Tfloat :: Tfloat :: nil
+ | Cmaskzero _ => Tint :: nil
+ | Cmasknotzero _ => Tint :: nil
+ end.
+
+Definition type_of_operation (op: operation) : list typ * typ :=
+ match op with
+ | Omove => (nil, Tint) (* treated specially *)
+ | Ointconst _ => (nil, Tint)
+ | Ofloatconst _ => (nil, Tfloat)
+ | Oaddrsymbol _ _ => (nil, Tint)
+ | Oaddrstack _ => (nil, Tint)
+ | Oundef => (nil, Tint) (* treated specially *)
+ | Ocast8signed => (Tint :: nil, Tint)
+ | Ocast16signed => (Tint :: nil, Tint)
+ | Oadd => (Tint :: Tint :: nil, Tint)
+ | Oaddimm _ => (Tint :: nil, Tint)
+ | Osub => (Tint :: Tint :: nil, Tint)
+ | Osubimm _ => (Tint :: nil, Tint)
+ | Omul => (Tint :: Tint :: nil, Tint)
+ | Omulimm _ => (Tint :: nil, Tint)
+ | Odiv => (Tint :: Tint :: nil, Tint)
+ | Odivu => (Tint :: Tint :: nil, Tint)
+ | Oand => (Tint :: Tint :: nil, Tint)
+ | Oandimm _ => (Tint :: nil, Tint)
+ | Oor => (Tint :: Tint :: nil, Tint)
+ | Oorimm _ => (Tint :: nil, Tint)
+ | Oxor => (Tint :: Tint :: nil, Tint)
+ | Oxorimm _ => (Tint :: nil, Tint)
+ | Onand => (Tint :: Tint :: nil, Tint)
+ | Onor => (Tint :: Tint :: nil, Tint)
+ | Onxor => (Tint :: Tint :: nil, Tint)
+ | Oshl => (Tint :: Tint :: nil, Tint)
+ | Oshr => (Tint :: Tint :: nil, Tint)
+ | Oshrimm _ => (Tint :: nil, Tint)
+ | Oshrximm _ => (Tint :: nil, Tint)
+ | Oshru => (Tint :: Tint :: nil, Tint)
+ | Orolm _ _ => (Tint :: nil, Tint)
+ | Onegf => (Tfloat :: nil, Tfloat)
+ | Oabsf => (Tfloat :: nil, Tfloat)
+ | Oaddf => (Tfloat :: Tfloat :: nil, Tfloat)
+ | Osubf => (Tfloat :: Tfloat :: nil, Tfloat)
+ | Omulf => (Tfloat :: Tfloat :: nil, Tfloat)
+ | Odivf => (Tfloat :: Tfloat :: nil, Tfloat)
+ | Omuladdf => (Tfloat :: Tfloat :: Tfloat :: nil, Tfloat)
+ | Omulsubf => (Tfloat :: Tfloat :: Tfloat :: nil, Tfloat)
+ | Osingleoffloat => (Tfloat :: nil, Tfloat)
+ | Ointoffloat => (Tfloat :: nil, Tint)
+ | Ofloatofint => (Tint :: nil, Tfloat)
+ | Ofloatofintu => (Tint :: nil, Tfloat)
+ | Ocmp c => (type_of_condition c, Tint)
+ end.
+
+Definition type_of_addressing (addr: addressing) : list typ :=
+ match addr with
+ | Aindexed _ => Tint :: nil
+ | Aindexed2 => Tint :: Tint :: nil
+ | Aglobal _ _ => nil
+ | Abased _ _ => Tint :: nil
+ | Ainstack _ => nil
+ end.
+
+Definition type_of_chunk (c: memory_chunk) : typ :=
+ match c with
+ | Mint8signed => Tint
+ | Mint8unsigned => Tint
+ | Mint16signed => Tint
+ | Mint16unsigned => Tint
+ | Mint32 => Tint
+ | Mfloat32 => Tfloat
+ | Mfloat64 => Tfloat
+ end.
+
+(** Weak type soundness results for [eval_operation]:
+ the result values, when defined, are always of the type predicted
+ by [type_of_operation]. *)
+
+Section SOUNDNESS.
+
+Variable A: Set.
+Variable genv: Genv.t A.
+
+Lemma type_of_operation_sound:
+ forall op vl sp v,
+ op <> Omove -> op <> Oundef ->
+ eval_operation genv sp op vl = Some v ->
+ Val.has_type v (snd (type_of_operation op)).
+Proof.
+ intros.
+ destruct op; simpl in H1; FuncInv; try subst v; try exact I.
+ congruence.
+ destruct (Genv.find_symbol genv i); simplify_eq H1; intro; subst v; exact I.
+ simpl. unfold offset_sp in H1. destruct sp; try discriminate.
+ inversion H1. exact I.
+ destruct (eq_block b b0). injection H1; intro; subst v; exact I.
+ discriminate.
+ destruct (Int.eq i0 Int.zero). discriminate.
+ injection H1; intro; subst v; exact I.
+ destruct (Int.eq i0 Int.zero). discriminate.
+ injection H1; intro; subst v; exact I.
+ destruct (Int.ltu i0 (Int.repr 32)).
+ injection H1; intro; subst v; exact I. discriminate.
+ destruct (Int.ltu i0 (Int.repr 32)).
+ injection H1; intro; subst v; exact I. discriminate.
+ destruct (Int.ltu i (Int.repr 32)).
+ injection H1; intro; subst v; exact I. discriminate.
+ destruct (Int.ltu i (Int.repr 32)).
+ injection H1; intro; subst v; exact I. discriminate.
+ destruct (Int.ltu i0 (Int.repr 32)).
+ injection H1; intro; subst v; exact I. discriminate.
+ destruct (eval_condition c vl).
+ destruct b; injection H1; intro; subst v; exact I.
+ discriminate.
+Qed.
+
+Lemma type_of_chunk_correct:
+ forall chunk m addr v,
+ Mem.loadv chunk m addr = Some v ->
+ Val.has_type v (type_of_chunk chunk).
+Proof.
+ intro chunk.
+ assert (forall v, Val.has_type (Val.load_result chunk v) (type_of_chunk chunk)).
+ destruct v; destruct chunk; exact I.
+ intros until v. unfold Mem.loadv.
+ destruct addr; intros; try discriminate.
+ generalize (Mem.load_inv _ _ _ _ _ H0).
+ intros [X [Y [Z W]]]. subst v. apply H.
+Qed.
+
+End SOUNDNESS.
+
+(** Alternate definition of [eval_condition], [eval_op], [eval_addressing]
+ as total functions that return [Vundef] when not applicable
+ (instead of [None]). Used in the proof of [PPCgen]. *)
+
+Section EVAL_OP_TOTAL.
+
+Variable F: Set.
+Variable genv: Genv.t F.
+
+Definition find_symbol_offset (id: ident) (ofs: int) : val :=
+ match Genv.find_symbol genv id with
+ | Some b => Vptr b ofs
+ | None => Vundef
+ end.
+
+Definition eval_condition_total (cond: condition) (vl: list val) : val :=
+ match cond, vl with
+ | Ccomp c, v1::v2::nil => Val.cmp c v1 v2
+ | Ccompu c, v1::v2::nil => Val.cmpu c v1 v2
+ | Ccompimm c n, v1::nil => Val.cmp c v1 (Vint n)
+ | Ccompuimm c n, v1::nil => Val.cmpu c v1 (Vint n)
+ | Ccompf c, v1::v2::nil => Val.cmpf c v1 v2
+ | Cnotcompf c, v1::v2::nil => Val.notbool(Val.cmpf c v1 v2)
+ | Cmaskzero n, v1::nil => Val.notbool (Val.and v1 (Vint n))
+ | Cmasknotzero n, v1::nil => Val.notbool(Val.notbool (Val.and v1 (Vint n)))
+ | _, _ => Vundef
+ end.
+
+Definition eval_operation_total (sp: val) (op: operation) (vl: list val) : val :=
+ match op, vl with
+ | Omove, v1::nil => v1
+ | Ointconst n, nil => Vint n
+ | Ofloatconst n, nil => Vfloat n
+ | Oaddrsymbol s ofs, nil => find_symbol_offset s ofs
+ | Oaddrstack ofs, nil => Val.add sp (Vint ofs)
+ | Oundef, nil => Vundef
+ | Ocast8signed, v1::nil => Val.cast8signed v1
+ | Ocast16signed, v1::nil => Val.cast16signed v1
+ | Oadd, v1::v2::nil => Val.add v1 v2
+ | Oaddimm n, v1::nil => Val.add v1 (Vint n)
+ | Osub, v1::v2::nil => Val.sub v1 v2
+ | Osubimm n, v1::nil => Val.sub (Vint n) v1
+ | Omul, v1::v2::nil => Val.mul v1 v2
+ | Omulimm n, v1::nil => Val.mul v1 (Vint n)
+ | Odiv, v1::v2::nil => Val.divs v1 v2
+ | Odivu, v1::v2::nil => Val.divu v1 v2
+ | Oand, v1::v2::nil => Val.and v1 v2
+ | Oandimm n, v1::nil => Val.and v1 (Vint n)
+ | Oor, v1::v2::nil => Val.or v1 v2
+ | Oorimm n, v1::nil => Val.or v1 (Vint n)
+ | Oxor, v1::v2::nil => Val.xor v1 v2
+ | Oxorimm n, v1::nil => Val.xor v1 (Vint n)
+ | Onand, v1::v2::nil => Val.notint(Val.and v1 v2)
+ | Onor, v1::v2::nil => Val.notint(Val.or v1 v2)
+ | Onxor, v1::v2::nil => Val.notint(Val.xor v1 v2)
+ | Oshl, v1::v2::nil => Val.shl v1 v2
+ | Oshr, v1::v2::nil => Val.shr v1 v2
+ | Oshrimm n, v1::nil => Val.shr v1 (Vint n)
+ | Oshrximm n, v1::nil => Val.shrx v1 (Vint n)
+ | Oshru, v1::v2::nil => Val.shru v1 v2
+ | Orolm amount mask, v1::nil => Val.rolm v1 amount mask
+ | Onegf, v1::nil => Val.negf v1
+ | Oabsf, v1::nil => Val.absf v1
+ | Oaddf, v1::v2::nil => Val.addf v1 v2
+ | Osubf, v1::v2::nil => Val.subf v1 v2
+ | Omulf, v1::v2::nil => Val.mulf v1 v2
+ | Odivf, v1::v2::nil => Val.divf v1 v2
+ | Omuladdf, v1::v2::v3::nil => Val.addf (Val.mulf v1 v2) v3
+ | Omulsubf, v1::v2::v3::nil => Val.subf (Val.mulf v1 v2) v3
+ | Osingleoffloat, v1::nil => Val.singleoffloat v1
+ | Ointoffloat, v1::nil => Val.intoffloat v1
+ | Ofloatofint, v1::nil => Val.floatofint v1
+ | Ofloatofintu, v1::nil => Val.floatofintu v1
+ | Ocmp c, _ => eval_condition_total c vl
+ | _, _ => Vundef
+ end.
+
+Definition eval_addressing_total
+ (sp: val) (addr: addressing) (vl: list val) : val :=
+ match addr, vl with
+ | Aindexed n, v1::nil => Val.add v1 (Vint n)
+ | Aindexed2, v1::v2::nil => Val.add v1 v2
+ | Aglobal s ofs, nil => find_symbol_offset s ofs
+ | Abased s ofs, v1::nil => Val.add (find_symbol_offset s ofs) v1
+ | Ainstack ofs, nil => Val.add sp (Vint ofs)
+ | _, _ => Vundef
+ end.
+
+Lemma eval_compare_null_weaken:
+ forall c i b,
+ eval_compare_null c i = Some b ->
+ (if Int.eq i Int.zero then Val.cmp_mismatch c else Vundef) = Val.of_bool b.
+Proof.
+ unfold eval_compare_null. intros.
+ destruct (Int.eq i Int.zero); try discriminate.
+ destruct c; try discriminate; inversion H; reflexivity.
+Qed.
+
+Lemma eval_condition_weaken:
+ forall c vl b,
+ eval_condition c vl = Some b ->
+ eval_condition_total c vl = Val.of_bool b.
+Proof.
+ intros.
+ unfold eval_condition in H; destruct c; FuncInv;
+ try subst b; try reflexivity; simpl;
+ try (apply eval_compare_null_weaken; auto).
+ unfold eq_block in H. destruct (zeq b0 b1); congruence.
+ unfold eq_block in H. destruct (zeq b0 b1); congruence.
+ symmetry. apply Val.notbool_negb_1.
+ symmetry. apply Val.notbool_negb_1.
+Qed.
+
+Lemma eval_operation_weaken:
+ forall sp op vl v,
+ eval_operation genv sp op vl = Some v ->
+ eval_operation_total sp op vl = v.
+Proof.
+ intros.
+ unfold eval_operation in H; destruct op; FuncInv;
+ try subst v; try reflexivity; simpl.
+ unfold find_symbol_offset.
+ destruct (Genv.find_symbol genv i); try discriminate.
+ congruence.
+ unfold offset_sp in H.
+ destruct sp; try discriminate. simpl. congruence.
+ unfold eq_block in H. destruct (zeq b b0); congruence.
+ destruct (Int.eq i0 Int.zero); congruence.
+ destruct (Int.eq i0 Int.zero); congruence.
+ destruct (Int.ltu i0 (Int.repr 32)); congruence.
+ destruct (Int.ltu i0 (Int.repr 32)); congruence.
+ destruct (Int.ltu i (Int.repr 32)); congruence.
+ destruct (Int.ltu i (Int.repr 32)); congruence.
+ destruct (Int.ltu i0 (Int.repr 32)); congruence.
+ caseEq (eval_condition c vl); intros; rewrite H0 in H.
+ replace v with (Val.of_bool b).
+ apply eval_condition_weaken; auto.
+ destruct b; simpl; congruence.
+ discriminate.
+Qed.
+
+Lemma eval_addressing_weaken:
+ forall sp addr vl v,
+ eval_addressing genv sp addr vl = Some v ->
+ eval_addressing_total sp addr vl = v.
+Proof.
+ intros.
+ unfold eval_addressing in H; destruct addr; FuncInv;
+ try subst v; simpl; try reflexivity.
+ decEq. apply Int.add_commut.
+ unfold find_symbol_offset.
+ destruct (Genv.find_symbol genv i); congruence.
+ unfold find_symbol_offset.
+ destruct (Genv.find_symbol genv i); try congruence.
+ inversion H. reflexivity.
+ unfold offset_sp in H. destruct sp; simpl; congruence.
+Qed.
+
+Lemma eval_condition_total_is_bool:
+ forall cond vl, Val.is_bool (eval_condition_total cond vl).
+Proof.
+ intros; destruct cond;
+ destruct vl; try apply Val.undef_is_bool;
+ destruct vl; try apply Val.undef_is_bool;
+ try (destruct vl; try apply Val.undef_is_bool); simpl.
+ apply Val.cmp_is_bool.
+ apply Val.cmpu_is_bool.
+ apply Val.cmp_is_bool.
+ apply Val.cmpu_is_bool.
+ apply Val.cmpf_is_bool.
+ apply Val.notbool_is_bool.
+ apply Val.notbool_is_bool.
+ apply Val.notbool_is_bool.
+Qed.
+
+End EVAL_OP_TOTAL.
diff --git a/backend/PPC.v b/backend/PPC.v
new file mode 100644
index 0000000..64bd90a
--- /dev/null
+++ b/backend/PPC.v
@@ -0,0 +1,775 @@
+(** Abstract syntax and semantics for PowerPC assembly language *)
+
+Require Import Coqlib.
+Require Import Maps.
+Require Import AST.
+Require Import Integers.
+Require Import Floats.
+Require Import Values.
+Require Import Mem.
+Require Import Globalenvs.
+
+(** * Abstract syntax *)
+
+(** Integer registers, floating-point registers. *)
+
+Inductive ireg: Set :=
+ | GPR0: ireg | GPR1: ireg | GPR2: ireg | GPR3: ireg
+ | GPR4: ireg | GPR5: ireg | GPR6: ireg | GPR7: ireg
+ | GPR8: ireg | GPR9: ireg | GPR10: ireg | GPR11: ireg
+ | GPR12: ireg | GPR13: ireg | GPR14: ireg | GPR15: ireg
+ | GPR16: ireg | GPR17: ireg | GPR18: ireg | GPR19: ireg
+ | GPR20: ireg | GPR21: ireg | GPR22: ireg | GPR23: ireg
+ | GPR24: ireg | GPR25: ireg | GPR26: ireg | GPR27: ireg
+ | GPR28: ireg | GPR29: ireg | GPR30: ireg | GPR31: ireg.
+
+Inductive freg: Set :=
+ | FPR0: freg | FPR1: freg | FPR2: freg | FPR3: freg
+ | FPR4: freg | FPR5: freg | FPR6: freg | FPR7: freg
+ | FPR8: freg | FPR9: freg | FPR10: freg | FPR11: freg
+ | FPR12: freg | FPR13: freg | FPR14: freg | FPR15: freg
+ | FPR16: freg | FPR17: freg | FPR18: freg | FPR19: freg
+ | FPR20: freg | FPR21: freg | FPR22: freg | FPR23: freg
+ | FPR24: freg | FPR25: freg | FPR26: freg | FPR27: freg
+ | FPR28: freg | FPR29: freg | FPR30: freg | FPR31: freg.
+
+Lemma ireg_eq: forall (x y: ireg), {x=y} + {x<>y}.
+Proof. decide equality. Defined.
+
+Lemma freg_eq: forall (x y: freg), {x=y} + {x<>y}.
+Proof. decide equality. Defined.
+
+(** Symbolic constants. Immediate operands to an arithmetic instruction
+ or an indexed memory access can be either integer literals
+ or the low or high 16 bits of a symbolic reference (the address
+ of a symbol plus a displacement). These symbolic references are
+ resolved later by the linker.
+*)
+
+Inductive constant: Set :=
+ | Cint: int -> constant
+ | Csymbol_low_signed: ident -> int -> constant
+ | Csymbol_high_signed: ident -> int -> constant
+ | Csymbol_low_unsigned: ident -> int -> constant
+ | Csymbol_high_unsigned: ident -> int -> constant.
+
+(** A note on constants: while immediate operands to PowerPC
+ instructions must be representable in 16 bits (with
+ sign extension or left shift by 16 positions for some instructions),
+ we do not attempt to capture these restrictions in the
+ abstract syntax nor in the semantics. The assembler will
+ emit an error if immediate operands exceed the representable
+ range. Of course, our PPC generator (file [PPCgen]) is
+ careful to respect this range. *)
+
+(** Bits in the condition register. We are only interested in the
+ first 4 bits. *)
+
+Inductive crbit: Set :=
+ | CRbit_0: crbit
+ | CRbit_1: crbit
+ | CRbit_2: crbit
+ | CRbit_3: crbit.
+
+(** The instruction set. Most instructions correspond exactly to
+ actual instructions of the PowerPC processor. See the PowerPC
+ reference manuals for more details. Some instructions,
+ described below, are pseudo-instructions: they expand to
+ canned instruction sequences during the printing of the assembly
+ code. *)
+
+Definition label := positive.
+
+Inductive instruction : Set :=
+ | Padd: ireg -> ireg -> ireg -> instruction (**r integer addition *)
+ | Paddi: ireg -> ireg -> constant -> instruction (**r add immediate *)
+ | Paddis: ireg -> ireg -> constant -> instruction (**r add immediate high *)
+ | Paddze: ireg -> ireg -> instruction (**r add Carry bit *)
+ | Pallocframe: Z -> Z -> instruction (**r allocate new stack frame *)
+ | Pand_: ireg -> ireg -> ireg -> instruction (**r bitwise and *)
+ | Pandc: ireg -> ireg -> ireg -> instruction (**r bitwise and-complement *)
+ | Pandi_: ireg -> ireg -> constant -> instruction (**r and immediate and set conditions *)
+ | Pandis_: ireg -> ireg -> constant -> instruction (**r and immediate high and set conditions *)
+ | Pb: label -> instruction (**r unconditional branch *)
+ | Pbctr: instruction (**r branch to contents of register CTR *)
+ | Pbctrl: instruction (**r branch to contents of CTR and link *)
+ | Pbf: crbit -> label -> instruction (**r branch if false *)
+ | Pbl: ident -> instruction (**r branch and link *)
+ | Pblr: instruction (**r branch to contents: register LR *)
+ | Pbt: crbit -> label -> instruction (**r branch if true *)
+ | Pcmplw: ireg -> ireg -> instruction (**r unsigned integer comparison *)
+ | Pcmplwi: ireg -> constant -> instruction (**r same, with immediate argument *)
+ | Pcmpw: ireg -> ireg -> instruction (**r signed integer comparison *)
+ | Pcmpwi: ireg -> constant -> instruction (**r same, with immediate argument *)
+ | Pcror: crbit -> crbit -> crbit -> instruction (**r or between condition bits *)
+ | Pdivw: ireg -> ireg -> ireg -> instruction (**r signed division *)
+ | Pdivwu: ireg -> ireg -> ireg -> instruction (**r unsigned division *)
+ | Peqv: ireg -> ireg -> ireg -> instruction (**r bitwise not-xor *)
+ | Pextsb: ireg -> ireg -> instruction (**r 8-bit sign extension *)
+ | Pextsh: ireg -> ireg -> instruction (**r 16-bit sign extension *)
+ | Pfreeframe: instruction (**r deallocate stack frame and restore previous frame *)
+ | Pfabs: freg -> freg -> instruction (**r float absolute value *)
+ | Pfadd: freg -> freg -> freg -> instruction (**r float addition *)
+ | Pfcmpu: freg -> freg -> instruction (**r float comparison *)
+ | Pfcti: ireg -> freg -> instruction (**r float-to-int conversion *)
+ | Pfdiv: freg -> freg -> freg -> instruction (**r float division *)
+ | Pfmadd: freg -> freg -> freg -> freg -> instruction (**r float multiply-add *)
+ | Pfmr: freg -> freg -> instruction (**r float move *)
+ | Pfmsub: freg -> freg -> freg -> freg -> instruction (**r float multiply-sub *)
+ | Pfmul: freg -> freg -> freg -> instruction (**r float multiply *)
+ | Pfneg: freg -> freg -> instruction (**r float negation *)
+ | Pfrsp: freg -> freg -> instruction (**r float round to single precision *)
+ | Pfsub: freg -> freg -> freg -> instruction (**r float subtraction *)
+ | Pictf: freg -> ireg -> instruction (**r int-to-float conversion *)
+ | Piuctf: freg -> ireg -> instruction (**r unsigned int-to-float conversion *)
+ | Plbz: ireg -> constant -> ireg -> instruction (**r load 8-bit unsigned int *)
+ | Plbzx: ireg -> ireg -> ireg -> instruction (**r same, with 2 index regs *)
+ | Plfd: freg -> constant -> ireg -> instruction (**r load 64-bit float *)
+ | Plfdx: freg -> ireg -> ireg -> instruction (**r same, with 2 index regs *)
+ | Plfs: freg -> constant -> ireg -> instruction (**r load 32-bit float *)
+ | Plfsx: freg -> ireg -> ireg -> instruction (**r same, with 2 index regs *)
+ | Plha: ireg -> constant -> ireg -> instruction (**r load 16-bit signed int *)
+ | Plhax: ireg -> ireg -> ireg -> instruction (**r same, with 2 index regs *)
+ | Plhz: ireg -> constant -> ireg -> instruction (**r load 16-bit unsigned int *)
+ | Plhzx: ireg -> ireg -> ireg -> instruction (**r same, with 2 index regs *)
+ | Plfi: freg -> float -> instruction (**r load float constant *)
+ | Plwz: ireg -> constant -> ireg -> instruction (**r load 32-bit int *)
+ | Plwzx: ireg -> ireg -> ireg -> instruction (**r same, with 2 index regs *)
+ | Pmfcrbit: ireg -> crbit -> instruction (**r move condition bit to reg *)
+ | Pmflr: ireg -> instruction (**r move LR to reg *)
+ | Pmr: ireg -> ireg -> instruction (**r integer move *)
+ | Pmtctr: ireg -> instruction (**r move ireg to CTR *)
+ | Pmtlr: ireg -> instruction (**r move ireg to LR *)
+ | Pmulli: ireg -> ireg -> constant -> instruction (**r integer multiply immediate *)
+ | Pmullw: ireg -> ireg -> ireg -> instruction (**r integer multiply *)
+ | Pnand: ireg -> ireg -> ireg -> instruction (**r bitwise not-and *)
+ | Pnor: ireg -> ireg -> ireg -> instruction (**r bitwise not-or *)
+ | Por: ireg -> ireg -> ireg -> instruction (**r bitwise or *)
+ | Porc: ireg -> ireg -> ireg -> instruction (**r bitwise or-complement *)
+ | Pori: ireg -> ireg -> constant -> instruction (**r or with immediate *)
+ | Poris: ireg -> ireg -> constant -> instruction (**r or with immediate high *)
+ | Prlwinm: ireg -> ireg -> int -> int -> instruction (**r rotate and mask *)
+ | Pslw: ireg -> ireg -> ireg -> instruction (**r shift left *)
+ | Psraw: ireg -> ireg -> ireg -> instruction (**r shift right signed *)
+ | Psrawi: ireg -> ireg -> int -> instruction (**r shift right signed immediate *)
+ | Psrw: ireg -> ireg -> ireg -> instruction (**r shift right unsigned *)
+ | Pstb: ireg -> constant -> ireg -> instruction (**r store 8-bit int *)
+ | Pstbx: ireg -> ireg -> ireg -> instruction (**r same, with 2 index regs *)
+ | Pstfd: freg -> constant -> ireg -> instruction (**r store 64-bit float *)
+ | Pstfdx: freg -> ireg -> ireg -> instruction (**r same, with 2 index regs *)
+ | Pstfs: freg -> constant -> ireg -> instruction (**r store 32-bit float *)
+ | Pstfsx: freg -> ireg -> ireg -> instruction (**r same, with 2 index regs *)
+ | Psth: ireg -> constant -> ireg -> instruction (**r store 16-bit int *)
+ | Psthx: ireg -> ireg -> ireg -> instruction (**r same, with 2 index regs *)
+ | Pstw: ireg -> constant -> ireg -> instruction (**r store 32-bit int *)
+ | Pstwx: ireg -> ireg -> ireg -> instruction (**r same, with 2 index regs *)
+ | Psubfc: ireg -> ireg -> ireg -> instruction (**r reversed integer subtraction *)
+ | Psubfic: ireg -> ireg -> constant -> instruction (**r integer subtraction from immediate *)
+ | Pxor: ireg -> ireg -> ireg -> instruction (**r bitwise xor *)
+ | Pxori: ireg -> ireg -> constant -> instruction (**r bitwise xor with immediate *)
+ | Pxoris: ireg -> ireg -> constant -> instruction (**r bitwise xor with immediate high *)
+ | Piundef: ireg -> instruction (**r set int reg to [Vundef] *)
+ | Pfundef: freg -> instruction (**r set float reg to [Vundef] *)
+ | Plabel: label -> instruction. (**r define a code label *)
+
+(** The pseudo-instructions are the following:
+
+- [Plabel]: define a code label at the current program point
+
+- [Plfi]: load a floating-point constant in a float register.
+ Expands to a float load [lfd] from an address in the constant data section
+ initialized with the floating-point constant:
+<<
+ addis r2, 0, ha16(lbl)
+ lfd rdst, lo16(lbl)(r2)
+ .const_data
+lbl: .double floatcst
+ .text
+>>
+ Initialized data in the constant data section are not modeled here,
+ which is why we use a pseudo-instruction for this purpose.
+
+- [Pfcti]: convert a float to an integer. This requires a transfer
+ via memory of a 32-bit integer from a float register to an int register,
+ which our memory model cannot express. Expands to:
+<<
+ fctiwz f13, rsrc
+ stfdu f13, -8(r1)
+ lwz rdst, 4(r1)
+ addi r1, r1, 8
+>>
+
+- [Pictf]: convert a signed integer to a float. This requires complicated
+ bit-level manipulations of IEEE floats through mixed float and integer
+ arithmetic over a memory word, which our memory model and axiomatization
+ of floats cannot express. Expands to:
+<<
+ addis r2, 0, 0x4330
+ stwu r2, -8(r1)
+ addis r2, rsrc, 0x8000
+ stw r2, 4(r1)
+ addis r2, 0, ha16(lbl)
+ lfd f13, lo16(lbl)(r2)
+ lfd rdst, 0(r1)
+ addi r1, r1, 8
+ fsub rdst, rdst, f13
+ .const_data
+lbl: .long 0x43300000, 0x80000000
+ .text
+>>
+ (Don't worry if you do not understand this instruction sequence: intimate
+ knowledge of IEEE float arithmetic is necessary.)
+
+- [Piuctf]: convert an unsigned integer to a float. The expansion is close
+ to that [Pictf], and equally obscure.
+<<
+ addis r2, 0, 0x4330
+ stwu r2, -8(r1)
+ stw rsrc, 4(r1)
+ addis r2, 0, ha16(lbl)
+ lfd f13, lo16(lbl)(r2)
+ lfd rdst, 0(r1)
+ addi r1, r1, 8
+ fsub rdst, rdst, f13
+ .const_data
+lbl: .long 0x43300000, 0x00000000
+ .text
+>>
+
+- [Pallocframe lo hi]: in the formal semantics, this pseudo-instruction
+ allocates a memory block with bounds [lo] and [hi], stores the value
+ of register [r1] (the stack pointer, by convention) at the bottom
+ of this block, and sets [r1] to a pointer to the bottom of this
+ block. In the printed PowerPC assembly code, this allocation
+ is just a store-decrement of register [r1]:
+<<
+ stwu r1, (lo - hi)(r1)
+>>
+ This cannot be expressed in our memory model, which does not reflect
+ the fact that stack frames are adjacent and allocated/freed
+ following a stack discipline.
+
+- [Pfreeframe]: in the formal semantics, this pseudo-instruction
+ reads the bottom word of the block pointed by [r1] (the stack pointer),
+ frees this block, and sets [r1] to the value of the bottom word.
+ In the printed PowerPC assembly code, this freeing
+ is just a load of register [r1] relative to [r1] itself:
+<<
+ lwz r1, 0(r1)
+>>
+ Again, our memory model cannot comprehend that this operation
+ frees (logically) the current stack frame.
+
+- [Piundef] and [Pfundef]: set an integer or float register (respectively)
+ to the [Vundef] value. Expand to nothing, as the PowerPC processor has
+ no notion of ``undefined value''. These two pseudo-instructions are used
+ to ensure that the generated PowerPC code computes exactly the same values
+ as predicted by the semantics of Cminor, which explicitly set uninitialized
+ local variables to the [Vundef] value. A general property of our semantics,
+ not yet formally proved, is that they are monotone with respect to the
+ partial ordering [Vundef <= v] over values. Consequently, if a program
+ evaluates to a non-[Vundef] result [r] from an initial state that contains
+ [Vundef] values, it will also evaluate to [r] if arbitrary values are put
+ in the initial state instead of the [Vundef] values. This justifies
+ treating [Piundef] and [Pfundef] as no-operations, leaving in the target
+ register whatever value was already there instead of setting it to [Vundef].
+ The formal proof of this result remains to be done, however.
+*)
+
+Definition code := list instruction.
+Definition program := AST.program code.
+
+(** * Operational semantics *)
+
+(** The PowerPC has a great many registers, some general-purpose, some very
+ specific. We model only the following registers: *)
+
+Inductive preg: Set :=
+ | IR: ireg -> preg (**r integer registers *)
+ | FR: freg -> preg (**r float registers *)
+ | PC: preg (**r program counter *)
+ | LR: preg (**r link register (return address) *)
+ | CTR: preg (**r count register, used for some branches *)
+ | CARRY: preg (**r carry bit of the status register *)
+ | CR0_0: preg (**r bit 0 of the condition register *)
+ | CR0_1: preg (**r bit 1 of the condition register *)
+ | CR0_2: preg (**r bit 2 of the condition register *)
+ | CR0_3: preg. (**r bit 3 of the condition register *)
+
+Coercion IR: ireg >-> preg.
+Coercion FR: freg >-> preg.
+
+Lemma preg_eq: forall (x y: preg), {x=y} + {x<>y}.
+Proof. decide equality. apply ireg_eq. apply freg_eq. Defined.
+
+Module PregEq.
+ Definition t := preg.
+ Definition eq := preg_eq.
+End PregEq.
+
+Module Pregmap := EMap(PregEq).
+
+(** The semantics operates over a single mapping from registers
+ (type [preg]) to values. We maintain (but do not enforce)
+ the convention that integer registers are mapped to values of
+ type [Tint], float registers to values of type [Tfloat],
+ and boolean registers ([CARRY], [CR0_0], etc) to either
+ [Vzero] or [Vone]. *)
+
+Definition regset := Pregmap.t val.
+Definition genv := Genv.t code.
+
+Notation "a # b" := (a b) (at level 1, only parsing).
+Notation "a # b <- c" := (Pregmap.set b c a) (at level 1, b at next level).
+
+Section RELSEM.
+
+(** Looking up instructions in a code sequence by position. *)
+
+Fixpoint find_instr (pos: Z) (c: code) {struct c} : option instruction :=
+ match c with
+ | nil => None
+ | i :: il => if zeq pos 0 then Some i else find_instr (pos - 1) il
+ end.
+
+(** Position corresponding to a label *)
+
+Definition is_label (lbl: label) (instr: instruction) : bool :=
+ match instr with
+ | Plabel lbl' => if peq lbl lbl' then true else false
+ | _ => false
+ end.
+
+Lemma is_label_correct:
+ forall lbl instr,
+ if is_label lbl instr then instr = Plabel lbl else instr <> Plabel lbl.
+Proof.
+ intros. destruct instr; simpl; try discriminate.
+ case (peq lbl l); intro; congruence.
+Qed.
+
+Fixpoint label_pos (lbl: label) (pos: Z) (c: code) {struct c} : option Z :=
+ match c with
+ | nil => None
+ | instr :: c' =>
+ if is_label lbl instr then Some (pos + 1) else label_pos lbl (pos + 1) c'
+ end.
+
+(** Some PowerPC instructions treat register GPR0 as the integer literal 0
+ when that register is used in argument position. *)
+
+Definition gpr_or_zero (rs: regset) (r: ireg) :=
+ if ireg_eq r GPR0 then Vzero else rs#r.
+
+Variable ge: genv.
+
+(** The four functions below axiomatize how the linker processes
+ symbolic references [symbol + offset] and splits their
+ actual values into two 16-bit halves, the lower half
+ being either signed or unsigned. *)
+
+Parameter low_half_signed: val -> val.
+Parameter high_half_signed: val -> val.
+Parameter low_half_unsigned: val -> val.
+Parameter high_half_unsigned: val -> val.
+
+(** The fundamental property of these operations is that their
+ results can be recombined by addition or logical ``or'',
+ and this recombination rebuilds the original value. *)
+
+Axiom low_high_half_signed:
+ forall v, Val.add (low_half_signed v) (high_half_signed v) = v.
+Axiom low_high_half_unsigned:
+ forall v, Val.or (low_half_unsigned v) (high_half_unsigned v) = v.
+
+(** The other axioms we take is that the results of
+ the [low_half] and [high_half] functions are of type [Tint],
+ i.e. either integers, pointers or undefined values. *)
+
+Axiom low_half_signed_type:
+ forall v, Val.has_type (low_half_signed v) Tint.
+Axiom high_half_signed_type:
+ forall v, Val.has_type (high_half_signed v) Tint.
+Axiom low_half_unsigned_type:
+ forall v, Val.has_type (low_half_unsigned v) Tint.
+Axiom high_half_unsigned_type:
+ forall v, Val.has_type (high_half_unsigned v) Tint.
+
+(** Armed with the [low_half] and [high_half] functions,
+ we can define the evaluation of a symbolic constant.
+ Note that for [const_high], integer constants
+ are shifted left by 16 bits, but not symbol addresses:
+ we assume (as in the [low_high_half] axioms above)
+ that the results of [high_half] are already shifted
+ (their 16 low bits are equal to 0). *)
+
+Definition symbol_offset (id: ident) (ofs: int) : val :=
+ match Genv.find_symbol ge id with
+ | Some b => Vptr b ofs
+ | None => Vundef
+ end.
+
+Definition const_low (c: constant) :=
+ match c with
+ | Cint n => Vint n
+ | Csymbol_low_signed id ofs => low_half_signed (symbol_offset id ofs)
+ | Csymbol_high_signed id ofs => Vundef
+ | Csymbol_low_unsigned id ofs => low_half_unsigned (symbol_offset id ofs)
+ | Csymbol_high_unsigned id ofs => Vundef
+ end.
+
+Definition const_high (c: constant) :=
+ match c with
+ | Cint n => Vint (Int.shl n (Int.repr 16))
+ | Csymbol_low_signed id ofs => Vundef
+ | Csymbol_high_signed id ofs => high_half_signed (symbol_offset id ofs)
+ | Csymbol_low_unsigned id ofs => Vundef
+ | Csymbol_high_unsigned id ofs => high_half_unsigned (symbol_offset id ofs)
+ end.
+
+(** The semantics is purely small-step and defined as a function
+ from the current state (a register set + a memory state)
+ to either [OK rs' m'] where [rs'] and [m'] are the updated register
+ set and memory state after execution of the instruction at [rs#PC],
+ or [Error] if the processor is stuck. *)
+
+Inductive outcome: Set :=
+ | OK: regset -> mem -> outcome
+ | Error: outcome.
+
+(** Manipulations over the [PC] register: continuing with the next
+ instruction ([nextinstr]) or branching to a label ([goto_label]). *)
+
+Definition nextinstr (rs: regset) :=
+ rs#PC <- (Val.add rs#PC Vone).
+
+Definition goto_label (c: code) (lbl: label) (rs: regset) (m: mem) :=
+ match label_pos lbl 0 c with
+ | None => Error
+ | Some pos =>
+ match rs#PC with
+ | Vptr b ofs => OK (rs#PC <- (Vptr b (Int.repr pos))) m
+ | _ => Error
+ end
+ end.
+
+(** Auxiliaries for memory accesses, in two forms: one operand
+ (plus constant offset) or two operands. *)
+
+Definition load1 (chunk: memory_chunk) (rd: preg)
+ (cst: constant) (r1: ireg) (rs: regset) (m: mem) :=
+ match Mem.loadv chunk m (Val.add (gpr_or_zero rs r1) (const_low cst)) with
+ | None => Error
+ | Some v => OK (nextinstr (rs#rd <- v)) m
+ end.
+
+Definition load2 (chunk: memory_chunk) (rd: preg) (r1 r2: ireg)
+ (rs: regset) (m: mem) :=
+ match Mem.loadv chunk m (Val.add rs#r1 rs#r2) with
+ | None => Error
+ | Some v => OK (nextinstr (rs#rd <- v)) m
+ end.
+
+Definition store1 (chunk: memory_chunk) (r: preg)
+ (cst: constant) (r1: ireg) (rs: regset) (m: mem) :=
+ match Mem.storev chunk m (Val.add (gpr_or_zero rs r1) (const_low cst)) (rs#r) with
+ | None => Error
+ | Some m' => OK (nextinstr rs) m'
+ end.
+
+Definition store2 (chunk: memory_chunk) (r: preg) (r1 r2: ireg)
+ (rs: regset) (m: mem) :=
+ match Mem.storev chunk m (Val.add rs#r1 rs#r2) (rs#r) with
+ | None => Error
+ | Some m' => OK (nextinstr rs) m'
+ end.
+
+(** Operations over condition bits. *)
+
+Definition reg_of_crbit (bit: crbit) :=
+ match bit with
+ | CRbit_0 => CR0_0
+ | CRbit_1 => CR0_1
+ | CRbit_2 => CR0_2
+ | CRbit_3 => CR0_3
+ end.
+
+Definition compare_sint (rs: regset) (v1 v2: val) :=
+ rs#CR0_0 <- (Val.cmp Clt v1 v2)
+ #CR0_1 <- (Val.cmp Cgt v1 v2)
+ #CR0_2 <- (Val.cmp Ceq v1 v2)
+ #CR0_3 <- Vundef.
+
+Definition compare_uint (rs: regset) (v1 v2: val) :=
+ rs#CR0_0 <- (Val.cmpu Clt v1 v2)
+ #CR0_1 <- (Val.cmpu Cgt v1 v2)
+ #CR0_2 <- (Val.cmpu Ceq v1 v2)
+ #CR0_3 <- Vundef.
+
+Definition compare_float (rs: regset) (v1 v2: val) :=
+ rs#CR0_0 <- (Val.cmpf Clt v1 v2)
+ #CR0_1 <- (Val.cmpf Cgt v1 v2)
+ #CR0_2 <- (Val.cmpf Ceq v1 v2)
+ #CR0_3 <- Vundef.
+
+Definition val_cond_reg (rs: regset) :=
+ Val.or (Val.shl rs#CR0_0 (Vint (Int.repr 31)))
+ (Val.or (Val.shl rs#CR0_1 (Vint (Int.repr 30)))
+ (Val.or (Val.shl rs#CR0_2 (Vint (Int.repr 29)))
+ (Val.shl rs#CR0_3 (Vint (Int.repr 28))))).
+
+(** Execution of a single instruction [i] in initial state
+ [rs] and [m]. Return updated state. For instructions
+ that correspond to actual PowerPC instructions, the cases are
+ straightforward transliterations of the informal descriptions
+ given in the PowerPC reference manuals. For pseudo-instructions,
+ refer to the informal descriptions given above. Note that
+ we set to [Vundef] the registers used as temporaries by the
+ expansions of the pseudo-instructions, so that the PPC code
+ we generate cannot use those registers to hold values that
+ must survive the execution of the pseudo-instruction.
+*)
+
+Definition exec_instr (c: code) (i: instruction) (rs: regset) (m: mem) : outcome :=
+ match i with
+ | Padd rd r1 r2 =>
+ OK (nextinstr (rs#rd <- (Val.add rs#r1 rs#r2))) m
+ | Paddi rd r1 cst =>
+ OK (nextinstr (rs#rd <- (Val.add (gpr_or_zero rs r1) (const_low cst)))) m
+ | Paddis rd r1 cst =>
+ OK (nextinstr (rs#rd <- (Val.add (gpr_or_zero rs r1) (const_high cst)))) m
+ | Paddze rd r1 =>
+ OK (nextinstr (rs#rd <- (Val.add rs#r1 rs#CARRY))) m
+ | Pallocframe lo hi =>
+ let (m1, stk) := Mem.alloc m lo hi in
+ let sp := Vptr stk (Int.repr lo) in
+ match Mem.storev Mint32 m1 sp rs#GPR1 with
+ | None => Error
+ | Some m2 => OK (nextinstr (rs#GPR1 <- sp #GPR2 <- Vundef)) m2
+ end
+ | Pand_ rd r1 r2 =>
+ let v := Val.and rs#r1 rs#r2 in
+ OK (nextinstr (compare_sint (rs#rd <- v) v Vzero)) m
+ | Pandc rd r1 r2 =>
+ OK (nextinstr (rs#rd <- (Val.and rs#r1 (Val.notint rs#r2)))) m
+ | Pandi_ rd r1 cst =>
+ let v := Val.and rs#r1 (const_low cst) in
+ OK (nextinstr (compare_sint (rs#rd <- v) v Vzero)) m
+ | Pandis_ rd r1 cst =>
+ let v := Val.and rs#r1 (const_high cst) in
+ OK (nextinstr (compare_sint (rs#rd <- v) v Vzero)) m
+ | Pb lbl =>
+ goto_label c lbl rs m
+ | Pbctr =>
+ OK (rs#PC <- (rs#CTR)) m
+ | Pbctrl =>
+ OK (rs#LR <- (Val.add rs#PC Vone) #PC <- (rs#CTR)) m
+ | Pbf bit lbl =>
+ match rs#(reg_of_crbit bit) with
+ | Vint n => if Int.eq n Int.zero then goto_label c lbl rs m else OK (nextinstr rs) m
+ | _ => Error
+ end
+ | Pbl ident =>
+ OK (rs#LR <- (Val.add rs#PC Vone) #PC <- (symbol_offset ident Int.zero)) m
+ | Pblr =>
+ OK (rs#PC <- (rs#LR)) m
+ | Pbt bit lbl =>
+ match rs#(reg_of_crbit bit) with
+ | Vint n => if Int.eq n Int.zero then OK (nextinstr rs) m else goto_label c lbl rs m
+ | _ => Error
+ end
+ | Pcmplw r1 r2 =>
+ OK (nextinstr (compare_uint rs rs#r1 rs#r2)) m
+ | Pcmplwi r1 cst =>
+ OK (nextinstr (compare_uint rs rs#r1 (const_low cst))) m
+ | Pcmpw r1 r2 =>
+ OK (nextinstr (compare_sint rs rs#r1 rs#r2)) m
+ | Pcmpwi r1 cst =>
+ OK (nextinstr (compare_sint rs rs#r1 (const_low cst))) m
+ | Pcror bd b1 b2 =>
+ OK (nextinstr (rs#(reg_of_crbit bd) <- (Val.or rs#(reg_of_crbit b1) rs#(reg_of_crbit b2)))) m
+ | Pdivw rd r1 r2 =>
+ OK (nextinstr (rs#rd <- (Val.divs rs#r1 rs#r2))) m
+ | Pdivwu rd r1 r2 =>
+ OK (nextinstr (rs#rd <- (Val.divu rs#r1 rs#r2))) m
+ | Peqv rd r1 r2 =>
+ OK (nextinstr (rs#rd <- (Val.notint (Val.xor rs#r1 rs#r2)))) m
+ | Pextsb rd r1 =>
+ OK (nextinstr (rs#rd <- (Val.cast8signed rs#r1))) m
+ | Pextsh rd r1 =>
+ OK (nextinstr (rs#rd <- (Val.cast16signed rs#r1))) m
+ | Pfreeframe =>
+ match Mem.loadv Mint32 m rs#GPR1 with
+ | None => Error
+ | Some v =>
+ match rs#GPR1 with
+ | Vptr stk ofs => OK (nextinstr (rs#GPR1 <- v)) (Mem.free m stk)
+ | _ => Error
+ end
+ end
+ | Pfabs rd r1 =>
+ OK (nextinstr (rs#rd <- (Val.absf rs#r1))) m
+ | Pfadd rd r1 r2 =>
+ OK (nextinstr (rs#rd <- (Val.addf rs#r1 rs#r2))) m
+ | Pfcmpu r1 r2 =>
+ OK (nextinstr (compare_float rs rs#r1 rs#r2)) m
+ | Pfcti rd r1 =>
+ OK (nextinstr (rs#rd <- (Val.intoffloat rs#r1) #FPR13 <- Vundef)) m
+ | Pfdiv rd r1 r2 =>
+ OK (nextinstr (rs#rd <- (Val.divf rs#r1 rs#r2))) m
+ | Pfmadd rd r1 r2 r3 =>
+ OK (nextinstr (rs#rd <- (Val.addf (Val.mulf rs#r1 rs#r2) rs#r3))) m
+ | Pfmr rd r1 =>
+ OK (nextinstr (rs#rd <- (rs#r1))) m
+ | Pfmsub rd r1 r2 r3 =>
+ OK (nextinstr (rs#rd <- (Val.subf (Val.mulf rs#r1 rs#r2) rs#r3))) m
+ | Pfmul rd r1 r2 =>
+ OK (nextinstr (rs#rd <- (Val.mulf rs#r1 rs#r2))) m
+ | Pfneg rd r1 =>
+ OK (nextinstr (rs#rd <- (Val.negf rs#r1))) m
+ | Pfrsp rd r1 =>
+ OK (nextinstr (rs#rd <- (Val.singleoffloat rs#r1))) m
+ | Pfsub rd r1 r2 =>
+ OK (nextinstr (rs#rd <- (Val.subf rs#r1 rs#r2))) m
+ | Pictf rd r1 =>
+ OK (nextinstr (rs#rd <- (Val.floatofint rs#r1) #GPR2 <- Vundef #FPR13 <- Vundef)) m
+ | Piuctf rd r1 =>
+ OK (nextinstr (rs#rd <- (Val.floatofintu rs#r1) #GPR2 <- Vundef #FPR13 <- Vundef)) m
+ | Plbz rd cst r1 =>
+ load1 Mint8unsigned rd cst r1 rs m
+ | Plbzx rd r1 r2 =>
+ load2 Mint8unsigned rd r1 r2 rs m
+ | Plfd rd cst r1 =>
+ load1 Mfloat64 rd cst r1 rs m
+ | Plfdx rd r1 r2 =>
+ load2 Mfloat64 rd r1 r2 rs m
+ | Plfs rd cst r1 =>
+ load1 Mfloat32 rd cst r1 rs m
+ | Plfsx rd r1 r2 =>
+ load2 Mfloat32 rd r1 r2 rs m
+ | Plha rd cst r1 =>
+ load1 Mint16signed rd cst r1 rs m
+ | Plhax rd r1 r2 =>
+ load2 Mint16signed rd r1 r2 rs m
+ | Plhz rd cst r1 =>
+ load1 Mint16unsigned rd cst r1 rs m
+ | Plhzx rd r1 r2 =>
+ load2 Mint16unsigned rd r1 r2 rs m
+ | Plfi rd f =>
+ OK (nextinstr (rs#rd <- (Vfloat f) #GPR2 <- Vundef)) m
+ | Plwz rd cst r1 =>
+ load1 Mint32 rd cst r1 rs m
+ | Plwzx rd r1 r2 =>
+ load2 Mint32 rd r1 r2 rs m
+ | Pmfcrbit rd bit =>
+ OK (nextinstr (rs#rd <- (rs#(reg_of_crbit bit)))) m
+ | Pmflr rd =>
+ OK (nextinstr (rs#rd <- (rs#LR))) m
+ | Pmr rd r1 =>
+ OK (nextinstr (rs#rd <- (rs#r1))) m
+ | Pmtctr r1 =>
+ OK (nextinstr (rs#CTR <- (rs#r1))) m
+ | Pmtlr r1 =>
+ OK (nextinstr (rs#LR <- (rs#r1))) m
+ | Pmulli rd r1 cst =>
+ OK (nextinstr (rs#rd <- (Val.mul rs#r1 (const_low cst)))) m
+ | Pmullw rd r1 r2 =>
+ OK (nextinstr (rs#rd <- (Val.mul rs#r1 rs#r2))) m
+ | Pnand rd r1 r2 =>
+ OK (nextinstr (rs#rd <- (Val.notint (Val.and rs#r1 rs#r2)))) m
+ | Pnor rd r1 r2 =>
+ OK (nextinstr (rs#rd <- (Val.notint (Val.or rs#r1 rs#r2)))) m
+ | Por rd r1 r2 =>
+ OK (nextinstr (rs#rd <- (Val.or rs#r1 rs#r2))) m
+ | Porc rd r1 r2 =>
+ OK (nextinstr (rs#rd <- (Val.or rs#r1 (Val.notint rs#r2)))) m
+ | Pori rd r1 cst =>
+ OK (nextinstr (rs#rd <- (Val.or rs#r1 (const_low cst)))) m
+ | Poris rd r1 cst =>
+ OK (nextinstr (rs#rd <- (Val.or rs#r1 (const_high cst)))) m
+ | Prlwinm rd r1 amount mask =>
+ OK (nextinstr (rs#rd <- (Val.rolm rs#r1 amount mask))) m
+ | Pslw rd r1 r2 =>
+ OK (nextinstr (rs#rd <- (Val.shl rs#r1 rs#r2))) m
+ | Psraw rd r1 r2 =>
+ OK (nextinstr (rs#rd <- (Val.shr rs#r1 rs#r2) #CARRY <- (Val.shr_carry rs#r1 rs#r2))) m
+ | Psrawi rd r1 n =>
+ OK (nextinstr (rs#rd <- (Val.shr rs#r1 (Vint n)) #CARRY <- (Val.shr_carry rs#r1 (Vint n)))) m
+ | Psrw rd r1 r2 =>
+ OK (nextinstr (rs#rd <- (Val.shru rs#r1 rs#r2))) m
+ | Pstb rd cst r1 =>
+ store1 Mint8unsigned rd cst r1 rs m
+ | Pstbx rd r1 r2 =>
+ store2 Mint8unsigned rd r1 r2 rs m
+ | Pstfd rd cst r1 =>
+ store1 Mfloat64 rd cst r1 rs m
+ | Pstfdx rd r1 r2 =>
+ store2 Mfloat64 rd r1 r2 rs m
+ | Pstfs rd cst r1 =>
+ store1 Mfloat32 rd cst r1 rs m
+ | Pstfsx rd r1 r2 =>
+ store2 Mfloat32 rd r1 r2 rs m
+ | Psth rd cst r1 =>
+ store1 Mint16unsigned rd cst r1 rs m
+ | Psthx rd r1 r2 =>
+ store2 Mint16unsigned rd r1 r2 rs m
+ | Pstw rd cst r1 =>
+ store1 Mint32 rd cst r1 rs m
+ | Pstwx rd r1 r2 =>
+ store2 Mint32 rd r1 r2 rs m
+ | Psubfc rd r1 r2 =>
+ OK (nextinstr (rs#rd <- (Val.sub rs#r2 rs#r1) #CARRY <- Vundef)) m
+ | Psubfic rd r1 cst =>
+ OK (nextinstr (rs#rd <- (Val.sub (const_low cst) rs#r1) #CARRY <- Vundef)) m
+ | Pxor rd r1 r2 =>
+ OK (nextinstr (rs#rd <- (Val.xor rs#r1 rs#r2))) m
+ | Pxori rd r1 cst =>
+ OK (nextinstr (rs#rd <- (Val.xor rs#r1 (const_low cst)))) m
+ | Pxoris rd r1 cst =>
+ OK (nextinstr (rs#rd <- (Val.xor rs#r1 (const_high cst)))) m
+ | Piundef rd =>
+ OK (nextinstr (rs#rd <- Vundef)) m
+ | Pfundef rd =>
+ OK (nextinstr (rs#rd <- Vundef)) m
+ | Plabel lbl =>
+ OK (nextinstr rs) m
+ end.
+
+(** Execution of the instruction at [rs#PC]. *)
+
+Inductive exec_step: regset -> mem -> regset -> mem -> Prop :=
+ | exec_step_intro:
+ forall b ofs c i rs m rs' m',
+ rs PC = Vptr b ofs ->
+ Genv.find_funct_ptr ge b = Some c ->
+ find_instr (Int.unsigned ofs) c = Some i ->
+ exec_instr c i rs m = OK rs' m' ->
+ exec_step rs m rs' m'.
+
+(** Execution of zero, one or several instructions starting at [rs#PC]. *)
+
+Inductive exec_steps: regset -> mem -> regset -> mem -> Prop :=
+ | exec_refl:
+ forall rs m,
+ exec_steps rs m rs m
+ | exec_one:
+ forall rs m rs' m',
+ exec_step rs m rs' m' ->
+ exec_steps rs m rs' m'
+ | exec_trans:
+ forall rs1 m1 rs2 m2 rs3 m3,
+ exec_steps rs1 m1 rs2 m2 ->
+ exec_steps rs2 m2 rs3 m3 ->
+ exec_steps rs1 m1 rs3 m3.
+
+End RELSEM.
+
+Definition exec_program (p: program) (r: val) : Prop :=
+ let ge := Genv.globalenv p in
+ let m0 := Genv.init_mem p in
+ let rs0 :=
+ (Pregmap.init Vundef) # PC <- (symbol_offset ge p.(prog_main) Int.zero)
+ # LR <- Vzero
+ # GPR1 <- (Vptr Mem.nullptr Int.zero) in
+ exists rs, exists m,
+ exec_steps ge rs0 m0 rs m /\ rs#PC = Vzero /\ rs#GPR3 = r.
diff --git a/backend/PPCgen.v b/backend/PPCgen.v
new file mode 100644
index 0000000..dc8ed40
--- /dev/null
+++ b/backend/PPCgen.v
@@ -0,0 +1,514 @@
+(** Translation from Mach to PPC. *)
+
+Require Import Coqlib.
+Require Import Maps.
+Require Import AST.
+Require Import Integers.
+Require Import Floats.
+Require Import Values.
+Require Import Mem.
+Require Import Globalenvs.
+Require Import Op.
+Require Import Locations.
+Require Import Mach.
+Require Import PPC.
+
+(** Translation of the LTL/Linear/Mach view of machine registers
+ to the PPC view. PPC has two different types for registers
+ (integer and float) while LTL et al have only one. The
+ [ireg_of] and [freg_of] are therefore partial in principle.
+ To keep things simpler, we make them return nonsensical
+ results when applied to a LTL register of the wrong type.
+ The proof in [PPCgenproof] will show that this never happens.
+
+ Note that no LTL register maps to [GPR2] nor [FPR13].
+ These two registers are reserved as temporaries, to be used
+ by the generated PPC code. *)
+
+Definition ireg_of (r: mreg) : ireg :=
+ match r with
+ | R3 => GPR3 | R4 => GPR4 | R5 => GPR5 | R6 => GPR6
+ | R7 => GPR7 | R8 => GPR8 | R9 => GPR9 | R10 => GPR10
+ | R13 => GPR13 | R14 => GPR14 | R15 => GPR15 | R16 => GPR16
+ | R17 => GPR17 | R18 => GPR18 | R19 => GPR19 | R20 => GPR20
+ | R21 => GPR21 | R22 => GPR22 | R23 => GPR23 | R24 => GPR24
+ | R25 => GPR25 | R26 => GPR26 | R27 => GPR27 | R28 => GPR28
+ | R29 => GPR29 | R30 => GPR30 | R31 => GPR31
+ | IT1 => GPR11 | IT2 => GPR12 | IT3 => GPR0
+ | _ => GPR0 (* should not happen *)
+ end.
+
+Definition freg_of (r: mreg) : freg :=
+ match r with
+ | F1 => FPR1 | F2 => FPR2 | F3 => FPR3 | F4 => FPR4
+ | F5 => FPR5 | F6 => FPR6 | F7 => FPR7 | F8 => FPR8
+ | F9 => FPR9 | F10 => FPR10 | F14 => FPR14 | F15 => FPR15
+ | F16 => FPR16 | F17 => FPR17 | F18 => FPR18 | F19 => FPR19
+ | F20 => FPR20 | F21 => FPR21 | F22 => FPR22 | F23 => FPR23
+ | F24 => FPR24 | F25 => FPR25 | F26 => FPR26 | F27 => FPR27
+ | F28 => FPR28 | F29 => FPR29 | F30 => FPR30 | F31 => FPR31
+ | FT1 => FPR0 | FT2 => FPR11 | FT3 => FPR12
+ | _ => FPR0 (* should not happen *)
+ end.
+
+(** Decomposition of integer constants. As noted in file [PPC],
+ immediate arguments to PowerPC instructions must fit into 16 bits,
+ and are interpreted after zero extension, sign extension, or
+ left shift by 16 bits, depending on the instruction. Integer
+ constants that do not fit must be synthesized using two
+ processor instructions. The following functions decompose
+ arbitrary 32-bit integers into two 16-bit halves (high and low
+ halves). They satisfy the following properties:
+- [low_u n] is an unsigned 16-bit integer;
+- [low_s n] is a signed 16-bit integer;
+- [(high_u n) << 16 | low_u n] equals [n];
+- [(high_s n) << 16 + low_s n] equals [n].
+*)
+
+Definition low_u (n: int) := Int.and n (Int.repr 65535).
+Definition high_u (n: int) := Int.shru n (Int.repr 16).
+Definition low_s (n: int) := Int.cast16signed n.
+Definition high_s (n: int) := Int.shru (Int.sub n (low_s n)) (Int.repr 16).
+
+(** Smart constructors for arithmetic operations involving
+ a 32-bit integer constant. Depending on whether the
+ constant fits in 16 bits or not, one or several instructions
+ are generated as required to perform the operation
+ and prepended to the given instruction sequence [k]. *)
+
+Definition loadimm (r: ireg) (n: int) (k: code) :=
+ if Int.eq (high_s n) Int.zero then
+ Paddi r GPR0 (Cint n) :: k
+ else if Int.eq (low_s n) Int.zero then
+ Paddis r GPR0 (Cint (high_s n)) :: k
+ else
+ Paddis r GPR0 (Cint (high_u n)) ::
+ Pori r r (Cint (low_u n)) :: k.
+
+Definition addimm_1 (r1 r2: ireg) (n: int) (k: code) :=
+ if Int.eq (high_s n) Int.zero then
+ Paddi r1 r2 (Cint n) :: k
+ else if Int.eq (low_s n) Int.zero then
+ Paddis r1 r2 (Cint (high_s n)) :: k
+ else
+ Paddis r1 r2 (Cint (high_s n)) ::
+ Paddi r1 r1 (Cint (low_s n)) :: k.
+
+Definition addimm_2 (r1 r2: ireg) (n: int) (k: code) :=
+ loadimm GPR2 n (Padd r1 r2 GPR2 :: k).
+
+Definition addimm (r1 r2: ireg) (n: int) (k: code) :=
+ if ireg_eq r1 GPR0 then
+ addimm_2 r1 r2 n k
+ else if ireg_eq r2 GPR0 then
+ addimm_2 r1 r2 n k
+ else
+ addimm_1 r1 r2 n k.
+
+Definition andimm (r1 r2: ireg) (n: int) (k: code) :=
+ if Int.eq (high_u n) Int.zero then
+ Pandi_ r1 r2 (Cint n) :: k
+ else if Int.eq (low_u n) Int.zero then
+ Pandis_ r1 r2 (Cint (high_u n)) :: k
+ else
+ loadimm GPR2 n (Pand_ r1 r2 GPR2 :: k).
+
+Definition orimm (r1 r2: ireg) (n: int) (k: code) :=
+ if Int.eq (high_u n) Int.zero then
+ Pori r1 r2 (Cint n) :: k
+ else if Int.eq (low_u n) Int.zero then
+ Poris r1 r2 (Cint (high_u n)) :: k
+ else
+ Poris r1 r2 (Cint (high_u n)) ::
+ Pori r1 r1 (Cint (low_u n)) :: k.
+
+Definition xorimm (r1 r2: ireg) (n: int) (k: code) :=
+ if Int.eq (high_u n) Int.zero then
+ Pxori r1 r2 (Cint n) :: k
+ else if Int.eq (low_u n) Int.zero then
+ Pxoris r1 r2 (Cint (high_u n)) :: k
+ else
+ Pxoris r1 r2 (Cint (high_u n)) ::
+ Pxori r1 r1 (Cint (low_u n)) :: k.
+
+(** Smart constructors for indexed loads and stores,
+ where the address is the contents of a register plus
+ an integer literal. *)
+
+Definition loadind_aux (base: ireg) (ofs: int) (ty: typ) (dst: mreg) :=
+ match ty with
+ | Tint => Plwz (ireg_of dst) (Cint ofs) base
+ | Tfloat => Plfd (freg_of dst) (Cint ofs) base
+ end.
+
+Definition loadind (base: ireg) (ofs: int) (ty: typ) (dst: mreg) (k: code) :=
+ if Int.eq (high_s ofs) Int.zero then
+ loadind_aux base ofs ty dst :: k
+ else
+ Paddis GPR2 base (Cint (high_s ofs)) ::
+ loadind_aux GPR2 (low_s ofs) ty dst :: k.
+
+Definition storeind_aux (src: mreg) (base: ireg) (ofs: int) (ty: typ) :=
+ match ty with
+ | Tint => Pstw (ireg_of src) (Cint ofs) base
+ | Tfloat => Pstfd (freg_of src) (Cint ofs) base
+ end.
+
+Definition storeind (src: mreg) (base: ireg) (ofs: int) (ty: typ) (k: code) :=
+ if Int.eq (high_s ofs) Int.zero then
+ storeind_aux src base ofs ty :: k
+ else
+ Paddis GPR2 base (Cint (high_s ofs)) ::
+ storeind_aux src GPR2 (low_s ofs) ty :: k.
+
+(** Constructor for a floating-point comparison. The PowerPC has
+ a single [fcmpu] instruction to compare floats, which sets
+ bits 0, 1 and 2 of the condition register to reflect ``less'',
+ ``greater'' and ``equal'' conditions, respectively.
+ The ``less or equal'' and ``greater or equal'' conditions must be
+ synthesized by a [cror] instruction that computes the logical ``or''
+ of the corresponding two conditions. *)
+
+Definition floatcomp (cmp: comparison) (r1 r2: freg) (k: code) :=
+ Pfcmpu r1 r2 ::
+ match cmp with
+ | Cle => Pcror CRbit_3 CRbit_2 CRbit_0 :: k
+ | Cge => Pcror CRbit_3 CRbit_2 CRbit_1 :: k
+ | _ => k
+ end.
+
+(** Translation of a condition. Prepends to [k] the instructions
+ that evaluate the condition and leave its boolean result in one of
+ the bits of the condition register. The bit in question is
+ determined by the [crbit_for_cond] function. *)
+
+Definition transl_cond
+ (cond: condition) (args: list mreg) (k: code) :=
+ match cond, args with
+ | Ccomp c, a1 :: a2 :: nil =>
+ Pcmpw (ireg_of a1) (ireg_of a2) :: k
+ | Ccompu c, a1 :: a2 :: nil =>
+ Pcmplw (ireg_of a1) (ireg_of a2) :: k
+ | Ccompimm c n, a1 :: nil =>
+ if Int.eq (high_s n) Int.zero then
+ Pcmpwi (ireg_of a1) (Cint n) :: k
+ else
+ loadimm GPR2 n (Pcmpw (ireg_of a1) GPR2 :: k)
+ | Ccompuimm c n, a1 :: nil =>
+ if Int.eq (high_u n) Int.zero then
+ Pcmplwi (ireg_of a1) (Cint n) :: k
+ else
+ loadimm GPR2 n (Pcmplw (ireg_of a1) GPR2 :: k)
+ | Ccompf cmp, a1 :: a2 :: nil =>
+ floatcomp cmp (freg_of a1) (freg_of a2) k
+ | Cnotcompf cmp, a1 :: a2 :: nil =>
+ floatcomp cmp (freg_of a1) (freg_of a2) k
+ | Cmaskzero n, a1 :: nil =>
+ andimm GPR2 (ireg_of a1) n k
+ | Cmasknotzero n, a1 :: nil =>
+ andimm GPR2 (ireg_of a1) n k
+ | _, _ =>
+ k (**r never happens for well-typed code *)
+ end.
+
+(* CRbit_0 = Less
+ CRbit_1 = Greater
+ CRbit_2 = Equal
+ CRbit_3 = Other *)
+
+Definition crbit_for_icmp (cmp: comparison) :=
+ match cmp with
+ | Ceq => (CRbit_2, true)
+ | Cne => (CRbit_2, false)
+ | Clt => (CRbit_0, true)
+ | Cle => (CRbit_1, false)
+ | Cgt => (CRbit_1, true)
+ | Cge => (CRbit_0, false)
+ end.
+
+Definition crbit_for_fcmp (cmp: comparison) :=
+ match cmp with
+ | Ceq => (CRbit_2, true)
+ | Cne => (CRbit_2, false)
+ | Clt => (CRbit_0, true)
+ | Cle => (CRbit_3, true)
+ | Cgt => (CRbit_1, true)
+ | Cge => (CRbit_3, true)
+ end.
+
+Definition crbit_for_cond (cond: condition) :=
+ match cond with
+ | Ccomp cmp => crbit_for_icmp cmp
+ | Ccompu cmp => crbit_for_icmp cmp
+ | Ccompimm cmp n => crbit_for_icmp cmp
+ | Ccompuimm cmp n => crbit_for_icmp cmp
+ | Ccompf cmp => crbit_for_fcmp cmp
+ | Cnotcompf cmp => let p := crbit_for_fcmp cmp in (fst p, negb (snd p))
+ | Cmaskzero n => (CRbit_2, true)
+ | Cmasknotzero n => (CRbit_2, false)
+ end.
+
+(** Translation of the arithmetic operation [r <- op(args)].
+ The corresponding instructions are prepended to [k]. *)
+
+Definition transl_op
+ (op: operation) (args: list mreg) (r: mreg) (k: code) :=
+ match op, args with
+ | Omove, a1 :: nil =>
+ match mreg_type a1 with
+ | Tint => Pmr (ireg_of r) (ireg_of a1) :: k
+ | Tfloat => Pfmr (freg_of r) (freg_of a1) :: k
+ end
+ | Ointconst n, nil =>
+ loadimm (ireg_of r) n k
+ | Ofloatconst f, nil =>
+ Plfi (freg_of r) f :: k
+ | Oaddrsymbol s ofs, nil =>
+ Paddis (ireg_of r) GPR0 (Csymbol_high_unsigned s ofs) ::
+ Pori (ireg_of r) (ireg_of r) (Csymbol_low_unsigned s ofs) :: k
+ | Oaddrstack n, nil =>
+ addimm (ireg_of r) GPR1 n k
+ | Oundef, nil =>
+ match mreg_type r with
+ | Tint => Piundef (ireg_of r) :: k
+ | Tfloat => Pfundef (freg_of r) :: k
+ end
+ | Ocast8signed, a1 :: nil =>
+ Pextsb (ireg_of r) (ireg_of a1) :: k
+ | Ocast16signed, a1 :: nil =>
+ Pextsh (ireg_of r) (ireg_of a1) :: k
+ | Oadd, a1 :: a2 :: nil =>
+ Padd (ireg_of r) (ireg_of a1) (ireg_of a2) :: k
+ | Oaddimm n, a1 :: nil =>
+ addimm (ireg_of r) (ireg_of a1) n k
+ | Osub, a1 :: a2 :: nil =>
+ Psubfc (ireg_of r) (ireg_of a2) (ireg_of a1) :: k
+ | Osubimm n, a1 :: nil =>
+ if Int.eq (high_s n) Int.zero then
+ Psubfic (ireg_of r) (ireg_of a1) (Cint n) :: k
+ else
+ loadimm GPR2 n (Psubfc (ireg_of r) (ireg_of a1) GPR2 :: k)
+ | Omul, a1 :: a2 :: nil =>
+ Pmullw (ireg_of r) (ireg_of a1) (ireg_of a2) :: k
+ | Omulimm n, a1 :: nil =>
+ if Int.eq (high_s n) Int.zero then
+ Pmulli (ireg_of r) (ireg_of a1) (Cint n) :: k
+ else
+ loadimm GPR2 n (Pmullw (ireg_of r) (ireg_of a1) GPR2 :: k)
+ | Odiv, a1 :: a2 :: nil =>
+ Pdivw (ireg_of r) (ireg_of a1) (ireg_of a2) :: k
+ | Odivu, a1 :: a2 :: nil =>
+ Pdivwu (ireg_of r) (ireg_of a1) (ireg_of a2) :: k
+ | Oand, a1 :: a2 :: nil =>
+ Pand_ (ireg_of r) (ireg_of a1) (ireg_of a2) :: k
+ | Oandimm n, a1 :: nil =>
+ andimm (ireg_of r) (ireg_of a1) n k
+ | Oor, a1 :: a2 :: nil =>
+ Por (ireg_of r) (ireg_of a1) (ireg_of a2) :: k
+ | Oorimm n, a1 :: nil =>
+ orimm (ireg_of r) (ireg_of a1) n k
+ | Oxor, a1 :: a2 :: nil =>
+ Pxor (ireg_of r) (ireg_of a1) (ireg_of a2) :: k
+ | Oxorimm n, a1 :: nil =>
+ xorimm (ireg_of r) (ireg_of a1) n k
+ | Onand, a1 :: a2 :: nil =>
+ Pnand (ireg_of r) (ireg_of a1) (ireg_of a2) :: k
+ | Onor, a1 :: a2 :: nil =>
+ Pnor (ireg_of r) (ireg_of a1) (ireg_of a2) :: k
+ | Onxor, a1 :: a2 :: nil =>
+ Peqv (ireg_of r) (ireg_of a1) (ireg_of a2) :: k
+ | Oshl, a1 :: a2 :: nil =>
+ Pslw (ireg_of r) (ireg_of a1) (ireg_of a2) :: k
+ | Oshr, a1 :: a2 :: nil =>
+ Psraw (ireg_of r) (ireg_of a1) (ireg_of a2) :: k
+ | Oshrimm n, a1 :: nil =>
+ Psrawi (ireg_of r) (ireg_of a1) n :: k
+ | Oshrximm n, a1 :: nil =>
+ Psrawi (ireg_of r) (ireg_of a1) n ::
+ Paddze (ireg_of r) (ireg_of r) :: k
+ | Oshru, a1 :: a2 :: nil =>
+ Psrw (ireg_of r) (ireg_of a1) (ireg_of a2) :: k
+ | Orolm amount mask, a1 :: nil =>
+ Prlwinm (ireg_of r) (ireg_of a1) amount mask :: k
+ | Onegf, a1 :: nil =>
+ Pfneg (freg_of r) (freg_of a1) :: k
+ | Oabsf, a1 :: nil =>
+ Pfabs (freg_of r) (freg_of a1) :: k
+ | Oaddf, a1 :: a2 :: nil =>
+ Pfadd (freg_of r) (freg_of a1) (freg_of a2) :: k
+ | Osubf, a1 :: a2 :: nil =>
+ Pfsub (freg_of r) (freg_of a1) (freg_of a2) :: k
+ | Omulf, a1 :: a2 :: nil =>
+ Pfmul (freg_of r) (freg_of a1) (freg_of a2) :: k
+ | Odivf, a1 :: a2 :: nil =>
+ Pfdiv (freg_of r) (freg_of a1) (freg_of a2) :: k
+ | Omuladdf, a1 :: a2 :: a3 :: nil =>
+ Pfmadd (freg_of r) (freg_of a1) (freg_of a2) (freg_of a3) :: k
+ | Omulsubf, a1 :: a2 :: a3 :: nil =>
+ Pfmsub (freg_of r) (freg_of a1) (freg_of a2) (freg_of a3) :: k
+ | Osingleoffloat, a1 :: nil =>
+ Pfrsp (freg_of r) (freg_of a1) :: k
+ | Ointoffloat, a1 :: nil =>
+ Pfcti (ireg_of r) (freg_of a1) :: k
+ | Ofloatofint, a1 :: nil =>
+ Pictf (freg_of r) (ireg_of a1) :: k
+ | Ofloatofintu, a1 :: nil =>
+ Piuctf (freg_of r) (ireg_of a1) :: k
+ | Ocmp cmp, _ =>
+ let p := crbit_for_cond cmp in
+ transl_cond cmp args
+ (Pmfcrbit (ireg_of r) (fst p) ::
+ if snd p
+ then k
+ else Pxori (ireg_of r) (ireg_of r) (Cint Int.one) :: k)
+ | _, _ =>
+ k (**r never happens for well-typed code *)
+ end.
+
+(** Common code to translate [Mload] and [Mstore] instructions. *)
+
+Definition transl_load_store
+ (mk1: constant -> ireg -> instruction)
+ (mk2: ireg -> ireg -> instruction)
+ (addr: addressing) (args: list mreg) (k: code) :=
+ match addr, args with
+ | Aindexed ofs, a1 :: nil =>
+ if ireg_eq (ireg_of a1) GPR0 then
+ Pmr GPR2 (ireg_of a1) ::
+ Paddis GPR2 GPR2 (Cint (high_s ofs)) ::
+ mk1 (Cint (low_s ofs)) GPR2 :: k
+ else if Int.eq (high_s ofs) Int.zero then
+ mk1 (Cint ofs) (ireg_of a1) :: k
+ else
+ Paddis GPR2 (ireg_of a1) (Cint (high_s ofs)) ::
+ mk1 (Cint (low_s ofs)) GPR2 :: k
+ | Aindexed2, a1 :: a2 :: nil =>
+ mk2 (ireg_of a1) (ireg_of a2) :: k
+ | Aglobal symb ofs, nil =>
+ Paddis GPR2 GPR0 (Csymbol_high_signed symb ofs) ::
+ mk1 (Csymbol_low_signed symb ofs) GPR2 :: k
+ | Abased symb ofs, a1 :: nil =>
+ if ireg_eq (ireg_of a1) GPR0 then
+ Pmr GPR2 (ireg_of a1) ::
+ Paddis GPR2 GPR2 (Csymbol_high_signed symb ofs) ::
+ mk1 (Csymbol_low_signed symb ofs) GPR2 :: k
+ else
+ Paddis GPR2 (ireg_of a1) (Csymbol_high_signed symb ofs) ::
+ mk1 (Csymbol_low_signed symb ofs) GPR2 :: k
+ | Ainstack ofs, nil =>
+ if Int.eq (high_s ofs) Int.zero then
+ mk1 (Cint ofs) GPR1 :: k
+ else
+ Paddis GPR2 GPR1 (Cint (high_s ofs)) ::
+ mk1 (Cint (low_s ofs)) GPR2 :: k
+ | _, _ =>
+ (* should not happen *) k
+ end.
+
+(** Translation of a Mach instruction. *)
+
+Definition transl_instr (i: Mach.instruction) (k: code) :=
+ match i with
+ | Mgetstack ofs ty dst =>
+ loadind GPR1 ofs ty dst k
+ | Msetstack src ofs ty =>
+ storeind src GPR1 ofs ty k
+ | Mgetparam ofs ty dst =>
+ Plwz GPR2 (Cint (Int.repr 0)) GPR1 :: loadind GPR2 ofs ty dst k
+ | Mop op args res =>
+ transl_op op args res k
+ | Mload chunk addr args dst =>
+ match chunk with
+ | Mint8signed =>
+ transl_load_store
+ (Plbz (ireg_of dst)) (Plbzx (ireg_of dst)) addr args
+ (Pextsb (ireg_of dst) (ireg_of dst) :: k)
+ | Mint8unsigned =>
+ transl_load_store
+ (Plbz (ireg_of dst)) (Plbzx (ireg_of dst)) addr args k
+ | Mint16signed =>
+ transl_load_store
+ (Plha (ireg_of dst)) (Plhax (ireg_of dst)) addr args k
+ | Mint16unsigned =>
+ transl_load_store
+ (Plhz (ireg_of dst)) (Plhzx (ireg_of dst)) addr args k
+ | Mint32 =>
+ transl_load_store
+ (Plwz (ireg_of dst)) (Plwzx (ireg_of dst)) addr args k
+ | Mfloat32 =>
+ transl_load_store
+ (Plfs (freg_of dst)) (Plfsx (freg_of dst)) addr args k
+ | Mfloat64 =>
+ transl_load_store
+ (Plfd (freg_of dst)) (Plfdx (freg_of dst)) addr args k
+ end
+ | Mstore chunk addr args src =>
+ match chunk with
+ | Mint8signed =>
+ transl_load_store
+ (Pstb (ireg_of src)) (Pstbx (ireg_of src)) addr args k
+ | Mint8unsigned =>
+ transl_load_store
+ (Pstb (ireg_of src)) (Pstbx (ireg_of src)) addr args k
+ | Mint16signed =>
+ transl_load_store
+ (Psth (ireg_of src)) (Psthx (ireg_of src)) addr args k
+ | Mint16unsigned =>
+ transl_load_store
+ (Psth (ireg_of src)) (Psthx (ireg_of src)) addr args k
+ | Mint32 =>
+ transl_load_store
+ (Pstw (ireg_of src)) (Pstwx (ireg_of src)) addr args k
+ | Mfloat32 =>
+ transl_load_store
+ (Pstfs (freg_of src)) (Pstfsx (freg_of src)) addr args k
+ | Mfloat64 =>
+ transl_load_store
+ (Pstfd (freg_of src)) (Pstfdx (freg_of src)) addr args k
+ end
+ | Mcall sig (inl r) =>
+ Pmtctr (ireg_of r) :: Pbctrl :: k
+ | Mcall sig (inr symb) =>
+ Pbl symb :: k
+ | Mlabel lbl =>
+ Plabel lbl :: k
+ | Mgoto lbl =>
+ Pb lbl :: k
+ | Mcond cond args lbl =>
+ let p := crbit_for_cond cond in
+ transl_cond cond args
+ (if (snd p) then Pbt (fst p) lbl :: k else Pbf (fst p) lbl :: k)
+ | Mreturn =>
+ Plwz GPR2 (Cint (Int.repr 4)) GPR1 ::
+ Pmtlr GPR2 :: Pfreeframe :: Pblr :: k
+ end.
+
+Definition transl_code (il: list Mach.instruction) :=
+ List.fold_right transl_instr nil il.
+
+(** Translation of a whole function. Note that we must check
+ that the generated code contains less than [2^32] instructions,
+ otherwise the offset part of the [PC] code pointer could wrap
+ around, leading to incorrect executions. *)
+
+Definition transl_function (f: Mach.function) :=
+ Pallocframe (- f.(fn_framesize))
+ (align_16_top (-f.(fn_framesize)) f.(fn_stacksize)) ::
+ Pmflr GPR2 ::
+ Pstw GPR2 (Cint (Int.repr 4)) GPR1 ::
+ transl_code f.(fn_code).
+
+Fixpoint code_size (c: code) : Z :=
+ match c with
+ | nil => 0
+ | instr :: c' => code_size c' + 1
+ end.
+
+Definition transf_function (f: Mach.function) :=
+ let c := transl_function f in
+ if zlt Int.max_unsigned (code_size c)
+ then None
+ else Some c.
+
+Definition transf_program (p: Mach.program) : option PPC.program :=
+ transform_partial_program transf_function p.
diff --git a/backend/PPCgenproof.v b/backend/PPCgenproof.v
new file mode 100644
index 0000000..d89046f
--- /dev/null
+++ b/backend/PPCgenproof.v
@@ -0,0 +1,1242 @@
+(** Correctness proof for PPC generation: main proof. *)
+
+Require Import Coqlib.
+Require Import Maps.
+Require Import AST.
+Require Import Integers.
+Require Import Floats.
+Require Import Values.
+Require Import Mem.
+Require Import Globalenvs.
+Require Import Op.
+Require Import Locations.
+Require Import Mach.
+Require Import Machtyping.
+Require Import PPC.
+Require Import PPCgen.
+Require Import PPCgenproof1.
+
+Section PRESERVATION.
+
+Variable prog: Mach.program.
+Variable tprog: PPC.program.
+Hypothesis TRANSF: transf_program prog = Some tprog.
+
+Let ge := Genv.globalenv prog.
+Let tge := Genv.globalenv tprog.
+
+Lemma symbols_preserved:
+ forall id, Genv.find_symbol tge id = Genv.find_symbol ge id.
+Proof.
+ intros. unfold ge, tge.
+ apply Genv.find_symbol_transf_partial with transf_function.
+ exact TRANSF.
+Qed.
+
+Lemma functions_translated:
+ forall f b,
+ Genv.find_funct_ptr ge b = Some f ->
+ Genv.find_funct_ptr tge b = Some (transl_function f).
+Proof.
+ intros.
+ generalize (Genv.find_funct_ptr_transf_partial
+ transf_function TRANSF H).
+ intros [A B].
+ unfold tge. change code with (list instruction). rewrite A.
+ generalize B. unfold transf_function.
+ case (zlt Int.max_unsigned (code_size (transl_function f))); intro.
+ tauto. auto.
+Qed.
+
+Lemma functions_translated_2:
+ forall f v,
+ Genv.find_funct ge v = Some f ->
+ Genv.find_funct tge v = Some (transl_function f).
+Proof.
+ intros.
+ generalize (Genv.find_funct_transf_partial
+ transf_function TRANSF H).
+ intros [A B].
+ unfold tge. change code with (list instruction). rewrite A.
+ generalize B. unfold transf_function.
+ case (zlt Int.max_unsigned (code_size (transl_function f))); intro.
+ tauto. auto.
+Qed.
+
+Lemma functions_translated_no_overflow:
+ forall b f,
+ Genv.find_funct_ptr ge b = Some f ->
+ code_size (transl_function f) <= Int.max_unsigned.
+Proof.
+ intros.
+ generalize (Genv.find_funct_ptr_transf_partial
+ transf_function TRANSF H).
+ intros [A B].
+ generalize B.
+ unfold transf_function.
+ case (zlt Int.max_unsigned (code_size (transl_function f))); intro.
+ tauto. intro. omega.
+Qed.
+
+(** * Properties of control flow *)
+
+Lemma find_instr_in:
+ forall c pos i,
+ find_instr pos c = Some i -> In i c.
+Proof.
+ induction c; simpl. intros; discriminate.
+ intros until i. case (zeq pos 0); intros.
+ left; congruence. right; eauto.
+Qed.
+
+(** The ``code tail'' of an instruction list [c] is the list of instructions
+ starting at PC [pos]. *)
+
+Fixpoint code_tail (pos: Z) (c: code) {struct c} : code :=
+ match c with
+ | nil => nil
+ | i :: il => if zeq pos 0 then c else code_tail (pos - 1) il
+ end.
+Proof.
+
+Lemma find_instr_tail:
+ forall c pos,
+ find_instr pos c =
+ match code_tail pos c with nil => None | i1 :: il => Some i1 end.
+Proof.
+ induction c; simpl; intros.
+ auto.
+ case (zeq pos 0); auto.
+Qed.
+
+Remark code_size_pos:
+ forall fn, code_size fn >= 0.
+Proof.
+ induction fn; simpl; omega.
+Qed.
+
+Remark code_tail_bounds:
+ forall fn ofs i c,
+ code_tail ofs fn = i :: c -> 0 <= ofs < code_size fn.
+Proof.
+ induction fn; simpl.
+ intros; discriminate.
+ intros until c. case (zeq ofs 0); intros.
+ generalize (code_size_pos fn). omega.
+ generalize (IHfn _ _ _ H). omega.
+Qed.
+
+Remark code_tail_unfold:
+ forall ofs i c,
+ ofs >= 0 ->
+ code_tail (ofs + 1) (i :: c) = code_tail ofs c.
+Proof.
+ intros. simpl. case (zeq (ofs + 1) 0); intros.
+ omegaContradiction.
+ replace (ofs + 1 - 1) with ofs. auto. omega.
+Qed.
+
+Remark code_tail_zero:
+ forall fn, code_tail 0 fn = fn.
+Proof.
+ intros. destruct fn; simpl. auto. auto.
+Qed.
+
+Lemma code_tail_next:
+ forall fn ofs i c,
+ code_tail ofs fn = i :: c ->
+ code_tail (ofs + 1) fn = c.
+Proof.
+ induction fn.
+ simpl; intros; discriminate.
+ intros until c. case (zeq ofs 0); intro.
+ subst ofs. intros. rewrite code_tail_zero in H. injection H.
+ intros. subst c. rewrite code_tail_unfold. apply code_tail_zero.
+ omega.
+ intro; generalize (code_tail_bounds _ _ _ _ H); intros [A B].
+ assert (ofs = (ofs - 1) + 1). omega.
+ rewrite H0 in H. rewrite code_tail_unfold in H.
+ rewrite code_tail_unfold. rewrite H0. eauto.
+ omega. omega.
+Qed.
+
+Lemma code_tail_next_int:
+ forall fn ofs i c,
+ code_size fn <= Int.max_unsigned ->
+ code_tail (Int.unsigned ofs) fn = i :: c ->
+ code_tail (Int.unsigned (Int.add ofs Int.one)) fn = c.
+Proof.
+ intros. rewrite Int.add_unsigned. unfold Int.one.
+ repeat rewrite Int.unsigned_repr. apply code_tail_next with i; auto.
+ compute; intuition congruence.
+ generalize (code_tail_bounds _ _ _ _ H0). omega.
+ compute; intuition congruence.
+Qed.
+
+(** [transl_code_at_pc pc fn c] holds if the code pointer [pc] points
+ within the PPC code generated by translating Mach function [fn],
+ and [c] is the tail of the generated code at the position corresponding
+ to the code pointer [pc]. *)
+
+Inductive transl_code_at_pc: val -> Mach.function -> Mach.code -> Prop :=
+ transl_code_at_pc_intro:
+ forall b ofs f c,
+ Genv.find_funct_ptr ge b = Some f ->
+ code_tail (Int.unsigned ofs) (transl_function f) = transl_code c ->
+ transl_code_at_pc (Vptr b ofs) f c.
+
+(** The following lemmas show that straight-line executions
+ (predicate [exec_straight]) correspond to correct PPC executions
+ (predicate [exec_steps]) under adequate [transl_code_at_pc] hypotheses. *)
+
+Lemma exec_straight_steps_1:
+ forall fn c rs m c' rs' m',
+ exec_straight tge fn c rs m c' rs' m' ->
+ code_size fn <= Int.max_unsigned ->
+ forall b ofs,
+ rs#PC = Vptr b ofs ->
+ Genv.find_funct_ptr tge b = Some fn ->
+ code_tail (Int.unsigned ofs) fn = c ->
+ exec_steps tge rs m rs' m'.
+Proof.
+ induction 1.
+ intros. apply exec_refl.
+ intros. apply exec_trans with rs2 m2.
+ apply exec_one; econstructor; eauto.
+ rewrite find_instr_tail. rewrite H5. auto.
+ apply IHexec_straight with b (Int.add ofs Int.one).
+ auto. rewrite H0. rewrite H3. reflexivity.
+ auto.
+ apply code_tail_next_int with i; auto.
+Qed.
+
+Lemma exec_straight_steps_2:
+ forall fn c rs m c' rs' m',
+ exec_straight tge fn c rs m c' rs' m' ->
+ code_size fn <= Int.max_unsigned ->
+ forall b ofs,
+ rs#PC = Vptr b ofs ->
+ Genv.find_funct_ptr tge b = Some fn ->
+ code_tail (Int.unsigned ofs) fn = c ->
+ exists ofs',
+ rs'#PC = Vptr b ofs'
+ /\ code_tail (Int.unsigned ofs') fn = c'.
+Proof.
+ induction 1; intros.
+ exists ofs. split. auto. auto.
+ apply IHexec_straight with (Int.add ofs Int.one).
+ auto. rewrite H0. rewrite H3. reflexivity. auto.
+ apply code_tail_next_int with i; auto.
+Qed.
+
+Lemma exec_straight_steps:
+ forall f c c' rs m rs' m',
+ transl_code_at_pc (rs PC) f c ->
+ exec_straight tge (transl_function f)
+ (transl_code c) rs m (transl_code c') rs' m' ->
+ exec_steps tge rs m rs' m' /\ transl_code_at_pc (rs' PC) f c'.
+Proof.
+ intros. inversion H.
+ generalize (functions_translated_no_overflow _ _ H2). intro.
+ generalize (functions_translated _ _ H2). intro.
+ split. eapply exec_straight_steps_1; eauto.
+ generalize (exec_straight_steps_2 _ _ _ _ _ _ _
+ H0 H6 _ _ (sym_equal H1) H7 H3).
+ intros [ofs' [PC' CT']].
+ rewrite PC'. constructor; auto.
+Qed.
+
+(** The [find_label] function returns the code tail starting at the
+ given label. A connection with [code_tail] is then established. *)
+
+Fixpoint find_label (lbl: label) (c: code) {struct c} : option code :=
+ match c with
+ | nil => None
+ | instr :: c' =>
+ if is_label lbl instr then Some c' else find_label lbl c'
+ end.
+
+Lemma label_pos_code_tail:
+ forall lbl c pos c',
+ find_label lbl c = Some c' ->
+ exists pos',
+ label_pos lbl pos c = Some pos'
+ /\ code_tail (pos' - pos) c = c'
+ /\ pos < pos' <= pos + code_size c.
+Proof.
+ induction c.
+ simpl; intros. discriminate.
+ simpl; intros until c'.
+ case (is_label lbl a).
+ intro EQ; injection EQ; intro; subst c'.
+ exists (pos + 1). split. auto. split.
+ rewrite zeq_false. replace (pos + 1 - pos - 1) with 0.
+ apply code_tail_zero. omega. omega.
+ generalize (code_size_pos c). omega.
+ intros. generalize (IHc (pos + 1) c' H). intros [pos' [A [B C]]].
+ exists pos'. split. auto. split.
+ rewrite zeq_false. replace (pos' - pos - 1) with (pos' - (pos + 1)).
+ auto. omega. omega. omega.
+Qed.
+
+(** The following lemmas show that the translation from Mach to PPC
+ preserves labels, in the sense that the following diagram commutes:
+<<
+ translation
+ Mach code ------------------------ PPC instr sequence
+ | |
+ | Mach.find_label lbl find_label lbl |
+ | |
+ v v
+ Mach code tail ------------------- PPC instr seq tail
+ translation
+>>
+ The proof demands many boring lemmas showing that PPC constructor
+ functions do not introduce new labels.
+*)
+
+Section TRANSL_LABEL.
+
+Variable lbl: label.
+
+Remark loadimm_label:
+ forall r n k, find_label lbl (loadimm r n k) = find_label lbl k.
+Proof.
+ intros. unfold loadimm.
+ case (Int.eq (high_s n) Int.zero). reflexivity.
+ case (Int.eq (low_s n) Int.zero). reflexivity.
+ reflexivity.
+Qed.
+Hint Rewrite loadimm_label: labels.
+
+Remark addimm_1_label:
+ forall r1 r2 n k, find_label lbl (addimm_1 r1 r2 n k) = find_label lbl k.
+Proof.
+ intros; unfold addimm_1.
+ case (Int.eq (high_s n) Int.zero). reflexivity.
+ case (Int.eq (low_s n) Int.zero). reflexivity. reflexivity.
+Qed.
+Remark addimm_2_label:
+ forall r1 r2 n k, find_label lbl (addimm_2 r1 r2 n k) = find_label lbl k.
+Proof.
+ intros; unfold addimm_2. autorewrite with labels. reflexivity.
+Qed.
+Remark addimm_label:
+ forall r1 r2 n k, find_label lbl (addimm r1 r2 n k) = find_label lbl k.
+Proof.
+ intros; unfold addimm.
+ case (ireg_eq r1 GPR0); intro. apply addimm_2_label.
+ case (ireg_eq r2 GPR0); intro. apply addimm_2_label.
+ apply addimm_1_label.
+Qed.
+Hint Rewrite addimm_label: labels.
+
+Remark andimm_label:
+ forall r1 r2 n k, find_label lbl (andimm r1 r2 n k) = find_label lbl k.
+Proof.
+ intros; unfold andimm.
+ case (Int.eq (high_u n) Int.zero). reflexivity.
+ case (Int.eq (low_u n) Int.zero). reflexivity.
+ autorewrite with labels. reflexivity.
+Qed.
+Hint Rewrite andimm_label: labels.
+
+Remark orimm_label:
+ forall r1 r2 n k, find_label lbl (orimm r1 r2 n k) = find_label lbl k.
+Proof.
+ intros; unfold orimm.
+ case (Int.eq (high_u n) Int.zero). reflexivity.
+ case (Int.eq (low_u n) Int.zero). reflexivity. reflexivity.
+Qed.
+Hint Rewrite orimm_label: labels.
+
+Remark xorimm_label:
+ forall r1 r2 n k, find_label lbl (xorimm r1 r2 n k) = find_label lbl k.
+Proof.
+ intros; unfold xorimm.
+ case (Int.eq (high_u n) Int.zero). reflexivity.
+ case (Int.eq (low_u n) Int.zero). reflexivity. reflexivity.
+Qed.
+Hint Rewrite xorimm_label: labels.
+
+Remark loadind_aux_label:
+ forall base ofs ty dst k, find_label lbl (loadind_aux base ofs ty dst :: k) = find_label lbl k.
+Proof.
+ intros; unfold loadind_aux.
+ case ty; reflexivity.
+Qed.
+Remark loadind_label:
+ forall base ofs ty dst k, find_label lbl (loadind base ofs ty dst k) = find_label lbl k.
+Proof.
+ intros; unfold loadind.
+ case (Int.eq (high_s ofs) Int.zero). apply loadind_aux_label.
+ transitivity (find_label lbl (loadind_aux GPR2 (low_s ofs) ty dst :: k)).
+ reflexivity. apply loadind_aux_label.
+Qed.
+Hint Rewrite loadind_label: labels.
+Remark storeind_aux_label:
+ forall base ofs ty dst k, find_label lbl (storeind_aux base ofs ty dst :: k) = find_label lbl k.
+Proof.
+ intros; unfold storeind_aux.
+ case dst; reflexivity.
+Qed.
+Remark storeind_label:
+ forall base ofs ty src k, find_label lbl (storeind base src ofs ty k) = find_label lbl k.
+Proof.
+ intros; unfold storeind.
+ case (Int.eq (high_s ofs) Int.zero). apply storeind_aux_label.
+ transitivity (find_label lbl (storeind_aux base GPR2 (low_s ofs) ty :: k)).
+ reflexivity. apply storeind_aux_label.
+Qed.
+Hint Rewrite storeind_label: labels.
+Remark floatcomp_label:
+ forall cmp r1 r2 k, find_label lbl (floatcomp cmp r1 r2 k) = find_label lbl k.
+Proof.
+ intros; unfold floatcomp. destruct cmp; reflexivity.
+Qed.
+
+Remark transl_cond_label:
+ forall cond args k, find_label lbl (transl_cond cond args k) = find_label lbl k.
+Proof.
+ intros; unfold transl_cond.
+ destruct cond; (destruct args;
+ [try reflexivity | destruct args;
+ [try reflexivity | destruct args; try reflexivity]]).
+ case (Int.eq (high_s i) Int.zero). reflexivity.
+ autorewrite with labels; reflexivity.
+ case (Int.eq (high_u i) Int.zero). reflexivity.
+ autorewrite with labels; reflexivity.
+ apply floatcomp_label. apply floatcomp_label.
+ apply andimm_label. apply andimm_label.
+Qed.
+Hint Rewrite transl_cond_label: labels.
+Remark transl_op_label:
+ forall op args r k, find_label lbl (transl_op op args r k) = find_label lbl k.
+Proof.
+ intros; unfold transl_op;
+ destruct op; destruct args; try (destruct args); try (destruct args); try (destruct args);
+ try reflexivity; autorewrite with labels; try reflexivity.
+ case (mreg_type m); reflexivity.
+ case (mreg_type r); reflexivity.
+ case (Int.eq (high_s i) Int.zero); autorewrite with labels; reflexivity.
+ case (Int.eq (high_s i) Int.zero); autorewrite with labels; reflexivity.
+ case (snd (crbit_for_cond c)); reflexivity.
+ case (snd (crbit_for_cond c)); reflexivity.
+ case (snd (crbit_for_cond c)); reflexivity.
+ case (snd (crbit_for_cond c)); reflexivity.
+ case (snd (crbit_for_cond c)); reflexivity.
+Qed.
+Hint Rewrite transl_op_label: labels.
+
+Remark transl_load_store_label:
+ forall (mk1: constant -> ireg -> instruction) (mk2: ireg -> ireg -> instruction)
+ addr args k,
+ (forall c r, is_label lbl (mk1 c r) = false) ->
+ (forall r1 r2, is_label lbl (mk2 r1 r2) = false) ->
+ find_label lbl (transl_load_store mk1 mk2 addr args k) = find_label lbl k.
+Proof.
+ intros; unfold transl_load_store.
+ destruct addr; destruct args; try (destruct args); try (destruct args);
+ try reflexivity.
+ case (ireg_eq (ireg_of m) GPR0); intro.
+ simpl. rewrite H. auto.
+ case (Int.eq (high_s i) Int.zero). simpl; rewrite H; auto.
+ simpl; rewrite H; auto.
+ simpl; rewrite H0; auto.
+ simpl; rewrite H; auto.
+ case (ireg_eq (ireg_of m) GPR0); intro; simpl; rewrite H; auto.
+ case (Int.eq (high_s i) Int.zero); simpl; rewrite H; auto.
+Qed.
+Hint Rewrite transl_load_store_label: labels.
+
+Lemma transl_instr_label:
+ forall i k,
+ find_label lbl (transl_instr i k) =
+ if Mach.is_label lbl i then Some k else find_label lbl k.
+Proof.
+ intros. generalize (Mach.is_label_correct lbl i).
+ case (Mach.is_label lbl i); intro.
+ subst i. simpl. rewrite peq_true. auto.
+ destruct i; simpl; autorewrite with labels; try reflexivity.
+ destruct m; rewrite transl_load_store_label; intros; reflexivity.
+ destruct m; rewrite transl_load_store_label; intros; reflexivity.
+ destruct s0; reflexivity.
+ rewrite peq_false. auto. congruence.
+ case (snd (crbit_for_cond c)); reflexivity.
+Qed.
+
+Lemma transl_code_label:
+ forall c,
+ find_label lbl (transl_code c) =
+ option_map transl_code (Mach.find_label lbl c).
+Proof.
+ induction c; simpl; intros.
+ auto. rewrite transl_instr_label.
+ case (Mach.is_label lbl a). reflexivity.
+ auto.
+Qed.
+
+Lemma transl_find_label:
+ forall f,
+ find_label lbl (transl_function f) =
+ option_map transl_code (Mach.find_label lbl f.(fn_code)).
+Proof.
+ intros. unfold transl_function. simpl. apply transl_code_label.
+Qed.
+
+End TRANSL_LABEL.
+
+(** A valid branch in a piece of Mach code translates to a valid ``go to''
+ transition in the generated PPC code. *)
+
+Lemma find_label_goto_label:
+ forall f lbl rs m c' b ofs,
+ Genv.find_funct_ptr ge b = Some f ->
+ rs PC = Vptr b ofs ->
+ Mach.find_label lbl f.(fn_code) = Some c' ->
+ exists rs',
+ goto_label (transl_function f) lbl rs m = OK rs' m
+ /\ transl_code_at_pc (rs' PC) f c'
+ /\ forall r, r <> PC -> rs'#r = rs#r.
+Proof.
+ intros.
+ generalize (transl_find_label lbl f).
+ rewrite H1; simpl. intro.
+ generalize (label_pos_code_tail lbl (transl_function f) 0
+ (transl_code c') H2).
+ intros [pos' [A [B C]]].
+ exists (rs#PC <- (Vptr b (Int.repr pos'))).
+ split. unfold goto_label. rewrite A. rewrite H0. auto.
+ split. rewrite Pregmap.gss. constructor. auto.
+ rewrite Int.unsigned_repr. replace (pos' - 0) with pos' in B.
+ auto. omega.
+ generalize (functions_translated_no_overflow _ _ H).
+ omega.
+ intros. apply Pregmap.gso; auto.
+Qed.
+
+(** * Memory properties *)
+
+(** The PowerPC has no instruction for ``load 8-bit signed integer''.
+ We show that it can be synthesized as a ``load 8-bit unsigned integer''
+ followed by a sign extension. *)
+
+Lemma loadv_8_signed_unsigned:
+ forall m a,
+ Mem.loadv Mint8signed m a =
+ option_map Val.cast8signed (Mem.loadv Mint8unsigned m a).
+Proof.
+ intros. unfold Mem.loadv. destruct a; try reflexivity.
+ unfold load. case (zlt b (nextblock m)); intro.
+ change (in_bounds Mint8unsigned (Int.signed i) (blocks m b))
+ with (in_bounds Mint8signed (Int.signed i) (blocks m b)).
+ case (in_bounds Mint8signed (Int.signed i) (blocks m b)).
+ change (mem_chunk Mint8unsigned) with (mem_chunk Mint8signed).
+ set (v := (load_contents (mem_chunk Mint8signed)
+ (contents (blocks m b)) (Int.signed i))).
+ unfold Val.load_result. destruct v; try reflexivity.
+ simpl. rewrite Int.cast8_signed_unsigned. auto.
+ reflexivity. reflexivity.
+Qed.
+
+(** Similarly, we show that signed 8- and 16-bit stores can be performed
+ like unsigned stores. *)
+
+Lemma storev_8_signed_unsigned:
+ forall m a v,
+ Mem.storev Mint8signed m a v = Mem.storev Mint8unsigned m a v.
+Proof.
+ intros. reflexivity.
+Qed.
+
+Lemma storev_16_signed_unsigned:
+ forall m a v,
+ Mem.storev Mint16signed m a v = Mem.storev Mint16unsigned m a v.
+Proof.
+ intros. reflexivity.
+Qed.
+
+(** * Proof of semantic preservation *)
+
+(** The invariants for the inductive proof of simulation are as follows.
+ The simulation diagrams are of the form:
+<<
+ c1, ms1, m1 --------------------- rs1, m1
+ | |
+ | |
+ v v
+ c2, ms2, m2 --------------------- rs2, m2
+>>
+ Left: execution of one Mach instruction. Right: execution of zero, one
+ or several instructions. Precondition (top): agreement between
+ the Mach register set [ms1] and the PPC register set [rs1]; moreover,
+ [rs1 PC] points to the translation of code [c1]. Postcondition (bottom):
+ similar.
+*)
+
+Definition exec_instr_prop
+ (f: Mach.function) (sp: val)
+ (c1: Mach.code) (ms1: Mach.regset) (m1: mem)
+ (c2: Mach.code) (ms2: Mach.regset) (m2: mem) :=
+ forall rs1
+ (WTF: wt_function f)
+ (INCL: incl c1 f.(fn_code))
+ (AT: transl_code_at_pc (rs1 PC) f c1)
+ (AG: agree ms1 sp rs1),
+ exists rs2,
+ agree ms2 sp rs2
+ /\ exec_steps tge rs1 m1 rs2 m2
+ /\ transl_code_at_pc (rs2 PC) f c2.
+
+Definition exec_function_body_prop
+ (f: Mach.function) (parent: val) (ra: val)
+ (ms1: Mach.regset) (m1: mem)
+ (ms2: Mach.regset) (m2: mem) :=
+ forall rs1
+ (WTRA: Val.has_type ra Tint)
+ (RALR: rs1 LR = ra)
+ (WTF: wt_function f)
+ (AT: Genv.find_funct ge (rs1 PC) = Some f)
+ (AG: agree ms1 parent rs1),
+ exists rs2,
+ agree ms2 parent rs2
+ /\ exec_steps tge rs1 m1 rs2 m2
+ /\ rs2 PC = rs1 LR.
+
+Definition exec_function_prop
+ (f: Mach.function) (parent: val)
+ (ms1: Mach.regset) (m1: mem)
+ (ms2: Mach.regset) (m2: mem) :=
+ forall rs1
+ (WTF: wt_function f)
+ (AT: Genv.find_funct ge (rs1 PC) = Some f)
+ (AG: agree ms1 parent rs1)
+ (WTRA: Val.has_type (rs1 LR) Tint),
+ exists rs2,
+ agree ms2 parent rs2
+ /\ exec_steps tge rs1 m1 rs2 m2
+ /\ rs2 PC = rs1 LR.
+
+(** We show each case of the inductive proof of simulation as a separate
+ lemma. *)
+
+Lemma exec_Mlabel_prop:
+ forall (f : function) (sp : val) (lbl : Mach.label)
+ (c : list Mach.instruction) (rs : Mach.regset) (m : mem),
+ exec_instr_prop f sp (Mlabel lbl :: c) rs m c rs m.
+Proof.
+ intros; red; intros.
+ assert (exec_straight tge (transl_function f)
+ (transl_code (Mlabel lbl :: c)) rs1 m
+ (transl_code c) (nextinstr rs1) m).
+ simpl. apply exec_straight_one. reflexivity. reflexivity.
+ exists (nextinstr rs1). split. apply agree_nextinstr; auto.
+ eapply exec_straight_steps; eauto.
+Qed.
+
+Lemma exec_Mgetstack_prop:
+ forall (f : function) (sp : val) (ofs : int) (ty : typ) (dst : mreg)
+ (c : list Mach.instruction) (ms : Mach.regset) (m : mem) (v : val),
+ load_stack m sp ty ofs = Some v ->
+ exec_instr_prop f sp (Mgetstack ofs ty dst :: c) ms m c (Regmap.set dst v ms) m.
+Proof.
+ intros; red; intros.
+ unfold load_stack in H.
+ generalize (wt_function_instrs _ WTF _ (INCL _ (in_eq _ _))).
+ intro WTI. inversion WTI.
+ rewrite (sp_val _ _ _ AG) in H.
+ assert (NOTE: GPR1 <> GPR0). congruence.
+ generalize (loadind_correct tge (transl_function f) GPR1 ofs ty
+ dst (transl_code c) rs1 m v H H1 NOTE).
+ intros [rs2 [EX [RES OTH]]].
+ exists rs2. split.
+ apply agree_exten_2 with (rs1#(preg_of dst) <- v).
+ auto with ppcgen.
+ intros. case (preg_eq r0 (preg_of dst)); intro.
+ subst r0. rewrite Pregmap.gss. auto.
+ rewrite Pregmap.gso; auto.
+ eapply exec_straight_steps; eauto.
+Qed.
+
+Lemma exec_Msetstack_prop:
+ forall (f : function) (sp : val) (src : mreg) (ofs : int) (ty : typ)
+ (c : list Mach.instruction) (ms : mreg -> val) (m m' : mem),
+ store_stack m sp ty ofs (ms src) = Some m' ->
+ exec_instr_prop f sp (Msetstack src ofs ty :: c) ms m c ms m'.
+Proof.
+ intros; red; intros.
+ unfold store_stack in H.
+ generalize (wt_function_instrs _ WTF _ (INCL _ (in_eq _ _))).
+ intro WTI. inversion WTI.
+ rewrite (sp_val _ _ _ AG) in H.
+ rewrite (preg_val ms sp rs1) in H; auto.
+ assert (NOTE: GPR1 <> GPR0). congruence.
+ generalize (storeind_correct tge (transl_function f) GPR1 ofs ty
+ src (transl_code c) rs1 m m' H H2 NOTE).
+ intros [rs2 [EX OTH]].
+ exists rs2. split.
+ apply agree_exten_2 with rs1; auto.
+ eapply exec_straight_steps; eauto.
+Qed.
+
+Lemma exec_Mgetparam_prop:
+ forall (f : function) (sp parent : val) (ofs : int) (ty : typ)
+ (dst : mreg) (c : list Mach.instruction) (ms : Mach.regset)
+ (m : mem) (v : val),
+ load_stack m sp Tint (Int.repr 0) = Some parent ->
+ load_stack m parent ty ofs = Some v ->
+ exec_instr_prop f sp (Mgetparam ofs ty dst :: c) ms m c (Regmap.set dst v ms) m.
+Proof.
+ intros; red; intros.
+ set (rs2 := nextinstr (rs1#GPR2 <- parent)).
+ assert (EX1: exec_straight tge (transl_function f)
+ (transl_code (Mgetparam ofs ty dst :: c)) rs1 m
+ (loadind GPR2 ofs ty dst (transl_code c)) rs2 m).
+ simpl. apply exec_straight_one.
+ simpl. unfold load1. rewrite gpr_or_zero_not_zero; auto with ppcgen.
+ unfold const_low. rewrite <- (sp_val ms sp rs1); auto.
+ unfold load_stack in H. simpl chunk_of_type in H.
+ rewrite H. reflexivity. reflexivity.
+ generalize (wt_function_instrs _ WTF _ (INCL _ (in_eq _ _))).
+ intro WTI. inversion WTI.
+ unfold load_stack in H0. change parent with rs2#GPR2 in H0.
+ assert (NOTE: GPR2 <> GPR0). congruence.
+ generalize (loadind_correct tge (transl_function f) GPR2 ofs ty
+ dst (transl_code c) rs2 m v H0 H2 NOTE).
+ intros [rs3 [EX2 [RES OTH]]].
+ exists rs3. split.
+ apply agree_exten_2 with (rs2#(preg_of dst) <- v).
+ unfold rs2; auto with ppcgen.
+ intros. case (preg_eq r0 (preg_of dst)); intro.
+ subst r0. rewrite Pregmap.gss. auto.
+ rewrite Pregmap.gso; auto.
+ eapply exec_straight_steps; eauto.
+ eapply exec_straight_trans; eauto.
+Qed.
+
+Lemma exec_straight_exec_prop:
+ forall f sp c1 rs1 m1 c2 m2 ms',
+ transl_code_at_pc (rs1 PC) f c1 ->
+ (exists rs2,
+ exec_straight tge (transl_function f)
+ (transl_code c1) rs1 m1
+ (transl_code c2) rs2 m2
+ /\ agree ms' sp rs2) ->
+ (exists rs2,
+ agree ms' sp rs2
+ /\ exec_steps tge rs1 m1 rs2 m2
+ /\ transl_code_at_pc (rs2 PC) f c2).
+Proof.
+ intros until ms'. intros TRANS1 [rs2 [EX AG]].
+ exists rs2. split. assumption.
+ eapply exec_straight_steps; eauto.
+Qed.
+
+Lemma exec_Mop_prop:
+ forall (f : function) (sp : val) (op : operation) (args : list mreg)
+ (res : mreg) (c : list Mach.instruction) (ms: Mach.regset)
+ (m : mem) (v: val),
+ eval_operation ge sp op ms ## args = Some v ->
+ exec_instr_prop f sp (Mop op args res :: c) ms m c (Regmap.set res v ms) m.
+Proof.
+ intros; red; intros.
+ generalize (wt_function_instrs _ WTF _ (INCL _ (in_eq _ _))).
+ intro WTI.
+ eapply exec_straight_exec_prop; eauto.
+ simpl. eapply transl_op_correct; auto.
+ rewrite <- H. apply eval_operation_preserved. exact symbols_preserved.
+Qed.
+
+Lemma exec_Mload_prop:
+ forall (f : function) (sp : val) (chunk : memory_chunk)
+ (addr : addressing) (args : list mreg) (dst : mreg)
+ (c : list Mach.instruction) (ms: Mach.regset) (m : mem)
+ (a v : val),
+ eval_addressing ge sp addr ms ## args = Some a ->
+ loadv chunk m a = Some v ->
+ exec_instr_prop f sp (Mload chunk addr args dst :: c) ms m c (Regmap.set dst v ms) m.
+Proof.
+ intros; red; intros.
+ generalize (wt_function_instrs _ WTF _ (INCL _ (in_eq _ _))).
+ intro WTI; inversion WTI.
+ assert (eval_addressing tge sp addr ms##args = Some a).
+ rewrite <- H. apply eval_addressing_preserved. exact symbols_preserved.
+ eapply exec_straight_exec_prop; eauto.
+ destruct chunk; simpl; simpl in H6;
+ (* all cases but Mint8signed *)
+ try (eapply transl_load_correct; eauto;
+ intros; simpl; unfold preg_of; rewrite H6; auto).
+ (* Mint8signed *)
+ generalize (loadv_8_signed_unsigned m a).
+ rewrite H0.
+ caseEq (loadv Mint8unsigned m a);
+ [idtac | simpl;intros;discriminate].
+ intros v' LOAD' EQ. simpl in EQ. injection EQ. intro EQ1. clear EQ.
+ assert (X1: forall (cst : constant) (r1 : ireg) (rs1 : regset),
+ exec_instr tge (transl_function f) (Plbz (ireg_of dst) cst r1) rs1 m =
+ load1 tge Mint8unsigned (preg_of dst) cst r1 rs1 m).
+ intros. unfold preg_of; rewrite H6. reflexivity.
+ assert (X2: forall (r1 r2 : ireg) (rs1 : regset),
+ exec_instr tge (transl_function f) (Plbzx (ireg_of dst) r1 r2) rs1 m =
+ load2 Mint8unsigned (preg_of dst) r1 r2 rs1 m).
+ intros. unfold preg_of; rewrite H6. reflexivity.
+ generalize (transl_load_correct tge (transl_function f)
+ (Plbz (ireg_of dst)) (Plbzx (ireg_of dst))
+ Mint8unsigned addr args
+ (Pextsb (ireg_of dst) (ireg_of dst) :: transl_code c)
+ ms sp rs1 m dst a v'
+ X1 X2 AG H3 H7 LOAD').
+ intros [rs2 [EX1 AG1]].
+ exists (nextinstr (rs2#(ireg_of dst) <- v)).
+ split. eapply exec_straight_trans. eexact EX1.
+ apply exec_straight_one. simpl.
+ rewrite <- (ireg_val _ _ _ dst AG1);auto. rewrite Regmap.gss.
+ rewrite EQ1. reflexivity. reflexivity.
+ eauto with ppcgen.
+Qed.
+
+Lemma exec_Mstore_prop:
+ forall (f : function) (sp : val) (chunk : memory_chunk)
+ (addr : addressing) (args : list mreg) (src : mreg)
+ (c : list Mach.instruction) (ms: Mach.regset) (m m' : mem)
+ (a : val),
+ eval_addressing ge sp addr ms ## args = Some a ->
+ storev chunk m a (ms src) = Some m' ->
+ exec_instr_prop f sp (Mstore chunk addr args src :: c) ms m c ms m'.
+Proof.
+ intros; red; intros.
+ generalize (wt_function_instrs _ WTF _ (INCL _ (in_eq _ _))).
+ intro WTI; inversion WTI.
+ rewrite <- (eval_addressing_preserved symbols_preserved) in H.
+ eapply exec_straight_exec_prop; eauto.
+ destruct chunk; simpl; simpl in H6;
+ try (rewrite storev_8_signed_unsigned in H);
+ try (rewrite storev_16_signed_unsigned in H);
+ simpl; eapply transl_store_correct; eauto;
+ intros; unfold preg_of; rewrite H6; reflexivity.
+Qed.
+
+Hypothesis wt_prog: wt_program prog.
+
+Lemma exec_Mcall_prop:
+ forall (f : function) (sp : val) (sig : signature)
+ (mos : mreg + ident) (c : list Mach.instruction) (ms : Mach.regset)
+ (m : mem) (f' : function) (ms' : Mach.regset) (m' : mem),
+ find_function ge mos ms = Some f' ->
+ exec_function ge f' sp ms m ms' m' ->
+ exec_function_prop f' sp ms m ms' m' ->
+ exec_instr_prop f sp (Mcall sig mos :: c) ms m c ms' m'.
+Proof.
+ intros; red; intros.
+ generalize (wt_function_instrs _ WTF _ (INCL _ (in_eq _ _))).
+ intro WTI. inversion WTI.
+ inversion AT.
+ assert (WTF': wt_function f').
+ destruct mos; simpl in H.
+ apply (Genv.find_funct_prop wt_function wt_prog H).
+ destruct (Genv.find_symbol ge i); try discriminate.
+ apply (Genv.find_funct_ptr_prop wt_function wt_prog H).
+ assert (NOOV: code_size (transl_function f) <= Int.max_unsigned).
+ eapply functions_translated_no_overflow; eauto.
+ destruct mos; simpl in H; simpl transl_code in H7.
+ (* Indirect call *)
+ generalize (code_tail_next_int _ _ _ _ NOOV H7). intro CT1.
+ generalize (code_tail_next_int _ _ _ _ NOOV CT1). intro CT2.
+ set (rs2 := nextinstr (rs1#CTR <- (ms m0))).
+ set (rs3 := rs2 #LR <- (Val.add rs2#PC Vone) #PC <- (ms m0)).
+ assert (TFIND: Genv.find_funct ge (rs3#PC) = Some f').
+ unfold rs3. rewrite Pregmap.gss. auto.
+ assert (AG3: agree ms sp rs3).
+ unfold rs3, rs2; auto 8 with ppcgen.
+ assert (WTRA: Val.has_type rs3#LR Tint).
+ change rs3#LR with (Val.add (Val.add rs1#PC Vone) Vone).
+ rewrite <- H5. exact I.
+ generalize (H1 rs3 WTF' TFIND AG3 WTRA).
+ intros [rs4 [AG4 [EXF' PC4]]].
+ exists rs4. split. auto. split.
+ apply exec_trans with rs2 m. apply exec_one. econstructor.
+ eauto. apply functions_translated. eexact H6.
+ rewrite find_instr_tail. rewrite H7. reflexivity.
+ simpl. rewrite <- (ireg_val ms sp rs1); auto.
+ apply exec_trans with rs3 m. apply exec_one. econstructor.
+ unfold rs2, nextinstr. rewrite Pregmap.gss.
+ rewrite Pregmap.gso. rewrite <- H5. simpl. reflexivity.
+ discriminate. apply functions_translated. eexact H6.
+ rewrite find_instr_tail. rewrite CT1. reflexivity.
+ simpl. replace (rs2 CTR) with (ms m0). reflexivity.
+ unfold rs2. rewrite nextinstr_inv. rewrite Pregmap.gss.
+ auto. discriminate.
+ exact EXF'.
+ rewrite PC4. unfold rs3. rewrite Pregmap.gso. rewrite Pregmap.gss.
+ unfold rs2, nextinstr. rewrite Pregmap.gss. rewrite Pregmap.gso.
+ rewrite <- H5. simpl. constructor. auto. auto.
+ discriminate. discriminate.
+ (* Direct call *)
+ caseEq (Genv.find_symbol ge i). intros fblock FINDS.
+ rewrite FINDS in H.
+ generalize (code_tail_next_int _ _ _ _ NOOV H7). intro CT1.
+ set (rs2 := rs1 #LR <- (Val.add rs1#PC Vone) #PC <- (symbol_offset tge i Int.zero)).
+ assert (TFIND: Genv.find_funct ge (rs2#PC) = Some f').
+ unfold rs2. rewrite Pregmap.gss.
+ unfold symbol_offset. rewrite symbols_preserved.
+ rewrite FINDS.
+ rewrite Genv.find_funct_find_funct_ptr. assumption.
+ assert (AG2: agree ms sp rs2).
+ unfold rs2; auto 8 with ppcgen.
+ assert (WTRA: Val.has_type rs2#LR Tint).
+ change rs2#LR with (Val.add rs1#PC Vone).
+ rewrite <- H5. exact I.
+ generalize (H1 rs2 WTF' TFIND AG2 WTRA).
+ intros [rs3 [AG3 [EXF' PC3]]].
+ exists rs3. split. auto. split.
+ apply exec_trans with rs2 m. apply exec_one. econstructor.
+ eauto. apply functions_translated. eexact H6.
+ rewrite find_instr_tail. rewrite H7. reflexivity.
+ simpl. reflexivity.
+ exact EXF'.
+ rewrite PC3. unfold rs2. rewrite Pregmap.gso. rewrite Pregmap.gss.
+ rewrite <- H5. simpl. constructor. auto. auto.
+ discriminate.
+ intro FINDS. rewrite FINDS in H. discriminate.
+Qed.
+
+Lemma exec_Mgoto_prop:
+ forall (f : function) (sp : val) (lbl : Mach.label)
+ (c : list Mach.instruction) (ms : Mach.regset) (m : mem)
+ (c' : Mach.code),
+ Mach.find_label lbl (fn_code f) = Some c' ->
+ exec_instr_prop f sp (Mgoto lbl :: c) ms m c' ms m.
+Proof.
+ intros; red; intros.
+ inversion AT.
+ generalize (find_label_goto_label f lbl rs1 m _ _ _ H1 (sym_equal H0) H).
+ intros [rs2 [GOTO [AT2 INV]]].
+ exists rs2. split. apply agree_exten_2 with rs1; auto.
+ split. inversion AT. apply exec_one. econstructor; eauto.
+ apply functions_translated; eauto.
+ rewrite find_instr_tail. rewrite H7. simpl. reflexivity.
+ simpl. rewrite GOTO. auto. auto.
+Qed.
+
+Lemma exec_Mcond_true_prop:
+ forall (f : function) (sp : val) (cond : condition)
+ (args : list mreg) (lbl : Mach.label) (c : list Mach.instruction)
+ (ms: Mach.regset) (m : mem) (c' : Mach.code),
+ eval_condition cond ms ## args = Some true ->
+ Mach.find_label lbl (fn_code f) = Some c' ->
+ exec_instr_prop f sp (Mcond cond args lbl :: c) ms m c' ms m.
+Proof.
+ intros; red; intros.
+ generalize (wt_function_instrs _ WTF _ (INCL _ (in_eq _ _))).
+ intro WTI. inversion WTI.
+ pose (k1 :=
+ if snd (crbit_for_cond cond)
+ then Pbt (fst (crbit_for_cond cond)) lbl :: transl_code c
+ else Pbf (fst (crbit_for_cond cond)) lbl :: transl_code c).
+ generalize (transl_cond_correct tge (transl_function f)
+ cond args k1 ms sp rs1 m true H2 AG H).
+ simpl. intros [rs2 [EX [RES AG2]]].
+ inversion AT.
+ generalize (functions_translated _ _ H6); intro FN.
+ generalize (functions_translated_no_overflow _ _ H6); intro NOOV.
+ simpl in H7.
+ generalize (exec_straight_steps_2 _ _ _ _ _ _ _ EX
+ NOOV _ _ (sym_equal H5) FN H7).
+ intros [ofs' [PC2 CT2]].
+ generalize (find_label_goto_label f lbl rs2 m _ _ _ H6 PC2 H0).
+ intros [rs3 [GOTO [AT3 INV3]]].
+ exists rs3. split.
+ apply agree_exten_2 with rs2; auto.
+ split. eapply exec_trans.
+ eapply exec_straight_steps_1; eauto.
+ caseEq (snd (crbit_for_cond cond)); intro ISSET; rewrite ISSET in RES.
+ apply exec_one. econstructor; eauto.
+ rewrite find_instr_tail. rewrite CT2. unfold k1. rewrite ISSET. reflexivity.
+ simpl. rewrite RES. simpl. auto.
+ apply exec_one. econstructor; eauto.
+ rewrite find_instr_tail. rewrite CT2. unfold k1. rewrite ISSET. reflexivity.
+ simpl. rewrite RES. simpl. auto.
+ auto.
+Qed.
+
+Lemma exec_Mcond_false_prop:
+ forall (f : function) (sp : val) (cond : condition)
+ (args : list mreg) (lbl : Mach.label) (c : list Mach.instruction)
+ (ms : Mach.regset) (m : mem),
+ eval_condition cond ms ## args = Some false ->
+ exec_instr_prop f sp (Mcond cond args lbl :: c) ms m c ms m.
+Proof.
+ intros; red; intros.
+ generalize (wt_function_instrs _ WTF _ (INCL _ (in_eq _ _))).
+ intro WTI. inversion WTI.
+ pose (k1 :=
+ if snd (crbit_for_cond cond)
+ then Pbt (fst (crbit_for_cond cond)) lbl :: transl_code c
+ else Pbf (fst (crbit_for_cond cond)) lbl :: transl_code c).
+ generalize (transl_cond_correct tge (transl_function f)
+ cond args k1 ms sp rs1 m false H1 AG H).
+ simpl. intros [rs2 [EX [RES AG2]]].
+ exists (nextinstr rs2).
+ split. auto with ppcgen.
+ eapply exec_straight_steps; eauto.
+ eapply exec_straight_trans. eexact EX.
+ caseEq (snd (crbit_for_cond cond)); intro ISSET; rewrite ISSET in RES.
+ unfold k1; rewrite ISSET; apply exec_straight_one.
+ simpl. rewrite RES. reflexivity.
+ reflexivity.
+ unfold k1; rewrite ISSET; apply exec_straight_one.
+ simpl. rewrite RES. reflexivity.
+ reflexivity.
+Qed.
+
+Lemma exec_instr_incl:
+ forall f sp c rs m c' rs' m',
+ Mach.exec_instr ge f sp c rs m c' rs' m' ->
+ incl c f.(fn_code) -> incl c' f.(fn_code).
+Proof.
+ induction 1; intros; eauto with coqlib.
+ eapply incl_find_label; eauto.
+ eapply incl_find_label; eauto.
+Qed.
+
+Lemma exec_instrs_incl:
+ forall f sp c rs m c' rs' m',
+ Mach.exec_instrs ge f sp c rs m c' rs' m' ->
+ incl c f.(fn_code) -> incl c' f.(fn_code).
+Proof.
+ induction 1; intros.
+ auto.
+ eapply exec_instr_incl; eauto.
+ eauto.
+Qed.
+
+Lemma exec_refl_prop:
+ forall (f : function) (sp : val) (c : Mach.code) (ms : Mach.regset)
+ (m : mem), exec_instr_prop f sp c ms m c ms m.
+Proof.
+ intros; red; intros.
+ exists rs1. split. auto. split. apply exec_refl. auto.
+Qed.
+
+Lemma exec_one_prop:
+ forall (f : function) (sp : val) (c : Mach.code) (ms : Mach.regset)
+ (m : mem) (c' : Mach.code) (ms' : Mach.regset) (m' : mem),
+ Mach.exec_instr ge f sp c ms m c' ms' m' ->
+ exec_instr_prop f sp c ms m c' ms' m' ->
+ exec_instr_prop f sp c ms m c' ms' m'.
+Proof.
+ auto.
+Qed.
+
+Lemma exec_trans_prop:
+ forall (f : function) (sp : val) (c1 : Mach.code) (ms1 : Mach.regset)
+ (m1 : mem) (c2 : Mach.code) (ms2 : Mach.regset) (m2 : mem)
+ (c3 : Mach.code) (ms3 : Mach.regset) (m3 : mem),
+ exec_instrs ge f sp c1 ms1 m1 c2 ms2 m2 ->
+ exec_instr_prop f sp c1 ms1 m1 c2 ms2 m2 ->
+ exec_instrs ge f sp c2 ms2 m2 c3 ms3 m3 ->
+ exec_instr_prop f sp c2 ms2 m2 c3 ms3 m3 ->
+ exec_instr_prop f sp c1 ms1 m1 c3 ms3 m3.
+Proof.
+ intros; red; intros.
+ generalize (H0 rs1 WTF INCL AT AG).
+ intros [rs2 [AG2 [EX2 AT2]]].
+ generalize (exec_instrs_incl _ _ _ _ _ _ _ _ H INCL). intro INCL2.
+ generalize (H2 rs2 WTF INCL2 AT2 AG2).
+ intros [rs3 [AG3 [EX3 AT3]]].
+ exists rs3. split. auto. split. eapply exec_trans; eauto. auto.
+Qed.
+
+Lemma exec_function_body_prop_:
+ forall (f : function) (parent ra : val) (ms : Mach.regset) (m : mem)
+ (ms' : Mach.regset) (m1 m2 m3 m4 : mem) (stk : block)
+ (c : list Mach.instruction),
+ alloc m (- fn_framesize f)
+ (align_16_top (- fn_framesize f) (fn_stacksize f)) = (m1, stk) ->
+ let sp := Vptr stk (Int.repr (- fn_framesize f)) in
+ store_stack m1 sp Tint (Int.repr 0) parent = Some m2 ->
+ store_stack m2 sp Tint (Int.repr 4) ra = Some m3 ->
+ exec_instrs ge f sp (fn_code f) ms m3 (Mreturn :: c) ms' m4 ->
+ exec_instr_prop f sp (fn_code f) ms m3 (Mreturn :: c) ms' m4 ->
+ load_stack m4 sp Tint (Int.repr 0) = Some parent ->
+ load_stack m4 sp Tint (Int.repr 4) = Some ra ->
+ exec_function_body_prop f parent ra ms m ms' (free m4 stk).
+Proof.
+ intros; red; intros.
+ generalize (Genv.find_funct_inv AT). intros [b EQPC].
+ generalize AT. rewrite EQPC. rewrite Genv.find_funct_find_funct_ptr. intro FN.
+ generalize (functions_translated_no_overflow _ _ FN); intro NOOV.
+ set (rs2 := nextinstr (rs1#GPR1 <- sp #GPR2 <- Vundef)).
+ set (rs3 := nextinstr (rs2#GPR2 <- ra)).
+ set (rs4 := nextinstr rs3).
+ assert (exec_straight tge (transl_function f)
+ (transl_function f) rs1 m
+ (transl_code (fn_code f)) rs4 m3).
+ unfold transl_function at 2.
+ apply exec_straight_three with rs2 m2 rs3 m2.
+ unfold exec_instr. rewrite H. fold sp.
+ generalize H0. unfold store_stack. change (Vint (Int.repr 0)) with Vzero.
+ replace (Val.add sp Vzero) with sp. simpl chunk_of_type.
+ rewrite (sp_val _ _ _ AG). intro. rewrite H6. clear H6.
+ reflexivity. unfold sp. simpl. rewrite Int.add_zero. reflexivity.
+ simpl. replace (rs2 LR) with ra. reflexivity.
+ simpl. unfold store1. rewrite gpr_or_zero_not_zero.
+ unfold const_low. replace (rs3 GPR1) with sp. replace (rs3 GPR2) with ra.
+ unfold store_stack in H1. simpl chunk_of_type in H1. rewrite H1. reflexivity.
+ reflexivity. reflexivity. discriminate.
+ reflexivity. reflexivity. reflexivity.
+ assert (AT2: transl_code_at_pc rs4#PC f f.(fn_code)).
+ change (rs4 PC) with (Val.add (Val.add (Val.add (rs1 PC) Vone) Vone) Vone).
+ rewrite EQPC. simpl. constructor. auto.
+ eapply code_tail_next_int; auto.
+ eapply code_tail_next_int; auto.
+ eapply code_tail_next_int; auto.
+ unfold Int.zero. rewrite Int.unsigned_repr.
+ rewrite code_tail_zero. unfold transl_function. reflexivity.
+ compute. intuition congruence.
+ assert (AG2: agree ms sp rs2).
+ split. reflexivity.
+ intros. unfold rs2. rewrite nextinstr_inv.
+ repeat (rewrite Pregmap.gso). elim AG; auto.
+ auto with ppcgen. auto with ppcgen. auto with ppcgen.
+ assert (AG4: agree ms sp rs4).
+ unfold rs4, rs3; auto with ppcgen.
+ generalize (H3 rs4 WTF (incl_refl _) AT2 AG4).
+ intros [rs5 [AG5 [EXB AT5]]].
+ set (rs6 := nextinstr (rs5#GPR2 <- ra)).
+ set (rs7 := nextinstr (rs6#LR <- ra)).
+ set (rs8 := nextinstr (rs7#GPR1 <- parent)).
+ set (rs9 := rs8#PC <- ra).
+ assert (exec_straight tge (transl_function f)
+ (transl_code (Mreturn :: c)) rs5 m4
+ (Pblr :: transl_code c) rs8 (free m4 stk)).
+ simpl. apply exec_straight_three with rs6 m4 rs7 m4.
+ simpl. unfold load1. rewrite gpr_or_zero_not_zero. unfold const_low.
+ unfold load_stack in H5. simpl in H5.
+ rewrite <- (sp_val _ _ _ AG5). simpl. rewrite H5.
+ reflexivity. discriminate.
+ unfold rs7. change ra with rs6#GPR2. reflexivity.
+ unfold exec_instr. generalize H4. unfold load_stack.
+ replace (Val.add sp (Vint (Int.repr 0))) with sp.
+ simpl chunk_of_type. intro. change rs7#GPR1 with rs5#GPR1.
+ rewrite <- (sp_val _ _ _ AG5). rewrite H7.
+ unfold sp. reflexivity.
+ unfold sp. simpl. rewrite Int.add_zero. reflexivity.
+ reflexivity. reflexivity. reflexivity.
+ exists rs9. split.
+ (* agreement *)
+ assert (AG7: agree ms' sp rs7).
+ unfold rs7, rs6; auto 10 with ppcgen.
+ assert (AG8: agree ms' parent rs8).
+ split. reflexivity. intros. unfold rs8.
+ rewrite nextinstr_inv. rewrite Pregmap.gso.
+ elim AG7; auto. auto with ppcgen. auto with ppcgen.
+ unfold rs9; auto with ppcgen.
+ (* execution *)
+ split. apply exec_trans with rs4 m3.
+ eapply exec_straight_steps_1; eauto.
+ apply functions_translated; auto.
+ apply exec_trans with rs5 m4. assumption.
+ inversion AT5.
+ apply exec_trans with rs8 (free m4 stk).
+ eapply exec_straight_steps_1; eauto.
+ apply functions_translated; auto.
+ apply exec_one. econstructor.
+ change rs8#PC with (Val.add (Val.add (Val.add rs5#PC Vone) Vone) Vone).
+ rewrite <- H8. simpl. reflexivity.
+ apply functions_translated; eauto.
+ assert (code_tail (Int.unsigned (Int.add (Int.add (Int.add ofs Int.one) Int.one) Int.one))
+ (transl_function f) = Pblr :: transl_code c).
+ eapply code_tail_next_int; auto.
+ eapply code_tail_next_int; auto.
+ eapply code_tail_next_int; auto.
+ rewrite H10. simpl. reflexivity.
+ rewrite find_instr_tail. rewrite H13.
+ reflexivity.
+ reflexivity.
+ (* LR preservation *)
+ change rs9#PC with ra. auto.
+Qed.
+
+Lemma exec_function_prop_:
+ forall (f : function) (parent : val) (ms : Mach.regset) (m : mem)
+ (ms' : Mach.regset) (m' : mem),
+ (forall ra : val,
+ Val.has_type ra Tint ->
+ exec_function_body ge f parent ra ms m ms' m') ->
+ (forall ra : val, Val.has_type ra Tint ->
+ exec_function_body_prop f parent ra ms m ms' m') ->
+ exec_function_prop f parent ms m ms' m'.
+Proof.
+ intros; red; intros.
+ apply (H0 rs1#LR WTRA rs1 WTRA (refl_equal _) WTF AT AG).
+Qed.
+
+(** We then conclude by induction on the structure of the Mach
+execution derivation. *)
+
+Theorem transf_function_correct:
+ forall f parent ms m ms' m',
+ Mach.exec_function ge f parent ms m ms' m' ->
+ exec_function_prop f parent ms m ms' m'.
+Proof
+ (Mach.exec_function_ind4 ge
+ exec_instr_prop exec_instr_prop
+ exec_function_body_prop exec_function_prop
+
+ exec_Mlabel_prop
+ exec_Mgetstack_prop
+ exec_Msetstack_prop
+ exec_Mgetparam_prop
+ exec_Mop_prop
+ exec_Mload_prop
+ exec_Mstore_prop
+ exec_Mcall_prop
+ exec_Mgoto_prop
+ exec_Mcond_true_prop
+ exec_Mcond_false_prop
+ exec_refl_prop
+ exec_one_prop
+ exec_trans_prop
+ exec_function_body_prop_
+ exec_function_prop_).
+
+End PRESERVATION.
+
+Theorem transf_program_correct:
+ forall (p: Mach.program) (tp: PPC.program) (r: val),
+ wt_program p ->
+ transf_program p = Some tp ->
+ Mach.exec_program p r ->
+ PPC.exec_program tp r.
+Proof.
+ intros.
+ destruct H1 as [fptr [f [ms [m [FINDS [FINDF [EX RES]]]]]]].
+ assert (WTF: wt_function f).
+ apply (Genv.find_funct_ptr_prop wt_function H FINDF).
+ set (ge := Genv.globalenv p) in *.
+ set (ms0 := Regmap.init Vundef) in *.
+ set (tge := Genv.globalenv tp).
+ set (rs0 :=
+ (Pregmap.init Vundef) # PC <- (symbol_offset tge tp.(prog_main) Int.zero)
+ # LR <- Vzero
+ # GPR1 <- (Vptr Mem.nullptr Int.zero)).
+ assert (AT: Genv.find_funct ge (rs0 PC) = Some f).
+ change (rs0 PC) with (symbol_offset tge tp.(prog_main) Int.zero).
+ rewrite (transform_partial_program_main _ _ H0).
+ unfold symbol_offset. rewrite (symbols_preserved p tp H0).
+ fold ge. rewrite FINDS.
+ rewrite Genv.find_funct_find_funct_ptr. exact FINDF.
+ assert (AG: agree ms0 (Vptr Mem.nullptr Int.zero) rs0).
+ split. reflexivity. intros. unfold rs0.
+ repeat (rewrite Pregmap.gso; auto with ppcgen).
+ assert (WTRA: Val.has_type (rs0 LR) Tint).
+ exact I.
+ generalize (transf_function_correct p tp H0 H
+ _ _ _ _ _ _ EX rs0 WTF AT AG WTRA).
+ intros [rs [AG' [EX' RPC]]].
+ red. exists rs; exists m.
+ split. rewrite (Genv.init_mem_transf_partial _ _ H0). exact EX'.
+ split. rewrite RPC. reflexivity. rewrite <- RES.
+ change (IR GPR3) with (preg_of R3). elim AG'; auto.
+Qed.
diff --git a/backend/PPCgenproof1.v b/backend/PPCgenproof1.v
new file mode 100644
index 0000000..30eb336
--- /dev/null
+++ b/backend/PPCgenproof1.v
@@ -0,0 +1,1566 @@
+(** Correctness proof for PPC generation: auxiliary results. *)
+
+Require Import Coqlib.
+Require Import Maps.
+Require Import AST.
+Require Import Integers.
+Require Import Floats.
+Require Import Values.
+Require Import Mem.
+Require Import Globalenvs.
+Require Import Op.
+Require Import Locations.
+Require Import Mach.
+Require Import Machtyping.
+Require Import PPC.
+Require Import PPCgen.
+
+(** * Properties of low half/high half decomposition *)
+
+Lemma high_half_signed_zero:
+ forall v, Val.add (high_half_signed v) Vzero = high_half_signed v.
+Proof.
+ intros. generalize (high_half_signed_type v).
+ rewrite Val.add_commut.
+ case (high_half_signed v); simpl; intros; try contradiction.
+ auto.
+ rewrite Int.add_commut; rewrite Int.add_zero; auto.
+ rewrite Int.add_zero; auto.
+Qed.
+
+Lemma high_half_unsigned_zero:
+ forall v, Val.add (high_half_unsigned v) Vzero = high_half_unsigned v.
+Proof.
+ intros. generalize (high_half_unsigned_type v).
+ rewrite Val.add_commut.
+ case (high_half_unsigned v); simpl; intros; try contradiction.
+ auto.
+ rewrite Int.add_commut; rewrite Int.add_zero; auto.
+ rewrite Int.add_zero; auto.
+Qed.
+
+Lemma low_high_u:
+ forall n, Int.or (Int.shl (high_u n) (Int.repr 16)) (low_u n) = n.
+Proof.
+ intros. unfold high_u, low_u.
+ rewrite Int.shl_rolm. rewrite Int.shru_rolm.
+ rewrite Int.rolm_rolm.
+ change (Int.modu (Int.add (Int.sub (Int.repr (Z_of_nat wordsize)) (Int.repr 16))
+ (Int.repr 16))
+ (Int.repr (Z_of_nat wordsize)))
+ with (Int.zero).
+ rewrite Int.rolm_zero. rewrite <- Int.and_or_distrib.
+ exact (Int.and_mone n).
+ reflexivity. reflexivity.
+Qed.
+
+Lemma low_high_u_xor:
+ forall n, Int.xor (Int.shl (high_u n) (Int.repr 16)) (low_u n) = n.
+Proof.
+ intros. unfold high_u, low_u.
+ rewrite Int.shl_rolm. rewrite Int.shru_rolm.
+ rewrite Int.rolm_rolm.
+ change (Int.modu (Int.add (Int.sub (Int.repr (Z_of_nat wordsize)) (Int.repr 16))
+ (Int.repr 16))
+ (Int.repr (Z_of_nat wordsize)))
+ with (Int.zero).
+ rewrite Int.rolm_zero. rewrite <- Int.and_xor_distrib.
+ exact (Int.and_mone n).
+ reflexivity. reflexivity.
+Qed.
+
+Lemma low_high_s:
+ forall n, Int.add (Int.shl (high_s n) (Int.repr 16)) (low_s n) = n.
+Proof.
+ intros. rewrite Int.shl_mul_two_p.
+ unfold high_s.
+ rewrite <- (Int.divu_pow2 (Int.sub n (low_s n)) (Int.repr 65536) (Int.repr 16)).
+ change (two_p (Int.unsigned (Int.repr 16))) with 65536.
+
+ assert (forall x y, y > 0 -> (x - x mod y) mod y = 0).
+ intros. apply Zmod_unique with (x / y).
+ generalize (Z_div_mod_eq x y H). intro. rewrite Zmult_comm. omega.
+ omega.
+
+ assert (Int.modu (Int.sub n (low_s n)) (Int.repr 65536) = Int.zero).
+ unfold Int.modu, Int.zero. decEq.
+ change (Int.unsigned (Int.repr 65536)) with 65536.
+ unfold Int.sub.
+ assert (forall a b, Int.eqm a b -> b mod 65536 = 0 -> a mod 65536 = 0).
+ intros a b [k EQ] H1. rewrite EQ.
+ change modulus with (65536 * 65536).
+ rewrite Zmult_assoc. rewrite Zplus_comm. rewrite Z_mod_plus. auto.
+ omega.
+ eapply H0. apply Int.eqm_sym. apply Int.eqm_unsigned_repr.
+ unfold low_s. unfold Int.cast16signed.
+ set (N := Int.unsigned n).
+ case (zlt (N mod 65536) 32768); intro.
+ apply H0 with (N - N mod 65536). auto with ints.
+ apply H. omega.
+ apply H0 with (N - (N mod 65536 - 65536)). auto with ints.
+ replace (N - (N mod 65536 - 65536))
+ with ((N - N mod 65536) + 1 * 65536).
+ rewrite Z_mod_plus. apply H. omega. omega. ring.
+
+ assert (Int.repr 65536 <> Int.zero). compute. congruence.
+ generalize (Int.modu_divu_Euclid (Int.sub n (low_s n)) (Int.repr 65536) H1).
+ rewrite H0. rewrite Int.add_zero. intro. rewrite <- H2.
+ rewrite Int.sub_add_opp. rewrite Int.add_assoc.
+ replace (Int.add (Int.neg (low_s n)) (low_s n)) with Int.zero.
+ apply Int.add_zero. symmetry. rewrite Int.add_commut.
+ rewrite <- Int.sub_add_opp. apply Int.sub_idem.
+
+ reflexivity.
+Qed.
+
+(** * Correspondence between Mach registers and PPC registers *)
+
+Hint Extern 2 (_ <> _) => discriminate: ppcgen.
+
+(** Mapping from Mach registers to PPC registers. *)
+
+Definition preg_of (r: mreg) :=
+ match mreg_type r with
+ | Tint => IR (ireg_of r)
+ | Tfloat => FR (freg_of r)
+ end.
+
+Lemma preg_of_injective:
+ forall r1 r2, preg_of r1 = preg_of r2 -> r1 = r2.
+Proof.
+ destruct r1; destruct r2; simpl; intros; reflexivity || discriminate.
+Qed.
+
+(** Characterization of PPC registers that correspond to Mach registers. *)
+
+Definition is_data_reg (r: preg) : Prop :=
+ match r with
+ | IR GPR2 => False
+ | FR FPR13 => False
+ | PC => False | LR => False | CTR => False
+ | CR0_0 => False | CR0_1 => False | CR0_2 => False | CR0_3 => False
+ | CARRY => False
+ | _ => True
+ end.
+
+Lemma ireg_of_is_data_reg:
+ forall (r: mreg), is_data_reg (ireg_of r).
+Proof.
+ destruct r; exact I.
+Qed.
+
+Lemma freg_of_is_data_reg:
+ forall (r: mreg), is_data_reg (ireg_of r).
+Proof.
+ destruct r; exact I.
+Qed.
+
+Lemma preg_of_is_data_reg:
+ forall (r: mreg), is_data_reg (preg_of r).
+Proof.
+ destruct r; exact I.
+Qed.
+
+Lemma ireg_of_not_GPR1:
+ forall r, ireg_of r <> GPR1.
+Proof.
+ intro. case r; discriminate.
+Qed.
+Lemma ireg_of_not_GPR2:
+ forall r, ireg_of r <> GPR2.
+Proof.
+ intro. case r; discriminate.
+Qed.
+Lemma freg_of_not_FPR13:
+ forall r, freg_of r <> FPR13.
+Proof.
+ intro. case r; discriminate.
+Qed.
+Hint Resolve ireg_of_not_GPR1 ireg_of_not_GPR2 freg_of_not_FPR13: ppcgen.
+
+Lemma preg_of_not:
+ forall r1 r2, ~(is_data_reg r2) -> preg_of r1 <> r2.
+Proof.
+ intros; red; intro. subst r2. elim H. apply preg_of_is_data_reg.
+Qed.
+Hint Resolve preg_of_not: ppcgen.
+
+Lemma preg_of_not_GPR1:
+ forall r, preg_of r <> GPR1.
+Proof.
+ intro. case r; discriminate.
+Qed.
+Hint Resolve preg_of_not_GPR1: ppcgen.
+
+(** Agreement between Mach register sets and PPC register sets. *)
+
+Definition agree (ms: Mach.regset) (sp: val) (rs: PPC.regset) :=
+ rs#GPR1 = sp /\ forall r: mreg, ms r = rs#(preg_of r).
+
+Lemma preg_val:
+ forall ms sp rs r,
+ agree ms sp rs -> ms r = rs#(preg_of r).
+Proof.
+ intros. elim H. auto.
+Qed.
+
+Lemma ireg_val:
+ forall ms sp rs r,
+ agree ms sp rs ->
+ mreg_type r = Tint ->
+ ms r = rs#(ireg_of r).
+Proof.
+ intros. elim H; intros.
+ generalize (H2 r). unfold preg_of. rewrite H0. auto.
+Qed.
+
+Lemma freg_val:
+ forall ms sp rs r,
+ agree ms sp rs ->
+ mreg_type r = Tfloat ->
+ ms r = rs#(freg_of r).
+Proof.
+ intros. elim H; intros.
+ generalize (H2 r). unfold preg_of. rewrite H0. auto.
+Qed.
+
+Lemma sp_val:
+ forall ms sp rs,
+ agree ms sp rs ->
+ sp = rs#GPR1.
+Proof.
+ intros. elim H; auto.
+Qed.
+
+Lemma agree_exten_1:
+ forall ms sp rs rs',
+ agree ms sp rs ->
+ (forall r, is_data_reg r -> rs'#r = rs#r) ->
+ agree ms sp rs'.
+Proof.
+ unfold agree; intros. elim H; intros.
+ split. rewrite H0. auto. exact I.
+ intros. rewrite H0. auto. apply preg_of_is_data_reg.
+Qed.
+
+Lemma agree_exten_2:
+ forall ms sp rs rs',
+ agree ms sp rs ->
+ (forall r,
+ r <> IR GPR2 -> r <> FR FPR13 ->
+ r <> PC -> r <> LR -> r <> CTR ->
+ r <> CR0_0 -> r <> CR0_1 -> r <> CR0_2 -> r <> CR0_3 ->
+ r <> CARRY ->
+ rs'#r = rs#r) ->
+ agree ms sp rs'.
+Proof.
+ intros. apply agree_exten_1 with rs. auto.
+ intros. apply H0; (red; intro; subst r; elim H1).
+Qed.
+
+(** Preservation of register agreement under various assignments. *)
+
+Lemma agree_set_mreg:
+ forall ms sp rs r v,
+ agree ms sp rs ->
+ agree (Regmap.set r v ms) sp (rs#(preg_of r) <- v).
+Proof.
+ unfold agree; intros. elim H; intros; clear H.
+ split. rewrite Pregmap.gso. auto. apply sym_not_eq. apply preg_of_not_GPR1.
+ intros. unfold Regmap.set. case (RegEq.eq r0 r); intro.
+ subst r0. rewrite Pregmap.gss. auto.
+ rewrite Pregmap.gso. auto. red; intro.
+ elim n. apply preg_of_injective; auto.
+Qed.
+Hint Resolve agree_set_mreg: ppcgen.
+
+Lemma agree_set_mireg:
+ forall ms sp rs r v,
+ agree ms sp (rs#(preg_of r) <- v) ->
+ mreg_type r = Tint ->
+ agree ms sp (rs#(ireg_of r) <- v).
+Proof.
+ intros. unfold preg_of in H. rewrite H0 in H. auto.
+Qed.
+Hint Resolve agree_set_mireg: ppcgen.
+
+Lemma agree_set_mfreg:
+ forall ms sp rs r v,
+ agree ms sp (rs#(preg_of r) <- v) ->
+ mreg_type r = Tfloat ->
+ agree ms sp (rs#(freg_of r) <- v).
+Proof.
+ intros. unfold preg_of in H. rewrite H0 in H. auto.
+Qed.
+Hint Resolve agree_set_mfreg: ppcgen.
+
+Lemma agree_set_other:
+ forall ms sp rs r v,
+ agree ms sp rs ->
+ ~(is_data_reg r) ->
+ agree ms sp (rs#r <- v).
+Proof.
+ intros. apply agree_exten_1 with rs.
+ auto. intros. apply Pregmap.gso. red; intro; subst r0; contradiction.
+Qed.
+Hint Resolve agree_set_other: ppcgen.
+
+Lemma agree_nextinstr:
+ forall ms sp rs,
+ agree ms sp rs -> agree ms sp (nextinstr rs).
+Proof.
+ intros. unfold nextinstr. apply agree_set_other. auto. auto.
+Qed.
+Hint Resolve agree_nextinstr: ppcgen.
+
+Lemma agree_set_mireg_twice:
+ forall ms sp rs r v v',
+ agree ms sp rs ->
+ mreg_type r = Tint ->
+ agree (Regmap.set r v ms) sp (rs #(ireg_of r) <- v' #(ireg_of r) <- v).
+Proof.
+ intros. replace (IR (ireg_of r)) with (preg_of r). elim H; intros.
+ split. repeat (rewrite Pregmap.gso; auto with ppcgen).
+ intros. case (mreg_eq r r0); intro.
+ subst r0. rewrite Regmap.gss. rewrite Pregmap.gss. auto.
+ assert (preg_of r <> preg_of r0).
+ red; intro. elim n. apply preg_of_injective. auto.
+ rewrite Regmap.gso; auto.
+ repeat (rewrite Pregmap.gso; auto).
+ unfold preg_of. rewrite H0. auto.
+Qed.
+Hint Resolve agree_set_mireg_twice: ppcgen.
+
+Lemma agree_set_twice_mireg:
+ forall ms sp rs r v v',
+ agree (Regmap.set r v' ms) sp rs ->
+ mreg_type r = Tint ->
+ agree (Regmap.set r v ms) sp (rs#(ireg_of r) <- v).
+Proof.
+ intros. elim H; intros.
+ split. rewrite Pregmap.gso. auto.
+ generalize (ireg_of_not_GPR1 r); congruence.
+ intros. generalize (H2 r0).
+ case (mreg_eq r0 r); intro.
+ subst r0. repeat rewrite Regmap.gss. unfold preg_of; rewrite H0.
+ rewrite Pregmap.gss. auto.
+ repeat rewrite Regmap.gso; auto.
+ rewrite Pregmap.gso. auto.
+ replace (IR (ireg_of r)) with (preg_of r).
+ red; intros. elim n. apply preg_of_injective; auto.
+ unfold preg_of. rewrite H0. auto.
+Qed.
+Hint Resolve agree_set_twice_mireg: ppcgen.
+
+Lemma agree_set_commut:
+ forall ms sp rs r1 r2 v1 v2,
+ r1 <> r2 ->
+ agree ms sp ((rs#r2 <- v2)#r1 <- v1) ->
+ agree ms sp ((rs#r1 <- v1)#r2 <- v2).
+Proof.
+ intros. apply agree_exten_1 with ((rs#r2 <- v2)#r1 <- v1). auto.
+ intros.
+ case (preg_eq r r1); intro.
+ subst r1. rewrite Pregmap.gss. rewrite Pregmap.gso. rewrite Pregmap.gss.
+ auto. auto.
+ case (preg_eq r r2); intro.
+ subst r2. rewrite Pregmap.gss. rewrite Pregmap.gso. rewrite Pregmap.gss.
+ auto. auto.
+ repeat (rewrite Pregmap.gso; auto).
+Qed.
+Hint Resolve agree_set_commut: ppcgen.
+
+Lemma agree_nextinstr_commut:
+ forall ms sp rs r v,
+ agree ms sp (rs#r <- v) ->
+ r <> PC ->
+ agree ms sp ((nextinstr rs)#r <- v).
+Proof.
+ intros. unfold nextinstr. apply agree_set_commut. auto.
+ apply agree_set_other. auto. auto.
+Qed.
+Hint Resolve agree_nextinstr_commut: ppcgen.
+
+Lemma agree_set_mireg_exten:
+ forall ms sp rs r v (rs': regset),
+ agree ms sp rs ->
+ mreg_type r = Tint ->
+ rs'#(ireg_of r) = v ->
+ (forall r',
+ r' <> IR GPR2 -> r' <> FR FPR13 ->
+ r' <> PC -> r' <> LR -> r' <> CTR ->
+ r' <> CR0_0 -> r' <> CR0_1 -> r' <> CR0_2 -> r' <> CR0_3 ->
+ r' <> CARRY ->
+ r' <> IR (ireg_of r) -> rs'#r' = rs#r') ->
+ agree (Regmap.set r v ms) sp rs'.
+Proof.
+ intros. apply agree_exten_2 with (rs#(ireg_of r) <- v).
+ auto with ppcgen.
+ intros. unfold Pregmap.set. case (PregEq.eq r0 (ireg_of r)); intro.
+ subst r0. auto. apply H2; auto.
+Qed.
+
+(** Useful properties of the PC and GPR0 registers. *)
+
+Lemma nextinstr_inv:
+ forall r rs, r <> PC -> (nextinstr rs)#r = rs#r.
+Proof.
+ intros. unfold nextinstr. apply Pregmap.gso. auto.
+Qed.
+Hint Resolve nextinstr_inv: ppcgen.
+
+Lemma nextinstr_set_preg:
+ forall rs m v,
+ (nextinstr (rs#(preg_of m) <- v))#PC = Val.add rs#PC Vone.
+Proof.
+ intros. unfold nextinstr. rewrite Pregmap.gss.
+ rewrite Pregmap.gso. auto. apply sym_not_eq. auto with ppcgen.
+Qed.
+Hint Resolve nextinstr_set_preg: ppcgen.
+
+Lemma gpr_or_zero_not_zero:
+ forall rs r, r <> GPR0 -> gpr_or_zero rs r = rs#r.
+Proof.
+ intros. unfold gpr_or_zero. case (ireg_eq r GPR0); tauto.
+Qed.
+Lemma gpr_or_zero_zero:
+ forall rs, gpr_or_zero rs GPR0 = Vzero.
+Proof.
+ intros. reflexivity.
+Qed.
+Hint Resolve gpr_or_zero_not_zero gpr_or_zero_zero: ppcgen.
+
+(** * Execution of straight-line code *)
+
+Section STRAIGHTLINE.
+
+Variable ge: genv.
+Variable fn: code.
+
+(** Straight-line code is composed of PPC instructions that execute
+ in sequence (no branches, no function calls and returns).
+ The following inductive predicate relates the machine states
+ before and after executing a straight-line sequence of instructions.
+ Instructions are taken from the first list instead of being fetched
+ from memory. *)
+
+Inductive exec_straight: code -> regset -> mem ->
+ code -> regset -> mem -> Prop :=
+ | exec_straight_refl:
+ forall c rs m,
+ exec_straight c rs m c rs m
+ | exec_straight_step:
+ forall i c rs1 m1 rs2 m2 c' rs3 m3,
+ exec_instr ge fn i rs1 m1 = OK rs2 m2 ->
+ rs2#PC = Val.add rs1#PC Vone ->
+ exec_straight c rs2 m2 c' rs3 m3 ->
+ exec_straight (i :: c) rs1 m1 c' rs3 m3.
+
+Lemma exec_straight_trans:
+ forall c1 rs1 m1 c2 rs2 m2 c3 rs3 m3,
+ exec_straight c1 rs1 m1 c2 rs2 m2 ->
+ exec_straight c2 rs2 m2 c3 rs3 m3 ->
+ exec_straight c1 rs1 m1 c3 rs3 m3.
+Proof.
+ induction 1. auto.
+ intro. apply exec_straight_step with rs2 m2; auto.
+Qed.
+
+Lemma exec_straight_one:
+ forall i1 c rs1 m1 rs2 m2,
+ exec_instr ge fn i1 rs1 m1 = OK rs2 m2 ->
+ rs2#PC = Val.add rs1#PC Vone ->
+ exec_straight (i1 :: c) rs1 m1 c rs2 m2.
+Proof.
+ intros. apply exec_straight_step with rs2 m2. auto. auto.
+ apply exec_straight_refl.
+Qed.
+
+Lemma exec_straight_two:
+ forall i1 i2 c rs1 m1 rs2 m2 rs3 m3,
+ exec_instr ge fn i1 rs1 m1 = OK rs2 m2 ->
+ exec_instr ge fn i2 rs2 m2 = OK rs3 m3 ->
+ rs2#PC = Val.add rs1#PC Vone ->
+ rs3#PC = Val.add rs2#PC Vone ->
+ exec_straight (i1 :: i2 :: c) rs1 m1 c rs3 m3.
+Proof.
+ intros. apply exec_straight_step with rs2 m2; auto.
+ apply exec_straight_one; auto.
+Qed.
+
+Lemma exec_straight_three:
+ forall i1 i2 i3 c rs1 m1 rs2 m2 rs3 m3 rs4 m4,
+ exec_instr ge fn i1 rs1 m1 = OK rs2 m2 ->
+ exec_instr ge fn i2 rs2 m2 = OK rs3 m3 ->
+ exec_instr ge fn i3 rs3 m3 = OK rs4 m4 ->
+ rs2#PC = Val.add rs1#PC Vone ->
+ rs3#PC = Val.add rs2#PC Vone ->
+ rs4#PC = Val.add rs3#PC Vone ->
+ exec_straight (i1 :: i2 :: i3 :: c) rs1 m1 c rs4 m4.
+Proof.
+ intros. apply exec_straight_step with rs2 m2; auto.
+ eapply exec_straight_two; eauto.
+Qed.
+
+(** * Correctness of PowerPC constructor functions *)
+
+(** Properties of comparisons. *)
+
+Lemma compare_float_spec:
+ forall rs v1 v2,
+ let rs1 := nextinstr (compare_float rs v1 v2) in
+ rs1#CR0_0 = Val.cmpf Clt v1 v2
+ /\ rs1#CR0_1 = Val.cmpf Cgt v1 v2
+ /\ rs1#CR0_2 = Val.cmpf Ceq v1 v2
+ /\ forall r', r' <> PC -> r' <> CR0_0 -> r' <> CR0_1 ->
+ r' <> CR0_2 -> r' <> CR0_3 -> rs1#r' = rs#r'.
+Proof.
+ intros. unfold rs1.
+ split. reflexivity.
+ split. reflexivity.
+ split. reflexivity.
+ intros. rewrite nextinstr_inv; auto.
+ unfold compare_float. repeat (rewrite Pregmap.gso; auto).
+Qed.
+
+Lemma compare_sint_spec:
+ forall rs v1 v2,
+ let rs1 := nextinstr (compare_sint rs v1 v2) in
+ rs1#CR0_0 = Val.cmp Clt v1 v2
+ /\ rs1#CR0_1 = Val.cmp Cgt v1 v2
+ /\ rs1#CR0_2 = Val.cmp Ceq v1 v2
+ /\ forall r', r' <> PC -> r' <> CR0_0 -> r' <> CR0_1 ->
+ r' <> CR0_2 -> r' <> CR0_3 -> rs1#r' = rs#r'.
+Proof.
+ intros. unfold rs1.
+ split. reflexivity.
+ split. reflexivity.
+ split. reflexivity.
+ intros. rewrite nextinstr_inv; auto.
+ unfold compare_sint. repeat (rewrite Pregmap.gso; auto).
+Qed.
+
+Lemma compare_uint_spec:
+ forall rs v1 v2,
+ let rs1 := nextinstr (compare_uint rs v1 v2) in
+ rs1#CR0_0 = Val.cmpu Clt v1 v2
+ /\ rs1#CR0_1 = Val.cmpu Cgt v1 v2
+ /\ rs1#CR0_2 = Val.cmpu Ceq v1 v2
+ /\ forall r', r' <> PC -> r' <> CR0_0 -> r' <> CR0_1 ->
+ r' <> CR0_2 -> r' <> CR0_3 -> rs1#r' = rs#r'.
+Proof.
+ intros. unfold rs1.
+ split. reflexivity.
+ split. reflexivity.
+ split. reflexivity.
+ intros. rewrite nextinstr_inv; auto.
+ unfold compare_uint. repeat (rewrite Pregmap.gso; auto).
+Qed.
+
+(** Loading a constant. *)
+
+Lemma loadimm_correct:
+ forall r n k rs m,
+ exists rs',
+ exec_straight (loadimm r n k) rs m k rs' m
+ /\ rs'#r = Vint n
+ /\ forall r': preg, r' <> r -> r' <> PC -> rs'#r' = rs#r'.
+Proof.
+ intros. unfold loadimm.
+ case (Int.eq (high_s n) Int.zero).
+ (* addi *)
+ exists (nextinstr (rs#r <- (Vint n))).
+ split. apply exec_straight_one.
+ simpl. rewrite Int.add_commut. rewrite Int.add_zero. reflexivity.
+ reflexivity.
+ split. rewrite nextinstr_inv; auto with ppcgen.
+ apply Pregmap.gss.
+ intros. rewrite nextinstr_inv; auto. apply Pregmap.gso; auto.
+ (* addis *)
+ generalize (Int.eq_spec (low_s n) Int.zero); case (Int.eq (low_s n) Int.zero); intro.
+ exists (nextinstr (rs#r <- (Vint n))).
+ split. apply exec_straight_one.
+ simpl. rewrite Int.add_commut.
+ rewrite <- H. rewrite low_high_s. reflexivity.
+ reflexivity.
+ split. rewrite nextinstr_inv; auto with ppcgen. apply Pregmap.gss.
+ intros. rewrite nextinstr_inv; auto. apply Pregmap.gso; auto.
+ (* addis + ori *)
+ pose (rs1 := nextinstr (rs#r <- (Vint (Int.shl (high_u n) (Int.repr 16))))).
+ exists (nextinstr (rs1#r <- (Vint n))).
+ split. eapply exec_straight_two.
+ simpl. rewrite Int.add_commut. rewrite Int.add_zero. reflexivity.
+ simpl. rewrite nextinstr_inv; auto with ppcgen. rewrite Pregmap.gss.
+ unfold Val.or. rewrite low_high_u. reflexivity.
+ reflexivity. reflexivity.
+ split. rewrite nextinstr_inv; auto with ppcgen. apply Pregmap.gss.
+ intros. rewrite nextinstr_inv; auto. rewrite Pregmap.gso; auto.
+ unfold rs1. rewrite nextinstr_inv; auto. rewrite Pregmap.gso; auto.
+Qed.
+
+(** Add integer immediate. *)
+
+Lemma addimm_1_correct:
+ forall r1 r2 n k rs m,
+ r1 <> GPR0 ->
+ r2 <> GPR0 ->
+ exists rs',
+ exec_straight (addimm_1 r1 r2 n k) rs m k rs' m
+ /\ rs'#r1 = Val.add rs#r2 (Vint n)
+ /\ forall r': preg, r' <> r1 -> r' <> PC -> rs'#r' = rs#r'.
+Proof.
+ intros. unfold addimm_1.
+ (* addi *)
+ case (Int.eq (high_s n) Int.zero).
+ exists (nextinstr (rs#r1 <- (Val.add rs#r2 (Vint n)))).
+ split. apply exec_straight_one.
+ simpl. rewrite gpr_or_zero_not_zero; auto.
+ reflexivity.
+ split. rewrite nextinstr_inv; auto with ppcgen. apply Pregmap.gss.
+ intros. rewrite nextinstr_inv; auto. apply Pregmap.gso; auto.
+ (* addis *)
+ generalize (Int.eq_spec (low_s n) Int.zero); case (Int.eq (low_s n) Int.zero); intro.
+ exists (nextinstr (rs#r1 <- (Val.add rs#r2 (Vint n)))).
+ split. apply exec_straight_one.
+ simpl. rewrite gpr_or_zero_not_zero; auto.
+ generalize (low_high_s n). rewrite H1. rewrite Int.add_zero. intro.
+ rewrite H2. auto.
+ reflexivity.
+ split. rewrite nextinstr_inv; auto with ppcgen. apply Pregmap.gss.
+ intros. rewrite nextinstr_inv; auto. apply Pregmap.gso; auto.
+ (* addis + addi *)
+ pose (rs1 := nextinstr (rs#r1 <- (Val.add rs#r2 (Vint (Int.shl (high_s n) (Int.repr 16)))))).
+ exists (nextinstr (rs1#r1 <- (Val.add rs#r2 (Vint n)))).
+ split. apply exec_straight_two with rs1 m.
+ simpl. rewrite gpr_or_zero_not_zero; auto.
+ simpl. rewrite gpr_or_zero_not_zero; auto.
+ unfold rs1 at 1. rewrite nextinstr_inv; auto with ppcgen. rewrite Pregmap.gss.
+ rewrite Val.add_assoc. simpl. rewrite low_high_s. auto.
+ reflexivity. reflexivity.
+ split. rewrite nextinstr_inv; auto with ppcgen. apply Pregmap.gss.
+ intros. rewrite nextinstr_inv; auto. rewrite Pregmap.gso; auto.
+ unfold rs1. rewrite nextinstr_inv; auto. apply Pregmap.gso; auto.
+Qed.
+
+Lemma addimm_2_correct:
+ forall r1 r2 n k rs m,
+ r2 <> GPR2 ->
+ exists rs',
+ exec_straight (addimm_2 r1 r2 n k) rs m k rs' m
+ /\ rs'#r1 = Val.add rs#r2 (Vint n)
+ /\ forall r': preg, r' <> r1 -> r' <> GPR2 -> r' <> PC -> rs'#r' = rs#r'.
+Proof.
+ intros. unfold addimm_2.
+ generalize (loadimm_correct GPR2 n (Padd r1 r2 GPR2 :: k) rs m).
+ intros [rs1 [EX [RES OTHER]]].
+ exists (nextinstr (rs1#r1 <- (Val.add rs#r2 (Vint n)))).
+ split. eapply exec_straight_trans. eexact EX.
+ apply exec_straight_one. simpl. rewrite RES. rewrite OTHER.
+ auto. congruence. discriminate.
+ reflexivity.
+ split. rewrite nextinstr_inv; auto with ppcgen. apply Pregmap.gss.
+ intros. rewrite nextinstr_inv; auto. rewrite Pregmap.gso; auto.
+Qed.
+
+Lemma addimm_correct:
+ forall r1 r2 n k rs m,
+ r2 <> GPR2 ->
+ exists rs',
+ exec_straight (addimm r1 r2 n k) rs m k rs' m
+ /\ rs'#r1 = Val.add rs#r2 (Vint n)
+ /\ forall r': preg, r' <> r1 -> r' <> GPR2 -> r' <> PC -> rs'#r' = rs#r'.
+Proof.
+ intros. unfold addimm.
+ case (ireg_eq r1 GPR0); intro.
+ apply addimm_2_correct; auto.
+ case (ireg_eq r2 GPR0); intro.
+ apply addimm_2_correct; auto.
+ generalize (addimm_1_correct r1 r2 n k rs m n0 n1).
+ intros [rs' [EX [RES OTH]]]. exists rs'. intuition.
+Qed.
+
+(** And integer immediate. *)
+
+Lemma andimm_correct:
+ forall r1 r2 n k (rs : regset) m,
+ r2 <> GPR2 ->
+ let v := Val.and rs#r2 (Vint n) in
+ exists rs',
+ exec_straight (andimm r1 r2 n k) rs m k rs' m
+ /\ rs'#r1 = v
+ /\ rs'#CR0_2 = Val.cmp Ceq v Vzero
+ /\ forall r': preg,
+ r' <> r1 -> r' <> GPR2 -> r' <> PC ->
+ r' <> CR0_0 -> r' <> CR0_1 -> r' <> CR0_2 -> r' <> CR0_3 ->
+ rs'#r' = rs#r'.
+Proof.
+ intros. unfold andimm.
+ case (Int.eq (high_u n) Int.zero).
+ (* andi *)
+ exists (nextinstr (compare_sint (rs#r1 <- v) v Vzero)).
+ generalize (compare_sint_spec (rs#r1 <- v) v Vzero).
+ intros [A [B [C D]]].
+ split. apply exec_straight_one. reflexivity. reflexivity.
+ split. rewrite D; try discriminate. apply Pregmap.gss.
+ split. auto.
+ intros. rewrite D; auto. apply Pregmap.gso; auto.
+ (* andis *)
+ generalize (Int.eq_spec (low_u n) Int.zero);
+ case (Int.eq (low_u n) Int.zero); intro.
+ exists (nextinstr (compare_sint (rs#r1 <- v) v Vzero)).
+ generalize (compare_sint_spec (rs#r1 <- v) v Vzero).
+ intros [A [B [C D]]].
+ split. apply exec_straight_one. simpl.
+ generalize (low_high_u n). rewrite H0. rewrite Int.or_zero.
+ intro. rewrite H1. reflexivity. reflexivity.
+ split. rewrite D; try discriminate. apply Pregmap.gss.
+ split. auto.
+ intros. rewrite D; auto. apply Pregmap.gso; auto.
+ (* loadimm + and *)
+ generalize (loadimm_correct GPR2 n (Pand_ r1 r2 GPR2 :: k) rs m).
+ intros [rs1 [EX1 [RES1 OTHER1]]].
+ exists (nextinstr (compare_sint (rs1#r1 <- v) v Vzero)).
+ generalize (compare_sint_spec (rs1#r1 <- v) v Vzero).
+ intros [A [B [C D]]].
+ split. eapply exec_straight_trans. eexact EX1.
+ apply exec_straight_one. simpl. rewrite RES1.
+ rewrite (OTHER1 r2). reflexivity. congruence. congruence.
+ reflexivity.
+ split. rewrite D; try discriminate. apply Pregmap.gss.
+ split. auto.
+ intros. rewrite D; auto. rewrite Pregmap.gso; auto.
+Qed.
+
+(** Or integer immediate. *)
+
+Lemma orimm_correct:
+ forall r1 (r2: ireg) n k (rs : regset) m,
+ let v := Val.or rs#r2 (Vint n) in
+ exists rs',
+ exec_straight (orimm r1 r2 n k) rs m k rs' m
+ /\ rs'#r1 = v
+ /\ forall r': preg, r' <> r1 -> r' <> PC -> rs'#r' = rs#r'.
+Proof.
+ intros. unfold orimm.
+ case (Int.eq (high_u n) Int.zero).
+ (* ori *)
+ exists (nextinstr (rs#r1 <- v)).
+ split. apply exec_straight_one. reflexivity. reflexivity.
+ split. rewrite nextinstr_inv; auto with ppcgen. apply Pregmap.gss.
+ intros. rewrite nextinstr_inv; auto. apply Pregmap.gso; auto.
+ (* oris *)
+ generalize (Int.eq_spec (low_u n) Int.zero);
+ case (Int.eq (low_u n) Int.zero); intro.
+ exists (nextinstr (rs#r1 <- v)).
+ split. apply exec_straight_one. simpl.
+ generalize (low_high_u n). rewrite H. rewrite Int.or_zero.
+ intro. rewrite H0. reflexivity. reflexivity.
+ split. rewrite nextinstr_inv; auto with ppcgen. apply Pregmap.gss.
+ intros. rewrite nextinstr_inv; auto. apply Pregmap.gso; auto.
+ (* oris + ori *)
+ pose (rs1 := nextinstr (rs#r1 <- (Val.or rs#r2 (Vint (Int.shl (high_u n) (Int.repr 16)))))).
+ exists (nextinstr (rs1#r1 <- v)).
+ split. apply exec_straight_two with rs1 m.
+ reflexivity. simpl. unfold rs1 at 1.
+ rewrite nextinstr_inv; auto with ppcgen.
+ rewrite Pregmap.gss. rewrite Val.or_assoc. simpl.
+ rewrite low_high_u. reflexivity. reflexivity. reflexivity.
+ split. rewrite nextinstr_inv; auto with ppcgen. apply Pregmap.gss.
+ intros. rewrite nextinstr_inv; auto. rewrite Pregmap.gso; auto.
+ unfold rs1. rewrite nextinstr_inv; auto. rewrite Pregmap.gso; auto.
+Qed.
+
+(** Xor integer immediate. *)
+
+Lemma xorimm_correct:
+ forall r1 (r2: ireg) n k (rs : regset) m,
+ let v := Val.xor rs#r2 (Vint n) in
+ exists rs',
+ exec_straight (xorimm r1 r2 n k) rs m k rs' m
+ /\ rs'#r1 = v
+ /\ forall r': preg, r' <> r1 -> r' <> PC -> rs'#r' = rs#r'.
+Proof.
+ intros. unfold xorimm.
+ case (Int.eq (high_u n) Int.zero).
+ (* xori *)
+ exists (nextinstr (rs#r1 <- v)).
+ split. apply exec_straight_one. reflexivity. reflexivity.
+ split. rewrite nextinstr_inv; auto with ppcgen. apply Pregmap.gss.
+ intros. rewrite nextinstr_inv; auto. apply Pregmap.gso; auto.
+ (* xoris *)
+ generalize (Int.eq_spec (low_u n) Int.zero);
+ case (Int.eq (low_u n) Int.zero); intro.
+ exists (nextinstr (rs#r1 <- v)).
+ split. apply exec_straight_one. simpl.
+ generalize (low_high_u_xor n). rewrite H. rewrite Int.xor_zero.
+ intro. rewrite H0. reflexivity. reflexivity.
+ split. rewrite nextinstr_inv; auto with ppcgen. apply Pregmap.gss.
+ intros. rewrite nextinstr_inv; auto. apply Pregmap.gso; auto.
+ (* xoris + xori *)
+ pose (rs1 := nextinstr (rs#r1 <- (Val.xor rs#r2 (Vint (Int.shl (high_u n) (Int.repr 16)))))).
+ exists (nextinstr (rs1#r1 <- v)).
+ split. apply exec_straight_two with rs1 m.
+ reflexivity. simpl. unfold rs1 at 1.
+ rewrite nextinstr_inv; try discriminate.
+ rewrite Pregmap.gss. rewrite Val.xor_assoc. simpl.
+ rewrite low_high_u_xor. reflexivity. reflexivity. reflexivity.
+ split. rewrite nextinstr_inv; auto with ppcgen.
+ apply Pregmap.gss.
+ intros. rewrite nextinstr_inv; auto. rewrite Pregmap.gso; auto.
+ unfold rs1. rewrite nextinstr_inv; auto. rewrite Pregmap.gso; auto.
+Qed.
+
+(** Indexed memory loads. *)
+
+Lemma loadind_aux_correct:
+ forall (base: ireg) ofs ty dst (rs: regset) m v,
+ Mem.loadv (chunk_of_type ty) m (Val.add rs#base (Vint ofs)) = Some v ->
+ mreg_type dst = ty ->
+ base <> GPR0 ->
+ exec_instr ge fn (loadind_aux base ofs ty dst) rs m =
+ OK (nextinstr (rs#(preg_of dst) <- v)) m.
+Proof.
+ intros. unfold loadind_aux. unfold preg_of. rewrite H0. destruct ty.
+ simpl. unfold load1. rewrite gpr_or_zero_not_zero; auto.
+ unfold const_low. simpl in H. rewrite H. auto.
+ simpl. unfold load1. rewrite gpr_or_zero_not_zero; auto.
+ unfold const_low. simpl in H. rewrite H. auto.
+Qed.
+
+Lemma loadind_correct:
+ forall (base: ireg) ofs ty dst k (rs: regset) m v,
+ Mem.loadv (chunk_of_type ty) m (Val.add rs#base (Vint ofs)) = Some v ->
+ mreg_type dst = ty ->
+ base <> GPR0 ->
+ exists rs',
+ exec_straight (loadind base ofs ty dst k) rs m k rs' m
+ /\ rs'#(preg_of dst) = v
+ /\ forall r, r <> PC -> r <> GPR2 -> r <> preg_of dst -> rs'#r = rs#r.
+Proof.
+ intros. unfold loadind.
+ assert (preg_of dst <> PC).
+ unfold preg_of. case (mreg_type dst); discriminate.
+ (* short offset *)
+ case (Int.eq (high_s ofs) Int.zero).
+ exists (nextinstr (rs#(preg_of dst) <- v)).
+ split. apply exec_straight_one. apply loadind_aux_correct; auto.
+ unfold nextinstr. rewrite Pregmap.gss. rewrite Pregmap.gso. auto. auto.
+ split. rewrite nextinstr_inv; auto. apply Pregmap.gss.
+ intros. rewrite nextinstr_inv; auto. apply Pregmap.gso; auto.
+ (* long offset *)
+ pose (rs1 := nextinstr (rs#GPR2 <- (Val.add rs#base (Vint (Int.shl (high_s ofs) (Int.repr 16)))))).
+ exists (nextinstr (rs1#(preg_of dst) <- v)).
+ split. apply exec_straight_two with rs1 m.
+ simpl. rewrite gpr_or_zero_not_zero; auto.
+ apply loadind_aux_correct.
+ unfold rs1. rewrite nextinstr_inv; auto with ppcgen. rewrite Pregmap.gss.
+ rewrite Val.add_assoc. simpl. rewrite low_high_s. assumption.
+ auto. discriminate. reflexivity.
+ unfold nextinstr. rewrite Pregmap.gss. rewrite Pregmap.gso. auto. auto.
+ split. rewrite nextinstr_inv; auto. apply Pregmap.gss.
+ intros. rewrite nextinstr_inv; auto. rewrite Pregmap.gso; auto.
+ unfold rs1. rewrite nextinstr_inv; auto. rewrite Pregmap.gso; auto.
+Qed.
+
+(** Indexed memory stores. *)
+
+Lemma storeind_aux_correct:
+ forall (base: ireg) ofs ty src (rs: regset) m m',
+ Mem.storev (chunk_of_type ty) m (Val.add rs#base (Vint ofs)) (rs#(preg_of src)) = Some m' ->
+ mreg_type src = ty ->
+ base <> GPR0 ->
+ exec_instr ge fn (storeind_aux src base ofs ty) rs m =
+ OK (nextinstr rs) m'.
+Proof.
+ intros. unfold storeind_aux. unfold preg_of in H. rewrite H0 in H. destruct ty.
+ simpl. unfold store1. rewrite gpr_or_zero_not_zero; auto.
+ unfold const_low. simpl in H. rewrite H. auto.
+ simpl. unfold store1. rewrite gpr_or_zero_not_zero; auto.
+ unfold const_low. simpl in H. rewrite H. auto.
+Qed.
+
+Lemma storeind_correct:
+ forall (base: ireg) ofs ty src k (rs: regset) m m',
+ Mem.storev (chunk_of_type ty) m (Val.add rs#base (Vint ofs)) (rs#(preg_of src)) = Some m' ->
+ mreg_type src = ty ->
+ base <> GPR0 ->
+ exists rs',
+ exec_straight (storeind src base ofs ty k) rs m k rs' m'
+ /\ forall r, r <> PC -> r <> GPR2 -> rs'#r = rs#r.
+Proof.
+ intros. unfold storeind.
+ (* short offset *)
+ case (Int.eq (high_s ofs) Int.zero).
+ exists (nextinstr rs).
+ split. apply exec_straight_one. apply storeind_aux_correct; auto.
+ reflexivity.
+ intros. rewrite nextinstr_inv; auto.
+ (* long offset *)
+ pose (rs1 := nextinstr (rs#GPR2 <- (Val.add rs#base (Vint (Int.shl (high_s ofs) (Int.repr 16)))))).
+ exists (nextinstr rs1).
+ split. apply exec_straight_two with rs1 m.
+ simpl. rewrite gpr_or_zero_not_zero; auto.
+ apply storeind_aux_correct; auto with ppcgen.
+ unfold rs1. rewrite nextinstr_inv; auto with ppcgen. rewrite Pregmap.gss.
+ rewrite nextinstr_inv; auto with ppcgen.
+ rewrite Pregmap.gso; auto with ppcgen.
+ rewrite Val.add_assoc. simpl. rewrite low_high_s. assumption.
+ reflexivity. reflexivity.
+ intros. rewrite nextinstr_inv; auto.
+ unfold rs1. rewrite nextinstr_inv; auto. rewrite Pregmap.gso; auto.
+Qed.
+
+(** Float comparisons. *)
+
+Lemma floatcomp_correct:
+ forall cmp (r1 r2: freg) k rs m,
+ exists rs',
+ exec_straight (floatcomp cmp r1 r2 k) rs m k rs' m
+ /\ rs'#(reg_of_crbit (fst (crbit_for_fcmp cmp))) =
+ (if snd (crbit_for_fcmp cmp)
+ then Val.cmpf cmp rs#r1 rs#r2
+ else Val.notbool (Val.cmpf cmp rs#r1 rs#r2))
+ /\ forall r',
+ r' <> PC -> r' <> CR0_0 -> r' <> CR0_1 ->
+ r' <> CR0_2 -> r' <> CR0_3 -> rs'#r' = rs#r'.
+Proof.
+ intros.
+ generalize (compare_float_spec rs rs#r1 rs#r2).
+ intros [A [B [C D]]].
+ set (rs1 := nextinstr (compare_float rs rs#r1 rs#r2)) in *.
+ assert ((cmp = Ceq \/ cmp = Cne \/ cmp = Clt \/ cmp = Cgt)
+ \/ (cmp = Cle \/ cmp = Cge)).
+ case cmp; tauto.
+ unfold floatcomp. elim H; intro; clear H.
+ exists rs1.
+ split. generalize H0; intros [EQ|[EQ|[EQ|EQ]]]; subst cmp;
+ apply exec_straight_one; reflexivity.
+ split.
+ generalize H0; intros [EQ|[EQ|[EQ|EQ]]]; subst cmp; simpl; auto.
+ rewrite Val.negate_cmpf_eq. auto.
+ auto.
+ (* two instrs *)
+ exists (nextinstr (rs1#CR0_3 <- (Val.cmpf cmp rs#r1 rs#r2))).
+ split. elim H0; intro; subst cmp.
+ apply exec_straight_two with rs1 m.
+ reflexivity. simpl.
+ rewrite C; rewrite A. rewrite Val.or_commut. rewrite <- Val.cmpf_le.
+ reflexivity. reflexivity. reflexivity.
+ apply exec_straight_two with rs1 m.
+ reflexivity. simpl.
+ rewrite C; rewrite B. rewrite Val.or_commut. rewrite <- Val.cmpf_ge.
+ reflexivity. reflexivity. reflexivity.
+ split. elim H0; intro; subst cmp; simpl.
+ reflexivity.
+ reflexivity.
+ intros. rewrite nextinstr_inv; auto. rewrite Pregmap.gso; auto.
+Qed.
+
+Ltac TypeInv :=
+ match goal with
+ | H: (List.map ?f ?x = nil) |- _ =>
+ destruct x; [clear H | simpl in H; discriminate]
+ | H: (List.map ?f ?x = ?hd :: ?tl) |- _ =>
+ destruct x; simpl in H;
+ [ discriminate |
+ injection H; clear H; let T := fresh "T" in (
+ intros H T; TypeInv) ]
+ | _ => idtac
+ end.
+
+(** Translation of conditions. *)
+
+Lemma transl_cond_correct_aux:
+ forall cond args k ms sp rs m,
+ map mreg_type args = type_of_condition cond ->
+ agree ms sp rs ->
+ exists rs',
+ exec_straight (transl_cond cond args k) rs m k rs' m
+ /\ rs'#(reg_of_crbit (fst (crbit_for_cond cond))) =
+ (if snd (crbit_for_cond cond)
+ then eval_condition_total cond (map ms args)
+ else Val.notbool (eval_condition_total cond (map ms args)))
+ /\ agree ms sp rs'.
+Proof.
+ intros. destruct cond; simpl in H; TypeInv.
+ (* Ccomp *)
+ simpl.
+ generalize (compare_sint_spec rs ms#m0 ms#m1).
+ intros [A [B [C D]]].
+ exists (nextinstr (compare_sint rs ms#m0 ms#m1)).
+ split. apply exec_straight_one. simpl.
+ repeat (rewrite <- (ireg_val ms sp rs); auto).
+ reflexivity.
+ split.
+ case c; simpl; auto; rewrite <- Val.negate_cmp; simpl; auto.
+ apply agree_exten_2 with rs; auto.
+ (* Ccompu *)
+ simpl.
+ generalize (compare_uint_spec rs ms#m0 ms#m1).
+ intros [A [B [C D]]].
+ exists (nextinstr (compare_uint rs ms#m0 ms#m1)).
+ split. apply exec_straight_one. simpl.
+ repeat (rewrite <- (ireg_val ms sp rs); auto).
+ reflexivity.
+ split.
+ case c; simpl; auto; rewrite <- Val.negate_cmpu; simpl; auto.
+ apply agree_exten_2 with rs; auto.
+ (* Ccompimm *)
+ simpl.
+ case (Int.eq (high_s i) Int.zero).
+ generalize (compare_sint_spec rs ms#m0 (Vint i)).
+ intros [A [B [C D]]].
+ exists (nextinstr (compare_sint rs ms#m0 (Vint i))).
+ split. apply exec_straight_one. simpl.
+ repeat (rewrite <- (ireg_val ms sp rs); auto).
+ reflexivity.
+ split.
+ case c; simpl; auto; rewrite <- Val.negate_cmp; simpl; auto.
+ apply agree_exten_2 with rs; auto.
+ generalize (loadimm_correct GPR2 i (Pcmpw (ireg_of m0) GPR2 :: k) rs m).
+ intros [rs1 [EX1 [RES1 OTH1]]].
+ assert (agree ms sp rs1). apply agree_exten_2 with rs; auto.
+ generalize (compare_sint_spec rs1 ms#m0 (Vint i)).
+ intros [A [B [C D]]].
+ exists (nextinstr (compare_sint rs1 ms#m0 (Vint i))).
+ split. eapply exec_straight_trans. eexact EX1.
+ apply exec_straight_one. simpl.
+ repeat (rewrite <- (ireg_val ms sp rs1); auto). rewrite RES1.
+ reflexivity. reflexivity.
+ split.
+ case c; simpl; auto; rewrite <- Val.negate_cmp; simpl; auto.
+ apply agree_exten_2 with rs1; auto.
+ (* Ccompuimm *)
+ simpl.
+ case (Int.eq (high_u i) Int.zero).
+ generalize (compare_uint_spec rs ms#m0 (Vint i)).
+ intros [A [B [C D]]].
+ exists (nextinstr (compare_uint rs ms#m0 (Vint i))).
+ split. apply exec_straight_one. simpl.
+ repeat (rewrite <- (ireg_val ms sp rs); auto).
+ reflexivity.
+ split.
+ case c; simpl; auto; rewrite <- Val.negate_cmpu; simpl; auto.
+ apply agree_exten_2 with rs; auto.
+ generalize (loadimm_correct GPR2 i (Pcmplw (ireg_of m0) GPR2 :: k) rs m).
+ intros [rs1 [EX1 [RES1 OTH1]]].
+ assert (agree ms sp rs1). apply agree_exten_2 with rs; auto.
+ generalize (compare_uint_spec rs1 ms#m0 (Vint i)).
+ intros [A [B [C D]]].
+ exists (nextinstr (compare_uint rs1 ms#m0 (Vint i))).
+ split. eapply exec_straight_trans. eexact EX1.
+ apply exec_straight_one. simpl.
+ repeat (rewrite <- (ireg_val ms sp rs1); auto). rewrite RES1.
+ reflexivity. reflexivity.
+ split.
+ case c; simpl; auto; rewrite <- Val.negate_cmpu; simpl; auto.
+ apply agree_exten_2 with rs1; auto.
+ (* Ccompf *)
+ simpl.
+ generalize (floatcomp_correct c (freg_of m0) (freg_of m1) k rs m).
+ intros [rs' [EX [RES OTH]]].
+ exists rs'. split. auto.
+ split. rewrite RES. repeat (rewrite <- (freg_val ms sp rs); auto).
+ apply agree_exten_2 with rs; auto.
+ (* Cnotcompf *)
+ simpl.
+ generalize (floatcomp_correct c (freg_of m0) (freg_of m1) k rs m).
+ intros [rs' [EX [RES OTH]]].
+ exists rs'. split. auto.
+ split. rewrite RES. repeat (rewrite <- (freg_val ms sp rs); auto).
+ assert (forall v1 v2, Val.notbool (Val.notbool (Val.cmpf c v1 v2)) = Val.cmpf c v1 v2).
+ intros v1 v2; unfold Val.cmpf; destruct v1; destruct v2; auto.
+ apply Val.notbool_idem2.
+ rewrite H.
+ generalize RES. case (snd (crbit_for_fcmp c)); simpl; auto.
+ apply agree_exten_2 with rs; auto.
+ (* Cmaskzero *)
+ simpl.
+ generalize (andimm_correct GPR2 (ireg_of m0) i k rs m (ireg_of_not_GPR2 m0)).
+ intros [rs' [A [B [C D]]]].
+ exists rs'. split. assumption.
+ split. rewrite C. rewrite <- (ireg_val ms sp rs); auto.
+ apply agree_exten_2 with rs; auto.
+ (* Cmasknotzero *)
+ simpl.
+ generalize (andimm_correct GPR2 (ireg_of m0) i k rs m (ireg_of_not_GPR2 m0)).
+ intros [rs' [A [B [C D]]]].
+ exists rs'. split. assumption.
+ split. rewrite C. rewrite <- (ireg_val ms sp rs); auto.
+ rewrite Val.notbool_idem3. reflexivity.
+ apply agree_exten_2 with rs; auto.
+Qed.
+
+Lemma transl_cond_correct:
+ forall cond args k ms sp rs m b,
+ map mreg_type args = type_of_condition cond ->
+ agree ms sp rs ->
+ eval_condition cond (map ms args) = Some b ->
+ exists rs',
+ exec_straight (transl_cond cond args k) rs m k rs' m
+ /\ rs'#(reg_of_crbit (fst (crbit_for_cond cond))) =
+ (if snd (crbit_for_cond cond)
+ then Val.of_bool b
+ else Val.notbool (Val.of_bool b))
+ /\ agree ms sp rs'.
+Proof.
+ intros. rewrite <- (eval_condition_weaken _ _ H1).
+ apply transl_cond_correct_aux; auto.
+Qed.
+
+(** Translation of arithmetic operations. *)
+
+Ltac TranslOpSimpl :=
+ match goal with
+ | |- exists rs' : regset,
+ exec_straight ?c ?rs ?m ?k rs' ?m /\
+ agree (Regmap.set ?res ?v ?ms) ?sp rs' =>
+ (exists (nextinstr (rs#(ireg_of res) <- v));
+ split;
+ [ apply exec_straight_one;
+ [ repeat (rewrite (ireg_val ms sp rs); auto); reflexivity
+ | reflexivity ]
+ | auto with ppcgen ])
+ ||
+ (exists (nextinstr (rs#(freg_of res) <- v));
+ split;
+ [ apply exec_straight_one;
+ [ repeat (rewrite (freg_val ms sp rs); auto); reflexivity
+ | reflexivity ]
+ | auto with ppcgen ])
+ end.
+
+Lemma transl_op_correct:
+ forall op args res k ms sp rs m v,
+ wt_instr (Mop op args res) ->
+ agree ms sp rs ->
+ eval_operation ge sp op (map ms args) = Some v ->
+ exists rs',
+ exec_straight (transl_op op args res k) rs m k rs' m
+ /\ agree (Regmap.set res v ms) sp rs'.
+Proof.
+ intros. rewrite <- (eval_operation_weaken _ _ _ _ H1). clear H1; clear v.
+ inversion H.
+ (* Omove *)
+ simpl. exists (nextinstr (rs#(preg_of res) <- (ms r1))).
+ split. caseEq (mreg_type r1); intro.
+ apply exec_straight_one. simpl. rewrite (ireg_val ms sp rs); auto.
+ simpl. unfold preg_of. rewrite <- H2. rewrite H5. reflexivity.
+ auto with ppcgen.
+ apply exec_straight_one. simpl. rewrite (freg_val ms sp rs); auto.
+ simpl. unfold preg_of. rewrite <- H2. rewrite H5. reflexivity.
+ auto with ppcgen.
+ auto with ppcgen.
+ (* Oundef *)
+ simpl. exists (nextinstr (rs#(preg_of res) <- Vundef)).
+ split. caseEq (mreg_type res); intro.
+ apply exec_straight_one. simpl.
+ unfold preg_of; rewrite H1. reflexivity.
+ auto with ppcgen.
+ apply exec_straight_one. simpl.
+ unfold preg_of; rewrite H1. reflexivity.
+ auto with ppcgen.
+ auto with ppcgen.
+ (* Other instructions *)
+ clear H1; clear H2; clear H3.
+ destruct op; simpl in H6; injection H6; clear H6; intros;
+ TypeInv; simpl; try (TranslOpSimpl).
+ (* Omove again *)
+ congruence.
+ (* Ointconst *)
+ generalize (loadimm_correct (ireg_of res) i k rs m).
+ intros [rs' [A [B C]]].
+ exists rs'. split. auto.
+ apply agree_set_mireg_exten with rs; auto.
+ (* Ofloatconst *)
+ exists (nextinstr (rs#(freg_of res) <- (Vfloat f) #GPR2 <- Vundef)).
+ split. apply exec_straight_one. reflexivity. reflexivity.
+ auto with ppcgen.
+ (* Oaddrsymbol *)
+ set (v := find_symbol_offset ge i i0).
+ pose (rs1 := nextinstr (rs#(ireg_of res) <- (high_half_unsigned v))).
+ exists (nextinstr (rs1#(ireg_of res) <- v)).
+ split. apply exec_straight_two with rs1 m.
+ unfold exec_instr. rewrite gpr_or_zero_zero.
+ unfold const_high. rewrite Val.add_commut.
+ rewrite high_half_unsigned_zero. reflexivity.
+ simpl. unfold rs1 at 1. rewrite nextinstr_inv; auto with ppcgen.
+ rewrite Pregmap.gss.
+ fold v. rewrite Val.or_commut. rewrite low_high_half_unsigned.
+ reflexivity. reflexivity. reflexivity.
+ unfold rs1. auto with ppcgen.
+ (* Oaddrstack *)
+ assert (GPR1 <> GPR2). discriminate.
+ generalize (addimm_correct (ireg_of res) GPR1 i k rs m H2).
+ intros [rs' [EX [RES OTH]]].
+ exists rs'. split. auto.
+ apply agree_set_mireg_exten with rs; auto.
+ rewrite (sp_val ms sp rs). auto. auto.
+ (* Oundef again *)
+ congruence.
+ (* Oaddimm *)
+ generalize (addimm_correct (ireg_of res) (ireg_of m0) i k rs m
+ (ireg_of_not_GPR2 m0)).
+ intros [rs' [A [B C]]].
+ exists rs'. split. auto.
+ apply agree_set_mireg_exten with rs; auto.
+ rewrite (ireg_val ms sp rs); auto.
+ (* Osub *)
+ exists (nextinstr (rs#(ireg_of res) <- (Val.sub (ms m0) (ms m1)) #CARRY <- Vundef)).
+ split. apply exec_straight_one. repeat (rewrite (ireg_val ms sp rs); auto).
+ simpl. reflexivity. auto with ppcgen.
+ (* Osubimm *)
+ case (Int.eq (high_s i) Int.zero).
+ exists (nextinstr (rs#(ireg_of res) <- (Val.sub (Vint i) (ms m0)) #CARRY <- Vundef)).
+ split. apply exec_straight_one. rewrite (ireg_val ms sp rs); auto.
+ reflexivity. simpl. auto with ppcgen.
+ generalize (loadimm_correct GPR2 i (Psubfc (ireg_of res) (ireg_of m0) GPR2 :: k) rs m).
+ intros [rs1 [EX [RES OTH]]].
+ assert (agree ms sp rs1). apply agree_exten_2 with rs; auto.
+ exists (nextinstr (rs1#(ireg_of res) <- (Val.sub (Vint i) (ms m0)) #CARRY <- Vundef)).
+ split. eapply exec_straight_trans. eexact EX.
+ apply exec_straight_one. repeat (rewrite (ireg_val ms sp rs); auto).
+ simpl. rewrite RES. rewrite OTH. reflexivity.
+ generalize (ireg_of_not_GPR2 m0); congruence.
+ discriminate.
+ reflexivity. simpl; auto with ppcgen.
+ (* Omulimm *)
+ case (Int.eq (high_s i) Int.zero).
+ exists (nextinstr (rs#(ireg_of res) <- (Val.mul (ms m0) (Vint i)))).
+ split. apply exec_straight_one. rewrite (ireg_val ms sp rs); auto.
+ reflexivity. auto with ppcgen.
+ generalize (loadimm_correct GPR2 i (Pmullw (ireg_of res) (ireg_of m0) GPR2 :: k) rs m).
+ intros [rs1 [EX [RES OTH]]].
+ assert (agree ms sp rs1). apply agree_exten_2 with rs; auto.
+ exists (nextinstr (rs1#(ireg_of res) <- (Val.mul (ms m0) (Vint i)))).
+ split. eapply exec_straight_trans. eexact EX.
+ apply exec_straight_one. repeat (rewrite (ireg_val ms sp rs); auto).
+ simpl. rewrite RES. rewrite OTH. reflexivity.
+ generalize (ireg_of_not_GPR2 m0); congruence.
+ discriminate.
+ reflexivity. simpl; auto with ppcgen.
+ (* Oand *)
+ pose (v := Val.and (ms m0) (ms m1)).
+ pose (rs1 := rs#(ireg_of res) <- v).
+ generalize (compare_sint_spec rs1 v Vzero).
+ intros [A [B [C D]]].
+ exists (nextinstr (compare_sint rs1 v Vzero)).
+ split. apply exec_straight_one.
+ unfold rs1, v. repeat (rewrite (ireg_val ms sp rs); auto).
+ reflexivity.
+ apply agree_exten_2 with rs1. unfold rs1, v; auto with ppcgen.
+ auto.
+ (* Oandimm *)
+ generalize (andimm_correct (ireg_of res) (ireg_of m0) i k rs m
+ (ireg_of_not_GPR2 m0)).
+ intros [rs' [A [B [C D]]]].
+ exists rs'. split. auto. apply agree_set_mireg_exten with rs; auto.
+ rewrite (ireg_val ms sp rs); auto.
+ (* Oorimm *)
+ generalize (orimm_correct (ireg_of res) (ireg_of m0) i k rs m).
+ intros [rs' [A [B C]]].
+ exists rs'. split. auto. apply agree_set_mireg_exten with rs; auto.
+ rewrite (ireg_val ms sp rs); auto.
+ (* Oxorimm *)
+ generalize (xorimm_correct (ireg_of res) (ireg_of m0) i k rs m).
+ intros [rs' [A [B C]]].
+ exists rs'. split. auto. apply agree_set_mireg_exten with rs; auto.
+ rewrite (ireg_val ms sp rs); auto.
+ (* Oshr *)
+ exists (nextinstr (rs#(ireg_of res) <- (Val.shr (ms m0) (ms m1)) #CARRY <- (Val.shr_carry (ms m0) (ms m1)))).
+ split. apply exec_straight_one. repeat (rewrite (ireg_val ms sp rs); auto).
+ reflexivity. auto with ppcgen.
+ (* Oshrimm *)
+ exists (nextinstr (rs#(ireg_of res) <- (Val.shr (ms m0) (Vint i)) #CARRY <- (Val.shr_carry (ms m0) (Vint i)))).
+ split. apply exec_straight_one. repeat (rewrite (ireg_val ms sp rs); auto).
+ reflexivity. auto with ppcgen.
+ (* Oxhrximm *)
+ pose (rs1 := nextinstr (rs#(ireg_of res) <- (Val.shr (ms m0) (Vint i)) #CARRY <- (Val.shr_carry (ms m0) (Vint i)))).
+ exists (nextinstr (rs1#(ireg_of res) <- (Val.shrx (ms m0) (Vint i)))).
+ split. apply exec_straight_two with rs1 m.
+ unfold rs1; rewrite (ireg_val ms sp rs); auto.
+ simpl; unfold rs1; repeat rewrite <- (ireg_val ms sp rs); auto.
+ repeat (rewrite nextinstr_inv; try discriminate).
+ repeat rewrite Pregmap.gss. decEq. decEq.
+ apply (f_equal3 (@Pregmap.set val)); auto.
+ rewrite Pregmap.gso. rewrite Pregmap.gss. apply Val.shrx_carry.
+ discriminate. reflexivity. reflexivity.
+ apply agree_exten_2 with (rs#(ireg_of res) <- (Val.shrx (ms m0) (Vint i))).
+ auto with ppcgen.
+ intros. rewrite nextinstr_inv; auto.
+ case (preg_eq (ireg_of res) r); intro.
+ subst r. repeat rewrite Pregmap.gss. auto.
+ repeat rewrite Pregmap.gso; auto.
+ unfold rs1. rewrite nextinstr_inv; auto.
+ repeat rewrite Pregmap.gso; auto.
+ (* Ointoffloat *)
+ exists (nextinstr (rs#(ireg_of res) <- (Val.intoffloat (ms m0)) #FPR13 <- Vundef)).
+ split. apply exec_straight_one.
+ repeat (rewrite (freg_val ms sp rs); auto).
+ reflexivity. auto with ppcgen.
+ (* Ofloatofint *)
+ exists (nextinstr (rs#(freg_of res) <- (Val.floatofint (ms m0)) #GPR2 <- Vundef #FPR13 <- Vundef)).
+ split. apply exec_straight_one.
+ repeat (rewrite (ireg_val ms sp rs); auto).
+ reflexivity. auto 10 with ppcgen.
+ (* Ofloatofintu *)
+ exists (nextinstr (rs#(freg_of res) <- (Val.floatofintu (ms m0)) #GPR2 <- Vundef #FPR13 <- Vundef)).
+ split. apply exec_straight_one.
+ repeat (rewrite (ireg_val ms sp rs); auto).
+ reflexivity. auto 10 with ppcgen.
+ (* Ocmp *)
+ set (bit := fst (crbit_for_cond c)).
+ set (isset := snd (crbit_for_cond c)).
+ set (k1 :=
+ Pmfcrbit (ireg_of res) bit ::
+ (if isset
+ then k
+ else Pxori (ireg_of res) (ireg_of res) (Cint Int.one) :: k)).
+ generalize (transl_cond_correct_aux c args k1 ms sp rs m H2 H0).
+ fold bit; fold isset.
+ intros [rs1 [EX1 [RES1 AG1]]].
+ set (rs2 := nextinstr (rs1#(ireg_of res) <- (rs1#(reg_of_crbit bit)))).
+ destruct isset.
+ exists rs2.
+ split. apply exec_straight_trans with k1 rs1 m. assumption.
+ unfold k1. apply exec_straight_one.
+ reflexivity. reflexivity.
+ unfold rs2. rewrite RES1. auto with ppcgen.
+ exists (nextinstr (rs2#(ireg_of res) <- (eval_condition_total c ms##args))).
+ split. apply exec_straight_trans with k1 rs1 m. assumption.
+ unfold k1. apply exec_straight_two with rs2 m.
+ reflexivity. simpl.
+ replace (Val.xor (rs2 (ireg_of res)) (Vint Int.one))
+ with (eval_condition_total c ms##args).
+ reflexivity.
+ unfold rs2. rewrite nextinstr_inv; auto with ppcgen. rewrite Pregmap.gss.
+ rewrite RES1. apply Val.notbool_xor. apply eval_condition_total_is_bool.
+ reflexivity. reflexivity.
+ unfold rs2. auto with ppcgen.
+Qed.
+
+Lemma transl_load_store_correct:
+ forall (mk1: constant -> ireg -> instruction) (mk2: ireg -> ireg -> instruction)
+ addr args k ms sp rs m ms' m',
+ (forall cst (r1: ireg) (rs1: regset) k,
+ eval_addressing_total ge sp addr (map ms args) = Val.add rs1#r1 (const_low ge cst) ->
+ agree ms sp rs1 ->
+ r1 <> GPR0 ->
+ exists rs',
+ exec_straight (mk1 cst r1 :: k) rs1 m k rs' m' /\
+ agree ms' sp rs') ->
+ (forall (r1 r2: ireg) (rs1: regset) k,
+ eval_addressing_total ge sp addr (map ms args) = Val.add rs1#r1 rs1#r2 ->
+ agree ms sp rs1 ->
+ exists rs',
+ exec_straight (mk2 r1 r2 :: k) rs1 m k rs' m' /\
+ agree ms' sp rs') ->
+ agree ms sp rs ->
+ map mreg_type args = type_of_addressing addr ->
+ exists rs',
+ exec_straight (transl_load_store mk1 mk2 addr args k) rs m
+ k rs' m'
+ /\ agree ms' sp rs'.
+Proof.
+ intros. destruct addr; simpl in H2; TypeInv; simpl.
+ (* Aindexed *)
+ case (ireg_eq (ireg_of t) GPR0); intro.
+ (* Aindexed from GPR0 *)
+ set (rs1 := nextinstr (rs#GPR2 <- (ms t))).
+ set (rs2 := nextinstr (rs1#GPR2 <- (Val.add (ms t) (Vint (Int.shl (high_s i) (Int.repr 16)))))).
+ assert (ADDR: eval_addressing_total ge sp (Aindexed i) ms##(t :: nil) =
+ Val.add rs2#GPR2 (const_low ge (Cint (low_s i)))).
+ simpl. unfold rs2. rewrite nextinstr_inv. rewrite Pregmap.gss.
+ rewrite Val.add_assoc. simpl. rewrite low_high_s. auto.
+ discriminate.
+ assert (AG: agree ms sp rs2). unfold rs2, rs1; auto 6 with ppcgen.
+ assert (NOT0: GPR2 <> GPR0). discriminate.
+ generalize (H _ _ _ k ADDR AG NOT0).
+ intros [rs' [EX' AG']].
+ exists rs'. split.
+ apply exec_straight_trans with (mk1 (Cint (low_s i)) GPR2 :: k) rs2 m.
+ apply exec_straight_two with rs1 m.
+ unfold rs1. rewrite (ireg_val ms sp rs); auto.
+ unfold rs2. replace (ms t) with (rs1#GPR2). auto.
+ unfold rs1. rewrite nextinstr_inv. apply Pregmap.gss. discriminate.
+ reflexivity. reflexivity.
+ assumption. assumption.
+ (* Aindexed short *)
+ case (Int.eq (high_s i) Int.zero).
+ assert (ADDR: eval_addressing_total ge sp (Aindexed i) ms##(t :: nil) =
+ Val.add rs#(ireg_of t) (const_low ge (Cint i))).
+ simpl. rewrite (ireg_val ms sp rs); auto.
+ generalize (H _ _ _ k ADDR H1 n). intros [rs' [EX' AG']].
+ exists rs'. split. auto. auto.
+ (* Aindexed long *)
+ set (rs1 := nextinstr (rs#GPR2 <- (Val.add (ms t) (Vint (Int.shl (high_s i) (Int.repr 16)))))).
+ assert (ADDR: eval_addressing_total ge sp (Aindexed i) ms##(t :: nil) =
+ Val.add rs1#GPR2 (const_low ge (Cint (low_s i)))).
+ simpl. unfold rs1. rewrite nextinstr_inv. rewrite Pregmap.gss.
+ rewrite Val.add_assoc. simpl. rewrite low_high_s. auto.
+ discriminate.
+ assert (AG: agree ms sp rs1). unfold rs1; auto with ppcgen.
+ assert (NOT0: GPR2 <> GPR0). discriminate.
+ generalize (H _ _ _ k ADDR AG NOT0). intros [rs' [EX' AG']].
+ exists rs'. split. apply exec_straight_step with rs1 m.
+ simpl. rewrite gpr_or_zero_not_zero; auto.
+ rewrite <- (ireg_val ms sp rs); auto. reflexivity.
+ assumption. assumption.
+ (* Aindexed2 *)
+ apply H0.
+ simpl. repeat (rewrite (ireg_val ms sp rs); auto). auto.
+ (* Aglobal *)
+ set (rs1 := nextinstr (rs#GPR2 <- (const_high ge (Csymbol_high_signed i i0)))).
+ assert (ADDR: eval_addressing_total ge sp (Aglobal i i0) ms##nil =
+ Val.add rs1#GPR2 (const_low ge (Csymbol_low_signed i i0))).
+ simpl. unfold rs1. rewrite nextinstr_inv. rewrite Pregmap.gss.
+ unfold const_high, const_low.
+ set (v := symbol_offset ge i i0).
+ symmetry. rewrite Val.add_commut. apply low_high_half_signed.
+ discriminate.
+ assert (AG: agree ms sp rs1). unfold rs1; auto with ppcgen.
+ assert (NOT0: GPR2 <> GPR0). discriminate.
+ generalize (H _ _ _ k ADDR AG NOT0). intros [rs' [EX' AG']].
+ exists rs'. split. apply exec_straight_step with rs1 m.
+ unfold exec_instr. rewrite gpr_or_zero_zero.
+ rewrite Val.add_commut. unfold const_high.
+ rewrite high_half_signed_zero.
+ reflexivity. reflexivity.
+ assumption. assumption.
+ (* Abased *)
+ assert (COMMON:
+ forall (rs1: regset) r,
+ r <> GPR0 ->
+ ms t = rs1#r ->
+ agree ms sp rs1 ->
+ exists rs',
+ exec_straight
+ (Paddis GPR2 r (Csymbol_high_signed i i0)
+ :: mk1 (Csymbol_low_signed i i0) GPR2 :: k) rs1 m k rs' m'
+ /\ agree ms' sp rs').
+ intros.
+ set (rs2 := nextinstr (rs1#GPR2 <- (Val.add (ms t) (const_high ge (Csymbol_high_signed i i0))))).
+ assert (ADDR: eval_addressing_total ge sp (Abased i i0) ms##(t::nil) =
+ Val.add rs2#GPR2 (const_low ge (Csymbol_low_signed i i0))).
+ simpl. unfold rs2. rewrite nextinstr_inv. rewrite Pregmap.gss.
+ unfold const_high.
+ set (v := symbol_offset ge i i0).
+ rewrite Val.add_assoc.
+ rewrite (Val.add_commut (high_half_signed v)).
+ rewrite low_high_half_signed. apply Val.add_commut.
+ discriminate.
+ assert (AG: agree ms sp rs2). unfold rs2; auto with ppcgen.
+ assert (NOT0: GPR2 <> GPR0). discriminate.
+ generalize (H _ _ _ k ADDR AG NOT0). intros [rs' [EX' AG']].
+ exists rs'. split. apply exec_straight_step with rs2 m.
+ unfold exec_instr. rewrite gpr_or_zero_not_zero; auto.
+ rewrite <- H3. reflexivity. reflexivity.
+ assumption. assumption.
+ case (ireg_eq (ireg_of t) GPR0); intro.
+ set (rs1 := nextinstr (rs#GPR2 <- (ms t))).
+ assert (R1: GPR2 <> GPR0). discriminate.
+ assert (R2: ms t = rs1 GPR2).
+ unfold rs1. rewrite nextinstr_inv. rewrite Pregmap.gss; auto.
+ discriminate.
+ assert (R3: agree ms sp rs1). unfold rs1; auto with ppcgen.
+ generalize (COMMON rs1 GPR2 R1 R2 R3). intros [rs' [EX' AG']].
+ exists rs'. split.
+ apply exec_straight_step with rs1 m.
+ unfold rs1. rewrite (ireg_val ms sp rs); auto. reflexivity.
+ assumption. assumption.
+ apply COMMON; auto. eapply ireg_val; eauto.
+ (* Ainstack *)
+ case (Int.eq (high_s i) Int.zero).
+ apply H. simpl. rewrite (sp_val ms sp rs); auto. auto.
+ discriminate.
+ set (rs1 := nextinstr (rs#GPR2 <- (Val.add sp (Vint (Int.shl (high_s i) (Int.repr 16)))))).
+ assert (ADDR: eval_addressing_total ge sp (Ainstack i) ms##nil =
+ Val.add rs1#GPR2 (const_low ge (Cint (low_s i)))).
+ simpl. unfold rs1. rewrite nextinstr_inv. rewrite Pregmap.gss.
+ rewrite Val.add_assoc. decEq. simpl. rewrite low_high_s. auto.
+ discriminate.
+ assert (AG: agree ms sp rs1). unfold rs1; auto with ppcgen.
+ assert (NOT0: GPR2 <> GPR0). discriminate.
+ generalize (H _ _ _ k ADDR AG NOT0). intros [rs' [EX' AG']].
+ exists rs'. split. apply exec_straight_step with rs1 m.
+ simpl. rewrite gpr_or_zero_not_zero.
+ unfold rs1. rewrite (sp_val ms sp rs). reflexivity.
+ auto. discriminate. reflexivity. assumption. assumption.
+Qed.
+
+(** Translation of memory loads. *)
+
+Lemma transl_load_correct:
+ forall (mk1: constant -> ireg -> instruction) (mk2: ireg -> ireg -> instruction)
+ chunk addr args k ms sp rs m dst a v,
+ (forall cst (r1: ireg) (rs1: regset),
+ exec_instr ge fn (mk1 cst r1) rs1 m =
+ load1 ge chunk (preg_of dst) cst r1 rs1 m) ->
+ (forall (r1 r2: ireg) (rs1: regset),
+ exec_instr ge fn (mk2 r1 r2) rs1 m =
+ load2 chunk (preg_of dst) r1 r2 rs1 m) ->
+ agree ms sp rs ->
+ map mreg_type args = type_of_addressing addr ->
+ eval_addressing ge sp addr (map ms args) = Some a ->
+ Mem.loadv chunk m a = Some v ->
+ exists rs',
+ exec_straight (transl_load_store mk1 mk2 addr args k) rs m
+ k rs' m
+ /\ agree (Regmap.set dst v ms) sp rs'.
+Proof.
+ intros. apply transl_load_store_correct with ms.
+ intros. exists (nextinstr (rs1#(preg_of dst) <- v)).
+ split. apply exec_straight_one. rewrite H.
+ unfold load1. rewrite gpr_or_zero_not_zero; auto.
+ rewrite <- (eval_addressing_weaken _ _ _ _ H3) in H4.
+ rewrite H5 in H4. rewrite H4. auto.
+ auto with ppcgen. auto with ppcgen.
+ intros. exists (nextinstr (rs1#(preg_of dst) <- v)).
+ split. apply exec_straight_one. rewrite H0.
+ unfold load2.
+ rewrite <- (eval_addressing_weaken _ _ _ _ H3) in H4.
+ rewrite H5 in H4. rewrite H4. auto.
+ auto with ppcgen. auto with ppcgen.
+ auto. auto.
+Qed.
+
+(** Translation of memory stores. *)
+
+Lemma transl_store_correct:
+ forall (mk1: constant -> ireg -> instruction) (mk2: ireg -> ireg -> instruction)
+ chunk addr args k ms sp rs m src a m',
+ (forall cst (r1: ireg) (rs1: regset),
+ exec_instr ge fn (mk1 cst r1) rs1 m =
+ store1 ge chunk (preg_of src) cst r1 rs1 m) ->
+ (forall (r1 r2: ireg) (rs1: regset),
+ exec_instr ge fn (mk2 r1 r2) rs1 m =
+ store2 chunk (preg_of src) r1 r2 rs1 m) ->
+ agree ms sp rs ->
+ map mreg_type args = type_of_addressing addr ->
+ eval_addressing ge sp addr (map ms args) = Some a ->
+ Mem.storev chunk m a (ms src) = Some m' ->
+ exists rs',
+ exec_straight (transl_load_store mk1 mk2 addr args k) rs m
+ k rs' m'
+ /\ agree ms sp rs'.
+Proof.
+ intros. apply transl_load_store_correct with ms.
+ intros. exists (nextinstr rs1).
+ split. apply exec_straight_one. rewrite H.
+ unfold store1. rewrite gpr_or_zero_not_zero; auto.
+ rewrite <- (eval_addressing_weaken _ _ _ _ H3) in H4.
+ rewrite H5 in H4. elim H6; intros. rewrite H9 in H4.
+ rewrite H4. auto.
+ auto with ppcgen. auto with ppcgen.
+ intros. exists (nextinstr rs1).
+ split. apply exec_straight_one. rewrite H0.
+ unfold store2.
+ rewrite <- (eval_addressing_weaken _ _ _ _ H3) in H4.
+ rewrite H5 in H4. elim H6; intros. rewrite H8 in H4.
+ rewrite H4. auto.
+ auto with ppcgen. auto with ppcgen.
+ auto. auto.
+Qed.
+
+End STRAIGHTLINE.
+
diff --git a/backend/Parallelmove.v b/backend/Parallelmove.v
new file mode 100644
index 0000000..f95416e
--- /dev/null
+++ b/backend/Parallelmove.v
@@ -0,0 +1,2529 @@
+(** Translation of parallel moves into sequences of individual moves *)
+
+(** The ``parallel move'' problem, also known as ``parallel assignment'',
+ is the following. We are given a list of (source, destination) pairs
+ of locations. The goal is to find a sequence of elementary
+ moves ([loc <- loc] assignments) such that, at the end of the sequence,
+ location [dst] contains the value of location [src] at the beginning of
+ the sequence, for each ([src], [dst]) pairs in the given problem.
+ Moreover, other locations should keep their values, except one register
+ of each type, which can be used as temporaries in the generated sequences.
+
+ The parallel move problem is trivial if the sources and destinations do
+ not overlap. For instance,
+<<
+ (R1, R2) <- (R3, R4) becomes R1 <- R3; R2 <- R4
+>>
+ However, arbitrary overlap is allowed between sources and destinations.
+ This requires some care in ordering the individual moves, as in
+<<
+ (R1, R2) <- (R3, R1) becomes R2 <- R1; R1 <- R3
+>>
+ Worse, cycles (permutations) can require the use of temporaries, as in
+<<
+ (R1, R2, R3) <- (R2, R3, R1) becomes T <- R1; R1 <- R2; R2 <- R3; R3 <- T;
+>>
+ An amazing fact is that for any parallel move problem, at most one temporary
+ (or in our case one integer temporary and one float temporary) is needed.
+
+ The development in this section was contributed by Laurence Rideau and
+ Bernard Serpette. It is described in their paper
+ ``Coq à la conquête des moulins'', JFLA 2005,
+ #<A HREF="http://www-sop.inria.fr/lemme/Laurence.Rideau/RideauSerpetteJFLA05.ps">#
+ http://www-sop.inria.fr/lemme/Laurence.Rideau/RideauSerpetteJFLA05.ps
+ #</A>#
+*)
+
+Require Omega.
+Require Import Wf_nat.
+Require Import Conventions.
+Require Import Coqlib.
+Require Import Bool_nat.
+Require Import TheoryList.
+Require Import Bool.
+Require Import Arith.
+Require Import Peano_dec.
+Require Import EqNat.
+Require Import Values.
+Require Import LTL.
+Require Import EqNat.
+Require Import Locations.
+Require Import AST.
+
+Section pmov.
+
+Ltac caseEq name := generalize (refl_equal name); pattern name at -1; case name.
+Hint Resolve beq_nat_eq .
+
+Lemma neq_is_neq: forall (x y : nat), x <> y -> beq_nat x y = false.
+Proof.
+unfold not; intros.
+caseEq (beq_nat x y); auto.
+intro.
+elim H; auto.
+Qed.
+Hint Resolve neq_is_neq .
+
+Lemma app_nil: forall (A : Set) (l : list A), l ++ nil = l.
+Proof.
+intros A l; induction l as [|a l Hrecl]; auto; simpl; rewrite Hrecl; auto.
+Qed.
+
+Lemma app_cons:
+ forall (A : Set) (l1 l2 : list A) (a : A), (a :: l1) ++ l2 = a :: (l1 ++ l2).
+Proof.
+auto.
+Qed.
+
+Lemma app_app:
+ forall (A : Set) (l1 l2 l3 : list A), l1 ++ (l2 ++ l3) = (l1 ++ l2) ++ l3.
+Proof.
+intros A l1; induction l1 as [|a l1 Hrecl1]; simpl; auto; intros;
+ rewrite Hrecl1; auto.
+Qed.
+
+Lemma app_rewrite:
+ forall (A : Set) (l : list A) (x : A),
+ (exists y : A , exists r : list A , l ++ (x :: nil) = y :: r ).
+Proof.
+intros A l x; induction l as [|a l Hrecl].
+exists x; exists (nil (A:=A)); auto.
+inversion Hrecl; inversion H.
+exists a; exists (l ++ (x :: nil)); auto.
+Qed.
+
+Lemma app_rewrite2:
+ forall (A : Set) (l l2 : list A) (x : A),
+ (exists y : A , exists r : list A , l ++ (x :: l2) = y :: r ).
+Proof.
+intros A l l2 x; induction l as [|a l Hrecl].
+exists x; exists l2; auto.
+inversion Hrecl; inversion H.
+exists a; exists (l ++ (x :: l2)); auto.
+Qed.
+
+Lemma app_rewriter:
+ forall (A : Set) (l : list A) (x : A),
+ (exists y : A , exists r : list A , x :: l = r ++ (y :: nil) ).
+Proof.
+intros A l x; induction l as [|a l Hrecl].
+exists x; exists (nil (A:=A)); auto.
+inversion Hrecl; inversion H.
+generalize H0; case x1; simpl; intros; inversion H1.
+exists a; exists (x0 :: nil); simpl; auto.
+exists x0; exists (a0 :: (a :: l0)); simpl; auto.
+Qed.
+Hint Resolve app_rewriter .
+
+Definition Reg := loc.
+
+Definition T :=
+ fun (r : loc) =>
+ match Loc.type r with Tint => R IT2 | Tfloat => R FT2 end.
+
+Definition notemporary := fun (r : loc) => forall x, Loc.diff r (T x).
+
+Definition Move := (Reg * Reg)%type.
+
+Definition Moves := list Move.
+
+Definition State := ((Moves * Moves) * Moves)%type.
+
+Definition StateToMove (r : State) : Moves :=
+ match r with ((t, b), l) => t end.
+
+Definition StateBeing (r : State) : Moves :=
+ match r with ((t, b), l) => b end.
+
+Definition StateDone (r : State) : Moves :=
+ match r with ((t, b), l) => l end.
+
+Fixpoint noRead (p : Moves) (r : Reg) {struct p} : Prop :=
+ match p with
+ nil => True
+ | (s, d) :: l => Loc.diff s r /\ noRead l r
+ end.
+
+Lemma noRead_app:
+ forall (l1 l2 : Moves) (r : Reg),
+ noRead l1 r -> noRead l2 r -> noRead (l1 ++ l2) r.
+Proof.
+intros; induction l1 as [|a l1 Hrecl1]; simpl; auto.
+destruct a.
+elim H; intros; split; auto.
+Qed.
+
+Inductive step : State -> State -> Prop :=
+ step_nop:
+ forall (r : Reg) (t1 t2 l : Moves),
+ step (t1 ++ ((r, r) :: t2), nil, l) (t1 ++ t2, nil, l)
+ | step_start:
+ forall (t1 t2 l : Moves) (m : Move),
+ step (t1 ++ (m :: t2), nil, l) (t1 ++ t2, m :: nil, l)
+ | step_push:
+ forall (t1 t2 b l : Moves) (s d r : Reg),
+ step
+ (t1 ++ ((d, r) :: t2), (s, d) :: b, l)
+ (t1 ++ t2, (d, r) :: ((s, d) :: b), l)
+ | step_loop:
+ forall (t b l : Moves) (s d r0 r0ounon : Reg),
+ step
+ (t, (s, r0ounon) :: (b ++ ((r0, d) :: nil)), l)
+ (t, (s, r0ounon) :: (b ++ ((T r0, d) :: nil)), (r0, T r0) :: l)
+ | step_pop:
+ forall (t b l : Moves) (s0 d0 sn dn : Reg),
+ noRead t dn ->
+ Loc.diff dn s0 ->
+ step
+ (t, (sn, dn) :: (b ++ ((s0, d0) :: nil)), l)
+ (t, b ++ ((s0, d0) :: nil), (sn, dn) :: l)
+ | step_last:
+ forall (t l : Moves) (s d : Reg),
+ noRead t d -> step (t, (s, d) :: nil, l) (t, nil, (s, d) :: l) .
+Hint Resolve step_nop step_start step_push step_loop step_pop step_last .
+
+Fixpoint path (l : Moves) : Prop :=
+ match l with
+ nil => True
+ | (s, d) :: l =>
+ match l with
+ nil => True
+ | (ss, dd) :: l2 => s = dd /\ path l
+ end
+ end.
+
+Lemma path_pop: forall (m : Move) (l : Moves), path (m :: l) -> path l.
+Proof.
+simpl; intros m l; destruct m as [ms md]; case l; auto.
+intros m0; destruct m0; intros; inversion H; auto.
+Qed.
+
+Fixpoint noWrite (p : Moves) (r : Reg) {struct p} : Prop :=
+ match p with
+ nil => True
+ | (s, d) :: l => Loc.diff d r /\ noWrite l r
+ end.
+
+Lemma noWrite_pop:
+ forall (p1 p2 : Moves) (m : Move) (r : Reg),
+ noWrite (p1 ++ (m :: p2)) r -> noWrite (p1 ++ p2) r.
+Proof.
+intros; induction p1 as [|a p1 Hrecp1].
+generalize H; simpl; case m; intros; inversion H0; auto.
+generalize H; rewrite app_cons; rewrite app_cons.
+simpl; case a; intros.
+inversion H0; split; auto.
+Qed.
+
+Lemma noWrite_in:
+ forall (p1 p2 : Moves) (r0 r1 r2 : Reg),
+ noWrite (p1 ++ ((r1, r2) :: p2)) r0 -> Loc.diff r0 r2.
+Proof.
+intros; induction p1 as [|a p1 Hrecp1]; simpl; auto.
+generalize H; simpl; intros; inversion H0; auto.
+apply Loc.diff_sym; auto.
+generalize H; rewrite app_cons; simpl; case a; intros.
+apply Hrecp1; inversion H0; auto.
+Qed.
+
+Lemma noWrite_swap:
+ forall (p : Moves) (m1 m2 : Move) (r : Reg),
+ noWrite (m1 :: (m2 :: p)) r -> noWrite (m2 :: (m1 :: p)) r.
+Proof.
+intros p m1 m2 r; simpl; case m1; case m2.
+intros; inversion H; inversion H1; split; auto.
+Qed.
+
+Lemma noWrite_movFront:
+ forall (p1 p2 : Moves) (m : Move) (r0 : Reg),
+ noWrite (p1 ++ (m :: p2)) r0 -> noWrite (m :: (p1 ++ p2)) r0.
+Proof.
+intros p1 p2 m r0; induction p1 as [|a p1 Hrecp1]; auto.
+case a; intros r1 r2; rewrite app_cons; rewrite app_cons.
+intros; apply noWrite_swap; rewrite <- app_cons.
+simpl in H |-; inversion H; unfold noWrite; fold noWrite; auto.
+Qed.
+
+Lemma noWrite_insert:
+ forall (p1 p2 : Moves) (m : Move) (r0 : Reg),
+ noWrite (m :: (p1 ++ p2)) r0 -> noWrite (p1 ++ (m :: p2)) r0.
+Proof.
+intros p1 p2 m r0; induction p1 as [|a p1 Hrecp1].
+simpl; auto.
+destruct a; simpl.
+destruct m.
+intros [H1 [H2 H3]]; split; auto.
+apply Hrecp1.
+simpl; auto.
+Qed.
+
+Lemma noWrite_tmpLast:
+ forall (t : Moves) (r s d : Reg),
+ noWrite (t ++ ((s, d) :: nil)) r ->
+ forall (x : Reg), noWrite (t ++ ((x, d) :: nil)) r.
+Proof.
+intros; induction t as [|a t Hrect].
+simpl; auto.
+generalize H; simpl; case a; intros; inversion H0; split; auto.
+Qed.
+
+Fixpoint simpleDest (p : Moves) : Prop :=
+ match p with
+ nil => True
+ | (s, d) :: l => noWrite l d /\ simpleDest l
+ end.
+
+Lemma simpleDest_Pop:
+ forall (m : Move) (l1 l2 : Moves),
+ simpleDest (l1 ++ (m :: l2)) -> simpleDest (l1 ++ l2).
+Proof.
+intros; induction l1 as [|a l1 Hrecl1].
+generalize H; simpl; case m; intros; inversion H0; auto.
+generalize H; rewrite app_cons; rewrite app_cons.
+simpl; case a; intros; inversion H0; split; auto.
+apply (noWrite_pop l1 l2 m); auto.
+Qed.
+
+Lemma simpleDest_pop:
+ forall (m : Move) (l : Moves), simpleDest (m :: l) -> simpleDest l.
+Proof.
+intros m l; simpl; case m; intros _ r [X Y]; auto.
+Qed.
+
+Lemma simpleDest_right:
+ forall (l1 l2 : Moves), simpleDest (l1 ++ l2) -> simpleDest l2.
+Proof.
+intros l1; induction l1 as [|a l1 Hrecl1]; auto.
+intros l2; rewrite app_cons; intros; apply Hrecl1.
+apply (simpleDest_pop a); auto.
+Qed.
+
+Lemma simpleDest_swap:
+ forall (m1 m2 : Move) (l : Moves),
+ simpleDest (m1 :: (m2 :: l)) -> simpleDest (m2 :: (m1 :: l)).
+Proof.
+intros m1 m2 l; simpl; case m1; case m2.
+intros _ r0 _ r2 [[X Y] [Z U]]; auto.
+(repeat split); auto.
+apply Loc.diff_sym; auto.
+Qed.
+
+Lemma simpleDest_pop2:
+ forall (m1 m2 : Move) (l : Moves),
+ simpleDest (m1 :: (m2 :: l)) -> simpleDest (m1 :: l).
+Proof.
+intros; apply (simpleDest_pop m2); apply simpleDest_swap; auto.
+Qed.
+
+Lemma simpleDest_movFront:
+ forall (p1 p2 : Moves) (m : Move),
+ simpleDest (p1 ++ (m :: p2)) -> simpleDest (m :: (p1 ++ p2)).
+Proof.
+intros p1 p2 m; induction p1 as [|a p1 Hrecp1].
+simpl; auto.
+rewrite app_cons; rewrite app_cons.
+case a; intros; simpl in H |-; inversion H.
+apply simpleDest_swap; simpl; auto.
+destruct m.
+cut (noWrite ((r1, r2) :: (p1 ++ p2)) r0).
+cut (simpleDest ((r1, r2) :: (p1 ++ p2))).
+intro; (repeat split); elim H3; elim H2; intros; auto.
+apply Hrecp1; auto.
+apply noWrite_movFront; auto.
+Qed.
+
+Lemma simpleDest_insert:
+ forall (p1 p2 : Moves) (m : Move),
+ simpleDest (m :: (p1 ++ p2)) -> simpleDest (p1 ++ (m :: p2)).
+Proof.
+intros p1 p2 m; induction p1 as [|a p1 Hrecp1].
+simpl; auto.
+rewrite app_cons; intros.
+simpl.
+destruct a as [a1 a2].
+split.
+destruct m; simpl in H |-.
+apply noWrite_insert.
+simpl; split; elim H; intros [H1 H2] [H3 H4]; auto.
+apply Loc.diff_sym; auto.
+apply Hrecp1.
+apply simpleDest_pop2 with (a1, a2); auto.
+Qed.
+
+Lemma simpleDest_movBack:
+ forall (p1 p2 : Moves) (m : Move),
+ simpleDest (p1 ++ (m :: p2)) -> simpleDest ((p1 ++ p2) ++ (m :: nil)).
+Proof.
+intros.
+apply (simpleDest_insert (p1 ++ p2) nil m).
+rewrite app_nil; apply simpleDest_movFront; auto.
+Qed.
+
+Lemma simpleDest_swap_app:
+ forall (t1 t2 t3 : Moves) (m : Move),
+ simpleDest (t1 ++ (m :: (t2 ++ t3))) -> simpleDest ((t1 ++ t2) ++ (m :: t3)).
+Proof.
+intros.
+apply (simpleDest_insert (t1 ++ t2) t3 m).
+rewrite <- app_app.
+apply simpleDest_movFront; auto.
+Qed.
+
+Lemma simpleDest_tmpLast:
+ forall (t : Moves) (s d : Reg),
+ simpleDest (t ++ ((s, d) :: nil)) ->
+ forall (r : Reg), simpleDest (t ++ ((r, d) :: nil)).
+Proof.
+intros t s d; induction t as [|a t Hrect].
+simpl; auto.
+simpl; case a; intros; inversion H; split; auto.
+apply (noWrite_tmpLast t r0 s); auto.
+Qed.
+
+Fixpoint noTmp (b : Moves) : Prop :=
+ match b with
+ nil => True
+ | (s, d) :: l =>
+ (forall r, Loc.diff s (T r)) /\
+ ((forall r, Loc.diff d (T r)) /\ noTmp l)
+ end.
+
+Fixpoint noTmpLast (b : Moves) : Prop :=
+ match b with
+ nil => True
+ | (s, d) :: nil => forall r, Loc.diff d (T r)
+ | (s, d) :: l =>
+ (forall r, Loc.diff s (T r)) /\
+ ((forall r, Loc.diff d (T r)) /\ noTmpLast l)
+ end.
+
+Lemma noTmp_app:
+ forall (l1 l2 : Moves) (m : Move),
+ noTmp l1 -> noTmpLast (m :: l2) -> noTmpLast (l1 ++ (m :: l2)).
+Proof.
+intros.
+induction l1 as [|a l1 Hrecl1].
+simpl; auto.
+simpl.
+caseEq (l1 ++ (m :: l2)); intro.
+destruct a.
+elim H; intros; auto.
+inversion H; auto.
+elim H3; auto.
+intros; destruct a as [a1 a2].
+elim H; intros H2 [H3 H4]; auto.
+(repeat split); auto.
+rewrite H1 in Hrecl1; apply Hrecl1; auto.
+Qed.
+
+Lemma noTmpLast_popBack:
+ forall (t : Moves) (m : Move), noTmpLast (t ++ (m :: nil)) -> noTmp t.
+Proof.
+intros.
+induction t as [|a t Hrect].
+simpl; auto.
+destruct a as [a1 a2].
+rewrite app_cons in H.
+simpl.
+simpl in H |-.
+generalize H; caseEq (t ++ (m :: nil)); intros.
+destruct t; inversion H0.
+elim H1.
+intros H2 [H3 H4]; (repeat split); auto.
+rewrite <- H0 in H4.
+apply Hrect; auto.
+Qed.
+
+Fixpoint getsrc (p : Moves) : list Reg :=
+ match p with
+ nil => nil
+ | (s, d) :: l => s :: getsrc l
+ end.
+
+Fixpoint getdst (p : Moves) : list Reg :=
+ match p with
+ nil => nil
+ | (s, d) :: l => d :: getdst l
+ end.
+
+Fixpoint noOverlap_aux (r : Reg) (l : list Reg) {struct l} : Prop :=
+ match l with
+ nil => True
+ | b :: m => (b = r \/ Loc.diff b r) /\ noOverlap_aux r m
+ end.
+
+Definition noOverlap (p : Moves) : Prop :=
+ forall l, In l (getsrc p) -> noOverlap_aux l (getdst p).
+
+Definition stepInv (r : State) : Prop :=
+ path (StateBeing r) /\
+ (simpleDest (StateToMove r ++ StateBeing r) /\
+ (noOverlap (StateToMove r ++ StateBeing r) /\
+ (noTmp (StateToMove r) /\ noTmpLast (StateBeing r)))).
+
+Definition Value := val.
+
+Definition Env := locset.
+
+Definition get (e : Env) (r : Reg) := Locmap.get r e.
+
+Definition update (e : Env) (r : Reg) (v : Value) : Env := Locmap.set r v e.
+
+Fixpoint sexec (p : Moves) (e : Env) {struct p} : Env :=
+ match p with
+ nil => e
+ | (s, d) :: l => let e' := sexec l e in
+ update e' d (get e' s)
+ end.
+
+Fixpoint pexec (p : Moves) (e : Env) {struct p} : Env :=
+ match p with
+ nil => e
+ | (s, d) :: l => update (pexec l e) d (get e s)
+ end.
+
+Lemma get_update:
+ forall (e : Env) (r1 r2 : Reg) (v : Value),
+ get (update e r1 v) r2 =
+ (if Loc.eq r1 r2 then v else if Loc.overlap r1 r2 then Vundef else get e r2).
+Proof.
+intros.
+unfold update, get, Locmap.get, Locmap.set; trivial.
+Qed.
+
+Lemma get_update_id:
+ forall (e : Env) (r1 : Reg) (v : Value), get (update e r1 v) r1 = v.
+Proof.
+intros e r1 v; rewrite (get_update e r1 r1); auto.
+case (Loc.eq r1 r1); auto.
+intros H; elim H; trivial.
+Qed.
+
+Lemma get_update_diff:
+ forall (e : Env) (r1 r2 : Reg) (v : Value),
+ Loc.diff r1 r2 -> get (update e r1 v) r2 = get e r2.
+Proof.
+intros; unfold update, get, Locmap.get, Locmap.set.
+case (Loc.eq r1 r2); intro.
+absurd (r1 = r2); [apply Loc.diff_not_eq; trivial | trivial].
+caseEq (Loc.overlap r1 r2); intro; trivial.
+absurd (Loc.diff r1 r2); [apply Loc.overlap_not_diff; assumption | assumption].
+Qed.
+
+Lemma get_update_ndiff:
+ forall (e : Env) (r1 r2 : Reg) (v : Value),
+ r1 <> r2 -> not (Loc.diff r1 r2) -> get (update e r1 v) r2 = Vundef.
+Proof.
+intros; unfold update, get, Locmap.get, Locmap.set.
+case (Loc.eq r1 r2); intro.
+absurd (r1 = r2); assumption.
+caseEq (Loc.overlap r1 r2); intro; trivial.
+absurd (Loc.diff r1 r2); (try assumption).
+apply Loc.non_overlap_diff; assumption.
+Qed.
+
+Lemma pexec_swap:
+ forall (m1 m2 : Move) (t : Moves),
+ simpleDest (m1 :: (m2 :: t)) ->
+ forall (e : Env) (r : Reg),
+ get (pexec (m1 :: (m2 :: t)) e) r = get (pexec (m2 :: (m1 :: t)) e) r.
+Proof.
+intros; destruct m1 as [m1s m1d]; destruct m2 as [m2s m2d].
+generalize H; simpl; intros [[NEQ NW] [NW2 HSD]]; clear H.
+case (Loc.eq m1d r); case (Loc.eq m2d r); intros.
+absurd (m1d = m2d);
+ [apply Loc.diff_not_eq; apply Loc.diff_sym; assumption |
+ rewrite e0; rewrite e1; trivial].
+caseEq (Loc.overlap m2d r); intro.
+absurd (Loc.diff m2d m1d); [apply Loc.overlap_not_diff; rewrite e0 | idtac];
+ (try assumption).
+subst m1d; rewrite get_update_id; rewrite get_update_diff;
+ (try rewrite get_update_id); auto.
+caseEq (Loc.overlap m1d r); intro.
+absurd (Loc.diff m1d m2d);
+ [apply Loc.overlap_not_diff; rewrite e0 | apply Loc.diff_sym]; assumption.
+subst m2d; (repeat rewrite get_update_id); rewrite get_update_diff;
+ [rewrite get_update_id; trivial | apply Loc.diff_sym; trivial].
+caseEq (Loc.overlap m1d r); caseEq (Loc.overlap m2d r); intros.
+(repeat rewrite get_update_ndiff);
+ (try (apply Loc.overlap_not_diff; assumption)); trivial.
+assert (~ Loc.diff m1d r);
+ [apply Loc.overlap_not_diff; assumption |
+ intros; rewrite get_update_ndiff; auto].
+rewrite get_update_diff;
+ [rewrite get_update_ndiff; auto | apply Loc.non_overlap_diff; auto].
+cut (~ Loc.diff m2d r); [idtac | apply Loc.overlap_not_diff; auto].
+cut (Loc.diff m1d r); [idtac | apply Loc.non_overlap_diff; auto].
+intros; rewrite get_update_diff; auto.
+(repeat rewrite get_update_ndiff); auto.
+cut (Loc.diff m1d r); [idtac | apply Loc.non_overlap_diff; auto].
+cut (Loc.diff m2d r); [idtac | apply Loc.non_overlap_diff; auto].
+intros; (repeat rewrite get_update_diff); auto.
+Qed.
+
+Lemma pexec_add:
+ forall (t1 t2 : Moves) (r : Reg) (e : Env),
+ get (pexec t1 e) r = get (pexec t2 e) r ->
+ forall (a : Move), get (pexec (a :: t1) e) r = get (pexec (a :: t2) e) r.
+Proof.
+intros.
+case a.
+simpl.
+intros a1 a2.
+unfold get, update, Locmap.set, Locmap.get.
+case (Loc.eq a2 r); case (Loc.overlap a2 r); auto.
+Qed.
+
+Lemma pexec_movBack:
+ forall (t1 t2 : Moves) (m : Move),
+ simpleDest (m :: (t1 ++ t2)) ->
+ forall (e : Env) (r : Reg),
+ get (pexec (m :: (t1 ++ t2)) e) r = get (pexec (t1 ++ (m :: t2)) e) r.
+Proof.
+intros t1 t2 m; induction t1 as [|a t1 Hrect1].
+simpl; auto.
+rewrite app_cons.
+intros; rewrite pexec_swap; auto; rewrite app_cons; auto.
+apply pexec_add.
+apply Hrect1.
+apply (simpleDest_pop2 m a); auto.
+Qed.
+
+Lemma pexec_movFront:
+ forall (t1 t2 : Moves) (m : Move),
+ simpleDest (t1 ++ (m :: t2)) ->
+ forall (e : Env) (r : Reg),
+ get (pexec (t1 ++ (m :: t2)) e) r = get (pexec (m :: (t1 ++ t2)) e) r.
+Proof.
+intros; rewrite <- pexec_movBack; eauto.
+apply simpleDest_movFront; auto.
+Qed.
+
+Lemma pexec_mov:
+ forall (t1 t2 t3 : Moves) (m : Move),
+ simpleDest ((t1 ++ (m :: t2)) ++ t3) ->
+ forall (e : Env) (r : Reg),
+ get (pexec ((t1 ++ (m :: t2)) ++ t3) e) r =
+ get (pexec ((t1 ++ t2) ++ (m :: t3)) e) r.
+Proof.
+intros t1 t2 t3 m.
+rewrite <- app_app.
+rewrite app_cons.
+intros.
+rewrite pexec_movFront; auto.
+cut (simpleDest (m :: (t1 ++ (t2 ++ t3)))).
+rewrite app_app.
+rewrite <- pexec_movFront; auto.
+apply simpleDest_swap_app; auto.
+apply simpleDest_movFront; auto.
+Qed.
+
+Definition diff_dec:
+ forall (x y : Reg), ({ Loc.diff x y }) + ({ not (Loc.diff x y) }).
+intros.
+case (Loc.eq x y).
+intros heq; right.
+red; intro; absurd (x = y); auto.
+apply Loc.diff_not_eq; auto.
+intro; caseEq (Loc.overlap x y).
+intro; right.
+apply Loc.overlap_not_diff; auto.
+intro; left; apply Loc.non_overlap_diff; auto.
+Defined.
+
+Lemma get_pexec_id_noWrite:
+ forall (t : Moves) (d : Reg),
+ noWrite t d ->
+ forall (e : Env) (v : Value), v = get (pexec t (update e d v)) d.
+Proof.
+intros.
+induction t as [|a t Hrect].
+simpl.
+rewrite get_update_id; auto.
+generalize H; destruct a as [a1 a2]; simpl; intros [NEQ R].
+rewrite get_update_diff; auto.
+Qed.
+
+Lemma pexec_nop:
+ forall (t : Moves) (r : Reg) (e : Env) (x : Reg),
+ Loc.diff r x -> get (pexec ((r, r) :: t) e) x = get (pexec t e) x.
+Proof.
+intros.
+simpl.
+rewrite get_update_diff; auto.
+Qed.
+
+Lemma sD_nW: forall t r s, simpleDest ((s, r) :: t) -> noWrite t r.
+Proof.
+induction t.
+simpl; auto.
+simpl.
+destruct a.
+intros r1 r2 H; split; [try assumption | idtac].
+elim H;
+ [intros H0 H1; elim H0; [intros H2 H3; (try clear H0 H); (try exact H2)]].
+elim H;
+ [intros H0 H1; elim H0; [intros H2 H3; (try clear H0 H); (try exact H3)]].
+Qed.
+
+Lemma sD_pexec:
+ forall (t : Moves) (s d : Reg),
+ simpleDest ((s, d) :: t) -> forall (e : Env), get (pexec t e) d = get e d.
+Proof.
+intros.
+induction t as [|a t Hrect]; simpl; auto.
+destruct a as [a1 a2].
+simpl in H |-; elim H; intros [H0 H1] [H2 H3]; clear H.
+case (Loc.eq a2 d); intro.
+absurd (a2 = d); [apply Loc.diff_not_eq | trivial]; assumption.
+rewrite get_update_diff; (try assumption).
+apply Hrect.
+simpl; (split; assumption).
+Qed.
+
+Lemma noOverlap_nil: noOverlap nil.
+Proof.
+unfold noOverlap, noOverlap_aux, getsrc, getdst; trivial.
+Qed.
+
+Lemma getsrc_add:
+ forall (m : Move) (l1 l2 : Moves) (l : Reg),
+ In l (getsrc (l1 ++ l2)) -> In l (getsrc (l1 ++ (m :: l2))).
+Proof.
+intros m l1 l2 l; destruct m; induction l1; simpl; auto.
+destruct a; simpl; intros.
+elim H; intros H0; [left | right]; auto.
+Qed.
+
+Lemma getdst_add:
+ forall (r1 r2 : Reg) (l1 l2 : Moves),
+ getdst (l1 ++ ((r1, r2) :: l2)) = getdst l1 ++ (r2 :: getdst l2).
+Proof.
+intros r1 r2 l1 l2; induction l1; simpl; auto.
+destruct a; simpl; rewrite IHl1; auto.
+Qed.
+
+Lemma getdst_app:
+ forall (l1 l2 : Moves), getdst (l1 ++ l2) = getdst l1 ++ getdst l2.
+Proof.
+intros; induction l1; simpl; auto.
+destruct a; simpl; rewrite IHl1; auto.
+Qed.
+
+Lemma noOverlap_auxpop:
+ forall (x r : Reg) (l : list Reg),
+ noOverlap_aux x (r :: l) -> noOverlap_aux x l.
+Proof.
+induction l; simpl; auto.
+intros [H1 [H2 H3]]; split; auto.
+Qed.
+
+Lemma noOverlap_auxPop:
+ forall (x r : Reg) (l1 l2 : list Reg),
+ noOverlap_aux x (l1 ++ (r :: l2)) -> noOverlap_aux x (l1 ++ l2).
+Proof.
+intros x r l1 l2; (try assumption).
+induction l1 as [|a l1 Hrecl1]; simpl app.
+intro; apply (noOverlap_auxpop x r); auto.
+(repeat rewrite app_cons); simpl.
+intros [H1 H2]; split; auto.
+Qed.
+
+Lemma noOverlap_pop:
+ forall (m : Move) (l : Moves), noOverlap (m :: l) -> noOverlap l.
+Proof.
+induction l.
+intro; apply noOverlap_nil.
+unfold noOverlap; simpl; destruct m; destruct a; simpl; intros.
+elim (H l0); intros; (try assumption).
+elim H0; intros H1; right; [left | right]; assumption.
+Qed.
+
+Lemma noOverlap_Pop:
+ forall (m : Move) (l1 l2 : Moves),
+ noOverlap (l1 ++ (m :: l2)) -> noOverlap (l1 ++ l2).
+Proof.
+intros m l1 l2; induction l1 as [|a l1 Hrecl1]; simpl.
+simpl; apply noOverlap_pop.
+(repeat rewrite app_cons); unfold noOverlap; destruct a; simpl.
+intros H l H0; split.
+elim (H l); [intros H1 H2 | idtac]; auto.
+elim H0; [intros H3; left | intros H3; right; apply getsrc_add]; auto.
+unfold noOverlap in Hrecl1 |-.
+elim H0; intros H1; clear H0.
+destruct m; rewrite getdst_app; apply noOverlap_auxPop with ( r := r2 ).
+rewrite getdst_add in H.
+elim H with ( l := l ); [intros H0 H2; (try clear H); (try exact H2) | idtac].
+left; (try assumption).
+apply Hrecl1 with ( l := l ); auto.
+intros l0 H0; (try assumption).
+elim H with ( l := l0 ); [intros H2 H3; (try clear H); (try exact H3) | idtac];
+ auto.
+Qed.
+
+Lemma noOverlap_right:
+ forall (l1 l2 : Moves), noOverlap (l1 ++ l2) -> noOverlap l2.
+Proof.
+intros l1; induction l1 as [|a l1 Hrecl1]; auto.
+intros l2; rewrite app_cons; intros; apply Hrecl1.
+apply (noOverlap_pop a); auto.
+Qed.
+
+Lemma pexec_update:
+ forall t e d r v,
+ Loc.diff d r ->
+ noRead t d -> get (pexec t (update e d v)) r = get (pexec t e) r.
+Proof.
+induction t; simpl.
+intros; rewrite get_update_diff; auto.
+destruct a as [a1 a2]; intros; case (Loc.eq a2 r); intro.
+subst a2; (repeat rewrite get_update_id).
+rewrite get_update_diff; auto; apply Loc.diff_sym; elim H0; auto.
+case (diff_dec a2 r); intro.
+(repeat rewrite get_update_diff); auto.
+apply IHt; auto.
+elim H0; auto.
+(repeat rewrite get_update_ndiff); auto.
+Qed.
+
+Lemma pexec_push:
+ forall (t l : Moves) (s d : Reg),
+ noRead t d ->
+ simpleDest ((s, d) :: t) ->
+ forall (e : Env) (r : Reg),
+ r = d \/ Loc.diff d r ->
+ get (pexec ((s, d) :: t) (sexec l e)) r =
+ get (pexec t (sexec ((s, d) :: l) e)) r.
+Proof.
+intros; simpl.
+elim H1; intros e1.
+rewrite e1; rewrite get_update_id; auto.
+rewrite (sD_pexec t s d); auto; rewrite get_update_id; auto.
+rewrite pexec_update; auto.
+rewrite get_update_diff; auto.
+Qed.
+
+Definition exec (s : State) (e : Env) :=
+ pexec (StateToMove s ++ StateBeing s) (sexec (StateDone s) e).
+
+Definition sameEnv (e1 e2 : Env) :=
+ forall (r : Reg), notemporary r -> get e1 r = get e2 r.
+
+Definition NoOverlap (r : Reg) (s : State) :=
+ noOverlap ((r, r) :: (StateToMove s ++ StateBeing s)).
+
+Lemma noOverlapaux_swap2:
+ forall (l1 l2 : list Reg) (m l : Reg),
+ noOverlap_aux l (l1 ++ (m :: l2)) -> noOverlap_aux l (m :: (l1 ++ l2)).
+Proof.
+intros l1 l2 m l; induction l1; simpl noOverlap_aux; auto.
+intros; elim H; intros H0 H1; (repeat split); auto.
+simpl in IHl1 |-.
+elim IHl1; [intros H2 H3; (try exact H2) | idtac]; auto.
+apply (noOverlap_auxpop l m).
+apply IHl1; auto.
+Qed.
+
+Lemma noTmp_noReadTmp: forall t, noTmp t -> forall s, noRead t (T s).
+Proof.
+induction t; simpl; auto.
+destruct a as [a1 a2]; intros.
+split; [idtac | apply IHt]; elim H; intros H1 [H2 H3]; auto.
+Qed.
+
+Lemma noRead_by_path:
+ forall (b t : Moves) (r0 r1 r7 r8 : Reg),
+ simpleDest ((r7, r8) :: (b ++ ((r0, r1) :: nil))) ->
+ path (b ++ ((r0, r1) :: nil)) -> Loc.diff r8 r0 -> noRead b r8.
+Proof.
+intros; induction b as [|a b Hrecb]; simpl; auto.
+destruct a as [a1 a2]; generalize H H0; rewrite app_cons; intros; split.
+simpl in H3 |-; caseEq (b ++ ((r0, r1) :: nil)); intro.
+destruct b; inversion H4.
+intros l H4.
+rewrite H4 in H3.
+destruct m.
+rewrite H4 in H2; simpl in H2 |-.
+elim H3; [intros H5 H6; (try clear H3); (try exact H5)].
+rewrite H5.
+elim H2; intros [H3 [H7 H8]] [H9 [H10 H11]]; (try assumption).
+apply Hrecb.
+apply (simpleDest_pop (a1, a2)); apply simpleDest_swap; auto.
+apply (path_pop (a1, a2)); auto.
+Qed.
+
+Lemma noOverlap_swap:
+ forall (m1 m2 : Move) (l : Moves),
+ noOverlap (m1 :: (m2 :: l)) -> noOverlap (m2 :: (m1 :: l)).
+Proof.
+intros m1 m2 l; simpl; destruct m1 as [m1s m1d]; destruct m2 as [m2s m2d].
+unfold noOverlap; simpl; intros.
+assert (m1s = l0 \/ (m2s = l0 \/ In l0 (getsrc l))).
+elim H0; [intros H1 | intros [H1|H2]].
+right; left; (try assumption).
+left; (try assumption).
+right; right; (try assumption).
+(repeat split);
+ (elim (H l0); [intros H2 H3; elim H3; [intros H4 H5] | idtac]; auto).
+Qed.
+
+Lemma getsrc_add1:
+ forall (r1 r2 : Reg) (l1 l2 : Moves),
+ getsrc (l1 ++ ((r1, r2) :: l2)) = getsrc l1 ++ (r1 :: getsrc l2).
+Proof.
+intros r1 r2 l1 l2; induction l1; simpl; auto.
+destruct a; simpl; rewrite IHl1; auto.
+Qed.
+
+Lemma getsrc_app:
+ forall (l1 l2 : Moves), getsrc (l1 ++ l2) = getsrc l1 ++ getsrc l2.
+Proof.
+intros; induction l1; simpl; auto.
+destruct a; simpl; rewrite IHl1; auto.
+Qed.
+
+Lemma Ingetsrc_swap:
+ forall (m : Move) (l1 l2 : Moves) (l : Reg),
+ In l (getsrc (m :: (l1 ++ l2))) -> In l (getsrc (l1 ++ (m :: l2))).
+Proof.
+intros; destruct m as [m1 m2]; simpl; auto.
+simpl in H |-.
+elim H; intros H0; auto.
+rewrite H0; rewrite getsrc_add1; auto.
+apply (in_or_app (getsrc l1) (l :: getsrc l2)); auto.
+right; apply in_eq; auto.
+apply getsrc_add; auto.
+Qed.
+
+Lemma noOverlap_movFront:
+ forall (p1 p2 : Moves) (m : Move),
+ noOverlap (p1 ++ (m :: p2)) -> noOverlap (m :: (p1 ++ p2)).
+Proof.
+intros p1 p2 m; unfold noOverlap.
+destruct m; rewrite getdst_add; simpl getdst; rewrite getdst_app; intros.
+apply noOverlapaux_swap2.
+apply (H l); apply Ingetsrc_swap; auto.
+Qed.
+
+Lemma step_inv_loop_aux:
+ forall (t l : Moves) (s d : Reg),
+ simpleDest (t ++ ((s, d) :: nil)) ->
+ noTmp t ->
+ forall (e : Env) (r : Reg),
+ notemporary r ->
+ d = r \/ Loc.diff d r ->
+ get (pexec (t ++ ((s, d) :: nil)) (sexec l e)) r =
+ get (pexec (t ++ ((T s, d) :: nil)) (sexec ((s, T s) :: l) e)) r.
+Proof.
+intros; (repeat rewrite pexec_movFront); auto.
+(repeat rewrite app_nil); simpl; elim H2; intros e1.
+subst d; (repeat rewrite get_update_id); auto.
+(repeat rewrite get_update_diff); auto.
+rewrite pexec_update; auto.
+apply Loc.diff_sym; unfold notemporary in H1 |-; auto.
+apply noTmp_noReadTmp; auto.
+apply (simpleDest_tmpLast t s); auto.
+Qed.
+
+Lemma step_inv_loop:
+ forall (t l : Moves) (s d : Reg),
+ simpleDest (t ++ ((s, d) :: nil)) ->
+ noTmpLast (t ++ ((s, d) :: nil)) ->
+ forall (e : Env) (r : Reg),
+ notemporary r ->
+ d = r \/ Loc.diff d r ->
+ get (pexec (t ++ ((s, d) :: nil)) (sexec l e)) r =
+ get (pexec (t ++ ((T s, d) :: nil)) (sexec ((s, T s) :: l) e)) r.
+Proof.
+intros; apply step_inv_loop_aux; auto.
+apply (noTmpLast_popBack t (s, d)); auto.
+Qed.
+
+Definition sameExec (s1 s2 : State) :=
+ forall (e : Env) (r : Reg),
+ (let A :=
+ getdst
+ ((StateToMove s1 ++ StateBeing s1) ++ (StateToMove s2 ++ StateBeing s2))
+ in
+ notemporary r ->
+ (forall x, In x A -> r = x \/ Loc.diff r x) ->
+ get (exec s1 e) r = get (exec s2 e) r).
+
+Lemma get_noWrite:
+ forall (t : Moves) (d : Reg),
+ noWrite t d -> forall (e : Env), get e d = get (pexec t e) d.
+Proof.
+intros; induction t as [|a t Hrect]; simpl; auto.
+generalize H; destruct a as [a1 a2]; simpl; intros [NEQ R].
+unfold get, Locmap.get, update, Locmap.set.
+case (Loc.eq a2 d); intro; auto.
+absurd (a2 = d); auto; apply Loc.diff_not_eq; (try assumption).
+caseEq (Loc.overlap a2 d); intro.
+absurd (Loc.diff a2 d); auto; apply Loc.overlap_not_diff; auto.
+unfold get, Locmap.get in Hrect |-; apply Hrect; auto.
+Qed.
+
+Lemma step_sameExec:
+ forall (r1 r2 : State), step r1 r2 -> stepInv r1 -> sameExec r1 r2.
+Proof.
+intros r1 r2 STEP; inversion STEP;
+ unfold stepInv, sameExec, NoOverlap, exec, StateToMove, StateBeing, StateDone;
+ (repeat rewrite app_nil); intros [P [SD [NO [TT TB]]]]; intros.
+rewrite pexec_movFront; simpl; auto.
+case (Loc.eq r r0); intros e0.
+subst r0; rewrite get_update_id; apply get_noWrite; apply sD_nW with r;
+ apply simpleDest_movFront; auto.
+elim H2 with ( x := r );
+ [intros H3; absurd (r = r0); auto |
+ intros H3; rewrite get_update_diff; auto; apply Loc.diff_sym; auto | idtac].
+(repeat (rewrite getdst_app; simpl)); apply in_or_app; left; apply in_or_app;
+ right; simpl; auto.
+(repeat rewrite pexec_movFront); auto.
+rewrite app_nil; auto.
+apply simpleDest_movBack; auto.
+apply pexec_mov; auto.
+repeat (rewrite <- app_cons; rewrite app_app).
+apply step_inv_loop; auto.
+repeat (rewrite <- app_app; rewrite app_cons; auto).
+repeat (rewrite <- app_app; rewrite app_cons; auto).
+apply noTmp_app; auto.
+elim H2 with ( x := d );
+ [intros H3; left; auto | intros H3; right; apply Loc.diff_sym; auto
+ | try clear H2].
+repeat (rewrite getdst_app; simpl).
+apply in_or_app; left; apply in_or_app; right; simpl; right; apply in_or_app;
+ right; simpl; left; trivial.
+rewrite pexec_movFront; auto; apply pexec_push; auto.
+apply noRead_app; auto.
+apply noRead_app.
+apply (noRead_by_path b b s0 d0 sn dn); auto.
+apply (simpleDest_right t); auto.
+apply (path_pop (sn, dn)); auto.
+simpl; split; [apply Loc.diff_sym | idtac]; auto.
+apply simpleDest_movFront; auto.
+elim H4 with ( x := dn ); [intros H5 | intros H5 | try clear H4].
+left; (try assumption).
+right; apply Loc.diff_sym; (try assumption).
+repeat (rewrite getdst_app; simpl).
+apply in_or_app; left; apply in_or_app; right; simpl; left; trivial.
+rewrite pexec_movFront; auto.
+rewrite app_nil; auto.
+apply pexec_push; auto.
+rewrite <- (app_nil _ t).
+apply simpleDest_movFront; auto.
+elim (H3 d); (try intros H4).
+left; (try assumption).
+right; apply Loc.diff_sym; (try assumption).
+(repeat rewrite getdst_app); simpl; apply in_or_app; left; apply in_or_app;
+ right; simpl; left; trivial.
+Qed.
+
+Lemma path_tmpLast:
+ forall (s d : Reg) (l : Moves),
+ path (l ++ ((s, d) :: nil)) -> path (l ++ ((T s, d) :: nil)).
+Proof.
+intros; induction l as [|a l Hrecl].
+simpl; auto.
+generalize H; (repeat rewrite app_cons).
+case a; generalize Hrecl; case l; intros; auto.
+destruct m; intros.
+inversion H0; split; auto.
+Qed.
+
+Lemma step_inv_path:
+ forall (r1 r2 : State), step r1 r2 -> stepInv r1 -> path (StateBeing r2).
+Proof.
+intros r1 r2 STEP; inversion_clear STEP; unfold stepInv;
+ unfold stepInv, sameExec, sameEnv, exec, StateToMove, StateBeing, StateDone;
+ intros [P [SD [TT TB]]]; (try (simpl; auto; fail)).
+simpl; case m; auto.
+generalize P; rewrite <- app_cons; rewrite <- app_cons.
+apply (path_tmpLast r0).
+generalize P; apply path_pop.
+Qed.
+
+Lemma step_inv_simpleDest:
+ forall (r1 r2 : State),
+ step r1 r2 -> stepInv r1 -> simpleDest (StateToMove r2 ++ StateBeing r2).
+Proof.
+intros r1 r2 STEP; inversion_clear STEP; unfold stepInv;
+ unfold stepInv, sameExec, sameEnv, exec, StateToMove, StateBeing, StateDone;
+ (repeat rewrite app_nil); intros [P [SD [TT TB]]].
+apply (simpleDest_Pop (r, r)); assumption.
+apply simpleDest_movBack; assumption.
+apply simpleDest_insert; rewrite <- app_app; apply simpleDest_movFront.
+rewrite <- app_cons; rewrite app_app; auto.
+generalize SD; (repeat rewrite <- app_cons); (repeat rewrite app_app).
+generalize (simpleDest_tmpLast (t ++ ((s, r0ounon) :: b)) r0 d); auto.
+generalize SD; apply simpleDest_Pop.
+rewrite <- (app_nil _ t); generalize SD; apply simpleDest_Pop.
+Qed.
+
+Lemma noTmp_pop:
+ forall (m : Move) (l1 l2 : Moves), noTmp (l1 ++ (m :: l2)) -> noTmp (l1 ++ l2).
+Proof.
+intros; induction l1 as [|a l1 Hrecl1]; generalize H.
+simpl; case m; intros; inversion H0; inversion H2; auto.
+rewrite app_cons; rewrite app_cons; simpl; case a.
+intros; inversion H0; inversion H2; auto.
+Qed.
+
+Lemma step_inv_noTmp:
+ forall (r1 r2 : State), step r1 r2 -> stepInv r1 -> noTmp (StateToMove r2).
+Proof.
+intros r1 r2 STEP; inversion_clear STEP; unfold stepInv;
+ unfold stepInv, sameExec, sameEnv, exec, StateToMove, StateBeing, StateDone;
+ intros [P [SD [NO [TT TB]]]]; generalize TT; (try apply noTmp_pop); auto.
+Qed.
+
+Lemma noTmp_noTmpLast: forall (l : Moves), noTmp l -> noTmpLast l.
+Proof.
+intros; induction l as [|a l Hrecl]; (try (simpl; auto; fail)).
+generalize H; simpl; case a; generalize Hrecl; case l;
+ (intros; inversion H0; inversion H2; auto).
+Qed.
+
+Lemma noTmpLast_pop:
+ forall (m : Move) (l : Moves), noTmpLast (m :: l) -> noTmpLast l.
+Proof.
+intros m l; simpl; case m; case l.
+simpl; auto.
+intros; inversion H; inversion H1; auto.
+Qed.
+
+Lemma noTmpLast_Pop:
+ forall (m : Move) (l1 l2 : Moves),
+ noTmpLast (l1 ++ (m :: l2)) -> noTmpLast (l1 ++ l2).
+Proof.
+intros; induction l1 as [|a l1 Hrecl1]; generalize H.
+simpl; case m; case l2.
+simpl; auto.
+intros.
+elim H0; [intros H1 H2; elim H2; [intros H3 H4; (try exact H4)]].
+(repeat rewrite app_cons); simpl; case a.
+generalize Hrecl1; case l1.
+simpl; case m; case l2; intros; inversion H0; inversion H2; auto.
+intros m0 l R r r0; rewrite app_cons; rewrite app_cons.
+intros; inversion H0; inversion H2; auto.
+Qed.
+
+Lemma noTmpLast_push:
+ forall (m : Move) (t1 t2 t3 : Moves),
+ noTmp (t1 ++ (m :: t2)) -> noTmpLast t3 -> noTmpLast (m :: t3).
+Proof.
+intros; induction t1 as [|a t1 Hrect1]; generalize H.
+simpl; case m; intros r r0 [N1 [N2 NT]]; generalize H0; case t3; auto.
+rewrite app_cons; intros; apply Hrect1.
+generalize H1.
+simpl; case m; case a; intros; inversion H2; inversion H4; auto.
+Qed.
+
+Lemma noTmpLast_tmpLast:
+ forall (s d : Reg) (l : Moves),
+ noTmpLast (l ++ ((s, d) :: nil)) -> noTmpLast (l ++ ((T s, d) :: nil)).
+Proof.
+intros; induction l as [|a l Hrecl].
+simpl; auto.
+generalize H; rewrite app_cons; rewrite app_cons; simpl.
+case a; generalize Hrecl; case l.
+simpl; auto.
+intros m l0 REC r r0; generalize REC; rewrite app_cons; rewrite app_cons.
+case m; intros; inversion H0; inversion H2; split; auto.
+Qed.
+
+Lemma step_inv_noTmpLast:
+ forall (r1 r2 : State), step r1 r2 -> stepInv r1 -> noTmpLast (StateBeing r2).
+Proof.
+intros r1 r2 STEP; inversion_clear STEP; unfold stepInv;
+ unfold stepInv, sameExec, sameEnv, exec, StateToMove, StateBeing, StateDone;
+ intros [P [SD [NO [TT TB]]]]; auto.
+apply (noTmpLast_push m t1 t2); auto.
+apply (noTmpLast_push (d, r) t1 t2); auto.
+generalize TB; rewrite <- app_cons; rewrite <- app_cons; apply noTmpLast_tmpLast.
+apply (noTmpLast_pop (sn, dn)); auto.
+Qed.
+
+Lemma noOverlapaux_insert:
+ forall (l1 l2 : list Reg) (r x : Reg),
+ noOverlap_aux x (r :: (l1 ++ l2)) -> noOverlap_aux x (l1 ++ (r :: l2)).
+Proof.
+simpl; intros; induction l1; simpl; split.
+elim H; [intros H0 H1; (try exact H0)].
+elim H; [intros H0 H1; (try exact H1)].
+simpl in H |-.
+elim H;
+ [intros H0 H1; elim H1; [intros H2 H3; (try clear H1 H); (try exact H2)]].
+apply IHl1.
+split.
+elim H; [intros H0 H1; (try exact H0)].
+rewrite app_cons in H.
+apply noOverlap_auxpop with ( r := a ).
+elim H; [intros H0 H1; (try exact H1)].
+Qed.
+
+Lemma Ingetsrc_swap2:
+ forall (m : Move) (l1 l2 : Moves) (l : Reg),
+ In l (getsrc (l1 ++ (m :: l2))) -> In l (getsrc (m :: (l1 ++ l2))).
+Proof.
+intros; destruct m as [m1 m2]; simpl; auto.
+induction l1; simpl.
+simpl in H |-; auto.
+destruct a; simpl.
+simpl in H |-.
+elim H; [intros H0 | intros H0; (try exact H0)].
+right; left; (try assumption).
+elim IHl1; intros; auto.
+Qed.
+
+Lemma noOverlap_insert:
+ forall (p1 p2 : Moves) (m : Move),
+ noOverlap (m :: (p1 ++ p2)) -> noOverlap (p1 ++ (m :: p2)).
+Proof.
+unfold noOverlap; destruct m; rewrite getdst_add; simpl getdst;
+ rewrite getdst_app.
+intros.
+apply noOverlapaux_insert.
+generalize (H l); intros H1; lapply H1;
+ [intros H2; (try clear H1); (try exact H2) | idtac].
+simpl getsrc.
+generalize (Ingetsrc_swap2 (r, r0)); simpl; (intros; auto).
+Qed.
+
+Lemma noOverlap_movBack:
+ forall (p1 p2 : Moves) (m : Move),
+ noOverlap (p1 ++ (m :: p2)) -> noOverlap ((p1 ++ p2) ++ (m :: nil)).
+Proof.
+intros.
+apply (noOverlap_insert (p1 ++ p2) nil m).
+rewrite app_nil; apply noOverlap_movFront; auto.
+Qed.
+
+Lemma noOverlap_movBack0:
+ forall (t : Moves) (s d : Reg),
+ noOverlap ((s, d) :: t) -> noOverlap (t ++ ((s, d) :: nil)).
+Proof.
+intros t s d H; (try assumption).
+apply noOverlap_insert.
+rewrite app_nil; auto.
+Qed.
+
+Lemma noOverlap_Front0:
+ forall (t : Moves) (s d : Reg),
+ noOverlap (t ++ ((s, d) :: nil)) -> noOverlap ((s, d) :: t).
+Proof.
+intros t s d H; (try assumption).
+cut ((s, d) :: t = (s, d) :: (t ++ nil)).
+intros e; rewrite e.
+apply noOverlap_movFront; auto.
+rewrite app_nil; auto.
+Qed.
+
+Lemma noTmpL_diff:
+ forall (t : Moves) (s d : Reg),
+ noTmpLast (t ++ ((s, d) :: nil)) -> notemporary d.
+Proof.
+intros t s d; unfold notemporary; induction t; (try (simpl; intros; auto; fail)).
+rewrite app_cons.
+intros; apply IHt.
+apply (noTmpLast_pop a); auto.
+Qed.
+
+Lemma noOverlap_aux_app:
+ forall l1 l2 (r : Reg),
+ noOverlap_aux r l1 -> noOverlap_aux r l2 -> noOverlap_aux r (l1 ++ l2).
+Proof.
+induction l1; simpl; auto.
+intros; split.
+elim H; [intros H1 H2; (try clear H); (try exact H1)].
+apply IHl1; auto.
+elim H; [intros H1 H2; (try clear H); (try exact H2)].
+Qed.
+
+Lemma noTmP_noOverlap_aux:
+ forall t (r : Reg), noTmp t -> noOverlap_aux (T r) (getdst t).
+Proof.
+induction t; simpl; auto.
+destruct a; simpl; (intros; split).
+elim H; intros; elim H1; intros.
+right; apply H2.
+apply IHt; auto.
+elim H;
+ [intros H0 H1; elim H1; [intros H2 H3; (try clear H1 H); (try exact H3)]].
+Qed.
+
+Lemma noTmp_append: forall l1 l2, noTmp l1 -> noTmp l2 -> noTmp (l1 ++ l2).
+Proof.
+induction l1; simpl; auto.
+destruct a.
+intros l2 [H1 [H2 H3]] H4.
+(repeat split); auto.
+Qed.
+
+Lemma step_inv_noOverlap:
+ forall (r1 r2 : State),
+ step r1 r2 -> stepInv r1 -> noOverlap (StateToMove r2 ++ StateBeing r2).
+Proof.
+intros r1 r2 STEP; inversion_clear STEP; unfold stepInv;
+ unfold stepInv, sameExec, sameEnv, exec, StateToMove, StateBeing, StateDone;
+ (repeat rewrite app_nil); intros [P [SD [NO [TT TB]]]];
+ (try (generalize NO; apply noOverlap_Pop; auto; fail)).
+apply noOverlap_movBack; auto.
+apply noOverlap_insert; rewrite <- app_app; apply noOverlap_movFront;
+ rewrite <- app_cons; rewrite app_app; auto.
+generalize NO; (repeat rewrite <- app_cons); (repeat rewrite app_app);
+ (clear NO; intros NO); apply noOverlap_movBack0.
+assert (noOverlap ((r0, d) :: (t ++ ((s, r0ounon) :: b))));
+ [apply noOverlap_Front0; auto | idtac].
+generalize H; unfold noOverlap; simpl; clear H; intros.
+elim H0; intros; [idtac | apply (H l0); (right; (try assumption))].
+split; [right; (try assumption) | idtac].
+generalize TB; simpl; caseEq (b ++ ((r0, d) :: nil)); intro.
+elim (app_eq_nil b ((r0, d) :: nil)); intros; auto; inversion H4.
+subst l0; intros; rewrite <- H1 in TB0.
+elim TB0; [intros H2 H3; elim H3; [intros H4 H5; (try clear H3 TB0)]].
+generalize (noTmpL_diff b r0 d); unfold notemporary; intro; apply H3; auto.
+rewrite <- H1; apply noTmP_noOverlap_aux; apply noTmp_append; auto;
+ rewrite <- app_cons in TB; apply noTmpLast_popBack with (r0, d); auto.
+rewrite <- (app_nil _ t); apply (noOverlap_Pop (s, d)); assumption.
+Qed.
+
+Lemma step_inv: forall (r1 r2 : State), step r1 r2 -> stepInv r1 -> stepInv r2.
+Proof.
+intros; unfold stepInv; (repeat split).
+apply (step_inv_path r1 r2); auto.
+apply (step_inv_simpleDest r1 r2); auto.
+apply (step_inv_noOverlap r1 r2); auto.
+apply (step_inv_noTmp r1 r2); auto.
+apply (step_inv_noTmpLast r1 r2); auto.
+Qed.
+
+Definition step_NF (r : State) : Prop := ~ (exists s : State , step r s ).
+
+Inductive stepp : State -> State -> Prop :=
+ stepp_refl: forall (r : State), stepp r r
+ | stepp_trans:
+ forall (r1 r2 r3 : State), step r1 r2 -> stepp r2 r3 -> stepp r1 r3 .
+Hint Resolve stepp_refl stepp_trans .
+
+Lemma stepp_transitive:
+ forall (r1 r2 r3 : State), stepp r1 r2 -> stepp r2 r3 -> stepp r1 r3.
+Proof.
+intros; induction H as [r|r1 r2 r0 H H1 HrecH]; eauto.
+Qed.
+
+Lemma step_stepp: forall (s1 s2 : State), step s1 s2 -> stepp s1 s2.
+Proof.
+eauto.
+Qed.
+
+Lemma stepp_inv:
+ forall (r1 r2 : State), stepp r1 r2 -> stepInv r1 -> stepInv r2.
+Proof.
+intros; induction H as [r|r1 r2 r3 H H1 HrecH]; auto.
+apply HrecH; auto.
+apply (step_inv r1 r2); auto.
+Qed.
+
+Lemma noTmpLast_lastnoTmp:
+ forall l s d, noTmpLast (l ++ ((s, d) :: nil)) -> notemporary d.
+Proof.
+induction l.
+simpl.
+intros; unfold notemporary; auto.
+destruct a as [a1 a2]; intros.
+change (noTmpLast ((a1, a2) :: (l ++ ((s, d) :: nil)))) in H |-.
+apply IHl with s.
+apply noTmpLast_pop with (a1, a2); auto.
+Qed.
+
+Lemma step_inv_NoOverlap:
+ forall (s1 s2 : State) r,
+ step s1 s2 -> notemporary r -> stepInv s1 -> NoOverlap r s1 -> NoOverlap r s2.
+Proof.
+intros s1 s2 r STEP notempr; inversion_clear STEP; unfold stepInv;
+ unfold stepInv, sameExec, sameEnv, exec, StateToMove, StateBeing, StateDone;
+ intros [P [SD [NO [TT TB]]]]; unfold NoOverlap; simpl.
+simpl; (repeat rewrite app_nil); simpl; (repeat rewrite <- app_cons); intro;
+ apply noOverlap_Pop with ( m := (r0, r0) ); auto.
+(repeat rewrite app_nil); simpl; rewrite app_ass; (repeat rewrite <- app_cons);
+ intro; rewrite ass_app; apply noOverlap_movBack; auto.
+simpl; (repeat (rewrite app_ass; simpl)); (repeat rewrite <- app_cons); intro.
+rewrite ass_app; apply noOverlap_insert; rewrite app_ass;
+ apply noOverlap_movFront; auto.
+simpl; (repeat rewrite <- app_cons); intro; rewrite ass_app;
+ apply noOverlap_movBack0; auto.
+generalize H; (repeat (rewrite app_ass; simpl)); intro.
+assert (noOverlap ((r0, d) :: (((r, r) :: t) ++ ((s, r0ounon) :: b))));
+ [apply noOverlap_Front0 | idtac]; auto.
+generalize H0; (repeat (rewrite app_ass; simpl)); auto.
+generalize H1; unfold noOverlap; simpl; intros.
+elim H3; intros H4; clear H3.
+split.
+right; assert (notemporary d).
+change (noTmpLast (((s, r0ounon) :: b) ++ ((r0, d) :: nil))) in TB |-;
+ apply (noTmpLast_lastnoTmp ((s, r0ounon) :: b) r0); auto.
+rewrite <- H4; unfold notemporary in H3 |-; apply H3.
+split.
+right; rewrite <- H4; unfold notemporary in notempr |-; apply notempr.
+rewrite <- H4; apply noTmP_noOverlap_aux; auto.
+apply noTmp_append; auto.
+change (noTmpLast (((s, r0ounon) :: b) ++ ((r0, d) :: nil))) in TB |-;
+ apply noTmpLast_popBack with ( m := (r0, d) ); auto.
+apply (H2 l0).
+elim H4; intros H3; right; [left | right]; assumption.
+intro;
+ change (noOverlap (((r, r) :: t) ++ ((sn, dn) :: (b ++ ((s0, d0) :: nil))))) in
+ H1 |-.
+change (noOverlap (((r, r) :: t) ++ (b ++ ((s0, d0) :: nil))));
+ apply (noOverlap_Pop (sn, dn)); auto.
+(repeat rewrite <- app_cons); apply noOverlap_Pop.
+Qed.
+
+Lemma step_inv_getdst:
+ forall (s1 s2 : State) r,
+ step s1 s2 ->
+ In r (getdst (StateToMove s2 ++ StateBeing s2)) ->
+ In r (getdst (StateToMove s1 ++ StateBeing s1)).
+Proof.
+intros s1 s2 r STEP; inversion_clear STEP;
+ unfold StateToMove, StateBeing, StateDone.
+(repeat rewrite getdst_app); simpl; (repeat rewrite app_nil); intro;
+ apply in_or_app.
+elim (in_app_or (getdst t1) (getdst t2) r); auto.
+intro; right; simpl; right; assumption.
+(repeat rewrite getdst_app); destruct m as [m1 m2]; simpl;
+ (repeat rewrite app_nil); intro; apply in_or_app.
+elim (in_app_or (getdst t1 ++ getdst t2) (m2 :: nil) r); auto; intro.
+elim (in_app_or (getdst t1) (getdst t2) r); auto; intro.
+right; simpl; right; assumption.
+elim H0; intros H1; [right; simpl; left; (try assumption) | inversion H1].
+(repeat rewrite getdst_app); simpl; (repeat rewrite app_nil); intro;
+ apply in_or_app.
+elim (in_app_or (getdst t1 ++ getdst t2) (r0 :: (d :: getdst b)) r); auto;
+ intro.
+elim (in_app_or (getdst t1) (getdst t2) r); auto; intro.
+left; apply in_or_app; left; assumption.
+left; apply in_or_app; right; simpl; right; assumption.
+elim H0; intro.
+left; apply in_or_app; right; simpl; left; trivial.
+elim H1; intro.
+right; (simpl; left; trivial).
+right; simpl; right; assumption.
+(repeat (rewrite getdst_app; simpl)); trivial.
+(repeat (rewrite getdst_app; simpl)); intro.
+elim (in_app_or (getdst t) (getdst b ++ (d0 :: nil)) r); auto; intro;
+ apply in_or_app; auto.
+elim (in_app_or (getdst b) (d0 :: nil) r); auto; intro.
+right; simpl; right; apply in_or_app; auto.
+elim H3; intro.
+right; simpl; right; apply in_or_app; right; simpl; auto.
+inversion H4.
+rewrite app_nil; (repeat (rewrite getdst_app; simpl)); intro.
+apply in_or_app; left; assumption.
+Qed.
+
+Lemma stepp_sameExec:
+ forall (r1 r2 : State), stepp r1 r2 -> stepInv r1 -> sameExec r1 r2.
+Proof.
+intros; induction H as [r|r1 r2 r3 H H1 HrecH].
+unfold sameExec; intros; auto.
+cut (sameExec r1 r2); [idtac | apply (step_sameExec r1); auto].
+unfold sameExec; unfold sameExec in HrecH |-; intros.
+rewrite H2; auto.
+rewrite HrecH; auto.
+apply (step_inv r1); auto.
+intros x H5; apply H4.
+generalize H5; (repeat rewrite getdst_app); intros; apply in_or_app.
+elim
+ (in_app_or
+ (getdst (StateToMove r2) ++ getdst (StateBeing r2))
+ (getdst (StateToMove r3) ++ getdst (StateBeing r3)) x); auto; intro.
+generalize (step_inv_getdst r1 r2 x); (repeat rewrite getdst_app); intro.
+left; apply H8; auto.
+intros x H5; apply H4.
+generalize H5; (repeat rewrite getdst_app); intros; apply in_or_app.
+elim
+ (in_app_or
+ (getdst (StateToMove r1) ++ getdst (StateBeing r1))
+ (getdst (StateToMove r2) ++ getdst (StateBeing r2)) x); auto; intro.
+generalize (step_inv_getdst r1 r2 x); (repeat rewrite getdst_app); intro.
+left; apply H8; auto.
+Qed.
+
+Inductive dstep : State -> State -> Prop :=
+ dstep_nop:
+ forall (r : Reg) (t l : Moves), dstep ((r, r) :: t, nil, l) (t, nil, l)
+ | dstep_start:
+ forall (t l : Moves) (s d : Reg),
+ s <> d -> dstep ((s, d) :: t, nil, l) (t, (s, d) :: nil, l)
+ | dstep_push:
+ forall (t1 t2 b l : Moves) (s d r : Reg),
+ noRead t1 d ->
+ dstep
+ (t1 ++ ((d, r) :: t2), (s, d) :: b, l)
+ (t1 ++ t2, (d, r) :: ((s, d) :: b), l)
+ | dstep_pop_loop:
+ forall (t b l : Moves) (s d r0 : Reg),
+ noRead t r0 ->
+ dstep
+ (t, (s, r0) :: (b ++ ((r0, d) :: nil)), l)
+ (t, b ++ ((T r0, d) :: nil), (s, r0) :: ((r0, T r0) :: l))
+ | dstep_pop:
+ forall (t b l : Moves) (s0 d0 sn dn : Reg),
+ noRead t dn ->
+ Loc.diff dn s0 ->
+ dstep
+ (t, (sn, dn) :: (b ++ ((s0, d0) :: nil)), l)
+ (t, b ++ ((s0, d0) :: nil), (sn, dn) :: l)
+ | dstep_last:
+ forall (t l : Moves) (s d : Reg),
+ noRead t d -> dstep (t, (s, d) :: nil, l) (t, nil, (s, d) :: l) .
+Hint Resolve dstep_nop dstep_start dstep_push .
+Hint Resolve dstep_pop_loop dstep_pop dstep_last .
+
+Lemma dstep_step:
+ forall (r1 r2 : State), dstep r1 r2 -> stepInv r1 -> stepp r1 r2.
+Proof.
+intros r1 r2 DS; inversion_clear DS; intros SI; eauto.
+change (stepp (nil ++ ((r, r) :: t), nil, l) (t, nil, l)); apply step_stepp;
+ apply (step_nop r nil t).
+change (stepp (nil ++ ((s, d) :: t), nil, l) (t, (s, d) :: nil, l));
+ apply step_stepp; apply (step_start nil t l).
+apply
+ (stepp_trans
+ (t, (s, r0) :: (b ++ ((r0, d) :: nil)), l)
+ (t, (s, r0) :: (b ++ ((T r0, d) :: nil)), (r0, T r0) :: l)
+ (t, b ++ ((T r0, d) :: nil), (s, r0) :: ((r0, T r0) :: l))); auto.
+apply step_stepp; apply step_pop; auto.
+unfold stepInv in SI |-; generalize SI; intros [X [Y [Z [U V]]]].
+generalize V; unfold StateBeing, noTmpLast.
+case (b ++ ((r0, d) :: nil)); auto.
+intros m l0 [R1 [OK PP]]; auto.
+Qed.
+
+Lemma dstep_inv:
+ forall (r1 r2 : State), dstep r1 r2 -> stepInv r1 -> stepInv r2.
+Proof.
+intros.
+apply (stepp_inv r1 r2); auto.
+apply dstep_step; auto.
+Qed.
+
+Inductive dstepp : State -> State -> Prop :=
+ dstepp_refl: forall (r : State), dstepp r r
+ | dstepp_trans:
+ forall (r1 r2 r3 : State), dstep r1 r2 -> dstepp r2 r3 -> dstepp r1 r3 .
+Hint Resolve dstepp_refl dstepp_trans .
+
+Lemma dstepp_stepp:
+ forall (s1 s2 : State), stepInv s1 -> dstepp s1 s2 -> stepp s1 s2.
+Proof.
+intros; induction H0 as [r|r1 r2 r3 H0 H1 HrecH0]; auto.
+apply (stepp_transitive r1 r2 r3); auto.
+apply dstep_step; auto.
+apply HrecH0; auto.
+apply (dstep_inv r1 r2); auto.
+Qed.
+
+Lemma dstepp_sameExec:
+ forall (r1 r2 : State), dstepp r1 r2 -> stepInv r1 -> sameExec r1 r2.
+Proof.
+intros; apply stepp_sameExec; auto.
+apply dstepp_stepp; auto.
+Qed.
+
+End pmov.
+
+Fixpoint split_move' (m : Moves) (r : Reg) {struct m} :
+ option ((Moves * Reg) * Moves) :=
+ match m with
+ (s, d) :: tail =>
+ match diff_dec s r with
+ right _ => Some (nil, d, tail)
+ | left _ =>
+ match split_move' tail r with
+ Some ((t1, r2, t2)) => Some ((s, d) :: t1, r2, t2)
+ | None => None
+ end
+ end
+ | nil => None
+ end.
+
+Fixpoint split_move (m : Moves) (r : Reg) {struct m} :
+ option ((Moves * Reg) * Moves) :=
+ match m with
+ (s, d) :: tail =>
+ match Loc.eq s r with
+ left _ => Some (nil, d, tail)
+ | right _ =>
+ match split_move tail r with
+ Some ((t1, r2, t2)) => Some ((s, d) :: t1, r2, t2)
+ | None => None
+ end
+ end
+ | nil => None
+ end.
+
+Definition def : Move := (R IT1, R IT1).
+
+Fixpoint last (M : Moves) : Move :=
+ match M with nil => def
+ | m :: nil => m
+ | m :: tail => last tail end.
+
+Fixpoint head_but_last (M : Moves) : Moves :=
+ match M with
+ nil => nil
+ | m' :: nil => nil
+ | m' :: tail => m' :: head_but_last tail
+ end.
+
+Fixpoint replace_last_s (M : Moves) : Moves :=
+ match M with
+ nil => nil
+ | m :: nil =>
+ match m with (s, d) => (T s, d) :: nil end
+ | m :: tail => m :: replace_last_s tail
+ end.
+
+Ltac CaseEq name := generalize (refl_equal name); pattern name at -1; case name.
+
+Definition stepf' (S1 : State) : State :=
+ match S1 with
+ (nil, nil, _) => S1
+ | ((s, d) :: tl, nil, l) =>
+ match diff_dec s d with
+ right _ => (tl, nil, l)
+ | left _ => (tl, (s, d) :: nil, l)
+ end
+ | (t, (s, d) :: b, l) =>
+ match split_move t d with
+ Some ((t1, r, t2)) =>
+ (t1 ++ t2, (d, r) :: ((s, d) :: b), l)
+ | None =>
+ match b with
+ nil => (t, nil, (s, d) :: l)
+ | _ =>
+ match diff_dec d (fst (last b)) with
+ right _ =>
+ (t, replace_last_s b, (s, d) :: ((d, T d) :: l))
+ | left _ => (t, b, (s, d) :: l)
+ end
+ end
+ end
+ end.
+
+Definition stepf (S1 : State) : State :=
+ match S1 with
+ (nil, nil, _) => S1
+ | ((s, d) :: tl, nil, l) =>
+ match Loc.eq s d with
+ left _ => (tl, nil, l)
+ | right _ => (tl, (s, d) :: nil, l)
+ end
+ | (t, (s, d) :: b, l) =>
+ match split_move t d with
+ Some ((t1, r, t2)) =>
+ (t1 ++ t2, (d, r) :: ((s, d) :: b), l)
+ | None =>
+ match b with
+ nil => (t, nil, (s, d) :: l)
+ | _ =>
+ match Loc.eq d (fst (last b)) with
+ left _ =>
+ (t, replace_last_s b, (s, d) :: ((d, T d) :: l))
+ | right _ => (t, b, (s, d) :: l)
+ end
+ end
+ end
+ end.
+
+Lemma rebuild_l:
+ forall (l : Moves) (m : Move),
+ m :: l = head_but_last (m :: l) ++ (last (m :: l) :: nil).
+Proof.
+induction l; simpl; auto.
+intros m; rewrite (IHl a); auto.
+Qed.
+
+Lemma splitSome:
+ forall (l t1 t2 : Moves) (s d r : Reg),
+ noOverlap (l ++ ((r, s) :: nil)) ->
+ split_move l s = Some (t1, d, t2) -> noRead t1 s.
+Proof.
+induction l; simpl.
+intros; discriminate.
+destruct a as [a1 a2].
+intros t1 t2 s d r Hno; case (Loc.eq a1 s).
+intros e H1; inversion H1.
+simpl; auto.
+CaseEq (split_move l s).
+intros; (repeat destruct p).
+inversion H0; auto.
+simpl; split; auto.
+change (noOverlap (((a1, a2) :: l) ++ ((r, s) :: nil))) in Hno |-.
+assert (noOverlap ((r, s) :: ((a1, a2) :: l))).
+apply noOverlap_Front0; auto.
+unfold noOverlap in H1 |-; simpl in H1 |-.
+elim H1 with ( l0 := a1 );
+ [intros H5 H6; (try clear H1); (try exact H5) | idtac].
+elim H5; [intros H1; (try clear H5); (try exact H1) | intros H1; (try clear H5)].
+absurd (a1 = s); auto.
+apply Loc.diff_sym; auto.
+right; left; trivial.
+apply (IHl m0 m s r0 r); auto.
+apply (noOverlap_pop (a1, a2)); auto.
+intros; discriminate.
+Qed.
+
+Lemma unsplit_move:
+ forall (l t1 t2 : Moves) (s d r : Reg),
+ noOverlap (l ++ ((r, s) :: nil)) ->
+ split_move l s = Some (t1, d, t2) -> l = t1 ++ ((s, d) :: t2).
+Proof.
+induction l.
+simpl; intros; discriminate.
+intros t1 t2 s d r HnoO; destruct a as [a1 a2]; simpl; case (diff_dec a1 s);
+ intro.
+case (Loc.eq a1 s); intro.
+absurd (Loc.diff a1 s); auto.
+rewrite e; apply Loc.same_not_diff.
+CaseEq (split_move l s); intros; (try discriminate).
+(repeat destruct p); inversion H0.
+rewrite app_cons; subst t2; subst d; rewrite (IHl m0 m s r0 r); auto.
+apply (noOverlap_pop (a1, a2)); auto.
+case (Loc.eq a1 s); intros e H; inversion H; simpl.
+rewrite e; auto.
+cut (noOverlap_aux a1 (getdst ((r, s) :: nil))).
+intros [[H5|H4] H0]; [try exact H5 | idtac].
+absurd (s = a1); auto.
+absurd (Loc.diff a1 s); auto; apply Loc.diff_sym; auto.
+generalize HnoO; rewrite app_cons; intro.
+assert (noOverlap (l ++ ((a1, a2) :: ((r, s) :: nil))));
+ (try (apply noOverlap_insert; assumption)).
+assert (noOverlap ((a1, a2) :: ((r, s) :: nil))).
+apply (noOverlap_right l); auto.
+generalize H2; unfold noOverlap; simpl.
+intros H5; elim (H5 a1); [idtac | left; trivial].
+intros H6 [[H7|H8] H9].
+absurd (s = a1); auto.
+split; [right; (try assumption) | auto].
+Qed.
+
+Lemma cons_replace:
+ forall (a : Move) (l : Moves),
+ l <> nil -> replace_last_s (a :: l) = a :: replace_last_s l.
+Proof.
+intros; simpl.
+CaseEq l.
+intro; contradiction.
+intros m l0 H0; auto.
+Qed.
+
+Lemma last_replace:
+ forall (l : Moves) (s d : Reg),
+ replace_last_s (l ++ ((s, d) :: nil)) = l ++ ((T s, d) :: nil).
+Proof.
+induction l; (try (simpl; auto; fail)).
+intros; (repeat rewrite <- app_comm_cons).
+rewrite cons_replace.
+rewrite IHl; auto.
+red; intro.
+elim (app_eq_nil l ((s, d) :: nil)); auto; intros; discriminate.
+Qed.
+
+Lemma last_app: forall (l : Moves) (m : Move), last (l ++ (m :: nil)) = m.
+Proof.
+induction l; simpl; auto.
+intros m; CaseEq (l ++ (m :: nil)).
+intro; elim (app_eq_nil l (m :: nil)); auto; intros; discriminate.
+intros m0 l0 H; (rewrite <- H; apply IHl).
+Qed.
+
+Lemma last_cons:
+ forall (l : Moves) (m m0 : Move), last (m0 :: (m :: l)) = last (m :: l).
+Proof.
+intros; simpl; auto.
+Qed.
+
+Lemma stepf_popLoop:
+ forall (t b l : Moves) (s d r0 : Reg),
+ split_move t d = None ->
+ stepf (t, (s, d) :: (b ++ ((d, r0) :: nil)), l) =
+ (t, b ++ ((T d, r0) :: nil), (s, d) :: ((d, T d) :: l)).
+Proof.
+intros; simpl; rewrite H; CaseEq (b ++ ((d, r0) :: nil)); intros.
+destruct b; discriminate.
+rewrite <- H0; rewrite last_app; simpl; rewrite last_replace.
+case (Loc.eq d d); intro; intuition.
+destruct t; (try destruct m0); simpl; auto.
+Qed.
+
+Lemma stepf_pop:
+ forall (t b l : Moves) (s d r r0 : Reg),
+ split_move t d = None ->
+ d <> r ->
+ stepf (t, (s, d) :: (b ++ ((r, r0) :: nil)), l) =
+ (t, b ++ ((r, r0) :: nil), (s, d) :: l).
+Proof.
+intros; simpl; rewrite H; CaseEq (b ++ ((r, r0) :: nil)); intros.
+destruct b; discriminate.
+rewrite <- H1; rewrite last_app; simpl.
+case (Loc.eq d r); intro.
+absurd (d = r); auto.
+destruct t; (try destruct m0); simpl; auto.
+Qed.
+
+Lemma noOverlap_head:
+ forall l1 l2 m, noOverlap (l1 ++ (m :: l2)) -> noOverlap (l1 ++ (m :: nil)).
+Proof.
+induction l2; simpl; auto.
+intros; apply IHl2.
+cut (l1 ++ (m :: (a :: l2)) = (l1 ++ (m :: nil)) ++ (a :: l2));
+ [idtac | rewrite app_ass; auto].
+intros e; rewrite e in H.
+cut (l1 ++ (m :: l2) = (l1 ++ (m :: nil)) ++ l2);
+ [idtac | rewrite app_ass; auto].
+intros e'; rewrite e'; auto.
+apply noOverlap_Pop with a; auto.
+Qed.
+
+Lemma splitNone:
+ forall (l : Moves) (s d : Reg),
+ split_move l d = None -> noOverlap (l ++ ((s, d) :: nil)) -> noRead l d.
+Proof.
+induction l; intros s d; simpl; auto.
+destruct a as [a1 a2]; case (Loc.eq a1 d); intro; (try (intro; discriminate)).
+CaseEq (split_move l d); intros.
+(repeat destruct p); discriminate.
+split; (try assumption).
+change (noOverlap (((a1, a2) :: l) ++ ((s, d) :: nil))) in H1 |-.
+assert (noOverlap ((s, d) :: ((a1, a2) :: l))).
+apply noOverlap_Front0; auto.
+assert (noOverlap ((a1, a2) :: ((s, d) :: l))).
+apply noOverlap_swap; auto.
+unfold noOverlap in H3 |-; simpl in H3 |-.
+elim H3 with ( l0 := a1 );
+ [intros H5 H6; (try clear H1); (try exact H5) | idtac].
+elim H6;
+ [intros H1 H4; elim H1;
+ [intros H7; (try clear H1 H6); (try exact H7) | intros H7; (try clear H1 H6)]].
+absurd (a1 = d); auto.
+apply Loc.diff_sym; auto.
+left; trivial.
+apply IHl with s; auto.
+apply noOverlap_pop with (a1, a2); auto.
+Qed.
+
+Lemma noO_diff:
+ forall l1 l2 s d r r0,
+ noOverlap (l1 ++ ((s, d) :: (l2 ++ ((r, r0) :: nil)))) ->
+ r = d \/ Loc.diff d r.
+Proof.
+intros.
+assert (noOverlap ((s, d) :: (l2 ++ ((r, r0) :: nil)))); auto.
+apply (noOverlap_right l1); auto.
+assert (noOverlap ((l2 ++ ((r, r0) :: nil)) ++ ((s, d) :: nil))); auto.
+apply (noOverlap_movBack0 (l2 ++ ((r, r0) :: nil))); auto.
+assert
+ ((l2 ++ ((r, r0) :: nil)) ++ ((s, d) :: nil) =
+ l2 ++ (((r, r0) :: nil) ++ ((s, d) :: nil))); auto.
+rewrite app_ass; auto.
+rewrite H2 in H1.
+simpl in H1 |-.
+assert (noOverlap ((r, r0) :: ((s, d) :: nil))); auto.
+apply (noOverlap_right l2); auto.
+unfold noOverlap in H3 |-.
+generalize (H3 r); simpl.
+intros H4; elim H4; intros; [idtac | left; trivial].
+elim H6; intros [H9|H9] H10; [left | right]; auto.
+Qed.
+
+Lemma f2ind:
+ forall (S1 S2 : State),
+ (forall (l : Moves), (S1 <> (nil, nil, l))) ->
+ noOverlap (StateToMove S1 ++ StateBeing S1) -> stepf S1 = S2 -> dstep S1 S2.
+Proof.
+intros S1 S2 Hneq HnoO; destruct S1 as [[t b] l]; destruct b.
+destruct t.
+elim (Hneq l); auto.
+destruct m; simpl; case (Loc.eq r r0).
+intros.
+rewrite e; rewrite <- H; apply dstep_nop.
+intros n H; rewrite <- H; generalize (dstep_start t l r r0); auto.
+intros H; rewrite <- H; destruct m as [s d].
+CaseEq (split_move t d).
+intros p H0; destruct p as [[t1 s0] t2]; simpl; rewrite H0; destruct t; simpl.
+simpl in H0 |-; discriminate.
+rewrite (unsplit_move (m :: t) t1 t2 d s0 s); auto.
+destruct m; generalize dstep_push; intros H1; apply H1.
+unfold StateToMove, StateBeing in HnoO |-.
+apply (splitSome ((r, r0) :: t) t1 t2 d s0 s); auto.
+apply noOverlap_head with b; auto.
+unfold StateToMove, StateBeing in HnoO |-.
+apply noOverlap_head with b; auto.
+intros H0; destruct b.
+simpl.
+rewrite H0.
+destruct t; (try destruct m); generalize dstep_last; intros H1; apply H1.
+simpl; auto.
+unfold StateToMove, StateBeing in HnoO |-.
+apply splitNone with s; auto.
+unfold StateToMove, StateBeing in HnoO |-.
+generalize HnoO; clear HnoO; rewrite (rebuild_l b m); intros HnoO.
+destruct (last (m :: b)).
+case (Loc.eq d r).
+intros e; rewrite <- e.
+CaseEq (head_but_last (m :: b)); intros; [simpl | idtac];
+ (try
+ (destruct t; (try destruct m0); rewrite H0;
+ (case (Loc.eq d d); intros h; (try (elim h; auto))))).
+generalize (dstep_pop_loop nil nil); simpl; intros H3; apply H3; auto.
+generalize (dstep_pop_loop ((r1, r2) :: t) nil); unfold T; simpl app;
+ intros H3; apply H3; clear H3; apply splitNone with s; (try assumption).
+apply noOverlap_head with (head_but_last (m :: b) ++ ((r, r0) :: nil)); auto.
+rewrite stepf_popLoop; auto.
+generalize (dstep_pop_loop t (m0 :: l0)); simpl; intros H3; apply H3; clear H3;
+ apply splitNone with s; (try assumption).
+apply noOverlap_head with (head_but_last (m :: b) ++ ((r, r0) :: nil)); auto.
+intro; assert (Loc.diff d r).
+assert (r = d \/ Loc.diff d r).
+apply (noO_diff t (head_but_last (m :: b)) s d r r0); auto.
+elim H1; [intros H2; absurd (d = r); auto | intros H2; auto].
+rewrite stepf_pop; auto.
+generalize (dstep_pop t (head_but_last (m :: b))); intros H3; apply H3; auto.
+clear H3; apply splitNone with s; (try assumption).
+apply noOverlap_head with (head_but_last (m :: b) ++ ((r, r0) :: nil)); auto.
+Qed.
+
+Lemma f2ind':
+ forall (S1 : State),
+ (forall (l : Moves), (S1 <> (nil, nil, l))) ->
+ noOverlap (StateToMove S1 ++ StateBeing S1) -> dstep S1 (stepf S1).
+Proof.
+intros S1 H noO; apply f2ind; auto.
+Qed.
+
+Lemma appcons_length:
+ forall (l1 l2 : Moves) (m : Move),
+ length (l1 ++ (m :: l2)) = (length (l1 ++ l2) + 1%nat)%nat.
+Proof.
+induction l1; simpl; intros; [omega | idtac].
+rewrite IHl1; omega.
+Qed.
+
+Definition mesure (S0 : State) : nat :=
+ let (p, _) := S0 in let (t, b) := p in (2 * length t + length b)%nat.
+
+Lemma step_dec0:
+ forall (t1 t2 b1 b2 : Moves) (l1 l2 : Moves),
+ dstep (t1, b1, l1) (t2, b2, l2) ->
+ (2 * length t2 + length b2 < 2 * length t1 + length b1)%nat.
+Proof.
+intros t1 t2 b1 b2 l1 l2 H; inversion H; simpl; (try omega).
+rewrite appcons_length; omega.
+cut (length (b ++ ((T r0, d) :: nil)) = length (b ++ ((r0, d) :: nil)));
+ (try omega).
+induction b; simpl; auto.
+(repeat rewrite appcons_length); auto.
+Qed.
+
+Lemma step_dec:
+ forall (S1 S2 : State), dstep S1 S2 -> (mesure S2 < mesure S1)%nat.
+Proof.
+unfold mesure; destruct S1 as [[t1 b1] l1]; destruct S2 as [[t2 b2] l2].
+intro; apply (step_dec0 t1 t2 b1 b2 l1 l2); trivial.
+Qed.
+
+Lemma stepf_dec0:
+ forall (S1 S2 : State),
+ (forall (l : Moves), (S1 <> (nil, nil, l))) /\
+ (S2 = stepf S1 /\ noOverlap (StateToMove S1 ++ StateBeing S1)) ->
+ (mesure S2 < mesure S1)%nat.
+Proof.
+intros S1 S2 [H1 [H2 H3]]; apply step_dec.
+apply f2ind; trivial.
+rewrite H2; reflexivity.
+Qed.
+
+Lemma stepf_dec:
+ forall (S1 S2 : State),
+ S2 = stepf S1 /\
+ ((forall (l : Moves), (S1 <> (nil, nil, l))) /\
+ noOverlap (StateToMove S1 ++ StateBeing S1)) -> ltof _ mesure S2 S1.
+Proof.
+unfold ltof.
+intros S1 S2 [H1 [H2 H3]]; apply step_dec.
+apply f2ind; trivial.
+rewrite H1; reflexivity.
+Qed.
+
+Lemma replace_last_id:
+ forall l m m0, replace_last_s (m :: (m0 :: l)) = m :: replace_last_s (m0 :: l).
+Proof.
+intros; case l; simpl.
+destruct m0; simpl; auto.
+intros; case l0; auto.
+Qed.
+
+Lemma length_replace: forall l, length (replace_last_s l) = length l.
+Proof.
+induction l; simpl; auto.
+destruct l; destruct a; simpl; auto.
+Qed.
+
+Lemma length_app:
+ forall (A : Set) (l1 l2 : list A),
+ (length (l1 ++ l2) = length l1 + length l2)%nat.
+Proof.
+intros A l1 l2; (try assumption).
+induction l1; simpl; auto.
+Qed.
+
+Lemma split_length:
+ forall (l t1 t2 : Moves) (s d : Reg),
+ split_move l s = Some (t1, d, t2) ->
+ (length l = (length t1 + length t2) + 1)%nat.
+Proof.
+induction l.
+intros; discriminate.
+intros t1 t2 s d; destruct a as [r r0]; simpl; case (Loc.eq r s); intro.
+intros H; inversion H.
+simpl; omega.
+CaseEq (split_move l s); (try (intros; discriminate)).
+(repeat destruct p); intros H H0; inversion H0.
+rewrite H2; rewrite (IHl m0 m s r1); auto.
+rewrite H4; rewrite <- H2; simpl; omega.
+Qed.
+
+Lemma stepf_dec0':
+ forall (S1 : State),
+ (forall (l : Moves), (S1 <> (nil, nil, l))) ->
+ (mesure (stepf S1) < mesure S1)%nat.
+Proof.
+intros S1 H.
+unfold mesure; destruct S1 as [[t1 b1] l1].
+destruct t1.
+destruct b1.
+generalize (H l1); intros H1; elim H1; auto.
+destruct m; simpl.
+destruct b1.
+simpl; auto.
+case (Loc.eq r0 (fst (last (m :: b1)))).
+intros; rewrite length_replace; simpl; omega.
+simpl; case b1; intros; simpl; omega.
+destruct m.
+destruct b1.
+simpl.
+case (Loc.eq r r0); intros; simpl; omega.
+destruct m; simpl; case (Loc.eq r r2).
+intros; simpl; omega.
+CaseEq (split_move t1 r2); intros.
+destruct p; destruct p; simpl.
+rewrite (split_length t1 m0 m r2 r3); auto.
+rewrite length_app; auto.
+omega.
+destruct b1.
+simpl; omega.
+case (Loc.eq r2 (fst (last (m :: b1)))); intros.
+rewrite length_replace; simpl; omega.
+simpl; omega.
+Qed.
+
+Lemma stepf1_dec:
+ forall (S1 S2 : State),
+ (forall (l : Moves), (S1 <> (nil, nil, l))) ->
+ S2 = stepf S1 -> ltof _ mesure S2 S1.
+Proof.
+unfold ltof; intros S1 S2 H H0; rewrite H0.
+apply stepf_dec0'; (try assumption).
+Qed.
+
+Lemma disc1:
+ forall (a : Move) (l1 l2 l3 l4 : list Move),
+ ((a :: l1, l2, l3) <> (nil, nil, l4)).
+Proof.
+intros; discriminate.
+Qed.
+
+Lemma disc2:
+ forall (a : Move) (l1 l2 l3 l4 : list Move),
+ ((l1, a :: l2, l3) <> (nil, nil, l4)).
+Proof.
+intros; discriminate.
+Qed.
+Hint Resolve disc1 disc2 .
+
+Lemma sameExec_reflexive: forall (r : State), sameExec r r.
+Proof.
+intros r; unfold sameExec, sameEnv, exec.
+destruct r as [[t b] d]; trivial.
+Qed.
+
+Definition base_case_Pmov_dec:
+ forall (s : State),
+ ({ exists l : list Move , s = (nil, nil, l) }) +
+ ({ forall l, (s <> (nil, nil, l)) }).
+Proof.
+destruct s as [[[|x tl] [|y tl']] l]; (try (right; intro; discriminate)).
+left; exists l; auto.
+Defined.
+
+Definition Pmov :=
+ Fix
+ (well_founded_ltof _ mesure) (fun _ => State)
+ (fun (S1 : State) =>
+ fun (Pmov : forall x, ltof _ mesure x S1 -> State) =>
+ match base_case_Pmov_dec S1 with
+ left h => S1
+ | right h => Pmov (stepf S1) (stepf_dec0' S1 h) end).
+
+Theorem Pmov_equation: forall S1, Pmov S1 = match S1 with
+ ((nil, nil), _) => S1
+ | _ => Pmov (stepf S1)
+ end.
+Proof.
+intros S1; unfold Pmov at 1;
+ rewrite (Fix_eq
+ (well_founded_ltof _ mesure) (fun _ => State)
+ (fun (S1 : State) =>
+ fun (Pmov : forall x, ltof _ mesure x S1 -> State) =>
+ match base_case_Pmov_dec S1 with
+ left h => S1
+ | right h => Pmov (stepf S1) (stepf_dec0' S1 h) end)).
+fold Pmov.
+destruct S1 as [[[|x tl] [|y tl']] l];
+ match goal with
+ | |- match ?a with left _ => _ | right _ => _ end = _ => case a end;
+ (try (intros [l0 Heq]; discriminate Heq)); auto.
+intros H; elim (H l); auto.
+intros x f g Hfg_ext.
+match goal with
+| |- match ?a with left _ => _ | right _ => _ end = _ => case a end; auto.
+Qed.
+
+Lemma sameExec_transitive:
+ forall (r1 r2 r3 : State),
+ (forall r,
+ In r (getdst (StateToMove r2 ++ StateBeing r2)) ->
+ In r (getdst (StateToMove r1 ++ StateBeing r1))) ->
+ (forall r,
+ In r (getdst (StateToMove r3 ++ StateBeing r3)) ->
+ In r (getdst (StateToMove r2 ++ StateBeing r2))) ->
+ sameExec r1 r2 -> sameExec r2 r3 -> sameExec r1 r3.
+Proof.
+intros r1 r2 r3; unfold sameExec, exec; (repeat rewrite getdst_app).
+destruct r1 as [[t1 b1] d1]; destruct r2 as [[t2 b2] d2];
+ destruct r3 as [[t3 b3] d3]; simpl.
+intros Hin; intros.
+rewrite H0; auto.
+rewrite H1; auto.
+intros.
+apply (H3 x).
+apply in_or_app; auto.
+elim (in_app_or (getdst t2 ++ getdst b2) (getdst t3 ++ getdst b3) x); auto.
+intros.
+apply (H3 x).
+apply in_or_app; auto.
+elim (in_app_or (getdst t1 ++ getdst b1) (getdst t2 ++ getdst b2) x); auto.
+Qed.
+
+Lemma dstep_inv_getdst:
+ forall (s1 s2 : State) r,
+ dstep s1 s2 ->
+ In r (getdst (StateToMove s2 ++ StateBeing s2)) ->
+ In r (getdst (StateToMove s1 ++ StateBeing s1)).
+intros s1 s2 r STEP; inversion_clear STEP;
+ unfold StateToMove, StateBeing, StateDone; (repeat rewrite app_nil);
+ (repeat (rewrite getdst_app; simpl)); intro; auto.
+Proof.
+right; (try assumption).
+elim (in_app_or (getdst t) (d :: nil) r); auto; (simpl; intros [H1|H1]);
+ [left; assumption | inversion H1].
+elim (in_app_or (getdst t1 ++ getdst t2) (r0 :: (d :: getdst b)) r); auto;
+ (simpl; intros).
+elim (in_app_or (getdst t1) (getdst t2) r); auto; (simpl; intros).
+apply in_or_app; left; apply in_or_app; left; assumption.
+apply in_or_app; left; apply in_or_app; right; simpl; right; assumption.
+elim H1; [intros H2 | intros [H2|H2]].
+apply in_or_app; left; apply in_or_app; right; simpl; left; auto.
+apply in_or_app; right; simpl; left; auto.
+apply in_or_app; right; simpl; right; assumption.
+elim (in_app_or (getdst t) (getdst b ++ (d :: nil)) r); auto; (simpl; intros).
+apply in_or_app; left; assumption.
+elim (in_app_or (getdst b) (d :: nil) r); auto; (simpl; intros).
+apply in_or_app; right; simpl; right; apply in_or_app; left; assumption.
+elim H2; [intros H3 | intros H3; inversion H3].
+apply in_or_app; right; simpl; right; apply in_or_app; right; simpl; auto.
+elim (in_app_or (getdst t) (getdst b ++ (d0 :: nil)) r); auto; (simpl; intros).
+apply in_or_app; left; assumption.
+elim (in_app_or (getdst b) (d0 :: nil) r); auto; simpl;
+ [intros H3 | intros [H3|H3]; [idtac | inversion H3]].
+apply in_or_app; right; simpl; right; apply in_or_app; left; assumption.
+apply in_or_app; right; simpl; right; apply in_or_app; right; simpl; auto.
+apply in_or_app; left; assumption.
+Qed.
+
+Theorem STM_Pmov: forall (S1 : State), StateToMove (Pmov S1) = nil.
+Proof.
+intros S1; elim S1 using (well_founded_ind (Wf_nat.well_founded_ltof _ mesure)).
+clear S1; intros S1; intros Hrec; destruct S1 as [[t b] d];
+ rewrite Pmov_equation; destruct t.
+destruct b; auto.
+apply Hrec; apply stepf1_dec; auto.
+apply Hrec; apply stepf1_dec; auto.
+Qed.
+
+Theorem SB_Pmov: forall (S1 : State), StateBeing (Pmov S1) = nil.
+Proof.
+intros S1; elim S1 using (well_founded_ind (Wf_nat.well_founded_ltof _ mesure)).
+clear S1; intros S1; intros Hrec; destruct S1 as [[t b] d];
+ rewrite Pmov_equation; destruct t.
+destruct b; auto.
+apply Hrec; apply stepf1_dec; auto.
+apply Hrec; apply stepf1_dec; auto.
+Qed.
+
+Theorem Fpmov_correct:
+ forall (S1 : State), stepInv S1 -> sameExec S1 (Pmov S1).
+Proof.
+intros S1; elim S1 using (well_founded_ind (Wf_nat.well_founded_ltof _ mesure)).
+clear S1; intros S1; intros Hrec Hinv; rewrite Pmov_equation;
+ destruct S1 as [[t b] d].
+assert
+ (forall (r : Reg) S1,
+ In r (getdst (StateToMove (Pmov (stepf S1)) ++ StateBeing (Pmov (stepf S1)))) ->
+ In r (getdst (StateToMove (stepf S1) ++ StateBeing (stepf S1)))).
+intros r S1; rewrite (STM_Pmov (stepf S1)); rewrite SB_Pmov; simpl; intros.
+inversion H.
+destruct t.
+destruct b.
+apply sameExec_reflexive.
+set (S1:=(nil (A:=Move), m :: b, d)).
+assert (dstep S1 (stepf S1)); (try apply f2ind); unfold S1; auto.
+elim Hinv; intros Hpath [SD [NO NT]]; assumption.
+apply sameExec_transitive with (stepf S1); auto.
+intros r; apply dstep_inv_getdst; auto.
+apply dstepp_sameExec; auto; apply dstepp_trans with (stepf S1); auto.
+apply dstepp_refl; auto.
+apply Hrec; auto.
+unfold ltof; apply step_dec; assumption.
+apply (dstep_inv S1); assumption.
+set (S1:=(m :: t, b, d)).
+assert (dstep S1 (stepf S1)); (try apply f2ind); unfold S1; auto.
+elim Hinv; intros Hpath [SD [NO NT]]; assumption.
+apply sameExec_transitive with (stepf S1); auto.
+intros r; apply dstep_inv_getdst; auto.
+apply dstepp_sameExec; auto; apply dstepp_trans with (stepf S1); auto.
+apply dstepp_refl; auto.
+apply Hrec; auto.
+unfold ltof; apply step_dec; assumption.
+apply (dstep_inv S1); assumption.
+Qed.
+
+Definition P_move := fun (p : Moves) => StateDone (Pmov (p, nil, nil)).
+
+Definition Sexec := sexec.
+
+Definition Get := get.
+
+Fixpoint listsLoc2Moves (src dst : list loc) {struct src} : Moves :=
+ match src with
+ nil => nil
+ | s :: srcs =>
+ match dst with
+ nil => nil
+ | d :: dsts => (s, d) :: listsLoc2Moves srcs dsts
+ end
+ end.
+
+Definition no_overlap (l1 l2 : list loc) :=
+ forall r, In r l1 -> forall s, In s l2 -> r = s \/ Loc.diff r s.
+
+Definition no_overlap_state (S : State) :=
+ no_overlap
+ (getsrc (StateToMove S ++ StateBeing S))
+ (getdst (StateToMove S ++ StateBeing S)).
+
+Definition no_overlap_list := fun l => no_overlap (getsrc l) (getdst l).
+
+Lemma Indst_noOverlap_aux:
+ forall l1 l,
+ (forall (s : Reg), In s (getdst l1) -> l = s \/ Loc.diff l s) ->
+ noOverlap_aux l (getdst l1).
+Proof.
+intros; induction l1; simpl; auto.
+destruct a as [a1 a2]; simpl; split.
+elim (H a2); (try intros H0).
+left; auto.
+right; apply Loc.diff_sym; auto.
+simpl; left; trivial.
+apply IHl1; intros.
+apply H; simpl; right; (try assumption).
+Qed.
+
+Lemma no_overlap_noOverlap:
+ forall r, no_overlap_state r -> noOverlap (StateToMove r ++ StateBeing r).
+Proof.
+intros r; unfold noOverlap, no_overlap_state.
+set (l1:=StateToMove r ++ StateBeing r).
+unfold no_overlap; intros H l H0.
+apply Indst_noOverlap_aux; intros; apply H; auto.
+Qed.
+
+Theorem Fpmov_correctMoves:
+ forall p e r,
+ simpleDest p ->
+ no_overlap_list p ->
+ noTmp p ->
+ notemporary r ->
+ (forall (x : Reg), In x (getdst p) -> r = x \/ Loc.diff r x) ->
+ get (pexec p e) r = get (sexec (StateDone (Pmov (p, nil, nil))) e) r.
+Proof.
+intros p e r SD no_O notmp notempo.
+generalize (Fpmov_correct (p, nil, nil)); unfold sameExec, exec; simpl;
+ rewrite SB_Pmov; rewrite STM_Pmov; simpl.
+(repeat rewrite app_nil); intro.
+apply H; auto.
+unfold stepInv; simpl; (repeat split); (try (rewrite app_nil; assumption)); auto.
+generalize (no_overlap_noOverlap (p, nil, nil)); simpl; intros; auto.
+apply H0; auto; unfold no_overlap_list in H0 |-.
+unfold no_overlap_state; simpl; (repeat rewrite app_nil); auto.
+Qed.
+
+Theorem Fpmov_correct1:
+ forall (p : Moves) (e : Env) (r : Reg),
+ simpleDest p ->
+ no_overlap_list p ->
+ noTmp p ->
+ notemporary r ->
+ (forall (x : Reg), In x (getdst p) -> r = x \/ Loc.diff r x) ->
+ noWrite p r -> get e r = get (sexec (StateDone (Pmov (p, nil, nil))) e) r.
+Proof.
+intros p e r Hsd Hno_O HnoTmp Hrnotempo Hrno_Overlap Hnw.
+rewrite <- (Fpmov_correctMoves p e); (try assumption).
+destruct p; auto.
+destruct m as [m1 m2]; simpl; case (Loc.eq m2 r); intros.
+elim Hnw; intros; absurd (Loc.diff m2 r); auto.
+rewrite e0; apply Loc.same_not_diff.
+elim Hnw; intros H1 H2.
+rewrite get_update_diff; (try assumption).
+apply get_noWrite; (try assumption).
+Qed.
+
+Lemma In_SD_diff:
+ forall (s d a1 a2 : Reg) (p : Moves),
+ In (s, d) p -> simpleDest ((a1, a2) :: p) -> Loc.diff a2 d.
+Proof.
+intros; induction p.
+inversion H.
+elim H; auto.
+intro; subst a; elim H0; intros H1 H2; elim H1; intros; apply Loc.diff_sym;
+ assumption.
+intro; apply IHp; auto.
+apply simpleDest_pop2 with a; (try assumption).
+Qed.
+
+Theorem pexec_correct:
+ forall (e : Env) (m : Move) (p : Moves),
+ In m p -> simpleDest p -> (let (s, d) := m in get (pexec p e) d = get e s).
+Proof.
+induction p; intros.
+elim H.
+destruct m.
+elim (in_inv H); intro.
+rewrite H1; simpl; rewrite get_update_id; auto.
+destruct a as [a1 a2]; simpl.
+rewrite get_update_diff.
+apply IHp; auto.
+apply (simpleDest_pop (a1, a2)); (try assumption).
+apply (In_SD_diff r) with ( p := p ) ( a1 := a1 ); auto.
+Qed.
+
+Lemma In_noTmp_notempo:
+ forall (s d : Reg) (p : Moves), In (s, d) p -> noTmp p -> notemporary d.
+Proof.
+intros; unfold notemporary; induction p.
+inversion H.
+elim H; intro.
+subst a; elim H0; intros H1 [H3 H2]; (try assumption).
+intro; apply IHp; auto.
+destruct a; elim H0; intros _ [H2 H3]; (try assumption).
+Qed.
+
+Lemma In_Indst: forall s d p, In (s, d) p -> In d (getdst p).
+Proof.
+intros; induction p; auto.
+destruct a; simpl.
+elim H; intro.
+left; inversion H0; trivial.
+right; apply IHp; auto.
+Qed.
+
+Lemma In_SD_diff':
+ forall (d a1 a2 : Reg) (p : Moves),
+ In d (getdst p) -> simpleDest ((a1, a2) :: p) -> Loc.diff a2 d.
+Proof.
+intros d a1 a2 p H H0; induction p.
+inversion H.
+destruct a; elim H.
+elim H0; simpl; intros.
+subst r0.
+elim H1; intros H3 H4; apply Loc.diff_sym; assumption.
+intro; apply IHp; (try assumption).
+apply simpleDest_pop2 with (r, r0); (try assumption).
+Qed.
+
+Lemma In_SD_no_o:
+ forall (s d : Reg) (p : Moves),
+ In (s, d) p ->
+ simpleDest p -> forall (x : Reg), In x (getdst p) -> d = x \/ Loc.diff d x.
+Proof.
+intros s d p Hin Hsd; induction p.
+inversion Hin.
+destruct a as [a1 a2]; elim Hin; intros.
+inversion H; subst d; subst s.
+elim H0; intros H1; [left | right]; (try assumption).
+apply (In_SD_diff' x a1 a2 p); auto.
+elim H0.
+intro; subst x.
+right; apply Loc.diff_sym; apply (In_SD_diff s d a1 a2 p); auto.
+intro; apply IHp; auto.
+apply (simpleDest_pop (a1, a2)); assumption.
+Qed.
+
+Lemma getdst_map: forall p, getdst p = map (fun x => snd x) p.
+Proof.
+induction p.
+simpl; auto.
+destruct a; simpl.
+rewrite IHp; auto.
+Qed.
+
+Lemma getsrc_map: forall p, getsrc p = map (fun x => fst x) p.
+Proof.
+induction p.
+simpl; auto.
+destruct a; simpl.
+rewrite IHp; auto.
+Qed.
+
+Theorem Fpmov_correct2:
+ forall (p : Moves) (e : Env) (m : Move),
+ In m p ->
+ simpleDest p ->
+ no_overlap_list p ->
+ noTmp p ->
+ (let (s, d) := m in get (sexec (StateDone (Pmov (p, nil, nil))) e) d = get e s).
+Proof.
+intros p e m Hin Hsd Hno_O HnoTmp; destruct m as [s d];
+ generalize (Fpmov_correctMoves p e); intros.
+rewrite <- H; auto.
+apply pexec_correct with ( m := (s, d) ); auto.
+apply (In_noTmp_notempo s d p); auto.
+apply (In_SD_no_o s d p Hin Hsd).
+Qed.
+
+Lemma notindst_nW: forall a p, Loc.notin a (getdst p) -> noWrite p a.
+Proof.
+induction p; simpl; auto.
+destruct a0 as [a1 a2].
+simpl.
+intros H; elim H; intro; split.
+apply Loc.diff_sym; (try assumption).
+apply IHp; auto.
+Qed.
+
+Lemma disjoint_tmp__noTmp:
+ forall p,
+ Loc.disjoint (getsrc p) temporaries ->
+ Loc.disjoint (getdst p) temporaries -> noTmp p.
+Proof.
+induction p; simpl; auto.
+destruct a as [a1 a2]; simpl getsrc; simpl getdst; unfold Loc.disjoint; intros;
+ (repeat split).
+intro; unfold T; case (Loc.type r); apply H; (try (left; trivial; fail)).
+right; left; trivial.
+right; right; right; right; left; trivial.
+intro; unfold T; case (Loc.type r); apply H0; (try (left; trivial; fail)).
+right; left; trivial.
+right; right; right; right; left; trivial.
+apply IHp.
+apply Loc.disjoint_cons_left with a1; auto.
+apply Loc.disjoint_cons_left with a2; auto.
+Qed.
+
+Theorem Fpmov_correct_IT3:
+ forall p rs,
+ simpleDest p ->
+ no_overlap_list p ->
+ Loc.disjoint (getsrc p) temporaries ->
+ Loc.disjoint (getdst p) temporaries ->
+ (sexec (StateDone (Pmov (p, nil, nil))) rs) (R IT3) = rs (R IT3).
+Proof.
+intros p rs Hsd Hno_O Hdistmpsrc Hdistmpdst.
+generalize (Fpmov_correctMoves p rs); unfold get, Locmap.get; intros H2.
+rewrite <- H2; auto.
+generalize (get_noWrite p (R IT3)); unfold get, Locmap.get; intros.
+rewrite <- H; auto.
+apply notindst_nW.
+apply (Loc.disjoint_notin temporaries).
+apply Loc.disjoint_sym; auto.
+right; right; left; trivial.
+apply disjoint_tmp__noTmp; auto.
+unfold notemporary, T.
+intros x; case (Loc.type x); simpl; intro; discriminate.
+intros x H; right; apply Loc.in_notin_diff with (getdst p); auto.
+apply Loc.disjoint_notin with temporaries; auto.
+apply Loc.disjoint_sym; auto.
+right; right; left; trivial.
+Qed.
+
+Theorem Fpmov_correct_map:
+ forall p rs,
+ simpleDest p ->
+ no_overlap_list p ->
+ Loc.disjoint (getsrc p) temporaries ->
+ Loc.disjoint (getdst p) temporaries ->
+ List.map (sexec (StateDone (Pmov (p, nil, nil))) rs) (getdst p) =
+ List.map rs (getsrc p).
+Proof.
+intros; rewrite getsrc_map; rewrite getdst_map; rewrite list_map_compose;
+ rewrite list_map_compose; apply list_map_exten; intros.
+generalize (Fpmov_correct2 p rs x).
+destruct x; simpl.
+unfold get, Locmap.get; intros; auto.
+rewrite H4; auto.
+apply disjoint_tmp__noTmp; auto.
+Qed.
+
+Theorem Fpmov_correct_ext:
+ forall p rs,
+ simpleDest p ->
+ no_overlap_list p ->
+ Loc.disjoint (getsrc p) temporaries ->
+ Loc.disjoint (getdst p) temporaries ->
+ forall l,
+ Loc.notin l (getdst p) ->
+ Loc.notin l temporaries ->
+ (sexec (StateDone (Pmov (p, nil, nil))) rs) l = rs l.
+Proof.
+intros; generalize (Fpmov_correct1 p rs l); unfold get, Locmap.get; intros.
+rewrite <- H5; auto.
+apply disjoint_tmp__noTmp; auto.
+unfold notemporary; simpl in H4 |-; unfold T; intros x; case (Loc.type x).
+elim H4;
+ [intros H6 H7; elim H7; [intros H8 H9; (try clear H7 H4); (try exact H8)]].
+elim H4;
+ [intros H6 H7; elim H7;
+ [intros H8 H9; elim H9;
+ [intros H10 H11; elim H11;
+ [intros H12 H13; elim H13;
+ [intros H14 H15; (try clear H13 H11 H9 H7 H4); (try exact H14)]]]]].
+unfold no_overlap_list, no_overlap in H0 |-; intros.
+case (Loc.eq l x).
+intros e; left; (try assumption).
+intros n; right; (try assumption).
+apply Loc.in_notin_diff with (getdst p); auto.
+apply notindst_nW; auto.
+Qed.
diff --git a/backend/RTL.v b/backend/RTL.v
new file mode 100644
index 0000000..ac9a415
--- /dev/null
+++ b/backend/RTL.v
@@ -0,0 +1,349 @@
+(** The RTL intermediate language: abstract syntax and semantics.
+
+ RTL (``Register Transfer Language'' is the first intermediate language
+ after Cminor.
+*)
+
+Require Import Relations.
+Require Import Coqlib.
+Require Import Maps.
+Require Import AST.
+Require Import Integers.
+Require Import Values.
+Require Import Mem.
+Require Import Globalenvs.
+Require Import Op.
+Require Import Registers.
+
+(** * Abstract syntax *)
+
+(** RTL is organized as instructions, functions and programs.
+ Instructions correspond roughly to elementary instructions of the
+ target processor, but take their arguments and leave their results
+ in pseudo-registers (also called temporaries in textbooks).
+ Infinitely many pseudo-registers are available, and each function
+ has its own set of pseudo-registers, unaffected by function calls.
+
+ Instructions are organized as a control-flow graph: a function is
+ a finite map from ``nodes'' (abstract program points) to instructions,
+ and each instruction lists explicitly the nodes of its successors.
+*)
+
+Definition node := positive.
+
+Inductive instruction: Set :=
+ | Inop: node -> instruction
+ (** No operation -- just branch to the successor. *)
+ | Iop: operation -> list reg -> reg -> node -> instruction
+ (** [Iop op args dest succ] performs the arithmetic operation [op]
+ over the values of registers [args], stores the result in [dest],
+ and branches to [succ]. *)
+ | Iload: memory_chunk -> addressing -> list reg -> reg -> node -> instruction
+ (** [Iload chunk addr args dest succ] loads a [chunk] quantity from
+ the address determined by the addressing mode [addr] and the
+ values of the [args] registers, stores the quantity just read
+ into [dest], and branches to [succ]. *)
+ | Istore: memory_chunk -> addressing -> list reg -> reg -> node -> instruction
+ (** [Istore chunk addr args src succ] stores the value of register
+ [src] in the [chunk] quantity at the
+ the address determined by the addressing mode [addr] and the
+ values of the [args] registers, then branches to [succ]. *)
+ | Icall: signature -> reg + ident -> list reg -> reg -> node -> instruction
+ (** [Icall sig fn args dest succ] invokes the function determined by
+ [fn] (either a function pointer found in a register or a
+ function name), giving it the values of registers [args]
+ as arguments. It stores the return value in [dest] and branches
+ to [succ]. *)
+ | Icond: condition -> list reg -> node -> node -> instruction
+ (** [Icond cond args ifso ifnot] evaluates the boolean condition
+ [cond] over the values of registers [args]. If the condition
+ is true, it transitions to [ifso]. If the condition is false,
+ it transitions to [ifnot]. *)
+ | Ireturn: option reg -> instruction.
+ (** [Ireturn] terminates the execution of the current function
+ (it has no successor). It returns the value of the given
+ register, or [Vundef] if none is given. *)
+
+Definition code: Set := PTree.t instruction.
+
+Record function: Set := mkfunction {
+ fn_sig: signature;
+ fn_params: list reg;
+ fn_stacksize: Z;
+ fn_code: code;
+ fn_entrypoint: node;
+ fn_nextpc: node;
+ fn_code_wf: forall (pc: node), Plt pc fn_nextpc \/ fn_code!pc = None
+}.
+
+(** A function description comprises a control-flow graph (CFG) [fn_code]
+ (a partial finite mapping from nodes to instructions). As in Cminor,
+ [fn_sig] is the function signature and [fn_stacksize] the number of bytes
+ for its stack-allocated activation record. [fn_params] is the list
+ of registers that are bound to the values of arguments at call time.
+ [fn_entrypoint] is the node of the first instruction of the function
+ in the CFG. [fn_code_wf] asserts that all instructions of the function
+ have nodes no greater than [fn_nextpc]. *)
+
+Definition program := AST.program function.
+
+(** * Operational semantics *)
+
+Definition genv := Genv.t function.
+Definition regset := Regmap.t val.
+
+Fixpoint init_regs (vl: list val) (rl: list reg) {struct rl} : regset :=
+ match rl, vl with
+ | r1 :: rs, v1 :: vs => Regmap.set r1 v1 (init_regs vs rs)
+ | _, _ => Regmap.init Vundef
+ end.
+
+Section RELSEM.
+
+Variable ge: genv.
+
+Definition find_function (ros: reg + ident) (rs: regset) : option function :=
+ match ros with
+ | inl r => Genv.find_funct ge rs#r
+ | inr symb =>
+ match Genv.find_symbol ge symb with
+ | None => None
+ | Some b => Genv.find_funct_ptr ge b
+ end
+ end.
+
+(** The dynamic semantics of RTL is a combination of small-step (transition)
+ semantics and big-step semantics. Execution of an instruction performs
+ a single transition to the next instruction (small-step), except if
+ the instruction is a function call. In this case, the whole body of
+ the called function is executed at once and the transition terminates
+ on the instruction immediately following the call in the caller function.
+ Such ``mixed-step'' semantics is convenient for reasoning over
+ intra-procedural analyses and transformations. It also dispenses us
+ from making the call stack explicit in the semantics.
+
+ The semantics is organized in three mutually inductive predicates.
+ The first is [exec_instr ge c sp pc rs m pc' rs' m']. [ge] is the
+ global environment (see module [Genv]), [c] the CFG for the current
+ function, and [sp] the pointer to the stack block for its
+ current activation (as in Cminor). [pc], [rs] and [m] is the
+ initial state of the transition: program point (CFG node) [pc],
+ register state (mapping of pseudo-registers to values) [rs],
+ and memory state [m]. The final state is [pc'], [rs'] and [m']. *)
+
+Inductive exec_instr: code -> val ->
+ node -> regset -> mem ->
+ node -> regset -> mem -> Prop :=
+ | exec_Inop:
+ forall c sp pc rs m pc',
+ c!pc = Some(Inop pc') ->
+ exec_instr c sp pc rs m pc' rs m
+ | exec_Iop:
+ forall c sp pc rs m op args res pc' v,
+ c!pc = Some(Iop op args res pc') ->
+ eval_operation ge sp op rs##args = Some v ->
+ exec_instr c sp pc rs m pc' (rs#res <- v) m
+ | exec_Iload:
+ forall c sp pc rs m chunk addr args dst pc' a v,
+ c!pc = Some(Iload chunk addr args dst pc') ->
+ eval_addressing ge sp addr rs##args = Some a ->
+ Mem.loadv chunk m a = Some v ->
+ exec_instr c sp pc rs m pc' (rs#dst <- v) m
+ | exec_Istore:
+ forall c sp pc rs m chunk addr args src pc' a m',
+ c!pc = Some(Istore chunk addr args src pc') ->
+ eval_addressing ge sp addr rs##args = Some a ->
+ Mem.storev chunk m a rs#src = Some m' ->
+ exec_instr c sp pc rs m pc' rs m'
+ | exec_Icall:
+ forall c sp pc rs m sig ros args res pc' f vres m',
+ c!pc = Some(Icall sig ros args res pc') ->
+ find_function ros rs = Some f ->
+ sig = f.(fn_sig) ->
+ exec_function f rs##args m vres m' ->
+ exec_instr c sp pc rs m pc' (rs#res <- vres) m'
+ | exec_Icond_true:
+ forall c sp pc rs m cond args ifso ifnot,
+ c!pc = Some(Icond cond args ifso ifnot) ->
+ eval_condition cond rs##args = Some true ->
+ exec_instr c sp pc rs m ifso rs m
+ | exec_Icond_false:
+ forall c sp pc rs m cond args ifso ifnot,
+ c!pc = Some(Icond cond args ifso ifnot) ->
+ eval_condition cond rs##args = Some false ->
+ exec_instr c sp pc rs m ifnot rs m
+
+(** [exec_instrs ge c sp pc rs m pc' rs' m'] is the reflexive
+ transitive closure of [exec_instr]. It corresponds to the execution
+ of zero, one or finitely many transitions. *)
+
+with exec_instrs: code -> val ->
+ node -> regset -> mem ->
+ node -> regset -> mem -> Prop :=
+ | exec_refl:
+ forall c sp pc rs m,
+ exec_instrs c sp pc rs m pc rs m
+ | exec_one:
+ forall c sp pc rs m pc' rs' m',
+ exec_instr c sp pc rs m pc' rs' m' ->
+ exec_instrs c sp pc rs m pc' rs' m'
+ | exec_trans:
+ forall c sp pc1 rs1 m1 pc2 rs2 m2 pc3 rs3 m3,
+ exec_instrs c sp pc1 rs1 m1 pc2 rs2 m2 ->
+ exec_instrs c sp pc2 rs2 m2 pc3 rs3 m3 ->
+ exec_instrs c sp pc1 rs1 m1 pc3 rs3 m3
+
+(** [exec_function ge f args m res m'] executes a function application.
+ [f] is the called function, [args] the values of its arguments,
+ and [m] the memory state at the beginning of the call. [res] is
+ the returned value: the value of [r] if the function terminates with
+ a [Ireturn (Some r)], or [Vundef] if it terminates with [Ireturn None].
+ Evaluation proceeds by executing transitions from the function's entry
+ point to the first [Ireturn] instruction encountered. It is preceeded
+ by the allocation of the stack activation block and the binding
+ of register parameters to the provided arguments.
+ (Non-parameter registers are initialized to [Vundef].) Before returning,
+ the stack activation block is freed. *)
+
+with exec_function: function -> list val -> mem ->
+ val -> mem -> Prop :=
+ | exec_funct:
+ forall f m m1 stk args pc rs m2 or vres,
+ Mem.alloc m 0 f.(fn_stacksize) = (m1, stk) ->
+ exec_instrs f.(fn_code) (Vptr stk Int.zero)
+ f.(fn_entrypoint) (init_regs args f.(fn_params)) m1
+ pc rs m2 ->
+ f.(fn_code)!pc = Some(Ireturn or) ->
+ vres = regmap_optget or Vundef rs ->
+ exec_function f args m vres (Mem.free m2 stk).
+
+Scheme exec_instr_ind_3 := Minimality for exec_instr Sort Prop
+ with exec_instrs_ind_3 := Minimality for exec_instrs Sort Prop
+ with exec_function_ind_3 := Minimality for exec_function Sort Prop.
+
+(** Some derived execution rules. *)
+
+Lemma exec_step:
+ forall c sp pc1 rs1 m1 pc2 rs2 m2 pc3 rs3 m3,
+ exec_instr c sp pc1 rs1 m1 pc2 rs2 m2 ->
+ exec_instrs c sp pc2 rs2 m2 pc3 rs3 m3 ->
+ exec_instrs c sp pc1 rs1 m1 pc3 rs3 m3.
+Proof.
+ intros. eapply exec_trans. apply exec_one. eauto. eauto.
+Qed.
+
+Lemma exec_Iop':
+ forall c sp pc rs m op args res pc' rs' v,
+ c!pc = Some(Iop op args res pc') ->
+ eval_operation ge sp op rs##args = Some v ->
+ rs' = (rs#res <- v) ->
+ exec_instr c sp pc rs m pc' rs' m.
+Proof.
+ intros. subst rs'. eapply exec_Iop; eauto.
+Qed.
+
+Lemma exec_Iload':
+ forall c sp pc rs m chunk addr args dst pc' rs' a v,
+ c!pc = Some(Iload chunk addr args dst pc') ->
+ eval_addressing ge sp addr rs##args = Some a ->
+ Mem.loadv chunk m a = Some v ->
+ rs' = (rs#dst <- v) ->
+ exec_instr c sp pc rs m pc' rs' m.
+Proof.
+ intros. subst rs'. eapply exec_Iload; eauto.
+Qed.
+
+(** If a transition can take place from [pc], the instruction at [pc]
+ is defined in the CFG. *)
+
+Lemma exec_instr_present:
+ forall c sp pc rs m pc' rs' m',
+ exec_instr c sp pc rs m pc' rs' m' ->
+ c!pc <> None.
+Proof.
+ induction 1; congruence.
+Qed.
+
+Lemma exec_instrs_present:
+ forall c sp pc rs m pc' rs' m',
+ exec_instrs c sp pc rs m pc' rs' m' ->
+ c!pc' <> None -> c!pc <> None.
+Proof.
+ induction 1; intros.
+ auto.
+ eapply exec_instr_present; eauto.
+ eauto.
+Qed.
+
+End RELSEM.
+
+(** Execution of whole programs. As in Cminor, we call the ``main'' function
+ with no arguments and observe its return value. *)
+
+Definition exec_program (p: program) (r: val) : Prop :=
+ let ge := Genv.globalenv p in
+ let m0 := Genv.init_mem p in
+ exists b, exists f, exists m,
+ Genv.find_symbol ge p.(prog_main) = Some b /\
+ Genv.find_funct_ptr ge b = Some f /\
+ f.(fn_sig) = mksignature nil (Some Tint) /\
+ exec_function ge f nil m0 r m.
+
+(** * Operations on RTL abstract syntax *)
+
+(** Computation of the possible successors of an instruction.
+ This is used in particular for dataflow analyses. *)
+
+Definition successors (f: function) (pc: node) : list node :=
+ match f.(fn_code)!pc with
+ | None => nil
+ | Some i =>
+ match i with
+ | Inop s => s :: nil
+ | Iop op args res s => s :: nil
+ | Iload chunk addr args dst s => s :: nil
+ | Istore chunk addr args src s => s :: nil
+ | Icall sig ros args res s => s :: nil
+ | Icond cond args ifso ifnot => ifso :: ifnot :: nil
+ | Ireturn optarg => nil
+ end
+ end.
+
+Lemma successors_correct:
+ forall ge f sp pc rs m pc' rs' m',
+ exec_instr ge f.(fn_code) sp pc rs m pc' rs' m' ->
+ In pc' (successors f pc).
+Proof.
+ intros ge f. unfold successors. generalize (fn_code f).
+ induction 1; rewrite H; simpl; tauto.
+Qed.
+
+(** Transformation of a RTL function instruction by instruction.
+ This applies a given transformation function to all instructions
+ of a function and constructs a transformed function from that. *)
+
+Section TRANSF.
+
+Variable transf: node -> instruction -> instruction.
+
+Lemma transf_code_wf:
+ forall (c: code) (nextpc: node),
+ (forall (pc: node), Plt pc nextpc \/ c!pc = None) ->
+ (forall (pc: node), Plt pc nextpc \/ (PTree.map transf c)!pc = None).
+Proof.
+ intros. elim (H pc); intro.
+ left; assumption.
+ right. rewrite PTree.gmap. rewrite H0. reflexivity.
+Qed.
+
+Definition transf_function (f: function) : function :=
+ mkfunction
+ f.(fn_sig)
+ f.(fn_params)
+ f.(fn_stacksize)
+ (PTree.map transf f.(fn_code))
+ f.(fn_entrypoint)
+ f.(fn_nextpc)
+ (transf_code_wf f.(fn_code) f.(fn_nextpc) f.(fn_code_wf)).
+
+End TRANSF.
diff --git a/backend/RTLgen.v b/backend/RTLgen.v
new file mode 100644
index 0000000..9dc9660
--- /dev/null
+++ b/backend/RTLgen.v
@@ -0,0 +1,473 @@
+(** Translation from Cminor to RTL. *)
+
+Require Import Coqlib.
+Require Import Maps.
+Require Import AST.
+Require Import Integers.
+Require Import Values.
+Require Import Op.
+Require Import Registers.
+Require Import Cminor.
+Require Import RTL.
+
+(** * Mutated variables *)
+
+(** The following functions compute the list of local Cminor variables
+ possibly modified during the evaluation of the given expression.
+ It is used in the [alloc_reg] function to avoid unnecessary
+ register-to-register moves in the generated RTL. *)
+
+Fixpoint mutated_expr (a: expr) : list ident :=
+ match a with
+ | Evar id => nil
+ | Eassign id b => id :: mutated_expr b
+ | Eop op bl => mutated_exprlist bl
+ | Eload _ _ bl => mutated_exprlist bl
+ | Estore _ _ bl c => mutated_exprlist bl ++ mutated_expr c
+ | Ecall _ b cl => mutated_expr b ++ mutated_exprlist cl
+ | Econdition b c d => mutated_condexpr b ++ mutated_expr c ++ mutated_expr d
+ | Elet b c => mutated_expr b ++ mutated_expr c
+ | Eletvar n => nil
+ end
+
+with mutated_condexpr (a: condexpr) : list ident :=
+ match a with
+ | CEtrue => nil
+ | CEfalse => nil
+ | CEcond cond bl => mutated_exprlist bl
+ | CEcondition b c d =>
+ mutated_condexpr b ++ mutated_condexpr c ++ mutated_condexpr d
+ end
+
+with mutated_exprlist (l: exprlist) : list ident :=
+ match l with
+ | Enil => nil
+ | Econs a bl => mutated_expr a ++ mutated_exprlist bl
+ end.
+
+(** * Translation environments and state *)
+
+(** The translation functions are parameterized by the following
+ compile-time environment, which maps Cminor local variables and
+ let-bound variables to RTL registers. The mapping for local variables
+ is computed from the Cminor variable declarations at the beginning of
+ the translation of a function, and does not change afterwards.
+ The mapping for let-bound variables is initially empty and updated
+ during translation of expressions, when crossing a [Elet] binding. *)
+
+Record mapping: Set := mkmapping {
+ map_vars: PTree.t reg;
+ map_letvars: list reg
+}.
+
+(** The translation functions modify a global state, comprising the
+ current state of the control-flow graph for the function being translated,
+ as well as sources of fresh RTL registers and fresh CFG nodes. *)
+
+Record state: Set := mkstate {
+ st_nextreg: positive;
+ st_nextnode: positive;
+ st_code: code;
+ st_wf: forall (pc: positive), Plt pc st_nextnode \/ st_code!pc = None
+}.
+
+(** ** The state and error monad *)
+
+(** The translation functions can fail to produce RTL code, for instance
+ if a non-declared variable is referenced. They must also modify
+ the global state, adding new nodes to the control-flow graph and
+ generating fresh temporary registers. In a language like ML or Java,
+ we would use exceptions to report errors and mutable data structures
+ to modify the global state. These luxuries are not available in Coq,
+ however. Instead, we use a monadic encoding of the translation:
+ translation functions take the current global state as argument,
+ and return either [Error] to denote an error, or [OK r s] to denote
+ success. [s] is the modified state, and [r] the result value of the
+ translation function.
+
+ We now define this monadic encoding -- the ``state and error'' monad --
+ as well as convenient syntax to express monadic computations. *)
+
+Set Implicit Arguments.
+
+Inductive res (A: Set) : Set :=
+ | Error: res A
+ | OK: A -> state -> res A.
+
+Definition mon (A: Set) : Set := state -> res A.
+
+Definition ret (A: Set) (x: A) : mon A := fun (s: state) => OK x s.
+
+Definition error (A: Set) : mon A := fun (s: state) => Error A.
+
+Definition bind (A B: Set) (f: mon A) (g: A -> mon B) : mon B :=
+ fun (s: state) =>
+ match f s with
+ | Error => Error B
+ | OK a s' => g a s'
+ end.
+
+Definition bind2 (A B C: Set) (f: mon (A * B)) (g: A -> B -> mon C) : mon C :=
+ bind f (fun xy => g (fst xy) (snd xy)).
+
+Notation "'do' X <- A ; B" := (bind A (fun X => B))
+ (at level 200, X ident, A at level 100, B at level 200).
+Notation "'do' ( X , Y ) <- A ; B" := (bind2 A (fun X Y => B))
+ (at level 200, X ident, Y ident, A at level 100, B at level 200).
+
+(** ** Operations on state *)
+
+(** The initial state (empty CFG). *)
+
+Lemma init_state_wf:
+ forall pc, Plt pc 1%positive \/ (PTree.empty instruction)!pc = None.
+Proof. intros; right; apply PTree.gempty. Qed.
+
+Definition init_state : state :=
+ mkstate 1%positive 1%positive (PTree.empty instruction) init_state_wf.
+
+(** Adding a node with the given instruction to the CFG. Return the
+ label of the new node. *)
+
+Lemma add_instr_wf:
+ forall s i pc,
+ let n := s.(st_nextnode) in
+ Plt pc (Psucc n) \/ (PTree.set n i s.(st_code))!pc = None.
+Proof.
+ intros. case (peq pc n); intro.
+ subst pc; left; apply Plt_succ.
+ rewrite PTree.gso; auto.
+ elim (st_wf s pc); intro.
+ left. apply Plt_trans_succ. exact H.
+ right; assumption.
+Qed.
+
+Definition add_instr (i: instruction) : mon node :=
+ fun s =>
+ let n := s.(st_nextnode) in
+ OK n
+ (mkstate s.(st_nextreg)
+ (Psucc n)
+ (PTree.set n i s.(st_code))
+ (add_instr_wf s i)).
+
+(** [add_instr] can be decomposed in two steps: reserving a fresh
+ CFG node, and filling it later with an instruction. This is needed
+ to compile loops. *)
+
+Lemma reserve_instr_wf:
+ forall s pc,
+ Plt pc (Psucc s.(st_nextnode)) \/ s.(st_code)!pc = None.
+Proof.
+ intros. elim (st_wf s pc); intro.
+ left; apply Plt_trans_succ; auto.
+ right; auto.
+Qed.
+
+Definition reserve_instr : mon node :=
+ fun s =>
+ let n := s.(st_nextnode) in
+ OK n (mkstate s.(st_nextreg) (Psucc n) s.(st_code)
+ (reserve_instr_wf s)).
+
+Lemma update_instr_wf:
+ forall s n i,
+ Plt n s.(st_nextnode) ->
+ forall pc,
+ Plt pc s.(st_nextnode) \/ (PTree.set n i s.(st_code))!pc = None.
+Proof.
+ intros.
+ case (peq pc n); intro.
+ subst pc; left; assumption.
+ rewrite PTree.gso; auto. exact (st_wf s pc).
+Qed.
+
+Definition update_instr (n: node) (i: instruction) : mon unit :=
+ fun s =>
+ match plt n s.(st_nextnode) with
+ | left PEQ =>
+ OK tt (mkstate s.(st_nextreg) s.(st_nextnode)
+ (PTree.set n i s.(st_code))
+ (@update_instr_wf s n i PEQ))
+ | right _ =>
+ Error unit
+ end.
+
+(** Generate a fresh RTL register. *)
+
+Definition new_reg : mon reg :=
+ fun s =>
+ OK s.(st_nextreg)
+ (mkstate (Psucc s.(st_nextreg))
+ s.(st_nextnode) s.(st_code) s.(st_wf)).
+
+(** ** Operations on mappings *)
+
+Definition init_mapping : mapping :=
+ mkmapping (PTree.empty reg) nil.
+
+Definition add_var (map: mapping) (name: ident) : mon (reg * mapping) :=
+ do r <- new_reg;
+ ret (r, mkmapping (PTree.set name r map.(map_vars))
+ map.(map_letvars)).
+
+Fixpoint add_vars (map: mapping) (names: list ident)
+ {struct names} : mon (list reg * mapping) :=
+ match names with
+ | nil => ret (nil, map)
+ | n1 :: nl =>
+ do (rl, map1) <- add_vars map nl;
+ do (r1, map2) <- add_var map1 n1;
+ ret (r1 :: rl, map2)
+ end.
+
+Definition find_var (map: mapping) (name: ident) : mon reg :=
+ match PTree.get name map.(map_vars) with
+ | None => error reg
+ | Some r => ret r
+ end.
+
+Definition add_letvar (map: mapping) (r: reg) : mapping :=
+ mkmapping map.(map_vars) (r :: map.(map_letvars)).
+
+Definition find_letvar (map: mapping) (idx: nat) : mon reg :=
+ match List.nth_error map.(map_letvars) idx with
+ | None => error reg
+ | Some r => ret r
+ end.
+
+(** ** Optimized temporary generation *)
+
+(** [alloc_reg map mut a] returns the RTL register where the evaluation
+ of expression [a] should leave its result -- the ``target register''
+ for evaluating [a]. In general, this is a
+ fresh temporary register. Exception: if [a] is a let-bound variable
+ or a non-mutated local variable, we return the RTL register associated
+ with that variable instead. Returning a fresh temporary in all cases
+ would be semantically correct, but would generate less efficient
+ RTL code. *)
+
+Definition alloc_reg (map: mapping) (mut: list ident) (a: expr) : mon reg :=
+ match a with
+ | Evar id =>
+ if In_dec ident_eq id mut
+ then new_reg
+ else find_var map id
+ | Eletvar n =>
+ find_letvar map n
+ | _ =>
+ new_reg
+ end.
+
+(** [alloc_regs] is similar, but for a list of expressions. *)
+
+Fixpoint alloc_regs (map: mapping) (mut:list ident) (al: exprlist)
+ {struct al}: mon (list reg) :=
+ match al with
+ | Enil =>
+ ret nil
+ | Econs a bl =>
+ do rl <- alloc_regs map mut bl;
+ do r <- alloc_reg map mut a;
+ ret (r :: rl)
+ end.
+
+(** * RTL generation **)
+
+(** Insertion of a register-to-register move instruction. *)
+
+Definition add_move (rs rd: reg) (nd: node) : mon node :=
+ if Reg.eq rs rd
+ then ret nd
+ else add_instr (Iop Omove (rs::nil) rd nd).
+
+(** Translation of an expression. [transl_expr map mut a rd nd]
+ enriches the current CFG with the RTL instructions necessary
+ to compute the value of Cminor expression [a], leave its result
+ in register [rd], and branch to node [nd]. It returns the node
+ of the first instruction in this sequence. [map] is the compile-time
+ translation environment, and [mut] is an over-approximation of
+ the set of local variables possibly modified during
+ the evaluation of [a]. *)
+
+Fixpoint transl_expr (map: mapping) (mut: list ident)
+ (a: expr) (rd: reg) (nd: node)
+ {struct a}: mon node :=
+ match a with
+ | Evar v =>
+ do r <- find_var map v; add_move r rd nd
+ | Eassign v b =>
+ do r <- find_var map v;
+ do no <- add_move rd r nd; transl_expr map mut b rd no
+ | Eop op al =>
+ do rl <- alloc_regs map mut al;
+ do no <- add_instr (Iop op rl rd nd);
+ transl_exprlist map mut al rl no
+ | Eload chunk addr al =>
+ do rl <- alloc_regs map mut al;
+ do no <- add_instr (Iload chunk addr rl rd nd);
+ transl_exprlist map mut al rl no
+ | Estore chunk addr al b =>
+ do rl <- alloc_regs map mut al;
+ do no <- add_instr (Istore chunk addr rl rd nd);
+ do ns <- transl_expr map mut b rd no;
+ transl_exprlist map mut al rl ns
+ | Ecall sig b cl =>
+ do rf <- alloc_reg map mut b;
+ do rargs <- alloc_regs map mut cl;
+ do n1 <- add_instr (Icall sig (inl _ rf) rargs rd nd);
+ do n2 <- transl_exprlist map mut cl rargs n1;
+ transl_expr map mut b rf n2
+ | Econdition b c d =>
+ do nfalse <- transl_expr map mut d rd nd;
+ do ntrue <- transl_expr map mut c rd nd;
+ transl_condition map mut b ntrue nfalse
+ | Elet b c =>
+ do r <- new_reg;
+ do nc <- transl_expr (add_letvar map r) mut c rd nd;
+ transl_expr map mut b r nc
+ | Eletvar n =>
+ do r <- find_letvar map n; add_move r rd nd
+ end
+
+(** Translation of a conditional expression. Similar to [transl_expr],
+ but the expression is evaluated for its truth value, and the generated
+ code branches to one of two possible continuation nodes [ntrue] or
+ [nfalse] depending on the truth value of [a]. *)
+
+with transl_condition (map: mapping) (mut: list ident)
+ (a: condexpr) (ntrue nfalse: node)
+ {struct a}: mon node :=
+ match a with
+ | CEtrue =>
+ ret ntrue
+ | CEfalse =>
+ ret nfalse
+ | CEcond cond bl =>
+ do rl <- alloc_regs map mut bl;
+ do nt <- add_instr (Icond cond rl ntrue nfalse);
+ transl_exprlist map mut bl rl nt
+ | CEcondition b c d =>
+ do nd <- transl_condition map mut d ntrue nfalse;
+ do nc <- transl_condition map mut c ntrue nfalse;
+ transl_condition map mut b nc nd
+ end
+
+(** Translation of a list of expressions. The expressions are evaluated
+ left-to-right, and their values left in the given list of registers. *)
+
+with transl_exprlist (map: mapping) (mut: list ident)
+ (al: exprlist) (rl: list reg) (nd: node)
+ {struct al} : mon node :=
+ match al, rl with
+ | Enil, nil =>
+ ret nd
+ | Econs b bs, r :: rs =>
+ do no <- transl_exprlist map mut bs rs nd; transl_expr map mut b r no
+ | _, _ =>
+ error node
+ end.
+
+(** Auxiliary for branch prediction. When compiling an if/then/else
+ statement, we have a choice between translating the ``then'' branch
+ first or the ``else'' branch first. Linearization of RTL control-flow
+ graph, performed later, will exploit this choice as a hint about
+ which branch is most frequently executed. However, this choice has
+ no impact on program correctness. We delegate the choice to an
+ external heuristic (written in OCaml), declared below. *)
+
+Parameter more_likely: condexpr -> stmtlist -> stmtlist -> bool.
+
+(** Translation of statements. [transl_stmt map s nd nexits nret rret]
+ enriches the current CFG with the RTL instructions necessary to
+ execute the Cminor statement [s], and returns the node of the first
+ instruction in this sequence. The generated instructions continue
+ at node [nd] if the statement terminates normally, at node [nret]
+ if it terminates by early return, and at the [n]-th node in the list
+ [nlist] if it terminates by an [exit n] construct. [rret] is the
+ register where the return value of the function must be stored, if any. *)
+
+Fixpoint transl_stmt (map: mapping) (s: stmt) (nd: node)
+ (nexits: list node) (nret: node) (rret: option reg)
+ {struct s} : mon node :=
+ match s with
+ | Sexpr a =>
+ let mut := mutated_expr a in
+ do r <- alloc_reg map mut a; transl_expr map mut a r nd
+ | Sifthenelse a strue sfalse =>
+ let mut := mutated_condexpr a in
+ (if more_likely a strue sfalse then
+ do nfalse <- transl_stmtlist map sfalse nd nexits nret rret;
+ do ntrue <- transl_stmtlist map strue nd nexits nret rret;
+ transl_condition map mut a ntrue nfalse
+ else
+ do ntrue <- transl_stmtlist map strue nd nexits nret rret;
+ do nfalse <- transl_stmtlist map sfalse nd nexits nret rret;
+ transl_condition map mut a ntrue nfalse)
+ | Sloop sbody =>
+ do nloop <- reserve_instr;
+ do nbody <- transl_stmtlist map sbody nloop nexits nret rret;
+ do x <- update_instr nloop (Inop nbody);
+ ret nbody
+ | Sblock sbody =>
+ transl_stmtlist map sbody nd (nd :: nexits) nret rret
+ | Sexit n =>
+ match nth_error nexits n with
+ | None => error node
+ | Some ne => ret ne
+ end
+ | Sreturn opt_a =>
+ match opt_a, rret with
+ | None, None => ret nret
+ | Some a, Some r => transl_expr map (mutated_expr a) a r nret
+ | _, _ => error node
+ end
+ end
+
+(** Translation of lists of statements. *)
+
+with transl_stmtlist (map: mapping) (sl: stmtlist) (nd: node)
+ (nexits: list node) (nret: node) (rret: option reg)
+ {struct sl} : mon node :=
+ match sl with
+ | Snil => ret nd
+ | Scons s1 ss =>
+ do ns <- transl_stmtlist map ss nd nexits nret rret;
+ transl_stmt map s1 ns nexits nret rret
+ end.
+
+(** Translation of a Cminor function. *)
+
+Definition ret_reg (sig: signature) (rd: reg) : option reg :=
+ match sig.(sig_res) with
+ | None => None
+ | Some ty => Some rd
+ end.
+
+Definition transl_fun (f: Cminor.function) : mon (node * list reg) :=
+ do (rparams, map1) <- add_vars init_mapping f.(Cminor.fn_params);
+ do (rvars, map2) <- add_vars map1 f.(Cminor.fn_vars);
+ do rret <- new_reg;
+ let orret := ret_reg f.(Cminor.fn_sig) rret in
+ do nret <- add_instr (Ireturn orret);
+ do nentry <- transl_stmtlist map2 f.(Cminor.fn_body) nret nil nret orret;
+ ret (nentry, rparams).
+
+Definition transl_function (f: Cminor.function) : option RTL.function :=
+ match transl_fun f init_state with
+ | Error => None
+ | OK (nentry, rparams) s =>
+ Some (RTL.mkfunction
+ f.(Cminor.fn_sig)
+ rparams
+ f.(Cminor.fn_stackspace)
+ s.(st_code)
+ nentry
+ s.(st_nextnode)
+ s.(st_wf))
+ end.
+
+(** Translation of a whole program. *)
+
+Definition transl_program (p: Cminor.program) : option RTL.program :=
+ transform_partial_program transl_function p.
diff --git a/backend/RTLgenproof.v b/backend/RTLgenproof.v
new file mode 100644
index 0000000..98462d2
--- /dev/null
+++ b/backend/RTLgenproof.v
@@ -0,0 +1,1302 @@
+(** Correctness proof for RTL generation: main proof. *)
+
+Require Import Coqlib.
+Require Import Maps.
+Require Import AST.
+Require Import Integers.
+Require Import Values.
+Require Import Mem.
+Require Import Globalenvs.
+Require Import Op.
+Require Import Registers.
+Require Import Cminor.
+Require Import RTL.
+Require Import RTLgen.
+Require Import RTLgenproof1.
+
+Section CORRECTNESS.
+
+Variable prog: Cminor.program.
+Variable tprog: RTL.program.
+Hypothesis TRANSL: transl_program prog = Some tprog.
+
+Let ge : Cminor.genv := Genv.globalenv prog.
+Let tge : RTL.genv := Genv.globalenv tprog.
+
+(** Relationship between the global environments for the original
+ Cminor program and the generated RTL program. *)
+
+Lemma symbols_preserved:
+ forall (s: ident), Genv.find_symbol tge s = Genv.find_symbol ge s.
+Proof.
+ intro. unfold ge, tge.
+ apply Genv.find_symbol_transf_partial with transl_function.
+ exact TRANSL.
+Qed.
+
+Lemma function_ptr_translated:
+ forall (b: block) (f: Cminor.function),
+ Genv.find_funct_ptr ge b = Some f ->
+ exists tf,
+ Genv.find_funct_ptr tge b = Some tf /\ transl_function f = Some tf.
+Proof.
+ intros.
+ generalize
+ (Genv.find_funct_ptr_transf_partial transl_function TRANSL H).
+ case (transl_function f).
+ intros tf [A B]. exists tf. tauto.
+ intros [A B]. elim B. reflexivity.
+Qed.
+
+Lemma functions_translated:
+ forall (v: val) (f: Cminor.function),
+ Genv.find_funct ge v = Some f ->
+ exists tf,
+ Genv.find_funct tge v = Some tf /\ transl_function f = Some tf.
+Proof.
+ intros.
+ generalize
+ (Genv.find_funct_transf_partial transl_function TRANSL H).
+ case (transl_function f).
+ intros tf [A B]. exists tf. tauto.
+ intros [A B]. elim B. reflexivity.
+Qed.
+
+(** Correctness of the code generated by [add_move]. *)
+
+Lemma add_move_correct:
+ forall r1 r2 sp nd s ns s' rs m,
+ add_move r1 r2 nd s = OK ns s' ->
+ exists rs',
+ exec_instrs tge s'.(st_code) sp ns rs m nd rs' m /\
+ rs'#r2 = rs#r1 /\
+ (forall r, r <> r2 -> rs'#r = rs#r).
+Proof.
+ intros until m.
+ unfold add_move. case (Reg.eq r1 r2); intro.
+ monadSimpl. subst s'; subst r2; subst ns.
+ exists rs. split. apply exec_refl. split. auto. auto.
+ intro. exists (rs#r2 <- (rs#r1)).
+ split. apply exec_one. eapply exec_Iop. eauto with rtlg.
+ reflexivity.
+ split. apply Regmap.gss.
+ intros. apply Regmap.gso; auto.
+Qed.
+
+(** The proof of semantic preservation for the translation of expressions
+ is a simulation argument based on diagrams of the following form:
+<<
+ I /\ P
+ e, m, a ------------- ns, rs, m
+ || |
+ || |*
+ || |
+ \/ v
+ e', m', v ----------- nd, rs', m'
+ I /\ Q
+>>
+ where [transl_expr map mut a rd nd s = OK ns s'].
+ The left vertical arrow represents an evaluation of the expression [a]
+ (assumption). The right vertical arrow represents the execution of
+ zero, one or several instructions in the generated RTL flow graph
+ found in the final state [s'] (conclusion).
+
+ The invariant [I] is the agreement between Cminor environments and
+ RTL register environment, as captured by [match_envs].
+
+ The preconditions [P] include the well-formedness of the compilation
+ environment [mut] and the validity of [rd] as a target register.
+
+ The postconditions [Q] state that in the final register environment
+ [rs'], register [rd] contains value [v], and most other registers
+ valid in [s] are unchanged w.r.t. the initial register environment
+ [rs]. (See below for a precise specification of ``most other
+ registers''.)
+
+ We formalize this simulation property by the following predicate
+ parameterized by the Cminor evaluation (left arrow). *)
+
+Definition transl_expr_correct
+ (sp: val) (le: letenv) (e: env) (m: mem) (a: expr)
+ (e': env) (m': mem) (v: val) : Prop :=
+ forall map mut rd nd s ns s' rs
+ (MWF: map_wf map s)
+ (TE: transl_expr map mut a rd nd s = OK ns s')
+ (ME: match_env map e le rs)
+ (MUT: incl (mutated_expr a) mut)
+ (TRG: target_reg_ok s map mut a rd),
+ exists rs',
+ exec_instrs tge s'.(st_code) sp ns rs m nd rs' m'
+ /\ match_env map e' le rs'
+ /\ rs'#rd = v
+ /\ (forall r,
+ reg_valid r s -> ~(mutated_reg map mut r) ->
+ reg_in_map map r \/ r <> rd ->
+ rs'#r = rs#r).
+
+(** The simulation properties for lists of expressions and for
+ conditional expressions are similar. *)
+
+Definition transl_exprlist_correct
+ (sp: val) (le: letenv) (e: env) (m: mem) (al: exprlist)
+ (e': env) (m': mem) (vl: list val) : Prop :=
+ forall map mut rl nd s ns s' rs
+ (MWF: map_wf map s)
+ (TE: transl_exprlist map mut al rl nd s = OK ns s')
+ (ME: match_env map e le rs)
+ (MUT: incl (mutated_exprlist al) mut)
+ (TRG: target_regs_ok s map mut al rl),
+ exists rs',
+ exec_instrs tge s'.(st_code) sp ns rs m nd rs' m'
+ /\ match_env map e' le rs'
+ /\ rs'##rl = vl
+ /\ (forall r,
+ reg_valid r s -> ~(mutated_reg map mut r) ->
+ reg_in_map map r \/ ~(In r rl) ->
+ rs'#r = rs#r).
+
+Definition transl_condition_correct
+ (sp: val) (le: letenv) (e: env) (m: mem) (a: condexpr)
+ (e': env) (m': mem) (vb: bool) : Prop :=
+ forall map mut ntrue nfalse s ns s' rs
+ (MWF: map_wf map s)
+ (TE: transl_condition map mut a ntrue nfalse s = OK ns s')
+ (ME: match_env map e le rs)
+ (MUT: incl (mutated_condexpr a) mut),
+ exists rs',
+ exec_instrs tge s'.(st_code) sp ns rs m (if vb then ntrue else nfalse) rs' m'
+ /\ match_env map e' le rs'
+ /\ (forall r,
+ reg_valid r s -> ~(mutated_reg map mut r) ->
+ rs'#r = rs#r).
+
+(** For statements, we define the following auxiliary predicates
+ relating the outcome of the Cminor execution with the final node
+ and value of the return register in the RTL execution. *)
+
+Definition outcome_node
+ (out: outcome)
+ (ncont: node) (nexits: list node) (nret: node) (nd: node) : Prop :=
+ match out with
+ | Out_normal => ncont = nd
+ | Out_exit n => nth_error nexits n = Some nd
+ | Out_return _ => nret = nd
+ end.
+
+Definition match_return_reg
+ (rs: regset) (rret: option reg) (v: val) : Prop :=
+ match rret with
+ | None => True
+ | Some r => rs#r = v
+ end.
+
+Definition match_return_outcome
+ (out: outcome) (rret: option reg) (rs: regset) : Prop :=
+ match out with
+ | Out_normal => True
+ | Out_exit n => True
+ | Out_return optv =>
+ match rret, optv with
+ | None, None => True
+ | Some r, Some v => rs#r = v
+ | _, _ => False
+ end
+ end.
+
+(** The simulation diagram for the translation of statements and
+ lists of statements is of the following form:
+<<
+ I /\ P
+ e, m, a ------------- ns, rs, m
+ || |
+ || |*
+ || |
+ \/ v
+ e', m', out --------- nd, rs', m'
+ I /\ Q
+>>
+ where [transl_stmt map a ncont nexits nret rret s = OK ns s'].
+ The left vertical arrow represents an execution of the statement [a]
+ (assumption). The right vertical arrow represents the execution of
+ zero, one or several instructions in the generated RTL flow graph
+ found in the final state [s'] (conclusion).
+
+ The invariant [I] is the agreement between Cminor environments and
+ RTL register environment, as captured by [match_envs].
+
+ The preconditions [P] include the well-formedness of the compilation
+ environment [mut] and the agreement between the outcome [out]
+ and the end node [nd].
+
+ The postcondition [Q] states agreement between the outcome [out]
+ and the value of the return register [rret]. *)
+
+Definition transl_stmt_correct
+ (sp: val) (e: env) (m: mem) (a: stmt)
+ (e': env) (m': mem) (out: outcome) : Prop :=
+ forall map ncont nexits nret rret s ns s' nd rs
+ (MWF: map_wf map s)
+ (TE: transl_stmt map a ncont nexits nret rret s = OK ns s')
+ (ME: match_env map e nil rs)
+ (OUT: outcome_node out ncont nexits nret nd)
+ (RRG: return_reg_ok s map rret),
+ exists rs',
+ exec_instrs tge s'.(st_code) sp ns rs m nd rs' m'
+ /\ match_env map e' nil rs'
+ /\ match_return_outcome out rret rs'.
+
+Definition transl_stmtlist_correct
+ (sp: val) (e: env) (m: mem) (al: stmtlist)
+ (e': env) (m': mem) (out: outcome) : Prop :=
+ forall map ncont nexits nret rret s ns s' nd rs
+ (MWF: map_wf map s)
+ (TE: transl_stmtlist map al ncont nexits nret rret s = OK ns s')
+ (ME: match_env map e nil rs)
+ (OUT: outcome_node out ncont nexits nret nd)
+ (RRG: return_reg_ok s map rret),
+ exists rs',
+ exec_instrs tge s'.(st_code) sp ns rs m nd rs' m'
+ /\ match_env map e' nil rs'
+ /\ match_return_outcome out rret rs'.
+
+(** Finally, the correctness condition for the translation of functions
+ is that the translated RTL function, when applied to the same arguments
+ as the original Cminor function, returns the same value and performs
+ the same modifications on the memory state. *)
+
+Definition transl_function_correct
+ (m: mem) (f: Cminor.function) (vargs: list val)
+ (m':mem) (vres: val) : Prop :=
+ forall tf
+ (TE: transl_function f = Some tf),
+ exec_function tge tf vargs m vres m'.
+
+(** The correctness of the translation is a huge induction over
+ the Cminor evaluation derivation for the source program. To keep
+ the proof manageable, we put each case of the proof in a separate
+ lemma. There is one lemma for each Cminor evaluation rule.
+ It takes as hypotheses the premises of the Cminor evaluation rule,
+ plus the induction hypotheses, that is, the [transl_expr_correct], etc,
+ corresponding to the evaluations of sub-expressions or sub-statements. *)
+
+Lemma transl_expr_Evar_correct:
+ forall (sp: val) (le: letenv) (e: env) (m: mem) (id: ident) (v: val),
+ e!id = Some v ->
+ transl_expr_correct sp le e m (Evar id) e m v.
+Proof.
+ intros; red; intros. monadInv TE. intro.
+ generalize EQ; unfold find_var. caseEq (map_vars map)!id.
+ intros r' MV; monadSimpl. subst s0; subst r'.
+ generalize (add_move_correct _ _ sp _ _ _ _ rs m TE0).
+ intros [rs1 [EX1 [RES1 OTHER1]]].
+ exists rs1.
+(* Exec *)
+ split. assumption.
+(* Match-env *)
+ split. inversion TRG.
+ (* Optimized case rd = r *)
+ rewrite MV in H5; injection H5; intro; subst r.
+ apply match_env_exten with rs.
+ intros. case (Reg.eq r rd); intro.
+ subst r; assumption. apply OTHER1; assumption.
+ assumption.
+ (* General case rd is temp *)
+ apply match_env_invariant with rs.
+ assumption. intros. apply OTHER1. red; intro; subst r1. contradiction.
+(* Result value *)
+ split. rewrite RES1. eauto with rtlg.
+(* Other regs *)
+ intros. case (Reg.eq rd r0); intro.
+ subst r0. inversion TRG.
+ rewrite MV in H8; injection H8; intro; subst r. apply RES1.
+ byContradiction. tauto.
+ apply OTHER1; auto.
+
+ intro; monadSimpl.
+Qed.
+
+Lemma transl_expr_Eop_correct:
+ forall (sp: val) (le : letenv) (e : env) (m : mem) (op : operation)
+ (al : exprlist) (e1 : env) (m1 : mem) (vl : list val)
+ (v: val),
+ eval_exprlist ge sp le e m al e1 m1 vl ->
+ transl_exprlist_correct sp le e m al e1 m1 vl ->
+ eval_operation ge sp op vl = Some v ->
+ transl_expr_correct sp le e m (Eop op al) e1 m1 v.
+Proof.
+ intros until v. intros EEL TEL EOP. red; intros.
+ simpl in TE. monadInv TE. intro EQ1.
+ simpl in MUT.
+ assert (TRG': target_regs_ok s1 map mut al l); eauto with rtlg.
+ assert (MWF': map_wf map s1). eauto with rtlg.
+ generalize (TEL _ _ _ _ _ _ _ _ MWF' EQ1 ME MUT TRG').
+ intros [rs1 [EX1 [ME1 [RR1 RO1]]]].
+ exists (rs1#rd <- v).
+(* Exec *)
+ split. eapply exec_trans. eexact EX1.
+ apply exec_instrs_incr with s1. eauto with rtlg.
+ apply exec_one; eapply exec_Iop. eauto with rtlg.
+ subst vl.
+ rewrite (@eval_operation_preserved Cminor.function RTL.function ge tge).
+ eexact EOP.
+ exact symbols_preserved.
+(* Match-env *)
+ split. inversion TRG. eauto with rtlg.
+(* Result reg *)
+ split. apply Regmap.gss.
+(* Other regs *)
+ intros. rewrite Regmap.gso.
+ apply RO1. eauto with rtlg. assumption.
+ case (In_dec Reg.eq r l); intro.
+ left. elim (alloc_regs_fresh_or_in_map _ _ _ _ _ _ MWF EQ r i); intro.
+ assumption. byContradiction; eauto with rtlg.
+ right; assumption.
+ red; intro; subst r.
+ elim H1; intro. inversion TRG. contradiction.
+ tauto.
+Qed.
+
+Lemma transl_expr_Eassign_correct:
+ forall (sp: val) (le : letenv) (e : env) (m : mem)
+ (id : ident) (a : expr) (e1 : env) (m1 : mem)
+ (v : val),
+ eval_expr ge sp le e m a e1 m1 v ->
+ transl_expr_correct sp le e m a e1 m1 v ->
+ transl_expr_correct sp le e m (Eassign id a) (PTree.set id v e1) m1 v.
+Proof.
+ intros; red; intros.
+ simpl in TE. monadInv TE. intro EQ1.
+ simpl in MUT.
+ assert (MWF0: map_wf map s1). eauto with rtlg.
+ assert (MUTa: incl (mutated_expr a) mut).
+ red. intros. apply MUT. simpl. tauto.
+ assert (TRGa: target_reg_ok s1 map mut a rd).
+ inversion TRG. apply target_reg_other; eauto with rtlg.
+ generalize (H0 _ _ _ _ _ _ _ _ MWF0 EQ1 ME MUTa TRGa).
+ intros [rs1 [EX1 [ME1 [RES1 OTHER1]]]].
+ generalize (add_move_correct _ _ sp _ _ _ _ rs1 m1 EQ0).
+ intros [rs2 [EX2 [RES2 OTHER2]]].
+ exists rs2.
+(* Exec *)
+ split. eapply exec_trans. eexact EX1.
+ apply exec_instrs_incr with s1. eauto with rtlg.
+ exact EX2.
+(* Match-env *)
+ split.
+ apply match_env_update_var with rs1 r s s0; auto.
+ congruence.
+(* Result *)
+ split. case (Reg.eq rd r); intro.
+ subst r. congruence.
+ rewrite OTHER2; auto.
+(* Other regs *)
+ intros. transitivity (rs1#r0).
+ apply OTHER2. red; intro; subst r0.
+ apply H2. red. exists id. split. apply MUT. red; tauto.
+ generalize EQ; unfold find_var.
+ destruct ((map_vars map)!id); monadSimpl. congruence.
+ apply OTHER1. eauto with rtlg. assumption. assumption.
+Qed.
+
+Lemma transl_expr_Eload_correct:
+ forall (sp: val) (le : letenv) (e : env) (m : mem)
+ (chunk : memory_chunk) (addr : addressing)
+ (al : exprlist) (e1 : env) (m1 : mem) (v : val)
+ (vl : list val) (a: val),
+ eval_exprlist ge sp le e m al e1 m1 vl ->
+ transl_exprlist_correct sp le e m al e1 m1 vl ->
+ eval_addressing ge sp addr vl = Some a ->
+ Mem.loadv chunk m1 a = Some v ->
+ transl_expr_correct sp le e m (Eload chunk addr al) e1 m1 v.
+Proof.
+ intros; red; intros. simpl in TE. monadInv TE. intro EQ1. clear TE.
+ simpl in MUT.
+ assert (MWF1: map_wf map s1). eauto with rtlg.
+ assert (TRG1: target_regs_ok s1 map mut al l). eauto with rtlg.
+ generalize (H0 _ _ _ _ _ _ _ _ MWF1 EQ1 ME MUT TRG1).
+ intros [rs1 [EX1 [ME1 [RES1 OTHER1]]]].
+ exists (rs1#rd <- v).
+(* Exec *)
+ split. eapply exec_trans. eexact EX1.
+ apply exec_instrs_incr with s1. eauto with rtlg.
+ apply exec_one. eapply exec_Iload. eauto with rtlg.
+ rewrite RES1. rewrite (@eval_addressing_preserved _ _ ge tge).
+ eexact H1. exact symbols_preserved. assumption.
+(* Match-env *)
+ split. eapply match_env_update_temp. assumption. inversion TRG. assumption.
+(* Result *)
+ split. apply Regmap.gss.
+(* Other regs *)
+ intros. rewrite Regmap.gso. apply OTHER1.
+ eauto with rtlg. assumption.
+ case (In_dec Reg.eq r l); intro.
+ elim (alloc_regs_fresh_or_in_map _ _ _ _ _ _ MWF EQ r i); intro.
+ tauto. byContradiction. eauto with rtlg.
+ tauto.
+ red; intro; subst r. inversion TRG. tauto.
+Qed.
+
+Lemma transl_expr_Estore_correct:
+ forall (sp: val) (le : letenv) (e : env) (m : mem)
+ (chunk : memory_chunk) (addr : addressing)
+ (al : exprlist) (b : expr) (e1 : env) (m1 : mem)
+ (vl : list val) (e2 : env) (m2 m3 : mem)
+ (v : val) (a: val),
+ eval_exprlist ge sp le e m al e1 m1 vl ->
+ transl_exprlist_correct sp le e m al e1 m1 vl ->
+ eval_expr ge sp le e1 m1 b e2 m2 v ->
+ transl_expr_correct sp le e1 m1 b e2 m2 v ->
+ eval_addressing ge sp addr vl = Some a ->
+ Mem.storev chunk m2 a v = Some m3 ->
+ transl_expr_correct sp le e m (Estore chunk addr al b) e2 m3 v.
+Proof.
+ intros; red; intros. simpl in TE; monadInv TE. intro EQ2; clear TE.
+ simpl in MUT.
+ assert (MWF2: map_wf map s2).
+ apply map_wf_incr with s.
+ apply state_incr_trans2 with s0 s1; eauto with rtlg.
+ assumption.
+ assert (MUT2: incl (mutated_exprlist al) mut). eauto with coqlib.
+ assert (TRG2: target_regs_ok s2 map mut al l).
+ apply target_regs_ok_incr with s0; eauto with rtlg.
+ generalize (H0 _ _ _ _ _ _ _ _ MWF2 EQ2 ME MUT2 TRG2).
+ intros [rs1 [EX1 [ME1 [RES1 OTHER1]]]].
+ assert (MWF1: map_wf map s1). eauto with rtlg.
+ assert (MUT1: incl (mutated_expr b) mut). eauto with coqlib.
+ assert (TRG1: target_reg_ok s1 map mut b rd).
+ inversion TRG. apply target_reg_other; eauto with rtlg.
+ generalize (H2 _ _ _ _ _ _ _ _ MWF1 EQ1 ME1 MUT1 TRG1).
+ intros [rs2 [EX2 [ME2 [RES2 OTHER2]]]].
+ exists rs2.
+(* Exec *)
+ split. eapply exec_trans. eexact EX1.
+ apply exec_instrs_incr with s2. eauto with rtlg.
+ eapply exec_trans. eexact EX2.
+ apply exec_instrs_incr with s1. eauto with rtlg.
+ apply exec_one. eapply exec_Istore. eauto with rtlg.
+ assert (rs2##l = rs1##l).
+ apply list_map_exten. intros r' IN. symmetry. apply OTHER2.
+ eauto with rtlg. eauto with rtlg.
+ elim (alloc_regs_fresh_or_in_map _ _ _ _ _ _ MWF EQ r' IN); intro.
+ tauto. right. apply sym_not_equal.
+ apply valid_fresh_different with s. inversion TRG; assumption.
+ assumption.
+ rewrite H5; rewrite RES1.
+ rewrite (@eval_addressing_preserved _ _ ge tge).
+ eexact H3. exact symbols_preserved.
+ rewrite RES2. assumption.
+(* Match-env *)
+ split. assumption.
+(* Result *)
+ split. assumption.
+(* Other regs *)
+ intro r'; intros. transitivity (rs1#r').
+ apply OTHER2. apply reg_valid_incr with s; eauto with rtlg.
+ assumption. assumption.
+ apply OTHER1. apply reg_valid_incr with s.
+ apply state_incr_trans2 with s0 s1; eauto with rtlg. assumption.
+ assumption. case (In_dec Reg.eq r' l); intro.
+ elim (alloc_regs_fresh_or_in_map _ _ _ _ _ _ MWF EQ r' i); intro.
+ tauto. byContradiction; eauto with rtlg. tauto.
+Qed.
+
+Lemma transl_expr_Ecall_correct:
+ forall (sp: val) (le : letenv) (e : env) (m : mem)
+ (sig : signature) (a : expr) (bl : exprlist)
+ (e1 e2 : env) (m1 m2 m3 : mem) (vf : val)
+ (vargs : list val) (vres : val) (f : Cminor.function),
+ eval_expr ge sp le e m a e1 m1 vf ->
+ transl_expr_correct sp le e m a e1 m1 vf ->
+ eval_exprlist ge sp le e1 m1 bl e2 m2 vargs ->
+ transl_exprlist_correct sp le e1 m1 bl e2 m2 vargs ->
+ Genv.find_funct ge vf = Some f ->
+ Cminor.fn_sig f = sig ->
+ eval_funcall ge m2 f vargs m3 vres ->
+ transl_function_correct m2 f vargs m3 vres ->
+ transl_expr_correct sp le e m (Ecall sig a bl) e2 m3 vres.
+Proof.
+ intros. red; simpl; intros.
+ monadInv TE. intro EQ3. clear TE.
+ assert (MUTa: incl (mutated_expr a) mut). eauto with coqlib.
+ assert (MUTbl: incl (mutated_exprlist bl) mut). eauto with coqlib.
+ assert (MWFa: map_wf map s3).
+ apply map_wf_incr with s.
+ apply state_incr_trans3 with s0 s1 s2; eauto with rtlg.
+ assumption.
+ assert (TRGr: target_reg_ok s3 map mut a r).
+ apply target_reg_ok_incr with s0.
+ apply state_incr_trans2 with s1 s2; eauto with rtlg.
+ eauto with rtlg.
+ generalize (H0 _ _ _ _ _ _ _ _ MWFa EQ3 ME MUTa TRGr).
+ intros [rs1 [EX1 [ME1 [RES1 OTHER1]]]].
+ clear MUTa MWFa TRGr.
+ assert (MWFbl: map_wf map s2).
+ apply map_wf_incr with s.
+ apply state_incr_trans2 with s0 s1; eauto with rtlg.
+ assumption.
+ assert (TRGl: target_regs_ok s2 map mut bl l).
+ apply target_regs_ok_incr with s1; eauto with rtlg.
+ generalize (H2 _ _ _ _ _ _ _ _ MWFbl EQ2 ME1 MUTbl TRGl).
+ intros [rs2 [EX2 [ME2 [RES2 OTHER2]]]].
+ clear MUTbl MWFbl TRGl.
+
+ generalize (functions_translated vf f H3). intros [tf [TFIND TF]].
+ generalize (H6 tf TF). intro EXF.
+
+ assert (EX3: exec_instrs tge (st_code s2) sp n rs2 m2
+ nd (rs2#rd <- vres) m3).
+ apply exec_one. eapply exec_Icall.
+ eauto with rtlg. simpl. replace (rs2#r) with vf. eexact TFIND.
+ rewrite <- RES1. symmetry. apply OTHER2.
+ apply reg_valid_incr with s0; eauto with rtlg.
+ apply target_reg_not_mutated with s0 a.
+ eauto with rtlg. eauto with rtlg.
+ assert (MWFs0: map_wf map s0). eauto with rtlg.
+ case (In_dec Reg.eq r l); intro.
+ elim (alloc_regs_fresh_or_in_map _ _ _ _ _ _ MWFs0 EQ0 r i); intro.
+ tauto. byContradiction. apply valid_fresh_absurd with r s0.
+ eauto with rtlg. assumption.
+ tauto.
+ generalize TF. unfold transl_function.
+ destruct (transl_fun f init_state).
+ intro; discriminate. destruct p. intros. injection TF0. intro.
+ rewrite <- H7; simpl. auto.
+ rewrite RES2. assumption.
+
+ exists (rs2#rd <- vres).
+(* Exec *)
+ split. eapply exec_trans. eexact EX1.
+ apply exec_instrs_incr with s3. eauto with rtlg.
+ eapply exec_trans. eexact EX2.
+ apply exec_instrs_incr with s2. eauto with rtlg.
+ exact EX3.
+(* Match env *)
+ split. apply match_env_update_temp. assumption.
+ inversion TRG. assumption.
+(* Result *)
+ split. apply Regmap.gss.
+(* Other regs *)
+ intros.
+ rewrite Regmap.gso. transitivity (rs1#r0).
+ apply OTHER2.
+ apply reg_valid_incr with s.
+ apply state_incr_trans2 with s0 s1; eauto with rtlg.
+ assumption.
+ assumption.
+ assert (MWFs0: map_wf map s0). eauto with rtlg.
+ case (In_dec Reg.eq r0 l); intro.
+ elim (alloc_regs_fresh_or_in_map _ _ _ _ _ _ MWFs0 EQ0 r0 i); intro.
+ tauto. byContradiction. apply valid_fresh_absurd with r0 s0.
+ eauto with rtlg. assumption.
+ tauto.
+ apply OTHER1.
+ apply reg_valid_incr with s.
+ apply state_incr_trans3 with s0 s1 s2; eauto with rtlg.
+ assumption.
+ assumption.
+ case (Reg.eq r0 r); intro.
+ subst r0.
+ elim (alloc_reg_fresh_or_in_map _ _ _ _ _ _ MWF EQ); intro.
+ tauto. byContradiction; eauto with rtlg.
+ tauto.
+ red; intro; subst r0.
+ inversion TRG. tauto.
+Qed.
+
+Lemma transl_expr_Econdition_correct:
+ forall (sp: val) (le : letenv) (e : env) (m : mem)
+ (a : condexpr) (b c : expr) (e1 : env) (m1 : mem)
+ (v1 : bool) (e2 : env) (m2 : mem) (v2 : val),
+ eval_condexpr ge sp le e m a e1 m1 v1 ->
+ transl_condition_correct sp le e m a e1 m1 v1 ->
+ eval_expr ge sp le e1 m1 (if v1 then b else c) e2 m2 v2 ->
+ transl_expr_correct sp le e1 m1 (if v1 then b else c) e2 m2 v2 ->
+ transl_expr_correct sp le e m (Econdition a b c) e2 m2 v2.
+Proof.
+ intros; red; intros. simpl in TE; monadInv TE. intro EQ1; clear TE.
+ simpl in MUT.
+
+ assert (MWF1: map_wf map s1).
+ apply map_wf_incr with s. eauto with rtlg. assumption.
+ assert (MUT1: incl (mutated_condexpr a) mut). eauto with coqlib.
+ generalize (H0 _ _ _ _ _ _ _ _ MWF1 EQ1 ME MUT1).
+ intros [rs1 [EX1 [ME1 OTHER1]]].
+ destruct v1.
+
+ assert (MWF0: map_wf map s0). eauto with rtlg.
+ assert (MUT0: incl (mutated_expr b) mut). eauto with coqlib.
+ assert (TRG0: target_reg_ok s0 map mut b rd).
+ inversion TRG. apply target_reg_other; eauto with rtlg.
+ generalize (H2 _ _ _ _ _ _ _ _ MWF0 EQ0 ME1 MUT0 TRG0).
+ intros [rs2 [EX2 [ME2 [RES2 OTHER2]]]].
+ exists rs2.
+(* Exec *)
+ split. eapply exec_trans. eexact EX1.
+ apply exec_instrs_incr with s1. eauto with rtlg.
+ exact EX2.
+(* Match-env *)
+ split. assumption.
+(* Result value *)
+ split. assumption.
+(* Other regs *)
+ intros. transitivity (rs1#r).
+ apply OTHER2; auto. eauto with rtlg.
+ apply OTHER1; auto. apply reg_valid_incr with s.
+ apply state_incr_trans with s0; eauto with rtlg. assumption.
+
+ assert (MUTc: incl (mutated_expr c) mut). eauto with coqlib.
+ assert (TRGc: target_reg_ok s map mut c rd).
+ inversion TRG. apply target_reg_other; auto.
+ generalize (H2 _ _ _ _ _ _ _ _ MWF EQ ME1 MUTc TRGc).
+ intros [rs2 [EX2 [ME2 [RES2 OTHER2]]]].
+ exists rs2.
+(* Exec *)
+ split. eapply exec_trans. eexact EX1.
+ apply exec_instrs_incr with s0. eauto with rtlg.
+ exact EX2.
+(* Match-env *)
+ split. assumption.
+(* Result value *)
+ split. assumption.
+(* Other regs *)
+ intros. transitivity (rs1#r).
+ apply OTHER2; auto. eauto with rtlg.
+ apply OTHER1; auto. apply reg_valid_incr with s.
+ apply state_incr_trans2 with s0 s1; eauto with rtlg. assumption.
+Qed.
+
+Lemma transl_expr_Elet_correct:
+ forall (sp: val) (le : letenv) (e : env) (m : mem)
+ (a b : expr) (e1 : env) (m1 : mem) (v1 : val)
+ (e2 : env) (m2 : mem) (v2 : val),
+ eval_expr ge sp le e m a e1 m1 v1 ->
+ transl_expr_correct sp le e m a e1 m1 v1 ->
+ eval_expr ge sp (v1 :: le) e1 m1 b e2 m2 v2 ->
+ transl_expr_correct sp (v1 :: le) e1 m1 b e2 m2 v2 ->
+ transl_expr_correct sp le e m (Elet a b) e2 m2 v2.
+Proof.
+ intros; red; intros.
+ simpl in TE; monadInv TE. intro EQ1.
+ simpl in MUT.
+ assert (MWF1: map_wf map s1). eauto with rtlg.
+ assert (MUT1: incl (mutated_expr a) mut). eauto with coqlib.
+ assert (TRG1: target_reg_ok s1 map mut a r).
+ eapply target_reg_other; eauto with rtlg.
+ generalize (H0 _ _ _ _ _ _ _ _ MWF1 EQ1 ME MUT1 TRG1).
+ intros [rs1 [EX1 [ME1 [RES1 OTHER1]]]].
+ assert (MWF2: map_wf (add_letvar map r) s0).
+ apply add_letvar_wf; eauto with rtlg.
+ assert (MUT2: incl (mutated_expr b) mut). eauto with coqlib.
+ assert (ME2: match_env (add_letvar map r) e1 (v1 :: le) rs1).
+ apply match_env_letvar; assumption.
+ assert (TRG2: target_reg_ok s0 (add_letvar map r) mut b rd).
+ inversion TRG. apply target_reg_other.
+ unfold reg_in_map, add_letvar; simpl. red; intro.
+ elim H10; intro. apply H3. left. assumption.
+ elim H11; intro. apply valid_fresh_absurd with rd s.
+ assumption. rewrite <- H12. eauto with rtlg.
+ apply H3. right. assumption.
+ eauto with rtlg.
+ generalize (H2 _ _ _ _ _ _ _ _ MWF2 EQ0 ME2 MUT2 TRG2).
+ intros [rs2 [EX2 [ME3 [RES2 OTHER2]]]].
+ exists rs2.
+(* Exec *)
+ split. eapply exec_trans. eexact EX1.
+ apply exec_instrs_incr with s1. eauto with rtlg. exact EX2.
+(* Match-env *)
+ split. apply mk_match_env. exact (me_vars _ _ _ _ ME3).
+ generalize (me_letvars _ _ _ _ ME3).
+ unfold add_letvar; simpl. intro X; injection X; auto.
+(* Result *)
+ split. assumption.
+(* Other regs *)
+ intros. transitivity (rs1#r0).
+ apply OTHER2. eauto with rtlg.
+ unfold mutated_reg. unfold add_letvar; simpl. assumption.
+ elim H5; intro. left.
+ unfold reg_in_map, add_letvar; simpl.
+ unfold reg_in_map in H6; tauto.
+ tauto.
+ apply OTHER1. eauto with rtlg.
+ assumption.
+ right. red; intro. apply valid_fresh_absurd with r0 s.
+ assumption. rewrite H6. eauto with rtlg.
+Qed.
+
+Lemma transl_expr_Eletvar_correct:
+ forall (sp: val) (le : list val) (e : env)
+ (m : mem) (n : nat) (v : val),
+ nth_error le n = Some v ->
+ transl_expr_correct sp le e m (Eletvar n) e m v.
+Proof.
+ intros; red; intros.
+ simpl in TE; monadInv TE. intro EQ1.
+ generalize EQ. unfold find_letvar.
+ caseEq (nth_error (map_letvars map) n).
+ intros r0 NE; monadSimpl. subst s0; subst r0.
+ generalize (add_move_correct _ _ sp _ _ _ _ rs m EQ1).
+ intros [rs1 [EX1 [RES1 OTHER1]]].
+ exists rs1.
+(* Exec *)
+ split. exact EX1.
+(* Match-env *)
+ split. inversion TRG.
+ assert (r = rd). congruence.
+ subst r. apply match_env_exten with rs.
+ intros. case (Reg.eq r rd); intro. subst r; auto. auto. auto.
+ apply match_env_invariant with rs. auto.
+ intros. apply OTHER1. red;intro;subst r1. contradiction.
+(* Result *)
+ split. rewrite RES1.
+ generalize H. rewrite <- (me_letvars _ _ _ _ ME).
+ change positive with reg.
+ rewrite list_map_nth. rewrite NE. simpl. congruence.
+(* Other regs *)
+ intros. inversion TRG.
+ assert (r = rd). congruence. subst r.
+ case (Reg.eq r0 rd); intro. subst r0; auto. auto.
+ apply OTHER1. red; intro; subst r0. tauto.
+
+ intro; monadSimpl.
+Qed.
+
+Lemma transl_condition_CEtrue_correct:
+ forall (sp: val) (le : letenv) (e : env) (m : mem),
+ transl_condition_correct sp le e m CEtrue e m true.
+Proof.
+ intros; red; intros. simpl in TE; monadInv TE. subst ns.
+ exists rs. split. apply exec_refl. split. auto. auto.
+Qed.
+
+Lemma transl_condition_CEfalse_correct:
+ forall (sp: val) (le : letenv) (e : env) (m : mem),
+ transl_condition_correct sp le e m CEfalse e m false.
+Proof.
+ intros; red; intros. simpl in TE; monadInv TE. subst ns.
+ exists rs. split. apply exec_refl. split. auto. auto.
+Qed.
+
+Lemma transl_condition_CEcond_correct:
+ forall (sp: val) (le : letenv) (e : env) (m : mem)
+ (cond : condition) (al : exprlist) (e1 : env)
+ (m1 : mem) (vl : list val) (b : bool),
+ eval_exprlist ge sp le e m al e1 m1 vl ->
+ transl_exprlist_correct sp le e m al e1 m1 vl ->
+ eval_condition cond vl = Some b ->
+ transl_condition_correct sp le e m (CEcond cond al) e1 m1 b.
+Proof.
+ intros; red; intros. simpl in TE; monadInv TE. intro EQ1; clear TE.
+ assert (MWF1: map_wf map s1). eauto with rtlg.
+ simpl in MUT.
+ assert (TRG: target_regs_ok s1 map mut al l).
+ eauto with rtlg.
+ generalize (H0 _ _ _ _ _ _ _ _ MWF1 EQ1 ME MUT TRG).
+ intros [rs1 [EX1 [ME1 [RES1 OTHER1]]]].
+ exists rs1.
+(* Exec *)
+ split. eapply exec_trans. eexact EX1.
+ apply exec_instrs_incr with s1. eauto with rtlg.
+ apply exec_one.
+ destruct b.
+ eapply exec_Icond_true. eauto with rtlg.
+ rewrite RES1. assumption.
+ eapply exec_Icond_false. eauto with rtlg.
+ rewrite RES1. assumption.
+(* Match-env *)
+ split. assumption.
+(* Regs *)
+ intros. apply OTHER1. eauto with rtlg. assumption.
+ case (In_dec Reg.eq r l); intro.
+ elim (alloc_regs_fresh_or_in_map _ _ _ _ _ _ MWF EQ r i); intro.
+ tauto. byContradiction; eauto with rtlg.
+ tauto.
+Qed.
+
+Lemma transl_condition_CEcondition_correct:
+ forall (sp: val) (le : letenv) (e : env) (m : mem)
+ (a b c : condexpr) (e1 : env) (m1 : mem)
+ (vb1 : bool) (e2 : env) (m2 : mem) (vb2 : bool),
+ eval_condexpr ge sp le e m a e1 m1 vb1 ->
+ transl_condition_correct sp le e m a e1 m1 vb1 ->
+ eval_condexpr ge sp le e1 m1 (if vb1 then b else c) e2 m2 vb2 ->
+ transl_condition_correct sp le e1 m1 (if vb1 then b else c) e2 m2 vb2 ->
+ transl_condition_correct sp le e m (CEcondition a b c) e2 m2 vb2.
+Proof.
+ intros; red; intros. simpl in TE; monadInv TE. intro EQ1; clear TE.
+ simpl in MUT.
+ assert (MWF1: map_wf map s1). eauto with rtlg.
+ assert (MUTa: incl (mutated_condexpr a) mut). eauto with coqlib.
+ generalize (H0 _ _ _ _ _ _ _ _ MWF1 EQ1 ME MUTa).
+ intros [rs1 [EX1 [ME1 OTHER1]]].
+ destruct vb1.
+
+ assert (MWF0: map_wf map s0). eauto with rtlg.
+ assert (MUTb: incl (mutated_condexpr b) mut). eauto with coqlib.
+ generalize (H2 _ _ _ _ _ _ _ _ MWF0 EQ0 ME1 MUTb).
+ intros [rs2 [EX2 [ME2 OTHER2]]].
+ exists rs2.
+ split. eapply exec_trans. eexact EX1.
+ apply exec_instrs_incr with s1. eauto with rtlg.
+ exact EX2.
+ split. assumption.
+ intros. transitivity (rs1#r).
+ apply OTHER2; eauto with rtlg.
+ apply OTHER1; eauto with rtlg.
+
+ assert (MUTc: incl (mutated_condexpr c) mut). eauto with coqlib.
+ generalize (H2 _ _ _ _ _ _ _ _ MWF EQ ME1 MUTc).
+ intros [rs2 [EX2 [ME2 OTHER2]]].
+ exists rs2.
+ split. eapply exec_trans. eexact EX1.
+ apply exec_instrs_incr with s0. eauto with rtlg.
+ exact EX2.
+ split. assumption.
+ intros. transitivity (rs1#r).
+ apply OTHER2; eauto with rtlg.
+ apply OTHER1; eauto with rtlg.
+Qed.
+
+Lemma transl_exprlist_Enil_correct:
+ forall (sp: val) (le : letenv) (e : env) (m : mem),
+ transl_exprlist_correct sp le e m Enil e m nil.
+Proof.
+ intros; red; intros.
+ generalize TE. simpl. destruct rl; monadSimpl.
+ subst s'; subst ns. exists rs.
+ split. apply exec_refl.
+ split. assumption.
+ split. reflexivity.
+ intros. reflexivity.
+Qed.
+
+Lemma transl_exprlist_Econs_correct:
+ forall (sp: val) (le : letenv) (e : env) (m : mem)
+ (a : expr) (bl : exprlist) (e1 : env) (m1 : mem)
+ (v : val) (e2 : env) (m2 : mem) (vl : list val),
+ eval_expr ge sp le e m a e1 m1 v ->
+ transl_expr_correct sp le e m a e1 m1 v ->
+ eval_exprlist ge sp le e1 m1 bl e2 m2 vl ->
+ transl_exprlist_correct sp le e1 m1 bl e2 m2 vl ->
+ transl_exprlist_correct sp le e m (Econs a bl) e2 m2 (v :: vl).
+Proof.
+ intros. red. intros.
+ inversion TRG.
+ rewrite <- H10 in TE. simpl in TE. monadInv TE. intro EQ1.
+ simpl in MUT.
+ assert (MUT1: incl (mutated_expr a) mut); eauto with coqlib.
+ assert (MUT2: incl (mutated_exprlist bl) mut); eauto with coqlib.
+ assert (MWF1: map_wf map s1); eauto with rtlg.
+ assert (TRG1: target_reg_ok s1 map mut a r); eauto with rtlg.
+ generalize (H0 _ _ _ _ _ _ _ _ MWF1 EQ1 ME MUT1 TRG1).
+ intros [rs1 [EX1 [ME1 [RES1 OTHER1]]]].
+ generalize (H2 _ _ _ _ _ _ _ _ MWF EQ ME1 MUT2 H11).
+ intros [rs2 [EX2 [ME2 [RES2 OTHER2]]]].
+ exists rs2.
+(* Exec *)
+ split. eapply exec_trans. eexact EX1.
+ apply exec_instrs_incr with s1. eauto with rtlg. assumption.
+(* Match-env *)
+ split. assumption.
+(* Results *)
+ split. simpl. rewrite RES2. rewrite OTHER2. rewrite RES1.
+ reflexivity.
+ eauto with rtlg.
+ eauto with rtlg.
+ assumption.
+(* Other regs *)
+ simpl. intros.
+ transitivity (rs1#r0).
+ apply OTHER2; auto. tauto.
+ apply OTHER1; auto. eauto with rtlg.
+ elim H14; intro. left; assumption. right; apply sym_not_equal; tauto.
+Qed.
+
+Lemma transl_funcall_correct:
+ forall (m : mem) (f : Cminor.function) (vargs : list val)
+ (m1 : mem) (sp : block) (e e2 : env) (m2 : mem)
+ (out : outcome) (vres : val),
+ Mem.alloc m 0 (fn_stackspace f) = (m1, sp) ->
+ set_locals (Cminor.fn_vars f) (set_params vargs (Cminor.fn_params f)) = e ->
+ exec_stmtlist ge (Vptr sp Int.zero) e m1 (fn_body f) e2 m2 out ->
+ transl_stmtlist_correct (Vptr sp Int.zero) e m1 (fn_body f) e2 m2 out ->
+ outcome_result_value out f.(Cminor.fn_sig).(sig_res) vres ->
+ transl_function_correct m f vargs (Mem.free m2 sp) vres.
+Proof.
+ intros; red; intros.
+ generalize TE. unfold transl_function.
+ caseEq (transl_fun f init_state).
+ intros; discriminate.
+ intros ns s. unfold transl_fun. monadSimpl.
+ subst ns. intros EQ4. injection EQ4; intro TF; clear EQ4.
+ subst s4.
+
+ pose (rs := init_regs vargs x).
+ assert (ME: match_env y0 e nil rs).
+ rewrite <- H0. unfold rs.
+ eapply match_init_env_init_reg; eauto.
+
+ assert (OUT: outcome_node out n nil n n).
+ red. generalize H3. unfold outcome_result_value.
+ destruct out; contradiction || auto.
+
+ assert (MWF1: map_wf y0 s1).
+ eapply add_vars_wf. eexact EQ0.
+ eapply add_vars_wf. eexact EQ.
+ apply init_mapping_wf.
+
+ assert (MWF: map_wf y0 s3).
+ apply map_wf_incr with s1. apply state_incr_trans with s2; eauto with rtlg.
+ assumption.
+
+ assert (RRG: return_reg_ok s3 y0 (ret_reg (Cminor.fn_sig f) r)).
+ apply return_reg_ok_incr with s2. eauto with rtlg.
+ apply new_reg_return_ok with s1; assumption.
+
+ generalize (H2 _ _ _ _ _ _ _ _ _ rs MWF EQ3 ME OUT RRG).
+ intros [rs1 [EX1 [ME1 MR1]]].
+
+ apply exec_funct with m1 n rs1 (ret_reg (Cminor.fn_sig f) r).
+ rewrite <- TF; simpl; assumption.
+ rewrite <- TF; simpl. exact EX1.
+ rewrite <- TF; simpl. apply instr_at_incr with s3.
+ eauto with rtlg. discriminate. eauto with rtlg.
+ generalize MR1. unfold match_return_outcome.
+ generalize H3. unfold outcome_result_value.
+ unfold ret_reg; destruct (sig_res (Cminor.fn_sig f)).
+ unfold regmap_optget. destruct out; try contradiction.
+ destruct o; try contradiction. intros; congruence.
+ unfold regmap_optget. destruct out; contradiction||auto.
+ destruct o; contradiction||auto.
+Qed.
+
+Lemma transl_stmt_Sexpr_correct:
+ forall (sp: val) (e : env) (m : mem) (a : expr)
+ (e1 : env) (m1 : mem) (v : val),
+ eval_expr ge sp nil e m a e1 m1 v ->
+ transl_expr_correct sp nil e m a e1 m1 v ->
+ transl_stmt_correct sp e m (Sexpr a) e1 m1 Out_normal.
+Proof.
+ intros; red; intros.
+ simpl in OUT. subst nd.
+ unfold transl_stmt in TE. monadInv TE. intro EQ1.
+ assert (MWF0: map_wf map s0). eauto with rtlg.
+ assert (TRG: target_reg_ok s0 map (mutated_expr a) a r). eauto with rtlg.
+ generalize (H0 _ _ _ _ _ _ _ _ MWF0 EQ1 ME (incl_refl (mutated_expr a)) TRG).
+ intros [rs1 [EX1 [ME1 [RES1 OTHER1]]]].
+ exists rs1; simpl; tauto.
+Qed.
+
+Lemma transl_stmt_Sifthenelse_correct:
+ forall (sp: val) (e : env) (m : mem) (a : condexpr)
+ (sl1 sl2 : stmtlist) (e1 : env) (m1 : mem)
+ (v1 : bool) (e2 : env) (m2 : mem) (out : outcome),
+ eval_condexpr ge sp nil e m a e1 m1 v1 ->
+ transl_condition_correct sp nil e m a e1 m1 v1 ->
+ exec_stmtlist ge sp e1 m1 (if v1 then sl1 else sl2) e2 m2 out ->
+ transl_stmtlist_correct sp e1 m1 (if v1 then sl1 else sl2) e2 m2 out ->
+ transl_stmt_correct sp e m (Sifthenelse a sl1 sl2) e2 m2 out.
+Proof.
+ intros; red; intros until rs; intro MWF.
+ simpl. case (more_likely a sl1 sl2); monadSimpl; intro EQ2; intros.
+ assert (MWF1: map_wf map s1). eauto with rtlg.
+ generalize (H0 _ _ _ _ _ _ _ rs MWF1 EQ2 ME (incl_refl _)).
+ intros [rs1 [EX1 [ME1 OTHER1]]].
+ destruct v1.
+ assert (MWF0: map_wf map s0). eauto with rtlg.
+ assert (RRG0: return_reg_ok s0 map rret). eauto with rtlg.
+ generalize (H2 _ _ _ _ _ _ _ _ _ _ MWF0 EQ0 ME1 OUT RRG0).
+ intros [rs2 [EX2 [ME2 MRE2]]].
+ exists rs2. split.
+ eapply exec_trans. eexact EX1. apply exec_instrs_incr with s1.
+ eauto with rtlg. exact EX2.
+ tauto.
+ generalize (H2 _ _ _ _ _ _ _ _ _ _ MWF EQ ME1 OUT RRG).
+ intros [rs2 [EX2 [ME2 MRE2]]].
+ exists rs2. split.
+ eapply exec_trans. eexact EX1. apply exec_instrs_incr with s0.
+ eauto with rtlg. exact EX2.
+ tauto.
+
+ assert (MWF1: map_wf map s1). eauto with rtlg.
+ generalize (H0 _ _ _ _ _ _ _ rs MWF1 EQ2 ME (incl_refl _)).
+ intros [rs1 [EX1 [ME1 OTHER1]]].
+ destruct v1.
+ generalize (H2 _ _ _ _ _ _ _ _ _ _ MWF EQ ME1 OUT RRG).
+ intros [rs2 [EX2 [ME2 MRE2]]].
+ exists rs2. split.
+ eapply exec_trans. eexact EX1. apply exec_instrs_incr with s0.
+ eauto with rtlg. exact EX2.
+ tauto.
+ assert (MWF0: map_wf map s0). eauto with rtlg.
+ assert (RRG0: return_reg_ok s0 map rret). eauto with rtlg.
+ generalize (H2 _ _ _ _ _ _ _ _ _ _ MWF0 EQ0 ME1 OUT RRG0).
+ intros [rs2 [EX2 [ME2 MRE2]]].
+ exists rs2. split.
+ eapply exec_trans. eexact EX1. apply exec_instrs_incr with s1.
+ eauto with rtlg. exact EX2.
+ tauto.
+Qed.
+
+Lemma transl_stmt_Sloop_loop_correct:
+ forall (sp: val) (e : env) (m : mem) (sl : stmtlist)
+ (e1 : env) (m1 : mem) (e2 : env) (m2 : mem)
+ (out : outcome),
+ exec_stmtlist ge sp e m sl e1 m1 Out_normal ->
+ transl_stmtlist_correct sp e m sl e1 m1 Out_normal ->
+ exec_stmt ge sp e1 m1 (Sloop sl) e2 m2 out ->
+ transl_stmt_correct sp e1 m1 (Sloop sl) e2 m2 out ->
+ transl_stmt_correct sp e m (Sloop sl) e2 m2 out.
+Proof.
+ intros; red; intros.
+ generalize TE. simpl. monadSimpl. subst s2; subst n0. intros.
+ assert (MWF0: map_wf map s0). apply map_wf_incr with s.
+ eapply reserve_instr_incr; eauto.
+ assumption.
+ assert (OUT0: outcome_node Out_normal n nexits nret n).
+ unfold outcome_node. auto.
+ assert (RRG0: return_reg_ok s0 map rret).
+ apply return_reg_ok_incr with s.
+ eapply reserve_instr_incr; eauto.
+ assumption.
+ generalize (H0 _ _ _ _ _ _ _ _ _ _ MWF0 EQ0 ME OUT0 RRG0).
+ intros [rs1 [EX1 [ME1 MR1]]].
+ generalize (H2 _ _ _ _ _ _ _ _ _ _ MWF TE ME1 OUT RRG).
+ intros [rs2 [EX2 [ME2 MR2]]].
+ exists rs2.
+ split. eapply exec_trans.
+ apply exec_instrs_extends with s1.
+ eapply update_instr_extends.
+ eexact EQ. eauto with rtlg. eexact EQ1. eexact EX1.
+ apply exec_trans with ns rs1 m1.
+ apply exec_one. apply exec_Inop.
+ generalize EQ1. unfold update_instr.
+ case (plt n (st_nextnode s1)); intro; monadSimpl.
+ rewrite <- H4. simpl. apply PTree.gss.
+ exact EX2.
+ tauto.
+Qed.
+
+Lemma transl_stmt_Sloop_stop_correct:
+ forall (sp: val) (e : env) (m : mem) (sl : stmtlist)
+ (e1 : env) (m1 : mem) (out : outcome),
+ exec_stmtlist ge sp e m sl e1 m1 out ->
+ transl_stmtlist_correct sp e m sl e1 m1 out ->
+ out <> Out_normal ->
+ transl_stmt_correct sp e m (Sloop sl) e1 m1 out.
+Proof.
+ intros; red; intros.
+ simpl in TE. monadInv TE. subst s2; subst n0.
+ assert (MWF0: map_wf map s0). apply map_wf_incr with s.
+ eapply reserve_instr_incr; eauto. assumption.
+ assert (OUT0: outcome_node out n nexits nret nd).
+ generalize OUT. unfold outcome_node.
+ destruct out; auto. elim H1; auto.
+ assert (RRG0: return_reg_ok s0 map rret).
+ apply return_reg_ok_incr with s.
+ eapply reserve_instr_incr; eauto.
+ assumption.
+ generalize (H0 _ _ _ _ _ _ _ _ _ _ MWF0 EQ0 ME OUT0 RRG0).
+ intros [rs1 [EX1 [ME1 MR1]]].
+ exists rs1. split.
+ apply exec_instrs_extends with s1.
+ eapply update_instr_extends.
+ eexact EQ. eauto with rtlg. eexact EQ1. eexact EX1.
+ tauto.
+Qed.
+
+Lemma transl_stmt_Sblock_correct:
+ forall (sp: val) (e : env) (m : mem) (sl : stmtlist)
+ (e1 : env) (m1 : mem) (out : outcome),
+ exec_stmtlist ge sp e m sl e1 m1 out ->
+ transl_stmtlist_correct sp e m sl e1 m1 out ->
+ transl_stmt_correct sp e m (Sblock sl) e1 m1 (outcome_block out).
+Proof.
+ intros; red; intros. simpl in TE.
+ assert (OUT': outcome_node out ncont (ncont :: nexits) nret nd).
+ generalize OUT. unfold outcome_node, outcome_block.
+ destruct out.
+ auto.
+ destruct n. simpl. intro; unfold value; congruence.
+ simpl. auto.
+ auto.
+ generalize (H0 _ _ _ _ _ _ _ _ _ _ MWF TE ME OUT' RRG).
+ intros [rs1 [EX1 [ME1 MR1]]].
+ exists rs1.
+ split. assumption.
+ split. assumption.
+ generalize MR1. unfold match_return_outcome, outcome_block.
+ destruct out; auto.
+ destruct n; simpl; auto.
+Qed.
+
+Lemma transl_stmt_Sexit_correct:
+ forall (sp: val) (e : env) (m : mem) (n : nat),
+ transl_stmt_correct sp e m (Sexit n) e m (Out_exit n).
+Proof.
+ intros; red; intros.
+ generalize TE. simpl. caseEq (nth_error nexits n).
+ intros n' NE. monadSimpl. subst n'.
+ simpl in OUT. assert (ns = nd). congruence. subst ns.
+ exists rs. intuition. apply exec_refl.
+ intro. monadSimpl.
+Qed.
+
+Lemma transl_stmt_Sreturn_none_correct:
+ forall (sp: val) (e : env) (m : mem),
+ transl_stmt_correct sp e m (Sreturn None) e m (Out_return None).
+Proof.
+ intros; red; intros. generalize TE. simpl.
+ destruct rret; monadSimpl.
+ simpl in OUT. subst ns; subst nret.
+ exists rs. intuition. apply exec_refl.
+Qed.
+
+Lemma transl_stmt_Sreturn_some_correct:
+ forall (sp: val) (e : env) (m : mem) (a : expr)
+ (e1 : env) (m1 : mem) (v : val),
+ eval_expr ge sp nil e m a e1 m1 v ->
+ transl_expr_correct sp nil e m a e1 m1 v ->
+ transl_stmt_correct sp e m (Sreturn (Some a)) e1 m1 (Out_return (Some v)).
+Proof.
+ intros; red; intros. generalize TE; simpl.
+ destruct rret. intro EQ.
+ assert (TRG: target_reg_ok s map (mutated_expr a) a r).
+ inversion RRG. apply target_reg_other; auto.
+ generalize (H0 _ _ _ _ _ _ _ _ MWF EQ ME (incl_refl _) TRG).
+ intros [rs1 [EX1 [ME1 [RES1 OTHER1]]]].
+ simpl in OUT. subst nd. exists rs1. tauto.
+
+ monadSimpl.
+Qed.
+
+Lemma transl_stmtlist_Snil_correct:
+ forall (sp: val) (e : env) (m : mem),
+ transl_stmtlist_correct sp e m Snil e m Out_normal.
+Proof.
+ intros; red; intros. simpl in TE. monadInv TE.
+ subst s'; subst ns.
+ simpl in OUT. subst ncont.
+ exists rs. simpl. intuition. apply exec_refl.
+Qed.
+
+Lemma transl_stmtlist_Scons_continue_correct:
+ forall (sp: val) (e : env) (m : mem) (s : stmt)
+ (sl : stmtlist) (e1 : env) (m1 : mem) (e2 : env)
+ (m2 : mem) (out : outcome),
+ exec_stmt ge sp e m s e1 m1 Out_normal ->
+ transl_stmt_correct sp e m s e1 m1 Out_normal ->
+ exec_stmtlist ge sp e1 m1 sl e2 m2 out ->
+ transl_stmtlist_correct sp e1 m1 sl e2 m2 out ->
+ transl_stmtlist_correct sp e m (Scons s sl) e2 m2 out.
+Proof.
+ intros; red; intros. simpl in TE; monadInv TE. intro EQ0.
+ assert (MWF1: map_wf map s1). eauto with rtlg.
+ assert (OUTs: outcome_node Out_normal n nexits nret n).
+ simpl. auto.
+ assert (RRG1: return_reg_ok s1 map rret). eauto with rtlg.
+ generalize (H0 _ _ _ _ _ _ _ _ _ _ MWF1 EQ0 ME OUTs RRG1).
+ intros [rs1 [EX1 [ME1 MR1]]].
+ generalize (H2 _ _ _ _ _ _ _ _ _ _ MWF EQ ME1 OUT RRG).
+ intros [rs2 [EX2 [ME2 MR2]]].
+ exists rs2.
+(* Exec *)
+ split. eapply exec_trans. eexact EX1.
+ apply exec_instrs_incr with s1. eauto with rtlg.
+ exact EX2.
+(* Match-env + return *)
+ tauto.
+Qed.
+
+Lemma transl_stmtlist_Scons_stop_correct:
+ forall (sp: val) (e : env) (m : mem) (s : stmt)
+ (sl : stmtlist) (e1 : env) (m1 : mem) (out : outcome),
+ exec_stmt ge sp e m s e1 m1 out ->
+ transl_stmt_correct sp e m s e1 m1 out ->
+ out <> Out_normal ->
+ transl_stmtlist_correct sp e m (Scons s sl) e1 m1 out.
+Proof.
+ intros; red; intros.
+ simpl in TE; monadInv TE. intro EQ0; clear TE.
+ assert (MWF1: map_wf map s1). eauto with rtlg.
+ assert (OUTs: outcome_node out n nexits nret nd).
+ destruct out; simpl; auto. tauto.
+ assert (RRG1: return_reg_ok s1 map rret). eauto with rtlg.
+ exact (H0 _ _ _ _ _ _ _ _ _ _ MWF1 EQ0 ME OUTs RRG1).
+Qed.
+
+(** The correctness of the translation then follows by application
+ of the mutual induction principle for Cminor evaluation derivations
+ to the lemmas above. *)
+
+Scheme eval_expr_ind_6 := Minimality for eval_expr Sort Prop
+ with eval_condexpr_ind_6 := Minimality for eval_condexpr Sort Prop
+ with eval_exprlist_ind_6 := Minimality for eval_exprlist Sort Prop
+ with eval_funcall_ind_6 := Minimality for eval_funcall Sort Prop
+ with exec_stmt_ind_6 := Minimality for exec_stmt Sort Prop
+ with exec_stmtlist_ind_6 := Minimality for exec_stmtlist Sort Prop.
+
+Theorem transl_function_correctness:
+ forall m f vargs m' vres,
+ eval_funcall ge m f vargs m' vres ->
+ transl_function_correct m f vargs m' vres.
+Proof
+ (eval_funcall_ind_6 ge
+ transl_expr_correct
+ transl_condition_correct
+ transl_exprlist_correct
+ transl_function_correct
+ transl_stmt_correct
+ transl_stmtlist_correct
+
+ transl_expr_Evar_correct
+ transl_expr_Eassign_correct
+ transl_expr_Eop_correct
+ transl_expr_Eload_correct
+ transl_expr_Estore_correct
+ transl_expr_Ecall_correct
+ transl_expr_Econdition_correct
+ transl_expr_Elet_correct
+ transl_expr_Eletvar_correct
+ transl_condition_CEtrue_correct
+ transl_condition_CEfalse_correct
+ transl_condition_CEcond_correct
+ transl_condition_CEcondition_correct
+ transl_exprlist_Enil_correct
+ transl_exprlist_Econs_correct
+ transl_funcall_correct
+ transl_stmt_Sexpr_correct
+ transl_stmt_Sifthenelse_correct
+ transl_stmt_Sloop_loop_correct
+ transl_stmt_Sloop_stop_correct
+ transl_stmt_Sblock_correct
+ transl_stmt_Sexit_correct
+ transl_stmt_Sreturn_none_correct
+ transl_stmt_Sreturn_some_correct
+ transl_stmtlist_Snil_correct
+ transl_stmtlist_Scons_continue_correct
+ transl_stmtlist_Scons_stop_correct).
+
+Theorem transl_program_correct:
+ forall (r: val),
+ Cminor.exec_program prog r ->
+ RTL.exec_program tprog r.
+Proof.
+ intros r [b [f [m [SYMB [FUNC [SIG EVAL]]]]]].
+ generalize (function_ptr_translated _ _ FUNC).
+ intros [tf [TFIND TRANSLF]].
+ red; exists b; exists tf; exists m.
+ split. rewrite symbols_preserved.
+ replace (prog_main tprog) with (prog_main prog).
+ assumption.
+ symmetry; apply transform_partial_program_main with transl_function.
+ exact TRANSL.
+ split. exact TFIND.
+ split. generalize TRANSLF. unfold transl_function.
+ destruct (transl_fun f init_state).
+ intro; discriminate. destruct p; intro EQ; injection EQ; intro EQ1.
+ rewrite <- EQ1. simpl. congruence.
+ rewrite (Genv.init_mem_transf_partial transl_function prog TRANSL).
+ exact (transl_function_correctness _ _ _ _ _ EVAL _ TRANSLF).
+Qed.
+
+End CORRECTNESS.
diff --git a/backend/RTLgenproof1.v b/backend/RTLgenproof1.v
new file mode 100644
index 0000000..4a8ad43
--- /dev/null
+++ b/backend/RTLgenproof1.v
@@ -0,0 +1,1463 @@
+(** Correctness proof for RTL generation: auxiliary results. *)
+
+Require Import Coqlib.
+Require Import Maps.
+Require Import AST.
+Require Import Integers.
+Require Import Values.
+Require Import Mem.
+Require Import Globalenvs.
+Require Import Op.
+Require Import Registers.
+Require Import Cminor.
+Require Import RTL.
+Require Import RTLgen.
+
+(** * Reasoning about monadic computations *)
+
+(** The tactics below simplify hypotheses of the form [f ... = OK x s]
+ where [f] is a monadic computation. For instance, the hypothesis
+ [(do x <- a; b) s = OK y s'] will generate the additional witnesses
+ [x], [s1] and the additional hypotheses
+ [a s = OK x s1] and [b x s1 = OK y s'], reflecting the fact that
+ both monadic computations [a] and [b] succeeded.
+*)
+
+Ltac monadSimpl1 :=
+ match goal with
+ | [ |- (bind ?F ?G ?S = OK ?X ?S') -> _ ] =>
+ unfold bind at 1;
+ generalize (refl_equal (F S));
+ pattern (F S) at -1 in |- *;
+ case (F S);
+ [ intro; intro; discriminate
+ | (let s := fresh "s" in
+ (let EQ := fresh "EQ" in
+ (intro; intros s EQ;
+ try monadSimpl1))) ]
+ | [ |- (bind2 ?F ?G ?S = OK ?X ?S') -> _ ] =>
+ unfold bind2 at 1; unfold bind at 1;
+ generalize (refl_equal (F S));
+ pattern (F S) at -1 in |- *;
+ case (F S);
+ [ intro; intro; discriminate
+ | let xy := fresh "xy" in
+ (let x := fresh "x" in
+ (let y := fresh "y" in
+ (let s := fresh "s" in
+ (let EQ := fresh "EQ" in
+ (intros xy s EQ; destruct xy as [x y]; simpl;
+ try monadSimpl1))))) ]
+ | [ |- (error _ _ = OK _ _) -> _ ] =>
+ unfold error; monadSimpl1
+ | [ |- (ret _ _ = OK _ _) -> _ ] =>
+ unfold ret; monadSimpl1
+ | [ |- (Error _ = OK _ _) -> _ ] =>
+ intro; discriminate
+ | [ |- (OK _ _ = OK _ _) -> _ ] =>
+ let h := fresh "H" in
+ (intro h; injection h; intro; intro; clear h)
+ end.
+
+Ltac monadSimpl :=
+ match goal with
+ | [ |- (bind ?F ?G ?S = OK ?X ?S') -> _ ] => monadSimpl1
+ | [ |- (bind2 ?F ?G ?S = OK ?X ?S') -> _ ] => monadSimpl1
+ | [ |- (error _ _ = OK _ _) -> _ ] => monadSimpl1
+ | [ |- (ret _ _ = OK _ _) -> _ ] => monadSimpl1
+ | [ |- (Error _ = OK _ _) -> _ ] => monadSimpl1
+ | [ |- (OK _ _ = OK _ _) -> _ ] => monadSimpl1
+ | [ |- (?F _ _ _ _ _ _ _ = OK _ _) -> _ ] => unfold F; monadSimpl1
+ | [ |- (?F _ _ _ _ _ _ = OK _ _) -> _ ] => unfold F; monadSimpl1
+ | [ |- (?F _ _ _ _ _ = OK _ _) -> _ ] => unfold F; monadSimpl1
+ | [ |- (?F _ _ _ _ = OK _ _) -> _ ] => unfold F; monadSimpl1
+ | [ |- (?F _ _ _ = OK _ _) -> _ ] => unfold F; monadSimpl1
+ | [ |- (?F _ _ = OK _ _) -> _ ] => unfold F; monadSimpl1
+ | [ |- (?F _ = OK _ _) -> _ ] => unfold F; monadSimpl1
+ end.
+
+Ltac monadInv H :=
+ generalize H; monadSimpl.
+
+(** * Monotonicity properties of the state *)
+
+(** Operations over the global state satisfy a crucial monotonicity property:
+ nodes are only added to the CFG, but never removed nor their instructions
+ changed; similarly, fresh nodes and fresh registers are only consumed,
+ but never reused. This property is captured by the following predicate
+ over states, which we show is a partial order. *)
+
+Inductive state_incr: state -> state -> Prop :=
+ state_incr_intro:
+ forall (s1 s2: state),
+ Ple s1.(st_nextnode) s2.(st_nextnode) ->
+ Ple s1.(st_nextreg) s2.(st_nextreg) ->
+ (forall pc, Plt pc s1.(st_nextnode) -> s2.(st_code)!pc = s1.(st_code)!pc) ->
+ state_incr s1 s2.
+
+Lemma instr_at_incr:
+ forall s1 s2 n i,
+ s1.(st_code)!n = i -> i <> None -> state_incr s1 s2 ->
+ s2.(st_code)!n = i.
+Proof.
+ intros. inversion H1.
+ rewrite <- H. apply H4. elim (st_wf s1 n); intro.
+ assumption. elim H0. congruence.
+Qed.
+
+Lemma state_incr_refl:
+ forall s, state_incr s s.
+Proof.
+ intros. apply state_incr_intro.
+ apply Ple_refl. apply Ple_refl. intros; auto.
+Qed.
+Hint Resolve state_incr_refl: rtlg.
+
+Lemma state_incr_trans:
+ forall s1 s2 s3, state_incr s1 s2 -> state_incr s2 s3 -> state_incr s1 s3.
+Proof.
+ intros. inversion H. inversion H0. apply state_incr_intro.
+ apply Ple_trans with (st_nextnode s2); assumption.
+ apply Ple_trans with (st_nextreg s2); assumption.
+ intros. transitivity (s2.(st_code)!pc).
+ apply H8. apply Plt_Ple_trans with s1.(st_nextnode); auto.
+ apply H3; auto.
+Qed.
+Hint Resolve state_incr_trans: rtlg.
+
+Lemma state_incr_trans2:
+ forall s1 s2 s3 s4,
+ state_incr s1 s2 -> state_incr s2 s3 -> state_incr s3 s4 ->
+ state_incr s1 s4.
+Proof.
+ intros; eauto with rtlg.
+Qed.
+
+Lemma state_incr_trans3:
+ forall s1 s2 s3 s4 s5,
+ state_incr s1 s2 -> state_incr s2 s3 -> state_incr s3 s4 -> state_incr s4 s5 ->
+ state_incr s1 s5.
+Proof.
+ intros; eauto with rtlg.
+Qed.
+
+Lemma state_incr_trans4:
+ forall s1 s2 s3 s4 s5 s6,
+ state_incr s1 s2 -> state_incr s2 s3 -> state_incr s3 s4 ->
+ state_incr s4 s5 -> state_incr s5 s6 ->
+ state_incr s1 s6.
+Proof.
+ intros; eauto with rtlg.
+Qed.
+
+Lemma state_incr_trans5:
+ forall s1 s2 s3 s4 s5 s6 s7,
+ state_incr s1 s2 -> state_incr s2 s3 -> state_incr s3 s4 ->
+ state_incr s4 s5 -> state_incr s5 s6 -> state_incr s6 s7 ->
+ state_incr s1 s7.
+Proof.
+ intros; eauto 6 with rtlg.
+Qed.
+
+Lemma state_incr_trans6:
+ forall s1 s2 s3 s4 s5 s6 s7 s8,
+ state_incr s1 s2 -> state_incr s2 s3 -> state_incr s3 s4 ->
+ state_incr s4 s5 -> state_incr s5 s6 -> state_incr s6 s7 ->
+ state_incr s7 s8 -> state_incr s1 s8.
+Proof.
+ intros; eauto 7 with rtlg.
+Qed.
+
+(** The following relation between two states is a weaker version of
+ [state_incr]. It permits changing the contents at an already reserved
+ graph node, but only from [None] to [Some i]. *)
+
+Definition state_extends (s1 s2: state): Prop :=
+ forall pc,
+ s1.(st_code)!pc = None \/ s2.(st_code)!pc = s1.(st_code)!pc.
+
+Lemma state_incr_extends:
+ forall s1 s2,
+ state_incr s1 s2 -> state_extends s1 s2.
+Proof.
+ unfold state_extends; intros. inversion H.
+ case (plt pc s1.(st_nextnode)); intro.
+ right; apply H2; auto.
+ left. elim (s1.(st_wf) pc); intro.
+ elim (n H5). auto.
+Qed.
+Hint Resolve state_incr_extends.
+
+(** A crucial property of states is the following: if an RTL execution
+ is possible (does not get stuck) in the CFG of a given state [s1]
+ the same execution is possible and leads to the same results in
+ the CFG of any state [s2] that extends [s1] in the sense of the
+ [state_extends] predicate. *)
+
+Section EXEC_INSTR_EXTENDS.
+
+Variable s1 s2: state.
+Hypothesis EXT: state_extends s1 s2.
+
+Lemma exec_instr_not_halt:
+ forall ge c sp pc rs m pc' rs' m',
+ exec_instr ge c sp pc rs m pc' rs' m' -> c!pc <> None.
+Proof.
+ induction 1; rewrite H; discriminate.
+Qed.
+
+Lemma exec_instr_in_s2:
+ forall ge sp pc rs m pc' rs' m',
+ exec_instr ge s1.(st_code) sp pc rs m pc' rs' m' ->
+ s2.(st_code)!pc = s1.(st_code)!pc.
+Proof.
+ intros.
+ elim (EXT pc); intro.
+ elim (exec_instr_not_halt _ _ _ _ _ _ _ _ _ H H0).
+ assumption.
+Qed.
+
+Lemma exec_instr_extends_rec:
+ forall ge c sp pc rs m pc' rs' m',
+ exec_instr ge c sp pc rs m pc' rs' m' ->
+ forall c', c!pc = c'!pc ->
+ exec_instr ge c' sp pc rs m pc' rs' m'.
+Proof.
+ induction 1; intros.
+ apply exec_Inop. congruence.
+ apply exec_Iop with op args. congruence. auto.
+ apply exec_Iload with chunk addr args a. congruence. auto. auto.
+ apply exec_Istore with chunk addr args src a.
+ congruence. auto. auto.
+ apply exec_Icall with sig ros args f; auto. congruence.
+ apply exec_Icond_true with cond args ifnot; auto. congruence.
+ apply exec_Icond_false with cond args ifso; auto. congruence.
+Qed.
+
+Lemma exec_instr_extends:
+ forall ge sp pc rs m pc' rs' m',
+ exec_instr ge s1.(st_code) sp pc rs m pc' rs' m' ->
+ exec_instr ge s2.(st_code) sp pc rs m pc' rs' m'.
+Proof.
+ intros.
+ apply exec_instr_extends_rec with (st_code s1).
+ assumption.
+ symmetry. eapply exec_instr_in_s2. eexact H.
+Qed.
+
+Lemma exec_instrs_extends_rec:
+ forall ge c sp pc rs m pc' rs' m',
+ exec_instrs ge c sp pc rs m pc' rs' m' ->
+ c = s1.(st_code) ->
+ exec_instrs ge s2.(st_code) sp pc rs m pc' rs' m'.
+Proof.
+ induction 1; intros.
+ apply exec_refl.
+ apply exec_one. apply exec_instr_extends; auto. rewrite <- H0; auto.
+ apply exec_trans with pc2 rs2 m2; auto.
+Qed.
+
+Lemma exec_instrs_extends:
+ forall ge sp pc rs m pc' rs' m',
+ exec_instrs ge s1.(st_code) sp pc rs m pc' rs' m' ->
+ exec_instrs ge s2.(st_code) sp pc rs m pc' rs' m'.
+Proof.
+ intros.
+ apply exec_instrs_extends_rec with (st_code s1); auto.
+Qed.
+
+End EXEC_INSTR_EXTENDS.
+
+(** Since [state_incr s1 s2] implies [state_extends s1 s2], we also have
+ that any RTL execution possible in the CFG of [s1] is also possible
+ in the CFG of [s2], provided that [state_incr s1 s2].
+ In particular, any RTL execution that is possible in a partially
+ constructed CFG remains possible in the final CFG obtained at
+ the end of the translation of the current function. *)
+
+Section EXEC_INSTR_INCR.
+
+Variable s1 s2: state.
+Hypothesis INCR: state_incr s1 s2.
+
+Lemma exec_instr_incr:
+ forall ge sp pc rs m pc' rs' m',
+ exec_instr ge s1.(st_code) sp pc rs m pc' rs' m' ->
+ exec_instr ge s2.(st_code) sp pc rs m pc' rs' m'.
+Proof.
+ intros.
+ apply exec_instr_extends with s1.
+ apply state_incr_extends; auto.
+ auto.
+Qed.
+
+Lemma exec_instrs_incr:
+ forall ge sp pc rs m pc' rs' m',
+ exec_instrs ge s1.(st_code) sp pc rs m pc' rs' m' ->
+ exec_instrs ge s2.(st_code) sp pc rs m pc' rs' m'.
+Proof.
+ intros.
+ apply exec_instrs_extends with s1.
+ apply state_incr_extends; auto.
+ auto.
+Qed.
+
+End EXEC_INSTR_INCR.
+
+(** * Validity and freshness of registers *)
+
+(** An RTL pseudo-register is valid in a given state if it was created
+ earlier, that is, it is less than the next fresh register of the state.
+ Otherwise, the pseudo-register is said to be fresh. *)
+
+Definition reg_valid (r: reg) (s: state) : Prop :=
+ Plt r s.(st_nextreg).
+
+Definition reg_fresh (r: reg) (s: state) : Prop :=
+ ~(Plt r s.(st_nextreg)).
+
+Lemma valid_fresh_absurd:
+ forall r s, reg_valid r s -> reg_fresh r s -> False.
+Proof.
+ intros r s. unfold reg_valid, reg_fresh; case r; tauto.
+Qed.
+Hint Resolve valid_fresh_absurd: rtlg.
+
+Lemma valid_fresh_different:
+ forall r1 r2 s, reg_valid r1 s -> reg_fresh r2 s -> r1 <> r2.
+Proof.
+ unfold not; intros. subst r2. eauto with rtlg.
+Qed.
+Hint Resolve valid_fresh_different: rtlg.
+
+Lemma reg_valid_incr:
+ forall r s1 s2, state_incr s1 s2 -> reg_valid r s1 -> reg_valid r s2.
+Proof.
+ intros r s1 s2 INCR.
+ inversion INCR.
+ unfold reg_valid. intros; apply Plt_Ple_trans with (st_nextreg s1); auto.
+Qed.
+Hint Resolve reg_valid_incr: rtlg.
+
+Lemma reg_fresh_decr:
+ forall r s1 s2, state_incr s1 s2 -> reg_fresh r s2 -> reg_fresh r s1.
+Proof.
+ intros r s1 s2 INCR. inversion INCR.
+ unfold reg_fresh; unfold not; intros.
+ apply H4. apply Plt_Ple_trans with (st_nextreg s1); auto.
+Qed.
+Hint Resolve reg_fresh_decr: rtlg.
+
+(** * Well-formedness of compilation environments *)
+
+(** A compilation environment (mapping) is well-formed in a given state if
+ the following properties hold:
+- The registers associated with Cminor local variables and let-bound variables
+ are valid in the state.
+- Two distinct Cminor local variables are mapped to distinct pseudo-registers.
+- A Cminor local variable and a let-bound variable are mapped to
+ distinct pseudo-registers.
+*)
+
+Record map_wf (m: mapping) (s: state) : Prop :=
+ mk_map_wf {
+ map_wf_var_valid:
+ (forall id r, m.(map_vars)!id = Some r -> reg_valid r s);
+ map_wf_letvar_valid:
+ (forall r, In r m.(map_letvars) -> reg_valid r s);
+ map_wf_inj:
+ (forall id1 id2 r,
+ m.(map_vars)!id1 = Some r -> m.(map_vars)!id2 = Some r -> id1 = id2);
+ map_wf_disj:
+ (forall id r,
+ m.(map_vars)!id = Some r -> In r m.(map_letvars) -> False)
+ }.
+Hint Resolve map_wf_var_valid
+ map_wf_letvar_valid
+ map_wf_inj map_wf_disj: rtlg.
+
+Lemma map_wf_incr:
+ forall s1 s2 m,
+ state_incr s1 s2 -> map_wf m s1 -> map_wf m s2.
+Proof.
+ intros. apply mk_map_wf; intros; eauto with rtlg.
+Qed.
+Hint Resolve map_wf_incr: rtlg.
+
+(** A register is ``in'' a mapping if it is associated with a Cminor
+ local or let-bound variable. *)
+
+Definition reg_in_map (m: mapping) (r: reg) : Prop :=
+ (exists id, m.(map_vars)!id = Some r) \/ In r m.(map_letvars).
+
+Lemma reg_in_map_valid:
+ forall m s r,
+ map_wf m s -> reg_in_map m r -> reg_valid r s.
+Proof.
+ intros. elim H0.
+ intros [id EQ]. eauto with rtlg.
+ intro IN. eauto with rtlg.
+Qed.
+Hint Resolve reg_in_map_valid: rtlg.
+
+(** A register is mutated if it is associated with a Cminor local variable
+ that belongs to the given set of mutated variables. *)
+
+Definition mutated_reg (map: mapping) (mut: list ident) (r: reg) : Prop :=
+ exists id, In id mut /\ map.(map_vars)!id = Some r.
+
+Lemma mutated_reg_in_map:
+ forall map mut r, mutated_reg map mut r -> reg_in_map map r.
+Proof.
+ intros. elim H. intros id [IN EQ].
+ left. exists id; auto.
+Qed.
+Hint Resolve mutated_reg_in_map: rtlg.
+
+(** * Properties of basic operations over the state *)
+
+(** Properties of [add_instr]. *)
+
+Lemma add_instr_incr:
+ forall s1 s2 i n,
+ add_instr i s1 = OK n s2 -> state_incr s1 s2.
+Proof.
+ intros until n; monadSimpl.
+ subst s2; apply state_incr_intro; simpl.
+ apply Ple_succ.
+ apply Ple_refl.
+ intros. apply PTree.gso; apply Plt_ne; auto.
+Qed.
+Hint Resolve add_instr_incr: rtlg.
+
+Lemma add_instr_at:
+ forall s1 s2 i n,
+ add_instr i s1 = OK n s2 -> s2.(st_code)!n = Some i.
+Proof.
+ intros until n; monadSimpl.
+ subst n; subst s2; simpl. apply PTree.gss.
+Qed.
+Hint Resolve add_instr_at.
+
+(** Properties of [reserve_instr] and [update_instr]. *)
+
+Lemma reserve_instr_incr:
+ forall s1 s2 n,
+ reserve_instr s1 = OK n s2 -> state_incr s1 s2.
+Proof.
+ intros until n; monadSimpl. subst s2.
+ apply state_incr_intro; simpl.
+ apply Ple_succ.
+ apply Ple_refl.
+ auto.
+Qed.
+
+Lemma update_instr_incr:
+ forall s1 s2 s3 s4 i n t,
+ reserve_instr s1 = OK n s2 ->
+ state_incr s2 s3 ->
+ update_instr n i s3 = OK t s4 ->
+ state_incr s1 s4.
+Proof.
+ intros.
+ monadInv H.
+ generalize H1; unfold update_instr.
+ case (plt n (st_nextnode s3)); intro.
+ monadSimpl. inversion H0.
+ subst s4; apply state_incr_intro; simpl.
+ apply Plt_Ple. apply Plt_Ple_trans with (st_nextnode s2).
+ subst s2; simpl; apply Plt_succ. assumption.
+ rewrite <- H3 in H7; simpl in H7. assumption.
+ intros. rewrite PTree.gso.
+ rewrite <- H3 in H8; simpl in H8. apply H8.
+ apply Plt_trans_succ; assumption.
+ subst n; apply Plt_ne; assumption.
+ intros; discriminate.
+Qed.
+
+Lemma update_instr_extends:
+ forall s1 s2 s3 s4 i n t,
+ reserve_instr s1 = OK n s2 ->
+ state_incr s2 s3 ->
+ update_instr n i s3 = OK t s4 ->
+ state_extends s3 s4.
+Proof.
+ intros.
+ monadInv H.
+ red; intros.
+ case (peq pc n); intro.
+ subst pc. left. inversion H0. rewrite H6.
+ rewrite <- H3; simpl.
+ elim (s1.(st_wf) n); intro.
+ rewrite <- H4 in H9. elim (Plt_strict _ H9).
+ auto.
+ rewrite <- H4. rewrite <- H3; simpl. apply Plt_succ.
+ generalize H1; unfold update_instr.
+ case (plt n s3.(st_nextnode)); intro; monadSimpl.
+ right; rewrite <- H5; simpl. apply PTree.gso; auto.
+Qed.
+
+(** Properties of [new_reg]. *)
+
+Lemma new_reg_incr:
+ forall s1 s2 r, new_reg s1 = OK r s2 -> state_incr s1 s2.
+Proof.
+ intros until r. monadSimpl.
+ subst s2; apply state_incr_intro; simpl.
+ apply Ple_refl. apply Ple_succ. auto.
+Qed.
+Hint Resolve new_reg_incr: rtlg.
+
+Lemma new_reg_valid:
+ forall s1 s2 r,
+ new_reg s1 = OK r s2 -> reg_valid r s2.
+Proof.
+ intros until r. monadSimpl. subst s2; subst r.
+ unfold reg_valid; unfold reg_valid; simpl.
+ apply Plt_succ.
+Qed.
+Hint Resolve new_reg_valid: rtlg.
+
+Lemma new_reg_fresh:
+ forall s1 s2 r,
+ new_reg s1 = OK r s2 -> reg_fresh r s1.
+Proof.
+ intros until r. monadSimpl. subst s2; subst r.
+ unfold reg_fresh; simpl.
+ exact (Plt_strict _).
+Qed.
+Hint Resolve new_reg_fresh: rtlg.
+
+Lemma new_reg_not_in_map:
+ forall s1 s2 m r,
+ new_reg s1 = OK r s2 -> map_wf m s1 -> ~(reg_in_map m r).
+Proof.
+ unfold not; intros; eauto with rtlg.
+Qed.
+Hint Resolve new_reg_not_in_map: rtlg.
+
+Lemma new_reg_not_mutated:
+ forall s1 s2 m mut r,
+ new_reg s1 = OK r s2 -> map_wf m s1 -> ~(mutated_reg m mut r).
+Proof.
+ unfold not; intros.
+ generalize (mutated_reg_in_map _ _ _ H1); intro.
+ exact (new_reg_not_in_map _ _ _ _ H H0 H2).
+Qed.
+Hint Resolve new_reg_not_mutated: rtlg.
+
+(** * Properties of operations over compilation environments *)
+
+Lemma init_mapping_wf:
+ forall s, map_wf init_mapping s.
+Proof.
+ intro. unfold init_mapping; apply mk_map_wf; simpl; intros.
+ rewrite PTree.gempty in H; discriminate.
+ contradiction.
+ rewrite PTree.gempty in H; discriminate.
+ tauto.
+Qed.
+
+(** Properties of [find_var]. *)
+
+Lemma find_var_incr:
+ forall s1 s2 map name r,
+ find_var map name s1 = OK r s2 -> state_incr s1 s2.
+Proof.
+ intros until r. unfold find_var.
+ case (map_vars map)!name.
+ intro; monadSimpl. subst s2; auto with rtlg.
+ monadSimpl.
+Qed.
+Hint Resolve find_var_incr: rtlg.
+
+Lemma find_var_in_map:
+ forall s1 s2 map name r,
+ find_var map name s1 = OK r s2 -> map_wf map s1 -> reg_in_map map r.
+Proof.
+ intros until r. unfold find_var; caseEq (map.(map_vars)!name).
+ intros r0 eq. monadSimpl; intros. subst r0.
+ left. exists name; auto.
+ intro; monadSimpl.
+Qed.
+Hint Resolve find_var_in_map: rtlg.
+
+Lemma find_var_valid:
+ forall s1 s2 map name r,
+ find_var map name s1 = OK r s2 -> map_wf map s1 -> reg_valid r s1.
+Proof.
+ eauto with rtlg.
+Qed.
+Hint Resolve find_var_valid: rtlg.
+
+Lemma find_var_not_mutated:
+ forall s1 s2 map name r mut,
+ find_var map name s1 = OK r s2 ->
+ map_wf map s1 ->
+ ~(In name mut) ->
+ ~(mutated_reg map mut r).
+Proof.
+ intros until mut. unfold find_var; caseEq (map.(map_vars)!name).
+ intros r0 EQ. monadSimpl; intros; subst r0.
+ red; unfold mutated_reg; intros [id [IN EQ2]].
+ assert (name = id). eauto with rtlg.
+ subst id. contradiction.
+ intro; monadSimpl.
+Qed.
+Hint Resolve find_var_not_mutated: rtlg.
+
+(** Properties of [find_letvar]. *)
+
+Lemma find_letvar_incr:
+ forall s1 s2 map idx r,
+ find_letvar map idx s1 = OK r s2 -> state_incr s1 s2.
+Proof.
+ intros until r. unfold find_letvar.
+ case (nth_error (map_letvars map) idx).
+ intro; monadSimpl. subst s2; auto with rtlg.
+ monadSimpl.
+Qed.
+Hint Resolve find_letvar_incr: rtlg.
+
+Lemma find_letvar_in_map:
+ forall s1 s2 map idx r,
+ find_letvar map idx s1 = OK r s2 -> map_wf map s1 -> reg_in_map map r.
+Proof.
+ intros until r. unfold find_letvar.
+ caseEq (nth_error (map_letvars map) idx).
+ intros r0 EQ; monadSimpl. intros. right.
+ subst r0; apply nth_error_in with idx; auto.
+ intro; monadSimpl.
+Qed.
+Hint Resolve find_letvar_in_map: rtlg.
+
+Lemma find_letvar_valid:
+ forall s1 s2 map idx r,
+ find_letvar map idx s1 = OK r s2 -> map_wf map s1 -> reg_valid r s1.
+Proof.
+ eauto with rtlg.
+Qed.
+Hint Resolve find_letvar_valid: rtlg.
+
+Lemma find_letvar_not_mutated:
+ forall s1 s2 map idx mut r,
+ find_letvar map idx s1 = OK r s2 ->
+ map_wf map s1 ->
+ ~(mutated_reg map mut r).
+Proof.
+ intros until r. unfold find_letvar.
+ caseEq (nth_error (map_letvars map) idx).
+ intros r' NTH. monadSimpl. unfold not; unfold mutated_reg.
+ intros MWF (id, (IN, MV)). subst r'. eauto with rtlg coqlib.
+ intro; monadSimpl.
+Qed.
+Hint Resolve find_letvar_not_mutated: rtlg.
+
+(** Properties of [add_var]. *)
+
+Lemma add_var_valid:
+ forall s1 s2 map1 map2 name r,
+ add_var map1 name s1 = OK (r, map2) s2 -> reg_valid r s2.
+Proof.
+ intros until r. monadSimpl. intro. subst r0; subst s.
+ eauto with rtlg.
+Qed.
+
+Lemma add_var_incr:
+ forall s1 s2 map name rm,
+ add_var map name s1 = OK rm s2 -> state_incr s1 s2.
+Proof.
+ intros until rm; monadSimpl. subst s2. eauto with rtlg.
+Qed.
+Hint Resolve add_var_incr: rtlg.
+
+Lemma add_var_wf:
+ forall s1 s2 map name r map',
+ add_var map name s1 = OK (r,map') s2 -> map_wf map s1 -> map_wf map' s2.
+Proof.
+ intros until map'; monadSimpl; intros.
+ subst r0; subst s; subst map'; apply mk_map_wf; simpl.
+
+ intros id r'. rewrite PTree.gsspec.
+ case (peq id name); intros.
+ injection H; intros; subst r'. eauto with rtlg.
+ eauto with rtlg.
+ eauto with rtlg.
+
+ intros id1 id2 r'.
+ repeat (rewrite PTree.gsspec).
+ case (peq id1 name); case (peq id2 name); intros.
+ congruence.
+ rewrite <- H in H0. byContradiction; eauto with rtlg.
+ rewrite <- H0 in H. byContradiction; eauto with rtlg.
+ eauto with rtlg.
+
+ intros id r'. case (peq id name); intro.
+ subst id. rewrite PTree.gss. intro E; injection E; intro; subst r'.
+ intro; eauto with rtlg.
+
+ rewrite PTree.gso; auto. eauto with rtlg.
+Qed.
+Hint Resolve add_var_wf: rtlg.
+
+Lemma add_var_find:
+ forall s1 s2 map name r map',
+ add_var map name s1 = OK (r,map') s2 -> map'.(map_vars)!name = Some r.
+Proof.
+ intros until map'.
+ monadSimpl.
+ intro; subst r0.
+ subst map'; simpl in |- *.
+ apply PTree.gss.
+Qed.
+
+Lemma add_vars_incr:
+ forall names s1 s2 map r,
+ add_vars map names s1 = OK r s2 -> state_incr s1 s2.
+Proof.
+ induction names; simpl.
+ intros until r; monadSimpl; intros. subst s2; eauto with rtlg.
+ intros until r; monadSimpl; intros.
+ subst s0; eauto with rtlg.
+Qed.
+
+Lemma add_vars_valid:
+ forall namel s1 s2 map1 map2 rl,
+ add_vars map1 namel s1 = OK (rl, map2) s2 ->
+ forall r, In r rl -> reg_valid r s2.
+Proof.
+ induction namel; simpl; intros.
+ monadInv H. intro. subst rl. elim H0.
+ monadInv H. intro EQ1. subst rl; subst s0; subst y0. elim H0.
+ intro; subst r. eapply add_var_valid. eexact EQ0.
+ intro. apply reg_valid_incr with s. eauto with rtlg.
+ eauto.
+Qed.
+
+Lemma add_vars_wf:
+ forall names s1 s2 map map' rl,
+ add_vars map names s1 = OK (rl,map') s2 ->
+ map_wf map s1 -> map_wf map' s2.
+Proof.
+ induction names; simpl.
+ intros until rl; monadSimpl; intros.
+ subst s2; subst map'; assumption.
+ intros until rl; monadSimpl; intros. subst y0; subst s0.
+ eapply add_var_wf. eexact EQ0.
+ eapply IHnames. eexact EQ. auto.
+Qed.
+Hint Resolve add_vars_wf: rtlg.
+
+Lemma add_var_letenv:
+ forall map1 i s1 r map2 s2,
+ add_var map1 i s1 = OK (r, map2) s2 ->
+ map2.(map_letvars) = map1.(map_letvars).
+Proof.
+ intros until s2. monadSimpl. intro. subst map2; reflexivity.
+Qed.
+
+(** Properties of [add_letvar]. *)
+
+Lemma add_letvar_wf:
+ forall map s r,
+ map_wf map s ->
+ reg_valid r s ->
+ ~(reg_in_map map r) ->
+ map_wf (add_letvar map r) s.
+Proof.
+ intros. unfold add_letvar; apply mk_map_wf; simpl.
+ exact (map_wf_var_valid map s H).
+ intros r' [EQ| IN].
+ subst r'; assumption.
+ eapply map_wf_letvar_valid; eauto.
+ exact (map_wf_inj map s H).
+ intros. elim H3; intro.
+ subst r0. apply H1. left. exists id; auto.
+ eapply map_wf_disj; eauto.
+Qed.
+
+(** * Properties of [alloc_reg] and [alloc_regs] *)
+
+Lemma alloc_reg_incr:
+ forall a s1 s2 map mut r,
+ alloc_reg map mut a s1 = OK r s2 -> state_incr s1 s2.
+Proof.
+ intros until r. unfold alloc_reg.
+ case a; eauto with rtlg.
+ intro i; case (In_dec ident_eq i mut); eauto with rtlg.
+Qed.
+Hint Resolve alloc_reg_incr: rtlg.
+
+Lemma alloc_reg_valid:
+ forall a s1 s2 map mut r,
+ map_wf map s1 ->
+ alloc_reg map mut a s1 = OK r s2 -> reg_valid r s2.
+Proof.
+ intros until r. unfold alloc_reg.
+ case a; eauto with rtlg.
+ intro i; case (In_dec ident_eq i mut); eauto with rtlg.
+Qed.
+Hint Resolve alloc_reg_valid: rtlg.
+
+Lemma alloc_reg_fresh_or_in_map:
+ forall map mut a s r s',
+ map_wf map s ->
+ alloc_reg map mut a s = OK r s' ->
+ reg_in_map map r \/ reg_fresh r s.
+Proof.
+ intros until s'. unfold alloc_reg.
+ destruct a; try (right; eauto with rtlg; fail).
+ case (In_dec ident_eq i mut); intros.
+ right; eauto with rtlg.
+ left; eauto with rtlg.
+ intros; left; eauto with rtlg.
+Qed.
+
+Lemma add_vars_letenv:
+ forall il map1 s1 rl map2 s2,
+ add_vars map1 il s1 = OK (rl, map2) s2 ->
+ map2.(map_letvars) = map1.(map_letvars).
+Proof.
+ induction il; simpl; intros.
+ monadInv H. intro. subst map2; reflexivity.
+ monadInv H. intro EQ1. transitivity (map_letvars y).
+ subst y0. eapply add_var_letenv; eauto.
+ eauto.
+Qed.
+
+(** A register is an adequate target for holding the value of an
+ expression if
+- either the register is associated with a Cminor let-bound variable
+ or a Cminor local variable that is not modified;
+- or the register is valid and not associated with any Cminor variable. *)
+
+Inductive target_reg_ok: state -> mapping -> list ident -> expr -> reg -> Prop :=
+ | target_reg_immut_var:
+ forall s map mut id r,
+ ~(In id mut) -> map.(map_vars)!id = Some r ->
+ target_reg_ok s map mut (Evar id) r
+ | target_reg_letvar:
+ forall s map mut idx r,
+ nth_error map.(map_letvars) idx = Some r ->
+ target_reg_ok s map mut (Eletvar idx) r
+ | target_reg_other:
+ forall s map mut a r,
+ ~(reg_in_map map r) ->
+ reg_valid r s ->
+ target_reg_ok s map mut a r.
+
+Lemma target_reg_ok_incr:
+ forall s1 s2 map mut e r,
+ state_incr s1 s2 ->
+ target_reg_ok s1 map mut e r ->
+ target_reg_ok s2 map mut e r.
+Proof.
+ intros. inversion H0.
+ apply target_reg_immut_var; auto.
+ apply target_reg_letvar; auto.
+ apply target_reg_other; eauto with rtlg.
+Qed.
+Hint Resolve target_reg_ok_incr: rtlg.
+
+Lemma target_reg_valid:
+ forall s map mut e r,
+ map_wf map s ->
+ target_reg_ok s map mut e r ->
+ reg_valid r s.
+Proof.
+ intros. inversion H0; eauto with rtlg coqlib.
+Qed.
+Hint Resolve target_reg_valid: rtlg.
+
+Lemma target_reg_not_mutated:
+ forall s map mut e r,
+ map_wf map s ->
+ target_reg_ok s map mut e r ->
+ ~(mutated_reg map mut r).
+Proof.
+ unfold not; unfold mutated_reg; intros until r.
+ intros MWF TRG [id [IN MV]].
+ inversion TRG.
+ assert (id = id0); eauto with rtlg. subst id0. contradiction.
+ assert (In r (map_letvars map)). eauto with coqlib. eauto with rtlg.
+ apply H. red. left; exists id; assumption.
+Qed.
+Hint Resolve target_reg_not_mutated: rtlg.
+
+Lemma alloc_reg_target_ok:
+ forall a s1 s2 map mut r,
+ map_wf map s1 ->
+ alloc_reg map mut a s1 = OK r s2 ->
+ target_reg_ok s2 map mut a r.
+Proof.
+ intros until r; intro MWF. unfold alloc_reg.
+ case a; intros; try (eapply target_reg_other; eauto with rtlg; fail).
+ generalize H; case (In_dec ident_eq i mut); intros.
+ apply target_reg_other; eauto with rtlg.
+ apply target_reg_immut_var; auto.
+ generalize H0; unfold find_var.
+ case (map_vars map)!i.
+ intro. monadSimpl. congruence.
+ monadSimpl.
+ apply target_reg_letvar.
+ generalize H. unfold find_letvar.
+ case (nth_error (map_letvars map) n).
+ intro; monadSimpl; congruence.
+ monadSimpl.
+Qed.
+Hint Resolve alloc_reg_target_ok: rtlg.
+
+Lemma alloc_regs_incr:
+ forall al s1 s2 map mut rl,
+ alloc_regs map mut al s1 = OK rl s2 -> state_incr s1 s2.
+Proof.
+ induction al; simpl; intros.
+ monadInv H. subst s2. eauto with rtlg.
+ monadInv H. subst s2. eauto with rtlg.
+Qed.
+Hint Resolve alloc_regs_incr: rtlg.
+
+Lemma alloc_regs_valid:
+ forall al s1 s2 map mut rl,
+ map_wf map s1 ->
+ alloc_regs map mut al s1 = OK rl s2 ->
+ forall r, In r rl -> reg_valid r s2.
+Proof.
+ induction al; simpl; intros.
+ monadInv H0. subst rl. elim H1.
+ monadInv H0. subst rl; subst s0.
+ elim H1; intro.
+ subst r0. eauto with rtlg.
+ eauto with rtlg.
+Qed.
+Hint Resolve alloc_regs_valid: rtlg.
+
+Lemma alloc_regs_fresh_or_in_map:
+ forall map mut al s rl s',
+ map_wf map s ->
+ alloc_regs map mut al s = OK rl s' ->
+ forall r, In r rl -> reg_in_map map r \/ reg_fresh r s.
+Proof.
+ induction al; simpl; intros.
+ monadInv H0. subst rl. elim H1.
+ monadInv H0. subst rl. elim (in_inv H1); intro.
+ subst r.
+ assert (MWF: map_wf map s0). eauto with rtlg.
+ elim (alloc_reg_fresh_or_in_map map mut e s0 r0 s1 MWF EQ0); intro.
+ left; assumption. right; eauto with rtlg.
+ eauto with rtlg.
+Qed.
+
+Inductive target_regs_ok: state -> mapping -> list ident -> exprlist -> list reg -> Prop :=
+ | target_regs_nil:
+ forall s map mut,
+ target_regs_ok s map mut Enil nil
+ | target_regs_cons:
+ forall s map mut a r al rl,
+ reg_in_map map r \/ ~(In r rl) ->
+ target_reg_ok s map mut a r ->
+ target_regs_ok s map mut al rl ->
+ target_regs_ok s map mut (Econs a al) (r :: rl).
+
+Lemma target_regs_ok_incr:
+ forall s1 map mut al rl,
+ target_regs_ok s1 map mut al rl ->
+ forall s2,
+ state_incr s1 s2 ->
+ target_regs_ok s2 map mut al rl.
+Proof.
+ induction 1; intros.
+ apply target_regs_nil.
+ apply target_regs_cons; eauto with rtlg.
+Qed.
+Hint Resolve target_regs_ok_incr: rtlg.
+
+Lemma target_regs_valid:
+ forall s map mut al rl,
+ target_regs_ok s map mut al rl ->
+ map_wf map s ->
+ forall r, In r rl -> reg_valid r s.
+Proof.
+ induction 1; simpl; intros.
+ contradiction.
+ elim H3; intro.
+ subst r0. eauto with rtlg.
+ auto.
+Qed.
+Hint Resolve target_regs_valid: rtlg.
+
+Lemma target_regs_not_mutated:
+ forall s map mut el rl,
+ target_regs_ok s map mut el rl ->
+ map_wf map s ->
+ forall r, In r rl -> ~(mutated_reg map mut r).
+Proof.
+ induction 1; simpl; intros.
+ contradiction.
+ elim H3; intro. subst r0. eauto with rtlg.
+ auto.
+Qed.
+Hint Resolve target_regs_not_mutated: rtlg.
+
+Lemma alloc_regs_target_ok:
+ forall al s1 s2 map mut rl,
+ map_wf map s1 ->
+ alloc_regs map mut al s1 = OK rl s2 ->
+ target_regs_ok s2 map mut al rl.
+Proof.
+ induction al; simpl; intros.
+ monadInv H0. subst rl; apply target_regs_nil.
+ monadInv H0. subst s0; subst rl.
+ apply target_regs_cons; eauto 6 with rtlg.
+ assert (MWF: map_wf map s). eauto with rtlg.
+ elim (alloc_reg_fresh_or_in_map map mut e s r s2 MWF EQ0); intro.
+ left; assumption. right; red; intro; eauto with rtlg.
+Qed.
+Hint Resolve alloc_regs_target_ok: rtlg.
+
+(** The following predicate is a variant of [target_reg_ok] used
+ to characterize registers that are adequate for holding the return
+ value of a function. *)
+
+Inductive return_reg_ok: state -> mapping -> option reg -> Prop :=
+ | return_reg_ok_none:
+ forall s map,
+ return_reg_ok s map None
+ | return_reg_ok_some:
+ forall s map r,
+ ~(reg_in_map map r) -> reg_valid r s ->
+ return_reg_ok s map (Some r).
+
+Lemma return_reg_ok_incr:
+ forall s1 s2 map or,
+ state_incr s1 s2 ->
+ return_reg_ok s1 map or ->
+ return_reg_ok s2 map or.
+Proof.
+ intros. inversion H0; constructor.
+ assumption. eauto with rtlg.
+Qed.
+Hint Resolve return_reg_ok_incr: rtlg.
+
+Lemma new_reg_return_ok:
+ forall s1 r s2 map sig,
+ new_reg s1 = OK r s2 ->
+ map_wf map s1 ->
+ return_reg_ok s2 map (ret_reg sig r).
+Proof.
+ intros. unfold ret_reg. destruct (sig_res sig); constructor.
+ eauto with rtlg. eauto with rtlg.
+Qed.
+
+(** * Correspondence between Cminor environments and RTL register sets *)
+
+(** An RTL register environment matches a Cminor local environment and
+ let-environment if the value of every local or let-bound variable in
+ the Cminor environments is identical to the value of the
+ corresponding pseudo-register in the RTL register environment. *)
+
+Record match_env
+ (map: mapping) (e: Cminor.env) (le: Cminor.letenv) (rs: regset) : Prop :=
+ mk_match_env {
+ me_vars:
+ (forall id v,
+ e!id = Some v -> exists r, map.(map_vars)!id = Some r /\ rs#r = v);
+ me_letvars:
+ rs##(map.(map_letvars)) = le
+ }.
+
+Lemma match_env_find_reg:
+ forall map id s1 s2 r e le rs v,
+ find_var map id s1 = OK r s2 ->
+ match_env map e le rs ->
+ e!id = Some v ->
+ rs#r = v.
+Proof.
+ intros until v.
+ unfold find_var. caseEq (map.(map_vars)!id).
+ intros r' EQ. monadSimpl. subst r'. intros.
+ generalize (me_vars _ _ _ _ H _ _ H1). intros [r' [EQ' RS]].
+ rewrite EQ' in EQ; injection EQ; intro; subst r'.
+ assumption.
+ intro; monadSimpl.
+Qed.
+Hint Resolve match_env_find_reg: rtlg.
+
+Lemma match_env_invariant:
+ forall map e le rs rs',
+ match_env map e le rs ->
+ (forall r, (reg_in_map map r) -> rs'#r = rs#r) ->
+ match_env map e le rs'.
+Proof.
+ intros. apply mk_match_env.
+ intros id v' E.
+ generalize (me_vars _ _ _ _ H _ _ E). intros (r', (M, R)).
+ exists r'. split. auto. rewrite <- R. apply H0.
+ left. exists id. auto.
+ transitivity rs ## (map_letvars map).
+ apply list_map_exten. intros.
+ symmetry. apply H0. right. auto.
+ exact (me_letvars _ _ _ _ H).
+Qed.
+
+(** Matching between environments is preserved when an unmapped register
+ (not corresponding to any Cminor variable) is assigned in the RTL
+ execution. *)
+
+Lemma match_env_update_temp:
+ forall map e le rs r v,
+ match_env map e le rs ->
+ ~(reg_in_map map r) ->
+ match_env map e le (rs#r <- v).
+Proof.
+ intros. apply match_env_invariant with rs; auto.
+ intros. case (Reg.eq r r0); intro.
+ subst r0; contradiction.
+ apply Regmap.gso; auto.
+Qed.
+Hint Resolve match_env_update_temp: rtlg.
+
+(** Matching between environments is preserved by simultaneous
+ assignment to a Cminor local variable (in the Cminor environments)
+ and to the corresponding RTL pseudo-register (in the RTL register
+ environment). *)
+
+Lemma match_env_update_var:
+ forall map e le rs rs' id r v s s',
+ map_wf map s ->
+ find_var map id s = OK r s' ->
+ match_env map e le rs ->
+ rs'#r = v ->
+ (forall x, x <> r -> rs'#x = rs#x) ->
+ match_env map (PTree.set id v e) le rs'.
+Proof.
+ intros until s'; intro MWF.
+ unfold find_var in |- *. caseEq (map_vars map)!id.
+ intros. monadInv H0. subst r0. apply mk_match_env.
+ intros id' v' E. case (peq id' id); intros.
+ subst id'. rewrite PTree.gss in E. injection E; intro; subst v'.
+ exists r. split. auto. auto.
+ rewrite PTree.gso in E; auto.
+ elim (me_vars _ _ _ _ H1 _ _ E). intros r' (M, R).
+ exists r'. split. assumption. rewrite <- R; apply H3; auto.
+ red in |- *; intro. subst r'. apply n. eauto with rtlg.
+ transitivity rs ## (map_letvars map).
+ apply list_map_exten. intros. symmetry. apply H3.
+ red in |- *; intro. subst x. eauto with rtlg.
+ exact (me_letvars _ _ _ _ H1).
+ intro; monadSimpl.
+Qed.
+
+Lemma match_env_letvar:
+ forall map e le rs r v,
+ match_env map e le rs ->
+ rs#r = v ->
+ match_env (add_letvar map r) e (v :: le) rs.
+Proof.
+ intros. unfold add_letvar in |- *; apply mk_match_env; simpl in |- *.
+ exact (me_vars _ _ _ _ H).
+ rewrite H0. rewrite (me_letvars _ _ _ _ H). auto.
+Qed.
+
+Lemma match_env_exten:
+ forall map e le rs1 rs2,
+ (forall r, rs2#r = rs1#r) ->
+ match_env map e le rs1 ->
+ match_env map e le rs2.
+Proof.
+ intros. apply mk_match_env.
+ intros. generalize (me_vars _ _ _ _ H0 _ _ H1). intros (r, (M1, M2)).
+ exists r. split. assumption. subst v. apply H.
+ transitivity rs1 ## (map_letvars map).
+ apply list_map_exten. intros. symmetry in |- *. apply H.
+ exact (me_letvars _ _ _ _ H0).
+Qed.
+
+Lemma match_env_empty:
+ forall map,
+ map.(map_letvars) = nil ->
+ match_env map (PTree.empty val) nil (Regmap.init Vundef).
+Proof.
+ intros. apply mk_match_env.
+ intros. rewrite PTree.gempty in H0. discriminate.
+ rewrite H. reflexivity.
+Qed.
+
+(** The assignment of function arguments to local variables (on the Cminor
+ side) and pseudo-registers (on the RTL side) preserves matching
+ between environments. *)
+
+Lemma match_set_params_init_regs:
+ forall il rl s1 map2 s2 vl,
+ add_vars init_mapping il s1 = OK (rl, map2) s2 ->
+ match_env map2 (set_params vl il) nil (init_regs vl rl)
+ /\ (forall r, reg_fresh r s2 -> (init_regs vl rl)#r = Vundef).
+Proof.
+ induction il; simpl in |- *; intros.
+
+ monadInv H. intro; subst rl; simpl in |- *.
+ split. apply match_env_empty. subst map2; auto.
+ intros. apply Regmap.gi.
+
+ monadInv H. intro EQ1; subst s0; subst y0; subst rl. clear H.
+ monadInv EQ0. intro EQ2. subst x0; subst s0. simpl.
+
+ assert (LV : map_letvars map2 = nil).
+ transitivity (map_letvars y).
+ eapply add_var_letenv; eauto.
+ transitivity (map_letvars init_mapping).
+ eapply add_vars_letenv; eauto.
+ reflexivity.
+
+ destruct vl.
+ (* vl = nil *)
+ generalize (IHil _ _ _ _ nil EQ). intros [ME UNDEF]. split.
+ constructor. intros id v. subst map2. simpl.
+ repeat rewrite PTree.gsspec; case (peq id a); intros.
+ exists r; split. auto. rewrite Regmap.gi. congruence.
+ destruct (me_vars _ _ _ _ ME id v H) as (r', (MV, IR)).
+ exists r'. split. auto.
+ replace (init_regs nil x) with (Regmap.init Vundef) in IR. auto.
+ destruct x; reflexivity.
+ rewrite LV; reflexivity.
+ intros. apply Regmap.gi.
+ (* vl = v :: vl *)
+ generalize (IHil _ _ _ _ vl EQ). intros [ME UNDEF]. split.
+ constructor. intros id v1. subst map2. simpl.
+ repeat rewrite PTree.gsspec; case (peq id a); intros.
+ exists r; split. auto. rewrite Regmap.gss. congruence.
+ destruct (me_vars _ _ _ _ ME id v1 H) as (r', (MV, IR)).
+ exists r'. split. auto. rewrite Regmap.gso. auto.
+ apply valid_fresh_different with s.
+ assert (MWF : map_wf y s).
+ eapply add_vars_wf; eauto. apply init_mapping_wf.
+ eauto with rtlg. eauto with rtlg.
+ rewrite LV; reflexivity.
+ intros. rewrite Regmap.gso. apply UNDEF. eauto with rtlg.
+ apply sym_not_equal. eauto with rtlg.
+Qed.
+
+Lemma match_set_locals:
+ forall map1 s1,
+ map_wf map1 s1 ->
+ forall il rl map2 s2 e le rs,
+ match_env map1 e le rs ->
+ (forall r, reg_fresh r s1 -> rs#r = Vundef) ->
+ add_vars map1 il s1 = OK (rl, map2) s2 ->
+ match_env map2 (set_locals il e) le rs.
+Proof.
+ induction il; simpl in *; intros.
+
+ monadInv H2. intros; subst map2; auto.
+
+ monadInv H2. intros. subst s0; subst y0.
+ assert (match_env y (set_locals il e) le rs).
+ eapply IHil; eauto.
+ monadInv EQ0. intro. subst s0; subst x0. rewrite <- H7.
+ constructor.
+ intros id v. simpl. repeat rewrite PTree.gsspec.
+ case (peq id a); intros.
+ exists r. split. auto. injection H5; intro; subst v.
+ apply H1. apply reg_fresh_decr with s.
+ eapply add_vars_incr; eauto.
+ eauto with rtlg.
+ eapply me_vars; eauto.
+ simpl. eapply me_letvars; eauto.
+Qed.
+
+Lemma match_init_env_init_reg:
+ forall params s0 rparams map1 s1 vars rvars map2 s2 vparams,
+ add_vars init_mapping params s0 = OK (rparams, map1) s1 ->
+ add_vars map1 vars s1 = OK (rvars, map2) s2 ->
+ match_env map2 (set_locals vars (set_params vparams params))
+ nil (init_regs vparams rparams).
+Proof.
+ intros.
+ generalize (match_set_params_init_regs _ _ _ _ _ vparams H).
+ intros [A B].
+ eapply match_set_locals; eauto.
+ eapply add_vars_wf; eauto. apply init_mapping_wf.
+Qed.
+
+(** * Monotonicity properties of the state for the translation functions *)
+
+(** We show that the translation functions modify the state monotonically
+ (in the sense of the [state_incr] relation). *)
+
+Lemma add_move_incr:
+ forall r1 r2 nd s ns s',
+ add_move r1 r2 nd s = OK ns s' ->
+ state_incr s s'.
+Proof.
+ intros until s'. unfold add_move.
+ case (Reg.eq r1 r2); intro.
+ monadSimpl. subst s'; auto with rtlg.
+ intro; eauto with rtlg.
+Qed.
+Hint Resolve add_move_incr: rtlg.
+
+Scheme expr_ind3 := Induction for expr Sort Prop
+ with condexpr_ind3 := Induction for condexpr Sort Prop
+ with exprlist_ind3 := Induction for exprlist Sort Prop.
+
+Lemma expr_condexpr_exprlist_ind:
+forall (P : expr -> Prop) (P0 : condexpr -> Prop)
+ (P1 : exprlist -> Prop),
+ (forall i : ident, P (Evar i)) ->
+ (forall (i : ident) (e : expr), P e -> P (Eassign i e)) ->
+ (forall (o : operation) (e : exprlist), P1 e -> P (Eop o e)) ->
+ (forall (m : memory_chunk) (a : addressing) (e : exprlist),
+ P1 e -> P (Eload m a e)) ->
+ (forall (m : memory_chunk) (a : addressing) (e : exprlist),
+ P1 e -> forall e0 : expr, P e0 -> P (Estore m a e e0)) ->
+ (forall (s : signature) (e : expr),
+ P e -> forall e0 : exprlist, P1 e0 -> P (Ecall s e e0)) ->
+ (forall c : condexpr,
+ P0 c ->
+ forall e : expr,
+ P e -> forall e0 : expr, P e0 -> P (Econdition c e e0)) ->
+ (forall e : expr, P e -> forall e0 : expr, P e0 -> P (Elet e e0)) ->
+ (forall n : nat, P (Eletvar n)) ->
+ P0 CEtrue ->
+ P0 CEfalse ->
+ (forall (c : condition) (e : exprlist), P1 e -> P0 (CEcond c e)) ->
+ (forall c : condexpr,
+ P0 c ->
+ forall c0 : condexpr,
+ P0 c0 -> forall c1 : condexpr, P0 c1 -> P0 (CEcondition c c0 c1)) ->
+ P1 Enil ->
+ (forall e : expr,
+ P e -> forall e0 : exprlist, P1 e0 -> P1 (Econs e e0)) ->
+ (forall e : expr, P e) /\
+ (forall ce : condexpr, P0 ce) /\
+ (forall el : exprlist, P1 el).
+Proof.
+ intros. split. apply (expr_ind3 P P0 P1); assumption.
+ split. apply (condexpr_ind3 P P0 P1); assumption.
+ apply (exprlist_ind3 P P0 P1); assumption.
+Qed.
+
+Definition transl_expr_incr_pred (a: expr) : Prop :=
+ forall map mut rd nd s ns s',
+ transl_expr map mut a rd nd s = OK ns s' -> state_incr s s'.
+Definition transl_condition_incr_pred (c: condexpr) : Prop :=
+ forall map mut ntrue nfalse s ns s',
+ transl_condition map mut c ntrue nfalse s = OK ns s' -> state_incr s s'.
+Definition transl_exprlist_incr_pred (al: exprlist) : Prop :=
+ forall map mut rl nd s ns s',
+ transl_exprlist map mut al rl nd s = OK ns s' -> state_incr s s'.
+
+Lemma transl_expr_condition_exprlist_incr:
+ (forall a, transl_expr_incr_pred a) /\
+ (forall c, transl_condition_incr_pred c) /\
+ (forall al, transl_exprlist_incr_pred al).
+Proof.
+ apply expr_condexpr_exprlist_ind;
+ unfold transl_expr_incr_pred,
+ transl_condition_incr_pred,
+ transl_exprlist_incr_pred;
+ simpl; intros;
+ try (monadInv H); try (monadInv H0);
+ try (monadInv H1); try (monadInv H2);
+ eauto 6 with rtlg.
+
+ intro EQ2.
+ apply state_incr_trans3 with s0 s1 s2; eauto with rtlg.
+
+ intro EQ4.
+ apply state_incr_trans4 with s1 s2 s3 s4; eauto with rtlg.
+
+ subst s'; auto with rtlg.
+ subst s'; auto with rtlg.
+ destruct rl; monadInv H. subst s'; auto with rtlg.
+ destruct rl; monadInv H1. eauto with rtlg.
+Qed.
+
+Lemma transl_expr_incr:
+ forall a map mut rd nd s ns s',
+ transl_expr map mut a rd nd s = OK ns s' -> state_incr s s'.
+Proof (proj1 transl_expr_condition_exprlist_incr).
+
+Lemma transl_condition_incr:
+ forall a map mut ntrue nfalse s ns s',
+ transl_condition map mut a ntrue nfalse s = OK ns s' -> state_incr s s'.
+Proof (proj1 (proj2 transl_expr_condition_exprlist_incr)).
+
+Lemma transl_exprlist_incr:
+ forall al map mut rl nd s ns s',
+ transl_exprlist map mut al rl nd s = OK ns s' -> state_incr s s'.
+Proof (proj2 (proj2 transl_expr_condition_exprlist_incr)).
+
+Hint Resolve transl_expr_incr transl_condition_incr transl_exprlist_incr: rtlg.
+
+Scheme stmt_ind2 := Induction for stmt Sort Prop
+ with stmtlist_ind2 := Induction for stmtlist Sort Prop.
+
+Lemma stmt_stmtlist_ind:
+forall (P : stmt -> Prop) (P0 : stmtlist -> Prop),
+ (forall e : expr, P (Sexpr e)) ->
+ (forall (c : condexpr) (s : stmtlist),
+ P0 s -> forall s0 : stmtlist, P0 s0 -> P (Sifthenelse c s s0)) ->
+ (forall s : stmtlist, P0 s -> P (Sloop s)) ->
+ (forall s : stmtlist, P0 s -> P (Sblock s)) ->
+ (forall n : nat, P (Sexit n)) ->
+ (forall o : option expr, P (Sreturn o)) ->
+ P0 Snil ->
+ (forall s : stmt,
+ P s -> forall s0 : stmtlist, P0 s0 -> P0 (Scons s s0)) ->
+ (forall s : stmt, P s) /\
+ (forall sl : stmtlist, P0 sl).
+Proof.
+ intros. split. apply (stmt_ind2 P P0); assumption.
+ apply (stmtlist_ind2 P P0); assumption.
+Qed.
+
+Definition transl_stmt_incr_pred (a: stmt) : Prop :=
+ forall map nd nexits nret rret s ns s',
+ transl_stmt map a nd nexits nret rret s = OK ns s' ->
+ state_incr s s'.
+Definition transl_stmtlist_incr_pred (al: stmtlist) : Prop :=
+ forall map nd nexits nret rret s ns s',
+ transl_stmtlist map al nd nexits nret rret s = OK ns s' ->
+ state_incr s s'.
+
+Lemma transl_stmt_stmtlist_incr:
+ (forall a, transl_stmt_incr_pred a) /\
+ (forall al, transl_stmtlist_incr_pred al).
+Proof.
+ apply stmt_stmtlist_ind;
+ unfold transl_stmt_incr_pred,
+ transl_stmtlist_incr_pred;
+ simpl; intros;
+ try (monadInv H); try (monadInv H0);
+ try (monadInv H1); try (monadInv H2);
+ eauto 6 with rtlg.
+
+ generalize H1. case (more_likely c s s0); monadSimpl; eauto 6 with rtlg.
+
+ subst s'. apply update_instr_incr with s1 s2 (Inop n0) n u;
+ eauto with rtlg.
+
+ generalize H; destruct (nth_error nexits n); monadSimpl.
+ subst s'; auto with rtlg.
+
+ generalize H. destruct o; destruct rret; try monadSimpl.
+ eauto with rtlg.
+ subst s'; auto with rtlg.
+ subst s'; auto with rtlg.
+Qed.
+
+Lemma transl_stmt_incr:
+ forall a map nd nexits nret rret s ns s',
+ transl_stmt map a nd nexits nret rret s = OK ns s' ->
+ state_incr s s'.
+Proof (proj1 transl_stmt_stmtlist_incr).
+
+Lemma transl_stmtlist_incr:
+ forall al map nd nexits nret rret s ns s',
+ transl_stmtlist map al nd nexits nret rret s = OK ns s' ->
+ state_incr s s'.
+Proof (proj2 transl_stmt_stmtlist_incr).
+
+Hint Resolve transl_stmt_incr transl_stmtlist_incr: rtlg.
+
diff --git a/backend/RTLtyping.v b/backend/RTLtyping.v
new file mode 100644
index 0000000..d15dbb8
--- /dev/null
+++ b/backend/RTLtyping.v
@@ -0,0 +1,1277 @@
+(** Typing rules and a type inference algorithm for RTL. *)
+
+Require Import Coqlib.
+Require Import Maps.
+Require Import AST.
+Require Import Op.
+Require Import Registers.
+Require Import RTL.
+Require Import union_find.
+
+(** * The type system *)
+
+(** Like Cminor and all intermediate languages, RTL can be equipped with
+ a simple type system that statically guarantees that operations
+ and addressing modes are applied to the right number of arguments
+ and that the arguments are of the correct types. The type algebra
+ is trivial, consisting of the two types [Tint] (for integers and pointers)
+ and [Tfloat] (for floats).
+
+ Additionally, we impose that each pseudo-register has the same type
+ throughout the function. This requirement helps with register allocation,
+ enabling each pseudo-register to be mapped to a single hardware register
+ or stack location of the correct type.
+
+
+ The typing judgement for instructions is of the form [wt_instr f env instr],
+ where [f] is the current function (used to type-check [Ireturn]
+ instructions) and [env] is a typing environment associating types to
+ pseudo-registers. Since pseudo-registers have unique types throughout
+ the function, the typing environment does not change during type-checking
+ of individual instructions. One point to note is that we have two
+ polymorphic operators, [Omove] and [Oundef], which can work both
+ over integers and floats.
+*)
+
+Definition regenv := reg -> typ.
+
+Section WT_INSTR.
+
+Variable env: regenv.
+Variable funct: function.
+
+Inductive wt_instr : instruction -> Prop :=
+ | wt_Inop:
+ forall s,
+ wt_instr (Inop s)
+ | wt_Iopmove:
+ forall r1 r s,
+ env r1 = env r ->
+ wt_instr (Iop Omove (r1 :: nil) r s)
+ | wt_Iopundef:
+ forall r s,
+ wt_instr (Iop Oundef nil r s)
+ | wt_Iop:
+ forall op args res s,
+ op <> Omove -> op <> Oundef ->
+ (List.map env args, env res) = type_of_operation op ->
+ wt_instr (Iop op args res s)
+ | wt_Iload:
+ forall chunk addr args dst s,
+ List.map env args = type_of_addressing addr ->
+ env dst = type_of_chunk chunk ->
+ wt_instr (Iload chunk addr args dst s)
+ | wt_Istore:
+ forall chunk addr args src s,
+ List.map env args = type_of_addressing addr ->
+ env src = type_of_chunk chunk ->
+ wt_instr (Istore chunk addr args src s)
+ | wt_Icall:
+ forall sig ros args res s,
+ match ros with inl r => env r = Tint | inr s => True end ->
+ List.map env args = sig.(sig_args) ->
+ env res = match sig.(sig_res) with None => Tint | Some ty => ty end ->
+ wt_instr (Icall sig ros args res s)
+ | wt_Icond:
+ forall cond args s1 s2,
+ List.map env args = type_of_condition cond ->
+ wt_instr (Icond cond args s1 s2)
+ | wt_Ireturn:
+ forall optres,
+ option_map env optres = funct.(fn_sig).(sig_res) ->
+ wt_instr (Ireturn optres).
+
+End WT_INSTR.
+
+(** A function [f] is well-typed w.r.t. a typing environment [env],
+ written [wt_function env f], if all instructions are well-typed,
+ parameters agree in types with the function signature, and
+ names of parameters are pairwise distinct. *)
+
+Record wt_function (env: regenv) (f: function) : Prop :=
+ mk_wt_function {
+ wt_params:
+ List.map env f.(fn_params) = f.(fn_sig).(sig_args);
+ wt_norepet:
+ list_norepet f.(fn_params);
+ wt_instrs:
+ forall pc instr, f.(fn_code)!pc = Some instr -> wt_instr env f instr
+ }.
+
+(** * Type inference *)
+
+(** There are several ways to ensure that RTL code is well-typed and
+ to obtain the typing environment (type assignment for pseudo-registers)
+ needed for register allocation. One is to start with well-typed Cminor
+ code and show type preservation for RTL generation and RTL optimizations.
+ Another is to start with untyped RTL and run a type inference algorithm
+ that reconstructs the typing environment, determining the type of
+ each pseudo-register from its uses in the code. We follow the second
+ approach.
+
+ The algorithm and its correctness proof in this section were
+ contributed by Damien Doligez. *)
+
+(** ** Type inference algorithm *)
+
+Set Implicit Arguments.
+
+(** Type inference for RTL is similar to that for simply-typed
+ lambda-calculus: we use type variables to represent the types
+ of registers that have not yet been determined to be [Tint] or [Tfloat]
+ based on their uses. We need exactly one type variable per pseudo-register,
+ therefore type variables can be conveniently equated with registers.
+ The type of a register during inference is therefore either
+ [tTy t] (with [t = Tint] or [t = Tfloat]) for a known type,
+ or [tReg r] to mean ``the same type as that of register [r]''. *)
+
+Inductive myT : Set :=
+ | tTy : typ -> myT
+ | tReg : reg -> myT.
+
+(** The algorithm proceeds by unification of the currently inferred
+ type for a pseudo-register with the type dictated by its uses.
+ Unification builds on a ``union-find'' data structure representing
+ equivalence classes of types (see module [Union_find]).
+*)
+
+Module myreg.
+ Definition T := myT.
+ Definition eq : forall (x y : T), {x=y}+{x<>y}.
+ Proof.
+ destruct x; destruct y; auto;
+ try (apply right; discriminate); try (apply left; discriminate).
+ destruct t; destruct t0;
+ try (apply right; congruence); try (apply left; congruence).
+ elim (peq r r0); intros.
+ rewrite a; apply left; apply refl_equal.
+ apply right; congruence.
+ Defined.
+End myreg.
+
+Module mymap.
+ Definition elt := myreg.T.
+ Definition encode (t : myreg.T) : positive :=
+ match t with
+ | tTy Tint => xH
+ | tTy Tfloat => xI xH
+ | tReg r => xO r
+ end.
+ Definition decode (p : positive) : elt :=
+ match p with
+ | xH => tTy Tint
+ | xI _ => tTy Tfloat
+ | xO r => tReg r
+ end.
+
+ Lemma encode_decode : forall x : myreg.T, decode (encode x) = x.
+ Proof.
+ destruct x; try destruct t; simpl; auto.
+ Qed.
+
+ Lemma encode_injective :
+ forall (x y : myreg.T), encode x = encode y -> x = y.
+ Proof.
+ intros.
+ unfold encode in H. destruct x; destruct y; try congruence;
+ try destruct t; try destruct t0; congruence.
+ Qed.
+
+ Definition T := PTree.t positive.
+ Definition empty := PTree.empty positive.
+ Definition get (adr : elt) (t : T) :=
+ option_map decode (PTree.get (encode adr) t).
+ Definition add (adr dat : elt) (t : T) :=
+ PTree.set (encode adr) (encode dat) t.
+
+ Theorem get_empty : forall (x : elt), get x empty = None.
+ Proof.
+ intro.
+ unfold get. unfold empty.
+ rewrite PTree.gempty.
+ simpl; auto.
+ Qed.
+ Theorem get_add_1 :
+ forall (x y : elt) (m : T), get x (add x y m) = Some y.
+ Proof.
+ intros.
+ unfold add. unfold get.
+ rewrite PTree.gss.
+ simpl; rewrite encode_decode; auto.
+ Qed.
+ Theorem get_add_2 :
+ forall (x y z : elt) (m : T), z <> x -> get z (add x y m) = get z m.
+ Proof.
+ intros.
+ unfold get. unfold add.
+ rewrite PTree.gso; auto.
+ intro. apply H. apply encode_injective. auto.
+ Qed.
+End mymap.
+
+Module Uf := Unionfind (myreg) (mymap).
+
+Definition error := Uf.identify Uf.empty (tTy Tint) (tTy Tfloat).
+
+Fixpoint fold2 (A B : Set) (f : Uf.T -> A -> B -> Uf.T)
+ (init : Uf.T) (la : list A) (lb : list B) {struct la}
+ : Uf.T :=
+ match la, lb with
+ | ha::ta, hb::tb => fold2 f (f init ha hb) ta tb
+ | nil, nil => init
+ | _, _ => error
+ end.
+
+Definition option_fold2 (A B : Set) (f : Uf.T -> A -> B -> Uf.T)
+ (init : Uf.T) (oa : option A) (ob : option B)
+ : Uf.T :=
+ match oa, ob with
+ | Some a, Some b => f init a b
+ | None, None => init
+ | _, _ => error
+ end.
+
+Definition teq (ty1 ty2 : typ) : bool :=
+ match ty1, ty2 with
+ | Tint, Tint => true
+ | Tfloat, Tfloat => true
+ | _, _ => false
+ end.
+
+Definition type_rtl_arg (u : Uf.T) (r : reg) (t : typ) :=
+ Uf.identify u (tReg r) (tTy t).
+
+Definition type_rtl_ros (u : Uf.T) (ros : reg+ident) :=
+ match ros with
+ | inl r => Uf.identify u (tReg r) (tTy Tint)
+ | inr s => u
+ end.
+
+Definition type_of_sig_res (sig : signature) :=
+ match sig.(sig_res) with None => Tint | Some ty => ty end.
+
+(** This is the core type inference function. The [u] argument is
+ the current substitution / equivalence classes between types.
+ An updated set of equivalence classes, reflecting unifications
+ possibly performed during the type-checking of [i], is returned.
+ Note that [type_rtl_instr] never fails explicitly. However,
+ in case of type error (e.g. applying the [Oadd] integer operation
+ to float registers), the equivalence relation returned will
+ put [tTy Tint] and [tTy Tfloat] in the same equivalence class.
+ This fact will propagate through type inference for other instructions,
+ and be detected at the end of type inference, indicating a typing failure.
+*)
+
+Definition type_rtl_instr (rtyp : option typ)
+ (u : Uf.T) (_ : positive) (i : instruction) :=
+ match i with
+ | Inop _ => u
+ | Iop Omove (r1 :: nil) r0 _ => Uf.identify u (tReg r0) (tReg r1)
+ | Iop Omove _ _ _ => error
+ | Iop Oundef nil _ _ => u
+ | Iop Oundef _ _ _ => error
+ | Iop op args r0 _ =>
+ let (argtyp, restyp) := type_of_operation op in
+ let u1 := type_rtl_arg u r0 restyp in
+ fold2 type_rtl_arg u1 args argtyp
+ | Iload chunk addr args r0 _ =>
+ let u1 := type_rtl_arg u r0 (type_of_chunk chunk) in
+ fold2 type_rtl_arg u1 args (type_of_addressing addr)
+ | Istore chunk addr args r0 _ =>
+ let u1 := type_rtl_arg u r0 (type_of_chunk chunk) in
+ fold2 type_rtl_arg u1 args (type_of_addressing addr)
+ | Icall sign ros args r0 _ =>
+ let u1 := type_rtl_ros u ros in
+ let u2 := type_rtl_arg u1 r0 (type_of_sig_res sign) in
+ fold2 type_rtl_arg u2 args sign.(sig_args)
+ | Icond cond args _ _ =>
+ fold2 type_rtl_arg u args (type_of_condition cond)
+ | Ireturn o => option_fold2 type_rtl_arg u o rtyp
+ end.
+
+Definition mk_env (u : Uf.T) (r : reg) :=
+ if myreg.eq (Uf.repr u (tReg r)) (Uf.repr u (tTy Tfloat))
+ then Tfloat
+ else Tint.
+
+Fixpoint member (x : reg) (l : list reg) {struct l} : bool :=
+ match l with
+ | nil => false
+ | y :: rest => if peq x y then true else member x rest
+ end.
+
+Fixpoint repet (l : list reg) : bool :=
+ match l with
+ | nil => false
+ | x :: rest => member x rest || repet rest
+ end.
+
+Definition type_rtl_function (f : function) :=
+ let u1 := PTree.fold (type_rtl_instr f.(fn_sig).(sig_res))
+ f.(fn_code) Uf.empty in
+ let u2 := fold2 type_rtl_arg u1 f.(fn_params) f.(fn_sig).(sig_args) in
+ if repet f.(fn_params) then
+ None
+ else
+ if myreg.eq (Uf.repr u2 (tTy Tint)) (Uf.repr u2 (tTy Tfloat))
+ then None
+ else Some (mk_env u2).
+
+Unset Implicit Arguments.
+
+(** ** Correctness proof for type inference *)
+
+(** General properties of the type equivalence relation. *)
+
+Definition consistent (u : Uf.T) :=
+ Uf.repr u (tTy Tint) <> Uf.repr u (tTy Tfloat).
+
+Lemma consistent_not_eq : forall (u : Uf.T) (A : Type) (x y : A),
+ consistent u ->
+ (if myreg.eq (Uf.repr u (tTy Tint)) (Uf.repr u (tTy Tfloat)) then x else y)
+ = y.
+ Proof.
+ intros.
+ unfold consistent in H.
+ destruct (myreg.eq (Uf.repr u (tTy Tint)) (Uf.repr u (tTy Tfloat)));
+ congruence.
+ Qed.
+
+Lemma equal_eq : forall (t : myT) (A : Type) (x y : A),
+ (if myreg.eq t t then x else y) = x.
+ Proof.
+ intros.
+ destruct (myreg.eq t t); congruence.
+ Qed.
+
+Lemma error_inconsistent : forall (A : Prop), consistent error -> A.
+ Proof.
+ intros.
+ absurd (consistent error); auto.
+ intro.
+ unfold error in H. unfold consistent in H.
+ rewrite Uf.sameclass_identify_1 in H.
+ congruence.
+ Qed.
+
+Lemma teq_correct : forall (t1 t2 : typ), teq t1 t2 = true -> t1 = t2.
+ Proof.
+ intros; destruct t1; destruct t2; try simpl in H; congruence.
+ Qed.
+
+Definition included (u1 u2 : Uf.T) : Prop :=
+ forall (e1 e2: myT),
+ Uf.repr u1 e1 = Uf.repr u1 e2 -> Uf.repr u2 e1 = Uf.repr u2 e2.
+
+Lemma included_refl :
+ forall (e : Uf.T), included e e.
+ Proof.
+ unfold included. auto.
+ Qed.
+
+Lemma included_trans :
+ forall (e1 e2 e3 : Uf.T),
+ included e3 e2 -> included e2 e1 -> included e3 e1.
+ Proof.
+ unfold included. auto.
+ Qed.
+
+Lemma included_consistent :
+ forall (u1 u2 : Uf.T),
+ included u1 u2 -> consistent u2 -> consistent u1.
+ Proof.
+ unfold consistent. unfold included.
+ intros.
+ intro. apply H0. apply H.
+ auto.
+ Qed.
+
+Lemma included_identify :
+ forall (u : Uf.T) (t1 t2 : myT), included u (Uf.identify u t1 t2).
+ Proof.
+ unfold included.
+ intros.
+ apply Uf.sameclass_identify_2; auto.
+ Qed.
+
+Lemma type_arg_correct_1 :
+ forall (u : Uf.T) (r : reg) (t : typ),
+ consistent (type_rtl_arg u r t)
+ -> Uf.repr (type_rtl_arg u r t) (tReg r)
+ = Uf.repr (type_rtl_arg u r t) (tTy t).
+ Proof.
+ intros.
+ unfold type_rtl_arg.
+ rewrite Uf.sameclass_identify_1.
+ auto.
+ Qed.
+
+Lemma type_arg_correct :
+ forall (u : Uf.T) (r : reg) (t : typ),
+ consistent (type_rtl_arg u r t) -> mk_env (type_rtl_arg u r t) r = t.
+ Proof.
+ intros.
+ unfold mk_env.
+ rewrite type_arg_correct_1.
+ destruct t.
+ apply consistent_not_eq; auto.
+ destruct (myreg.eq (Uf.repr (type_rtl_arg u r Tfloat) (tTy Tfloat)));
+ congruence.
+ auto.
+ Qed.
+
+Lemma type_arg_included :
+ forall (u : Uf.T) (r : reg) (t : typ), included u (type_rtl_arg u r t).
+ Proof.
+ intros.
+ unfold type_rtl_arg.
+ apply included_identify.
+ Qed.
+
+Lemma type_arg_extends :
+ forall (u : Uf.T) (r : reg) (t : typ),
+ consistent (type_rtl_arg u r t) -> consistent u.
+ Proof.
+ intros.
+ apply included_consistent with (u2 := type_rtl_arg u r t).
+ apply type_arg_included.
+ auto.
+ Qed.
+
+Lemma type_args_included :
+ forall (l1 : list reg) (l2 : list typ) (u : Uf.T),
+ consistent (fold2 type_rtl_arg u l1 l2)
+ -> included u (fold2 type_rtl_arg u l1 l2).
+ Proof.
+ induction l1; intros; destruct l2.
+ simpl in H; simpl; apply included_refl.
+ simpl in H. apply error_inconsistent. auto.
+ simpl in H. apply error_inconsistent. auto.
+ simpl.
+ simpl in H.
+ apply included_trans with (e2 := type_rtl_arg u a t).
+ apply type_arg_included.
+ apply IHl1.
+ auto.
+ Qed.
+
+Lemma type_args_extends :
+ forall (l1 : list reg) (l2 : list typ) (u : Uf.T),
+ consistent (fold2 type_rtl_arg u l1 l2) -> consistent u.
+ Proof.
+ intros.
+ apply (included_consistent _ _ (type_args_included l1 l2 u H)).
+ auto.
+ Qed.
+
+Lemma type_args_correct :
+ forall (l1 : list reg) (l2 : list typ) (u : Uf.T),
+ consistent (fold2 type_rtl_arg u l1 l2)
+ -> map (mk_env (fold2 type_rtl_arg u l1 l2)) l1 = l2.
+ Proof.
+ induction l1.
+ intros.
+ destruct l2.
+ unfold map; simpl; auto.
+ simpl in H; apply error_inconsistent; auto.
+ intros.
+ destruct l2.
+ simpl in H; apply error_inconsistent; auto.
+ simpl.
+ simpl in H.
+ rewrite (IHl1 l2 (type_rtl_arg u a t) H).
+ unfold mk_env.
+ destruct t.
+ rewrite (type_args_included _ _ _ H (tReg a) (tTy Tint)).
+ rewrite consistent_not_eq; auto.
+ apply type_arg_correct_1.
+ apply type_args_extends with (l1 := l1) (l2 := l2); auto.
+ rewrite (type_args_included _ _ _ H (tReg a) (tTy Tfloat)).
+ rewrite equal_eq; auto.
+ apply type_arg_correct_1.
+ apply type_args_extends with (l1 := l1) (l2 := l2); auto.
+ Qed.
+
+(** Correctness of [wt_params]. *)
+
+Lemma type_rtl_function_params :
+ forall (f: function) (env: regenv),
+ type_rtl_function f = Some env
+ -> List.map env f.(fn_params) = f.(fn_sig).(sig_args).
+ Proof.
+ destruct f; unfold type_rtl_function; simpl.
+ destruct (repet fn_params); simpl; intros; try congruence.
+ pose (u := PTree.fold (type_rtl_instr (sig_res fn_sig)) fn_code Uf.empty).
+ fold u in H.
+ cut (consistent (fold2 type_rtl_arg u fn_params (sig_args fn_sig))).
+ intro.
+ pose (R := Uf.repr (fold2 type_rtl_arg u fn_params (sig_args fn_sig))).
+ fold R in H.
+ destruct (myreg.eq (R (tTy Tint)) (R (tTy Tfloat))).
+ congruence.
+ injection H.
+ intro.
+ rewrite <- H1.
+ apply type_args_correct.
+ auto.
+ intro.
+ rewrite H0 in H.
+ rewrite equal_eq in H.
+ congruence.
+ Qed.
+
+(** Correctness of [wt_norepet]. *)
+
+Lemma member_correct :
+ forall (l : list reg) (a : reg), member a l = false -> ~In a l.
+ Proof.
+ induction l; simpl; intros; try tauto.
+ destruct (peq a0 a); simpl; try congruence.
+ intro. destruct H0; try congruence.
+ generalize H0; apply IHl; auto.
+ Qed.
+
+Lemma repet_correct :
+ forall (l : list reg), repet l = false -> list_norepet l.
+ Proof.
+ induction l; simpl; intros.
+ exact (list_norepet_nil reg).
+ elim (orb_false_elim (member a l) (repet l) H); intros.
+ apply list_norepet_cons.
+ apply member_correct; auto.
+ apply IHl; auto.
+ Qed.
+
+Lemma type_rtl_function_norepet :
+ forall (f: function) (env: regenv),
+ type_rtl_function f = Some env
+ -> list_norepet f.(fn_params).
+ Proof.
+ destruct f; unfold type_rtl_function; simpl.
+ intros. cut (repet fn_params = false).
+ intro. apply repet_correct. auto.
+ destruct (repet fn_params); congruence.
+ Qed.
+
+(** Correctness of [wt_instrs]. *)
+
+Lemma step1 :
+ forall (f : function) (env : regenv),
+ type_rtl_function f = Some env
+ -> exists u2 : Uf.T,
+ included (PTree.fold (type_rtl_instr f.(fn_sig).(sig_res))
+ f.(fn_code) Uf.empty)
+ u2
+ /\ env = mk_env u2
+ /\ consistent u2.
+ Proof.
+ intros f env.
+ pose (u1 := (PTree.fold (type_rtl_instr f.(fn_sig).(sig_res))
+ f.(fn_code) Uf.empty)).
+ fold u1.
+ unfold type_rtl_function.
+ intros.
+ destruct (repet f.(fn_params)).
+ congruence.
+ fold u1 in H.
+ pose (u2 := (fold2 type_rtl_arg u1 f.(fn_params) f.(fn_sig).(sig_args))).
+ fold u2 in H.
+ exists u2.
+ caseEq (myreg.eq (Uf.repr u2 (tTy Tint)) (Uf.repr u2 (tTy Tfloat))).
+ intros.
+ rewrite e in H.
+ rewrite equal_eq in H.
+ congruence.
+ intros.
+ rewrite consistent_not_eq in H.
+ apply conj.
+ unfold u2.
+ apply type_args_included.
+ auto.
+ apply conj; auto.
+ congruence.
+ auto.
+ Qed.
+
+Lemma let_fold_args_res :
+ forall (u : Uf.T) (l : list reg) (r : reg) (e : list typ * typ),
+ (let (argtyp, restyp) := e in
+ fold2 type_rtl_arg (type_rtl_arg u r restyp) l argtyp)
+ = fold2 type_rtl_arg (type_rtl_arg u r (snd e)) l (fst e).
+ Proof.
+ intros. rewrite (surjective_pairing e). simpl. auto.
+ Qed.
+
+Lemma type_args_res_included :
+ forall (l1 : list reg) (l2 : list typ) (u : Uf.T) (r : reg) (t : typ),
+ consistent (fold2 type_rtl_arg (type_rtl_arg u r t) l1 l2)
+ -> included u (fold2 type_rtl_arg (type_rtl_arg u r t) l1 l2).
+ Proof.
+ intros.
+ apply included_trans with (e2 := type_rtl_arg u r t).
+ apply type_arg_included.
+ apply type_args_included; auto.
+ Qed.
+
+Lemma type_args_res_ros_included :
+ forall (l1 : list reg) (l2 : list typ) (u : Uf.T) (r : reg) (t : typ)
+ (ros : reg+ident),
+ consistent (fold2 type_rtl_arg (type_rtl_arg (type_rtl_ros u ros) r t) l1 l2)
+ -> included u (fold2 type_rtl_arg (type_rtl_arg (type_rtl_ros u ros) r t) l1 l2).
+Proof.
+ intros.
+ apply included_trans with (e2 := type_rtl_ros u ros).
+ unfold type_rtl_ros; destruct ros.
+ apply included_identify.
+ apply included_refl.
+ apply type_args_res_included; auto.
+Qed.
+
+Lemma type_instr_included :
+ forall (p : positive) (i : instruction) (u : Uf.T) (res_ty : option typ),
+ consistent (type_rtl_instr res_ty u p i)
+ -> included u (type_rtl_instr res_ty u p i).
+ Proof.
+ intros.
+ destruct i; simpl; simpl in H; try apply type_args_res_included; auto.
+ apply included_refl; auto.
+ destruct o; simpl; simpl in H; try apply type_args_res_included; auto.
+ destruct l; simpl; simpl in H; auto.
+ apply error_inconsistent; auto.
+ destruct l; simpl; simpl in H; auto.
+ apply included_identify.
+ apply error_inconsistent; auto.
+ destruct l; simpl; simpl in H; auto.
+ apply included_refl.
+ apply error_inconsistent; auto.
+ apply type_args_res_ros_included; auto.
+ apply type_args_included; auto.
+ destruct res_ty; destruct o; simpl; simpl in H;
+ try (apply error_inconsistent; auto; fail).
+ apply type_arg_included.
+ apply included_refl.
+ Qed.
+
+Lemma type_instrs_extends :
+ forall (l : list (positive * instruction)) (u : Uf.T) (res_ty : option typ),
+ consistent
+ (fold_left (fun v p => type_rtl_instr res_ty v (fst p) (snd p)) l u)
+ -> consistent u.
+Proof.
+ induction l; simpl; intros.
+ auto.
+ apply included_consistent
+ with (u2 := (type_rtl_instr res_ty u (fst a) (snd a))).
+ apply type_instr_included.
+ apply IHl with (res_ty := res_ty); auto.
+ apply IHl with (res_ty := res_ty); auto.
+Qed.
+
+Lemma type_instrs_included :
+ forall (l : list (positive * instruction)) (u : Uf.T) (res_ty : option typ),
+ consistent
+ (fold_left (fun v p => type_rtl_instr res_ty v (fst p) (snd p)) l u)
+ -> included u
+ (fold_left (fun v p => type_rtl_instr res_ty v (fst p) (snd p)) l u).
+ Proof.
+ induction l; simpl; intros.
+ apply included_refl; auto.
+ apply included_trans with (e2 := (type_rtl_instr res_ty u (fst a) (snd a))).
+ apply type_instr_included.
+ apply type_instrs_extends with (res_ty := res_ty) (l := l); auto.
+ apply IHl; auto.
+ Qed.
+
+Lemma step2 :
+ forall (res_ty : option typ) (c : code) (u0 : Uf.T),
+ consistent (PTree.fold (type_rtl_instr res_ty) c u0) ->
+ forall (pc : positive) (i : instruction),
+ c!pc = Some i
+ -> exists u : Uf.T,
+ consistent (type_rtl_instr res_ty u pc i)
+ /\ included (type_rtl_instr res_ty u pc i)
+ (PTree.fold (type_rtl_instr res_ty) c u0).
+ Proof.
+ intros.
+ rewrite PTree.fold_spec.
+ rewrite PTree.fold_spec in H.
+ pose (H1 := PTree.elements_correct _ _ H0).
+ generalize H. clear H.
+ generalize u0. clear u0.
+ generalize H1. clear H1.
+ induction (PTree.elements c).
+ intros.
+ absurd (In (pc, i) nil).
+ apply in_nil.
+ auto.
+ intros.
+ simpl in H.
+ elim H1.
+ intro.
+ rewrite H2 in H.
+ simpl in H.
+ rewrite H2. simpl.
+ exists u0.
+ apply conj.
+ apply type_instrs_extends with (res_ty := res_ty) (l := l).
+ auto.
+ apply type_instrs_included.
+ auto.
+ intro.
+ simpl.
+ apply IHl.
+ auto.
+ auto.
+ Qed.
+
+Definition mapped (u : Uf.T) (r : reg) :=
+ Uf.repr u (tReg r) = Uf.repr u (tTy Tfloat)
+ \/ Uf.repr u (tReg r) = Uf.repr u (tTy Tint).
+
+Definition definite (u : Uf.T) (i : instruction) :=
+ match i with
+ | Inop _ => True
+ | Iop Omove (r1 :: nil) r0 _ => Uf.repr u (tReg r1) = Uf.repr u (tReg r0)
+ | Iop Oundef _ _ _ => True
+ | Iop _ args r0 _ =>
+ mapped u r0 /\ forall r : reg, In r args -> mapped u r
+ | Iload _ _ args r0 _ =>
+ mapped u r0 /\ forall r : reg, In r args -> mapped u r
+ | Istore _ _ args r0 _ =>
+ mapped u r0 /\ forall r : reg, In r args -> mapped u r
+ | Icall _ ros args r0 _ =>
+ match ros with inl r => mapped u r | _ => True end
+ /\ mapped u r0 /\ forall r : reg, In r args -> mapped u r
+ | Icond _ args _ _ =>
+ forall r : reg, In r args -> mapped u r
+ | Ireturn None => True
+ | Ireturn (Some r) => mapped u r
+ end.
+
+Lemma type_arg_complete :
+ forall (u : Uf.T) (r : reg) (t : typ),
+ mapped (type_rtl_arg u r t) r.
+Proof.
+ intros.
+ unfold type_rtl_arg.
+ unfold mapped.
+ destruct t.
+ right; apply Uf.sameclass_identify_1.
+ left; apply Uf.sameclass_identify_1.
+Qed.
+
+Lemma type_arg_mapped :
+ forall (u : Uf.T) (r r0 : reg) (t : typ),
+ mapped u r0 -> mapped (type_rtl_arg u r t) r0.
+Proof.
+ unfold mapped.
+ unfold type_rtl_arg.
+ intros.
+ elim H; intros.
+ left; apply Uf.sameclass_identify_2; auto.
+ right; apply Uf.sameclass_identify_2; auto.
+Qed.
+
+Lemma type_args_mapped :
+ forall (lr : list reg) (lt : list typ) (u : Uf.T) (r : reg),
+ consistent (fold2 type_rtl_arg u lr lt) ->
+ mapped u r ->
+ mapped (fold2 type_rtl_arg u lr lt) r.
+Proof.
+ induction lr; simpl; intros.
+ destruct lt; simpl; auto; try (apply error_inconsistent; auto; fail).
+ destruct lt; simpl; auto; try (apply error_inconsistent; auto; fail).
+ apply IHlr.
+ auto.
+ apply type_arg_mapped; auto.
+Qed.
+
+Lemma type_args_complete :
+ forall (lr : list reg) (lt : list typ) (u : Uf.T),
+ consistent (fold2 type_rtl_arg u lr lt)
+ -> forall r, (In r lr -> mapped (fold2 type_rtl_arg u lr lt) r).
+Proof.
+ induction lr; simpl; intros.
+ destruct lt; simpl; try tauto.
+ destruct lt; simpl.
+ apply error_inconsistent; auto.
+ elim H0; intros.
+ rewrite H1.
+ rewrite H1 in H.
+ apply type_args_mapped; auto.
+ apply type_arg_complete.
+ apply IHlr; auto.
+Qed.
+
+Lemma type_res_complete :
+ forall (u : Uf.T) (lr : list reg) (lt : list typ) (r : reg) (t : typ),
+ consistent (fold2 type_rtl_arg (type_rtl_arg u r t) lr lt)
+ -> mapped (fold2 type_rtl_arg (type_rtl_arg u r t) lr lt) r.
+Proof.
+ intros.
+ apply type_args_mapped; auto.
+ apply type_arg_complete.
+Qed.
+
+Lemma type_args_res_complete :
+ forall (u : Uf.T) (lr : list reg) (lt : list typ) (r : reg) (t : typ),
+ consistent (fold2 type_rtl_arg (type_rtl_arg u r t) lr lt)
+ -> mapped (fold2 type_rtl_arg (type_rtl_arg u r t) lr lt) r
+ /\ forall rr, (In rr lr -> mapped (fold2 type_rtl_arg (type_rtl_arg u r t)
+ lr lt)
+ rr).
+Proof.
+ intros.
+ apply conj.
+ apply type_res_complete; auto.
+ apply type_args_complete; auto.
+Qed.
+
+Lemma type_ros_complete :
+ forall (u : Uf.T) (lr : list reg) (lt : list typ) (r r1 : reg) (t : typ),
+ consistent (fold2 type_rtl_arg (type_rtl_arg
+ (type_rtl_ros u (inl ident r1)) r t) lr lt)
+ ->
+ mapped (fold2 type_rtl_arg (type_rtl_arg
+ (type_rtl_ros u (inl ident r1)) r t) lr lt) r1.
+Proof.
+ intros.
+ apply type_args_mapped; auto.
+ apply type_arg_mapped.
+ unfold type_rtl_ros.
+ unfold mapped.
+ right.
+ apply Uf.sameclass_identify_1; auto.
+Qed.
+
+Lemma type_res_correct :
+ forall (u : Uf.T) (lr : list reg) (lt : list typ) (r : reg) (t : typ),
+ consistent (fold2 type_rtl_arg (type_rtl_arg u r t) lr lt)
+ -> mk_env (fold2 type_rtl_arg (type_rtl_arg u r t) lr lt) r = t.
+Proof.
+ intros.
+ unfold mk_env.
+ rewrite (type_args_included _ _ _ H (tReg r) (tTy t)).
+ destruct t.
+ apply consistent_not_eq; auto.
+ apply equal_eq; auto.
+ unfold type_rtl_arg; apply Uf.sameclass_identify_1; auto.
+Qed.
+
+Lemma type_ros_correct :
+ forall (u : Uf.T) (lr : list reg) (lt : list typ) (r r1 : reg) (t : typ),
+ consistent (fold2 type_rtl_arg (type_rtl_arg
+ (type_rtl_ros u (inl ident r1)) r t) lr lt)
+ ->
+ mk_env (fold2 type_rtl_arg (type_rtl_arg
+ (type_rtl_ros u (inl ident r1)) r t) lr lt) r1
+ = Tint.
+Proof.
+ intros.
+ unfold mk_env.
+ rewrite (type_args_included _ _ _ H (tReg r1) (tTy Tint)).
+ apply consistent_not_eq; auto.
+ rewrite (type_arg_included (type_rtl_ros u (inl ident r1)) r t (tReg r1) (tTy Tint)).
+ auto.
+ simpl.
+ apply Uf.sameclass_identify_1; auto.
+Qed.
+
+Lemma step3 :
+ forall (u : Uf.T) (f : function) (c : code) (i : instruction) (pc : positive),
+ c!pc = Some i ->
+ consistent (type_rtl_instr f.(fn_sig).(sig_res) u pc i)
+ -> wt_instr (mk_env (type_rtl_instr f.(fn_sig).(sig_res) u pc i)) f i
+ /\ definite (type_rtl_instr f.(fn_sig).(sig_res) u pc i) i.
+ Proof.
+ Opaque type_rtl_arg.
+ intros.
+ destruct i; simpl in H0; simpl.
+ (* Inop *)
+ apply conj; auto. apply wt_Inop.
+ (* Iop *)
+ destruct o;
+ try (apply conj; [
+ apply wt_Iop; try congruence; simpl;
+ rewrite (type_args_correct _ _ _ H0);
+ rewrite (type_res_correct _ _ _ _ _ H0);
+ auto
+ |apply (type_args_res_complete _ _ _ _ _ H0)]).
+ (* Omove *)
+ destruct l; [apply error_inconsistent; auto | idtac].
+ destruct l; [idtac | apply error_inconsistent; auto].
+ apply conj.
+ apply wt_Iopmove.
+ simpl.
+ unfold mk_env.
+ rewrite Uf.sameclass_identify_1.
+ congruence.
+ simpl.
+ rewrite Uf.sameclass_identify_1; congruence.
+ (* Oundef *)
+ destruct l; [idtac | apply error_inconsistent; auto].
+ apply conj. apply wt_Iopundef.
+ unfold definite. auto.
+ (* Iload *)
+ apply conj.
+ apply wt_Iload.
+ rewrite (type_args_correct _ _ _ H0); auto.
+ rewrite (type_res_correct _ _ _ _ _ H0); auto.
+ simpl; apply (type_args_res_complete _ _ _ _ _ H0).
+ (* IStore *)
+ apply conj.
+ apply wt_Istore.
+ rewrite (type_args_correct _ _ _ H0); auto.
+ rewrite (type_res_correct _ _ _ _ _ H0); auto.
+ simpl; apply (type_args_res_complete _ _ _ _ _ H0).
+ (* Icall *)
+ apply conj.
+ apply wt_Icall.
+ destruct s0; auto. apply type_ros_correct. auto.
+ apply type_args_correct. auto.
+ fold (type_of_sig_res s). apply type_res_correct. auto.
+ destruct s0.
+ apply conj.
+ apply type_ros_complete. auto.
+ apply type_args_res_complete. auto.
+ apply conj; auto.
+ apply type_args_res_complete. auto.
+ (* Icond *)
+ apply conj.
+ apply wt_Icond.
+ apply (type_args_correct _ _ _ H0).
+ simpl; apply (type_args_complete _ _ _ H0).
+ (* Ireturn *)
+ destruct o; simpl.
+ apply conj.
+ apply wt_Ireturn.
+ destruct f.(fn_sig).(sig_res); simpl; simpl in H0.
+ rewrite type_arg_correct; auto.
+ apply error_inconsistent; auto.
+ destruct f.(fn_sig).(sig_res); simpl; simpl in H0.
+ apply type_arg_complete.
+ apply error_inconsistent; auto.
+ apply conj; auto. apply wt_Ireturn.
+ destruct f.(fn_sig).(sig_res); simpl; simpl in H0.
+ apply error_inconsistent; auto.
+ congruence.
+ Transparent type_rtl_arg.
+ Qed.
+
+Lemma mapped_included_consistent :
+ forall (u1 u2 : Uf.T) (r : reg),
+ mapped u1 r ->
+ included u1 u2 ->
+ consistent u2 ->
+ mk_env u2 r = mk_env u1 r.
+Proof.
+ intros.
+ unfold mk_env.
+ unfold mapped in H.
+ elim H; intros; rewrite H2; rewrite (H0 _ _ H2).
+ rewrite equal_eq; rewrite equal_eq; auto.
+ rewrite (consistent_not_eq u2).
+ rewrite (consistent_not_eq u1).
+ auto.
+ apply included_consistent with (u2 := u2).
+ auto.
+ auto.
+ auto.
+Qed.
+
+Lemma mapped_list_included :
+ forall (u1 u2 : Uf.T) (lr : list reg),
+ (forall r, In r lr -> mapped u1 r) ->
+ included u1 u2 ->
+ consistent u2 ->
+ map (mk_env u2) lr = map (mk_env u1) lr.
+Proof.
+ induction lr; simpl; intros.
+ auto.
+ rewrite (mapped_included_consistent u1 u2 a).
+ rewrite IHlr; auto.
+ apply (H a); intros.
+ left; auto.
+ auto.
+ auto.
+Qed.
+
+Lemma included_mapped :
+ forall (u1 u2 : Uf.T) (r : reg),
+ included u1 u2 ->
+ mapped u1 r ->
+ mapped u2 r.
+Proof.
+ unfold mapped.
+ intros.
+ elim H0; intros.
+ left; rewrite (H _ _ H1); auto.
+ right; rewrite (H _ _ H1); auto.
+Qed.
+
+Lemma included_mapped_forall :
+ forall (u1 u2 : Uf.T) (r : reg) (l : list reg),
+ included u1 u2 ->
+ mapped u1 r /\ (forall r, In r l -> mapped u1 r) ->
+ mapped u2 r /\ (forall r, In r l -> mapped u2 r).
+Proof.
+ intros.
+ elim H0; intros.
+ apply conj.
+ apply (included_mapped _ _ r H); auto.
+ intros.
+ apply (included_mapped _ _ r0 H).
+ apply H2; auto.
+Qed.
+
+Lemma definite_included :
+ forall (u1 u2 : Uf.T) (i : instruction),
+ included u1 u2 -> definite u1 i -> definite u2 i.
+Proof.
+ unfold definite.
+ intros.
+ destruct i; try apply (included_mapped_forall _ _ _ _ H H0); auto.
+ destruct o; try apply (included_mapped_forall _ _ _ _ H H0); auto.
+ destruct l; auto.
+ apply (included_mapped_forall _ _ _ _ H H0).
+ destruct l; auto.
+ apply (included_mapped_forall _ _ _ _ H H0).
+ destruct s0; auto.
+ elim H0; intros.
+ apply conj.
+ apply (included_mapped _ _ _ H H1).
+ apply (included_mapped_forall _ _ _ _ H H2).
+ elim H0; intros.
+ apply conj; auto.
+ apply (included_mapped_forall _ _ _ _ H H2).
+ intros.
+ apply (included_mapped _ _ _ H (H0 r H1)).
+ destruct o; auto.
+ apply (included_mapped _ _ _ H H0).
+Qed.
+
+Lemma step4 :
+ forall (f : function) (u1 u3 : Uf.T) (i : instruction),
+ included u3 u1 ->
+ wt_instr (mk_env u3) f i ->
+ definite u3 i ->
+ consistent u1 ->
+ wt_instr (mk_env u1) f i.
+ Proof.
+ intros f u1 u3 i H1 H H0 X.
+ destruct H; try simpl in H0; try (elim H0; intros).
+ apply wt_Inop.
+ apply wt_Iopmove. unfold mk_env. rewrite (H1 _ _ H0). auto.
+ apply wt_Iopundef.
+ apply wt_Iop; auto.
+ destruct op; try congruence; simpl; simpl in H3;
+ simpl in H0; elim H0; intros; rewrite (mapped_included_consistent _ _ _ H4 H1 X);
+ rewrite (mapped_list_included _ _ _ H5 H1); auto.
+ apply wt_Iload.
+ rewrite (mapped_list_included _ _ _ H4 H1); auto.
+ rewrite (mapped_included_consistent _ _ _ H3 H1 X). auto.
+ apply wt_Istore.
+ rewrite (mapped_list_included _ _ _ H4 H1); auto.
+ rewrite (mapped_included_consistent _ _ _ H3 H1 X). auto.
+ elim H5; intros; destruct ros; apply wt_Icall.
+ rewrite (mapped_included_consistent _ _ _ H4 H1 X); auto.
+ rewrite (mapped_list_included _ _ _ H7 H1); auto.
+ rewrite (mapped_included_consistent _ _ _ H6 H1 X); auto.
+ auto.
+ rewrite (mapped_list_included _ _ _ H7 H1); auto.
+ rewrite (mapped_included_consistent _ _ _ H6 H1 X); auto.
+ apply wt_Icond. rewrite (mapped_list_included _ _ _ H0 H1); auto.
+ apply wt_Ireturn.
+ destruct optres; destruct f.(fn_sig).(sig_res);
+ simpl in H; simpl; try congruence.
+ rewrite (mapped_included_consistent _ _ _ H0 H1 X); auto.
+ Qed.
+
+Lemma type_rtl_function_instrs :
+ forall (f: function) (env: regenv),
+ type_rtl_function f = Some env
+ -> forall pc i, f.(fn_code)!pc = Some i -> wt_instr env f i.
+ Proof.
+ intros.
+ elim (step1 _ _ H).
+ intros.
+ elim H1.
+ intros.
+ elim H3.
+ intros.
+ rewrite H4.
+ elim (step2 _ _ _ (included_consistent _ _ H2 H5) _ _ H0).
+ intros.
+ elim H6. intros.
+ elim (step3 x0 f _ _ _ H0); auto. intros.
+ apply (step4 f _ _ i H2); auto.
+ apply (step4 _ _ _ _ H8 H9 H10).
+ apply (included_consistent _ _ H2); auto.
+ apply (definite_included _ _ _ H8 H10); auto.
+ Qed.
+
+(** Combining the sub-proofs. *)
+
+Theorem type_rtl_function_correct:
+ forall (f: function) (env: regenv),
+ type_rtl_function f = Some env -> wt_function env f.
+ Proof.
+ intros.
+ exact (mk_wt_function env f (type_rtl_function_params f _ H)
+ (type_rtl_function_norepet f _ H)
+ (type_rtl_function_instrs f _ H)).
+ Qed.
+
+Definition wt_program (p: program) : Prop :=
+ forall i f, In (i, f) (prog_funct p) -> type_rtl_function f <> None.
+
+(** * Type preservation during evaluation *)
+
+(** The type system for RTL is not sound in that it does not guarantee
+ progress: well-typed instructions such as [Icall] can fail because
+ of run-time type tests (such as the equality between calle and caller's
+ signatures). However, the type system guarantees a type preservation
+ property: if the execution does not fail because of a failed run-time
+ test, the result values and register states match the static
+ typing assumptions. This preservation property will be useful
+ later for the proof of semantic equivalence between [Machabstr] and [Mach].
+ Even though we do not need it for [RTL], we show preservation for [RTL]
+ here, as a warm-up exercise and because some of the lemmas will be
+ useful later. *)
+
+Require Import Globalenvs.
+Require Import Values.
+Require Import Mem.
+Require Import Integers.
+
+Definition wt_regset (env: regenv) (rs: regset) : Prop :=
+ forall r, Val.has_type (rs#r) (env r).
+
+Lemma wt_regset_assign:
+ forall env rs v r,
+ wt_regset env rs ->
+ Val.has_type v (env r) ->
+ wt_regset env (rs#r <- v).
+Proof.
+ intros; red; intros.
+ rewrite Regmap.gsspec.
+ case (peq r0 r); intro.
+ subst r0. assumption.
+ apply H.
+Qed.
+
+Lemma wt_regset_list:
+ forall env rs,
+ wt_regset env rs ->
+ forall rl, Val.has_type_list (rs##rl) (List.map env rl).
+Proof.
+ induction rl; simpl.
+ auto.
+ split. apply H. apply IHrl.
+Qed.
+
+Lemma wt_init_regs:
+ forall env rl args,
+ Val.has_type_list args (List.map env rl) ->
+ wt_regset env (init_regs args rl).
+Proof.
+ induction rl; destruct args; simpl; intuition.
+ red; intros. rewrite Regmap.gi. simpl; auto.
+ apply wt_regset_assign; auto.
+Qed.
+
+Section SUBJECT_REDUCTION.
+
+Variable p: program.
+
+Hypothesis wt_p: wt_program p.
+
+Let ge := Genv.globalenv p.
+
+Definition exec_instr_subject_reduction
+ (c: code) (sp: val)
+ (pc: node) (rs: regset) (m: mem)
+ (pc': node) (rs': regset) (m': mem) : Prop :=
+ forall env f
+ (CODE: c = fn_code f)
+ (WT_FN: wt_function env f)
+ (WT_RS: wt_regset env rs),
+ wt_regset env rs'.
+
+Definition exec_function_subject_reduction
+ (f: function) (args: list val) (m: mem) (res: val) (m': mem) : Prop :=
+ forall env,
+ wt_function env f ->
+ Val.has_type_list args f.(fn_sig).(sig_args) ->
+ Val.has_type res
+ (match f.(fn_sig).(sig_res) with None => Tint | Some ty => ty end).
+
+Lemma subject_reduction:
+ forall f args m res m',
+ exec_function ge f args m res m' ->
+ exec_function_subject_reduction f args m res m'.
+Proof.
+ apply (exec_function_ind_3 ge
+ exec_instr_subject_reduction
+ exec_instr_subject_reduction
+ exec_function_subject_reduction);
+ intros; red; intros;
+ try (rewrite CODE in H;
+ generalize (wt_instrs env _ WT_FN pc _ H);
+ intro WT_INSTR;
+ inversion WT_INSTR).
+
+ assumption.
+
+ apply wt_regset_assign. auto.
+ subst op. subst args. simpl in H0. injection H0; intro.
+ subst v. rewrite <- H2. apply WT_RS.
+
+ apply wt_regset_assign. auto.
+ subst op; subst args; simpl in H0. injection H0; intro; subst v.
+ simpl; auto.
+
+ apply wt_regset_assign. auto.
+ replace (env res) with (snd (type_of_operation op)).
+ apply type_of_operation_sound with function ge rs##args sp; auto.
+ rewrite <- H7. reflexivity.
+
+ apply wt_regset_assign. auto. rewrite H8.
+ eapply type_of_chunk_correct; eauto.
+
+ assumption.
+
+ apply wt_regset_assign. auto. rewrite H11. rewrite H1.
+ assert (type_rtl_function f <> None).
+ destruct ros; simpl in H0.
+ pattern f. apply Genv.find_funct_prop with function p (rs#r).
+ exact wt_p. exact H0.
+ caseEq (Genv.find_symbol ge i); intros; rewrite H12 in H0.
+ pattern f. apply Genv.find_funct_ptr_prop with function p b.
+ exact wt_p. exact H0.
+ discriminate.
+ assert (exists env1, wt_function env1 f).
+ caseEq (type_rtl_function f); intros; try congruence.
+ exists t. apply type_rtl_function_correct; auto.
+ elim H13; intros env1 WT_FN1.
+ eapply H3. eexact WT_FN1. rewrite <- H1. rewrite <- H10.
+ apply wt_regset_list; auto.
+
+ assumption.
+ assumption.
+ assumption.
+ eauto.
+ eauto.
+
+ assert (WT_INIT: wt_regset env (init_regs args (fn_params f))).
+ apply wt_init_regs. rewrite (wt_params env f H4). assumption.
+ generalize (H1 env f (refl_equal (fn_code f)) H4 WT_INIT).
+ intro WT_RS.
+ generalize (wt_instrs env _ H4 pc _ H2).
+ intro WT_INSTR; inversion WT_INSTR.
+ destruct or; simpl in H3; simpl in H7; rewrite <- H7.
+ rewrite H3. apply WT_RS.
+ rewrite H3. simpl; auto.
+Qed.
+
+End SUBJECT_REDUCTION.
diff --git a/backend/Registers.v b/backend/Registers.v
new file mode 100644
index 0000000..3093589
--- /dev/null
+++ b/backend/Registers.v
@@ -0,0 +1,49 @@
+(** Pseudo-registers and register states.
+
+ This library defines the type of pseudo-registers used in the RTL
+ intermediate language, and of mappings from pseudo-registers to
+ values as used in the dynamic semantics of RTL. *)
+
+Require Import Bool.
+Require Import Coqlib.
+Require Import AST.
+Require Import Maps.
+Require Import Sets.
+
+Definition reg: Set := positive.
+
+Module Reg.
+
+Definition eq := peq.
+
+Definition typenv := PMap.t typ.
+
+End Reg.
+
+(** Mappings from registers to some type. *)
+
+Module Regmap := PMap.
+
+Set Implicit Arguments.
+
+Definition regmap_optget
+ (A: Set) (or: option reg) (dfl: A) (rs: Regmap.t A) : A :=
+ match or with
+ | None => dfl
+ | Some r => Regmap.get r rs
+ end.
+
+Definition regmap_optset
+ (A: Set) (or: option reg) (v: A) (rs: Regmap.t A) : Regmap.t A :=
+ match or with
+ | None => rs
+ | Some r => Regmap.set r v rs
+ end.
+
+Notation "a # b" := (Regmap.get b a) (at level 1).
+Notation "a ## b" := (List.map (fun r => Regmap.get r a) b) (at level 1).
+Notation "a # b <- c" := (Regmap.set b c a) (at level 1, b at next level).
+
+(** Sets of registers *)
+
+Module Regset := MakeSet(PTree).
diff --git a/backend/Stacking.v b/backend/Stacking.v
new file mode 100644
index 0000000..1f0c454
--- /dev/null
+++ b/backend/Stacking.v
@@ -0,0 +1,226 @@
+(** Layout of activation records; translation from Linear to Mach. *)
+
+Require Import Coqlib.
+Require Import Maps.
+Require Import AST.
+Require Import Integers.
+Require Import Op.
+Require Import RTL.
+Require Import Locations.
+Require Import Linear.
+Require Import Lineartyping.
+Require Import Mach.
+Require Import Conventions.
+
+(** * Layout of activation records *)
+
+(** The general shape of activation records is as follows,
+ from bottom (lowest offsets) to top:
+- 24 reserved bytes. The first 4 bytes hold the back pointer to the
+ activation record of the caller. The next 4 bytes will be used
+ to store the return address. The remaining 16 bytes are unused
+ but reserved in accordance with the PowerPC application binary interface.
+- Space for outgoing arguments to function calls.
+- Local stack slots of integer type.
+- Saved values of integer callee-save registers used by the function.
+- One word of padding, if necessary to align the following data
+ on a 8-byte boundary.
+- Local stack slots of float type.
+- Saved values of float callee-save registers used by the function.
+- Space for the stack-allocated data declared in Cminor.
+
+To facilitate some of the proofs, the Cminor stack-allocated data
+starts at offset 0; the preceding areas in the activation record
+therefore have negative offsets. This part (with negative offsets)
+is called the ``frame'' (see the [Machabstr] semantics for the Mach
+language), by opposition with the ``Cminor stack data'' which is the part
+with positive offsets.
+
+The [frame_env] compilation environment records the positions of
+the boundaries between areas in the frame part.
+*)
+
+Record frame_env : Set := mk_frame_env {
+ fe_size: Z;
+ fe_ofs_int_local: Z;
+ fe_ofs_int_callee_save: Z;
+ fe_num_int_callee_save: Z;
+ fe_ofs_float_local: Z;
+ fe_ofs_float_callee_save: Z;
+ fe_num_float_callee_save: Z
+}.
+
+(** Computation of the frame environment from the bounds of the current
+ function. *)
+
+Definition make_env (b: bounds) :=
+ let oil := 4 * b.(bound_outgoing) in (* integer locals *)
+ let oics := oil + 4 * b.(bound_int_local) in (* integer callee-saves *)
+ let oendi := oics + 4 * b.(bound_int_callee_save) in
+ let ofl := align oendi 8 in (* float locals *)
+ let ofcs := ofl + 8 * b.(bound_float_local) in (* float callee-saves *)
+ let sz := ofcs + 8 * b.(bound_float_callee_save) in (* total frame size *)
+ mk_frame_env sz oil oics b.(bound_int_callee_save)
+ ofl ofcs b.(bound_float_callee_save).
+
+(** Computation the frame offset for the given component of the frame.
+ The component is expressed by the following [frame_index] sum type. *)
+
+Inductive frame_index: Set :=
+ | FI_local: Z -> typ -> frame_index
+ | FI_arg: Z -> typ -> frame_index
+ | FI_saved_int: Z -> frame_index
+ | FI_saved_float: Z -> frame_index.
+
+Definition offset_of_index (fe: frame_env) (idx: frame_index) :=
+ match idx with
+ | FI_local x Tint => fe.(fe_ofs_int_local) + 4 * x
+ | FI_local x Tfloat => fe.(fe_ofs_float_local) + 8 * x
+ | FI_arg x ty => 4 * x
+ | FI_saved_int x => fe.(fe_ofs_int_callee_save) + 4 * x
+ | FI_saved_float x => fe.(fe_ofs_float_callee_save) + 8 * x
+ end.
+
+(** * Saving and restoring callee-save registers *)
+
+(** [save_callee_save fe k] adds before [k] the instructions that
+ store in the frame the values of callee-save registers used by the
+ current function. *)
+
+Definition save_int_callee_save (fe: frame_env) (cs: mreg) (k: Mach.code) :=
+ let i := index_int_callee_save cs in
+ if zlt i fe.(fe_num_int_callee_save)
+ then Msetstack cs (Int.repr (offset_of_index fe (FI_saved_int i))) Tint :: k
+ else k.
+
+Definition save_float_callee_save (fe: frame_env) (cs: mreg) (k: Mach.code) :=
+ let i := index_float_callee_save cs in
+ if zlt i fe.(fe_num_float_callee_save)
+ then Msetstack cs (Int.repr (offset_of_index fe (FI_saved_float i))) Tfloat :: k
+ else k.
+
+Definition save_callee_save (fe: frame_env) (k: Mach.code) :=
+ List.fold_right (save_int_callee_save fe)
+ (List.fold_right (save_float_callee_save fe) k float_callee_save_regs)
+ int_callee_save_regs.
+
+(** [restore_callee_save fe k] adds before [k] the instructions that
+ re-load from the frame the values of callee-save registers used by the
+ current function, restoring these registers to their initial values. *)
+
+Definition restore_int_callee_save (fe: frame_env) (cs: mreg) (k: Mach.code) :=
+ let i := index_int_callee_save cs in
+ if zlt i fe.(fe_num_int_callee_save)
+ then Mgetstack (Int.repr (offset_of_index fe (FI_saved_int i))) Tint cs :: k
+ else k.
+
+Definition restore_float_callee_save (fe: frame_env) (cs: mreg) (k: Mach.code) :=
+ let i := index_float_callee_save cs in
+ if zlt i fe.(fe_num_float_callee_save)
+ then Mgetstack (Int.repr (offset_of_index fe (FI_saved_float i))) Tfloat cs :: k
+ else k.
+
+Definition restore_callee_save (fe: frame_env) (k: Mach.code) :=
+ List.fold_right (restore_int_callee_save fe)
+ (List.fold_right (restore_float_callee_save fe) k float_callee_save_regs)
+ int_callee_save_regs.
+
+(** * Code transformation. *)
+
+(** Translation of operations and addressing mode.
+ In Linear, the stack pointer has offset 0, i.e. points to the
+ beginning of the Cminor stack data block. In Mach, the stack
+ pointer points to the bottom of the activation record,
+ at offset [- fe.(fe_size)] where [fe] is the frame environment.
+ Operations and addressing mode that are relative to the stack pointer
+ must therefore be offset by [fe.(fe_size)] to preserve their
+ behaviour. *)
+
+Definition transl_op (fe: frame_env) (op: operation) :=
+ match op with
+ | Oaddrstack ofs => Oaddrstack (Int.add (Int.repr fe.(fe_size)) ofs)
+ | _ => op
+ end.
+
+Definition transl_addr (fe: frame_env) (addr: addressing) :=
+ match addr with
+ | Ainstack ofs => Ainstack (Int.add (Int.repr fe.(fe_size)) ofs)
+ | _ => addr
+ end.
+
+(** Translation of a Linear instruction. Prepends the corresponding
+ Mach instructions to the given list of instructions.
+ [Lgetstack] and [Lsetstack] moves between registers and stack slots
+ are turned into [Mgetstack], [Mgetparent] or [Msetstack] instructions
+ at offsets determined by the frame environment.
+ Instructions and addressing modes are modified as described previously.
+ Code to restore the values of callee-save registers is inserted
+ before the function returns. *)
+
+Definition transl_instr
+ (fe: frame_env) (i: Linear.instruction) (k: Mach.code) : Mach.code :=
+ match i with
+ | Lgetstack s r =>
+ match s with
+ | Local ofs ty =>
+ Mgetstack (Int.repr (offset_of_index fe (FI_local ofs ty))) ty r :: k
+ | Incoming ofs ty =>
+ Mgetparam (Int.repr (offset_of_index fe (FI_arg ofs ty))) ty r :: k
+ | Outgoing ofs ty =>
+ Mgetstack (Int.repr (offset_of_index fe (FI_arg ofs ty))) ty r :: k
+ end
+ | Lsetstack r s =>
+ match s with
+ | Local ofs ty =>
+ Msetstack r (Int.repr (offset_of_index fe (FI_local ofs ty))) ty :: k
+ | Incoming ofs ty =>
+ k (* should not happen *)
+ | Outgoing ofs ty =>
+ Msetstack r (Int.repr (offset_of_index fe (FI_arg ofs ty))) ty :: k
+ end
+ | Lop op args res =>
+ Mop (transl_op fe op) args res :: k
+ | Lload chunk addr args dst =>
+ Mload chunk (transl_addr fe addr) args dst :: k
+ | Lstore chunk addr args src =>
+ Mstore chunk (transl_addr fe addr) args src :: k
+ | Lcall sig ros =>
+ Mcall sig ros :: k
+ | Llabel lbl =>
+ Mlabel lbl :: k
+ | Lgoto lbl =>
+ Mgoto lbl :: k
+ | Lcond cond args lbl =>
+ Mcond cond args lbl :: k
+ | Lreturn =>
+ restore_callee_save fe (Mreturn :: k)
+ end.
+
+(** Translation of a function. Code that saves the values of used
+ callee-save registers is inserted at function entry, followed
+ by the translation of the function body.
+
+ Subtle point: the compiler must check that the frame is no
+ larger than [- Int.min_signed] bytes, otherwise arithmetic overflows
+ could occur during frame accesses using signed machine integers as
+ offsets. *)
+
+Definition transl_code
+ (fe: frame_env) (il: list Linear.instruction) : Mach.code :=
+ List.fold_right (transl_instr fe) nil il.
+
+Definition transl_body (f: Linear.function) (fe: frame_env) :=
+ save_callee_save fe (transl_code fe f.(Linear.fn_code)).
+
+Definition transf_function (f: Linear.function) : option Mach.function :=
+ let fe := make_env (function_bounds f) in
+ if zlt f.(Linear.fn_stacksize) 0 then None else
+ if zlt (- Int.min_signed) fe.(fe_size) then None else
+ Some (Mach.mkfunction
+ f.(Linear.fn_sig)
+ (transl_body f fe)
+ f.(Linear.fn_stacksize)
+ fe.(fe_size)).
+
+Definition transf_program (p: Linear.program) : option Mach.program :=
+ transform_partial_program transf_function p.
diff --git a/backend/Stackingproof.v b/backend/Stackingproof.v
new file mode 100644
index 0000000..002ca8d
--- /dev/null
+++ b/backend/Stackingproof.v
@@ -0,0 +1,1610 @@
+(** Correctness proof for the translation from Linear to Mach. *)
+
+(** This file proves semantic preservation for the [Stacking] pass.
+ For the target language Mach, we use the alternate semantics
+ given in file [Machabstr], where a part of the activation record
+ is not resident in memory. Combined with the semantic equivalence
+ result between the two Mach semantics (see file [Machabstr2mach]),
+ the proof in this file also shows semantic preservation with
+ respect to the standard Mach semantics. *)
+
+Require Import Coqlib.
+Require Import Maps.
+Require Import AST.
+Require Import Integers.
+Require Import Values.
+Require Import Op.
+Require Import Mem.
+Require Import Globalenvs.
+Require Import Locations.
+Require Import Mach.
+Require Import Machabstr.
+Require Import Linear.
+Require Import Lineartyping.
+Require Import Conventions.
+Require Import Stacking.
+
+(** * Properties of frames and frame accesses *)
+
+(** ``Good variable'' properties for frame accesses. *)
+
+Lemma get_slot_ok:
+ forall fr ty ofs,
+ 0 <= ofs -> fr.(low) + ofs + 4 * typesize ty <= 0 ->
+ exists v, get_slot fr ty ofs v.
+Proof.
+ intros. exists (load_contents (mem_type ty) fr.(contents) (fr.(low) + ofs)).
+ constructor; auto.
+Qed.
+
+Lemma set_slot_ok:
+ forall fr ty ofs v,
+ fr.(high) = 0 -> 0 <= ofs -> fr.(low) + ofs + 4 * typesize ty <= 0 ->
+ exists fr', set_slot fr ty ofs v fr'.
+Proof.
+ intros.
+ exists (mkblock fr.(low) fr.(high)
+ (store_contents (mem_type ty) fr.(contents) (fr.(low) + ofs) v)
+ (set_slot_undef_outside fr ty ofs v H H0 H1 fr.(undef_outside))).
+ constructor; auto.
+Qed.
+
+Lemma slot_gss:
+ forall fr1 ty ofs v fr2,
+ set_slot fr1 ty ofs v fr2 ->
+ get_slot fr2 ty ofs v.
+Proof.
+ intros. induction H.
+ constructor.
+ auto. simpl. auto.
+ simpl. symmetry. apply load_store_contents_same.
+Qed.
+
+Lemma slot_gso:
+ forall fr1 ty ofs v fr2 ty' ofs' v',
+ set_slot fr1 ty ofs v fr2 ->
+ get_slot fr1 ty' ofs' v' ->
+ ofs' + 4 * typesize ty' <= ofs \/ ofs + 4 * typesize ty <= ofs' ->
+ get_slot fr2 ty' ofs' v'.
+Proof.
+ intros. induction H; inversion H0.
+ constructor.
+ auto. simpl low. auto.
+ simpl. rewrite H3. symmetry. apply load_store_contents_other.
+ repeat (rewrite size_mem_type). omega.
+Qed.
+
+Lemma slot_gi:
+ forall f ofs ty,
+ 0 <= ofs -> (init_frame f).(low) + ofs + 4 * typesize ty <= 0 ->
+ get_slot (init_frame f) ty ofs Vundef.
+Proof.
+ intros. constructor.
+ auto. auto.
+ symmetry. apply load_contents_init.
+Qed.
+
+Section PRESERVATION.
+
+Variable prog: Linear.program.
+Variable tprog: Mach.program.
+Hypothesis TRANSF: transf_program prog = Some tprog.
+Let ge := Genv.globalenv prog.
+Let tge := Genv.globalenv tprog.
+
+Section FRAME_PROPERTIES.
+
+Variable f: Linear.function.
+Let b := function_bounds f.
+Let fe := make_env b.
+Variable tf: Mach.function.
+Hypothesis TRANSF_F: transf_function f = Some tf.
+
+Lemma unfold_transf_function:
+ tf = Mach.mkfunction
+ f.(Linear.fn_sig)
+ (transl_body f fe)
+ f.(Linear.fn_stacksize)
+ fe.(fe_size).
+Proof.
+ generalize TRANSF_F. unfold transf_function.
+ case (zlt (fn_stacksize f) 0). intros; discriminate.
+ case (zlt (- Int.min_signed) (fe_size (make_env (function_bounds f)))).
+ intros; discriminate.
+ intros. unfold fe. unfold b. congruence.
+Qed.
+
+Lemma size_no_overflow: fe.(fe_size) <= -Int.min_signed.
+Proof.
+ generalize TRANSF_F. unfold transf_function.
+ case (zlt (fn_stacksize f) 0). intros; discriminate.
+ case (zlt (- Int.min_signed) (fe_size (make_env (function_bounds f)))).
+ intros; discriminate.
+ intros. unfold fe, b. omega.
+Qed.
+
+(** A frame index is valid if it lies within the resource bounds
+ of the current function. *)
+
+Definition index_valid (idx: frame_index) :=
+ match idx with
+ | FI_local x Tint => 0 <= x < b.(bound_int_local)
+ | FI_local x Tfloat => 0 <= x < b.(bound_float_local)
+ | FI_arg x ty => 6 <= x /\ x + typesize ty <= b.(bound_outgoing)
+ | FI_saved_int x => 0 <= x < b.(bound_int_callee_save)
+ | FI_saved_float x => 0 <= x < b.(bound_float_callee_save)
+ end.
+
+Definition type_of_index (idx: frame_index) :=
+ match idx with
+ | FI_local x ty => ty
+ | FI_arg x ty => ty
+ | FI_saved_int x => Tint
+ | FI_saved_float x => Tfloat
+ end.
+
+(** Non-overlap between the memory areas corresponding to two
+ frame indices. *)
+
+Definition index_diff (idx1 idx2: frame_index) : Prop :=
+ match idx1, idx2 with
+ | FI_local x1 ty1, FI_local x2 ty2 =>
+ x1 <> x2 \/ ty1 <> ty2
+ | FI_arg x1 ty1, FI_arg x2 ty2 =>
+ x1 + typesize ty1 <= x2 \/ x2 + typesize ty2 <= x1
+ | FI_saved_int x1, FI_saved_int x2 => x1 <> x2
+ | FI_saved_float x1, FI_saved_float x2 => x1 <> x2
+ | _, _ => True
+ end.
+
+Remark align_float_part:
+ 4 * bound_outgoing b + 4 * bound_int_local b + 4 * bound_int_callee_save b <=
+ align (4 * bound_outgoing b + 4 * bound_int_local b + 4 * bound_int_callee_save b) 8.
+Proof.
+ apply align_le. omega.
+Qed.
+
+Ltac AddPosProps :=
+ assert (bound_int_local b >= 0);
+ [unfold b; apply bound_int_local_pos |
+ assert (bound_float_local b >= 0);
+ [unfold b; apply bound_float_local_pos |
+ assert (bound_int_callee_save b >= 0);
+ [unfold b; apply bound_int_callee_save_pos |
+ assert (bound_float_callee_save b >= 0);
+ [unfold b; apply bound_float_callee_save_pos |
+ assert (bound_outgoing b >= 6);
+ [unfold b; apply bound_outgoing_pos |
+ generalize align_float_part; intro]]]]].
+
+Lemma size_pos: fe.(fe_size) >= 24.
+Proof.
+ AddPosProps.
+ unfold fe, make_env, fe_size. omega.
+Qed.
+
+Opaque function_bounds.
+
+Lemma offset_of_index_disj:
+ forall idx1 idx2,
+ index_valid idx1 -> index_valid idx2 ->
+ index_diff idx1 idx2 ->
+ offset_of_index fe idx1 + 4 * typesize (type_of_index idx1) <= offset_of_index fe idx2 \/
+ offset_of_index fe idx2 + 4 * typesize (type_of_index idx2) <= offset_of_index fe idx1.
+Proof.
+ AddPosProps.
+ intros.
+ destruct idx1; destruct idx2;
+ try (destruct t); try (destruct t0);
+ unfold offset_of_index, fe, make_env,
+ fe_size, fe_ofs_int_local, fe_ofs_int_callee_save,
+ fe_ofs_float_local, fe_ofs_float_callee_save,
+ type_of_index, typesize;
+ simpl in H5; simpl in H6; simpl in H7;
+ try omega.
+ assert (z <> z0). intuition auto. omega.
+ assert (z <> z0). intuition auto. omega.
+Qed.
+
+(** The following lemmas give sufficient conditions for indices
+ of various kinds to be valid. *)
+
+Lemma index_local_valid:
+ forall ofs ty,
+ slot_bounded f (Local ofs ty) ->
+ index_valid (FI_local ofs ty).
+Proof.
+ unfold slot_bounded, index_valid. auto.
+Qed.
+
+Lemma index_arg_valid:
+ forall ofs ty,
+ slot_bounded f (Outgoing ofs ty) ->
+ index_valid (FI_arg ofs ty).
+Proof.
+ unfold slot_bounded, index_valid, b. auto.
+Qed.
+
+Lemma index_saved_int_valid:
+ forall r,
+ In r int_callee_save_regs ->
+ index_int_callee_save r < b.(bound_int_callee_save) ->
+ index_valid (FI_saved_int (index_int_callee_save r)).
+Proof.
+ intros. red. split.
+ apply Zge_le. apply index_int_callee_save_pos; auto.
+ auto.
+Qed.
+
+Lemma index_saved_float_valid:
+ forall r,
+ In r float_callee_save_regs ->
+ index_float_callee_save r < b.(bound_float_callee_save) ->
+ index_valid (FI_saved_float (index_float_callee_save r)).
+Proof.
+ intros. red. split.
+ apply Zge_le. apply index_float_callee_save_pos; auto.
+ auto.
+Qed.
+
+Hint Resolve index_local_valid index_arg_valid
+ index_saved_int_valid index_saved_float_valid: stacking.
+
+(** The offset of a valid index lies within the bounds of the frame. *)
+
+Lemma offset_of_index_valid:
+ forall idx,
+ index_valid idx ->
+ 24 <= offset_of_index fe idx /\
+ offset_of_index fe idx + 4 * typesize (type_of_index idx) <= fe.(fe_size).
+Proof.
+ AddPosProps.
+ intros.
+ destruct idx; try destruct t;
+ unfold offset_of_index, fe, make_env,
+ fe_size, fe_ofs_int_local, fe_ofs_int_callee_save,
+ fe_ofs_float_local, fe_ofs_float_callee_save,
+ type_of_index, typesize;
+ simpl in H5;
+ omega.
+Qed.
+
+(** Offsets for valid index are representable as signed machine integers
+ without loss of precision. *)
+
+Lemma offset_of_index_no_overflow:
+ forall idx,
+ index_valid idx ->
+ Int.signed (Int.repr (offset_of_index fe idx)) = offset_of_index fe idx.
+Proof.
+ intros.
+ generalize (offset_of_index_valid idx H). intros [A B].
+(* omega falls flat on its face... *)
+ apply Int.signed_repr.
+ split. apply Zle_trans with 24. compute; intro; discriminate.
+ auto.
+ assert (offset_of_index fe idx < fe_size fe).
+ generalize (typesize_pos (type_of_index idx)); intro. omega.
+ apply Zlt_succ_le.
+ change (Zsucc Int.max_signed) with (- Int.min_signed).
+ generalize size_no_overflow. omega.
+Qed.
+
+(** Admissible evaluation rules for the [Mgetstack] and [Msetstack]
+ instructions, in case the offset is computed with [offset_of_index]. *)
+
+Lemma exec_Mgetstack':
+ forall sp parent idx ty c rs fr dst m v,
+ index_valid idx ->
+ get_slot fr ty (offset_of_index fe idx) v ->
+ Machabstr.exec_instrs tge tf sp parent
+ (Mgetstack (Int.repr (offset_of_index fe idx)) ty dst :: c) rs fr m
+ c (rs#dst <- v) fr m.
+Proof.
+ intros. apply Machabstr.exec_one. apply Machabstr.exec_Mgetstack.
+ rewrite offset_of_index_no_overflow. auto. auto.
+Qed.
+
+Lemma exec_Msetstack':
+ forall sp parent idx ty c rs fr src m fr',
+ index_valid idx ->
+ set_slot fr ty (offset_of_index fe idx) (rs src) fr' ->
+ Machabstr.exec_instrs tge tf sp parent
+ (Msetstack src (Int.repr (offset_of_index fe idx)) ty :: c) rs fr m
+ c rs fr' m.
+Proof.
+ intros. apply Machabstr.exec_one. apply Machabstr.exec_Msetstack.
+ rewrite offset_of_index_no_overflow. auto. auto.
+Qed.
+
+(** An alternate characterization of the [get_slot] and [set_slot]
+ operations in terms of the following [index_val] frame access
+ function. *)
+
+Definition index_val (idx: frame_index) (fr: frame) :=
+ load_contents (mem_type (type_of_index idx))
+ fr.(contents)
+ (fr.(low) + offset_of_index fe idx).
+
+Lemma get_slot_index:
+ forall fr idx ty v,
+ index_valid idx ->
+ fr.(low) = - fe.(fe_size) ->
+ ty = type_of_index idx ->
+ v = index_val idx fr ->
+ get_slot fr ty (offset_of_index fe idx) v.
+Proof.
+ intros. subst v; subst ty.
+ generalize (offset_of_index_valid idx H); intros [A B].
+ unfold index_val. apply get_slot_intro. omega.
+ rewrite H0. omega. auto.
+Qed.
+
+Lemma set_slot_index:
+ forall fr idx v,
+ index_valid idx ->
+ fr.(high) = 0 ->
+ fr.(low) = - fe.(fe_size) ->
+ exists fr', set_slot fr (type_of_index idx) (offset_of_index fe idx) v fr'.
+Proof.
+ intros.
+ generalize (offset_of_index_valid idx H); intros [A B].
+ apply set_slot_ok. auto. omega. rewrite H1; omega.
+Qed.
+
+(** Alternate ``good variable'' properties for [get_slot] and [set_slot]. *)
+Lemma slot_iss:
+ forall fr idx v fr',
+ set_slot fr (type_of_index idx) (offset_of_index fe idx) v fr' ->
+ index_val idx fr' = v.
+Proof.
+ intros. inversion H. subst ofs ty.
+ unfold index_val; simpl. apply load_store_contents_same.
+Qed.
+
+Lemma slot_iso:
+ forall fr idx v fr' idx',
+ set_slot fr (type_of_index idx) (offset_of_index fe idx) v fr' ->
+ index_diff idx idx' ->
+ index_valid idx -> index_valid idx' ->
+ index_val idx' fr' = index_val idx' fr.
+Proof.
+ intros. generalize (offset_of_index_disj idx idx' H1 H2 H0). intro.
+ unfold index_val. inversion H. subst ofs ty. simpl.
+ apply load_store_contents_other.
+ repeat rewrite size_mem_type. omega.
+Qed.
+
+(** * Agreement between location sets and Mach environments *)
+
+(** The following [agree] predicate expresses semantic agreement between
+ a location set on the Linear side and, on the Mach side,
+ a register set, plus the current and parent frames, plus the register
+ set [rs0] at function entry. *)
+
+Record agree (ls: locset) (rs: regset) (fr parent: frame) (rs0: regset) : Prop :=
+ mk_agree {
+ (** Machine registers have the same values on the Linear and Mach sides. *)
+ agree_reg:
+ forall r, ls (R r) = rs r;
+
+ (** Machine registers outside the bounds of the current function
+ have the same values they had at function entry. In other terms,
+ these registers are never assigned. *)
+ agree_unused_reg:
+ forall r, ~(mreg_bounded f r) -> rs r = rs0 r;
+
+ (** The bounds of the current frame are [[- fe.(fe_size), 0]]. *)
+ agree_high:
+ fr.(high) = 0;
+ agree_size:
+ fr.(low) = - fe.(fe_size);
+
+ (** Local and outgoing stack slots (on the Linear side) have
+ the same values as the one loaded from the current Mach frame
+ at the corresponding offsets. *)
+
+ agree_locals:
+ forall ofs ty,
+ slot_bounded f (Local ofs ty) ->
+ ls (S (Local ofs ty)) = index_val (FI_local ofs ty) fr;
+ agree_outgoing:
+ forall ofs ty,
+ slot_bounded f (Outgoing ofs ty) ->
+ ls (S (Outgoing ofs ty)) = index_val (FI_arg ofs ty) fr;
+
+ (** Incoming stack slots (on the Linear side) have
+ the same values as the one loaded from the parent Mach frame
+ at the corresponding offsets. *)
+ agree_incoming:
+ forall ofs ty,
+ slot_bounded f (Incoming ofs ty) ->
+ get_slot parent ty (Int.signed (Int.repr (4 * ofs))) (ls (S (Incoming ofs ty)));
+
+ (** The areas of the frame reserved for saving used callee-save
+ registers always contain the values that those registers had
+ on function entry. *)
+ agree_saved_int:
+ forall r,
+ In r int_callee_save_regs ->
+ index_int_callee_save r < b.(bound_int_callee_save) ->
+ index_val (FI_saved_int (index_int_callee_save r)) fr = rs0 r;
+ agree_saved_float:
+ forall r,
+ In r float_callee_save_regs ->
+ index_float_callee_save r < b.(bound_float_callee_save) ->
+ index_val (FI_saved_float (index_float_callee_save r)) fr = rs0 r
+ }.
+
+Hint Resolve agree_reg agree_unused_reg agree_size agree_high
+ agree_locals agree_outgoing agree_incoming
+ agree_saved_int agree_saved_float: stacking.
+
+(** Values of registers and register lists. *)
+
+Lemma agree_eval_reg:
+ forall ls rs fr parent rs0 r,
+ agree ls rs fr parent rs0 -> rs r = ls (R r).
+Proof.
+ intros. symmetry. eauto with stacking.
+Qed.
+
+Lemma agree_eval_regs:
+ forall ls rs fr parent rs0 rl,
+ agree ls rs fr parent rs0 -> rs##rl = LTL.reglist rl ls.
+Proof.
+ induction rl; simpl; intros.
+ auto. apply (f_equal2 (@cons val)).
+ eapply agree_eval_reg; eauto.
+ auto.
+Qed.
+
+Hint Resolve agree_eval_reg agree_eval_regs: stacking.
+
+(** Preservation of agreement under various assignments:
+ of machine registers, of local slots, of outgoing slots. *)
+
+Lemma agree_set_reg:
+ forall ls rs fr parent rs0 r v,
+ agree ls rs fr parent rs0 ->
+ mreg_bounded f r ->
+ agree (Locmap.set (R r) v ls) (Regmap.set r v rs) fr parent rs0.
+Proof.
+ intros. constructor; eauto with stacking.
+ intros. case (mreg_eq r r0); intro.
+ subst r0. rewrite Locmap.gss; rewrite Regmap.gss; auto.
+ rewrite Locmap.gso. rewrite Regmap.gso. eauto with stacking.
+ auto. red. auto.
+ intros. rewrite Regmap.gso. eauto with stacking.
+ red; intro; subst r0. contradiction.
+ intros. rewrite Locmap.gso. eauto with stacking. red. auto.
+ intros. rewrite Locmap.gso. eauto with stacking. red. auto.
+ intros. rewrite Locmap.gso. eauto with stacking. red. auto.
+Qed.
+
+Lemma agree_set_local:
+ forall ls rs fr parent rs0 v ofs ty,
+ agree ls rs fr parent rs0 ->
+ slot_bounded f (Local ofs ty) ->
+ exists fr',
+ set_slot fr ty (offset_of_index fe (FI_local ofs ty)) v fr' /\
+ agree (Locmap.set (S (Local ofs ty)) v ls) rs fr' parent rs0.
+Proof.
+ intros.
+ generalize (set_slot_index fr _ v (index_local_valid _ _ H0)
+ (agree_high _ _ _ _ _ H)
+ (agree_size _ _ _ _ _ H)).
+ intros [fr' SET].
+ exists fr'. split. auto. constructor; eauto with stacking.
+ (* agree_reg *)
+ intros. rewrite Locmap.gso. eauto with stacking. red; auto.
+ (* agree_high *)
+ inversion SET. simpl high. eauto with stacking.
+ (* agree_size *)
+ inversion SET. simpl low. eauto with stacking.
+ (* agree_local *)
+ intros. case (slot_eq (Local ofs ty) (Local ofs0 ty0)); intro.
+ rewrite <- e. rewrite Locmap.gss.
+ replace (FI_local ofs0 ty0) with (FI_local ofs ty).
+ symmetry. eapply slot_iss; eauto. congruence.
+ assert (ofs <> ofs0 \/ ty <> ty0).
+ case (zeq ofs ofs0); intro. compare ty ty0; intro.
+ congruence. tauto. tauto.
+ rewrite Locmap.gso. transitivity (index_val (FI_local ofs0 ty0) fr).
+ eauto with stacking. symmetry. eapply slot_iso; eauto.
+ simpl. auto.
+ (* agree_outgoing *)
+ intros. rewrite Locmap.gso. transitivity (index_val (FI_arg ofs0 ty0) fr).
+ eauto with stacking. symmetry. eapply slot_iso; eauto.
+ red; auto. red; auto.
+ (* agree_incoming *)
+ intros. rewrite Locmap.gso. eauto with stacking. red. auto.
+ (* agree_saved_int *)
+ intros. rewrite <- (agree_saved_int _ _ _ _ _ H r H1 H2).
+ eapply slot_iso; eauto with stacking. red; auto.
+ (* agree_saved_float *)
+ intros. rewrite <- (agree_saved_float _ _ _ _ _ H r H1 H2).
+ eapply slot_iso; eauto with stacking. red; auto.
+Qed.
+
+Lemma agree_set_outgoing:
+ forall ls rs fr parent rs0 v ofs ty,
+ agree ls rs fr parent rs0 ->
+ slot_bounded f (Outgoing ofs ty) ->
+ exists fr',
+ set_slot fr ty (offset_of_index fe (FI_arg ofs ty)) v fr' /\
+ agree (Locmap.set (S (Outgoing ofs ty)) v ls) rs fr' parent rs0.
+Proof.
+ intros.
+ generalize (set_slot_index fr _ v (index_arg_valid _ _ H0)
+ (agree_high _ _ _ _ _ H)
+ (agree_size _ _ _ _ _ H)).
+ intros [fr' SET].
+ exists fr'. split. exact SET. constructor; eauto with stacking.
+ (* agree_reg *)
+ intros. rewrite Locmap.gso. eauto with stacking. red; auto.
+ (* agree_high *)
+ inversion SET. simpl high. eauto with stacking.
+ (* agree_size *)
+ inversion SET. simpl low. eauto with stacking.
+ (* agree_local *)
+ intros. rewrite Locmap.gso.
+ transitivity (index_val (FI_local ofs0 ty0) fr).
+ eauto with stacking. symmetry. eapply slot_iso; eauto.
+ red; auto. red; auto.
+ (* agree_outgoing *)
+ intros. unfold Locmap.set.
+ case (Loc.eq (S (Outgoing ofs ty)) (S (Outgoing ofs0 ty0))); intro.
+ (* same location *)
+ replace ofs0 with ofs. replace ty0 with ty.
+ symmetry. eapply slot_iss; eauto.
+ congruence. congruence.
+ (* overlapping locations *)
+ caseEq (Loc.overlap (S (Outgoing ofs ty)) (S (Outgoing ofs0 ty0))); intros.
+ inversion SET. subst ofs1 ty1.
+ unfold index_val, type_of_index, offset_of_index.
+ set (ofs4 := 4 * ofs). set (ofs04 := 4 * ofs0). simpl.
+ unfold ofs4, ofs04. symmetry.
+ case (zeq ofs ofs0); intro.
+ subst ofs0. apply load_store_contents_mismatch.
+ destruct ty; destruct ty0; simpl; congruence.
+ generalize (Loc.overlap_not_diff _ _ H2). intro. simpl in H4.
+ apply load_store_contents_overlap.
+ omega.
+ rewrite size_mem_type. omega.
+ rewrite size_mem_type. omega.
+ (* different locations *)
+ transitivity (index_val (FI_arg ofs0 ty0) fr).
+ eauto with stacking.
+ symmetry. eapply slot_iso; eauto.
+ simpl. eapply Loc.overlap_aux_false_1; eauto.
+ (* agree_incoming *)
+ intros. rewrite Locmap.gso. eauto with stacking. red. auto.
+ (* saved ints *)
+ intros. rewrite <- (agree_saved_int _ _ _ _ _ H r H1 H2).
+ eapply slot_iso; eauto with stacking. red; auto.
+ (* saved floats *)
+ intros. rewrite <- (agree_saved_float _ _ _ _ _ H r H1 H2).
+ eapply slot_iso; eauto with stacking. red; auto.
+Qed.
+
+Lemma agree_return_regs:
+ forall ls rs fr parent rs0 ls' rs',
+ agree ls rs fr parent rs0 ->
+ (forall r,
+ In (R r) temporaries \/ In (R r) destroyed_at_call ->
+ rs' r = ls' (R r)) ->
+ (forall r,
+ In r int_callee_save_regs \/ In r float_callee_save_regs ->
+ rs' r = rs r) ->
+ agree (LTL.return_regs ls ls') rs' fr parent rs0.
+Proof.
+ intros. constructor; unfold LTL.return_regs; eauto with stacking.
+ (* agree_reg *)
+ intros. case (In_dec Loc.eq (R r) temporaries); intro.
+ symmetry. apply H0. tauto.
+ case (In_dec Loc.eq (R r) destroyed_at_call); intro.
+ symmetry. apply H0. tauto.
+ rewrite H1. eauto with stacking.
+ generalize (register_classification r); tauto.
+ (* agree_unused_reg *)
+ intros. rewrite H1. eauto with stacking.
+ generalize H2; unfold mreg_bounded; case (mreg_type r); intro.
+ left. apply index_int_callee_save_pos2.
+ generalize (bound_int_callee_save_pos f); intro. omega.
+ right. apply index_float_callee_save_pos2.
+ generalize (bound_float_callee_save_pos f); intro. omega.
+Qed.
+
+(** * Correctness of saving and restoring of callee-save registers *)
+
+(** The following lemmas show the correctness of the register saving
+ code generated by [save_callee_save]: after this code has executed,
+ the register save areas of the current frame do contain the
+ values of the callee-save registers used by the function. *)
+
+Lemma save_int_callee_save_correct_rec:
+ forall l k sp parent rs fr m,
+ incl l int_callee_save_regs ->
+ list_norepet l ->
+ fr.(high) = 0 ->
+ fr.(low) = -fe.(fe_size) ->
+ exists fr',
+ Machabstr.exec_instrs tge tf sp parent
+ (List.fold_right (save_int_callee_save fe) k l) rs fr m
+ k rs fr' m
+ /\ fr'.(high) = 0
+ /\ fr'.(low) = -fe.(fe_size)
+ /\ (forall r,
+ In r l -> index_int_callee_save r < bound_int_callee_save b ->
+ index_val (FI_saved_int (index_int_callee_save r)) fr' = rs r)
+ /\ (forall idx,
+ index_valid idx ->
+ (forall r,
+ In r l -> index_int_callee_save r < bound_int_callee_save b ->
+ idx <> FI_saved_int (index_int_callee_save r)) ->
+ index_val idx fr' = index_val idx fr).
+Proof.
+ induction l.
+ (* base case *)
+ intros. simpl fold_right. exists fr.
+ split. apply Machabstr.exec_refl. split. auto. split. auto.
+ split. intros. elim H3. auto.
+ (* inductive case *)
+ intros. simpl fold_right.
+ set (k1 := fold_right (save_int_callee_save fe) k l) in *.
+ assert (R1: incl l int_callee_save_regs). eauto with coqlib.
+ assert (R2: list_norepet l). inversion H0; auto.
+ unfold save_int_callee_save.
+ case (zlt (index_int_callee_save a) (fe_num_int_callee_save fe));
+ intro;
+ unfold fe_num_int_callee_save, fe, make_env in z.
+ (* a store takes place *)
+ assert (IDX: index_valid (FI_saved_int (index_int_callee_save a))).
+ apply index_saved_int_valid. eauto with coqlib. auto.
+ generalize (set_slot_index _ _ (rs a) IDX H1 H2).
+ intros [fr1 SET].
+ assert (R3: high fr1 = 0). inversion SET. simpl high. auto.
+ assert (R4: low fr1 = -fe_size fe). inversion SET. simpl low. auto.
+ generalize (IHl k sp parent rs fr1 m R1 R2 R3 R4).
+ intros [fr' [A [B [C [D E]]]]].
+ exists fr'.
+ split. eapply Machabstr.exec_trans. apply exec_Msetstack'; eauto with stacking.
+ exact A.
+ split. auto.
+ split. auto.
+ split. intros. elim H3; intros. subst r.
+ rewrite E. eapply slot_iss; eauto. auto.
+ intros. decEq. apply index_int_callee_save_inj; auto with coqlib.
+ inversion H0. red; intro; subst r; contradiction.
+ apply D; auto.
+ intros. transitivity (index_val idx fr1).
+ apply E; auto.
+ intros. apply H4; eauto with coqlib.
+ eapply slot_iso; eauto.
+ destruct idx; simpl; auto.
+ generalize (H4 a (in_eq _ _) z). congruence.
+ (* no store takes place *)
+ generalize (IHl k sp parent rs fr m R1 R2 H1 H2).
+ intros [fr' [A [B [C [D E]]]]].
+ exists fr'. split. exact A. split. exact B. split. exact C.
+ split. intros. elim H3; intros. subst r. omegaContradiction.
+ apply D; auto.
+ intros. apply E; auto.
+ intros. apply H4; auto with coqlib.
+Qed.
+
+Lemma save_int_callee_save_correct:
+ forall k sp parent rs fr m,
+ fr.(high) = 0 ->
+ fr.(low) = -fe.(fe_size) ->
+ exists fr',
+ Machabstr.exec_instrs tge tf sp parent
+ (List.fold_right (save_int_callee_save fe) k int_callee_save_regs) rs fr m
+ k rs fr' m
+ /\ fr'.(high) = 0
+ /\ fr'.(low) = -fe.(fe_size)
+ /\ (forall r,
+ In r int_callee_save_regs ->
+ index_int_callee_save r < bound_int_callee_save b ->
+ index_val (FI_saved_int (index_int_callee_save r)) fr' = rs r)
+ /\ (forall idx,
+ index_valid idx ->
+ match idx with FI_saved_int _ => False | _ => True end ->
+ index_val idx fr' = index_val idx fr).
+Proof.
+ intros.
+ generalize (save_int_callee_save_correct_rec
+ int_callee_save_regs k sp parent rs fr m
+ (incl_refl _) int_callee_save_norepet H H0).
+ intros [fr' [A [B [C [D E]]]]].
+ exists fr'.
+ split. assumption. split. assumption. split. assumption.
+ split. apply D. intros. apply E. auto.
+ intros. red; intros; subst idx. contradiction.
+Qed.
+
+Lemma save_float_callee_save_correct_rec:
+ forall l k sp parent rs fr m,
+ incl l float_callee_save_regs ->
+ list_norepet l ->
+ fr.(high) = 0 ->
+ fr.(low) = -fe.(fe_size) ->
+ exists fr',
+ Machabstr.exec_instrs tge tf sp parent
+ (List.fold_right (save_float_callee_save fe) k l) rs fr m
+ k rs fr' m
+ /\ fr'.(high) = 0
+ /\ fr'.(low) = -fe.(fe_size)
+ /\ (forall r,
+ In r l -> index_float_callee_save r < bound_float_callee_save b ->
+ index_val (FI_saved_float (index_float_callee_save r)) fr' = rs r)
+ /\ (forall idx,
+ index_valid idx ->
+ (forall r,
+ In r l -> index_float_callee_save r < bound_float_callee_save b ->
+ idx <> FI_saved_float (index_float_callee_save r)) ->
+ index_val idx fr' = index_val idx fr).
+Proof.
+ induction l.
+ (* base case *)
+ intros. simpl fold_right. exists fr.
+ split. apply Machabstr.exec_refl. split. auto. split. auto.
+ split. intros. elim H3. auto.
+ (* inductive case *)
+ intros. simpl fold_right.
+ set (k1 := fold_right (save_float_callee_save fe) k l) in *.
+ assert (R1: incl l float_callee_save_regs). eauto with coqlib.
+ assert (R2: list_norepet l). inversion H0; auto.
+ unfold save_float_callee_save.
+ case (zlt (index_float_callee_save a) (fe_num_float_callee_save fe));
+ intro;
+ unfold fe_num_float_callee_save, fe, make_env in z.
+ (* a store takes place *)
+ assert (IDX: index_valid (FI_saved_float (index_float_callee_save a))).
+ apply index_saved_float_valid. eauto with coqlib. auto.
+ generalize (set_slot_index _ _ (rs a) IDX H1 H2).
+ intros [fr1 SET].
+ assert (R3: high fr1 = 0). inversion SET. simpl high. auto.
+ assert (R4: low fr1 = -fe_size fe). inversion SET. simpl low. auto.
+ generalize (IHl k sp parent rs fr1 m R1 R2 R3 R4).
+ intros [fr' [A [B [C [D E]]]]].
+ exists fr'.
+ split. eapply Machabstr.exec_trans. apply exec_Msetstack'; eauto with stacking.
+ exact A.
+ split. auto.
+ split. auto.
+ split. intros. elim H3; intros. subst r.
+ rewrite E. eapply slot_iss; eauto. auto.
+ intros. decEq. apply index_float_callee_save_inj; auto with coqlib.
+ inversion H0. red; intro; subst r; contradiction.
+ apply D; auto.
+ intros. transitivity (index_val idx fr1).
+ apply E; auto.
+ intros. apply H4; eauto with coqlib.
+ eapply slot_iso; eauto.
+ destruct idx; simpl; auto.
+ generalize (H4 a (in_eq _ _) z). congruence.
+ (* no store takes place *)
+ generalize (IHl k sp parent rs fr m R1 R2 H1 H2).
+ intros [fr' [A [B [C [D E]]]]].
+ exists fr'. split. exact A. split. exact B. split. exact C.
+ split. intros. elim H3; intros. subst r. omegaContradiction.
+ apply D; auto.
+ intros. apply E; auto.
+ intros. apply H4; auto with coqlib.
+Qed.
+
+Lemma save_float_callee_save_correct:
+ forall k sp parent rs fr m,
+ fr.(high) = 0 ->
+ fr.(low) = -fe.(fe_size) ->
+ exists fr',
+ Machabstr.exec_instrs tge tf sp parent
+ (List.fold_right (save_float_callee_save fe) k float_callee_save_regs) rs fr m
+ k rs fr' m
+ /\ fr'.(high) = 0
+ /\ fr'.(low) = -fe.(fe_size)
+ /\ (forall r,
+ In r float_callee_save_regs ->
+ index_float_callee_save r < bound_float_callee_save b ->
+ index_val (FI_saved_float (index_float_callee_save r)) fr' = rs r)
+ /\ (forall idx,
+ index_valid idx ->
+ match idx with FI_saved_float _ => False | _ => True end ->
+ index_val idx fr' = index_val idx fr).
+Proof.
+ intros.
+ generalize (save_float_callee_save_correct_rec
+ float_callee_save_regs k sp parent rs fr m
+ (incl_refl _) float_callee_save_norepet H H0).
+ intros [fr' [A [B [C [D E]]]]].
+ exists fr'. split. assumption. split. assumption. split. assumption.
+ split. apply D. intros. apply E. auto.
+ intros. red; intros; subst idx. contradiction.
+Qed.
+
+Lemma index_val_init_frame:
+ forall idx,
+ index_valid idx ->
+ index_val idx (init_frame tf) = Vundef.
+Proof.
+ intros. unfold index_val, init_frame. simpl contents.
+ apply load_contents_init.
+Qed.
+
+Lemma save_callee_save_correct:
+ forall sp parent k rs fr m ls,
+ (forall r, rs r = ls (R r)) ->
+ (forall ofs ty,
+ 6 <= ofs ->
+ ofs + typesize ty <= size_arguments f.(fn_sig) ->
+ get_slot parent ty (Int.signed (Int.repr (4 * ofs))) (ls (S (Outgoing ofs ty)))) ->
+ high fr = 0 ->
+ low fr = -fe.(fe_size) ->
+ (forall idx, index_valid idx -> index_val idx fr = Vundef) ->
+ exists fr',
+ Machabstr.exec_instrs tge tf sp parent
+ (save_callee_save fe k) rs fr m
+ k rs fr' m
+ /\ agree (LTL.call_regs ls) rs fr' parent rs.
+Proof.
+ intros. unfold save_callee_save.
+ generalize (save_int_callee_save_correct
+ (fold_right (save_float_callee_save fe) k float_callee_save_regs)
+ sp parent rs fr m H1 H2).
+ intros [fr1 [A1 [B1 [C1 [D1 E1]]]]].
+ generalize (save_float_callee_save_correct k sp parent rs fr1 m B1 C1).
+ intros [fr2 [A2 [B2 [C2 [D2 E2]]]]].
+ exists fr2.
+ split. eapply Machabstr.exec_trans. eexact A1. eexact A2.
+ constructor; unfold LTL.call_regs; auto.
+ (* agree_local *)
+ intros. rewrite E2; auto with stacking.
+ rewrite E1; auto with stacking.
+ symmetry. auto with stacking.
+ (* agree_outgoing *)
+ intros. rewrite E2; auto with stacking.
+ rewrite E1; auto with stacking.
+ symmetry. auto with stacking.
+ (* agree_incoming *)
+ intros. simpl in H4. apply H0. tauto. tauto.
+ (* agree_saved_int *)
+ intros. rewrite E2; auto with stacking.
+Qed.
+
+(** The following lemmas show the correctness of the register reloading
+ code generated by [reload_callee_save]: after this code has executed,
+ all callee-save registers contain the same values they had at
+ function entry. *)
+
+Lemma restore_int_callee_save_correct_rec:
+ forall sp parent k fr m rs0 l ls rs,
+ incl l int_callee_save_regs ->
+ list_norepet l ->
+ agree ls rs fr parent rs0 ->
+ exists ls', exists rs',
+ Machabstr.exec_instrs tge tf sp parent
+ (List.fold_right (restore_int_callee_save fe) k l) rs fr m
+ k rs' fr m
+ /\ (forall r, In r l -> rs' r = rs0 r)
+ /\ (forall r, ~(In r l) -> rs' r = rs r)
+ /\ agree ls' rs' fr parent rs0.
+Proof.
+ induction l.
+ (* base case *)
+ intros. simpl fold_right. exists ls. exists rs.
+ split. apply Machabstr.exec_refl.
+ split. intros. elim H2.
+ split. auto. auto.
+ (* inductive case *)
+ intros. simpl fold_right.
+ set (k1 := fold_right (restore_int_callee_save fe) k l) in *.
+ assert (R0: In a int_callee_save_regs). apply H; auto with coqlib.
+ assert (R1: incl l int_callee_save_regs). eauto with coqlib.
+ assert (R2: list_norepet l). inversion H0; auto.
+ unfold restore_int_callee_save.
+ case (zlt (index_int_callee_save a) (fe_num_int_callee_save fe));
+ intro;
+ unfold fe_num_int_callee_save, fe, make_env in z.
+ set (ls1 := Locmap.set (R a) (rs0 a) ls).
+ set (rs1 := Regmap.set a (rs0 a) rs).
+ assert (R3: agree ls1 rs1 fr parent rs0).
+ unfold ls1, rs1. apply agree_set_reg. auto.
+ red. rewrite int_callee_save_type. exact z.
+ apply H. auto with coqlib.
+ generalize (IHl ls1 rs1 R1 R2 R3).
+ intros [ls' [rs' [A [B [C D]]]]].
+ exists ls'. exists rs'.
+ split. apply Machabstr.exec_trans with k1 rs1 fr m.
+ unfold rs1; apply exec_Mgetstack'; eauto with stacking.
+ apply get_slot_index; eauto with stacking.
+ symmetry. eauto with stacking.
+ eauto with stacking.
+ split. intros. elim H2; intros.
+ subst r. rewrite C. unfold rs1. apply Regmap.gss. inversion H0; auto.
+ auto.
+ split. intros. simpl in H2. rewrite C. unfold rs1. apply Regmap.gso.
+ apply sym_not_eq; tauto. tauto.
+ assumption.
+ (* no load takes place *)
+ generalize (IHl ls rs R1 R2 H1).
+ intros [ls' [rs' [A [B [C D]]]]].
+ exists ls'; exists rs'. split. assumption.
+ split. intros. elim H2; intros.
+ subst r. apply (agree_unused_reg _ _ _ _ _ D).
+ unfold mreg_bounded. rewrite int_callee_save_type; auto.
+ auto.
+ split. intros. simpl in H2. apply C. tauto.
+ assumption.
+Qed.
+
+Lemma restore_int_callee_save_correct:
+ forall sp parent k fr m rs0 ls rs,
+ agree ls rs fr parent rs0 ->
+ exists ls', exists rs',
+ Machabstr.exec_instrs tge tf sp parent
+ (List.fold_right (restore_int_callee_save fe) k int_callee_save_regs) rs fr m
+ k rs' fr m
+ /\ (forall r, In r int_callee_save_regs -> rs' r = rs0 r)
+ /\ (forall r, ~(In r int_callee_save_regs) -> rs' r = rs r)
+ /\ agree ls' rs' fr parent rs0.
+Proof.
+ intros. apply restore_int_callee_save_correct_rec with ls.
+ apply incl_refl. apply int_callee_save_norepet. auto.
+Qed.
+
+Lemma restore_float_callee_save_correct_rec:
+ forall sp parent k fr m rs0 l ls rs,
+ incl l float_callee_save_regs ->
+ list_norepet l ->
+ agree ls rs fr parent rs0 ->
+ exists ls', exists rs',
+ Machabstr.exec_instrs tge tf sp parent
+ (List.fold_right (restore_float_callee_save fe) k l) rs fr m
+ k rs' fr m
+ /\ (forall r, In r l -> rs' r = rs0 r)
+ /\ (forall r, ~(In r l) -> rs' r = rs r)
+ /\ agree ls' rs' fr parent rs0.
+Proof.
+ induction l.
+ (* base case *)
+ intros. simpl fold_right. exists ls. exists rs.
+ split. apply Machabstr.exec_refl.
+ split. intros. elim H2.
+ split. auto. auto.
+ (* inductive case *)
+ intros. simpl fold_right.
+ set (k1 := fold_right (restore_float_callee_save fe) k l) in *.
+ assert (R0: In a float_callee_save_regs). apply H; auto with coqlib.
+ assert (R1: incl l float_callee_save_regs). eauto with coqlib.
+ assert (R2: list_norepet l). inversion H0; auto.
+ unfold restore_float_callee_save.
+ case (zlt (index_float_callee_save a) (fe_num_float_callee_save fe));
+ intro;
+ unfold fe_num_float_callee_save, fe, make_env in z.
+ set (ls1 := Locmap.set (R a) (rs0 a) ls).
+ set (rs1 := Regmap.set a (rs0 a) rs).
+ assert (R3: agree ls1 rs1 fr parent rs0).
+ unfold ls1, rs1. apply agree_set_reg. auto.
+ red. rewrite float_callee_save_type. exact z.
+ apply H. auto with coqlib.
+ generalize (IHl ls1 rs1 R1 R2 R3).
+ intros [ls' [rs' [A [B [C D]]]]].
+ exists ls'. exists rs'.
+ split. apply Machabstr.exec_trans with k1 rs1 fr m.
+ unfold rs1; apply exec_Mgetstack'; eauto with stacking.
+ apply get_slot_index; eauto with stacking.
+ symmetry. eauto with stacking.
+ exact A.
+ split. intros. elim H2; intros.
+ subst r. rewrite C. unfold rs1. apply Regmap.gss. inversion H0; auto.
+ auto.
+ split. intros. simpl in H2. rewrite C. unfold rs1. apply Regmap.gso.
+ apply sym_not_eq; tauto. tauto.
+ assumption.
+ (* no load takes place *)
+ generalize (IHl ls rs R1 R2 H1).
+ intros [ls' [rs' [A [B [C D]]]]].
+ exists ls'; exists rs'. split. assumption.
+ split. intros. elim H2; intros.
+ subst r. apply (agree_unused_reg _ _ _ _ _ D).
+ unfold mreg_bounded. rewrite float_callee_save_type; auto.
+ auto.
+ split. intros. simpl in H2. apply C. tauto.
+ assumption.
+Qed.
+
+Lemma restore_float_callee_save_correct:
+ forall sp parent k fr m rs0 ls rs,
+ agree ls rs fr parent rs0 ->
+ exists ls', exists rs',
+ Machabstr.exec_instrs tge tf sp parent
+ (List.fold_right (restore_float_callee_save fe) k float_callee_save_regs) rs fr m
+ k rs' fr m
+ /\ (forall r, In r float_callee_save_regs -> rs' r = rs0 r)
+ /\ (forall r, ~(In r float_callee_save_regs) -> rs' r = rs r)
+ /\ agree ls' rs' fr parent rs0.
+Proof.
+ intros. apply restore_float_callee_save_correct_rec with ls.
+ apply incl_refl. apply float_callee_save_norepet. auto.
+Qed.
+
+Lemma restore_callee_save_correct:
+ forall sp parent k fr m rs0 ls rs,
+ agree ls rs fr parent rs0 ->
+ exists rs',
+ Machabstr.exec_instrs tge tf sp parent
+ (restore_callee_save fe k) rs fr m
+ k rs' fr m
+ /\ (forall r,
+ In r int_callee_save_regs \/ In r float_callee_save_regs ->
+ rs' r = rs0 r)
+ /\ (forall r,
+ ~(In r int_callee_save_regs) ->
+ ~(In r float_callee_save_regs) ->
+ rs' r = rs r).
+Proof.
+ intros. unfold restore_callee_save.
+ generalize (restore_int_callee_save_correct sp parent
+ (fold_right (restore_float_callee_save fe) k float_callee_save_regs)
+ fr m rs0 ls rs H).
+ intros [ls1 [rs1 [A [B [C D]]]]].
+ generalize (restore_float_callee_save_correct sp parent
+ k fr m rs0 ls1 rs1 D).
+ intros [ls2 [rs2 [P [Q [R S]]]]].
+ exists rs2. split. eapply Machabstr.exec_trans. eexact A. exact P.
+ split. intros. elim H0; intros.
+ rewrite R. apply B. auto. apply list_disjoint_notin with int_callee_save_regs.
+ apply int_float_callee_save_disjoint. auto.
+ apply Q. auto.
+ intros. rewrite R. apply C. auto. auto.
+Qed.
+
+End FRAME_PROPERTIES.
+
+(** * Semantic preservation *)
+
+(** Preservation of code labels through the translation. *)
+
+Section LABELS.
+
+Remark find_label_fold_right:
+ forall (A: Set) (fn: A -> Mach.code -> Mach.code) lbl,
+ (forall x k, Mach.find_label lbl (fn x k) = Mach.find_label lbl k) -> forall (args: list A) k,
+ Mach.find_label lbl (List.fold_right fn k args) = Mach.find_label lbl k.
+Proof.
+ induction args; simpl. auto.
+ intros. rewrite H. auto.
+Qed.
+
+Remark find_label_save_callee_save:
+ forall fe lbl k,
+ Mach.find_label lbl (save_callee_save fe k) = Mach.find_label lbl k.
+Proof.
+ intros. unfold save_callee_save.
+ repeat rewrite find_label_fold_right. reflexivity.
+ intros. unfold save_float_callee_save.
+ case (zlt (index_float_callee_save x) (fe_num_float_callee_save fe));
+ intro; reflexivity.
+ intros. unfold save_int_callee_save.
+ case (zlt (index_int_callee_save x) (fe_num_int_callee_save fe));
+ intro; reflexivity.
+Qed.
+
+Remark find_label_restore_callee_save:
+ forall fe lbl k,
+ Mach.find_label lbl (restore_callee_save fe k) = Mach.find_label lbl k.
+Proof.
+ intros. unfold restore_callee_save.
+ repeat rewrite find_label_fold_right. reflexivity.
+ intros. unfold restore_float_callee_save.
+ case (zlt (index_float_callee_save x) (fe_num_float_callee_save fe));
+ intro; reflexivity.
+ intros. unfold restore_int_callee_save.
+ case (zlt (index_int_callee_save x) (fe_num_int_callee_save fe));
+ intro; reflexivity.
+Qed.
+
+Lemma find_label_transl_code:
+ forall fe lbl c,
+ Mach.find_label lbl (transl_code fe c) =
+ option_map (transl_code fe) (Linear.find_label lbl c).
+Proof.
+ induction c; simpl; intros.
+ auto.
+ destruct a; unfold transl_instr; auto.
+ destruct s; simpl; auto.
+ destruct s; simpl; auto.
+ simpl. case (peq lbl l); intro. reflexivity. auto.
+ rewrite find_label_restore_callee_save. auto.
+Qed.
+
+Lemma transl_find_label:
+ forall f tf lbl c,
+ transf_function f = Some tf ->
+ Linear.find_label lbl f.(Linear.fn_code) = Some c ->
+ Mach.find_label lbl tf.(Mach.fn_code) =
+ Some (transl_code (make_env (function_bounds f)) c).
+Proof.
+ intros. rewrite (unfold_transf_function _ _ H). simpl.
+ unfold transl_body. rewrite find_label_save_callee_save.
+ rewrite find_label_transl_code. rewrite H0. reflexivity.
+Qed.
+
+End LABELS.
+
+(** Code inclusion property for Linear executions. *)
+
+Lemma find_label_incl:
+ forall lbl c c',
+ Linear.find_label lbl c = Some c' -> incl c' c.
+Proof.
+ induction c; simpl.
+ intros; discriminate.
+ intro c'. case (is_label lbl a); intros.
+ injection H; intro; subst c'. red; intros; auto with coqlib.
+ apply incl_tl. auto.
+Qed.
+
+Lemma exec_instr_incl:
+ forall f sp c1 ls1 m1 c2 ls2 m2,
+ Linear.exec_instr ge f sp c1 ls1 m1 c2 ls2 m2 ->
+ incl c1 f.(fn_code) ->
+ incl c2 f.(fn_code).
+Proof.
+ induction 1; intros; eauto with coqlib.
+ eapply find_label_incl; eauto.
+ eapply find_label_incl; eauto.
+Qed.
+
+Lemma exec_instrs_incl:
+ forall f sp c1 ls1 m1 c2 ls2 m2,
+ Linear.exec_instrs ge f sp c1 ls1 m1 c2 ls2 m2 ->
+ incl c1 f.(fn_code) ->
+ incl c2 f.(fn_code).
+Proof.
+ induction 1; intros; auto.
+ eapply exec_instr_incl; eauto.
+Qed.
+
+(** Preservation / translation of global symbols and functions. *)
+
+Lemma symbols_preserved:
+ forall id, Genv.find_symbol tge id = Genv.find_symbol ge id.
+Proof.
+ intros. unfold ge, tge.
+ apply Genv.find_symbol_transf_partial with transf_function.
+ exact TRANSF.
+Qed.
+
+Lemma functions_translated:
+ forall f v,
+ Genv.find_funct ge v = Some f ->
+ exists tf,
+ Genv.find_funct tge v = Some tf /\ transf_function f = Some tf.
+Proof.
+ intros.
+ generalize (Genv.find_funct_transf_partial transf_function TRANSF H).
+ case (transf_function f).
+ intros tf [A B]. exists tf. tauto.
+ intros. tauto.
+Qed.
+
+Lemma function_ptr_translated:
+ forall f v,
+ Genv.find_funct_ptr ge v = Some f ->
+ exists tf,
+ Genv.find_funct_ptr tge v = Some tf /\ transf_function f = Some tf.
+Proof.
+ intros.
+ generalize (Genv.find_funct_ptr_transf_partial transf_function TRANSF H).
+ case (transf_function f).
+ intros tf [A B]. exists tf. tauto.
+ intros. tauto.
+Qed.
+
+(** Correctness of stack pointer relocation in operations and
+ addressing modes. *)
+
+Definition shift_sp (tf: Mach.function) (sp: val) :=
+ Val.add sp (Vint (Int.repr (-tf.(fn_framesize)))).
+
+Remark shift_offset_sp:
+ forall f tf sp n v,
+ transf_function f = Some tf ->
+ offset_sp sp n = Some v ->
+ offset_sp (shift_sp tf sp)
+ (Int.add (Int.repr (fe_size (make_env (function_bounds f)))) n) = Some v.
+Proof.
+ intros. destruct sp; try discriminate.
+ unfold offset_sp in *.
+ unfold shift_sp.
+ rewrite (unfold_transf_function _ _ H). unfold fn_framesize.
+ unfold Val.add. rewrite <- Int.neg_repr.
+ set (p := Int.repr (fe_size (make_env (function_bounds f)))).
+ inversion H0. decEq. decEq.
+ rewrite Int.add_assoc. decEq.
+ rewrite <- Int.add_assoc.
+ rewrite (Int.add_commut (Int.neg p) p). rewrite Int.add_neg_zero.
+ rewrite Int.add_commut. apply Int.add_zero.
+Qed.
+
+Lemma shift_eval_operation:
+ forall f tf sp op args v,
+ transf_function f = Some tf ->
+ eval_operation ge sp op args = Some v ->
+ eval_operation tge (shift_sp tf sp)
+ (transl_op (make_env (function_bounds f)) op) args =
+ Some v.
+Proof.
+ intros until v. destruct op; intros; auto.
+ simpl in *. rewrite symbols_preserved. auto.
+ destruct args; auto. unfold eval_operation in *. unfold transl_op.
+ apply shift_offset_sp; auto.
+Qed.
+
+Lemma shift_eval_addressing:
+ forall f tf sp addr args v,
+ transf_function f = Some tf ->
+ eval_addressing ge sp addr args = Some v ->
+ eval_addressing tge (shift_sp tf sp)
+ (transl_addr (make_env (function_bounds f)) addr) args =
+ Some v.
+Proof.
+ intros. destruct addr; auto.
+ simpl. rewrite symbols_preserved. auto.
+ simpl. rewrite symbols_preserved. auto.
+ unfold transl_addr, eval_addressing in *.
+ destruct args; try discriminate.
+ apply shift_offset_sp; auto.
+Qed.
+
+(** The proof of semantic preservation relies on simulation diagrams
+ of the following form:
+<<
+ c, ls, m ------------------- T(c), rs, fr, m
+ | |
+ | |
+ v v
+ c', ls', m' ---------------- T(c'), rs', fr', m'
+>>
+ The left vertical arrow represents a transition in the
+ original Linear code. The top horizontal bar captures three preconditions:
+- Agreement between [ls] on the Linear side and [rs], [fr], [rs0]
+ on the Mach side.
+- Inclusion between [c] and the code of the function [f] being
+ translated.
+- Well-typedness of [f].
+
+ In conclusion, we want to prove the existence of [rs'], [fr'], [m']
+ that satisfies the right arrow (zero, one or several transitions in
+ the generated Mach code) and the postcondition (agreement between
+ [ls'] and [rs'], [fr'], [rs0]).
+
+ As usual, we capture these diagrams as predicates parameterized
+ by the transition in the original Linear code. *)
+
+Definition exec_instr_prop
+ (f: function) (sp: val)
+ (c: code) (ls: locset) (m: mem)
+ (c': code) (ls': locset) (m': mem) :=
+ forall tf rs fr parent rs0
+ (TRANSL: transf_function f = Some tf)
+ (WTF: wt_function f)
+ (AG: agree f ls rs fr parent rs0)
+ (INCL: incl c f.(fn_code)),
+ exists rs', exists fr',
+ Machabstr.exec_instrs tge tf (shift_sp tf sp) parent
+ (transl_code (make_env (function_bounds f)) c) rs fr m
+ (transl_code (make_env (function_bounds f)) c') rs' fr' m'
+ /\ agree f ls' rs' fr' parent rs0.
+
+(** The simulation property for function calls has different preconditions
+ (a slightly weaker notion of agreement between [ls] and the initial
+ register values [rs] and caller's frame [parent]) and different
+ postconditions (preservation of callee-save registers). *)
+
+Definition exec_function_prop
+ (f: function)
+ (ls: locset) (m: mem)
+ (ls': locset) (m': mem) :=
+ forall tf rs parent
+ (TRANSL: transf_function f = Some tf)
+ (WTF: wt_function f)
+ (AG1: forall r, rs r = ls (R r))
+ (AG2: forall ofs ty,
+ 6 <= ofs ->
+ ofs + typesize ty <= size_arguments f.(fn_sig) ->
+ get_slot parent ty (Int.signed (Int.repr (4 * ofs))) (ls (S (Outgoing ofs ty)))),
+ exists rs',
+ Machabstr.exec_function tge tf parent rs m rs' m'
+ /\ (forall r,
+ In (R r) temporaries \/ In (R r) destroyed_at_call ->
+ rs' r = ls' (R r))
+ /\ (forall r,
+ In r int_callee_save_regs \/ In r float_callee_save_regs ->
+ rs' r = rs r).
+
+Hypothesis wt_prog: wt_program prog.
+
+Lemma transf_function_correct:
+ forall f ls m ls' m',
+ Linear.exec_function ge f ls m ls' m' ->
+ exec_function_prop f ls m ls' m'.
+Proof.
+ assert (RED: forall f i c,
+ transl_code (make_env (function_bounds f)) (i :: c) =
+ transl_instr (make_env (function_bounds f)) i
+ (transl_code (make_env (function_bounds f)) c)).
+ intros. reflexivity.
+ apply (Linear.exec_function_ind3 ge exec_instr_prop
+ exec_instr_prop exec_function_prop);
+ intros; red; intros;
+ try rewrite RED;
+ try (generalize (WTF _ (INCL _ (in_eq _ _))); intro WTI);
+ unfold transl_instr.
+
+ (* Lgetstack *)
+ inversion WTI. exists (rs0#r <- (rs (S sl))); exists fr.
+ split. destruct sl.
+ (* Lgetstack, local *)
+ apply exec_Mgetstack'; auto.
+ apply get_slot_index. apply index_local_valid. auto.
+ eapply agree_size; eauto. reflexivity.
+ eapply agree_locals; eauto.
+ (* Lgetstack, incoming *)
+ apply Machabstr.exec_one; constructor.
+ unfold offset_of_index. eapply agree_incoming; eauto.
+ (* Lgetstack, outgoing *)
+ apply exec_Mgetstack'; auto.
+ apply get_slot_index. apply index_arg_valid. auto.
+ eapply agree_size; eauto. reflexivity.
+ eapply agree_outgoing; eauto.
+ (* Lgetstack, common *)
+ apply agree_set_reg; auto.
+
+ (* Lsetstack *)
+ inversion WTI. destruct sl.
+ (* Lsetstack, local *)
+ generalize (agree_set_local _ _ _ _ _ _ (rs0 r) _ _ AG H3).
+ intros [fr' [SET AG']].
+ exists rs0; exists fr'. split.
+ apply exec_Msetstack'; auto.
+ replace (rs (R r)) with (rs0 r). auto.
+ symmetry. eapply agree_reg; eauto.
+ (* Lsetstack, incoming *)
+ contradiction.
+ (* Lsetstack, outgoing *)
+ generalize (agree_set_outgoing _ _ _ _ _ _ (rs0 r) _ _ AG H3).
+ intros [fr' [SET AG']].
+ exists rs0; exists fr'. split.
+ apply exec_Msetstack'; auto.
+ replace (rs (R r)) with (rs0 r). auto.
+ symmetry. eapply agree_reg; eauto.
+
+ (* Lop *)
+ assert (mreg_bounded f res). inversion WTI; auto.
+ exists (rs0#res <- v); exists fr. split.
+ apply Machabstr.exec_one. constructor.
+ apply shift_eval_operation. auto.
+ change mreg with RegEq.t.
+ rewrite (agree_eval_regs _ _ _ _ _ _ args AG). auto.
+ apply agree_set_reg; auto.
+
+ (* Lload *)
+ inversion WTI. exists (rs0#dst <- v); exists fr. split.
+ apply Machabstr.exec_one; econstructor.
+ apply shift_eval_addressing; auto.
+ change mreg with RegEq.t.
+ rewrite (agree_eval_regs _ _ _ _ _ _ args AG). eauto.
+ auto.
+ apply agree_set_reg; auto.
+
+ (* Lstore *)
+ exists rs0; exists fr. split.
+ apply Machabstr.exec_one; econstructor.
+ apply shift_eval_addressing; auto.
+ change mreg with RegEq.t.
+ rewrite (agree_eval_regs _ _ _ _ _ _ args AG). eauto.
+ rewrite (agree_eval_reg _ _ _ _ _ _ src AG). auto.
+ auto.
+
+ (* Lcall *)
+ inversion WTI.
+ assert (WTF': wt_function f').
+ destruct ros; simpl in H.
+ apply (Genv.find_funct_prop wt_function wt_prog H).
+ destruct (Genv.find_symbol ge i); try discriminate.
+ apply (Genv.find_funct_ptr_prop wt_function wt_prog H).
+ assert (TR: exists tf', Mach.find_function tge ros rs0 = Some tf'
+ /\ transf_function f' = Some tf').
+ destruct ros; simpl in H; simpl.
+ eapply functions_translated.
+ rewrite (agree_eval_reg _ _ _ _ _ _ m0 AG). auto.
+ rewrite symbols_preserved.
+ destruct (Genv.find_symbol ge i); try discriminate.
+ apply function_ptr_translated; auto.
+ elim TR; intros tf' [FIND' TRANSL']; clear TR.
+ assert (AG1: forall r, rs0 r = rs (R r)).
+ intro. symmetry. eapply agree_reg; eauto.
+ assert (AG2: forall ofs ty,
+ 6 <= ofs ->
+ ofs + typesize ty <= size_arguments f'.(fn_sig) ->
+ get_slot fr ty (Int.signed (Int.repr (4 * ofs))) (rs (S (Outgoing ofs ty)))).
+ intros.
+ assert (slot_bounded f (Outgoing ofs ty)).
+ red. rewrite <- H0 in H8. omega.
+ change (4 * ofs) with (offset_of_index (make_env (function_bounds f)) (FI_arg ofs ty)).
+ rewrite (offset_of_index_no_overflow f tf); auto.
+ apply get_slot_index. apply index_arg_valid. auto.
+ eapply agree_size; eauto. reflexivity.
+ eapply agree_outgoing; eauto.
+ generalize (H2 tf' rs0 fr TRANSL' WTF' AG1 AG2).
+ intros [rs2 [EXF [REGS1 REGS2]]].
+ exists rs2; exists fr. split.
+ apply Machabstr.exec_one; apply Machabstr.exec_Mcall with tf'; auto.
+ apply agree_return_regs with rs0; auto.
+
+ (* Llabel *)
+ exists rs0; exists fr. split.
+ apply Machabstr.exec_one; apply Machabstr.exec_Mlabel.
+ auto.
+
+ (* Lgoto *)
+ exists rs0; exists fr. split.
+ apply Machabstr.exec_one; apply Machabstr.exec_Mgoto.
+ apply transl_find_label; auto.
+ auto.
+
+ (* Lcond, true *)
+ exists rs0; exists fr. split.
+ apply Machabstr.exec_one; apply Machabstr.exec_Mcond_true.
+ rewrite <- (agree_eval_regs _ _ _ _ _ _ args AG) in H; auto.
+ apply transl_find_label; auto.
+ auto.
+
+ (* Lcond, false *)
+ exists rs0; exists fr. split.
+ apply Machabstr.exec_one; apply Machabstr.exec_Mcond_false.
+ rewrite <- (agree_eval_regs _ _ _ _ _ _ args AG) in H; auto.
+ auto.
+
+ (* refl *)
+ exists rs0; exists fr. split. apply Machabstr.exec_refl. auto.
+
+ (* one *)
+ apply H0; auto.
+
+ (* trans *)
+ generalize (H0 tf rs fr parent rs0 TRANSL WTF AG INCL).
+ intros [rs' [fr' [A B]]].
+ assert (INCL': incl b2 (fn_code f)). eapply exec_instrs_incl; eauto.
+ generalize (H2 tf rs' fr' parent rs0 TRANSL WTF B INCL').
+ intros [rs'' [fr'' [C D]]].
+ exists rs''; exists fr''. split.
+ eapply Machabstr.exec_trans. eexact A. eexact C.
+ auto.
+
+ (* function *)
+ assert (X: forall link ra,
+ exists rs' : regset,
+ Machabstr.exec_function_body tge tf parent link ra rs0 m rs' (free m2 stk) /\
+ (forall r : mreg,
+ In (R r) temporaries \/ In (R r) destroyed_at_call -> rs' r = rs2 (R r)) /\
+ (forall r : mreg,
+ In r int_callee_save_regs \/ In r float_callee_save_regs -> rs' r = rs0 r)).
+ intros.
+ set (sp := Vptr stk Int.zero) in *.
+ set (tsp := shift_sp tf sp).
+ set (fe := make_env (function_bounds f)).
+ assert (low (init_frame tf) = -fe.(fe_size)).
+ simpl low. rewrite (unfold_transf_function _ _ TRANSL).
+ reflexivity.
+ assert (exists fr1, set_slot (init_frame tf) Tint 0 link fr1).
+ apply set_slot_ok. reflexivity. omega. rewrite H2. generalize (size_pos f).
+ unfold fe. simpl typesize. omega.
+ elim H3; intros fr1 SET1; clear H3.
+ assert (high fr1 = 0).
+ inversion SET1. reflexivity.
+ assert (low fr1 = -fe.(fe_size)).
+ inversion SET1. rewrite <- H2. reflexivity.
+ assert (exists fr2, set_slot fr1 Tint 4 ra fr2).
+ apply set_slot_ok. auto. omega. rewrite H4. generalize (size_pos f).
+ unfold fe. simpl typesize. omega.
+ elim H5; intros fr2 SET2; clear H5.
+ assert (high fr2 = 0).
+ inversion SET2. simpl. auto.
+ assert (low fr2 = -fe.(fe_size)).
+ inversion SET2. rewrite <- H4. reflexivity.
+ assert (UNDEF: forall idx, index_valid f idx -> index_val f idx fr2 = Vundef).
+ intros.
+ assert (get_slot fr2 (type_of_index idx) (offset_of_index fe idx) Vundef).
+ generalize (offset_of_index_valid _ _ H7). fold fe. intros [XX YY].
+ eapply slot_gso; eauto.
+ eapply slot_gso; eauto.
+ apply slot_gi. omega. omega.
+ simpl typesize. omega. simpl typesize. omega.
+ inversion H8. symmetry. exact H11.
+ generalize (save_callee_save_correct f tf TRANSL
+ tsp parent
+ (transl_code (make_env (function_bounds f)) f.(fn_code))
+ rs0 fr2 m1 rs AG1 AG2 H5 H6 UNDEF).
+ intros [fr [EXP AG]].
+ generalize (H1 tf rs0 fr parent rs0 TRANSL WTF AG (incl_refl _)).
+ intros [rs' [fr' [EXB AG']]].
+ generalize (restore_callee_save_correct f tf TRANSL tsp parent
+ (Mreturn :: transl_code (make_env (function_bounds f)) b)
+ fr' m2 rs0 rs2 rs' AG').
+ intros [rs'' [EXX [REGS1 REGS2]]].
+ exists rs''. split. eapply Machabstr.exec_funct_body.
+ rewrite (unfold_transf_function f tf TRANSL); eexact H.
+ eexact SET1. eexact SET2.
+ replace (Mach.fn_code tf) with
+ (transl_body f (make_env (function_bounds f))).
+ replace (Vptr stk (Int.repr (- fn_framesize tf))) with tsp.
+ eapply Machabstr.exec_trans. eexact EXP.
+ eapply Machabstr.exec_trans. eexact EXB. eexact EXX.
+ unfold tsp, shift_sp, sp. unfold Val.add.
+ rewrite Int.add_commut. rewrite Int.add_zero. auto.
+ rewrite (unfold_transf_function f tf TRANSL). simpl. auto.
+ split. intros. rewrite REGS2. symmetry; eapply agree_reg; eauto.
+ apply int_callee_save_not_destroyed; auto.
+ apply float_callee_save_not_destroyed; auto.
+ auto.
+ generalize (X Vzero Vzero). intros [rs' [EX [REGS1 REGS2]]].
+ exists rs'. split.
+ constructor. intros.
+ generalize (X link ra). intros [rs'' [EX' [REGS1' REGS2']]].
+ assert (rs' = rs'').
+ apply (@Regmap.exten val). intro r.
+ elim (register_classification r); intro.
+ rewrite REGS1'. apply REGS1. auto. auto.
+ rewrite REGS2'. apply REGS2. auto. auto.
+ rewrite H4. auto.
+ split; auto.
+Qed.
+
+End PRESERVATION.
+
+Theorem transl_program_correct:
+ forall (p: Linear.program) (tp: Mach.program) (r: val),
+ wt_program p ->
+ transf_program p = Some tp ->
+ Linear.exec_program p r ->
+ Machabstr.exec_program tp r.
+Proof.
+ intros p tp r WTP TRANSF
+ [fptr [f [ls' [m [FINDSYMB [FINDFUNC [SIG [EXEC RES]]]]]]]].
+ assert (WTF: wt_function f).
+ apply (Genv.find_funct_ptr_prop wt_function WTP FINDFUNC).
+ set (ls := Locmap.init Vundef) in *.
+ set (rs := Regmap.init Vundef).
+ set (fr := empty_frame).
+ assert (AG1: forall r, rs r = ls (R r)).
+ intros; reflexivity.
+ assert (AG2: forall ofs ty,
+ 6 <= ofs ->
+ ofs + typesize ty <= size_arguments f.(fn_sig) ->
+ get_slot fr ty (Int.signed (Int.repr (4 * ofs))) (ls (S (Outgoing ofs ty)))).
+ rewrite SIG. unfold size_arguments, sig_args, size_arguments_rec.
+ intros. generalize (typesize_pos ty).
+ intro. omegaContradiction.
+ generalize (function_ptr_translated p tp TRANSF f _ FINDFUNC).
+ intros [tf [TFIND TRANSL]].
+ generalize (transf_function_correct p tp TRANSF WTP _ _ _ _ _ EXEC
+ tf rs fr TRANSL WTF AG1 AG2).
+ intros [rs' [A [B C]]].
+ red. exists fptr; exists tf; exists rs'; exists m.
+ split. rewrite (symbols_preserved p tp TRANSF).
+ rewrite (transform_partial_program_main transf_function p TRANSF).
+ assumption.
+ split. assumption.
+ split. rewrite (unfold_transf_function f tf TRANSL); simpl.
+ assumption.
+ split. replace (Genv.init_mem tp) with (Genv.init_mem p).
+ exact A. symmetry. apply Genv.init_mem_transf_partial with transf_function.
+ exact TRANSF.
+ rewrite <- RES. rewrite (unfold_transf_function f tf TRANSL); simpl.
+ apply B. right. apply loc_result_acceptable.
+Qed.
diff --git a/backend/Stackingtyping.v b/backend/Stackingtyping.v
new file mode 100644
index 0000000..85d1922
--- /dev/null
+++ b/backend/Stackingtyping.v
@@ -0,0 +1,222 @@
+(** Type preservation for the [Stacking] pass. *)
+
+Require Import Coqlib.
+Require Import Maps.
+Require Import Integers.
+Require Import AST.
+Require Import Op.
+Require Import Locations.
+Require Import Conventions.
+Require Import Linear.
+Require Import Lineartyping.
+Require Import Mach.
+Require Import Machtyping.
+Require Import Stacking.
+Require Import Stackingproof.
+
+(** We show that the Mach code generated by the [Stacking] pass
+ is well-typed if the original Linear code is. *)
+
+Definition wt_instrs (k: Mach.code) : Prop :=
+ forall i, In i k -> wt_instr i.
+
+Lemma wt_instrs_cons:
+ forall i k,
+ wt_instr i -> wt_instrs k -> wt_instrs (i :: k).
+Proof.
+ unfold wt_instrs; intros. elim H1; intro.
+ subst i0; auto. auto.
+Qed.
+
+Section TRANSL_FUNCTION.
+
+Variable f: Linear.function.
+Let fe := make_env (function_bounds f).
+Variable tf: Mach.function.
+Hypothesis TRANSF_F: transf_function f = Some tf.
+
+Lemma wt_Msetstack':
+ forall idx ty r,
+ mreg_type r = ty -> index_valid f idx ->
+ wt_instr (Msetstack r (Int.repr (offset_of_index fe idx)) ty).
+Proof.
+ intros. constructor. auto.
+ unfold fe. rewrite (offset_of_index_no_overflow f tf TRANSF_F); auto.
+ generalize (offset_of_index_valid f idx H0). tauto.
+Qed.
+
+Lemma wt_fold_right:
+ forall (A: Set) (f: A -> code -> code) (k: code) (l: list A),
+ (forall x k', In x l -> wt_instrs k' -> wt_instrs (f x k')) ->
+ wt_instrs k ->
+ wt_instrs (List.fold_right f k l).
+Proof.
+ induction l; intros; simpl.
+ auto.
+ apply H. apply in_eq. apply IHl.
+ intros. apply H. auto with coqlib. auto.
+ auto.
+Qed.
+
+Lemma wt_save_int_callee_save:
+ forall cs k,
+ In cs int_callee_save_regs -> wt_instrs k ->
+ wt_instrs (save_int_callee_save fe cs k).
+Proof.
+ intros. unfold save_int_callee_save.
+ case (zlt (index_int_callee_save cs) (fe_num_int_callee_save fe)); intro.
+ apply wt_instrs_cons; auto.
+ apply wt_Msetstack'. apply int_callee_save_type; auto.
+ apply index_saved_int_valid. auto. exact z.
+ auto.
+Qed.
+
+Lemma wt_save_float_callee_save:
+ forall cs k,
+ In cs float_callee_save_regs -> wt_instrs k ->
+ wt_instrs (save_float_callee_save fe cs k).
+Proof.
+ intros. unfold save_float_callee_save.
+ case (zlt (index_float_callee_save cs) (fe_num_float_callee_save fe)); intro.
+ apply wt_instrs_cons; auto.
+ apply wt_Msetstack'. apply float_callee_save_type; auto.
+ apply index_saved_float_valid. auto. exact z.
+ auto.
+Qed.
+
+Lemma wt_restore_int_callee_save:
+ forall cs k,
+ In cs int_callee_save_regs -> wt_instrs k ->
+ wt_instrs (restore_int_callee_save fe cs k).
+Proof.
+ intros. unfold restore_int_callee_save.
+ case (zlt (index_int_callee_save cs) (fe_num_int_callee_save fe)); intro.
+ apply wt_instrs_cons; auto.
+ constructor. apply int_callee_save_type; auto.
+ auto.
+Qed.
+
+Lemma wt_restore_float_callee_save:
+ forall cs k,
+ In cs float_callee_save_regs -> wt_instrs k ->
+ wt_instrs (restore_float_callee_save fe cs k).
+Proof.
+ intros. unfold restore_float_callee_save.
+ case (zlt (index_float_callee_save cs) (fe_num_float_callee_save fe)); intro.
+ apply wt_instrs_cons; auto.
+ constructor. apply float_callee_save_type; auto.
+ auto.
+Qed.
+
+Lemma wt_save_callee_save:
+ forall k,
+ wt_instrs k -> wt_instrs (save_callee_save fe k).
+Proof.
+ intros. unfold save_callee_save.
+ apply wt_fold_right. exact wt_save_int_callee_save.
+ apply wt_fold_right. exact wt_save_float_callee_save.
+ auto.
+Qed.
+
+Lemma wt_restore_callee_save:
+ forall k,
+ wt_instrs k -> wt_instrs (restore_callee_save fe k).
+Proof.
+ intros. unfold restore_callee_save.
+ apply wt_fold_right. exact wt_restore_int_callee_save.
+ apply wt_fold_right. exact wt_restore_float_callee_save.
+ auto.
+Qed.
+
+Lemma wt_transl_instr:
+ forall instr k,
+ Lineartyping.wt_instr f instr ->
+ wt_instrs k ->
+ wt_instrs (transl_instr fe instr k).
+Proof.
+ intros. destruct instr; unfold transl_instr; inversion H.
+ (* getstack *)
+ destruct s; simpl in H3; apply wt_instrs_cons; auto;
+ constructor; auto.
+ (* setstack *)
+ destruct s; simpl in H3; simpl in H4.
+ apply wt_instrs_cons; auto. apply wt_Msetstack'. auto.
+ apply index_local_valid. auto.
+ auto.
+ apply wt_instrs_cons; auto. apply wt_Msetstack'. auto.
+ apply index_arg_valid. auto.
+ (* op, move *)
+ simpl. apply wt_instrs_cons. constructor; auto. auto.
+ (* op, undef *)
+ simpl. apply wt_instrs_cons. constructor. auto.
+ (* op, others *)
+ apply wt_instrs_cons; auto.
+ constructor.
+ destruct o; simpl; congruence.
+ destruct o; simpl; congruence.
+ rewrite H6. destruct o; reflexivity || congruence.
+ (* load *)
+ apply wt_instrs_cons; auto.
+ constructor; auto.
+ rewrite H4. destruct a; reflexivity.
+ (* store *)
+ apply wt_instrs_cons; auto.
+ constructor; auto.
+ rewrite H3. destruct a; reflexivity.
+ (* call *)
+ apply wt_instrs_cons; auto.
+ constructor; auto.
+ (* label *)
+ apply wt_instrs_cons; auto.
+ constructor.
+ (* goto *)
+ apply wt_instrs_cons; auto.
+ constructor; auto.
+ (* cond *)
+ apply wt_instrs_cons; auto.
+ constructor; auto.
+ (* return *)
+ apply wt_restore_callee_save. apply wt_instrs_cons. constructor. auto.
+Qed.
+
+End TRANSL_FUNCTION.
+
+Lemma wt_transf_function:
+ forall f tf,
+ transf_function f = Some tf ->
+ Lineartyping.wt_function f ->
+ wt_function tf.
+Proof.
+ intros.
+ generalize H; unfold transf_function.
+ case (zlt (Linear.fn_stacksize f) 0); intro.
+ intros; discriminate.
+ case (zlt (- Int.min_signed) (fe_size (make_env (function_bounds f)))); intro.
+ intros; discriminate. intro EQ.
+ generalize (unfold_transf_function f tf H); intro.
+ assert (fn_framesize tf = fe_size (make_env (function_bounds f))).
+ subst tf; reflexivity.
+ constructor.
+ change (wt_instrs (fn_code tf)).
+ rewrite H1; simpl; unfold transl_body.
+ apply wt_save_callee_save with tf; auto.
+ unfold transl_code. apply wt_fold_right.
+ intros. eapply wt_transl_instr; eauto.
+ red; intros. elim H3.
+ subst tf; simpl; auto.
+ rewrite H2. eapply size_pos; eauto.
+ rewrite H2. eapply size_no_overflow; eauto.
+Qed.
+
+Lemma program_typing_preserved:
+ forall (p: Linear.program) (tp: Mach.program),
+ transf_program p = Some tp ->
+ Lineartyping.wt_program p ->
+ Machtyping.wt_program tp.
+Proof.
+ intros; red; intros.
+ generalize (transform_partial_program_function transf_function p i f H H1).
+ intros [f0 [IN TRANSF]].
+ apply wt_transf_function with f0; auto.
+ eapply H0; eauto.
+Qed.
diff --git a/backend/Tunneling.v b/backend/Tunneling.v
new file mode 100644
index 0000000..9c3e82c
--- /dev/null
+++ b/backend/Tunneling.v
@@ -0,0 +1,131 @@
+(** Branch tunneling (optimization of branches to branches). *)
+
+Require Import Coqlib.
+Require Import Maps.
+Require Import AST.
+Require Import Values.
+Require Import Globalenvs.
+Require Import Op.
+Require Import Locations.
+Require Import LTL.
+
+(** Branch tunneling shortens sequences of branches (with no intervening
+ computations) by rewriting the branch and conditional branch instructions
+ so that they jump directly to the end of the branch sequence.
+ For example:
+<<
+ L1: goto L2; L1: goto L3;
+ L2; goto L3; becomes L2: goto L3;
+ L3: instr; L3: instr;
+ L4: if (cond) goto L1; L4: if (cond) goto L3;
+>>
+ This optimization can be applied to several of our intermediate
+ languages. We choose to perform it on the [LTL] language,
+ after register allocation but before code linearization.
+ Register allocation can delete instructions (such as dead
+ computations or useless moves), therefore there are more
+ opportunities for tunneling after allocation than before.
+ Symmetrically, prior tunneling helps linearization to produce
+ better code, e.g. by revealing that some [goto] instructions are
+ dead code (as the "goto L3" in the example above).
+*)
+
+Definition is_goto_block (b: option block) : option node :=
+ match b with Some (Bgoto s) => Some s | _ => None end.
+
+(** [branch_target f pc] returns the node of the CFG that is at
+ the end of the branch sequence starting at [pc]. If the instruction
+ at [pc] is not a [goto], [pc] itself is returned.
+ The naive definition of [branch_target] is:
+<<
+ branch_target f pc = branch_target f pc' if f(pc) = goto pc'
+ = pc otherwise
+>>
+ However, this definition can fail to terminate if
+ the program can contain loops consisting only of branches, as in
+<<
+ L1: goto L1;
+>>
+ or
+<< L1: goto L2;
+ L2: goto L1;
+>>
+ Coq warns us of this fact by not accepting the definition
+ of [branch_target] above.
+
+ The proper way to handle this problem is to detect [goto] cycles
+ in the control-flow graph. For simplicity, we just bound arbitrarily
+ the number of iterations performed by [branch_target],
+ never chasing more than 10 [goto] instructions. (This many
+ consecutive branches is rarely, if even, encountered.)
+
+ For a sequence of more than 10 [goto] instructions, we can return
+ (as branch target) any of the labels of the [goto] instructions.
+ This is semantically correct in any case. However, the proof
+ is simpler if we return the label of the first [goto] in the sequence.
+*)
+
+Fixpoint branch_target_rec (f: LTL.function) (pc: node) (count: nat)
+ {struct count} : option node :=
+ match count with
+ | Datatypes.O => None
+ | Datatypes.S count' =>
+ match is_goto_block f.(fn_code)!pc with
+ | Some s => branch_target_rec f s count'
+ | None => Some pc
+ end
+ end.
+
+Definition branch_target (f: LTL.function) (pc: node) :=
+ match branch_target_rec f pc 10%nat with
+ | Some pc' => pc'
+ | None => pc
+ end.
+
+(** The tunneling optimization simply rewrites all LTL basic blocks,
+ replacing the destinations of the [Bgoto] and [Bcond] instructions
+ with their final target, as computed by [branch_target]. *)
+
+Fixpoint tunnel_block (f: LTL.function) (b: block) {struct b} : block :=
+ match b with
+ | Bgetstack s r b =>
+ Bgetstack s r (tunnel_block f b)
+ | Bsetstack r s b =>
+ Bsetstack r s (tunnel_block f b)
+ | Bop op args res b =>
+ Bop op args res (tunnel_block f b)
+ | Bload chunk addr args dst b =>
+ Bload chunk addr args dst (tunnel_block f b)
+ | Bstore chunk addr args src b =>
+ Bstore chunk addr args src (tunnel_block f b)
+ | Bcall sig ros b =>
+ Bcall sig ros (tunnel_block f b)
+ | Bgoto s =>
+ Bgoto (branch_target f s)
+ | Bcond cond args s1 s2 =>
+ Bcond cond args (branch_target f s1) (branch_target f s2)
+ | Breturn =>
+ Breturn
+ end.
+
+Lemma wf_tunneled_code:
+ forall (f: LTL.function),
+ let tc := PTree.map (fun pc b => tunnel_block f b) (fn_code f) in
+ forall (pc: node), Plt pc (Psucc (fn_entrypoint f)) \/ tc!pc = None.
+Proof.
+ intros. elim (fn_code_wf f pc); intro.
+ left; auto. right; unfold tc.
+ rewrite PTree.gmap; unfold option_map; rewrite H; auto.
+Qed.
+
+Definition tunnel_function (f: LTL.function) : LTL.function :=
+ mkfunction
+ (fn_sig f)
+ (fn_stacksize f)
+ (PTree.map (fun pc b => tunnel_block f b) (fn_code f))
+ (fn_entrypoint f)
+ (wf_tunneled_code f).
+
+Definition tunnel_program (p: LTL.program) : LTL.program :=
+ transform_program tunnel_function p.
+
diff --git a/backend/Tunnelingproof.v b/backend/Tunnelingproof.v
new file mode 100644
index 0000000..111d1d8
--- /dev/null
+++ b/backend/Tunnelingproof.v
@@ -0,0 +1,311 @@
+(** Correctness proof for the branch tunneling optimization. *)
+
+Require Import Coqlib.
+Require Import Maps.
+Require Import AST.
+Require Import Values.
+Require Import Mem.
+Require Import Globalenvs.
+Require Import Op.
+Require Import Locations.
+Require Import LTL.
+Require Import Tunneling.
+
+(** * Properties of branch target computation *)
+
+Lemma is_goto_block_correct:
+ forall b s,
+ is_goto_block b = Some s -> b = Some (Bgoto s).
+Proof.
+ unfold is_goto_block; intros.
+ destruct b. destruct b; discriminate || congruence.
+ discriminate.
+Qed.
+
+Lemma branch_target_rec_1:
+ forall f pc n,
+ branch_target_rec f pc n = Some pc
+ \/ branch_target_rec f pc n = None
+ \/ exists pc', f.(fn_code)!pc = Some(Bgoto pc').
+Proof.
+ intros. destruct n; simpl.
+ right; left; auto.
+ caseEq (is_goto_block f.(fn_code)!pc); intros.
+ right; right. exists n0. apply is_goto_block_correct; auto.
+ left; auto.
+Qed.
+
+Lemma branch_target_rec_2:
+ forall f n pc1 pc2 pc3,
+ f.(fn_code)!pc1 = Some (Bgoto pc2) ->
+ branch_target_rec f pc1 n = Some pc3 ->
+ branch_target_rec f pc2 n = Some pc3.
+Proof.
+ induction n.
+ simpl. intros; discriminate.
+ intros pc1 pc2 pc3 ATpc1 H. simpl in H.
+ unfold is_goto_block in H; rewrite ATpc1 in H.
+ simpl. caseEq (is_goto_block f.(fn_code)!pc2); intros.
+ apply IHn with pc2. apply is_goto_block_correct; auto. auto.
+ destruct n; simpl in H. discriminate. rewrite H0 in H. auto.
+Qed.
+
+(** The following lemma captures the property of [branch_target]
+ on which the proof of semantic preservation relies. *)
+
+Lemma branch_target_characterization:
+ forall f pc,
+ branch_target f pc = pc \/
+ (exists pc', f.(fn_code)!pc = Some(Bgoto pc')
+ /\ branch_target f pc' = branch_target f pc).
+Proof.
+ intros. unfold branch_target.
+ generalize (branch_target_rec_1 f pc 10%nat).
+ intros [A|[A|[pc' AT]]].
+ rewrite A. left; auto.
+ rewrite A. left; auto.
+ caseEq (branch_target_rec f pc 10%nat). intros pcx BT.
+ right. exists pc'. split. auto.
+ rewrite (branch_target_rec_2 _ _ _ _ _ AT BT). auto.
+ intro. left; auto.
+Qed.
+
+(** * Preservation of semantics *)
+
+Section PRESERVATION.
+
+Variable p: program.
+Let tp := tunnel_program p.
+Let ge := Genv.globalenv p.
+Let tge := Genv.globalenv tp.
+
+Lemma functions_translated:
+ forall v f,
+ Genv.find_funct ge v = Some f ->
+ Genv.find_funct tge v = Some (tunnel_function f).
+Proof (@Genv.find_funct_transf _ _ tunnel_function p).
+
+Lemma function_ptr_translated:
+ forall v f,
+ Genv.find_funct_ptr ge v = Some f ->
+ Genv.find_funct_ptr tge v = Some (tunnel_function f).
+Proof (@Genv.find_funct_ptr_transf _ _ tunnel_function p).
+
+Lemma symbols_preserved:
+ forall id,
+ Genv.find_symbol tge id = Genv.find_symbol ge id.
+Proof (@Genv.find_symbol_transf _ _ tunnel_function p).
+
+(** These are inversion lemmas, characterizing what happens in the LTL
+ semantics when executing [Bgoto] instructions or basic blocks. *)
+
+Lemma exec_instrs_Bgoto_inv:
+ forall sp b1 ls1 m1 b2 ls2 m2,
+ exec_instrs ge sp b1 ls1 m1 b2 ls2 m2 ->
+ forall s1,
+ b1 = Bgoto s1 -> b2 = b1 /\ ls2 = ls1 /\ m2 = m1.
+Proof.
+ induction 1.
+ intros. tauto.
+ intros. subst b1. inversion H.
+ intros. generalize (IHexec_instrs1 s1 H1). intros [A [B C]].
+ subst b2; subst rs2; subst m2. eauto.
+Qed.
+
+Lemma exec_block_Bgoto_inv:
+ forall sp s ls1 m1 out ls2 m2,
+ exec_block ge sp (Bgoto s) ls1 m1 out ls2 m2 ->
+ out = Cont s /\ ls2 = ls1 /\ m2 = m1.
+Proof.
+ intros. inversion H;
+ generalize (exec_instrs_Bgoto_inv _ _ _ _ _ _ _ H0 s (refl_equal _));
+ intros [A [B C]].
+ split. congruence. tauto.
+ discriminate.
+ discriminate.
+ discriminate.
+Qed.
+
+Lemma exec_blocks_Bgoto_inv:
+ forall c sp pc1 ls1 m1 out ls2 m2 s,
+ exec_blocks ge c sp pc1 ls1 m1 out ls2 m2 ->
+ c!pc1 = Some (Bgoto s) ->
+ (out = Cont pc1 /\ ls2 = ls1 /\ m2 = m1)
+ \/ exec_blocks ge c sp s ls1 m1 out ls2 m2.
+Proof.
+ induction 1; intros.
+ left; tauto.
+ assert (b = Bgoto s). congruence. subst b.
+ generalize (exec_block_Bgoto_inv _ _ _ _ _ _ _ H0).
+ intros [A [B C]]. subst out; subst rs'; subst m'.
+ right. apply exec_blocks_refl.
+ elim (IHexec_blocks1 H1).
+ intros [A [B C]].
+ assert (pc2 = pc1). congruence. subst rs2; subst m2; subst pc2.
+ apply IHexec_blocks2; auto.
+ intro. right. apply exec_blocks_trans with pc2 rs2 m2; auto.
+Qed.
+
+(** The following [exec_*_prop] predicates state the correctness
+ of the tunneling transformation: for each LTL execution
+ in the original code (of an instruction, a sequence of instructions,
+ a basic block, a sequence of basic blocks, etc), there exists
+ a similar LTL execution in the tunneled code.
+
+ Note that only the control-flow is changed: the values of locations
+ and the memory states are identical in the original and transformed
+ codes. *)
+
+Definition tunnel_outcome (f: function) (out: outcome) :=
+ match out with
+ | Cont pc => Cont (branch_target f pc)
+ | Return => Return
+ end.
+
+Definition exec_instr_prop
+ (sp: val) (b1: block) (ls1: locset) (m1: mem)
+ (b2: block) (ls2: locset) (m2: mem) : Prop :=
+ forall f,
+ exec_instr tge sp (tunnel_block f b1) ls1 m1
+ (tunnel_block f b2) ls2 m2.
+
+Definition exec_instrs_prop
+ (sp: val) (b1: block) (ls1: locset) (m1: mem)
+ (b2: block) (ls2: locset) (m2: mem) : Prop :=
+ forall f,
+ exec_instrs tge sp (tunnel_block f b1) ls1 m1
+ (tunnel_block f b2) ls2 m2.
+
+Definition exec_block_prop
+ (sp: val) (b1: block) (ls1: locset) (m1: mem)
+ (out: outcome) (ls2: locset) (m2: mem) : Prop :=
+ forall f,
+ exec_block tge sp (tunnel_block f b1) ls1 m1
+ (tunnel_outcome f out) ls2 m2.
+
+Definition tunneled_code (f: function) :=
+ PTree.map (fun pc b => tunnel_block f b) (fn_code f).
+
+Definition exec_blocks_prop
+ (c: code) (sp: val)
+ (pc: node) (ls1: locset) (m1: mem)
+ (out: outcome) (ls2: locset) (m2: mem) : Prop :=
+ forall f,
+ f.(fn_code) = c ->
+ exec_blocks tge (tunneled_code f) sp
+ (branch_target f pc) ls1 m1
+ (tunnel_outcome f out) ls2 m2.
+
+Definition exec_function_prop
+ (f: function) (ls1: locset) (m1: mem)
+ (ls2: locset) (m2: mem) : Prop :=
+ exec_function tge (tunnel_function f) ls1 m1 ls2 m2.
+
+Scheme exec_instr_ind5 := Minimality for LTL.exec_instr Sort Prop
+ with exec_instrs_ind5 := Minimality for LTL.exec_instrs Sort Prop
+ with exec_block_ind5 := Minimality for LTL.exec_block Sort Prop
+ with exec_blocks_ind5 := Minimality for LTL.exec_blocks Sort Prop
+ with exec_function_ind5 := Minimality for LTL.exec_function Sort Prop.
+
+(** The proof of semantic preservation is a structural induction
+ over the LTL evaluation derivation of the original program,
+ using the [exec_*_prop] predicates above as induction hypotheses. *)
+
+Lemma tunnel_function_correct:
+ forall f ls1 m1 ls2 m2,
+ exec_function ge f ls1 m1 ls2 m2 ->
+ exec_function_prop f ls1 m1 ls2 m2.
+Proof.
+ apply (exec_function_ind5 ge
+ exec_instr_prop
+ exec_instrs_prop
+ exec_block_prop
+ exec_blocks_prop
+ exec_function_prop);
+ intros; red; intros; simpl.
+ (* getstack *)
+ constructor.
+ (* setstack *)
+ constructor.
+ (* op *)
+ constructor. rewrite <- H. apply eval_operation_preserved.
+ exact symbols_preserved.
+ (* load *)
+ apply exec_Bload with a. rewrite <- H.
+ apply eval_addressing_preserved. exact symbols_preserved.
+ auto.
+ (* store *)
+ apply exec_Bstore with a. rewrite <- H.
+ apply eval_addressing_preserved. exact symbols_preserved.
+ auto.
+ (* call *)
+ apply exec_Bcall with (tunnel_function f).
+ generalize H; unfold find_function; destruct ros.
+ intro. apply functions_translated; auto.
+ rewrite symbols_preserved. destruct (Genv.find_symbol ge i).
+ intro. apply function_ptr_translated; auto. congruence.
+ rewrite H0; reflexivity.
+ apply H2.
+ (* instr_refl *)
+ apply exec_refl.
+ (* instr_one *)
+ apply exec_one. apply H0.
+ (* instr_trans *)
+ apply exec_trans with (tunnel_block f b2) rs2 m2; auto.
+ (* goto *)
+ apply exec_Bgoto. red in H0. simpl in H0. apply H0.
+ (* cond, true *)
+ eapply exec_Bcond_true. red in H0. simpl in H0. apply H0. auto.
+ (* cond, false *)
+ eapply exec_Bcond_false. red in H0. simpl in H0. apply H0. auto.
+ (* return *)
+ apply exec_Breturn. red in H0. simpl in H0. apply H0.
+ (* block_refl *)
+ apply exec_blocks_refl.
+ (* block_one *)
+ red in H1.
+ elim (branch_target_characterization f pc).
+ intro. rewrite H3. apply exec_blocks_one with (tunnel_block f b).
+ unfold tunneled_code. rewrite PTree.gmap. rewrite H2; rewrite H.
+ reflexivity. apply H1.
+ intros [pc' [ATpc BTS]].
+ assert (b = Bgoto pc'). congruence. subst b.
+ generalize (exec_block_Bgoto_inv _ _ _ _ _ _ _ H0).
+ intros [A [B C]]. subst out; subst rs'; subst m'.
+ simpl. rewrite BTS. apply exec_blocks_refl.
+ (* blocks_trans *)
+ apply exec_blocks_trans with (branch_target f pc2) rs2 m2.
+ exact (H0 f H3). exact (H2 f H3).
+ (* function *)
+ econstructor. eexact H.
+ change (fn_code (tunnel_function f)) with (tunneled_code f).
+ simpl.
+ elim (branch_target_characterization f (fn_entrypoint f)).
+ intro BT. rewrite <- BT. exact (H1 f (refl_equal _)).
+ intros [pc [ATpc BT]].
+ apply exec_blocks_trans with
+ (branch_target f (fn_entrypoint f)) (call_regs rs) m1.
+ eapply exec_blocks_one.
+ unfold tunneled_code. rewrite PTree.gmap. rewrite ATpc.
+ simpl. reflexivity.
+ apply exec_Bgoto. rewrite BT. apply exec_refl.
+ exact (H1 f (refl_equal _)).
+Qed.
+
+End PRESERVATION.
+
+Theorem transf_program_correct:
+ forall (p: program) (r: val),
+ exec_program p r ->
+ exec_program (tunnel_program p) r.
+Proof.
+ intros p r [b [f [ls [m [FIND1 [FIND2 [SIG [EX RES]]]]]]]].
+ red. exists b; exists (tunnel_function f); exists ls; exists m.
+ split. change (prog_main (tunnel_program p)) with (prog_main p).
+ rewrite <- FIND1. apply symbols_preserved.
+ split. apply function_ptr_translated. assumption.
+ split. rewrite <- SIG. reflexivity.
+ split. apply tunnel_function_correct.
+ unfold tunnel_program. rewrite Genv.init_mem_transf. auto.
+ exact RES.
+Qed.
diff --git a/backend/Tunnelingtyping.v b/backend/Tunnelingtyping.v
new file mode 100644
index 0000000..29b74f1
--- /dev/null
+++ b/backend/Tunnelingtyping.v
@@ -0,0 +1,44 @@
+(** Type preservation for the Tunneling pass *)
+
+Require Import Coqlib.
+Require Import Maps.
+Require Import AST.
+Require Import Values.
+Require Import Mem.
+Require Import Globalenvs.
+Require Import Op.
+Require Import Locations.
+Require Import LTL.
+Require Import LTLtyping.
+Require Import Tunneling.
+
+(** Tunneling preserves typing. *)
+
+Lemma wt_tunnel_block:
+ forall f b,
+ wt_block f b ->
+ wt_block (tunnel_function f) (tunnel_block f b).
+Proof.
+ induction 1; simpl; econstructor; eauto.
+Qed.
+
+Lemma wt_tunnel_function:
+ forall f, wt_function f -> wt_function (tunnel_function f).
+Proof.
+ unfold wt_function; intros until b.
+ simpl. rewrite PTree.gmap. unfold option_map.
+ caseEq (fn_code f)!pc. intros b0 AT EQ.
+ injection EQ; intros; subst b.
+ apply wt_tunnel_block. eauto.
+ intros; discriminate.
+Qed.
+
+Lemma program_typing_preserved:
+ forall (p: LTL.program),
+ wt_program p -> wt_program (tunnel_program p).
+Proof.
+ intros; red; intros.
+ generalize (transform_program_function tunnel_function p i f H0).
+ intros [f0 [IN TRANSF]].
+ subst f. apply wt_tunnel_function. eauto.
+Qed.
diff --git a/backend/Values.v b/backend/Values.v
new file mode 100644
index 0000000..aa59e04
--- /dev/null
+++ b/backend/Values.v
@@ -0,0 +1,888 @@
+(** This module defines the type of values that is used in the dynamic
+ semantics of all our intermediate languages. *)
+
+Require Import Coqlib.
+Require Import AST.
+Require Import Integers.
+Require Import Floats.
+
+Definition block : Set := Z.
+Definition eq_block := zeq.
+
+(** A value is either:
+- a machine integer;
+- a floating-point number;
+- a pointer: a pair of a memory address and an integer offset with respect
+ to this address;
+- the [Vundef] value denoting an arbitrary bit pattern, such as the
+ value of an uninitialized variable.
+*)
+
+Inductive val: Set :=
+ | Vundef: val
+ | Vint: int -> val
+ | Vfloat: float -> val
+ | Vptr: block -> int -> val.
+
+Definition Vzero: val := Vint Int.zero.
+Definition Vone: val := Vint Int.one.
+Definition Vmone: val := Vint Int.mone.
+
+Definition Vtrue: val := Vint Int.one.
+Definition Vfalse: val := Vint Int.zero.
+
+(** The module [Val] defines a number of arithmetic and logical operations
+ over type [val]. Most of these operations are straightforward extensions
+ of the corresponding integer or floating-point operations. *)
+
+Module Val.
+
+Definition of_bool (b: bool): val := if b then Vtrue else Vfalse.
+
+Definition has_type (v: val) (t: typ) : Prop :=
+ match v, t with
+ | Vundef, _ => True
+ | Vint _, Tint => True
+ | Vfloat _, Tfloat => True
+ | Vptr _ _, Tint => True
+ | _, _ => False
+ end.
+
+Fixpoint has_type_list (vl: list val) (tl: list typ) {struct vl} : Prop :=
+ match vl, tl with
+ | nil, nil => True
+ | v1 :: vs, t1 :: ts => has_type v1 t1 /\ has_type_list vs ts
+ | _, _ => False
+ end.
+
+(** Truth values. Pointers and non-zero integers are treated as [True].
+ The integer 0 (also used to represent the null pointer) is [False].
+ [Vundef] and floats are neither true nor false. *)
+
+Definition is_true (v: val) : Prop :=
+ match v with
+ | Vint n => n <> Int.zero
+ | Vptr b ofs => True
+ | _ => False
+ end.
+
+Definition is_false (v: val) : Prop :=
+ match v with
+ | Vint n => n = Int.zero
+ | _ => False
+ end.
+
+Inductive bool_of_val: val -> bool -> Prop :=
+ | bool_of_val_int_true:
+ forall n, n <> Int.zero -> bool_of_val (Vint n) true
+ | bool_of_val_int_false:
+ bool_of_val (Vint Int.zero) false
+ | bool_of_val_ptr:
+ forall b ofs, bool_of_val (Vptr b ofs) true.
+
+Definition neg (v: val) : val :=
+ match v with
+ | Vint n => Vint (Int.neg n)
+ | _ => Vundef
+ end.
+
+Definition negf (v: val) : val :=
+ match v with
+ | Vfloat f => Vfloat (Float.neg f)
+ | _ => Vundef
+ end.
+
+Definition absf (v: val) : val :=
+ match v with
+ | Vfloat f => Vfloat (Float.abs f)
+ | _ => Vundef
+ end.
+
+Definition intoffloat (v: val) : val :=
+ match v with
+ | Vfloat f => Vint (Float.intoffloat f)
+ | _ => Vundef
+ end.
+
+Definition floatofint (v: val) : val :=
+ match v with
+ | Vint n => Vfloat (Float.floatofint n)
+ | _ => Vundef
+ end.
+
+Definition floatofintu (v: val) : val :=
+ match v with
+ | Vint n => Vfloat (Float.floatofintu n)
+ | _ => Vundef
+ end.
+
+Definition notint (v: val) : val :=
+ match v with
+ | Vint n => Vint (Int.xor n Int.mone)
+ | _ => Vundef
+ end.
+
+Definition notbool (v: val) : val :=
+ match v with
+ | Vint n => of_bool (Int.eq n Int.zero)
+ | Vptr b ofs => Vfalse
+ | _ => Vundef
+ end.
+
+Definition cast8signed (v: val) : val :=
+ match v with
+ | Vint n => Vint(Int.cast8signed n)
+ | _ => Vundef
+ end.
+
+Definition cast8unsigned (v: val) : val :=
+ match v with
+ | Vint n => Vint(Int.cast8unsigned n)
+ | _ => Vundef
+ end.
+
+Definition cast16signed (v: val) : val :=
+ match v with
+ | Vint n => Vint(Int.cast16signed n)
+ | _ => Vundef
+ end.
+
+Definition cast16unsigned (v: val) : val :=
+ match v with
+ | Vint n => Vint(Int.cast16unsigned n)
+ | _ => Vundef
+ end.
+
+Definition singleoffloat (v: val) : val :=
+ match v with
+ | Vfloat f => Vfloat(Float.singleoffloat f)
+ | _ => Vundef
+ end.
+
+Definition add (v1 v2: val): val :=
+ match v1, v2 with
+ | Vint n1, Vint n2 => Vint(Int.add n1 n2)
+ | Vptr b1 ofs1, Vint n2 => Vptr b1 (Int.add ofs1 n2)
+ | Vint n1, Vptr b2 ofs2 => Vptr b2 (Int.add ofs2 n1)
+ | _, _ => Vundef
+ end.
+
+Definition sub (v1 v2: val): val :=
+ match v1, v2 with
+ | Vint n1, Vint n2 => Vint(Int.sub n1 n2)
+ | Vptr b1 ofs1, Vint n2 => Vptr b1 (Int.sub ofs1 n2)
+ | Vptr b1 ofs1, Vptr b2 ofs2 =>
+ if zeq b1 b2 then Vint(Int.sub ofs1 ofs2) else Vundef
+ | _, _ => Vundef
+ end.
+
+Definition mul (v1 v2: val): val :=
+ match v1, v2 with
+ | Vint n1, Vint n2 => Vint(Int.mul n1 n2)
+ | _, _ => Vundef
+ end.
+
+Definition divs (v1 v2: val): val :=
+ match v1, v2 with
+ | Vint n1, Vint n2 =>
+ if Int.eq n2 Int.zero then Vundef else Vint(Int.divs n1 n2)
+ | _, _ => Vundef
+ end.
+
+Definition mods (v1 v2: val): val :=
+ match v1, v2 with
+ | Vint n1, Vint n2 =>
+ if Int.eq n2 Int.zero then Vundef else Vint(Int.mods n1 n2)
+ | _, _ => Vundef
+ end.
+
+Definition divu (v1 v2: val): val :=
+ match v1, v2 with
+ | Vint n1, Vint n2 =>
+ if Int.eq n2 Int.zero then Vundef else Vint(Int.divu n1 n2)
+ | _, _ => Vundef
+ end.
+
+Definition modu (v1 v2: val): val :=
+ match v1, v2 with
+ | Vint n1, Vint n2 =>
+ if Int.eq n2 Int.zero then Vundef else Vint(Int.modu n1 n2)
+ | _, _ => Vundef
+ end.
+
+Definition and (v1 v2: val): val :=
+ match v1, v2 with
+ | Vint n1, Vint n2 => Vint(Int.and n1 n2)
+ | _, _ => Vundef
+ end.
+
+Definition or (v1 v2: val): val :=
+ match v1, v2 with
+ | Vint n1, Vint n2 => Vint(Int.or n1 n2)
+ | _, _ => Vundef
+ end.
+
+Definition xor (v1 v2: val): val :=
+ match v1, v2 with
+ | Vint n1, Vint n2 => Vint(Int.xor n1 n2)
+ | _, _ => Vundef
+ end.
+
+Definition shl (v1 v2: val): val :=
+ match v1, v2 with
+ | Vint n1, Vint n2 =>
+ if Int.ltu n2 (Int.repr 32)
+ then Vint(Int.shl n1 n2)
+ else Vundef
+ | _, _ => Vundef
+ end.
+
+Definition shr (v1 v2: val): val :=
+ match v1, v2 with
+ | Vint n1, Vint n2 =>
+ if Int.ltu n2 (Int.repr 32)
+ then Vint(Int.shr n1 n2)
+ else Vundef
+ | _, _ => Vundef
+ end.
+
+Definition shr_carry (v1 v2: val): val :=
+ match v1, v2 with
+ | Vint n1, Vint n2 =>
+ if Int.ltu n2 (Int.repr 32)
+ then Vint(Int.shr_carry n1 n2)
+ else Vundef
+ | _, _ => Vundef
+ end.
+
+Definition shrx (v1 v2: val): val :=
+ match v1, v2 with
+ | Vint n1, Vint n2 =>
+ if Int.ltu n2 (Int.repr 32)
+ then Vint(Int.shrx n1 n2)
+ else Vundef
+ | _, _ => Vundef
+ end.
+
+Definition shru (v1 v2: val): val :=
+ match v1, v2 with
+ | Vint n1, Vint n2 =>
+ if Int.ltu n2 (Int.repr 32)
+ then Vint(Int.shru n1 n2)
+ else Vundef
+ | _, _ => Vundef
+ end.
+
+Definition rolm (v: val) (amount mask: int): val :=
+ match v with
+ | Vint n => Vint(Int.rolm n amount mask)
+ | _ => Vundef
+ end.
+
+Definition addf (v1 v2: val): val :=
+ match v1, v2 with
+ | Vfloat f1, Vfloat f2 => Vfloat(Float.add f1 f2)
+ | _, _ => Vundef
+ end.
+
+Definition subf (v1 v2: val): val :=
+ match v1, v2 with
+ | Vfloat f1, Vfloat f2 => Vfloat(Float.sub f1 f2)
+ | _, _ => Vundef
+ end.
+
+Definition mulf (v1 v2: val): val :=
+ match v1, v2 with
+ | Vfloat f1, Vfloat f2 => Vfloat(Float.mul f1 f2)
+ | _, _ => Vundef
+ end.
+
+Definition divf (v1 v2: val): val :=
+ match v1, v2 with
+ | Vfloat f1, Vfloat f2 => Vfloat(Float.div f1 f2)
+ | _, _ => Vundef
+ end.
+
+Definition cmp_mismatch (c: comparison): val :=
+ match c with
+ | Ceq => Vfalse
+ | Cne => Vtrue
+ | _ => Vundef
+ end.
+
+Definition cmp (c: comparison) (v1 v2: val): val :=
+ match v1, v2 with
+ | Vint n1, Vint n2 => of_bool (Int.cmp c n1 n2)
+ | Vint n1, Vptr b2 ofs2 =>
+ if Int.eq n1 Int.zero then cmp_mismatch c else Vundef
+ | Vptr b1 ofs1, Vptr b2 ofs2 =>
+ if zeq b1 b2
+ then of_bool (Int.cmp c ofs1 ofs2)
+ else cmp_mismatch c
+ | Vptr b1 ofs1, Vint n2 =>
+ if Int.eq n2 Int.zero then cmp_mismatch c else Vundef
+ | _, _ => Vundef
+ end.
+
+Definition cmpu (c: comparison) (v1 v2: val): val :=
+ match v1, v2 with
+ | Vint n1, Vint n2 =>
+ of_bool (Int.cmpu c n1 n2)
+ | Vint n1, Vptr b2 ofs2 =>
+ if Int.eq n1 Int.zero then cmp_mismatch c else Vundef
+ | Vptr b1 ofs1, Vptr b2 ofs2 =>
+ if zeq b1 b2
+ then of_bool (Int.cmpu c ofs1 ofs2)
+ else cmp_mismatch c
+ | Vptr b1 ofs1, Vint n2 =>
+ if Int.eq n2 Int.zero then cmp_mismatch c else Vundef
+ | _, _ => Vundef
+ end.
+
+Definition cmpf (c: comparison) (v1 v2: val): val :=
+ match v1, v2 with
+ | Vfloat f1, Vfloat f2 => of_bool (Float.cmp c f1 f2)
+ | _, _ => Vundef
+ end.
+
+(** [load_result] is used in the memory model (library [Mem])
+ to post-process the results of a memory read. For instance,
+ consider storing the integer value [0xFFF] on 1 byte at a
+ given address, and reading it back. If it is read back with
+ chunk [Mint8unsigned], zero-extension must be performed, resulting
+ in [0xFF]. If it is read back as a [Mint8signed], sign-extension
+ is performed and [0xFFFFFFFF] is returned. Type mismatches
+ (e.g. reading back a float as a [Mint32]) read back as [Vundef]. *)
+
+Definition load_result (chunk: memory_chunk) (v: val) :=
+ match chunk, v with
+ | Mint8signed, Vint n => Vint (Int.cast8signed n)
+ | Mint8unsigned, Vint n => Vint (Int.cast8unsigned n)
+ | Mint16signed, Vint n => Vint (Int.cast16signed n)
+ | Mint16unsigned, Vint n => Vint (Int.cast16unsigned n)
+ | Mint32, Vint n => Vint n
+ | Mint32, Vptr b ofs => Vptr b ofs
+ | Mfloat32, Vfloat f => Vfloat(Float.singleoffloat f)
+ | Mfloat64, Vfloat f => Vfloat f
+ | _, _ => Vundef
+ end.
+
+(** Theorems on arithmetic operations. *)
+
+Theorem cast8unsigned_and:
+ forall x, cast8unsigned x = and x (Vint(Int.repr 255)).
+Proof.
+ destruct x; simpl; auto. decEq. apply Int.cast8unsigned_and.
+Qed.
+
+Theorem cast16unsigned_and:
+ forall x, cast16unsigned x = and x (Vint(Int.repr 65535)).
+Proof.
+ destruct x; simpl; auto. decEq. apply Int.cast16unsigned_and.
+Qed.
+
+Theorem istrue_not_isfalse:
+ forall v, is_false v -> is_true (notbool v).
+Proof.
+ destruct v; simpl; try contradiction.
+ intros. subst i. simpl. discriminate.
+Qed.
+
+Theorem isfalse_not_istrue:
+ forall v, is_true v -> is_false (notbool v).
+Proof.
+ destruct v; simpl; try contradiction.
+ intros. generalize (Int.eq_spec i Int.zero).
+ case (Int.eq i Int.zero); intro.
+ contradiction. simpl. auto.
+ auto.
+Qed.
+
+Theorem bool_of_true_val:
+ forall v, is_true v -> bool_of_val v true.
+Proof.
+ intro. destruct v; simpl; intros; try contradiction.
+ constructor; auto. constructor.
+Qed.
+
+Theorem bool_of_true_val2:
+ forall v, bool_of_val v true -> is_true v.
+Proof.
+ intros. inversion H; simpl; auto.
+Qed.
+
+Theorem bool_of_true_val_inv:
+ forall v b, is_true v -> bool_of_val v b -> b = true.
+Proof.
+ intros. inversion H0; subst v b; simpl in H; auto.
+Qed.
+
+Theorem bool_of_false_val:
+ forall v, is_false v -> bool_of_val v false.
+Proof.
+ intro. destruct v; simpl; intros; try contradiction.
+ subst i; constructor.
+Qed.
+
+Theorem bool_of_false_val2:
+ forall v, bool_of_val v false -> is_false v.
+Proof.
+ intros. inversion H; simpl; auto.
+Qed.
+
+Theorem bool_of_false_val_inv:
+ forall v b, is_false v -> bool_of_val v b -> b = false.
+Proof.
+ intros. inversion H0; subst v b; simpl in H.
+ congruence. auto. contradiction.
+Qed.
+
+Theorem notbool_negb_1:
+ forall b, of_bool (negb b) = notbool (of_bool b).
+Proof.
+ destruct b; reflexivity.
+Qed.
+
+Theorem notbool_negb_2:
+ forall b, of_bool b = notbool (of_bool (negb b)).
+Proof.
+ destruct b; reflexivity.
+Qed.
+
+Theorem notbool_idem2:
+ forall b, notbool(notbool(of_bool b)) = of_bool b.
+Proof.
+ destruct b; reflexivity.
+Qed.
+
+Theorem notbool_idem3:
+ forall x, notbool(notbool(notbool x)) = notbool x.
+Proof.
+ destruct x; simpl; auto.
+ case (Int.eq i Int.zero); reflexivity.
+Qed.
+
+Theorem add_commut: forall x y, add x y = add y x.
+Proof.
+ destruct x; destruct y; simpl; auto.
+ decEq. apply Int.add_commut.
+Qed.
+
+Theorem add_assoc: forall x y z, add (add x y) z = add x (add y z).
+Proof.
+ destruct x; destruct y; destruct z; simpl; auto.
+ rewrite Int.add_assoc; auto.
+ rewrite Int.add_assoc; auto.
+ decEq. decEq. apply Int.add_commut.
+ decEq. rewrite Int.add_commut. rewrite <- Int.add_assoc.
+ decEq. apply Int.add_commut.
+ decEq. rewrite Int.add_assoc. auto.
+Qed.
+
+Theorem add_permut: forall x y z, add x (add y z) = add y (add x z).
+Proof.
+ intros. rewrite (add_commut y z). rewrite <- add_assoc. apply add_commut.
+Qed.
+
+Theorem add_permut_4:
+ forall x y z t, add (add x y) (add z t) = add (add x z) (add y t).
+Proof.
+ intros. rewrite add_permut. rewrite add_assoc.
+ rewrite add_permut. symmetry. apply add_assoc.
+Qed.
+
+Theorem neg_zero: neg Vzero = Vzero.
+Proof.
+ reflexivity.
+Qed.
+
+Theorem neg_add_distr: forall x y, neg(add x y) = add (neg x) (neg y).
+Proof.
+ destruct x; destruct y; simpl; auto. decEq. apply Int.neg_add_distr.
+Qed.
+
+Theorem sub_zero_r: forall x, sub Vzero x = neg x.
+Proof.
+ destruct x; simpl; auto.
+Qed.
+
+Theorem sub_add_opp: forall x y, sub x (Vint y) = add x (Vint (Int.neg y)).
+Proof.
+ destruct x; intro y; simpl; auto; rewrite Int.sub_add_opp; auto.
+Qed.
+
+Theorem sub_add_l:
+ forall v1 v2 i, sub (add v1 (Vint i)) v2 = add (sub v1 v2) (Vint i).
+Proof.
+ destruct v1; destruct v2; intros; simpl; auto.
+ rewrite Int.sub_add_l. auto.
+ rewrite Int.sub_add_l. auto.
+ case (zeq b b0); intro. rewrite Int.sub_add_l. auto. reflexivity.
+Qed.
+
+Theorem sub_add_r:
+ forall v1 v2 i, sub v1 (add v2 (Vint i)) = add (sub v1 v2) (Vint (Int.neg i)).
+Proof.
+ destruct v1; destruct v2; intros; simpl; auto.
+ rewrite Int.sub_add_r. auto.
+ repeat rewrite Int.sub_add_opp. decEq.
+ repeat rewrite Int.add_assoc. decEq. apply Int.add_commut.
+ decEq. repeat rewrite Int.sub_add_opp.
+ rewrite Int.add_assoc. decEq. apply Int.neg_add_distr.
+ case (zeq b b0); intro. simpl. decEq.
+ repeat rewrite Int.sub_add_opp. rewrite Int.add_assoc. decEq.
+ apply Int.neg_add_distr.
+ reflexivity.
+Qed.
+
+Theorem mul_commut: forall x y, mul x y = mul y x.
+Proof.
+ destruct x; destruct y; simpl; auto. decEq. apply Int.mul_commut.
+Qed.
+
+Theorem mul_assoc: forall x y z, mul (mul x y) z = mul x (mul y z).
+Proof.
+ destruct x; destruct y; destruct z; simpl; auto.
+ decEq. apply Int.mul_assoc.
+Qed.
+
+Theorem mul_add_distr_l:
+ forall x y z, mul (add x y) z = add (mul x z) (mul y z).
+Proof.
+ destruct x; destruct y; destruct z; simpl; auto.
+ decEq. apply Int.mul_add_distr_l.
+Qed.
+
+
+Theorem mul_add_distr_r:
+ forall x y z, mul x (add y z) = add (mul x y) (mul x z).
+Proof.
+ destruct x; destruct y; destruct z; simpl; auto.
+ decEq. apply Int.mul_add_distr_r.
+Qed.
+
+Theorem mul_pow2:
+ forall x n logn,
+ Int.is_power2 n = Some logn ->
+ mul x (Vint n) = shl x (Vint logn).
+Proof.
+ intros; destruct x; simpl; auto.
+ change 32 with (Z_of_nat wordsize).
+ rewrite (Int.is_power2_range _ _ H). decEq. apply Int.mul_pow2. auto.
+Qed.
+
+Theorem mods_divs:
+ forall x y, mods x y = sub x (mul (divs x y) y).
+Proof.
+ destruct x; destruct y; simpl; auto.
+ case (Int.eq i0 Int.zero); simpl. auto. decEq. apply Int.mods_divs.
+Qed.
+
+Theorem modu_divu:
+ forall x y, modu x y = sub x (mul (divu x y) y).
+Proof.
+ destruct x; destruct y; simpl; auto.
+ generalize (Int.eq_spec i0 Int.zero);
+ case (Int.eq i0 Int.zero); simpl. auto.
+ intro. decEq. apply Int.modu_divu. auto.
+Qed.
+
+Theorem divs_pow2:
+ forall x n logn,
+ Int.is_power2 n = Some logn ->
+ divs x (Vint n) = shrx x (Vint logn).
+Proof.
+ intros; destruct x; simpl; auto.
+ change 32 with (Z_of_nat wordsize).
+ rewrite (Int.is_power2_range _ _ H).
+ generalize (Int.eq_spec n Int.zero);
+ case (Int.eq n Int.zero); intro.
+ subst n. compute in H. discriminate.
+ decEq. apply Int.divs_pow2. auto.
+Qed.
+
+Theorem divu_pow2:
+ forall x n logn,
+ Int.is_power2 n = Some logn ->
+ divu x (Vint n) = shru x (Vint logn).
+Proof.
+ intros; destruct x; simpl; auto.
+ change 32 with (Z_of_nat wordsize).
+ rewrite (Int.is_power2_range _ _ H).
+ generalize (Int.eq_spec n Int.zero);
+ case (Int.eq n Int.zero); intro.
+ subst n. compute in H. discriminate.
+ decEq. apply Int.divu_pow2. auto.
+Qed.
+
+Theorem modu_pow2:
+ forall x n logn,
+ Int.is_power2 n = Some logn ->
+ modu x (Vint n) = and x (Vint (Int.sub n Int.one)).
+Proof.
+ intros; destruct x; simpl; auto.
+ generalize (Int.eq_spec n Int.zero);
+ case (Int.eq n Int.zero); intro.
+ subst n. compute in H. discriminate.
+ decEq. eapply Int.modu_and; eauto.
+Qed.
+
+Theorem and_commut: forall x y, and x y = and y x.
+Proof.
+ destruct x; destruct y; simpl; auto. decEq. apply Int.and_commut.
+Qed.
+
+Theorem and_assoc: forall x y z, and (and x y) z = and x (and y z).
+Proof.
+ destruct x; destruct y; destruct z; simpl; auto.
+ decEq. apply Int.and_assoc.
+Qed.
+
+Theorem or_commut: forall x y, or x y = or y x.
+Proof.
+ destruct x; destruct y; simpl; auto. decEq. apply Int.or_commut.
+Qed.
+
+Theorem or_assoc: forall x y z, or (or x y) z = or x (or y z).
+Proof.
+ destruct x; destruct y; destruct z; simpl; auto.
+ decEq. apply Int.or_assoc.
+Qed.
+
+Theorem xor_commut: forall x y, xor x y = xor y x.
+Proof.
+ destruct x; destruct y; simpl; auto. decEq. apply Int.xor_commut.
+Qed.
+
+Theorem xor_assoc: forall x y z, xor (xor x y) z = xor x (xor y z).
+Proof.
+ destruct x; destruct y; destruct z; simpl; auto.
+ decEq. apply Int.xor_assoc.
+Qed.
+
+Theorem shl_mul: forall x y, Val.mul x (Val.shl Vone y) = Val.shl x y.
+Proof.
+ destruct x; destruct y; simpl; auto.
+ case (Int.ltu i0 (Int.repr 32)); auto.
+ decEq. symmetry. apply Int.shl_mul.
+Qed.
+
+Theorem shl_rolm:
+ forall x n,
+ Int.ltu n (Int.repr 32) = true ->
+ shl x (Vint n) = rolm x n (Int.shl Int.mone n).
+Proof.
+ intros; destruct x; simpl; auto.
+ rewrite H. decEq. apply Int.shl_rolm. exact H.
+Qed.
+
+Theorem shru_rolm:
+ forall x n,
+ Int.ltu n (Int.repr 32) = true ->
+ shru x (Vint n) = rolm x (Int.sub (Int.repr 32) n) (Int.shru Int.mone n).
+Proof.
+ intros; destruct x; simpl; auto.
+ rewrite H. decEq. apply Int.shru_rolm. exact H.
+Qed.
+
+Theorem shrx_carry:
+ forall x y,
+ add (shr x y) (shr_carry x y) = shrx x y.
+Proof.
+ destruct x; destruct y; simpl; auto.
+ case (Int.ltu i0 (Int.repr 32)); auto.
+ simpl. decEq. apply Int.shrx_carry.
+Qed.
+
+Theorem or_rolm:
+ forall x n m1 m2,
+ or (rolm x n m1) (rolm x n m2) = rolm x n (Int.or m1 m2).
+Proof.
+ intros; destruct x; simpl; auto.
+ decEq. apply Int.or_rolm.
+Qed.
+
+Theorem rolm_rolm:
+ forall x n1 m1 n2 m2,
+ rolm (rolm x n1 m1) n2 m2 =
+ rolm x (Int.and (Int.add n1 n2) (Int.repr 31))
+ (Int.and (Int.rol m1 n2) m2).
+Proof.
+ intros; destruct x; simpl; auto.
+ decEq.
+ replace (Int.and (Int.add n1 n2) (Int.repr 31))
+ with (Int.modu (Int.add n1 n2) (Int.repr 32)).
+ apply Int.rolm_rolm.
+ change (Int.repr 31) with (Int.sub (Int.repr 32) Int.one).
+ apply Int.modu_and with (Int.repr 5). reflexivity.
+Qed.
+
+Theorem rolm_zero:
+ forall x m,
+ rolm x Int.zero m = and x (Vint m).
+Proof.
+ intros; destruct x; simpl; auto. decEq. apply Int.rolm_zero.
+Qed.
+
+Theorem addf_commut: forall x y, addf x y = addf y x.
+Proof.
+ destruct x; destruct y; simpl; auto. decEq. apply Float.addf_commut.
+Qed.
+
+Lemma negate_cmp_mismatch:
+ forall c,
+ cmp_mismatch (negate_comparison c) = notbool(cmp_mismatch c).
+Proof.
+ destruct c; reflexivity.
+Qed.
+
+Theorem negate_cmp:
+ forall c x y,
+ cmp (negate_comparison c) x y = notbool (cmp c x y).
+Proof.
+ destruct x; destruct y; simpl; auto.
+ rewrite Int.negate_cmp. apply notbool_negb_1.
+ case (Int.eq i Int.zero). apply negate_cmp_mismatch. reflexivity.
+ case (Int.eq i0 Int.zero). apply negate_cmp_mismatch. reflexivity.
+ case (zeq b b0); intro.
+ rewrite Int.negate_cmp. apply notbool_negb_1.
+ apply negate_cmp_mismatch.
+Qed.
+
+Theorem negate_cmpu:
+ forall c x y,
+ cmpu (negate_comparison c) x y = notbool (cmpu c x y).
+Proof.
+ destruct x; destruct y; simpl; auto.
+ rewrite Int.negate_cmpu. apply notbool_negb_1.
+ case (Int.eq i Int.zero). apply negate_cmp_mismatch. reflexivity.
+ case (Int.eq i0 Int.zero). apply negate_cmp_mismatch. reflexivity.
+ case (zeq b b0); intro.
+ rewrite Int.negate_cmpu. apply notbool_negb_1.
+ apply negate_cmp_mismatch.
+Qed.
+
+Lemma swap_cmp_mismatch:
+ forall c, cmp_mismatch (swap_comparison c) = cmp_mismatch c.
+Proof.
+ destruct c; reflexivity.
+Qed.
+
+Theorem swap_cmp:
+ forall c x y,
+ cmp (swap_comparison c) x y = cmp c y x.
+Proof.
+ destruct x; destruct y; simpl; auto.
+ rewrite Int.swap_cmp. auto.
+ case (Int.eq i Int.zero). apply swap_cmp_mismatch. auto.
+ case (Int.eq i0 Int.zero). apply swap_cmp_mismatch. auto.
+ case (zeq b b0); intro.
+ subst b0. rewrite zeq_true. rewrite Int.swap_cmp. auto.
+ rewrite zeq_false. apply swap_cmp_mismatch. auto.
+Qed.
+
+Theorem swap_cmpu:
+ forall c x y,
+ cmpu (swap_comparison c) x y = cmpu c y x.
+Proof.
+ destruct x; destruct y; simpl; auto.
+ rewrite Int.swap_cmpu. auto.
+ case (Int.eq i Int.zero). apply swap_cmp_mismatch. auto.
+ case (Int.eq i0 Int.zero). apply swap_cmp_mismatch. auto.
+ case (zeq b b0); intro.
+ subst b0. rewrite zeq_true. rewrite Int.swap_cmpu. auto.
+ rewrite zeq_false. apply swap_cmp_mismatch. auto.
+Qed.
+
+Theorem negate_cmpf_eq:
+ forall v1 v2, notbool (cmpf Cne v1 v2) = cmpf Ceq v1 v2.
+Proof.
+ destruct v1; destruct v2; simpl; auto.
+ rewrite Float.cmp_ne_eq. rewrite notbool_negb_1.
+ apply notbool_idem2.
+Qed.
+
+Lemma or_of_bool:
+ forall b1 b2, or (of_bool b1) (of_bool b2) = of_bool (b1 || b2).
+Proof.
+ destruct b1; destruct b2; reflexivity.
+Qed.
+
+Theorem cmpf_le:
+ forall v1 v2, cmpf Cle v1 v2 = or (cmpf Clt v1 v2) (cmpf Ceq v1 v2).
+Proof.
+ destruct v1; destruct v2; simpl; auto.
+ rewrite or_of_bool. decEq. apply Float.cmp_le_lt_eq.
+Qed.
+
+Theorem cmpf_ge:
+ forall v1 v2, cmpf Cge v1 v2 = or (cmpf Cgt v1 v2) (cmpf Ceq v1 v2).
+Proof.
+ destruct v1; destruct v2; simpl; auto.
+ rewrite or_of_bool. decEq. apply Float.cmp_ge_gt_eq.
+Qed.
+
+Definition is_bool (v: val) :=
+ v = Vundef \/ v = Vtrue \/ v = Vfalse.
+
+Lemma of_bool_is_bool:
+ forall b, is_bool (of_bool b).
+Proof.
+ destruct b; unfold is_bool; simpl; tauto.
+Qed.
+
+Lemma undef_is_bool: is_bool Vundef.
+Proof.
+ unfold is_bool; tauto.
+Qed.
+
+Lemma cmp_mismatch_is_bool:
+ forall c, is_bool (cmp_mismatch c).
+Proof.
+ destruct c; simpl; unfold is_bool; tauto.
+Qed.
+
+Lemma cmp_is_bool:
+ forall c v1 v2, is_bool (cmp c v1 v2).
+Proof.
+ destruct v1; destruct v2; simpl; try apply undef_is_bool.
+ apply of_bool_is_bool.
+ case (Int.eq i Int.zero). apply cmp_mismatch_is_bool. apply undef_is_bool.
+ case (Int.eq i0 Int.zero). apply cmp_mismatch_is_bool. apply undef_is_bool.
+ case (zeq b b0); intro. apply of_bool_is_bool. apply cmp_mismatch_is_bool.
+Qed.
+
+Lemma cmpu_is_bool:
+ forall c v1 v2, is_bool (cmpu c v1 v2).
+Proof.
+ destruct v1; destruct v2; simpl; try apply undef_is_bool.
+ apply of_bool_is_bool.
+ case (Int.eq i Int.zero). apply cmp_mismatch_is_bool. apply undef_is_bool.
+ case (Int.eq i0 Int.zero). apply cmp_mismatch_is_bool. apply undef_is_bool.
+ case (zeq b b0); intro. apply of_bool_is_bool. apply cmp_mismatch_is_bool.
+Qed.
+
+Lemma cmpf_is_bool:
+ forall c v1 v2, is_bool (cmpf c v1 v2).
+Proof.
+ destruct v1; destruct v2; simpl;
+ apply undef_is_bool || apply of_bool_is_bool.
+Qed.
+
+Lemma notbool_is_bool:
+ forall v, is_bool (notbool v).
+Proof.
+ destruct v; simpl.
+ apply undef_is_bool. apply of_bool_is_bool.
+ apply undef_is_bool. unfold is_bool; tauto.
+Qed.
+
+Lemma notbool_xor:
+ forall v, is_bool v -> v = xor (notbool v) Vone.
+Proof.
+ intros. elim H; intro.
+ subst v. reflexivity.
+ elim H0; intro; subst v; reflexivity.
+Qed.
+
+End Val.
diff --git a/caml/Allocationaux.ml b/caml/Allocationaux.ml
new file mode 100644
index 0000000..8e4f328
--- /dev/null
+++ b/caml/Allocationaux.ml
@@ -0,0 +1,39 @@
+open Camlcoq
+open Datatypes
+open List
+open AST
+open Locations
+
+type status = To_move | Being_moved | Moved
+
+let parallel_move_order lsrc ldst =
+ let src = array_of_coqlist lsrc
+ and dst = array_of_coqlist ldst in
+ let n = Array.length src in
+ let status = Array.make n To_move in
+ let moves = ref Coq_nil in
+ let rec move_one i =
+ if src.(i) <> dst.(i) then begin
+ status.(i) <- Being_moved;
+ for j = 0 to n - 1 do
+ if src.(j) = dst.(i) then
+ match status.(j) with
+ To_move ->
+ move_one j
+ | Being_moved ->
+ let tmp =
+ match Loc.coq_type src.(j) with
+ | Tint -> R IT2
+ | Tfloat -> R FT2 in
+ moves := Coq_cons (Coq_pair(src.(j), tmp), !moves);
+ src.(j) <- tmp
+ | Moved ->
+ ()
+ done;
+ moves := Coq_cons(Coq_pair(src.(i), dst.(i)), !moves);
+ status.(i) <- Moved
+ end in
+ for i = 0 to n - 1 do
+ if status.(i) = To_move then move_one i
+ done;
+ List.rev !moves
diff --git a/caml/Allocationaux.mli b/caml/Allocationaux.mli
new file mode 100644
index 0000000..0cf3b94
--- /dev/null
+++ b/caml/Allocationaux.mli
@@ -0,0 +1,5 @@
+open Datatypes
+open List
+open Locations
+
+val parallel_move_order: loc list -> loc list -> (loc, loc) prod list
diff --git a/caml/CMlexer.mli b/caml/CMlexer.mli
new file mode 100644
index 0000000..573c530
--- /dev/null
+++ b/caml/CMlexer.mli
@@ -0,0 +1,4 @@
+(* $Id: CMlexer.mli,v 1.1 2005/01/21 13:11:07 xleroy Exp $ *)
+
+val token: Lexing.lexbuf -> CMparser.token
+exception Error of string
diff --git a/caml/CMlexer.mll b/caml/CMlexer.mll
new file mode 100644
index 0000000..b8d3ae7
--- /dev/null
+++ b/caml/CMlexer.mll
@@ -0,0 +1,112 @@
+(* $Id: CMlexer.mll,v 1.3 2005/03/21 15:53:00 xleroy Exp $ *)
+
+{
+open Camlcoq
+open CMparser
+exception Error of string
+}
+
+let blank = [' ' '\009' '\012' '\010' '\013']
+let floatlit =
+ ['0'-'9'] ['0'-'9' '_']*
+ ('.' ['0'-'9' '_']* )?
+ (['e' 'E'] ['+' '-']? ['0'-'9'] ['0'-'9' '_']*)?
+let ident = ['A'-'Z' 'a'-'z' '_'] ['A'-'Z' 'a'-'z' '_' '0'-'9']*
+let intlit = "-"? ( ['0'-'9']+ | "0x" ['0'-'9' 'a'-'f' 'A'-'F']+
+ | "0o" ['0'-'7']+ | "0b" ['0'-'1']+ )
+let stringlit = "\"" [ ^ '"' ] * '"'
+
+rule token = parse
+ | blank + { token lexbuf }
+ | "/*" { comment lexbuf; token lexbuf }
+ | "absf" { ABSF }
+ | "&" { AMPERSAND }
+ | "&&" { AMPERSANDAMPERSAND }
+ | "!" { BANG }
+ | "!=" { BANGEQUAL }
+ | "!=f" { BANGEQUALF }
+ | "!=u" { BANGEQUALU }
+ | "|" { BAR }
+ | "||" { BARBAR }
+ | "^" { CARET }
+ | ":" { COLON }
+ | "," { COMMA }
+ | "$" { DOLLAR }
+ | "else" { ELSE }
+ | "=" { EQUAL }
+ | "==" { EQUALEQUAL }
+ | "==f" { EQUALEQUALF }
+ | "==u" { EQUALEQUALU }
+ | "exit" { EXIT }
+ | "float" { FLOAT }
+ | "float32" { FLOAT32 }
+ | "float64" { FLOAT64 }
+ | "floatofint" { FLOATOFINT }
+ | "floatofintu" { FLOATOFINTU }
+ | ">" { GREATER }
+ | ">f" { GREATERF }
+ | ">u" { GREATERU }
+ | ">=" { GREATEREQUAL }
+ | ">=f" { GREATEREQUALF }
+ | ">=u" { GREATEREQUALU }
+ | ">>" { GREATERGREATER }
+ | ">>u" { GREATERGREATERU }
+ | "if" { IF }
+ | "in" { IN }
+ | "int" { INT }
+ | "int16s" { INT16S }
+ | "int16u" { INT16U }
+ | "int32" { INT32 }
+ | "int8s" { INT8S }
+ | "int8u" { INT8U }
+ | "intoffloat" { INTOFFLOAT }
+ | "{" { LBRACE }
+ | "{{" { LBRACELBRACE }
+ | "[" { LBRACKET }
+ | "<" { LESS }
+ | "<u" { LESSU }
+ | "<f" { LESSF }
+ | "<=" { LESSEQUAL }
+ | "<=u" { LESSEQUALU }
+ | "<=f" { LESSEQUALF }
+ | "<<" { LESSLESS }
+ | "let" { LET }
+ | "loop" { LOOP }
+ | "(" { LPAREN }
+ | "-" { MINUS }
+ | "->" { MINUSGREATER }
+ | "-f" { MINUSF }
+ | "%" { PERCENT }
+ | "%u" { PERCENTU }
+ | "+" { PLUS }
+ | "+f" { PLUSF }
+ | "?" { QUESTION }
+ | "}" { RBRACE }
+ | "}}" { RBRACERBRACE }
+ | "]" { RBRACKET }
+ | "return" { RETURN }
+ | ")" { RPAREN }
+ | ";" { SEMICOLON }
+ | "/" { SLASH }
+ | "/f" { SLASHF }
+ | "/u" { SLASHU }
+ | "stack" { STACK }
+ | "*" { STAR }
+ | "*f" { STARF }
+ | "switch" { SWITCH }
+ | "~" { TILDE }
+ | "var" { VAR }
+ | "void" { VOID }
+
+ | intlit { INTLIT(Int32.of_string(Lexing.lexeme lexbuf)) }
+ | floatlit { FLOATLIT(float_of_string(Lexing.lexeme lexbuf)) }
+ | stringlit { let s = Lexing.lexeme lexbuf in
+ STRINGLIT(intern_string(String.sub s 1 (String.length s - 2))) }
+ | ident { IDENT(intern_string(Lexing.lexeme lexbuf)) }
+ | eof { EOF }
+ | _ { raise(Error("illegal character `" ^ Char.escaped (Lexing.lexeme_char lexbuf 0) ^ "'")) }
+
+and comment = parse
+ "*/" { () }
+ | eof { raise(Error "unterminated comment") }
+ | _ { comment lexbuf }
diff --git a/caml/CMparser.mly b/caml/CMparser.mly
new file mode 100644
index 0000000..0b19bce
--- /dev/null
+++ b/caml/CMparser.mly
@@ -0,0 +1,327 @@
+/* $Id: CMparser.mly,v 1.2 2005/03/21 15:53:00 xleroy Exp $ */
+
+%{
+open Datatypes
+open List
+open Camlcoq
+open BinPos
+open BinInt
+open Integers
+open AST
+open Op
+open Cminor
+
+let intconst n =
+ Eop(Ointconst(coqint_of_camlint n), Enil)
+
+let andbool e1 e2 =
+ Cmconstr.conditionalexpr e1 e2 (intconst 0l)
+let orbool e1 e2 =
+ Cmconstr.conditionalexpr e1 (intconst 1l) e2
+
+%}
+
+%token ABSF
+%token AMPERSAND
+%token AMPERSANDAMPERSAND
+%token BANG
+%token BANGEQUAL
+%token BANGEQUALF
+%token BANGEQUALU
+%token BAR
+%token BARBAR
+%token CARET
+%token COLON
+%token COMMA
+%token DOLLAR
+%token ELSE
+%token EQUAL
+%token EQUALEQUAL
+%token EQUALEQUALF
+%token EQUALEQUALU
+%token EOF
+%token EXIT
+%token FLOAT
+%token FLOAT32
+%token FLOAT64
+%token <float> FLOATLIT
+%token FLOATOFINT
+%token FLOATOFINTU
+%token GREATER
+%token GREATERF
+%token GREATERU
+%token GREATEREQUAL
+%token GREATEREQUALF
+%token GREATEREQUALU
+%token GREATERGREATER
+%token GREATERGREATERU
+%token <AST.ident> IDENT
+%token IF
+%token IN
+%token INT
+%token INT16S
+%token INT16U
+%token INT32
+%token INT8S
+%token INT8U
+%token <int32> INTLIT
+%token INTOFFLOAT
+%token LBRACE
+%token LBRACELBRACE
+%token LBRACKET
+%token LESS
+%token LESSU
+%token LESSF
+%token LESSEQUAL
+%token LESSEQUALU
+%token LESSEQUALF
+%token LESSLESS
+%token LET
+%token LOOP
+%token LPAREN
+%token MINUS
+%token MINUSF
+%token MINUSGREATER
+%token PERCENT
+%token PERCENTU
+%token PLUS
+%token PLUSF
+%token QUESTION
+%token RBRACE
+%token RBRACERBRACE
+%token RBRACKET
+%token RETURN
+%token RPAREN
+%token SEMICOLON
+%token SLASH
+%token SLASHF
+%token SLASHU
+%token STACK
+%token STAR
+%token STARF
+%token <AST.ident> STRINGLIT
+%token SWITCH
+%token TILDE
+%token VAR
+%token VOID
+
+/* Precedences from low to high */
+
+%left COMMA
+%left p_let
+%right EQUAL
+%right QUESTION COLON
+%left BARBAR
+%left AMPERSANDAMPERSAND
+%left BAR
+%left CARET
+%left AMPERSAND
+%left EQUALEQUAL BANGEQUAL LESS LESSEQUAL GREATER GREATEREQUAL EQUALEQUALU BANGEQUALU LESSU LESSEQUALU GREATERU GREATEREQUALU EQUALEQUALF BANGEQUALF LESSF LESSEQUALF GREATERF GREATEREQUALF
+%left LESSLESS GREATERGREATER GREATERGREATERU
+%left PLUS PLUSF MINUS MINUSF
+%left STAR SLASH PERCENT STARF SLASHF SLASHU PERCENTU
+%nonassoc BANG TILDE p_uminus ABSF INTOFFLOAT FLOATOFINT FLOATOFINTU INT8S INT8U INT16S INT16U FLOAT32
+%left LPAREN
+
+/* Entry point */
+
+%start prog
+%type <Cminor.program> prog
+
+%%
+
+/* Programs */
+
+prog:
+ global_declarations proc_list EOF
+ { { prog_funct = List.rev $2;
+ prog_main = intern_string "main";
+ prog_vars = List.rev $1; } }
+;
+
+global_declarations:
+ /* empty */ { Coq_nil }
+ | global_declarations global_declaration { Coq_cons($2, $1) }
+;
+
+global_declaration:
+ VAR STRINGLIT LBRACKET INTLIT RBRACKET { Coq_pair($2, z_of_camlint $4) }
+;
+
+proc_list:
+ /* empty */ { Coq_nil }
+ | proc_list proc { Coq_cons($2, $1) }
+;
+
+/* Procedures */
+
+proc:
+ STRINGLIT LPAREN parameters RPAREN COLON signature
+ LBRACE
+ stack_declaration
+ var_declarations
+ stmt_list
+ RBRACE
+ { Coq_pair($1,
+ { fn_sig = $6;
+ fn_params = List.rev $3;
+ fn_vars = List.rev $9;
+ fn_stackspace = $8;
+ fn_body = $10 }) }
+;
+
+signature:
+ type_
+ { {sig_args = Coq_nil; sig_res = Some $1} }
+ | VOID
+ { {sig_args = Coq_nil; sig_res = None} }
+ | type_ MINUSGREATER signature
+ { let s = $3 in {s with sig_args = Coq_cons($1, s.sig_args)} }
+;
+
+parameters:
+ /* empty */ { Coq_nil }
+ | parameter_list { $1 }
+;
+
+parameter_list:
+ IDENT { Coq_cons($1, Coq_nil) }
+ | parameter_list COMMA IDENT { Coq_cons($3, $1) }
+;
+
+stack_declaration:
+ /* empty */ { Z0 }
+ | STACK INTLIT { z_of_camlint $2 }
+;
+
+var_declarations:
+ /* empty */ { Coq_nil }
+ | var_declarations var_declaration { List.app $2 $1 }
+;
+
+var_declaration:
+ VAR parameter_list SEMICOLON { $2 }
+;
+
+/* Statements */
+
+stmt:
+ expr SEMICOLON { Sexpr $1 }
+ | IF LPAREN expr RPAREN stmts ELSE stmts { Cmconstr.ifthenelse $3 $5 $7 }
+ | IF LPAREN expr RPAREN stmts { Cmconstr.ifthenelse $3 $5 Snil }
+ | LOOP stmts { Sloop($2) }
+ | LBRACELBRACE stmts RBRACERBRACE { Sblock($2) }
+ | EXIT SEMICOLON { Sexit O }
+ | EXIT INTLIT SEMICOLON { Sexit (nat_of_camlint(Int32.pred $2)) }
+ | RETURN SEMICOLON { Sreturn None }
+ | RETURN expr SEMICOLON { Sreturn (Some $2) }
+;
+
+stmts:
+ LBRACE stmt_list RBRACE { $2 }
+ | stmt { Scons($1, Snil) }
+;
+
+stmt_list:
+ /* empty */ { Snil }
+ | stmt stmt_list { Scons($1, $2) }
+;
+
+/* Expressions */
+
+expr:
+ LPAREN expr RPAREN { $2 }
+ | IDENT { Evar $1 }
+ | IDENT EQUAL expr { Eassign($1, $3) }
+ | INTLIT { intconst $1 }
+ | FLOATLIT { Eop(Ofloatconst $1, Enil) }
+ | STRINGLIT { Eop(Oaddrsymbol($1, Int.zero), Enil) }
+ | AMPERSAND INTLIT { Eop(Oaddrstack(coqint_of_camlint $2), Enil) }
+ | MINUS expr %prec p_uminus { Cmconstr.negint $2 }
+ | MINUSF expr %prec p_uminus { Cmconstr.negfloat $2 }
+ | ABSF expr { Cmconstr.absfloat $2 }
+ | INTOFFLOAT expr { Cmconstr.intoffloat $2 }
+ | FLOATOFINT expr { Cmconstr.floatofint $2 }
+ | FLOATOFINTU expr { Cmconstr.floatofintu $2 }
+ | TILDE expr { Cmconstr.notint $2 }
+ | BANG expr { Cmconstr.notbool $2 }
+ | INT8S expr { Cmconstr.cast8signed $2 }
+ | INT8U expr { Cmconstr.cast8unsigned $2 }
+ | INT16S expr { Cmconstr.cast16signed $2 }
+ | INT16U expr { Cmconstr.cast16unsigned $2 }
+ | FLOAT32 expr { Cmconstr.singleoffloat $2 }
+ | expr PLUS expr { Cmconstr.add $1 $3 }
+ | expr MINUS expr { Cmconstr.sub $1 $3 }
+ | expr STAR expr { Cmconstr.mul $1 $3 }
+ | expr SLASH expr { Cmconstr.divs $1 $3 }
+ | expr PERCENT expr { Cmconstr.mods $1 $3 }
+ | expr SLASHU expr { Cmconstr.divu $1 $3 }
+ | expr PERCENTU expr { Cmconstr.modu $1 $3 }
+ | expr AMPERSAND expr { Cmconstr.coq_and $1 $3 }
+ | expr BAR expr { Cmconstr.coq_or $1 $3 }
+ | expr CARET expr { Cmconstr.xor $1 $3 }
+ | expr LESSLESS expr { Cmconstr.shl $1 $3 }
+ | expr GREATERGREATER expr { Cmconstr.shr $1 $3 }
+ | expr GREATERGREATERU expr { Cmconstr.shru $1 $3 }
+ | expr PLUSF expr { Cmconstr.addf $1 $3 }
+ | expr MINUSF expr { Cmconstr.subf $1 $3 }
+ | expr STARF expr { Cmconstr.mulf $1 $3 }
+ | expr SLASHF expr { Cmconstr.divf $1 $3 }
+ | expr EQUALEQUAL expr { Cmconstr.cmp Ceq $1 $3 }
+ | expr BANGEQUAL expr { Cmconstr.cmp Cne $1 $3 }
+ | expr LESS expr { Cmconstr.cmp Clt $1 $3 }
+ | expr LESSEQUAL expr { Cmconstr.cmp Cle $1 $3 }
+ | expr GREATER expr { Cmconstr.cmp Cgt $1 $3 }
+ | expr GREATEREQUAL expr { Cmconstr.cmp Cge $1 $3 }
+ | expr EQUALEQUALU expr { Cmconstr.cmpu Ceq $1 $3 }
+ | expr BANGEQUALU expr { Cmconstr.cmpu Cne $1 $3 }
+ | expr LESSU expr { Cmconstr.cmpu Clt $1 $3 }
+ | expr LESSEQUALU expr { Cmconstr.cmpu Cle $1 $3 }
+ | expr GREATERU expr { Cmconstr.cmpu Cgt $1 $3 }
+ | expr GREATEREQUALU expr { Cmconstr.cmpu Cge $1 $3 }
+ | expr EQUALEQUALF expr { Cmconstr.cmpf Ceq $1 $3 }
+ | expr BANGEQUALF expr { Cmconstr.cmpf Cne $1 $3 }
+ | expr LESSF expr { Cmconstr.cmpf Clt $1 $3 }
+ | expr LESSEQUALF expr { Cmconstr.cmpf Cle $1 $3 }
+ | expr GREATERF expr { Cmconstr.cmpf Cgt $1 $3 }
+ | expr GREATEREQUALF expr { Cmconstr.cmpf Cge $1 $3 }
+ | memory_chunk LBRACKET expr RBRACKET { Cmconstr.load $1 $3 }
+ | memory_chunk LBRACKET expr RBRACKET EQUAL expr
+ { Cmconstr.store $1 $3 $6 }
+ | expr LPAREN expr_list RPAREN COLON signature
+ { Ecall($6, $1, $3) }
+ | expr AMPERSANDAMPERSAND expr { andbool $1 $3 }
+ | expr BARBAR expr { orbool $1 $3 }
+ | expr QUESTION expr COLON expr { Cmconstr.conditionalexpr $1 $3 $5 }
+ | LET expr IN expr %prec p_let { Elet($2, $4) }
+ | DOLLAR INTLIT { Eletvar (nat_of_camlint $2) }
+;
+
+expr_list:
+ /* empty */ { Enil }
+ | expr_list_1 { $1 }
+;
+
+expr_list_1:
+ expr %prec COMMA { Econs($1, Enil) }
+ | expr COMMA expr_list_1 { Econs($1, $3) }
+;
+
+memory_chunk:
+ INT8S { Mint8signed }
+ | INT8U { Mint8unsigned }
+ | INT16S { Mint16signed }
+ | INT16U { Mint16unsigned }
+ | INT32 { Mint32 }
+ | INT { Mint32 }
+ | FLOAT32 { Mfloat32 }
+ | FLOAT64 { Mfloat64 }
+ | FLOAT { Mfloat64 }
+;
+
+/* Types */
+
+type_:
+ INT { Tint }
+ | FLOAT { Tfloat }
+;
diff --git a/caml/Camlcoq.ml b/caml/Camlcoq.ml
new file mode 100644
index 0000000..c3d9665
--- /dev/null
+++ b/caml/Camlcoq.ml
@@ -0,0 +1,98 @@
+(* Library of useful Caml <-> Coq conversions *)
+
+open Datatypes
+open List
+open BinPos
+open BinInt
+
+(* Integers *)
+
+let rec camlint_of_positive = function
+ | Coq_xI p -> Int32.add (Int32.shift_left (camlint_of_positive p) 1) 1l
+ | Coq_xO p -> Int32.shift_left (camlint_of_positive p) 1
+ | Coq_xH -> 1l
+
+let camlint_of_z = function
+ | Z0 -> 0l
+ | Zpos p -> camlint_of_positive p
+ | Zneg p -> Int32.neg (camlint_of_positive p)
+
+let camlint_of_coqint : Integers.int -> int32 = camlint_of_z
+
+let rec nat_of_camlint n =
+ assert (n >= 0l);
+ if n = 0l then O else S (nat_of_camlint (Int32.sub n 1l))
+
+let rec positive_of_camlint n =
+ if n = 0l then assert false else
+ if n = 1l then Coq_xH else
+ if Int32.logand n 1l = 0l
+ then Coq_xO (positive_of_camlint (Int32.shift_right n 1))
+ else Coq_xI (positive_of_camlint (Int32.shift_right n 1))
+
+let z_of_camlint n =
+ if n = 0l then Z0 else
+ if n > 0l then Zpos (positive_of_camlint n)
+ else Zneg (positive_of_camlint (Int32.neg n))
+
+let coqint_of_camlint : int32 -> Integers.int = z_of_camlint
+
+(* Strings *)
+
+let atom_of_string = (Hashtbl.create 17 : (string, positive) Hashtbl.t)
+let string_of_atom = (Hashtbl.create 17 : (positive, string) Hashtbl.t)
+let next_atom = ref Coq_xH
+
+let intern_string s =
+ try
+ Hashtbl.find atom_of_string s
+ with Not_found ->
+ let a = !next_atom in
+ next_atom := coq_Psucc !next_atom;
+ Hashtbl.add atom_of_string s a;
+ Hashtbl.add string_of_atom a s;
+ a
+
+let extern_atom a =
+ try
+ Hashtbl.find string_of_atom a
+ with Not_found ->
+ "<unknown atom>"
+
+(* Lists *)
+
+let rec coqlist_iter f = function
+ Coq_nil -> ()
+ | Coq_cons(a,l) -> f a; coqlist_iter f l
+
+(* Helpers *)
+
+let rec list_iter f = function
+ [] -> ()
+ | a::l -> f a; list_iter f l
+
+let rec list_memq x = function
+ [] -> false
+ | a::l -> a == x || list_memq x l
+
+let rec list_exists p = function
+ [] -> false
+ | a::l -> p a || list_exists p l
+
+let rec list_filter p = function
+ [] -> []
+ | x :: l -> if p x then x :: list_filter p l else list_filter p l
+
+let rec length_coqlist = function
+ | Coq_nil -> 0
+ | Coq_cons (x, l) -> 1 + length_coqlist l
+
+let array_of_coqlist = function
+ | Coq_nil -> [||]
+ | Coq_cons(hd, tl) as l ->
+ let a = Array.create (length_coqlist l) hd in
+ let rec fill i = function
+ | Coq_nil -> a
+ | Coq_cons(hd, tl) -> a.(i) <- hd; fill (i + 1) tl in
+ fill 1 tl
+
diff --git a/caml/Coloringaux.ml b/caml/Coloringaux.ml
new file mode 100644
index 0000000..f4f4bcd
--- /dev/null
+++ b/caml/Coloringaux.ml
@@ -0,0 +1,615 @@
+open Camlcoq
+open Datatypes
+open BinPos
+open BinInt
+open AST
+open Maps
+open Registers
+open Locations
+open RTL
+open RTLtyping
+open InterfGraph
+open Conventions
+
+(* George-Appel graph coloring *)
+
+(* \subsection{Internal representation of the interference graph} *)
+
+(* To implement George-Appel coloring, we first transform the representation
+ of the interference graph, switching to the following
+ imperative representation that is well suited to the coloring algorithm. *)
+
+(* Each node of the graph (i.e. each pseudo-register) is represented as
+ follows. *)
+
+type node =
+ { ident: reg; (*r register identifier *)
+ typ: typ; (*r its type *)
+ regclass: int; (*r identifier of register class *)
+ spillcost: float; (*r estimated cost of spilling *)
+ mutable adjlist: node list; (*r all nodes it interferes with *)
+ mutable degree: int; (*r number of adjacent nodes *)
+ mutable movelist: move list; (*r list of moves it is involved in *)
+ mutable alias: node option; (*r [Some n] if coalesced with [n] *)
+ mutable color: loc option; (*r chosen color *)
+ mutable nstate: nodestate; (*r in which set of nodes it is *)
+ mutable nprev: node; (*r for double linking *)
+ mutable nnext: node (*r for double linking *)
+ }
+
+(* These are the possible states for nodes. *)
+
+and nodestate =
+ | Colored
+ | Initial
+ | SimplifyWorklist
+ | FreezeWorklist
+ | SpillWorklist
+ | CoalescedNodes
+ | SelectStack
+
+(* Each move (i.e. wish to be put in the same location) is represented
+ as follows. *)
+
+and move =
+ { src: node; (*r source of the move *)
+ dst: node; (*r destination of the move *)
+ mutable mstate: movestate; (*r in which set of moves it is *)
+ mutable mprev: move; (*r for double linking *)
+ mutable mnext: move (*r for double linking *)
+ }
+
+(* These are the possible states for moves *)
+
+and movestate =
+ | CoalescedMoves
+ | ConstrainedMoves
+ | FrozenMoves
+ | WorklistMoves
+ | ActiveMoves
+
+(* The algorithm manipulates partitions of the nodes and of the moves
+ according to their states, frequently moving a node or a move from
+ a state to another, and frequently enumerating all nodes or all moves
+ of a given state. To support these operations efficiently,
+ nodes or moves having the same state are put into imperative doubly-linked
+ lists, allowing for constant-time insertion and removal, and linear-time
+ scanning. We now define the operations over these doubly-linked lists. *)
+
+module DLinkNode = struct
+ type t = node
+ let make state =
+ let rec empty =
+ { ident = Coq_xH; typ = Tint; regclass = 0;
+ adjlist = []; degree = 0; spillcost = 0.0;
+ movelist = []; alias = None; color = None;
+ nstate = state; nprev = empty; nnext = empty }
+ in empty
+ let dummy = make Colored
+ let clear dl = dl.nnext <- dl; dl.nprev <- dl
+ let notempty dl = dl.nnext != dl
+ let insert n dl =
+ n.nstate <- dl.nstate;
+ n.nnext <- dl.nnext; n.nprev <- dl;
+ dl.nnext.nprev <- n; dl.nnext <- n
+ let remove n dl =
+ assert (n.nstate = dl.nstate);
+ n.nnext.nprev <- n.nprev; n.nprev.nnext <- n.nnext
+ let move n dl1 dl2 =
+ remove n dl1; insert n dl2
+ let pick dl =
+ let n = dl.nnext in remove n dl; n
+ let iter f dl =
+ let rec iter n = if n != dl then (f n; iter n.nnext)
+ in iter dl.nnext
+ let fold f dl accu =
+ let rec fold n accu = if n == dl then accu else fold n.nnext (f n accu)
+ in fold dl.nnext accu
+end
+
+module DLinkMove = struct
+ type t = move
+ let make state =
+ let rec empty =
+ { src = DLinkNode.dummy; dst = DLinkNode.dummy;
+ mstate = state; mprev = empty; mnext = empty }
+ in empty
+ let dummy = make CoalescedMoves
+ let clear dl = dl.mnext <- dl; dl.mprev <- dl
+ let notempty dl = dl.mnext != dl
+ let insert m dl =
+ m.mstate <- dl.mstate;
+ m.mnext <- dl.mnext; m.mprev <- dl;
+ dl.mnext.mprev <- m; dl.mnext <- m
+ let remove m dl =
+ assert (m.mstate = dl.mstate);
+ m.mnext.mprev <- m.mprev; m.mprev.mnext <- m.mnext
+ let move m dl1 dl2 =
+ remove m dl1; insert m dl2
+ let pick dl =
+ let m = dl.mnext in remove m dl; m
+ let iter f dl =
+ let rec iter m = if m != dl then (f m; iter m.mnext)
+ in iter dl.mnext
+ let fold f dl accu =
+ let rec fold m accu = if m == dl then accu else fold m.mnext (f m accu)
+ in fold dl.mnext accu
+end
+
+(* \subsection{The George-Appel algorithm} *)
+
+(* Below is a straigthforward translation of the pseudo-code at the end
+ of the TOPLAS article by George and Appel. Two bugs were fixed
+ and are marked as such. Please refer to the article for explanations. *)
+
+(* Low-degree, non-move-related nodes *)
+let simplifyWorklist = DLinkNode.make SimplifyWorklist
+
+(* Low-degree, move-related nodes *)
+let freezeWorklist = DLinkNode.make FreezeWorklist
+
+(* High-degree nodes *)
+let spillWorklist = DLinkNode.make SpillWorklist
+
+(* Nodes that have been coalesced *)
+let coalescedNodes = DLinkNode.make CoalescedNodes
+
+(* Moves that have been coalesced *)
+let coalescedMoves = DLinkMove.make CoalescedMoves
+
+(* Moves whose source and destination interfere *)
+let constrainedMoves = DLinkMove.make ConstrainedMoves
+
+(* Moves that will no longer be considered for coalescing *)
+let frozenMoves = DLinkMove.make FrozenMoves
+
+(* Moves enabled for possible coalescing *)
+let worklistMoves = DLinkMove.make WorklistMoves
+
+(* Moves not yet ready for coalescing *)
+let activeMoves = DLinkMove.make ActiveMoves
+
+(* Initialization of all global data structures *)
+
+let init() =
+ DLinkNode.clear simplifyWorklist;
+ DLinkNode.clear freezeWorklist;
+ DLinkNode.clear spillWorklist;
+ DLinkNode.clear coalescedNodes;
+ DLinkMove.clear coalescedMoves;
+ DLinkMove.clear frozenMoves;
+ DLinkMove.clear worklistMoves;
+ DLinkMove.clear activeMoves
+
+(* Determine if two nodes interfere *)
+
+let interfere n1 n2 =
+ if n1.degree < n2.degree
+ then list_memq n2 n1.adjlist
+ else list_memq n1 n2.adjlist
+
+(* Add an edge to the graph. Assume edge is not in graph already *)
+
+let addEdge n1 n2 =
+ n1.adjlist <- n2 :: n1.adjlist;
+ n1.degree <- 1 + n1.degree;
+ n2.adjlist <- n1 :: n2.adjlist;
+ n2.degree <- 1 + n2.degree
+
+(* Apply the given function to the relevant adjacent nodes of a node *)
+
+let iterAdjacent f n =
+ list_iter
+ (fun n ->
+ match n.nstate with
+ | SelectStack | CoalescedNodes -> ()
+ | _ -> f n)
+ n.adjlist
+
+(* Determine the moves affecting a node *)
+
+let moveIsActiveOrWorklist m =
+ match m.mstate with
+ | ActiveMoves | WorklistMoves -> true
+ | _ -> false
+
+let nodeMoves n =
+ list_filter moveIsActiveOrWorklist n.movelist
+
+(* Determine whether a node is involved in a move *)
+
+let moveRelated n =
+ list_exists moveIsActiveOrWorklist n.movelist
+
+(*i
+(* Check invariants *)
+
+let degreeInvariant n =
+ let c = ref 0 in
+ iterAdjacent (fun n -> incr c) n;
+ if !c <> n.degree then
+ fatal_error("degree invariant violated by " ^ name_of_node n)
+
+let simplifyWorklistInvariant n =
+ if n.degree < num_available_registers.(n.regclass)
+ && not (moveRelated n)
+ then ()
+ else fatal_error("simplify worklist invariant violated by " ^ name_of_node n)
+
+let freezeWorklistInvariant n =
+ if n.degree < num_available_registers.(n.regclass)
+ && moveRelated n
+ then ()
+ else fatal_error("freeze worklist invariant violated by " ^ name_of_node n)
+
+let spillWorklistInvariant n =
+ if n.degree >= num_available_registers.(n.regclass)
+ then ()
+ else fatal_error("spill worklist invariant violated by " ^ name_of_node n)
+
+let checkInvariants () =
+ DLinkNode.iter
+ (fun n -> degreeInvariant n; simplifyWorklistInvariant n)
+ simplifyWorklist;
+ DLinkNode.iter
+ (fun n -> degreeInvariant n; freezeWorklistInvariant n)
+ freezeWorklist;
+ DLinkNode.iter
+ (fun n -> degreeInvariant n; spillWorklistInvariant n)
+ spillWorklist
+i*)
+
+(* Register classes *)
+
+let class_of_type = function Tint -> 0 | Tfloat -> 1
+
+let num_register_classes = 2
+
+let caller_save_registers = [|
+ [| R3; R4; R5; R6; R7; R8; R9; R10 |];
+ [| F1; F2; F3; F4; F5; F6; F7; F8; F9; F10 |]
+|]
+
+let callee_save_registers = [|
+ [| R13; R14; R15; R16; R17; R18; R19; R20; R21; R22;
+ R23; R24; R25; R26; R27; R28; R29; R30; R31 |];
+ [| F14; F15; F16; F17; F18; F19; F20; F21; F22;
+ F23; F24; F25; F26; F27; F28; F29; F30; F31 |]
+|]
+
+let num_available_registers =
+ [| Array.length caller_save_registers.(0)
+ + Array.length callee_save_registers.(0);
+ Array.length caller_save_registers.(1)
+ + Array.length callee_save_registers.(1) |]
+
+(* Build the internal representation of the graph *)
+
+let nodeOfReg r typenv spillcosts =
+ let ty = typenv r in
+ { ident = r; typ = ty; regclass = class_of_type ty;
+ spillcost = (try float(Hashtbl.find spillcosts r) with Not_found -> 0.0);
+ adjlist = []; degree = 0; movelist = []; alias = None;
+ color = None;
+ nstate = Initial;
+ nprev = DLinkNode.dummy; nnext = DLinkNode.dummy }
+
+let nodeOfMreg mr =
+ let ty = mreg_type mr in
+ { ident = Coq_xH; typ = ty; regclass = class_of_type ty;
+ spillcost = 0.0;
+ adjlist = []; degree = 0; movelist = []; alias = None;
+ color = Some (R mr);
+ nstate = Colored;
+ nprev = DLinkNode.dummy; nnext = DLinkNode.dummy }
+
+let build g typenv spillcosts =
+ (* Associate an internal node to each pseudo-register and each location *)
+ let reg_mapping = Hashtbl.create 27
+ and mreg_mapping = Hashtbl.create 27 in
+ let find_reg_node r =
+ try
+ Hashtbl.find reg_mapping r
+ with Not_found ->
+ let n = nodeOfReg r typenv spillcosts in
+ Hashtbl.add reg_mapping r n;
+ n
+ and find_mreg_node mr =
+ try
+ Hashtbl.find mreg_mapping mr
+ with Not_found ->
+ let n = nodeOfMreg mr in
+ Hashtbl.add mreg_mapping mr n;
+ n in
+ (* Fill the adjacency lists and compute the degrees. *)
+ SetRegReg.fold
+ (fun (Coq_pair(r1, r2)) () ->
+ addEdge (find_reg_node r1) (find_reg_node r2))
+ g.interf_reg_reg ();
+ SetRegMreg.fold
+ (fun (Coq_pair(r1, mr2)) () ->
+ addEdge (find_reg_node r1) (find_mreg_node mr2))
+ g.interf_reg_mreg ();
+ (* Process the moves and insert them in worklistMoves *)
+ let add_move n1 n2 =
+ let m =
+ { src = n1; dst = n2; mstate = WorklistMoves;
+ mnext = DLinkMove.dummy; mprev = DLinkMove.dummy } in
+ n1.movelist <- m :: n1.movelist;
+ n2.movelist <- m :: n2.movelist;
+ DLinkMove.insert m worklistMoves in
+ SetRegReg.fold
+ (fun (Coq_pair(r1, r2)) () ->
+ add_move (find_reg_node r1) (find_reg_node r2))
+ g.pref_reg_reg ();
+ SetRegMreg.fold
+ (fun (Coq_pair(r1, mr2)) () ->
+ add_move (find_reg_node r1) (find_mreg_node mr2))
+ g.pref_reg_mreg ();
+ (* Initial partition of nodes into spill / freeze / simplify *)
+ Hashtbl.iter
+ (fun r n ->
+ assert (n.nstate = Initial);
+ let k = num_available_registers.(n.regclass) in
+ if n.degree >= k then
+ DLinkNode.insert n spillWorklist
+ else if moveRelated n then
+ DLinkNode.insert n freezeWorklist
+ else
+ DLinkNode.insert n simplifyWorklist)
+ reg_mapping;
+ reg_mapping
+
+(* Enable moves that have become low-degree related *)
+
+let enableMoves n =
+ list_iter
+ (fun m ->
+ if m.mstate = ActiveMoves
+ then DLinkMove.move m activeMoves worklistMoves)
+ (nodeMoves n)
+
+(* Simulate the removal of a node from the graph *)
+
+let decrementDegree n =
+ let k = num_available_registers.(n.regclass) in
+ let d = n.degree in
+ n.degree <- d - 1;
+ if d = k then begin
+ enableMoves n;
+ iterAdjacent enableMoves n;
+ if n.nstate <> Colored then begin
+ if moveRelated n
+ then DLinkNode.move n spillWorklist freezeWorklist
+ else DLinkNode.move n spillWorklist simplifyWorklist
+ end
+ end
+
+(* Simulate the effect of combining nodes [n1] and [n3] on [n2],
+ where [n2] is a node adjacent to [n3]. *)
+
+let combineEdge n1 n2 =
+ assert (n1 != n2);
+ if interfere n1 n2 then begin
+ decrementDegree n2
+ end else begin
+ n1.adjlist <- n2 :: n1.adjlist;
+ n2.adjlist <- n1 :: n2.adjlist;
+ n1.degree <- n1.degree + 1
+ end
+
+(* Simplification of a low-degree node *)
+
+let simplify () =
+ let n = DLinkNode.pick simplifyWorklist in
+ (*i Printf.printf "Simplifying %s\n" (name_of_node n); i*)
+ n.nstate <- SelectStack;
+ iterAdjacent decrementDegree n;
+ n
+
+(* Briggs' conservative coalescing criterion *)
+
+let canConservativelyCoalesce n1 n2 =
+ let seen = ref Regset.empty in
+ let k = num_available_registers.(n1.regclass) in
+ let c = ref 0 in
+ let consider n =
+ if not (Regset.mem n.ident !seen) then begin
+ seen := Regset.add n.ident !seen;
+ if n.degree >= k then incr c
+ end in
+ iterAdjacent consider n1;
+ iterAdjacent consider n2;
+ !c < k
+
+(* Update worklists after a move was processed *)
+
+let addWorkList u =
+ if (not (u.nstate = Colored))
+ && u.degree < num_available_registers.(u.regclass)
+ && (not (moveRelated u))
+ then DLinkNode.move u freezeWorklist simplifyWorklist
+
+(* Return the canonical representative of a possibly coalesced node *)
+
+let rec getAlias n =
+ match n.alias with None -> n | Some n' -> getAlias n'
+
+(* Combine two nodes *)
+
+let combine u v =
+ (*i Printf.printf "Combining %s and %s\n" (name_of_node u) (name_of_node v); i*)
+ if v.nstate = FreezeWorklist
+ then DLinkNode.move v freezeWorklist coalescedNodes
+ else DLinkNode.move v spillWorklist coalescedNodes;
+ v.alias <- Some u;
+ u.movelist <- u.movelist @ v.movelist;
+ iterAdjacent (combineEdge u) v; (*r original code using [decrementDegree] is buggy *)
+ enableMoves v; (*r added as per Appel's book erratum *)
+ if u.degree >= num_available_registers.(u.regclass)
+ && u.nstate = FreezeWorklist
+ then DLinkNode.move u freezeWorklist spillWorklist
+
+(* Attempt coalescing *)
+
+let coalesce () =
+ let m = DLinkMove.pick worklistMoves in
+ let x = getAlias m.src and y = getAlias m.dst in
+ let (u, v) = if y.nstate = Colored then (y, x) else (x, y) in
+ if u == v then begin
+ DLinkMove.insert m coalescedMoves;
+ addWorkList u
+ end else if v.nstate = Colored || interfere u v then begin
+ DLinkMove.insert m constrainedMoves;
+ addWorkList u;
+ addWorkList v
+ end else if canConservativelyCoalesce u v then begin
+ DLinkMove.insert m coalescedMoves;
+ combine u v;
+ addWorkList u
+ end else begin
+ DLinkMove.insert m activeMoves
+ end
+
+(* Freeze moves associated with node [u] *)
+
+let freezeMoves u =
+ let au = getAlias u in
+ let freeze m =
+ let y = getAlias m.src in
+ let v = if y == au then getAlias m.dst else y in
+ DLinkMove.move m activeMoves frozenMoves;
+ if not (moveRelated v)
+ && v.degree < num_available_registers.(v.regclass)
+ && v.nstate <> Colored
+ then DLinkNode.move v freezeWorklist simplifyWorklist in
+ list_iter freeze (nodeMoves u)
+
+(* Pick a move and freeze it *)
+
+let freeze () =
+ let u = DLinkNode.pick freezeWorklist in
+ (*i Printf.printf "Freezing %s\n" (name_of_node u); i*)
+ DLinkNode.insert u simplifyWorklist;
+ freezeMoves u
+
+(* Chaitin's cost measure *)
+
+let spillCost n = n.spillcost /. float n.degree
+
+(* Spill a node *)
+
+let selectSpill () =
+ (* Find a spillable node of minimal cost *)
+ let (n, cost) =
+ DLinkNode.fold
+ (fun n (best_node, best_cost as best) ->
+ let cost = spillCost n in
+ if cost < best_cost then (n, cost) else best)
+ spillWorklist (DLinkNode.dummy, infinity) in
+ assert (n != DLinkNode.dummy);
+ DLinkNode.remove n spillWorklist;
+ (*i Printf.printf "Spilling %s\n" (name_of_node n); i*)
+ freezeMoves n;
+ n.nstate <- SelectStack;
+ iterAdjacent decrementDegree n;
+ n
+
+(* Produce the order of nodes that we'll use for coloring *)
+
+let rec nodeOrder stack =
+ (*i checkInvariants(); i*)
+ if DLinkNode.notempty simplifyWorklist then
+ (let n = simplify() in nodeOrder (n :: stack))
+ else if DLinkMove.notempty worklistMoves then
+ (coalesce(); nodeOrder stack)
+ else if DLinkNode.notempty freezeWorklist then
+ (freeze(); nodeOrder stack)
+ else if DLinkNode.notempty spillWorklist then
+ (let n = selectSpill() in nodeOrder (n :: stack))
+ else
+ stack
+
+(* Assign a color (i.e. a hardware register or a stack location)
+ to a node. The color is chosen among the colors that are not
+ assigned to nodes with which this node interferes. The choice
+ is guided by the following heuristics: consider first caller-save
+ hardware register of the correct type; second, callee-save registers;
+ third, a stack location. Callee-save registers and stack locations
+ are ``expensive'' resources, so we try to minimize their number
+ by picking the smallest available callee-save register or stack location.
+ In contrast, caller-save registers are ``free'', so we pick an
+ available one pseudo-randomly. *)
+
+module Locset =
+ Set.Make(struct type t = loc let compare = compare end)
+
+let start_points = Array.make num_register_classes 0
+
+let find_reg conflicts regclass =
+ let rec find avail curr last =
+ if curr >= last then None else begin
+ let l = R avail.(curr) in
+ if Locset.mem l conflicts
+ then find avail (curr + 1) last
+ else Some l
+ end in
+ let caller_save = caller_save_registers.(regclass)
+ and callee_save = callee_save_registers.(regclass)
+ and start = start_points.(regclass) in
+ match find caller_save start (Array.length caller_save) with
+ | Some _ as res ->
+ start_points.(regclass) <-
+ (if start + 1 < Array.length caller_save then start + 1 else 0);
+ res
+ | None ->
+ match find caller_save 0 start with
+ | Some _ as res ->
+ start_points.(regclass) <-
+ (if start + 1 < Array.length caller_save then start + 1 else 0);
+ res
+ | None ->
+ find callee_save 0 (Array.length callee_save)
+
+let find_slot conflicts typ =
+ let rec find curr =
+ let l = S(Local(curr, typ)) in
+ if Locset.mem l conflicts then find (coq_Zsucc curr) else l
+ in find Z0
+
+let assign_color n =
+ let conflicts = ref Locset.empty in
+ list_iter
+ (fun n' ->
+ match (getAlias n').color with
+ | None -> ()
+ | Some l -> conflicts := Locset.add l !conflicts)
+ n.adjlist;
+ match find_reg !conflicts n.regclass with
+ | Some loc ->
+ n.color <- Some loc
+ | None ->
+ n.color <- Some (find_slot !conflicts n.typ)
+
+(* Extract the location of a node *)
+
+let location_of_node n =
+ match n.color with
+ | None -> assert false
+ | Some loc -> loc
+
+(* Estimate spilling costs - TODO *)
+
+let spill_costs f = Hashtbl.create 7
+
+(* This is the entry point for graph coloring. *)
+
+let graph_coloring (f: coq_function) (g: graph) (env: regenv) (regs: Regset.t)
+ : (reg -> loc) =
+ init();
+ Array.fill start_points 0 num_register_classes 0;
+ let mapping = build g env (spill_costs f) in
+ list_iter assign_color (nodeOrder []);
+ fun r ->
+ try location_of_node (getAlias (Hashtbl.find mapping r))
+ with Not_found -> R IT1 (* any location *)
diff --git a/caml/Coloringaux.mli b/caml/Coloringaux.mli
new file mode 100644
index 0000000..ff4cfea
--- /dev/null
+++ b/caml/Coloringaux.mli
@@ -0,0 +1,8 @@
+open Registers
+open Locations
+open RTL
+open RTLtyping
+open InterfGraph
+
+val graph_coloring:
+ coq_function -> graph -> regenv -> Regset.t -> (reg -> loc)
diff --git a/caml/Floataux.ml b/caml/Floataux.ml
new file mode 100644
index 0000000..f43efa2
--- /dev/null
+++ b/caml/Floataux.ml
@@ -0,0 +1,23 @@
+open Camlcoq
+
+let singleoffloat f =
+ Int32.float_of_bits (Int32.bits_of_float f)
+
+let intoffloat f =
+ coqint_of_camlint (Int32.of_float f)
+
+let floatofint i =
+ Int32.to_float (camlint_of_coqint i)
+
+let floatofintu i =
+ Int64.to_float (Int64.logand (Int64.of_int32 (camlint_of_coqint i))
+ 0xFFFFFFFFL)
+
+let cmp c (x: float) (y: float) =
+ match c with
+ | AST.Ceq -> x = y
+ | AST.Cne -> x <> y
+ | AST.Clt -> x < y
+ | AST.Cle -> x <= y
+ | AST.Cgt -> x > y
+ | AST.Cge -> x >= y
diff --git a/caml/Main2.ml b/caml/Main2.ml
new file mode 100644
index 0000000..b701419
--- /dev/null
+++ b/caml/Main2.ml
@@ -0,0 +1,34 @@
+open Printf
+open Datatypes
+
+let process_cminor_file sourcename =
+ let targetname = Filename.chop_suffix sourcename ".cm" ^ ".s" in
+ let ic = open_in sourcename in
+ let lb = Lexing.from_channel ic in
+ try
+ match Main.transf_cminor_program (CMparser.prog CMlexer.token lb) with
+ | None ->
+ eprintf "Compiler failure\n";
+ exit 2
+ | Some p ->
+ let oc = open_out targetname in
+ PrintPPC.print_program oc p;
+ close_out oc
+ with Parsing.Parse_error ->
+ eprintf "File %s, character %d: Syntax error\n"
+ sourcename (Lexing.lexeme_start lb);
+ exit 2
+ | CMlexer.Error msg ->
+ eprintf "File %s, character %d: %s\n"
+ sourcename (Lexing.lexeme_start lb) msg;
+ exit 2
+
+let process_file filename =
+ if Filename.check_suffix filename ".cm" then
+ process_cminor_file filename
+ else
+ raise (Arg.Bad ("unknown file type " ^ filename))
+
+let _ =
+ Arg.parse [] process_file
+ "Usage: ccomp <options> <files>\nOptions are:"
diff --git a/caml/PrintPPC.ml b/caml/PrintPPC.ml
new file mode 100644
index 0000000..3edcb2b
--- /dev/null
+++ b/caml/PrintPPC.ml
@@ -0,0 +1,336 @@
+(* $Id: PrintPPC.ml,v 1.2 2005/01/22 11:28:46 xleroy Exp $ *)
+
+(* Printing PPC assembly code in asm syntax *)
+
+open Printf
+open Datatypes
+open List
+open Camlcoq
+open AST
+open PPC
+
+(* On-the-fly label renaming *)
+
+let next_label = ref 100
+
+let new_label() =
+ let lbl = !next_label in incr next_label; lbl
+
+let current_function_labels = (Hashtbl.create 39 : (label, int) Hashtbl.t)
+
+let label_for_label lbl =
+ try
+ Hashtbl.find current_function_labels lbl
+ with Not_found ->
+ let lbl' = new_label() in
+ Hashtbl.add current_function_labels lbl lbl';
+ lbl'
+
+(* Basic printing functions *)
+
+let print_symb oc symb =
+ fprintf oc "_%s" (extern_atom symb)
+
+let print_label oc lbl =
+ fprintf oc "L%d" (label_for_label lbl)
+
+let print_symb_ofs oc (symb, ofs) =
+ print_symb oc symb;
+ if ofs <> 0l then fprintf oc " + %ld" ofs
+
+let print_constant oc = function
+ | Cint n ->
+ fprintf oc "%ld" (camlint_of_coqint n)
+ | Csymbol_low_signed(s, n) ->
+ fprintf oc "lo16(%a)" print_symb_ofs (s, camlint_of_coqint n)
+ | Csymbol_high_signed(s, n) ->
+ fprintf oc "ha16(%a)" print_symb_ofs (s, camlint_of_coqint n)
+ | Csymbol_low_unsigned(s, n) ->
+ fprintf oc "lo16(%a)" print_symb_ofs (s, camlint_of_coqint n)
+ | Csymbol_high_unsigned(s, n) ->
+ fprintf oc "hi16(%a)" print_symb_ofs (s, camlint_of_coqint n)
+
+let num_crbit = function
+ | CRbit_0 -> 0
+ | CRbit_1 -> 1
+ | CRbit_2 -> 2
+ | CRbit_3 -> 3
+
+let print_crbit oc bit =
+ fprintf oc "%d" (num_crbit bit)
+
+let print_coqint oc n =
+ fprintf oc "%ld" (camlint_of_coqint n)
+
+let int_reg_name = function
+ | GPR0 -> "r0" | GPR1 -> "r1" | GPR2 -> "r2" | GPR3 -> "r3"
+ | GPR4 -> "r4" | GPR5 -> "r5" | GPR6 -> "r6" | GPR7 -> "r7"
+ | GPR8 -> "r8" | GPR9 -> "r9" | GPR10 -> "r10" | GPR11 -> "r11"
+ | GPR12 -> "r12" | GPR13 -> "r13" | GPR14 -> "r14" | GPR15 -> "r15"
+ | GPR16 -> "r16" | GPR17 -> "r17" | GPR18 -> "r18" | GPR19 -> "r19"
+ | GPR20 -> "r20" | GPR21 -> "r21" | GPR22 -> "r22" | GPR23 -> "r23"
+ | GPR24 -> "r24" | GPR25 -> "r25" | GPR26 -> "r26" | GPR27 -> "r27"
+ | GPR28 -> "r28" | GPR29 -> "r29" | GPR30 -> "r30" | GPR31 -> "r31"
+
+let float_reg_name = function
+ | FPR0 -> "f0" | FPR1 -> "f1" | FPR2 -> "f2" | FPR3 -> "f3"
+ | FPR4 -> "f4" | FPR5 -> "f5" | FPR6 -> "f6" | FPR7 -> "f7"
+ | FPR8 -> "f8" | FPR9 -> "f9" | FPR10 -> "f10" | FPR11 -> "f11"
+ | FPR12 -> "f12" | FPR13 -> "f13" | FPR14 -> "f14" | FPR15 -> "f15"
+ | FPR16 -> "f16" | FPR17 -> "f17" | FPR18 -> "f18" | FPR19 -> "f19"
+ | FPR20 -> "f20" | FPR21 -> "f21" | FPR22 -> "f22" | FPR23 -> "f23"
+ | FPR24 -> "f24" | FPR25 -> "f25" | FPR26 -> "f26" | FPR27 -> "f27"
+ | FPR28 -> "f28" | FPR29 -> "f29" | FPR30 -> "f30" | FPR31 -> "f31"
+
+let ireg oc r = output_string oc (int_reg_name r)
+let ireg_or_zero oc r = if r = GPR0 then output_string oc "0" else ireg oc r
+let freg oc r = output_string oc (float_reg_name r)
+
+(* Printing of instructions *)
+
+module Labelset = Set.Make(struct type t = label let compare = compare end)
+
+let print_instruction oc labels = function
+ | Padd(r1, r2, r3) ->
+ fprintf oc " add %a, %a, %a\n" ireg r1 ireg r2 ireg r3
+ | Paddi(r1, r2, c) ->
+ fprintf oc " addi %a, %a, %a\n" ireg r1 ireg_or_zero r2 print_constant c
+ | Paddis(r1, r2, c) ->
+ fprintf oc " addis %a, %a, %a\n" ireg r1 ireg_or_zero r2 print_constant c
+ | Paddze(r1, r2) ->
+ fprintf oc " addze %a, %a\n" ireg r1 ireg r2
+ | Pallocframe(lo, hi) ->
+ let lo = camlint_of_coqint lo
+ and hi = camlint_of_coqint hi in
+ let nsz = Int32.neg (Int32.sub hi lo) in
+ fprintf oc " stwu r1, %ld(r1)\n" nsz
+ | Pand_(r1, r2, r3) ->
+ fprintf oc " and. %a, %a, %a\n" ireg r1 ireg r2 ireg r3
+ | Pandc(r1, r2, r3) ->
+ fprintf oc " andc %a, %a, %a\n" ireg r1 ireg r2 ireg r3
+ | Pandi_(r1, r2, c) ->
+ fprintf oc " andi. %a, %a, %a\n" ireg r1 ireg r2 print_constant c
+ | Pandis_(r1, r2, c) ->
+ fprintf oc " andis. %a, %a, %a\n" ireg r1 ireg r2 print_constant c
+ | Pb lbl ->
+ fprintf oc " b %a\n" print_label lbl
+ | Pbctr ->
+ fprintf oc " bctr\n"
+ | Pbctrl ->
+ fprintf oc " bctrl\n"
+ | Pbf(bit, lbl) ->
+ fprintf oc " bf %a, %a\n" print_crbit bit print_label lbl
+ | Pbl s ->
+ fprintf oc " bl %a\n" print_symb s
+ | Pblr ->
+ fprintf oc " blr\n"
+ | Pbt(bit, lbl) ->
+ fprintf oc " bt %a, %a\n" print_crbit bit print_label lbl
+ | Pcmplw(r1, r2) ->
+ fprintf oc " cmplw cr0, %a, %a\n" ireg r1 ireg r2
+ | Pcmplwi(r1, c) ->
+ fprintf oc " cmplwi cr0, %a, %a\n" ireg r1 print_constant c
+ | Pcmpw(r1, r2) ->
+ fprintf oc " cmpw cr0, %a, %a\n" ireg r1 ireg r2
+ | Pcmpwi(r1, c) ->
+ fprintf oc " cmpwi cr0, %a, %a\n" ireg r1 print_constant c
+ | Pcror(c1, c2, c3) ->
+ fprintf oc " cror %a, %a, %a\n" print_crbit c1 print_crbit c2 print_crbit c3
+ | Pdivw(r1, r2, r3) ->
+ fprintf oc " divw %a, %a, %a\n" ireg r1 ireg r2 ireg r3
+ | Pdivwu(r1, r2, r3) ->
+ fprintf oc " divwu %a, %a, %a\n" ireg r1 ireg r2 ireg r3
+ | Peqv(r1, r2, r3) ->
+ fprintf oc " eqv %a, %a, %a\n" ireg r1 ireg r2 ireg r3
+ | Pextsb(r1, r2) ->
+ fprintf oc " extsb %a, %a\n" ireg r1 ireg r2
+ | Pextsh(r1, r2) ->
+ fprintf oc " extsh %a, %a\n" ireg r1 ireg r2
+ | Pfreeframe ->
+ fprintf oc " lwz r1, 0(r1)\n"
+ | Pfabs(r1, r2) ->
+ fprintf oc " fabs %a, %a\n" freg r1 freg r2
+ | Pfadd(r1, r2, r3) ->
+ fprintf oc " fadd %a, %a, %a\n" freg r1 freg r2 freg r3
+ | Pfcmpu(r1, r2) ->
+ fprintf oc " fcmpu cr0, %a, %a\n" freg r1 freg r2
+ | Pfcti(r1, r2) ->
+ fprintf oc " fctiwz f13, %a\n" freg r2;
+ fprintf oc " stfdu f13, -8(r1)\n";
+ fprintf oc " lwz %a, 4(r1)\n" ireg r1;
+ fprintf oc " addi r1, r1, 8\n"
+ | Pfdiv(r1, r2, r3) ->
+ fprintf oc " fdiv %a, %a, %a\n" freg r1 freg r2 freg r3
+ | Pfmadd(r1, r2, r3, r4) ->
+ fprintf oc " fmadd %a, %a, %a, %a\n" freg r1 freg r2 freg r3 freg r4
+ | Pfmr(r1, r2) ->
+ fprintf oc " fmr %a, %a\n" freg r1 freg r2
+ | Pfmsub(r1, r2, r3, r4) ->
+ fprintf oc " fmsub %a, %a, %a, %a\n" freg r1 freg r2 freg r3 freg r4
+ | Pfmul(r1, r2, r3) ->
+ fprintf oc " fmul %a, %a, %a\n" freg r1 freg r2 freg r3
+ | Pfneg(r1, r2) ->
+ fprintf oc " fneg %a, %a\n" freg r1 freg r2
+ | Pfrsp(r1, r2) ->
+ fprintf oc " frsp %a, %a\n" freg r1 freg r2
+ | Pfsub(r1, r2, r3) ->
+ fprintf oc " fsub %a, %a, %a\n" freg r1 freg r2 freg r3
+ | Pictf(r1, r2) ->
+ let lbl = new_label() in
+ fprintf oc " addis r2, 0, 0x4330\n";
+ fprintf oc " stwu r2, -8(r1)\n";
+ fprintf oc " addis r2, %a, 0x8000\n" ireg r2;
+ fprintf oc " stw r2, 4(r1)\n";
+ fprintf oc " addis r2, 0, ha16(L%d)\n" lbl;
+ fprintf oc " lfd f13, lo16(L%d)(r2)\n" lbl;
+ fprintf oc " lfd %a, 0(r1)\n" freg r1;
+ fprintf oc " addi r1, r1, 8\n";
+ fprintf oc " fsub %a, %a, f13\n" freg r1 freg r1;
+ fprintf oc " .const_data\n";
+ fprintf oc "L%d: .long 0x43300000, 0x80000000\n" lbl;
+ fprintf oc " .text\n"
+ | Piuctf(r1, r2) ->
+ let lbl = new_label() in
+ fprintf oc " addis r2, 0, 0x4330\n";
+ fprintf oc " stwu r2, -8(r1)\n";
+ fprintf oc " stw %a, 4(r1)\n" ireg r2;
+ fprintf oc " addis r2, 0, ha16(L%d)\n" lbl;
+ fprintf oc " lfd f13, lo16(L%d)(r2)\n" lbl;
+ fprintf oc " lfd %a, 0(r1)\n" freg r1;
+ fprintf oc " addi r1, r1, 8\n";
+ fprintf oc " fsub %a, %a, f12\n" freg r1 freg r1;
+ fprintf oc " .const_data\n";
+ fprintf oc "L%d: .long 0x43300000, 0x00000000\n" lbl;
+ fprintf oc " .text\n"
+ | Plbz(r1, c, r2) ->
+ fprintf oc " lbz %a, %a(%a)\n" ireg r1 print_constant c ireg r2
+ | Plbzx(r1, r2, r3) ->
+ fprintf oc " lbzx %a, %a, %a\n" ireg r1 ireg r2 ireg r3
+ | Plfd(r1, c, r2) ->
+ fprintf oc " lfd %a, %a(%a)\n" freg r1 print_constant c ireg r2
+ | Plfdx(r1, r2, r3) ->
+ fprintf oc " lfdx %a, %a, %a\n" freg r1 ireg r2 ireg r3
+ | Plfi(r1, c) ->
+ let lbl = new_label() in
+ fprintf oc " addis r2, 0, ha16(L%d)\n" lbl;
+ fprintf oc " lfd %a, lo16(L%d)(r2)\n" freg r1 lbl;
+ fprintf oc " .const_data\n";
+ let n = Int64.bits_of_float c in
+ let nlo = Int64.to_int32 n
+ and nhi = Int64.to_int32(Int64.shift_right_logical n 32) in
+ fprintf oc "L%d: .long 0x%lx, 0x%lx ; %f\n" lbl nhi nlo c;
+ fprintf oc " .text\n"
+ | Plfs(r1, c, r2) ->
+ fprintf oc " lfs %a, %a(%a)\n" freg r1 print_constant c ireg r2
+ | Plfsx(r1, r2, r3) ->
+ fprintf oc " lfsx %a, %a, %a\n" freg r1 ireg r2 ireg r3
+ | Plha(r1, c, r2) ->
+ fprintf oc " lha %a, %a(%a)\n" ireg r1 print_constant c ireg r2
+ | Plhax(r1, r2, r3) ->
+ fprintf oc " lhax %a, %a, %a\n" ireg r1 ireg r2 ireg r3
+ | Plhz(r1, c, r2) ->
+ fprintf oc " lhz %a, %a(%a)\n" ireg r1 print_constant c ireg r2
+ | Plhzx(r1, r2, r3) ->
+ fprintf oc " lhzx %a, %a, %a\n" ireg r1 ireg r2 ireg r3
+ | Plwz(r1, c, r2) ->
+ fprintf oc " lwz %a, %a(%a)\n" ireg r1 print_constant c ireg r2
+ | Plwzx(r1, r2, r3) ->
+ fprintf oc " lwzx %a, %a, %a\n" ireg r1 ireg r2 ireg r3
+ | Pmfcrbit(r1, bit) ->
+ fprintf oc " mfcr r2\n";
+ fprintf oc " rlwinm %a, r2, %d, 1\n" ireg r1 (1 + num_crbit bit)
+ | Pmflr(r1) ->
+ fprintf oc " mflr %a\n" ireg r1
+ | Pmr(r1, r2) ->
+ fprintf oc " mr %a, %a\n" ireg r1 ireg r2
+ | Pmtctr(r1) ->
+ fprintf oc " mtctr %a\n" ireg r1
+ | Pmtlr(r1) ->
+ fprintf oc " mtlr %a\n" ireg r1
+ | Pmulli(r1, r2, c) ->
+ fprintf oc " mulli %a, %a, %a\n" ireg r1 ireg r2 print_constant c
+ | Pmullw(r1, r2, r3) ->
+ fprintf oc " mullw %a, %a, %a\n" ireg r1 ireg r2 ireg r3
+ | Pnand(r1, r2, r3) ->
+ fprintf oc " nand %a, %a, %a\n" ireg r1 ireg r2 ireg r3
+ | Pnor(r1, r2, r3) ->
+ fprintf oc " nor %a, %a, %a\n" ireg r1 ireg r2 ireg r3
+ | Por(r1, r2, r3) ->
+ fprintf oc " or %a, %a, %a\n" ireg r1 ireg r2 ireg r3
+ | Porc(r1, r2, r3) ->
+ fprintf oc " orc %a, %a, %a\n" ireg r1 ireg r2 ireg r3
+ | Pori(r1, r2, c) ->
+ fprintf oc " ori %a, %a, %a\n" ireg r1 ireg r2 print_constant c
+ | Poris(r1, r2, c) ->
+ fprintf oc " oris %a, %a, %a\n" ireg r1 ireg r2 print_constant c
+ | Prlwinm(r1, r2, c1, c2) ->
+ fprintf oc " rlwinm %a, %a, %ld, 0x%lx\n"
+ ireg r1 ireg r2 (camlint_of_coqint c1) (camlint_of_coqint c2)
+ | Pslw(r1, r2, r3) ->
+ fprintf oc " slw %a, %a, %a\n" ireg r1 ireg r2 ireg r3
+ | Psraw(r1, r2, r3) ->
+ fprintf oc " sraw %a, %a, %a\n" ireg r1 ireg r2 ireg r3
+ | Psrawi(r1, r2, c) ->
+ fprintf oc " srawi %a, %a, %ld\n" ireg r1 ireg r2 (camlint_of_coqint c)
+ | Psrw(r1, r2, r3) ->
+ fprintf oc " srw %a, %a, %a\n" ireg r1 ireg r2 ireg r3
+ | Pstb(r1, c, r2) ->
+ fprintf oc " stb %a, %a(%a)\n" ireg r1 print_constant c ireg r2
+ | Pstbx(r1, r2, r3) ->
+ fprintf oc " stbx %a, %a, %a\n" ireg r1 ireg r2 ireg r3
+ | Pstfd(r1, c, r2) ->
+ fprintf oc " stfd %a, %a(%a)\n" freg r1 print_constant c ireg r2
+ | Pstfdx(r1, r2, r3) ->
+ fprintf oc " stfdx %a, %a, %a\n" freg r1 ireg r2 ireg r3
+ | Pstfs(r1, c, r2) ->
+ fprintf oc " stfs %a, %a(%a)\n" freg r1 print_constant c ireg r2
+ | Pstfsx(r1, r2, r3) ->
+ fprintf oc " stfsx %a, %a, %a\n" freg r1 ireg r2 ireg r3
+ | Psth(r1, c, r2) ->
+ fprintf oc " sth %a, %a(%a)\n" ireg r1 print_constant c ireg r2
+ | Psthx(r1, r2, r3) ->
+ fprintf oc " sthx %a, %a, %a\n" ireg r1 ireg r2 ireg r3
+ | Pstw(r1, c, r2) ->
+ fprintf oc " stw %a, %a(%a)\n" ireg r1 print_constant c ireg r2
+ | Pstwx(r1, r2, r3) ->
+ fprintf oc " stwx %a, %a, %a\n" ireg r1 ireg r2 ireg r3
+ | Psubfc(r1, r2, r3) ->
+ fprintf oc " subfc %a, %a, %a\n" ireg r1 ireg r2 ireg r3
+ | Psubfic(r1, r2, c) ->
+ fprintf oc " subfic %a, %a, %a\n" ireg r1 ireg r2 print_constant c
+ | Pxor(r1, r2, r3) ->
+ fprintf oc " xor %a, %a, %a\n" ireg r1 ireg r2 ireg r3
+ | Pxori(r1, r2, c) ->
+ fprintf oc " xori %a, %a, %a\n" ireg r1 ireg r2 print_constant c
+ | Pxoris(r1, r2, c) ->
+ fprintf oc " xoris %a, %a, %a\n" ireg r1 ireg r2 print_constant c
+ | Plabel lbl ->
+ if Labelset.mem lbl labels then fprintf oc "%a:\n" print_label lbl
+ | Piundef r ->
+ fprintf oc " # undef %a\n" ireg r
+ | Pfundef r ->
+ fprintf oc " # undef %a\n" freg r
+
+let rec labels_of_code = function
+ | Coq_nil -> Labelset.empty
+ | Coq_cons((Pb lbl | Pbf(_, lbl) | Pbt(_, lbl)), c) ->
+ Labelset.add lbl (labels_of_code c)
+ | Coq_cons(_, c) -> labels_of_code c
+
+let print_function oc (Coq_pair(name, code)) =
+ Hashtbl.clear current_function_labels;
+ fprintf oc " .text\n";
+ fprintf oc " .align 2\n";
+ fprintf oc " .globl %a\n" print_symb name;
+ fprintf oc "%a:\n" print_symb name;
+ coqlist_iter (print_instruction oc (labels_of_code code)) code
+
+let print_var oc (Coq_pair(name, size)) =
+ fprintf oc " .globl %a\n" print_symb name;
+ fprintf oc "%a:\n" print_symb name;
+ fprintf oc " .space %ld\n" (camlint_of_z size)
+
+let print_program oc p =
+ coqlist_iter (print_var oc) p.prog_vars;
+ coqlist_iter (print_function oc) p.prog_funct
+
diff --git a/caml/PrintPPC.mli b/caml/PrintPPC.mli
new file mode 100644
index 0000000..fbd4004
--- /dev/null
+++ b/caml/PrintPPC.mli
@@ -0,0 +1 @@
+val print_program: out_channel -> PPC.program -> unit
diff --git a/caml/RTLgenaux.ml b/caml/RTLgenaux.ml
new file mode 100644
index 0000000..3e6ca3d
--- /dev/null
+++ b/caml/RTLgenaux.ml
@@ -0,0 +1,3 @@
+open Cminor
+
+let more_likely (c: condexpr) (ifso: stmtlist) (ifnot: stmtlist) = false
diff --git a/ccomp b/ccomp
new file mode 100755
index 0000000..1613e9b
--- /dev/null
+++ b/ccomp
Binary files differ
diff --git a/doc/compcert.html b/doc/compcert.html
new file mode 100644
index 0000000..c778632
--- /dev/null
+++ b/doc/compcert.html
@@ -0,0 +1,250 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<HTML>
+<HEAD>
+<TITLE>The Compcert certified compiler back-end</TITLE>
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+
+<style type="text/css">
+body {
+ color: black; background: white;
+ margin-left: 5%; margin-right: 5%;
+}
+h2 { margin-left: -5%;}
+h3,h4,h5,h6 { margin-left: -3%; }
+hr { margin-left: -5%; margin-right:-5%; }
+a:visited {color : #416DFF; text-decoration : none; }
+a:link {color : #416DFF; text-decoration : none; font-weight : bold}
+a:hover {color : Red; text-decoration : underline; }
+a:active {color : Red; text-decoration : underline; }
+</style>
+
+<LINK type="text/css" rel="stylesheet" href="style.css">
+</HEAD>
+<BODY>
+
+<H1 align="center">The Compcert certified compiler back-end</H1>
+<H2 align="center">Commented Coq development</H2>
+<H3 align="center">Version 0.2, 2006-01-07</H3>
+
+<H2>Introduction</H2>
+
+<P>The Compcert back-end is a compiler that generates PowerPC assembly
+code from a low-level intermediate language called Cminor and a
+slightly more expressive intermediate language called Csharpminor.
+The particularity of this compiler is that it is written mostly within
+the specification language of the Coq proof assistant, and its
+correctness --- the fact that the generated assembly code is
+semantically equivalent to its source program --- was entirely proved
+within the Coq proof assistant.</P>
+
+<P>A high-level overview of the Compcert back-end and its proof of
+correctness can be found in the following paper:</P>
+<CITE>Xavier Leroy, <A
+HREF="http://pauillac.inria.fr/~xleroy/publi/compiler-certif.pdf">Formal
+certification of a compiler back-end, or: programming a compiler with
+a proof assistant</A>. Proceedings of the POPL 2006 symposium.</CITE>
+
+<P>This Web site gives a commented listing of the underlying Coq
+specifications and proofs. Proof scripts and the parts of the
+compiler written directly in Caml are omitted. This development is a
+work in progress; some parts may have changed since the overview paper
+above was written.</P>
+
+<P>This document and all Coq source files referenced from it are
+copyright 2005, 2006 Institut National de Recherche en Informatique et
+en Automatique (INRIA) and distributed under the terms of the <A
+HREF="http://www.gnu.org/licenses/gpl.html">GNU General Public
+License</A> version 2.</P>
+
+<H2>Table of contents</H2>
+
+<H3>Libraries, algorithms, data structures</H3>
+
+<UL>
+<LI> <A HREF="Coqlib.html">Coqlib</A>: addendum to the Coq standard library.
+ (Coq source file with proofs:
+ <A HREF="Coqlib.v"><code>Coqlib.v</code></a>.)
+<LI> <A HREF="Maps.html">Maps</A>: finite maps.
+ (Coq source file with proofs:
+ <A HREF="Maps.v"><code>Maps.v</code></a>.)
+<LI> <A HREF="Sets.html">Sets</A>: finite sets.
+<LI> <A HREF="union_find.html">Union-find</A>: representation of
+equivalence classes.
+ (Coq source file with proofs:
+ <A HREF="union_find.v"><code>union_find.v</code></a>.)
+<LI> <A HREF="Inclusion.html">Inclusion</A>: tactics to prove list inclusions.
+<LI> <A HREF="AST.html">AST</A>: identifiers, whole programs and other
+common elements of abstract syntaxes.
+ (Coq source file with proofs:
+ <A HREF="AST.v"><code>AST.v</code></a>.)
+<LI> <A HREF="Integers.html">Integers</A>: machine integers.
+ (Coq source file with proofs:
+ <A HREF="Integers.v"><code>Integers.v</code></a>.)
+<LI> <A HREF="Floats.html">Floats</A>: machine floating-point numbers.
+<LI> <A HREF="Mem.html">Mem</A>: the memory model.
+<LI> <A HREF="Globalenvs.html">Globalenvs</A>: global execution environments.
+<LI> <A HREF="Op.html">Op</A>: operators, addressing modes and their
+semantics.
+<LI> <A HREF="Ordered.html">Ordered</A>: construction of
+ordered types.
+<LI> <A HREF="Lattice.html">Lattice</A>: construction of
+semi-lattices.
+<LI> <A HREF="Kildall.html">Kildall</A>: resolution of dataflow
+inequations by fixpoint iteration.
+</UL>
+
+<H3>Source, intermediate and target languages: syntax and semantics</H3>
+
+<UL>
+<LI> <A HREF="Csharpminor.html">Csharpminor</A>: low-level structured language.
+<LI> <A HREF="Cminor.html">Cminor</A>: low-level structured
+language, with explicit stack allocation of certain local variables.
+<LI> <A HREF="RTL.html">RTL</A>: register transfer language (3-address
+code, control-flow graph, infinitely many pseudo-registers). <BR>
+See also: <A HREF="Registers.html">Registers</A> (representation of
+pseudo-registers).
+<LI> <A HREF="LTL.html">LTL</A>: location transfer language (3-address
+code, control-flow graph, finitely many physical registers, infinitely
+many stack slots). <BR>
+See also: <A HREF="Locations.html">Locations</A> (representation of
+locations).
+<LI> <A HREF="Linear.html">Linear</A>: like LTL, but the CFG is
+replaced by a linear list of instructions with explicit branches and labels.
+<LI> <A HREF="Mach.html">Mach</A>: like Linear, with a more concrete
+view of the activation record. <BR>
+See also: an alternate semantics for the same
+syntax is given in <A HREF="Machabstr.html">Machabstr</A>. <BR>
+<LI> <A HREF="PPC.html">PPC</A>: abstract syntax for PowerPC assembly
+code.
+</UL>
+
+<H3>Compiler passes</H3>
+
+<TABLE cellpadding="5%">
+<TR valign="top">
+ <TH>Pass</TH>
+ <TH>Source &amp; target</TH>
+ <TH>Compiler&nbsp;code</TH>
+ <TH>Correctness&nbsp;proof</TH>
+</TR>
+
+<TR valign="top">
+ <TD>Recognition of operators and addressing modes</TD>
+ <TD>Csharpminor to Cminor</TD>
+ <TD><A HREF="Cmconstr.html">Cmconstr</A></TD>
+ <TD><A HREF="Cmconstrproof.html">Cmconstrproof</A></TD>
+</TR>
+
+<TR valign="top">
+ <TD>Stack allocation of local variables<br>whose address is taken</TD>
+ <TD>Csharpminor to Cminor</TD>
+ <TD><A HREF="Cminorgen.html">Cminorgen</A></TD>
+ <TD><A HREF="Cminorgenproof.html">Cminorgenproof</A></TD>
+</TR>
+
+<TR valign="top">
+ <TD>Construction of the CFG, <br>3-address code generation</TD>
+ <TD>Cminor to RTL</TD>
+ <TD><A HREF="RTLgen.html">RTLgen</A></TD>
+ <TD><A HREF="RTLgenproof1.html">RTLgenproof1</A><BR>
+ <A HREF="RTLgenproof.html">RTLgenproof</A></TD>
+</TR>
+
+<TR valign="top">
+ <TD>Constant propagation</TD>
+ <TD>RTL to RTL</TD>
+ <TD><A HREF="Constprop.html">Constprop</A></TD>
+ <TD><A HREF="Constpropproof.html">Constpropproof</A></TD>
+</TR>
+
+<TR valign="top">
+ <TD>Common subexpression elimination</TD>
+ <TD>RTL to RTL</TD>
+ <TD><A HREF="CSE.html">CSE</A></TD>
+ <TD><A HREF="CSEproof.html">CSEproof</A></TD>
+</TR>
+
+<TR valign="top">
+ <TD>Register allocation by coloring<br>of an interference graph</TD>
+ <TD>RTL to LTL</TD>
+ <TD><A HREF="Conventions.html">Conventions</A><BR>
+ <A HREF="InterfGraph.html">InterfGraph</A><BR>
+ <A HREF="Coloring.html">Coloring</A><BR>
+ <A HREF="Parallelmove.html">Parallelmove</A><BR>
+ <A HREF="Allocation.html">Allocation</A></TD>
+ <TD><BR>
+ <BR>
+ <A HREF="Coloringproof.html">Coloringproof</A><BR>
+ <A HREF="Allocproof_aux.html">Allocproof_aux</A><BR>
+ <A HREF="Allocproof.html">Allocproof</A></TD>
+</TR>
+
+<TR valign="top">
+ <TD>Branch tunneling</TD>
+ <TD>LTL to LTL</TD>
+ <TD><A HREF="Tunneling.html">Tunneling</A></TD>
+ <TD><A HREF="Tunnelingproof.html">Tunnelingproof</A></TD>
+</TR>
+
+<TR valign="top">
+ <TD>Linearization of the CFG</TD>
+ <TD>LTL to Linear</TD>
+ <TD><A HREF="Linearize.html">Linearize</A></TD>
+ <TD><A HREF="Linearizeproof.html">Linearizeproof</A></TD>
+</TR>
+
+<TR valign="top">
+ <TD>Laying out the activation records</TD>
+ <TD>Linear to Mach</TD>
+ <TD><A HREF="Stacking.html">Stacking</A></TD>
+ <TD><A HREF="Stackingroof.html">Stackingproof</A></TD>
+</TR>
+
+<TR valign="top">
+ <TD>Storing the activation records in memory</TD>
+ <TD>Mach to Mach</TD>
+ <TD>(none)
+ <TD><A HREF="Machabstr2mach.html">Machabstr2mach</A></TD>
+
+<TR valign="top">
+ <TD>Emission of PowerPC assembly</TD>
+ <TD>Mach to PPC</TD>
+ <TD><A HREF="PPCgen.html">PPCgen</A></TD>
+ <TD><A HREF="PPCgenproof1.html">PPCgenproof1</A><BR>
+ <A HREF="PPCgenproof.html">PPCgenproof</A></TD>
+</TR>
+</TABLE>
+
+<H3>Type systems</H3>
+
+Trivial type systems are used to statically capture well-formedness
+conditions on the intermediate languages.
+<UL>
+<LI> <A HREF="RTLtyping.html">RTLtyping</A>: typing for RTL + type
+reconstruction.
+<LI> <A HREF="LTLtyping.html">LTLtyping</A>: typing for LTL.
+<LI> <A HREF="Lineartyping.html">Lineartyping</A>: typing for Linear.
+<LI> <A HREF="Machtyping.html">Machtyping</A>: typing for Mach.
+</UL>
+Proofs that compiler passes are type-preserving:
+<UL>
+<LI> <A HREF="Alloctyping_aux.html">Alloctyping_aux</A> and
+ <A HREF="Alloctyping.html">Alloctyping</A> (register allocation).
+<LI> <A HREF="Tunnelingtyping.html">Tunnelingtyping</A> (branch tunneling).
+<LI> <A HREF="Lineartyping.html">Lineartyping</A> (branch tunneling).
+<LI> <A HREF="Stackingtyping.html">Stackingtyping</A> (layout of activation records).
+</UL>
+
+<H3>All together</H3>
+
+<UL>
+<LI> <A HREF="Main.html">Main</A>: composing the passes together; the
+final semantic preservation theorems.
+</UL>
+
+<HR>
+<ADDRESS>Xavier.Leroy@inria.fr</ADDRESS>
+<HR>
+
+</BODY>
+</HTML>
diff --git a/doc/index.html b/doc/index.html
new file mode 100644
index 0000000..33afe85
--- /dev/null
+++ b/doc/index.html
@@ -0,0 +1,8295 @@
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset="><link rel="stylesheet" href="style.css" type="text/css"><title>Index</title>
+</head>
+
+<body>
+
+<table>
+<tr>
+<td>Global Index</td>
+<td><a href="index.html#global_A">A</a></td>
+<td><a href="index.html#global_B">B</a></td>
+<td><a href="index.html#global_C">C</a></td>
+<td><a href="index.html#global_D">D</a></td>
+<td><a href="index.html#global_E">E</a></td>
+<td><a href="index.html#global_F">F</a></td>
+<td><a href="index.html#global_G">G</a></td>
+<td><a href="index.html#global_H">H</a></td>
+<td><a href="index.html#global_I">I</a></td>
+<td>J</td>
+<td><a href="index.html#global_K">K</a></td>
+<td><a href="index.html#global_L">L</a></td>
+<td><a href="index.html#global_M">M</a></td>
+<td><a href="index.html#global_N">N</a></td>
+<td><a href="index.html#global_O">O</a></td>
+<td><a href="index.html#global_P">P</a></td>
+<td>Q</td>
+<td><a href="index.html#global_R">R</a></td>
+<td><a href="index.html#global_S">S</a></td>
+<td><a href="index.html#global_T">T</a></td>
+<td><a href="index.html#global_U">U</a></td>
+<td><a href="index.html#global_V">V</a></td>
+<td><a href="index.html#global_W">W</a></td>
+<td><a href="index.html#global_X">X</a></td>
+<td>Y</td>
+<td><a href="index.html#global_Z">Z</a></td>
+<td><a href="index.html#global__">_</a></td>
+<td>(3806 entries)</td>
+</tr>
+<tr>
+<td>Axiom Index</td>
+<td><a href="index.html#axiom_A">A</a></td>
+<td>B</td>
+<td><a href="index.html#axiom_C">C</a></td>
+<td><a href="index.html#axiom_D">D</a></td>
+<td><a href="index.html#axiom_E">E</a></td>
+<td><a href="index.html#axiom_F">F</a></td>
+<td><a href="index.html#axiom_G">G</a></td>
+<td><a href="index.html#axiom_H">H</a></td>
+<td><a href="index.html#axiom_I">I</a></td>
+<td>J</td>
+<td>K</td>
+<td><a href="index.html#axiom_L">L</a></td>
+<td><a href="index.html#axiom_M">M</a></td>
+<td><a href="index.html#axiom_N">N</a></td>
+<td><a href="index.html#axiom_O">O</a></td>
+<td><a href="index.html#axiom_P">P</a></td>
+<td>Q</td>
+<td>R</td>
+<td><a href="index.html#axiom_S">S</a></td>
+<td>T</td>
+<td>U</td>
+<td>V</td>
+<td>W</td>
+<td>X</td>
+<td>Y</td>
+<td><a href="index.html#axiom_Z">Z</a></td>
+<td>_</td>
+<td>(39 entries)</td>
+</tr>
+<tr>
+<td>Lemma Index</td>
+<td><a href="index.html#lemma_A">A</a></td>
+<td><a href="index.html#lemma_B">B</a></td>
+<td><a href="index.html#lemma_C">C</a></td>
+<td><a href="index.html#lemma_D">D</a></td>
+<td><a href="index.html#lemma_E">E</a></td>
+<td><a href="index.html#lemma_F">F</a></td>
+<td><a href="index.html#lemma_G">G</a></td>
+<td><a href="index.html#lemma_H">H</a></td>
+<td><a href="index.html#lemma_I">I</a></td>
+<td>J</td>
+<td><a href="index.html#lemma_K">K</a></td>
+<td><a href="index.html#lemma_L">L</a></td>
+<td><a href="index.html#lemma_M">M</a></td>
+<td><a href="index.html#lemma_N">N</a></td>
+<td><a href="index.html#lemma_O">O</a></td>
+<td><a href="index.html#lemma_P">P</a></td>
+<td>Q</td>
+<td><a href="index.html#lemma_R">R</a></td>
+<td><a href="index.html#lemma_S">S</a></td>
+<td><a href="index.html#lemma_T">T</a></td>
+<td><a href="index.html#lemma_U">U</a></td>
+<td><a href="index.html#lemma_V">V</a></td>
+<td><a href="index.html#lemma_W">W</a></td>
+<td><a href="index.html#lemma_X">X</a></td>
+<td>Y</td>
+<td><a href="index.html#lemma_Z">Z</a></td>
+<td>_</td>
+<td>(1753 entries)</td>
+</tr>
+<tr>
+<td>Constructor Index</td>
+<td><a href="index.html#constructor_A">A</a></td>
+<td><a href="index.html#constructor_B">B</a></td>
+<td><a href="index.html#constructor_C">C</a></td>
+<td><a href="index.html#constructor_D">D</a></td>
+<td><a href="index.html#constructor_E">E</a></td>
+<td><a href="index.html#constructor_F">F</a></td>
+<td><a href="index.html#constructor_G">G</a></td>
+<td>H</td>
+<td><a href="index.html#constructor_I">I</a></td>
+<td>J</td>
+<td>K</td>
+<td><a href="index.html#constructor_L">L</a></td>
+<td><a href="index.html#constructor_M">M</a></td>
+<td><a href="index.html#constructor_N">N</a></td>
+<td><a href="index.html#constructor_O">O</a></td>
+<td><a href="index.html#constructor_P">P</a></td>
+<td>Q</td>
+<td><a href="index.html#constructor_R">R</a></td>
+<td><a href="index.html#constructor_S">S</a></td>
+<td><a href="index.html#constructor_T">T</a></td>
+<td><a href="index.html#constructor_U">U</a></td>
+<td><a href="index.html#constructor_V">V</a></td>
+<td><a href="index.html#constructor_W">W</a></td>
+<td>X</td>
+<td>Y</td>
+<td>Z</td>
+<td><a href="index.html#constructor__">_</a></td>
+<td>(700 entries)</td>
+</tr>
+<tr>
+<td>Inductive Index</td>
+<td><a href="index.html#inductive_A">A</a></td>
+<td><a href="index.html#inductive_B">B</a></td>
+<td><a href="index.html#inductive_C">C</a></td>
+<td><a href="index.html#inductive_D">D</a></td>
+<td><a href="index.html#inductive_E">E</a></td>
+<td><a href="index.html#inductive_F">F</a></td>
+<td><a href="index.html#inductive_G">G</a></td>
+<td>H</td>
+<td><a href="index.html#inductive_I">I</a></td>
+<td>J</td>
+<td>K</td>
+<td><a href="index.html#inductive_L">L</a></td>
+<td><a href="index.html#inductive_M">M</a></td>
+<td><a href="index.html#inductive_N">N</a></td>
+<td><a href="index.html#inductive_O">O</a></td>
+<td><a href="index.html#inductive_P">P</a></td>
+<td>Q</td>
+<td><a href="index.html#inductive_R">R</a></td>
+<td><a href="index.html#inductive_S">S</a></td>
+<td><a href="index.html#inductive_T">T</a></td>
+<td><a href="index.html#inductive_U">U</a></td>
+<td><a href="index.html#inductive_V">V</a></td>
+<td><a href="index.html#inductive_W">W</a></td>
+<td>X</td>
+<td>Y</td>
+<td>Z</td>
+<td>_</td>
+<td>(155 entries)</td>
+</tr>
+<tr>
+<td>Definition Index</td>
+<td><a href="index.html#definition_A">A</a></td>
+<td><a href="index.html#definition_B">B</a></td>
+<td><a href="index.html#definition_C">C</a></td>
+<td><a href="index.html#definition_D">D</a></td>
+<td><a href="index.html#definition_E">E</a></td>
+<td><a href="index.html#definition_F">F</a></td>
+<td><a href="index.html#definition_G">G</a></td>
+<td><a href="index.html#definition_H">H</a></td>
+<td><a href="index.html#definition_I">I</a></td>
+<td>J</td>
+<td><a href="index.html#definition_K">K</a></td>
+<td><a href="index.html#definition_L">L</a></td>
+<td><a href="index.html#definition_M">M</a></td>
+<td><a href="index.html#definition_N">N</a></td>
+<td><a href="index.html#definition_O">O</a></td>
+<td><a href="index.html#definition_P">P</a></td>
+<td>Q</td>
+<td><a href="index.html#definition_R">R</a></td>
+<td><a href="index.html#definition_S">S</a></td>
+<td><a href="index.html#definition_T">T</a></td>
+<td><a href="index.html#definition_U">U</a></td>
+<td><a href="index.html#definition_V">V</a></td>
+<td><a href="index.html#definition_W">W</a></td>
+<td><a href="index.html#definition_X">X</a></td>
+<td>Y</td>
+<td><a href="index.html#definition_Z">Z</a></td>
+<td>_</td>
+<td>(1017 entries)</td>
+</tr>
+<tr>
+<td>Module Index</td>
+<td><a href="index.html#module_A">A</a></td>
+<td><a href="index.html#module_B">B</a></td>
+<td>C</td>
+<td><a href="index.html#module_D">D</a></td>
+<td><a href="index.html#module_E">E</a></td>
+<td><a href="index.html#module_F">F</a></td>
+<td><a href="index.html#module_G">G</a></td>
+<td>H</td>
+<td><a href="index.html#module_I">I</a></td>
+<td>J</td>
+<td>K</td>
+<td><a href="index.html#module_L">L</a></td>
+<td><a href="index.html#module_M">M</a></td>
+<td><a href="index.html#module_N">N</a></td>
+<td><a href="index.html#module_O">O</a></td>
+<td><a href="index.html#module_P">P</a></td>
+<td>Q</td>
+<td><a href="index.html#module_R">R</a></td>
+<td><a href="index.html#module_S">S</a></td>
+<td><a href="index.html#module_T">T</a></td>
+<td><a href="index.html#module_U">U</a></td>
+<td><a href="index.html#module_V">V</a></td>
+<td>W</td>
+<td>X</td>
+<td>Y</td>
+<td><a href="index.html#module_Z">Z</a></td>
+<td>_</td>
+<td>(78 entries)</td>
+</tr>
+<tr>
+<td>Library Index</td>
+<td><a href="index.html#library_A">A</a></td>
+<td>B</td>
+<td><a href="index.html#library_C">C</a></td>
+<td>D</td>
+<td>E</td>
+<td><a href="index.html#library_F">F</a></td>
+<td><a href="index.html#library_G">G</a></td>
+<td>H</td>
+<td><a href="index.html#library_I">I</a></td>
+<td>J</td>
+<td><a href="index.html#library_K">K</a></td>
+<td><a href="index.html#library_L">L</a></td>
+<td><a href="index.html#library_M">M</a></td>
+<td>N</td>
+<td><a href="index.html#library_O">O</a></td>
+<td><a href="index.html#library_P">P</a></td>
+<td>Q</td>
+<td><a href="index.html#library_R">R</a></td>
+<td><a href="index.html#library_S">S</a></td>
+<td><a href="index.html#library_T">T</a></td>
+<td><a href="index.html#library_U">U</a></td>
+<td><a href="index.html#library_V">V</a></td>
+<td>W</td>
+<td>X</td>
+<td>Y</td>
+<td>Z</td>
+<td>_</td>
+<td>(64 entries)</td>
+</tr>
+</table>
+<hr/>
+<h1>Global Index</h1>
+<a name="global_A"></a><h2>A </h2>
+<a href="backend.Op.html#a">a</a> [inductive, in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Op.html#a">a</a> [inductive, in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Op.html#Abased">Abased</a> [constructor, in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="lib.Floats.html#abs">abs</a> [axiom, in <a href="lib.Floats.html">lib.Floats</a>]<br/>
+<a href="backend.Values.html#absf">absf</a> [definition, in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.Cmconstr.html#absfloat">absfloat</a> [definition, in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="lib.Floats.html#add">add</a> [axiom, in <a href="lib.Floats.html">lib.Floats</a>]<br/>
+<a href="backend.Values.html#add">add</a> [definition, in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="lib.Sets.html#add">add</a> [definition, in <a href="lib.Sets.html">lib.Sets</a>]<br/>
+<a href="backend.Cmconstr.html#add">add</a> [definition, in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.RTLtyping.html#add">add</a> [definition, in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="lib.Integers.html#add">add</a> [definition, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Cmconstr.html#addf">addf</a> [definition, in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Values.html#addf">addf</a> [definition, in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.Cmconstr.html#addf_cases">addf_cases</a> [inductive, in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Cmconstr.html#addf_case1">addf_case1</a> [constructor, in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Cmconstr.html#addf_case2">addf_case2</a> [constructor, in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="lib.Floats.html#addf_commut">addf_commut</a> [axiom, in <a href="lib.Floats.html">lib.Floats</a>]<br/>
+<a href="backend.Values.html#addf_commut">addf_commut</a> [lemma, in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.Cmconstr.html#addf_default">addf_default</a> [constructor, in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Cmconstr.html#addf_match">addf_match</a> [definition, in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Cmconstr.html#addf_match_aux">addf_match_aux</a> [definition, in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.PPCgen.html#addimm">addimm</a> [definition, in <a href="backend.PPCgen.html">backend.PPCgen</a>]<br/>
+<a href="backend.Cmconstr.html#addimm">addimm</a> [definition, in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Cmconstr.html#addimm_cases">addimm_cases</a> [inductive, in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Cmconstr.html#addimm_case1">addimm_case1</a> [constructor, in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Cmconstr.html#addimm_case2">addimm_case2</a> [constructor, in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Cmconstr.html#addimm_case3">addimm_case3</a> [constructor, in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Cmconstr.html#addimm_case4">addimm_case4</a> [constructor, in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.PPCgenproof1.html#addimm_correct">addimm_correct</a> [lemma, in <a href="backend.PPCgenproof1.html">backend.PPCgenproof1</a>]<br/>
+<a href="backend.Cmconstr.html#addimm_default">addimm_default</a> [constructor, in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Cmconstr.html#addimm_match">addimm_match</a> [definition, in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.PPCgen.html#addimm_1">addimm_1</a> [definition, in <a href="backend.PPCgen.html">backend.PPCgen</a>]<br/>
+<a href="backend.PPCgenproof1.html#addimm_1_correct">addimm_1_correct</a> [lemma, in <a href="backend.PPCgenproof1.html">backend.PPCgenproof1</a>]<br/>
+<a href="backend.PPCgen.html#addimm_2">addimm_2</a> [definition, in <a href="backend.PPCgen.html">backend.PPCgen</a>]<br/>
+<a href="backend.PPCgenproof1.html#addimm_2_correct">addimm_2_correct</a> [lemma, in <a href="backend.PPCgenproof1.html">backend.PPCgenproof1</a>]<br/>
+<a href="backend.Cmconstr.html#addressing">addressing</a> [definition, in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Op.html#addressing">addressing</a> [inductive, in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Cmconstr.html#addressing_cases">addressing_cases</a> [inductive, in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Cmconstr.html#addressing_case1">addressing_case1</a> [constructor, in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Cmconstr.html#addressing_case2">addressing_case2</a> [constructor, in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Cmconstr.html#addressing_case3">addressing_case3</a> [constructor, in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Cmconstr.html#addressing_case4">addressing_case4</a> [constructor, in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Cmconstr.html#addressing_case5">addressing_case5</a> [constructor, in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Cmconstr.html#addressing_default">addressing_default</a> [constructor, in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Cmconstr.html#addressing_match">addressing_match</a> [definition, in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Mem.html#address_inject">address_inject</a> [lemma, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Constprop.html#addr_strength_reduction">addr_strength_reduction</a> [definition, in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#addr_strength_reduction_cases">addr_strength_reduction_cases</a> [inductive, in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#addr_strength_reduction_case1">addr_strength_reduction_case1</a> [constructor, in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#addr_strength_reduction_case2">addr_strength_reduction_case2</a> [constructor, in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#addr_strength_reduction_case3">addr_strength_reduction_case3</a> [constructor, in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constpropproof.html#addr_strength_reduction_correct">addr_strength_reduction_correct</a> [lemma, in <a href="backend.Constpropproof.html">backend.Constpropproof</a>]<br/>
+<a href="backend.Constprop.html#addr_strength_reduction_default">addr_strength_reduction_default</a> [constructor, in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#addr_strength_reduction_match">addr_strength_reduction_match</a> [definition, in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Cminorgen.html#addr_taken_expr">addr_taken_expr</a> [definition, in <a href="backend.Cminorgen.html">backend.Cminorgen</a>]<br/>
+<a href="backend.Cminorgen.html#addr_taken_stmt">addr_taken_stmt</a> [definition, in <a href="backend.Cminorgen.html">backend.Cminorgen</a>]<br/>
+<a href="lib.Integers.html#add_and">add_and</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#add_assoc">add_assoc</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Values.html#add_assoc">add_assoc</a> [lemma, in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.Allocation.html#add_call">add_call</a> [definition, in <a href="backend.Allocation.html">backend.Allocation</a>]<br/>
+<a href="backend.Allocproof.html#add_call_correct">add_call_correct</a> [lemma, in <a href="backend.Allocproof.html">backend.Allocproof</a>]<br/>
+<a href="backend.Cmconstr.html#add_cases">add_cases</a> [inductive, in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Cmconstr.html#add_case1">add_case1</a> [constructor, in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Cmconstr.html#add_case2">add_case2</a> [constructor, in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Cmconstr.html#add_case3">add_case3</a> [constructor, in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Cmconstr.html#add_case4">add_case4</a> [constructor, in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Cmconstr.html#add_case5">add_case5</a> [constructor, in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="lib.Integers.html#add_commut">add_commut</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Values.html#add_commut">add_commut</a> [lemma, in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.Allocation.html#add_cond">add_cond</a> [definition, in <a href="backend.Allocation.html">backend.Allocation</a>]<br/>
+<a href="backend.Allocproof.html#add_cond_correct">add_cond_correct</a> [lemma, in <a href="backend.Allocproof.html">backend.Allocproof</a>]<br/>
+<a href="backend.Cmconstr.html#add_default">add_default</a> [constructor, in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Coloring.html#add_edges_instr">add_edges_instr</a> [definition, in <a href="backend.Coloring.html">backend.Coloring</a>]<br/>
+<a href="backend.Coloring.html#add_edges_instrs">add_edges_instrs</a> [definition, in <a href="backend.Coloring.html">backend.Coloring</a>]<br/>
+<a href="backend.Coloringproof.html#add_edges_instrs_correct">add_edges_instrs_correct</a> [lemma, in <a href="backend.Coloringproof.html">backend.Coloringproof</a>]<br/>
+<a href="backend.Coloringproof.html#add_edges_instrs_correct_aux">add_edges_instrs_correct_aux</a> [lemma, in <a href="backend.Coloringproof.html">backend.Coloringproof</a>]<br/>
+<a href="backend.Coloringproof.html#add_edges_instrs_incl_aux">add_edges_instrs_incl_aux</a> [lemma, in <a href="backend.Coloringproof.html">backend.Coloringproof</a>]<br/>
+<a href="backend.Coloringproof.html#add_edges_instr_correct">add_edges_instr_correct</a> [lemma, in <a href="backend.Coloringproof.html">backend.Coloringproof</a>]<br/>
+<a href="backend.Coloringproof.html#add_edges_instr_incl">add_edges_instr_incl</a> [lemma, in <a href="backend.Coloringproof.html">backend.Coloringproof</a>]<br/>
+<a href="backend.Allocation.html#add_entry">add_entry</a> [definition, in <a href="backend.Allocation.html">backend.Allocation</a>]<br/>
+<a href="backend.Allocproof.html#add_entry_correct">add_entry_correct</a> [lemma, in <a href="backend.Allocproof.html">backend.Allocproof</a>]<br/>
+<a href="backend.Globalenvs.html#add_funct">add_funct</a> [definition, in <a href="backend.Globalenvs.html">backend.Globalenvs</a>]<br/>
+<a href="backend.Globalenvs.html#add_functs">add_functs</a> [definition, in <a href="backend.Globalenvs.html">backend.Globalenvs</a>]<br/>
+<a href="backend.Globalenvs.html#add_functs_transf">add_functs_transf</a> [lemma, in <a href="backend.Globalenvs.html">backend.Globalenvs</a>]<br/>
+<a href="backend.Globalenvs.html#add_globals">add_globals</a> [definition, in <a href="backend.Globalenvs.html">backend.Globalenvs</a>]<br/>
+<a href="backend.RTLgen.html#add_instr">add_instr</a> [definition, in <a href="backend.RTLgen.html">backend.RTLgen</a>]<br/>
+<a href="backend.RTLgenproof1.html#add_instr_at">add_instr_at</a> [lemma, in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.RTLgenproof1.html#add_instr_incr">add_instr_incr</a> [lemma, in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.RTLgen.html#add_instr_wf">add_instr_wf</a> [lemma, in <a href="backend.RTLgen.html">backend.RTLgen</a>]<br/>
+<a href="backend.InterfGraph.html#add_interf">add_interf</a> [definition, in <a href="backend.InterfGraph.html">backend.InterfGraph</a>]<br/>
+<a href="backend.Coloring.html#add_interf_call">add_interf_call</a> [definition, in <a href="backend.Coloring.html">backend.Coloring</a>]<br/>
+<a href="backend.Coloringproof.html#add_interf_call_correct">add_interf_call_correct</a> [lemma, in <a href="backend.Coloringproof.html">backend.Coloringproof</a>]<br/>
+<a href="backend.Coloringproof.html#add_interf_call_correct_aux_1">add_interf_call_correct_aux_1</a> [lemma, in <a href="backend.Coloringproof.html">backend.Coloringproof</a>]<br/>
+<a href="backend.Coloringproof.html#add_interf_call_correct_aux_2">add_interf_call_correct_aux_2</a> [lemma, in <a href="backend.Coloringproof.html">backend.Coloringproof</a>]<br/>
+<a href="backend.Coloringproof.html#add_interf_call_incl">add_interf_call_incl</a> [lemma, in <a href="backend.Coloringproof.html">backend.Coloringproof</a>]<br/>
+<a href="backend.Coloringproof.html#add_interf_call_incl_aux_1">add_interf_call_incl_aux_1</a> [lemma, in <a href="backend.Coloringproof.html">backend.Coloringproof</a>]<br/>
+<a href="backend.Coloringproof.html#add_interf_call_incl_aux_2">add_interf_call_incl_aux_2</a> [lemma, in <a href="backend.Coloringproof.html">backend.Coloringproof</a>]<br/>
+<a href="backend.InterfGraph.html#add_interf_correct">add_interf_correct</a> [lemma, in <a href="backend.InterfGraph.html">backend.InterfGraph</a>]<br/>
+<a href="backend.Coloring.html#add_interf_entry">add_interf_entry</a> [definition, in <a href="backend.Coloring.html">backend.Coloring</a>]<br/>
+<a href="backend.Coloringproof.html#add_interf_entry_correct">add_interf_entry_correct</a> [lemma, in <a href="backend.Coloringproof.html">backend.Coloringproof</a>]<br/>
+<a href="backend.Coloringproof.html#add_interf_entry_incl">add_interf_entry_incl</a> [lemma, in <a href="backend.Coloringproof.html">backend.Coloringproof</a>]<br/>
+<a href="backend.InterfGraph.html#add_interf_incl">add_interf_incl</a> [lemma, in <a href="backend.InterfGraph.html">backend.InterfGraph</a>]<br/>
+<a href="backend.Coloring.html#add_interf_live">add_interf_live</a> [definition, in <a href="backend.Coloring.html">backend.Coloring</a>]<br/>
+<a href="backend.Coloringproof.html#add_interf_live_correct">add_interf_live_correct</a> [lemma, in <a href="backend.Coloringproof.html">backend.Coloringproof</a>]<br/>
+<a href="backend.Coloringproof.html#add_interf_live_correct_aux">add_interf_live_correct_aux</a> [lemma, in <a href="backend.Coloringproof.html">backend.Coloringproof</a>]<br/>
+<a href="backend.Coloringproof.html#add_interf_live_incl">add_interf_live_incl</a> [lemma, in <a href="backend.Coloringproof.html">backend.Coloringproof</a>]<br/>
+<a href="backend.Coloringproof.html#add_interf_live_incl_aux">add_interf_live_incl_aux</a> [lemma, in <a href="backend.Coloringproof.html">backend.Coloringproof</a>]<br/>
+<a href="backend.Coloring.html#add_interf_move">add_interf_move</a> [definition, in <a href="backend.Coloring.html">backend.Coloring</a>]<br/>
+<a href="backend.Coloringproof.html#add_interf_move_correct">add_interf_move_correct</a> [lemma, in <a href="backend.Coloringproof.html">backend.Coloringproof</a>]<br/>
+<a href="backend.Coloringproof.html#add_interf_move_incl">add_interf_move_incl</a> [lemma, in <a href="backend.Coloringproof.html">backend.Coloringproof</a>]<br/>
+<a href="backend.InterfGraph.html#add_interf_mreg">add_interf_mreg</a> [definition, in <a href="backend.InterfGraph.html">backend.InterfGraph</a>]<br/>
+<a href="backend.InterfGraph.html#add_interf_mreg_correct">add_interf_mreg_correct</a> [lemma, in <a href="backend.InterfGraph.html">backend.InterfGraph</a>]<br/>
+<a href="backend.InterfGraph.html#add_interf_mreg_incl">add_interf_mreg_incl</a> [lemma, in <a href="backend.InterfGraph.html">backend.InterfGraph</a>]<br/>
+<a href="backend.Coloring.html#add_interf_op">add_interf_op</a> [definition, in <a href="backend.Coloring.html">backend.Coloring</a>]<br/>
+<a href="backend.Coloringproof.html#add_interf_op_correct">add_interf_op_correct</a> [lemma, in <a href="backend.Coloringproof.html">backend.Coloringproof</a>]<br/>
+<a href="backend.Coloringproof.html#add_interf_op_incl">add_interf_op_incl</a> [lemma, in <a href="backend.Coloringproof.html">backend.Coloringproof</a>]<br/>
+<a href="backend.Coloring.html#add_interf_params">add_interf_params</a> [definition, in <a href="backend.Coloring.html">backend.Coloring</a>]<br/>
+<a href="backend.Coloringproof.html#add_interf_params_correct">add_interf_params_correct</a> [lemma, in <a href="backend.Coloringproof.html">backend.Coloringproof</a>]<br/>
+<a href="backend.Coloringproof.html#add_interf_params_correct_aux">add_interf_params_correct_aux</a> [lemma, in <a href="backend.Coloringproof.html">backend.Coloringproof</a>]<br/>
+<a href="backend.Coloringproof.html#add_interf_params_incl">add_interf_params_incl</a> [lemma, in <a href="backend.Coloringproof.html">backend.Coloringproof</a>]<br/>
+<a href="backend.Coloringproof.html#add_interf_params_incl_aux">add_interf_params_incl_aux</a> [lemma, in <a href="backend.Coloringproof.html">backend.Coloringproof</a>]<br/>
+<a href="backend.RTLgen.html#add_letvar">add_letvar</a> [definition, in <a href="backend.RTLgen.html">backend.RTLgen</a>]<br/>
+<a href="backend.RTLgenproof1.html#add_letvar_wf">add_letvar_wf</a> [lemma, in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.CSE.html#add_load">add_load</a> [definition, in <a href="backend.CSE.html">backend.CSE</a>]<br/>
+<a href="backend.Allocation.html#add_load">add_load</a> [definition, in <a href="backend.Allocation.html">backend.Allocation</a>]<br/>
+<a href="backend.Allocproof.html#add_load_correct">add_load_correct</a> [lemma, in <a href="backend.Allocproof.html">backend.Allocproof</a>]<br/>
+<a href="backend.CSEproof.html#add_load_satisfiable">add_load_satisfiable</a> [lemma, in <a href="backend.CSEproof.html">backend.CSEproof</a>]<br/>
+<a href="backend.Cmconstr.html#add_match">add_match</a> [definition, in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Cmconstr.html#add_match_aux">add_match_aux</a> [definition, in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.RTLgen.html#add_move">add_move</a> [definition, in <a href="backend.RTLgen.html">backend.RTLgen</a>]<br/>
+<a href="backend.Allocation.html#add_move">add_move</a> [definition, in <a href="backend.Allocation.html">backend.Allocation</a>]<br/>
+<a href="backend.RTLgenproof.html#add_move_correct">add_move_correct</a> [lemma, in <a href="backend.RTLgenproof.html">backend.RTLgenproof</a>]<br/>
+<a href="backend.Allocproof.html#add_move_correct">add_move_correct</a> [lemma, in <a href="backend.Allocproof.html">backend.Allocproof</a>]<br/>
+<a href="backend.RTLgenproof1.html#add_move_incr">add_move_incr</a> [lemma, in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="lib.Integers.html#add_neg_zero">add_neg_zero</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Allocation.html#add_op">add_op</a> [definition, in <a href="backend.Allocation.html">backend.Allocation</a>]<br/>
+<a href="backend.CSE.html#add_op">add_op</a> [definition, in <a href="backend.CSE.html">backend.CSE</a>]<br/>
+<a href="backend.Allocproof.html#add_op_correct">add_op_correct</a> [lemma, in <a href="backend.Allocproof.html">backend.Allocproof</a>]<br/>
+<a href="backend.CSEproof.html#add_op_satisfiable">add_op_satisfiable</a> [lemma, in <a href="backend.CSEproof.html">backend.CSEproof</a>]<br/>
+<a href="backend.Values.html#add_permut">add_permut</a> [lemma, in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="lib.Integers.html#add_permut">add_permut</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Values.html#add_permut_4">add_permut_4</a> [lemma, in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.InterfGraph.html#add_pref">add_pref</a> [definition, in <a href="backend.InterfGraph.html">backend.InterfGraph</a>]<br/>
+<a href="backend.Coloring.html#add_prefs_call">add_prefs_call</a> [definition, in <a href="backend.Coloring.html">backend.Coloring</a>]<br/>
+<a href="backend.Coloringproof.html#add_prefs_call_incl">add_prefs_call_incl</a> [lemma, in <a href="backend.Coloringproof.html">backend.Coloringproof</a>]<br/>
+<a href="backend.InterfGraph.html#add_pref_incl">add_pref_incl</a> [lemma, in <a href="backend.InterfGraph.html">backend.InterfGraph</a>]<br/>
+<a href="backend.InterfGraph.html#add_pref_mreg">add_pref_mreg</a> [definition, in <a href="backend.InterfGraph.html">backend.InterfGraph</a>]<br/>
+<a href="backend.InterfGraph.html#add_pref_mreg_incl">add_pref_mreg_incl</a> [lemma, in <a href="backend.InterfGraph.html">backend.InterfGraph</a>]<br/>
+<a href="backend.Allocation.html#add_reload">add_reload</a> [definition, in <a href="backend.Allocation.html">backend.Allocation</a>]<br/>
+<a href="backend.Allocation.html#add_reloads">add_reloads</a> [definition, in <a href="backend.Allocation.html">backend.Allocation</a>]<br/>
+<a href="backend.Allocproof.html#add_reloads_correct">add_reloads_correct</a> [lemma, in <a href="backend.Allocproof.html">backend.Allocproof</a>]<br/>
+<a href="backend.Allocproof.html#add_reloads_correct_rec">add_reloads_correct_rec</a> [lemma, in <a href="backend.Allocproof.html">backend.Allocproof</a>]<br/>
+<a href="backend.Allocproof.html#add_reload_correct">add_reload_correct</a> [lemma, in <a href="backend.Allocproof.html">backend.Allocproof</a>]<br/>
+<a href="backend.Allocation.html#add_return">add_return</a> [definition, in <a href="backend.Allocation.html">backend.Allocation</a>]<br/>
+<a href="backend.Allocproof.html#add_return_correct">add_return_correct</a> [lemma, in <a href="backend.Allocproof.html">backend.Allocproof</a>]<br/>
+<a href="backend.CSE.html#add_rhs">add_rhs</a> [definition, in <a href="backend.CSE.html">backend.CSE</a>]<br/>
+<a href="backend.CSEproof.html#add_rhs_satisfiable">add_rhs_satisfiable</a> [lemma, in <a href="backend.CSEproof.html">backend.CSEproof</a>]<br/>
+<a href="lib.Integers.html#add_signed">add_signed</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Allocation.html#add_spill">add_spill</a> [definition, in <a href="backend.Allocation.html">backend.Allocation</a>]<br/>
+<a href="backend.Allocproof.html#add_spill_correct">add_spill_correct</a> [lemma, in <a href="backend.Allocproof.html">backend.Allocproof</a>]<br/>
+<a href="backend.Allocation.html#add_store">add_store</a> [definition, in <a href="backend.Allocation.html">backend.Allocation</a>]<br/>
+<a href="backend.Allocproof.html#add_store_correct">add_store_correct</a> [lemma, in <a href="backend.Allocproof.html">backend.Allocproof</a>]<br/>
+<a href="backend.Kildall.html#add_successors">add_successors</a> [definition, in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.Kildall.html#add_successors_correct">add_successors_correct</a> [lemma, in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.Globalenvs.html#add_symbol">add_symbol</a> [definition, in <a href="backend.Globalenvs.html">backend.Globalenvs</a>]<br/>
+<a href="backend.Kildall.html#add_to_worklist">add_to_worklist</a> [definition, in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.Kildall.html#add_to_worklist_1">add_to_worklist_1</a> [lemma, in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.Kildall.html#add_to_worklist_2">add_to_worklist_2</a> [lemma, in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.Allocation.html#add_undefs">add_undefs</a> [definition, in <a href="backend.Allocation.html">backend.Allocation</a>]<br/>
+<a href="backend.Allocproof.html#add_undefs_correct">add_undefs_correct</a> [lemma, in <a href="backend.Allocproof.html">backend.Allocproof</a>]<br/>
+<a href="lib.Integers.html#add_unsigned">add_unsigned</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.RTLgen.html#add_var">add_var</a> [definition, in <a href="backend.RTLgen.html">backend.RTLgen</a>]<br/>
+<a href="backend.RTLgen.html#add_vars">add_vars</a> [definition, in <a href="backend.RTLgen.html">backend.RTLgen</a>]<br/>
+<a href="backend.RTLgenproof1.html#add_vars_incr">add_vars_incr</a> [lemma, in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.RTLgenproof1.html#add_vars_letenv">add_vars_letenv</a> [lemma, in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.RTLgenproof1.html#add_vars_valid">add_vars_valid</a> [lemma, in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.RTLgenproof1.html#add_vars_wf">add_vars_wf</a> [lemma, in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.RTLgenproof1.html#add_var_find">add_var_find</a> [lemma, in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.RTLgenproof1.html#add_var_incr">add_var_incr</a> [lemma, in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.RTLgenproof1.html#add_var_letenv">add_var_letenv</a> [lemma, in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.RTLgenproof1.html#add_var_valid">add_var_valid</a> [lemma, in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.RTLgenproof1.html#add_var_wf">add_var_wf</a> [lemma, in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="lib.Integers.html#add_zero">add_zero</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Op.html#Aglobal">Aglobal</a> [constructor, in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Stackingproof.html#agree">agree</a> [inductive, in <a href="backend.Stackingproof.html">backend.Stackingproof</a>]<br/>
+<a href="backend.Allocproof.html#agree">agree</a> [definition, in <a href="backend.Allocproof.html">backend.Allocproof</a>]<br/>
+<a href="backend.PPCgenproof1.html#agree">agree</a> [definition, in <a href="backend.PPCgenproof1.html">backend.PPCgenproof1</a>]<br/>
+<a href="backend.Allocproof.html#agree_assign_dead">agree_assign_dead</a> [lemma, in <a href="backend.Allocproof.html">backend.Allocproof</a>]<br/>
+<a href="backend.Allocproof.html#agree_assign_live">agree_assign_live</a> [lemma, in <a href="backend.Allocproof.html">backend.Allocproof</a>]<br/>
+<a href="backend.Allocproof.html#agree_call">agree_call</a> [lemma, in <a href="backend.Allocproof.html">backend.Allocproof</a>]<br/>
+<a href="backend.Stackingproof.html#agree_eval_reg">agree_eval_reg</a> [lemma, in <a href="backend.Stackingproof.html">backend.Stackingproof</a>]<br/>
+<a href="backend.Allocproof.html#agree_eval_reg">agree_eval_reg</a> [lemma, in <a href="backend.Allocproof.html">backend.Allocproof</a>]<br/>
+<a href="backend.Stackingproof.html#agree_eval_regs">agree_eval_regs</a> [lemma, in <a href="backend.Stackingproof.html">backend.Stackingproof</a>]<br/>
+<a href="backend.Allocproof.html#agree_eval_regs">agree_eval_regs</a> [lemma, in <a href="backend.Allocproof.html">backend.Allocproof</a>]<br/>
+<a href="backend.Allocproof.html#agree_exten">agree_exten</a> [lemma, in <a href="backend.Allocproof.html">backend.Allocproof</a>]<br/>
+<a href="backend.PPCgenproof1.html#agree_exten_1">agree_exten_1</a> [lemma, in <a href="backend.PPCgenproof1.html">backend.PPCgenproof1</a>]<br/>
+<a href="backend.PPCgenproof1.html#agree_exten_2">agree_exten_2</a> [lemma, in <a href="backend.PPCgenproof1.html">backend.PPCgenproof1</a>]<br/>
+<a href="backend.Allocproof.html#agree_increasing">agree_increasing</a> [lemma, in <a href="backend.Allocproof.html">backend.Allocproof</a>]<br/>
+<a href="backend.Allocproof.html#agree_init_regs">agree_init_regs</a> [lemma, in <a href="backend.Allocproof.html">backend.Allocproof</a>]<br/>
+<a href="backend.Allocproof.html#agree_move_live">agree_move_live</a> [lemma, in <a href="backend.Allocproof.html">backend.Allocproof</a>]<br/>
+<a href="backend.PPCgenproof1.html#agree_nextinstr">agree_nextinstr</a> [lemma, in <a href="backend.PPCgenproof1.html">backend.PPCgenproof1</a>]<br/>
+<a href="backend.PPCgenproof1.html#agree_nextinstr_commut">agree_nextinstr_commut</a> [lemma, in <a href="backend.PPCgenproof1.html">backend.PPCgenproof1</a>]<br/>
+<a href="backend.Allocproof.html#agree_parameters">agree_parameters</a> [lemma, in <a href="backend.Allocproof.html">backend.Allocproof</a>]<br/>
+<a href="backend.Allocproof.html#agree_reg_list_live">agree_reg_list_live</a> [lemma, in <a href="backend.Allocproof.html">backend.Allocproof</a>]<br/>
+<a href="backend.Allocproof.html#agree_reg_live">agree_reg_live</a> [lemma, in <a href="backend.Allocproof.html">backend.Allocproof</a>]<br/>
+<a href="backend.Allocproof.html#agree_reg_sum_live">agree_reg_sum_live</a> [lemma, in <a href="backend.Allocproof.html">backend.Allocproof</a>]<br/>
+<a href="backend.Stackingproof.html#agree_return_regs">agree_return_regs</a> [lemma, in <a href="backend.Stackingproof.html">backend.Stackingproof</a>]<br/>
+<a href="backend.PPCgenproof1.html#agree_set_commut">agree_set_commut</a> [lemma, in <a href="backend.PPCgenproof1.html">backend.PPCgenproof1</a>]<br/>
+<a href="backend.Stackingproof.html#agree_set_local">agree_set_local</a> [lemma, in <a href="backend.Stackingproof.html">backend.Stackingproof</a>]<br/>
+<a href="backend.PPCgenproof1.html#agree_set_mfreg">agree_set_mfreg</a> [lemma, in <a href="backend.PPCgenproof1.html">backend.PPCgenproof1</a>]<br/>
+<a href="backend.PPCgenproof1.html#agree_set_mireg">agree_set_mireg</a> [lemma, in <a href="backend.PPCgenproof1.html">backend.PPCgenproof1</a>]<br/>
+<a href="backend.PPCgenproof1.html#agree_set_mireg_exten">agree_set_mireg_exten</a> [lemma, in <a href="backend.PPCgenproof1.html">backend.PPCgenproof1</a>]<br/>
+<a href="backend.PPCgenproof1.html#agree_set_mireg_twice">agree_set_mireg_twice</a> [lemma, in <a href="backend.PPCgenproof1.html">backend.PPCgenproof1</a>]<br/>
+<a href="backend.PPCgenproof1.html#agree_set_mreg">agree_set_mreg</a> [lemma, in <a href="backend.PPCgenproof1.html">backend.PPCgenproof1</a>]<br/>
+<a href="backend.PPCgenproof1.html#agree_set_other">agree_set_other</a> [lemma, in <a href="backend.PPCgenproof1.html">backend.PPCgenproof1</a>]<br/>
+<a href="backend.Stackingproof.html#agree_set_outgoing">agree_set_outgoing</a> [lemma, in <a href="backend.Stackingproof.html">backend.Stackingproof</a>]<br/>
+<a href="backend.Stackingproof.html#agree_set_reg">agree_set_reg</a> [lemma, in <a href="backend.Stackingproof.html">backend.Stackingproof</a>]<br/>
+<a href="backend.PPCgenproof1.html#agree_set_twice_mireg">agree_set_twice_mireg</a> [lemma, in <a href="backend.PPCgenproof1.html">backend.PPCgenproof1</a>]<br/>
+<a href="backend.Op.html#Aindexed">Aindexed</a> [constructor, in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Op.html#Aindexed2">Aindexed2</a> [constructor, in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Op.html#Ainstack">Ainstack</a> [constructor, in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="lib.Coqlib.html#align">align</a> [definition, in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="lib.Coqlib.html#align_le">align_le</a> [lemma, in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="backend.Mach.html#align_16_top">align_16_top</a> [definition, in <a href="backend.Mach.html">backend.Mach</a>]<br/>
+<a href="backend.Mem.html#alloc">alloc</a> [definition, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Allocation.html">Allocation</a> [library]<br/>
+<a href="backend.Allocproof.html">Allocproof</a> [library]<br/>
+<a href="backend.Allocproof_aux.html">Allocproof_aux</a> [library]<br/>
+<a href="backend.Alloctyping.html#allocs_write_ok">allocs_write_ok</a> [lemma, in <a href="backend.Alloctyping.html">backend.Alloctyping</a>]<br/>
+<a href="backend.Alloctyping.html">Alloctyping</a> [library]<br/>
+<a href="backend.Alloctyping_aux.html">Alloctyping_aux</a> [library]<br/>
+<a href="backend.Mem.html#alloc_extends">alloc_extends</a> [lemma, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#alloc_mapped_inject">alloc_mapped_inject</a> [lemma, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Coloring.html#alloc_of_coloring">alloc_of_coloring</a> [definition, in <a href="backend.Coloring.html">backend.Coloring</a>]<br/>
+<a href="backend.Coloringproof.html#alloc_of_coloring_correct_1">alloc_of_coloring_correct_1</a> [lemma, in <a href="backend.Coloringproof.html">backend.Coloringproof</a>]<br/>
+<a href="backend.Coloringproof.html#alloc_of_coloring_correct_2">alloc_of_coloring_correct_2</a> [lemma, in <a href="backend.Coloringproof.html">backend.Coloringproof</a>]<br/>
+<a href="backend.Coloringproof.html#alloc_of_coloring_correct_3">alloc_of_coloring_correct_3</a> [lemma, in <a href="backend.Coloringproof.html">backend.Coloringproof</a>]<br/>
+<a href="backend.Coloringproof.html#alloc_of_coloring_correct_4">alloc_of_coloring_correct_4</a> [lemma, in <a href="backend.Coloringproof.html">backend.Coloringproof</a>]<br/>
+<a href="backend.RTLgen.html#alloc_reg">alloc_reg</a> [definition, in <a href="backend.RTLgen.html">backend.RTLgen</a>]<br/>
+<a href="backend.RTLgen.html#alloc_regs">alloc_regs</a> [definition, in <a href="backend.RTLgen.html">backend.RTLgen</a>]<br/>
+<a href="backend.RTLgenproof1.html#alloc_regs_fresh_or_in_map">alloc_regs_fresh_or_in_map</a> [lemma, in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.RTLgenproof1.html#alloc_regs_incr">alloc_regs_incr</a> [lemma, in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.RTLgenproof1.html#alloc_regs_target_ok">alloc_regs_target_ok</a> [lemma, in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.RTLgenproof1.html#alloc_regs_valid">alloc_regs_valid</a> [lemma, in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.RTLgenproof1.html#alloc_reg_fresh_or_in_map">alloc_reg_fresh_or_in_map</a> [lemma, in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.RTLgenproof1.html#alloc_reg_incr">alloc_reg_incr</a> [lemma, in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.RTLgenproof1.html#alloc_reg_target_ok">alloc_reg_target_ok</a> [lemma, in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.RTLgenproof1.html#alloc_reg_valid">alloc_reg_valid</a> [lemma, in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.Mem.html#alloc_right_inject">alloc_right_inject</a> [lemma, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Alloctyping.html#alloc_type">alloc_type</a> [lemma, in <a href="backend.Alloctyping.html">backend.Alloctyping</a>]<br/>
+<a href="backend.Alloctyping.html#alloc_types">alloc_types</a> [lemma, in <a href="backend.Alloctyping.html">backend.Alloctyping</a>]<br/>
+<a href="backend.Mem.html#alloc_unmapped_inject">alloc_unmapped_inject</a> [lemma, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Csharpminor.html#alloc_variables">alloc_variables</a> [inductive, in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Csharpminor.html#alloc_variables_cons">alloc_variables_cons</a> [constructor, in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Cminorgenproof.html#alloc_variables_list_block">alloc_variables_list_block</a> [lemma, in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.Cminorgenproof.html#alloc_variables_nextblock_incr">alloc_variables_nextblock_incr</a> [lemma, in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.Csharpminor.html#alloc_variables_nil">alloc_variables_nil</a> [constructor, in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Alloctyping.html#alloc_write_ok">alloc_write_ok</a> [lemma, in <a href="backend.Alloctyping.html">backend.Alloctyping</a>]<br/>
+<a href="backend.InterfGraph.html#all_interf_regs">all_interf_regs</a> [definition, in <a href="backend.InterfGraph.html">backend.InterfGraph</a>]<br/>
+<a href="backend.InterfGraph.html#all_interf_regs_correct_aux_1">all_interf_regs_correct_aux_1</a> [lemma, in <a href="backend.InterfGraph.html">backend.InterfGraph</a>]<br/>
+<a href="backend.InterfGraph.html#all_interf_regs_correct_aux_2">all_interf_regs_correct_aux_2</a> [lemma, in <a href="backend.InterfGraph.html">backend.InterfGraph</a>]<br/>
+<a href="backend.InterfGraph.html#all_interf_regs_correct_aux_3">all_interf_regs_correct_aux_3</a> [lemma, in <a href="backend.InterfGraph.html">backend.InterfGraph</a>]<br/>
+<a href="backend.InterfGraph.html#all_interf_regs_correct_1">all_interf_regs_correct_1</a> [lemma, in <a href="backend.InterfGraph.html">backend.InterfGraph</a>]<br/>
+<a href="backend.InterfGraph.html#all_interf_regs_correct_2">all_interf_regs_correct_2</a> [lemma, in <a href="backend.InterfGraph.html">backend.InterfGraph</a>]<br/>
+<a href="backend.CSEproof.html#analysis_correct_entry">analysis_correct_entry</a> [lemma, in <a href="backend.CSEproof.html">backend.CSEproof</a>]<br/>
+<a href="backend.CSEproof.html#analysis_correct_N">analysis_correct_N</a> [lemma, in <a href="backend.CSEproof.html">backend.CSEproof</a>]<br/>
+<a href="backend.CSEproof.html#analysis_correct_1">analysis_correct_1</a> [lemma, in <a href="backend.CSEproof.html">backend.CSEproof</a>]<br/>
+<a href="backend.Allocation.html#analyze">analyze</a> [definition, in <a href="backend.Allocation.html">backend.Allocation</a>]<br/>
+<a href="backend.Constprop.html#analyze">analyze</a> [definition, in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.CSE.html#analyze">analyze</a> [definition, in <a href="backend.CSE.html">backend.CSE</a>]<br/>
+<a href="backend.Allocproof.html#analyze_correct">analyze_correct</a> [lemma, in <a href="backend.Allocproof.html">backend.Allocproof</a>]<br/>
+<a href="backend.Constpropproof.html#analyze_correct_1">analyze_correct_1</a> [lemma, in <a href="backend.Constpropproof.html">backend.Constpropproof</a>]<br/>
+<a href="backend.Constpropproof.html#analyze_correct_2">analyze_correct_2</a> [lemma, in <a href="backend.Constpropproof.html">backend.Constpropproof</a>]<br/>
+<a href="backend.Constpropproof.html#analyze_correct_3">analyze_correct_3</a> [lemma, in <a href="backend.Constpropproof.html">backend.Constpropproof</a>]<br/>
+<a href="backend.Kildall.html#analyze_invariant">analyze_invariant</a> [lemma, in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.Kildall.html#analyze_P">analyze_P</a> [lemma, in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="lib.Integers.html#and">and</a> [definition, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Cmconstr.html#and">and</a> [definition, in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Values.html#and">and</a> [definition, in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.Cmconstr.html#andimm">andimm</a> [definition, in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.PPCgen.html#andimm">andimm</a> [definition, in <a href="backend.PPCgen.html">backend.PPCgen</a>]<br/>
+<a href="backend.PPCgenproof1.html#andimm_correct">andimm_correct</a> [lemma, in <a href="backend.PPCgenproof1.html">backend.PPCgenproof1</a>]<br/>
+<a href="backend.Values.html#and_assoc">and_assoc</a> [lemma, in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="lib.Integers.html#and_assoc">and_assoc</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#and_commut">and_commut</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Values.html#and_commut">and_commut</a> [lemma, in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="lib.Integers.html#and_idem">and_idem</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#and_mone">and_mone</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#and_or_distrib">and_or_distrib</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#and_shl">and_shl</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#and_shru">and_shru</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#and_xor_distrib">and_xor_distrib</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#and_zero">and_zero</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Parallelmove.html#appcons_length">appcons_length</a> [lemma, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="lib.Maps.html#append">append</a> [definition, in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Maps.html#append_assoc_0">append_assoc_0</a> [lemma, in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Maps.html#append_assoc_1">append_assoc_1</a> [lemma, in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Maps.html#append_injective">append_injective</a> [lemma, in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Maps.html#append_neutral_l">append_neutral_l</a> [lemma, in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Maps.html#append_neutral_r">append_neutral_r</a> [lemma, in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="backend.Main.html#apply_partial">apply_partial</a> [definition, in <a href="backend.Main.html">backend.Main</a>]<br/>
+<a href="backend.Main.html#apply_total">apply_total</a> [definition, in <a href="backend.Main.html">backend.Main</a>]<br/>
+<a href="backend.Main.html#apply_total_transf_program">apply_total_transf_program</a> [lemma, in <a href="backend.Main.html">backend.Main</a>]<br/>
+<a href="backend.Constprop.html#approx">approx</a> [inductive, in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#Approx">Approx</a> [module, in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#approx_regs">approx_regs</a> [definition, in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constpropproof.html#approx_regs_val_list">approx_regs_val_list</a> [lemma, in <a href="backend.Constpropproof.html">backend.Constpropproof</a>]<br/>
+<a href="backend.Parallelmove.html#app_app">app_app</a> [lemma, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#app_cons">app_cons</a> [lemma, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#app_nil">app_nil</a> [lemma, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#app_rewrite">app_rewrite</a> [lemma, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#app_rewriter">app_rewriter</a> [lemma, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#app_rewrite2">app_rewrite2</a> [lemma, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Conventions.html#arguments_not_preserved">arguments_not_preserved</a> [lemma, in <a href="backend.Conventions.html">backend.Conventions</a>]<br/>
+<a href="backend.Cminorgen.html#assign_variable">assign_variable</a> [definition, in <a href="backend.Cminorgen.html">backend.Cminorgen</a>]<br/>
+<a href="backend.Cminorgen.html#assign_variables">assign_variables</a> [definition, in <a href="backend.Cminorgen.html">backend.Cminorgen</a>]<br/>
+<a href="backend.AST.html">AST</a> [library]<br/>
+<br/><br/><a name="global_B"></a><h2>B </h2>
+<a href="backend.Kildall.html#BACKWARD_DATAFLOW_SOLVER">BACKWARD_DATAFLOW_SOLVER</a> [module, in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.Kildall.html#Backward_Dataflow_Solver">Backward_Dataflow_Solver</a> [module, in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.Parallelmove.html#base_case_Pmov_dec">base_case_Pmov_dec</a> [definition, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Kildall.html#basic_block_list">basic_block_list</a> [definition, in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.Kildall.html#basic_block_map">basic_block_map</a> [definition, in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.Kildall.html#BBlock_solver">BBlock_solver</a> [module, in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.Kildall.html#BBLOCK_SOLVER">BBLOCK_SOLVER</a> [module, in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.Kildall.html#bbmap">bbmap</a> [definition, in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.LTL.html#Bcall">Bcall</a> [constructor, in <a href="backend.LTL.html">backend.LTL</a>]<br/>
+<a href="backend.LTL.html#Bcond">Bcond</a> [constructor, in <a href="backend.LTL.html">backend.LTL</a>]<br/>
+<a href="backend.LTL.html#Bgetstack">Bgetstack</a> [constructor, in <a href="backend.LTL.html">backend.LTL</a>]<br/>
+<a href="backend.LTL.html#Bgoto">Bgoto</a> [constructor, in <a href="backend.LTL.html">backend.LTL</a>]<br/>
+<a href="lib.Inclusion.html#bin">bin</a> [inductive, in <a href="lib.Inclusion.html">lib.Inclusion</a>]<br/>
+<a href="backend.RTLgen.html#bind">bind</a> [definition, in <a href="backend.RTLgen.html">backend.RTLgen</a>]<br/>
+<a href="backend.Cminorgen.html#bind">bind</a> [definition, in <a href="backend.Cminorgen.html">backend.Cminorgen</a>]<br/>
+<a href="backend.RTLgen.html#bind2">bind2</a> [definition, in <a href="backend.RTLgen.html">backend.RTLgen</a>]<br/>
+<a href="backend.Csharpminor.html#bind_parameters">bind_parameters</a> [inductive, in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Csharpminor.html#bind_parameters_cons">bind_parameters_cons</a> [constructor, in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Cminorgenproof.html#bind_parameters_length">bind_parameters_length</a> [lemma, in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.Csharpminor.html#bind_parameters_nil">bind_parameters_nil</a> [constructor, in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="lib.Inclusion.html#bin_A">bin_A</a> [definition, in <a href="lib.Inclusion.html">lib.Inclusion</a>]<br/>
+<a href="lib.Integers.html#bits_of_Z">bits_of_Z</a> [definition, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#bits_of_Z_above">bits_of_Z_above</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#bits_of_Z_below">bits_of_Z_below</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#bits_of_Z_mone">bits_of_Z_mone</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#bits_of_Z_of_bits">bits_of_Z_of_bits</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#bits_of_Z_zero">bits_of_Z_zero</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#bitwise_binop">bitwise_binop</a> [definition, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#bitwise_binop_assoc">bitwise_binop_assoc</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#bitwise_binop_commut">bitwise_binop_commut</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#bitwise_binop_idem">bitwise_binop_idem</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#bitwise_binop_rol">bitwise_binop_rol</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#bitwise_binop_shl">bitwise_binop_shl</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#bitwise_binop_shru">bitwise_binop_shru</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.LTL.html#Bload">Bload</a> [constructor, in <a href="backend.LTL.html">backend.LTL</a>]<br/>
+<a href="backend.LTL.html#block">block</a> [inductive, in <a href="backend.LTL.html">backend.LTL</a>]<br/>
+<a href="backend.Values.html#block">block</a> [definition, in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.Mem.html#block_agree">block_agree</a> [definition, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#block_agree_refl">block_agree_refl</a> [lemma, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#block_agree_sym">block_agree_sym</a> [lemma, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#block_agree_trans">block_agree_trans</a> [lemma, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#block_contents">block_contents</a> [inductive, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#block_contents_agree">block_contents_agree</a> [definition, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#block_contents_exten">block_contents_exten</a> [lemma, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#block_contents_extends">block_contents_extends</a> [definition, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#block_contents_inject">block_contents_inject</a> [inductive, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#block_contents_inject_incr">block_contents_inject_incr</a> [lemma, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#block_cont_val">block_cont_val</a> [lemma, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Values.html#bool_of_false_val">bool_of_false_val</a> [lemma, in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.Values.html#bool_of_false_val2">bool_of_false_val2</a> [lemma, in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.Values.html#bool_of_false_val_inv">bool_of_false_val_inv</a> [lemma, in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.Values.html#bool_of_true_val">bool_of_true_val</a> [lemma, in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.Values.html#bool_of_true_val2">bool_of_true_val2</a> [lemma, in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.Values.html#bool_of_true_val_inv">bool_of_true_val_inv</a> [lemma, in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.Values.html#bool_of_val">bool_of_val</a> [inductive, in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.Values.html#bool_of_val_int_true">bool_of_val_int_true</a> [constructor, in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.LTL.html#Bop">Bop</a> [constructor, in <a href="backend.LTL.html">backend.LTL</a>]<br/>
+<a href="lib.Lattice.html#bot">bot</a> [definition, in <a href="lib.Lattice.html">lib.Lattice</a>]<br/>
+<a href="lib.Lattice.html#Bot">Bot</a> [constructor, in <a href="lib.Lattice.html">lib.Lattice</a>]<br/>
+<a href="lib.Lattice.html#bot">bot</a> [definition, in <a href="lib.Lattice.html">lib.Lattice</a>]<br/>
+<a href="backend.Constprop.html#bot">bot</a> [definition, in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="lib.Sets.html#bot">bot</a> [definition, in <a href="lib.Sets.html">lib.Sets</a>]<br/>
+<a href="lib.Lattice.html#bot">bot</a> [definition, in <a href="lib.Lattice.html">lib.Lattice</a>]<br/>
+<a href="lib.Lattice.html#Bot_except">Bot_except</a> [constructor, in <a href="lib.Lattice.html">lib.Lattice</a>]<br/>
+<a href="backend.Lineartyping.html#bounds">bounds</a> [inductive, in <a href="backend.Lineartyping.html">backend.Lineartyping</a>]<br/>
+<a href="backend.Mem.html#bounds_free_block">bounds_free_block</a> [lemma, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Lineartyping.html#bound_float_callee_save_pos">bound_float_callee_save_pos</a> [lemma, in <a href="backend.Lineartyping.html">backend.Lineartyping</a>]<br/>
+<a href="backend.Lineartyping.html#bound_float_local_pos">bound_float_local_pos</a> [lemma, in <a href="backend.Lineartyping.html">backend.Lineartyping</a>]<br/>
+<a href="backend.Lineartyping.html#bound_int_callee_save_pos">bound_int_callee_save_pos</a> [lemma, in <a href="backend.Lineartyping.html">backend.Lineartyping</a>]<br/>
+<a href="backend.Lineartyping.html#bound_int_local_pos">bound_int_local_pos</a> [lemma, in <a href="backend.Lineartyping.html">backend.Lineartyping</a>]<br/>
+<a href="backend.Lineartyping.html#bound_outgoing_pos">bound_outgoing_pos</a> [lemma, in <a href="backend.Lineartyping.html">backend.Lineartyping</a>]<br/>
+<a href="backend.Tunneling.html#branch_target">branch_target</a> [definition, in <a href="backend.Tunneling.html">backend.Tunneling</a>]<br/>
+<a href="backend.Tunnelingproof.html#branch_target_characterization">branch_target_characterization</a> [lemma, in <a href="backend.Tunnelingproof.html">backend.Tunnelingproof</a>]<br/>
+<a href="backend.Tunneling.html#branch_target_rec">branch_target_rec</a> [definition, in <a href="backend.Tunneling.html">backend.Tunneling</a>]<br/>
+<a href="backend.Tunnelingproof.html#branch_target_rec_1">branch_target_rec_1</a> [lemma, in <a href="backend.Tunnelingproof.html">backend.Tunnelingproof</a>]<br/>
+<a href="backend.Tunnelingproof.html#branch_target_rec_2">branch_target_rec_2</a> [lemma, in <a href="backend.Tunnelingproof.html">backend.Tunnelingproof</a>]<br/>
+<a href="backend.LTL.html#Breturn">Breturn</a> [constructor, in <a href="backend.LTL.html">backend.LTL</a>]<br/>
+<a href="backend.LTL.html#Bsetstack">Bsetstack</a> [constructor, in <a href="backend.LTL.html">backend.LTL</a>]<br/>
+<a href="backend.LTL.html#Bstore">Bstore</a> [constructor, in <a href="backend.LTL.html">backend.LTL</a>]<br/>
+<a href="backend.Cminorgen.html#build_compilenv">build_compilenv</a> [definition, in <a href="backend.Cminorgen.html">backend.Cminorgen</a>]<br/>
+<br/><br/><a name="global_C"></a><h2>C </h2>
+<a href="backend.Machabstr2mach.html#callstack">callstack</a> [definition, in <a href="backend.Machabstr2mach.html">backend.Machabstr2mach</a>]<br/>
+<a href="backend.Cminorgenproof.html#callstack">callstack</a> [definition, in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.Machabstr2mach.html#callstack_dom">callstack_dom</a> [inductive, in <a href="backend.Machabstr2mach.html">backend.Machabstr2mach</a>]<br/>
+<a href="backend.Machabstr2mach.html#callstack_dom_cons">callstack_dom_cons</a> [constructor, in <a href="backend.Machabstr2mach.html">backend.Machabstr2mach</a>]<br/>
+<a href="backend.Machabstr2mach.html#callstack_dom_diff">callstack_dom_diff</a> [lemma, in <a href="backend.Machabstr2mach.html">backend.Machabstr2mach</a>]<br/>
+<a href="backend.Machabstr2mach.html#callstack_dom_incr">callstack_dom_incr</a> [lemma, in <a href="backend.Machabstr2mach.html">backend.Machabstr2mach</a>]<br/>
+<a href="backend.Machabstr2mach.html#callstack_dom_less">callstack_dom_less</a> [lemma, in <a href="backend.Machabstr2mach.html">backend.Machabstr2mach</a>]<br/>
+<a href="backend.Machabstr2mach.html#callstack_dom_nil">callstack_dom_nil</a> [constructor, in <a href="backend.Machabstr2mach.html">backend.Machabstr2mach</a>]<br/>
+<a href="backend.Machabstr2mach.html#callstack_exten">callstack_exten</a> [lemma, in <a href="backend.Machabstr2mach.html">backend.Machabstr2mach</a>]<br/>
+<a href="backend.Machabstr2mach.html#callstack_function_entry">callstack_function_entry</a> [lemma, in <a href="backend.Machabstr2mach.html">backend.Machabstr2mach</a>]<br/>
+<a href="backend.Machabstr2mach.html#callstack_function_return">callstack_function_return</a> [lemma, in <a href="backend.Machabstr2mach.html">backend.Machabstr2mach</a>]<br/>
+<a href="backend.Machabstr2mach.html#callstack_get_parent">callstack_get_parent</a> [lemma, in <a href="backend.Machabstr2mach.html">backend.Machabstr2mach</a>]<br/>
+<a href="backend.Machabstr2mach.html#callstack_get_slot">callstack_get_slot</a> [lemma, in <a href="backend.Machabstr2mach.html">backend.Machabstr2mach</a>]<br/>
+<a href="backend.Machabstr2mach.html#callstack_init">callstack_init</a> [lemma, in <a href="backend.Machabstr2mach.html">backend.Machabstr2mach</a>]<br/>
+<a href="backend.Machabstr2mach.html#callstack_invariant">callstack_invariant</a> [inductive, in <a href="backend.Machabstr2mach.html">backend.Machabstr2mach</a>]<br/>
+<a href="backend.Machabstr2mach.html#callstack_linked">callstack_linked</a> [inductive, in <a href="backend.Machabstr2mach.html">backend.Machabstr2mach</a>]<br/>
+<a href="backend.Machabstr2mach.html#callstack_linked_cons">callstack_linked_cons</a> [constructor, in <a href="backend.Machabstr2mach.html">backend.Machabstr2mach</a>]<br/>
+<a href="backend.Machabstr2mach.html#callstack_linked_nil">callstack_linked_nil</a> [constructor, in <a href="backend.Machabstr2mach.html">backend.Machabstr2mach</a>]<br/>
+<a href="backend.Machabstr2mach.html#callstack_linked_one">callstack_linked_one</a> [constructor, in <a href="backend.Machabstr2mach.html">backend.Machabstr2mach</a>]<br/>
+<a href="backend.Machabstr2mach.html#callstack_load">callstack_load</a> [lemma, in <a href="backend.Machabstr2mach.html">backend.Machabstr2mach</a>]<br/>
+<a href="backend.Machabstr2mach.html#callstack_set_slot">callstack_set_slot</a> [lemma, in <a href="backend.Machabstr2mach.html">backend.Machabstr2mach</a>]<br/>
+<a href="backend.Machabstr2mach.html#callstack_store">callstack_store</a> [lemma, in <a href="backend.Machabstr2mach.html">backend.Machabstr2mach</a>]<br/>
+<a href="backend.Machabstr2mach.html#callstack_store_aux">callstack_store_aux</a> [lemma, in <a href="backend.Machabstr2mach.html">backend.Machabstr2mach</a>]<br/>
+<a href="backend.Machabstr2mach.html#callstack_store_ok">callstack_store_ok</a> [lemma, in <a href="backend.Machabstr2mach.html">backend.Machabstr2mach</a>]<br/>
+<a href="backend.LTL.html#call_regs">call_regs</a> [definition, in <a href="backend.LTL.html">backend.LTL</a>]<br/>
+<a href="backend.Allocproof.html#call_regs_param_of_arg">call_regs_param_of_arg</a> [lemma, in <a href="backend.Allocproof.html">backend.Allocproof</a>]<br/>
+<a href="backend.PPC.html#CARRY">CARRY</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.Csharpminor.html#cast">cast</a> [definition, in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="lib.Integers.html#cast16signed">cast16signed</a> [definition, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Values.html#cast16signed">cast16signed</a> [definition, in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.Cmconstr.html#cast16signed">cast16signed</a> [definition, in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Cmconstr.html#cast16unsigned">cast16unsigned</a> [definition, in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Values.html#cast16unsigned">cast16unsigned</a> [definition, in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="lib.Integers.html#cast16unsigned">cast16unsigned</a> [definition, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#cast16unsigned_and">cast16unsigned_and</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Values.html#cast16unsigned_and">cast16unsigned_and</a> [lemma, in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="lib.Integers.html#cast16_signed_equal_if_unsigned_equal">cast16_signed_equal_if_unsigned_equal</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#cast16_signed_idem">cast16_signed_idem</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#cast16_unsigned_idem">cast16_unsigned_idem</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#cast16_unsigned_signed">cast16_unsigned_signed</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Cmconstr.html#cast8signed">cast8signed</a> [definition, in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="lib.Integers.html#cast8signed">cast8signed</a> [definition, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Values.html#cast8signed">cast8signed</a> [definition, in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.Cmconstr.html#cast8unsigned">cast8unsigned</a> [definition, in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Values.html#cast8unsigned">cast8unsigned</a> [definition, in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="lib.Integers.html#cast8unsigned">cast8unsigned</a> [definition, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#cast8unsigned_and">cast8unsigned_and</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Values.html#cast8unsigned_and">cast8unsigned_and</a> [lemma, in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="lib.Integers.html#cast8_signed_equal_if_unsigned_equal">cast8_signed_equal_if_unsigned_equal</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#cast8_signed_idem">cast8_signed_idem</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#cast8_signed_unsigned">cast8_signed_unsigned</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#cast8_unsigned_idem">cast8_unsigned_idem</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#cast8_unsigned_signed">cast8_unsigned_signed</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Op.html#Ccomp">Ccomp</a> [constructor, in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Op.html#Ccompf">Ccompf</a> [constructor, in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Op.html#Ccompimm">Ccompimm</a> [constructor, in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Op.html#Ccompu">Ccompu</a> [constructor, in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Op.html#Ccompuimm">Ccompuimm</a> [constructor, in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Cminor.html#CEcond">CEcond</a> [constructor, in <a href="backend.Cminor.html">backend.Cminor</a>]<br/>
+<a href="backend.Cminor.html#CEcondition">CEcondition</a> [constructor, in <a href="backend.Cminor.html">backend.Cminor</a>]<br/>
+<a href="backend.Cminor.html#CEfalse">CEfalse</a> [constructor, in <a href="backend.Cminor.html">backend.Cminor</a>]<br/>
+<a href="backend.AST.html#Ceq">Ceq</a> [constructor, in <a href="backend.AST.html">backend.AST</a>]<br/>
+<a href="backend.Cminor.html#CEtrue">CEtrue</a> [constructor, in <a href="backend.Cminor.html">backend.Cminor</a>]<br/>
+<a href="backend.AST.html#Cge">Cge</a> [constructor, in <a href="backend.AST.html">backend.AST</a>]<br/>
+<a href="backend.AST.html#Cgt">Cgt</a> [constructor, in <a href="backend.AST.html">backend.AST</a>]<br/>
+<a href="lib.Inclusion.html#check_all_leaves">check_all_leaves</a> [definition, in <a href="lib.Inclusion.html">lib.Inclusion</a>]<br/>
+<a href="lib.Inclusion.html#check_all_leaves_sound">check_all_leaves_sound</a> [lemma, in <a href="lib.Inclusion.html">lib.Inclusion</a>]<br/>
+<a href="backend.Coloring.html#check_coloring">check_coloring</a> [definition, in <a href="backend.Coloring.html">backend.Coloring</a>]<br/>
+<a href="backend.Coloring.html#check_coloring_1">check_coloring_1</a> [definition, in <a href="backend.Coloring.html">backend.Coloring</a>]<br/>
+<a href="backend.Coloringproof.html#check_coloring_1_correct">check_coloring_1_correct</a> [lemma, in <a href="backend.Coloringproof.html">backend.Coloringproof</a>]<br/>
+<a href="backend.Coloring.html#check_coloring_2">check_coloring_2</a> [definition, in <a href="backend.Coloring.html">backend.Coloring</a>]<br/>
+<a href="backend.Coloringproof.html#check_coloring_2_correct">check_coloring_2_correct</a> [lemma, in <a href="backend.Coloringproof.html">backend.Coloringproof</a>]<br/>
+<a href="backend.Coloring.html#check_coloring_3">check_coloring_3</a> [definition, in <a href="backend.Coloring.html">backend.Coloring</a>]<br/>
+<a href="backend.Coloringproof.html#check_coloring_3_correct">check_coloring_3_correct</a> [lemma, in <a href="backend.Coloringproof.html">backend.Coloringproof</a>]<br/>
+<a href="backend.Mem.html#check_cont">check_cont</a> [definition, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#check_cont_agree">check_cont_agree</a> [lemma, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#check_cont_false">check_cont_false</a> [lemma, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#check_cont_inject">check_cont_inject</a> [lemma, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#check_cont_inv">check_cont_inv</a> [lemma, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#check_cont_true">check_cont_true</a> [lemma, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="lib.Integers.html#check_equal_on_range">check_equal_on_range</a> [definition, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#check_equal_on_range_correct">check_equal_on_range_correct</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Mach.html#chunk_of_type">chunk_of_type</a> [definition, in <a href="backend.Mach.html">backend.Mach</a>]<br/>
+<a href="backend.PPC.html#Cint">Cint</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.AST.html#Cle">Cle</a> [constructor, in <a href="backend.AST.html">backend.AST</a>]<br/>
+<a href="backend.Linearize.html#cleanup_code">cleanup_code</a> [definition, in <a href="backend.Linearize.html">backend.Linearize</a>]<br/>
+<a href="backend.Linearizetyping.html#cleanup_code_conservation">cleanup_code_conservation</a> [lemma, in <a href="backend.Linearizetyping.html">backend.Linearizetyping</a>]<br/>
+<a href="backend.Linearizetyping.html#cleanup_code_conservation_2">cleanup_code_conservation_2</a> [lemma, in <a href="backend.Linearizetyping.html">backend.Linearizetyping</a>]<br/>
+<a href="backend.Linearizeproof.html#cleanup_code_correct_1">cleanup_code_correct_1</a> [lemma, in <a href="backend.Linearizeproof.html">backend.Linearizeproof</a>]<br/>
+<a href="backend.Linearizeproof.html#cleanup_code_correct_2">cleanup_code_correct_2</a> [lemma, in <a href="backend.Linearizeproof.html">backend.Linearizeproof</a>]<br/>
+<a href="backend.Linearize.html#cleanup_function">cleanup_function</a> [definition, in <a href="backend.Linearize.html">backend.Linearize</a>]<br/>
+<a href="backend.Linearizetyping.html#cleanup_function_conservation">cleanup_function_conservation</a> [lemma, in <a href="backend.Linearizetyping.html">backend.Linearizetyping</a>]<br/>
+<a href="backend.Linearizetyping.html#cleanup_function_conservation_2">cleanup_function_conservation_2</a> [lemma, in <a href="backend.Linearizetyping.html">backend.Linearizetyping</a>]<br/>
+<a href="backend.Linearizeproof.html#cleanup_function_correct">cleanup_function_correct</a> [lemma, in <a href="backend.Linearizeproof.html">backend.Linearizeproof</a>]<br/>
+<a href="backend.AST.html#Clt">Clt</a> [constructor, in <a href="backend.AST.html">backend.AST</a>]<br/>
+<a href="backend.Op.html#Cmasknotzero">Cmasknotzero</a> [constructor, in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Op.html#Cmaskzero">Cmaskzero</a> [constructor, in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Cmconstr.html">Cmconstr</a> [library]<br/>
+<a href="backend.Cmconstrproof.html">Cmconstrproof</a> [library]<br/>
+<a href="backend.Cminor.html">Cminor</a> [library]<br/>
+<a href="backend.Cminorgen.html">Cminorgen</a> [library]<br/>
+<a href="backend.Cminorgenproof.html">Cminorgenproof</a> [library]<br/>
+<a href="lib.Floats.html#cmp">cmp</a> [axiom, in <a href="lib.Floats.html">lib.Floats</a>]<br/>
+<a href="backend.Cmconstr.html#cmp">cmp</a> [definition, in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Values.html#cmp">cmp</a> [definition, in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="lib.Integers.html#cmp">cmp</a> [definition, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Cmconstr.html#cmpf">cmpf</a> [definition, in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Values.html#cmpf">cmpf</a> [definition, in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.Values.html#cmpf_ge">cmpf_ge</a> [lemma, in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.Values.html#cmpf_is_bool">cmpf_is_bool</a> [lemma, in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.Values.html#cmpf_le">cmpf_le</a> [lemma, in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.Values.html#cmpu">cmpu</a> [definition, in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.Cmconstr.html#cmpu">cmpu</a> [definition, in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="lib.Integers.html#cmpu">cmpu</a> [definition, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Values.html#cmpu_is_bool">cmpu_is_bool</a> [lemma, in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="lib.Floats.html#cmp_ge_gt_eq">cmp_ge_gt_eq</a> [axiom, in <a href="lib.Floats.html">lib.Floats</a>]<br/>
+<a href="backend.Values.html#cmp_is_bool">cmp_is_bool</a> [lemma, in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="lib.Floats.html#cmp_le_lt_eq">cmp_le_lt_eq</a> [axiom, in <a href="lib.Floats.html">lib.Floats</a>]<br/>
+<a href="backend.Values.html#cmp_mismatch">cmp_mismatch</a> [definition, in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.Values.html#cmp_mismatch_is_bool">cmp_mismatch_is_bool</a> [lemma, in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="lib.Floats.html#cmp_ne_eq">cmp_ne_eq</a> [axiom, in <a href="lib.Floats.html">lib.Floats</a>]<br/>
+<a href="backend.AST.html#Cne">Cne</a> [constructor, in <a href="backend.AST.html">backend.AST</a>]<br/>
+<a href="backend.Op.html#Cnotcompf">Cnotcompf</a> [constructor, in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.LTL.html#code">code</a> [definition, in <a href="backend.LTL.html">backend.LTL</a>]<br/>
+<a href="backend.PPC.html#code">code</a> [definition, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.RTL.html#code">code</a> [definition, in <a href="backend.RTL.html">backend.RTL</a>]<br/>
+<a href="backend.Linear.html#code">code</a> [definition, in <a href="backend.Linear.html">backend.Linear</a>]<br/>
+<a href="backend.Mach.html#code">code</a> [definition, in <a href="backend.Mach.html">backend.Mach</a>]<br/>
+<a href="backend.PPCgen.html#code_size">code_size</a> [definition, in <a href="backend.PPCgen.html">backend.PPCgen</a>]<br/>
+<a href="backend.PPCgenproof.html#code_tail">code_tail</a> [definition, in <a href="backend.PPCgenproof.html">backend.PPCgenproof</a>]<br/>
+<a href="backend.PPCgenproof.html#code_tail_next">code_tail_next</a> [lemma, in <a href="backend.PPCgenproof.html">backend.PPCgenproof</a>]<br/>
+<a href="backend.PPCgenproof.html#code_tail_next_int">code_tail_next_int</a> [lemma, in <a href="backend.PPCgenproof.html">backend.PPCgenproof</a>]<br/>
+<a href="backend.Coloring.html">Coloring</a> [library]<br/>
+<a href="backend.Coloringproof.html">Coloringproof</a> [library]<br/>
+<a href="lib.Maps.html#combine">combine</a> [definition, in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Maps.html#combine_commut">combine_commut</a> [lemma, in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Ordered.html#compare">compare</a> [lemma, in <a href="lib.Ordered.html">lib.Ordered</a>]<br/>
+<a href="lib.Ordered.html#compare">compare</a> [lemma, in <a href="lib.Ordered.html">lib.Ordered</a>]<br/>
+<a href="lib.Ordered.html#compare">compare</a> [lemma, in <a href="lib.Ordered.html">lib.Ordered</a>]<br/>
+<a href="backend.PPC.html#compare_float">compare_float</a> [definition, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPCgenproof1.html#compare_float_spec">compare_float_spec</a> [lemma, in <a href="backend.PPCgenproof1.html">backend.PPCgenproof1</a>]<br/>
+<a href="backend.PPC.html#compare_sint">compare_sint</a> [definition, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPCgenproof1.html#compare_sint_spec">compare_sint_spec</a> [lemma, in <a href="backend.PPCgenproof1.html">backend.PPCgenproof1</a>]<br/>
+<a href="backend.PPC.html#compare_uint">compare_uint</a> [definition, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPCgenproof1.html#compare_uint_spec">compare_uint_spec</a> [lemma, in <a href="backend.PPCgenproof1.html">backend.PPCgenproof1</a>]<br/>
+<a href="backend.AST.html#comparison">comparison</a> [inductive, in <a href="backend.AST.html">backend.AST</a>]<br/>
+<a href="backend.Cminorgen.html#compilenv">compilenv</a> [definition, in <a href="backend.Cminorgen.html">backend.Cminorgen</a>]<br/>
+<a href="backend.Cminor.html#condexpr">condexpr</a> [inductive, in <a href="backend.Cminor.html">backend.Cminor</a>]<br/>
+<a href="backend.Cmconstr.html#condexpr_of_expr">condexpr_of_expr</a> [definition, in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Op.html#condition">condition</a> [inductive, in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Cmconstr.html#conditionalexpr">conditionalexpr</a> [definition, in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Constprop.html#cond_strength_reduction">cond_strength_reduction</a> [definition, in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#cond_strength_reduction_cases">cond_strength_reduction_cases</a> [inductive, in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constpropproof.html#cond_strength_reduction_correct">cond_strength_reduction_correct</a> [lemma, in <a href="backend.Constpropproof.html">backend.Constpropproof</a>]<br/>
+<a href="backend.Constprop.html#cond_strength_reduction_match">cond_strength_reduction_match</a> [definition, in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.RTLtyping.html#consistent">consistent</a> [definition, in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.RTLtyping.html#consistent_not_eq">consistent_not_eq</a> [lemma, in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.PPC.html#constant">constant</a> [inductive, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.Constprop.html">Constprop</a> [library]<br/>
+<a href="backend.Constpropproof.html">Constpropproof</a> [library]<br/>
+<a href="backend.PPC.html#const_high">const_high</a> [definition, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#const_low">const_low</a> [definition, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.Parallelmove.html#cons_replace">cons_replace</a> [lemma, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.LTL.html#Cont">Cont</a> [constructor, in <a href="backend.LTL.html">backend.LTL</a>]<br/>
+<a href="backend.Mem.html#Cont">Cont</a> [constructor, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#content">content</a> [inductive, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#contentmap">contentmap</a> [definition, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#contentmap_agree">contentmap_agree</a> [definition, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#contentmap_inject">contentmap_inject</a> [definition, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#contentmap_inject_incr">contentmap_inject_incr</a> [lemma, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#content_inject">content_inject</a> [inductive, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#content_inject_cont">content_inject_cont</a> [constructor, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#content_inject_datum16">content_inject_datum16</a> [constructor, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#content_inject_datum32">content_inject_datum32</a> [constructor, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#content_inject_datum64">content_inject_datum64</a> [constructor, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#content_inject_datum8">content_inject_datum8</a> [constructor, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#content_inject_incr">content_inject_incr</a> [lemma, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#content_inject_undef">content_inject_undef</a> [constructor, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Linearizeproof.html#cont_for_outcome">cont_for_outcome</a> [inductive, in <a href="backend.Linearizeproof.html">backend.Linearizeproof</a>]<br/>
+<a href="backend.Conventions.html">Conventions</a> [library]<br/>
+<a href="lib.Coqlib.html">Coqlib</a> [library]<br/>
+<a href="backend.Coloringproof.html#correct_alloc_instr">correct_alloc_instr</a> [definition, in <a href="backend.Coloringproof.html">backend.Coloringproof</a>]<br/>
+<a href="backend.Coloringproof.html#correct_interf_alloc_instr">correct_interf_alloc_instr</a> [lemma, in <a href="backend.Coloringproof.html">backend.Coloringproof</a>]<br/>
+<a href="backend.Coloringproof.html#correct_interf_instr">correct_interf_instr</a> [definition, in <a href="backend.Coloringproof.html">backend.Coloringproof</a>]<br/>
+<a href="backend.Coloringproof.html#correct_interf_instr_incl">correct_interf_instr_incl</a> [lemma, in <a href="backend.Coloringproof.html">backend.Coloringproof</a>]<br/>
+<a href="backend.PPC.html#crbit">crbit</a> [inductive, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPCgen.html#crbit_for_cond">crbit_for_cond</a> [definition, in <a href="backend.PPCgen.html">backend.PPCgen</a>]<br/>
+<a href="backend.PPCgen.html#crbit_for_fcmp">crbit_for_fcmp</a> [definition, in <a href="backend.PPCgen.html">backend.PPCgen</a>]<br/>
+<a href="backend.PPCgen.html#crbit_for_icmp">crbit_for_icmp</a> [definition, in <a href="backend.PPCgen.html">backend.PPCgen</a>]<br/>
+<a href="backend.PPC.html#CRbit_0">CRbit_0</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#CRbit_1">CRbit_1</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#CRbit_2">CRbit_2</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#CRbit_3">CRbit_3</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#CR0_0">CR0_0</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#CR0_1">CR0_1</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#CR0_2">CR0_2</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#CR0_3">CR0_3</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.CSE.html">CSE</a> [library]<br/>
+<a href="backend.CSEproof.html">CSEproof</a> [library]<br/>
+<a href="backend.Csharpminor.html">Csharpminor</a> [library]<br/>
+<a href="backend.Constprop.html#csr_case1">csr_case1</a> [constructor, in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#csr_case2">csr_case2</a> [constructor, in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#csr_default">csr_default</a> [constructor, in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.PPC.html#Csymbol_high_signed">Csymbol_high_signed</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Csymbol_high_unsigned">Csymbol_high_unsigned</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Csymbol_low_signed">Csymbol_low_signed</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Csymbol_low_unsigned">Csymbol_low_unsigned</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#CTR">CTR</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<br/><br/><a name="global_D"></a><h2>D </h2>
+<a href="backend.Constprop.html#D">D</a> [module, in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Kildall.html#Dataflow_Solver">Dataflow_Solver</a> [module, in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.Kildall.html#DATAFLOW_SOLVER">DATAFLOW_SOLVER</a> [module, in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.Mem.html#Datum16">Datum16</a> [constructor, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#Datum32">Datum32</a> [constructor, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#Datum64">Datum64</a> [constructor, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#Datum8">Datum8</a> [constructor, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.RTLtyping.html#decode">decode</a> [definition, in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.Parallelmove.html#def">def</a> [definition, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.RTLtyping.html#definite">definite</a> [definition, in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.RTLtyping.html#definite_included">definite_included</a> [lemma, in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.Conventions.html#destroyed_at_call">destroyed_at_call</a> [definition, in <a href="backend.Conventions.html">backend.Conventions</a>]<br/>
+<a href="backend.Conventions.html#destroyed_at_call_regs">destroyed_at_call_regs</a> [definition, in <a href="backend.Conventions.html">backend.Conventions</a>]<br/>
+<a href="backend.Locations.html#diff">diff</a> [definition, in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Parallelmove.html#diff_dec">diff_dec</a> [definition, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Locations.html#diff_not_eq">diff_not_eq</a> [lemma, in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Locations.html#diff_sym">diff_sym</a> [lemma, in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Kildall.html#discard_top_worklist_invariant">discard_top_worklist_invariant</a> [lemma, in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.Parallelmove.html#disc1">disc1</a> [lemma, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#disc2">disc2</a> [lemma, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Locations.html#disjoint">disjoint</a> [definition, in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Locations.html#disjoint_cons_left">disjoint_cons_left</a> [lemma, in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Locations.html#disjoint_cons_right">disjoint_cons_right</a> [lemma, in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Locations.html#disjoint_notin">disjoint_notin</a> [lemma, in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Locations.html#disjoint_sym">disjoint_sym</a> [lemma, in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Parallelmove.html#disjoint_tmp__noTmp">disjoint_tmp__noTmp</a> [lemma, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Allocproof_aux.html#dis_dsttmp1_pnilnil">dis_dsttmp1_pnilnil</a> [lemma, in <a href="backend.Allocproof_aux.html">backend.Allocproof_aux</a>]<br/>
+<a href="backend.Allocproof_aux.html#dis_srctmp1_pnilnil">dis_srctmp1_pnilnil</a> [lemma, in <a href="backend.Allocproof_aux.html">backend.Allocproof_aux</a>]<br/>
+<a href="lib.Floats.html#div">div</a> [axiom, in <a href="lib.Floats.html">lib.Floats</a>]<br/>
+<a href="backend.Values.html#divf">divf</a> [definition, in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.Cmconstr.html#divf">divf</a> [definition, in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Cmconstr.html#divs">divs</a> [definition, in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="lib.Integers.html#divs">divs</a> [definition, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Values.html#divs">divs</a> [definition, in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="lib.Integers.html#divs_pow2">divs_pow2</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Values.html#divs_pow2">divs_pow2</a> [lemma, in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.Cmconstr.html#divu">divu</a> [definition, in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Values.html#divu">divu</a> [definition, in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="lib.Integers.html#divu">divu</a> [definition, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Cmconstr.html#divu_cases">divu_cases</a> [inductive, in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Cmconstr.html#divu_case1">divu_case1</a> [constructor, in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Cmconstr.html#divu_default">divu_default</a> [constructor, in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Cmconstr.html#divu_match">divu_match</a> [definition, in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Values.html#divu_pow2">divu_pow2</a> [lemma, in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="lib.Integers.html#divu_pow2">divu_pow2</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Allocproof_aux.html#Done_notmp1src_inv">Done_notmp1src_inv</a> [lemma, in <a href="backend.Allocproof_aux.html">backend.Allocproof_aux</a>]<br/>
+<a href="backend.Allocproof_aux.html#Done_notmp1src_invf">Done_notmp1src_invf</a> [lemma, in <a href="backend.Allocproof_aux.html">backend.Allocproof_aux</a>]<br/>
+<a href="backend.Allocproof_aux.html#Done_notmp1src_invpp">Done_notmp1src_invpp</a> [lemma, in <a href="backend.Allocproof_aux.html">backend.Allocproof_aux</a>]<br/>
+<a href="backend.Allocproof_aux.html#Done_notmp1src_res">Done_notmp1src_res</a> [lemma, in <a href="backend.Allocproof_aux.html">backend.Allocproof_aux</a>]<br/>
+<a href="backend.Allocproof_aux.html#Done_notmp1_inv">Done_notmp1_inv</a> [lemma, in <a href="backend.Allocproof_aux.html">backend.Allocproof_aux</a>]<br/>
+<a href="backend.Allocproof_aux.html#Done_notmp1_invf">Done_notmp1_invf</a> [lemma, in <a href="backend.Allocproof_aux.html">backend.Allocproof_aux</a>]<br/>
+<a href="backend.Allocproof_aux.html#Done_notmp1_invpp">Done_notmp1_invpp</a> [lemma, in <a href="backend.Allocproof_aux.html">backend.Allocproof_aux</a>]<br/>
+<a href="backend.Allocproof_aux.html#Done_notmp1_res">Done_notmp1_res</a> [lemma, in <a href="backend.Allocproof_aux.html">backend.Allocproof_aux</a>]<br/>
+<a href="backend.Allocproof_aux.html#Done_notmp3_inv">Done_notmp3_inv</a> [lemma, in <a href="backend.Allocproof_aux.html">backend.Allocproof_aux</a>]<br/>
+<a href="backend.Allocproof_aux.html#Done_notmp3_invf">Done_notmp3_invf</a> [lemma, in <a href="backend.Allocproof_aux.html">backend.Allocproof_aux</a>]<br/>
+<a href="backend.Allocproof_aux.html#Done_notmp3_invpp">Done_notmp3_invpp</a> [lemma, in <a href="backend.Allocproof_aux.html">backend.Allocproof_aux</a>]<br/>
+<a href="backend.Allocproof_aux.html#Done_notmp3_res">Done_notmp3_res</a> [lemma, in <a href="backend.Allocproof_aux.html">backend.Allocproof_aux</a>]<br/>
+<a href="backend.Allocproof_aux.html#Done_well_formed">Done_well_formed</a> [definition, in <a href="backend.Allocproof_aux.html">backend.Allocproof_aux</a>]<br/>
+<a href="backend.Conventions.html#drop1">drop1</a> [definition, in <a href="backend.Conventions.html">backend.Conventions</a>]<br/>
+<a href="backend.Conventions.html#drop2">drop2</a> [definition, in <a href="backend.Conventions.html">backend.Conventions</a>]<br/>
+<a href="backend.Kildall.html#DS">DS</a> [module, in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.Constprop.html#DS">DS</a> [module, in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Linearize.html#DS">DS</a> [module, in <a href="backend.Linearize.html">backend.Linearize</a>]<br/>
+<a href="backend.Allocation.html#DS">DS</a> [module, in <a href="backend.Allocation.html">backend.Allocation</a>]<br/>
+<a href="backend.Parallelmove.html#dstep">dstep</a> [inductive, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#dstepp">dstepp</a> [inductive, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#dstepp_refl">dstepp_refl</a> [constructor, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#dstepp_sameExec">dstepp_sameExec</a> [lemma, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#dstepp_stepp">dstepp_stepp</a> [lemma, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#dstepp_trans">dstepp_trans</a> [constructor, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#dstep_inv">dstep_inv</a> [lemma, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#dstep_inv_getdst">dstep_inv_getdst</a> [lemma, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#dstep_nop">dstep_nop</a> [constructor, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#dstep_pop">dstep_pop</a> [constructor, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#dstep_pop_loop">dstep_pop_loop</a> [constructor, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#dstep_push">dstep_push</a> [constructor, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#dstep_start">dstep_start</a> [constructor, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#dstep_step">dstep_step</a> [lemma, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Allocproof_aux.html#dst_tmp2_res">dst_tmp2_res</a> [lemma, in <a href="backend.Allocproof_aux.html">backend.Allocproof_aux</a>]<br/>
+<a href="backend.Allocproof_aux.html#dst_tmp2_step">dst_tmp2_step</a> [lemma, in <a href="backend.Allocproof_aux.html">backend.Allocproof_aux</a>]<br/>
+<a href="backend.Allocproof_aux.html#dst_tmp2_stepf">dst_tmp2_stepf</a> [lemma, in <a href="backend.Allocproof_aux.html">backend.Allocproof_aux</a>]<br/>
+<a href="backend.Allocproof_aux.html#dst_tmp2_stepp">dst_tmp2_stepp</a> [lemma, in <a href="backend.Allocproof_aux.html">backend.Allocproof_aux</a>]<br/>
+<br/><br/><a name="global_E"></a><h2>E </h2>
+<a href="backend.Csharpminor.html#Eaddrof">Eaddrof</a> [constructor, in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Cminor.html#Eassign">Eassign</a> [constructor, in <a href="backend.Cminor.html">backend.Cminor</a>]<br/>
+<a href="backend.Csharpminor.html#Eassign">Eassign</a> [constructor, in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Csharpminor.html#Ecall">Ecall</a> [constructor, in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Cminor.html#Ecall">Ecall</a> [constructor, in <a href="backend.Cminor.html">backend.Cminor</a>]<br/>
+<a href="backend.Csharpminor.html#Econdition">Econdition</a> [constructor, in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Cminor.html#Econdition">Econdition</a> [constructor, in <a href="backend.Cminor.html">backend.Cminor</a>]<br/>
+<a href="backend.Cminor.html#Econs">Econs</a> [constructor, in <a href="backend.Cminor.html">backend.Cminor</a>]<br/>
+<a href="backend.Csharpminor.html#Econs">Econs</a> [constructor, in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="lib.union_find.html#ELEMENT">ELEMENT</a> [module, in <a href="lib.union_find.html">lib.union_find</a>]<br/>
+<a href="lib.Sets.html#elements">elements</a> [definition, in <a href="lib.Sets.html">lib.Sets</a>]<br/>
+<a href="lib.Maps.html#elements">elements</a> [definition, in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Maps.html#elements_complete">elements_complete</a> [lemma, in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Sets.html#elements_complete">elements_complete</a> [lemma, in <a href="lib.Sets.html">lib.Sets</a>]<br/>
+<a href="lib.Maps.html#elements_correct">elements_correct</a> [lemma, in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Sets.html#elements_correct">elements_correct</a> [lemma, in <a href="lib.Sets.html">lib.Sets</a>]<br/>
+<a href="lib.Maps.html#elements_keys_norepet">elements_keys_norepet</a> [lemma, in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="backend.Csharpminor.html#Elet">Elet</a> [constructor, in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Cminor.html#Elet">Elet</a> [constructor, in <a href="backend.Cminor.html">backend.Cminor</a>]<br/>
+<a href="backend.Cminor.html#Eletvar">Eletvar</a> [constructor, in <a href="backend.Cminor.html">backend.Cminor</a>]<br/>
+<a href="backend.Csharpminor.html#Eletvar">Eletvar</a> [constructor, in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Cminor.html#Eload">Eload</a> [constructor, in <a href="backend.Cminor.html">backend.Cminor</a>]<br/>
+<a href="backend.Csharpminor.html#Eload">Eload</a> [constructor, in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="lib.Maps.html#elt">elt</a> [definition, in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="backend.RTLtyping.html#elt">elt</a> [definition, in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="lib.Sets.html#elt">elt</a> [definition, in <a href="lib.Sets.html">lib.Sets</a>]<br/>
+<a href="lib.union_find.html#elt">elt</a> [definition, in <a href="lib.union_find.html">lib.union_find</a>]<br/>
+<a href="lib.union_find.html#elt">elt</a> [definition, in <a href="lib.union_find.html">lib.union_find</a>]<br/>
+<a href="lib.union_find.html#elt">elt</a> [definition, in <a href="lib.union_find.html">lib.union_find</a>]<br/>
+<a href="lib.Maps.html#elt">elt</a> [definition, in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Maps.html#elt">elt</a> [definition, in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Maps.html#elt">elt</a> [definition, in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Maps.html#elt_eq">elt_eq</a> [definition, in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Maps.html#elt_eq">elt_eq</a> [definition, in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Maps.html#elt_eq">elt_eq</a> [definition, in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Maps.html#elt_eq">elt_eq</a> [definition, in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Maps.html#EMap">EMap</a> [module, in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Sets.html#empty">empty</a> [definition, in <a href="lib.Sets.html">lib.Sets</a>]<br/>
+<a href="lib.Maps.html#empty">empty</a> [definition, in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.union_find.html#empty">empty</a> [definition, in <a href="lib.union_find.html">lib.union_find</a>]<br/>
+<a href="backend.RTLtyping.html#empty">empty</a> [definition, in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.Globalenvs.html#empty">empty</a> [definition, in <a href="backend.Globalenvs.html">backend.Globalenvs</a>]<br/>
+<a href="backend.Mem.html#empty">empty</a> [definition, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#empty_block">empty_block</a> [definition, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Csharpminor.html#empty_env">empty_env</a> [definition, in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Machabstr.html#empty_frame">empty_frame</a> [definition, in <a href="backend.Machabstr.html">backend.Machabstr</a>]<br/>
+<a href="backend.InterfGraph.html#empty_graph">empty_graph</a> [definition, in <a href="backend.InterfGraph.html">backend.InterfGraph</a>]<br/>
+<a href="backend.CSE.html#empty_numbering">empty_numbering</a> [definition, in <a href="backend.CSE.html">backend.CSE</a>]<br/>
+<a href="backend.CSE.html#empty_numbering_satisfiable">empty_numbering_satisfiable</a> [lemma, in <a href="backend.CSE.html">backend.CSE</a>]<br/>
+<a href="backend.RTLtyping.html#encode">encode</a> [definition, in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.RTLtyping.html#encode_decode">encode_decode</a> [lemma, in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.RTLtyping.html#encode_injective">encode_injective</a> [lemma, in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.Csharpminor.html#Enil">Enil</a> [constructor, in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Cminor.html#Enil">Enil</a> [constructor, in <a href="backend.Cminor.html">backend.Cminor</a>]<br/>
+<a href="backend.Allocproof.html#entrypoint_function_translated">entrypoint_function_translated</a> [lemma, in <a href="backend.Allocproof.html">backend.Allocproof</a>]<br/>
+<a href="backend.Linearize.html#enumerate">enumerate</a> [definition, in <a href="backend.Linearize.html">backend.Linearize</a>]<br/>
+<a href="backend.Linearizeproof.html#enumerate_complete">enumerate_complete</a> [lemma, in <a href="backend.Linearizeproof.html">backend.Linearizeproof</a>]<br/>
+<a href="backend.Linearizeproof.html#enumerate_head">enumerate_head</a> [lemma, in <a href="backend.Linearizeproof.html">backend.Linearizeproof</a>]<br/>
+<a href="backend.Linearizeproof.html#enumerate_norepet">enumerate_norepet</a> [lemma, in <a href="backend.Linearizeproof.html">backend.Linearizeproof</a>]<br/>
+<a href="backend.Csharpminor.html#env">env</a> [definition, in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Parallelmove.html#Env">Env</a> [definition, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Cminor.html#env">env</a> [definition, in <a href="backend.Cminor.html">backend.Cminor</a>]<br/>
+<a href="backend.Csharpminor.html#Eop">Eop</a> [constructor, in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Cminor.html#Eop">Eop</a> [constructor, in <a href="backend.Cminor.html">backend.Cminor</a>]<br/>
+<a href="backend.Constprop.html#eq">eq</a> [lemma, in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Mach.html#eq">eq</a> [definition, in <a href="backend.Mach.html">backend.Mach</a>]<br/>
+<a href="lib.Ordered.html#eq">eq</a> [definition, in <a href="lib.Ordered.html">lib.Ordered</a>]<br/>
+<a href="backend.RTLtyping.html#eq">eq</a> [definition, in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="lib.Lattice.html#eq">eq</a> [lemma, in <a href="lib.Lattice.html">lib.Lattice</a>]<br/>
+<a href="lib.Sets.html#eq">eq</a> [lemma, in <a href="lib.Sets.html">lib.Sets</a>]<br/>
+<a href="backend.CSEproof.html#eq">eq</a> [definition, in <a href="backend.CSEproof.html">backend.CSEproof</a>]<br/>
+<a href="lib.Lattice.html#eq">eq</a> [lemma, in <a href="lib.Lattice.html">lib.Lattice</a>]<br/>
+<a href="lib.Lattice.html#eq">eq</a> [lemma, in <a href="lib.Lattice.html">lib.Lattice</a>]<br/>
+<a href="backend.Locations.html#eq">eq</a> [lemma, in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="lib.Maps.html#eq">eq</a> [definition, in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Maps.html#eq">eq</a> [lemma, in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="backend.Locations.html#eq">eq</a> [definition, in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="lib.Ordered.html#eq">eq</a> [definition, in <a href="lib.Ordered.html">lib.Ordered</a>]<br/>
+<a href="backend.Registers.html#eq">eq</a> [definition, in <a href="backend.Registers.html">backend.Registers</a>]<br/>
+<a href="lib.Maps.html#eq">eq</a> [lemma, in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Ordered.html#eq">eq</a> [definition, in <a href="lib.Ordered.html">lib.Ordered</a>]<br/>
+<a href="backend.PPC.html#eq">eq</a> [definition, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="lib.Integers.html#eq">eq</a> [definition, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#eqm">eqm</a> [definition, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#eqmod">eqmod</a> [definition, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#eqmod_add">eqmod_add</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#eqmod_mod">eqmod_mod</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#eqmod_mod_eq">eqmod_mod_eq</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#eqmod_mult">eqmod_mult</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#eqmod_neg">eqmod_neg</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#eqmod_refl">eqmod_refl</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#eqmod_refl2">eqmod_refl2</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#eqmod_small_eq">eqmod_small_eq</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#eqmod_sub">eqmod_sub</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#eqmod_sym">eqmod_sym</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#eqmod_trans">eqmod_trans</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#eqmod_256_unsigned_repr">eqmod_256_unsigned_repr</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#eqmod_65536_unsigned_repr">eqmod_65536_unsigned_repr</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#eqm_add">eqm_add</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#eqm_mult">eqm_mult</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#eqm_neg">eqm_neg</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#eqm_refl">eqm_refl</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#eqm_refl2">eqm_refl2</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#eqm_samerepr">eqm_samerepr</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#eqm_signed_unsigned">eqm_signed_unsigned</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#eqm_small_eq">eqm_small_eq</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#eqm_sub">eqm_sub</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#eqm_sym">eqm_sym</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#eqm_trans">eqm_trans</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#eqm_unsigned_repr">eqm_unsigned_repr</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#eqm_unsigned_repr_l">eqm_unsigned_repr_l</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#eqm_unsigned_repr_r">eqm_unsigned_repr_r</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Maps.html#EQUALITY_TYPE">EQUALITY_TYPE</a> [module, in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="backend.RTLtyping.html#equal_eq">equal_eq</a> [lemma, in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="lib.Integers.html#equal_on_range">equal_on_range</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.CSEproof.html#equation_evals_to_holds_1">equation_evals_to_holds_1</a> [lemma, in <a href="backend.CSEproof.html">backend.CSEproof</a>]<br/>
+<a href="backend.CSEproof.html#equation_evals_to_holds_2">equation_evals_to_holds_2</a> [lemma, in <a href="backend.CSEproof.html">backend.CSEproof</a>]<br/>
+<a href="backend.CSE.html#equation_holds">equation_holds</a> [definition, in <a href="backend.CSE.html">backend.CSE</a>]<br/>
+<a href="backend.Values.html#eq_block">eq_block</a> [definition, in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="lib.Integers.html#eq_dec">eq_dec</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Floats.html#eq_dec">eq_dec</a> [axiom, in <a href="lib.Floats.html">lib.Floats</a>]<br/>
+<a href="lib.Integers.html#eq_false">eq_false</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.CSE.html#eq_list_valnum">eq_list_valnum</a> [definition, in <a href="backend.CSE.html">backend.CSE</a>]<br/>
+<a href="lib.Ordered.html#eq_refl">eq_refl</a> [lemma, in <a href="lib.Ordered.html">lib.Ordered</a>]<br/>
+<a href="lib.Ordered.html#eq_refl">eq_refl</a> [lemma, in <a href="lib.Ordered.html">lib.Ordered</a>]<br/>
+<a href="lib.Ordered.html#eq_refl">eq_refl</a> [lemma, in <a href="lib.Ordered.html">lib.Ordered</a>]<br/>
+<a href="backend.CSE.html#eq_rhs">eq_rhs</a> [definition, in <a href="backend.CSE.html">backend.CSE</a>]<br/>
+<a href="lib.Integers.html#eq_spec">eq_spec</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Ordered.html#eq_sym">eq_sym</a> [lemma, in <a href="lib.Ordered.html">lib.Ordered</a>]<br/>
+<a href="lib.Ordered.html#eq_sym">eq_sym</a> [lemma, in <a href="lib.Ordered.html">lib.Ordered</a>]<br/>
+<a href="lib.Integers.html#eq_sym">eq_sym</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Ordered.html#eq_sym">eq_sym</a> [lemma, in <a href="lib.Ordered.html">lib.Ordered</a>]<br/>
+<a href="lib.Ordered.html#eq_trans">eq_trans</a> [lemma, in <a href="lib.Ordered.html">lib.Ordered</a>]<br/>
+<a href="lib.Ordered.html#eq_trans">eq_trans</a> [lemma, in <a href="lib.Ordered.html">lib.Ordered</a>]<br/>
+<a href="lib.Ordered.html#eq_trans">eq_trans</a> [lemma, in <a href="lib.Ordered.html">lib.Ordered</a>]<br/>
+<a href="lib.Integers.html#eq_true">eq_true</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.CSE.html#eq_valnum">eq_valnum</a> [definition, in <a href="backend.CSE.html">backend.CSE</a>]<br/>
+<a href="lib.Floats.html#eq_zero_false">eq_zero_false</a> [axiom, in <a href="lib.Floats.html">lib.Floats</a>]<br/>
+<a href="lib.Floats.html#eq_zero_true">eq_zero_true</a> [axiom, in <a href="lib.Floats.html">lib.Floats</a>]<br/>
+<a href="backend.RTLgen.html#Error">Error</a> [constructor, in <a href="backend.RTLgen.html">backend.RTLgen</a>]<br/>
+<a href="backend.RTLtyping.html#error">error</a> [definition, in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.RTLgen.html#error">error</a> [definition, in <a href="backend.RTLgen.html">backend.RTLgen</a>]<br/>
+<a href="backend.PPC.html#Error">Error</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.RTLtyping.html#error_inconsistent">error_inconsistent</a> [lemma, in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.Cminor.html#Estore">Estore</a> [constructor, in <a href="backend.Cminor.html">backend.Cminor</a>]<br/>
+<a href="backend.Csharpminor.html#Estore">Estore</a> [constructor, in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Cmconstrproof.html#eval_absfloat">eval_absfloat</a> [lemma, in <a href="backend.Cmconstrproof.html">backend.Cmconstrproof</a>]<br/>
+<a href="backend.Cmconstrproof.html#eval_add">eval_add</a> [lemma, in <a href="backend.Cmconstrproof.html">backend.Cmconstrproof</a>]<br/>
+<a href="backend.Cmconstrproof.html#eval_addf">eval_addf</a> [lemma, in <a href="backend.Cmconstrproof.html">backend.Cmconstrproof</a>]<br/>
+<a href="backend.Cmconstrproof.html#eval_addimm">eval_addimm</a> [lemma, in <a href="backend.Cmconstrproof.html">backend.Cmconstrproof</a>]<br/>
+<a href="backend.Cmconstrproof.html#eval_addimm_ptr">eval_addimm_ptr</a> [lemma, in <a href="backend.Cmconstrproof.html">backend.Cmconstrproof</a>]<br/>
+<a href="backend.Cmconstrproof.html#eval_addressing">eval_addressing</a> [lemma, in <a href="backend.Cmconstrproof.html">backend.Cmconstrproof</a>]<br/>
+<a href="backend.Op.html#eval_addressing">eval_addressing</a> [definition, in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Op.html#eval_addressing_preserved">eval_addressing_preserved</a> [lemma, in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Op.html#eval_addressing_total">eval_addressing_total</a> [definition, in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Op.html#eval_addressing_weaken">eval_addressing_weaken</a> [lemma, in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Cmconstrproof.html#eval_add_ptr">eval_add_ptr</a> [lemma, in <a href="backend.Cmconstrproof.html">backend.Cmconstrproof</a>]<br/>
+<a href="backend.Cmconstrproof.html#eval_add_ptr_2">eval_add_ptr_2</a> [lemma, in <a href="backend.Cmconstrproof.html">backend.Cmconstrproof</a>]<br/>
+<a href="backend.Cmconstrproof.html#eval_and">eval_and</a> [lemma, in <a href="backend.Cmconstrproof.html">backend.Cmconstrproof</a>]<br/>
+<a href="backend.Cmconstrproof.html#eval_andimm">eval_andimm</a> [lemma, in <a href="backend.Cmconstrproof.html">backend.Cmconstrproof</a>]<br/>
+<a href="backend.Cmconstrproof.html#eval_base_condition_of_expr">eval_base_condition_of_expr</a> [lemma, in <a href="backend.Cmconstrproof.html">backend.Cmconstrproof</a>]<br/>
+<a href="backend.Cmconstrproof.html#eval_cast16signed">eval_cast16signed</a> [lemma, in <a href="backend.Cmconstrproof.html">backend.Cmconstrproof</a>]<br/>
+<a href="backend.Cmconstrproof.html#eval_cast16unsigned">eval_cast16unsigned</a> [lemma, in <a href="backend.Cmconstrproof.html">backend.Cmconstrproof</a>]<br/>
+<a href="backend.Cmconstrproof.html#eval_cast8signed">eval_cast8signed</a> [lemma, in <a href="backend.Cmconstrproof.html">backend.Cmconstrproof</a>]<br/>
+<a href="backend.Cmconstrproof.html#eval_cast8unsigned">eval_cast8unsigned</a> [lemma, in <a href="backend.Cmconstrproof.html">backend.Cmconstrproof</a>]<br/>
+<a href="backend.Cmconstrproof.html#eval_cmp">eval_cmp</a> [lemma, in <a href="backend.Cmconstrproof.html">backend.Cmconstrproof</a>]<br/>
+<a href="backend.Cmconstrproof.html#eval_cmpf">eval_cmpf</a> [lemma, in <a href="backend.Cmconstrproof.html">backend.Cmconstrproof</a>]<br/>
+<a href="backend.Cmconstrproof.html#eval_cmpu">eval_cmpu</a> [lemma, in <a href="backend.Cmconstrproof.html">backend.Cmconstrproof</a>]<br/>
+<a href="backend.Cmconstrproof.html#eval_cmp_null_l">eval_cmp_null_l</a> [lemma, in <a href="backend.Cmconstrproof.html">backend.Cmconstrproof</a>]<br/>
+<a href="backend.Cmconstrproof.html#eval_cmp_null_r">eval_cmp_null_r</a> [lemma, in <a href="backend.Cmconstrproof.html">backend.Cmconstrproof</a>]<br/>
+<a href="backend.Cmconstrproof.html#eval_cmp_ptr">eval_cmp_ptr</a> [lemma, in <a href="backend.Cmconstrproof.html">backend.Cmconstrproof</a>]<br/>
+<a href="backend.Op.html#eval_compare_null">eval_compare_null</a> [definition, in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Csharpminor.html#eval_compare_null">eval_compare_null</a> [definition, in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Op.html#eval_compare_null_weaken">eval_compare_null_weaken</a> [lemma, in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Op.html#eval_condition">eval_condition</a> [definition, in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Cmconstrproof.html#eval_conditionalexpr_false">eval_conditionalexpr_false</a> [lemma, in <a href="backend.Cmconstrproof.html">backend.Cmconstrproof</a>]<br/>
+<a href="backend.Cmconstrproof.html#eval_conditionalexpr_true">eval_conditionalexpr_true</a> [lemma, in <a href="backend.Cmconstrproof.html">backend.Cmconstrproof</a>]<br/>
+<a href="backend.Cmconstrproof.html#eval_condition_of_expr">eval_condition_of_expr</a> [lemma, in <a href="backend.Cmconstrproof.html">backend.Cmconstrproof</a>]<br/>
+<a href="backend.Op.html#eval_condition_total">eval_condition_total</a> [definition, in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Op.html#eval_condition_total_is_bool">eval_condition_total_is_bool</a> [lemma, in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Op.html#eval_condition_weaken">eval_condition_weaken</a> [lemma, in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Cmconstrproof.html#eval_divf">eval_divf</a> [lemma, in <a href="backend.Cmconstrproof.html">backend.Cmconstrproof</a>]<br/>
+<a href="backend.Cmconstrproof.html#eval_divs">eval_divs</a> [lemma, in <a href="backend.Cmconstrproof.html">backend.Cmconstrproof</a>]<br/>
+<a href="backend.Cmconstrproof.html#eval_divu">eval_divu</a> [lemma, in <a href="backend.Cmconstrproof.html">backend.Cmconstrproof</a>]<br/>
+<a href="backend.Cmconstrproof.html#eval_divu_base">eval_divu_base</a> [lemma, in <a href="backend.Cmconstrproof.html">backend.Cmconstrproof</a>]<br/>
+<a href="backend.Csharpminor.html#eval_Evar">eval_Evar</a> [constructor, in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Cminor.html#eval_Evar">eval_Evar</a> [constructor, in <a href="backend.Cminor.html">backend.Cminor</a>]<br/>
+<a href="backend.Csharpminor.html#eval_expr">eval_expr</a> [inductive, in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Cminor.html#eval_expr">eval_expr</a> [inductive, in <a href="backend.Cminor.html">backend.Cminor</a>]<br/>
+<a href="backend.Cminorgenproof.html#eval_exprlist_prop">eval_exprlist_prop</a> [definition, in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.Cminorgenproof.html#eval_expr_prop">eval_expr_prop</a> [definition, in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.Cmconstrproof.html#eval_floatofint">eval_floatofint</a> [lemma, in <a href="backend.Cmconstrproof.html">backend.Cmconstrproof</a>]<br/>
+<a href="backend.Cmconstrproof.html#eval_floatofintu">eval_floatofintu</a> [lemma, in <a href="backend.Cmconstrproof.html">backend.Cmconstrproof</a>]<br/>
+<a href="backend.Cminorgenproof.html#eval_funcall_prop">eval_funcall_prop</a> [definition, in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.Cmconstrproof.html#eval_intoffloat">eval_intoffloat</a> [lemma, in <a href="backend.Cmconstrproof.html">backend.Cmconstrproof</a>]<br/>
+<a href="backend.Cmconstrproof.html#eval_lift">eval_lift</a> [lemma, in <a href="backend.Cmconstrproof.html">backend.Cmconstrproof</a>]<br/>
+<a href="backend.Cmconstrproof.html#eval_lift_expr">eval_lift_expr</a> [lemma, in <a href="backend.Cmconstrproof.html">backend.Cmconstrproof</a>]<br/>
+<a href="backend.Cmconstrproof.html#eval_load">eval_load</a> [lemma, in <a href="backend.Cmconstrproof.html">backend.Cmconstrproof</a>]<br/>
+<a href="backend.Cmconstrproof.html#eval_mods">eval_mods</a> [lemma, in <a href="backend.Cmconstrproof.html">backend.Cmconstrproof</a>]<br/>
+<a href="backend.Cmconstrproof.html#eval_modu">eval_modu</a> [lemma, in <a href="backend.Cmconstrproof.html">backend.Cmconstrproof</a>]<br/>
+<a href="backend.Cmconstrproof.html#eval_mod_aux">eval_mod_aux</a> [lemma, in <a href="backend.Cmconstrproof.html">backend.Cmconstrproof</a>]<br/>
+<a href="backend.Cmconstrproof.html#eval_mul">eval_mul</a> [lemma, in <a href="backend.Cmconstrproof.html">backend.Cmconstrproof</a>]<br/>
+<a href="backend.Cmconstrproof.html#eval_mulf">eval_mulf</a> [lemma, in <a href="backend.Cmconstrproof.html">backend.Cmconstrproof</a>]<br/>
+<a href="backend.Cmconstrproof.html#eval_mulimm">eval_mulimm</a> [lemma, in <a href="backend.Cmconstrproof.html">backend.Cmconstrproof</a>]<br/>
+<a href="backend.Cmconstrproof.html#eval_mulimm_base">eval_mulimm_base</a> [lemma, in <a href="backend.Cmconstrproof.html">backend.Cmconstrproof</a>]<br/>
+<a href="backend.Op.html#eval_negate_condition">eval_negate_condition</a> [lemma, in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Cmconstrproof.html#eval_negfloat">eval_negfloat</a> [lemma, in <a href="backend.Cmconstrproof.html">backend.Cmconstrproof</a>]<br/>
+<a href="backend.Cmconstrproof.html#eval_negint">eval_negint</a> [lemma, in <a href="backend.Cmconstrproof.html">backend.Cmconstrproof</a>]<br/>
+<a href="backend.Cmconstrproof.html#eval_notbool">eval_notbool</a> [lemma, in <a href="backend.Cmconstrproof.html">backend.Cmconstrproof</a>]<br/>
+<a href="backend.Cmconstrproof.html#eval_notbool_base">eval_notbool_base</a> [lemma, in <a href="backend.Cmconstrproof.html">backend.Cmconstrproof</a>]<br/>
+<a href="backend.Cmconstrproof.html#eval_notint">eval_notint</a> [lemma, in <a href="backend.Cmconstrproof.html">backend.Cmconstrproof</a>]<br/>
+<a href="backend.Op.html#eval_operation">eval_operation</a> [definition, in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Csharpminor.html#eval_operation">eval_operation</a> [definition, in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Op.html#eval_operation_preserved">eval_operation_preserved</a> [lemma, in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Op.html#eval_operation_total">eval_operation_total</a> [definition, in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Op.html#eval_operation_weaken">eval_operation_weaken</a> [lemma, in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Cmconstrproof.html#eval_or">eval_or</a> [lemma, in <a href="backend.Cmconstrproof.html">backend.Cmconstrproof</a>]<br/>
+<a href="backend.Cmconstrproof.html#eval_rolm">eval_rolm</a> [lemma, in <a href="backend.Cmconstrproof.html">backend.Cmconstrproof</a>]<br/>
+<a href="backend.Cmconstrproof.html#eval_shl">eval_shl</a> [lemma, in <a href="backend.Cmconstrproof.html">backend.Cmconstrproof</a>]<br/>
+<a href="backend.Cmconstrproof.html#eval_shlimm">eval_shlimm</a> [lemma, in <a href="backend.Cmconstrproof.html">backend.Cmconstrproof</a>]<br/>
+<a href="backend.Cmconstrproof.html#eval_shr">eval_shr</a> [lemma, in <a href="backend.Cmconstrproof.html">backend.Cmconstrproof</a>]<br/>
+<a href="backend.Cmconstrproof.html#eval_shru">eval_shru</a> [lemma, in <a href="backend.Cmconstrproof.html">backend.Cmconstrproof</a>]<br/>
+<a href="backend.Cmconstrproof.html#eval_shruimm">eval_shruimm</a> [lemma, in <a href="backend.Cmconstrproof.html">backend.Cmconstrproof</a>]<br/>
+<a href="backend.Cmconstrproof.html#eval_singleoffloat">eval_singleoffloat</a> [lemma, in <a href="backend.Cmconstrproof.html">backend.Cmconstrproof</a>]<br/>
+<a href="backend.Constprop.html#eval_static_condition">eval_static_condition</a> [definition, in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#eval_static_condition_cases">eval_static_condition_cases</a> [inductive, in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#eval_static_condition_case1">eval_static_condition_case1</a> [constructor, in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#eval_static_condition_case2">eval_static_condition_case2</a> [constructor, in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#eval_static_condition_case3">eval_static_condition_case3</a> [constructor, in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#eval_static_condition_case4">eval_static_condition_case4</a> [constructor, in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#eval_static_condition_case5">eval_static_condition_case5</a> [constructor, in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#eval_static_condition_case6">eval_static_condition_case6</a> [constructor, in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#eval_static_condition_case7">eval_static_condition_case7</a> [constructor, in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#eval_static_condition_case8">eval_static_condition_case8</a> [constructor, in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constpropproof.html#eval_static_condition_correct">eval_static_condition_correct</a> [lemma, in <a href="backend.Constpropproof.html">backend.Constpropproof</a>]<br/>
+<a href="backend.Constprop.html#eval_static_condition_default">eval_static_condition_default</a> [constructor, in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#eval_static_condition_match">eval_static_condition_match</a> [definition, in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#eval_static_operation">eval_static_operation</a> [definition, in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#eval_static_operation_cases">eval_static_operation_cases</a> [inductive, in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#eval_static_operation_case1">eval_static_operation_case1</a> [constructor, in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#eval_static_operation_case11">eval_static_operation_case11</a> [constructor, in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#eval_static_operation_case12">eval_static_operation_case12</a> [constructor, in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#eval_static_operation_case13">eval_static_operation_case13</a> [constructor, in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#eval_static_operation_case14">eval_static_operation_case14</a> [constructor, in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#eval_static_operation_case15">eval_static_operation_case15</a> [constructor, in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#eval_static_operation_case16">eval_static_operation_case16</a> [constructor, in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#eval_static_operation_case17">eval_static_operation_case17</a> [constructor, in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#eval_static_operation_case18">eval_static_operation_case18</a> [constructor, in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#eval_static_operation_case19">eval_static_operation_case19</a> [constructor, in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#eval_static_operation_case2">eval_static_operation_case2</a> [constructor, in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#eval_static_operation_case20">eval_static_operation_case20</a> [constructor, in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#eval_static_operation_case21">eval_static_operation_case21</a> [constructor, in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#eval_static_operation_case22">eval_static_operation_case22</a> [constructor, in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#eval_static_operation_case23">eval_static_operation_case23</a> [constructor, in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#eval_static_operation_case24">eval_static_operation_case24</a> [constructor, in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#eval_static_operation_case25">eval_static_operation_case25</a> [constructor, in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#eval_static_operation_case26">eval_static_operation_case26</a> [constructor, in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#eval_static_operation_case27">eval_static_operation_case27</a> [constructor, in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#eval_static_operation_case28">eval_static_operation_case28</a> [constructor, in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#eval_static_operation_case29">eval_static_operation_case29</a> [constructor, in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#eval_static_operation_case3">eval_static_operation_case3</a> [constructor, in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#eval_static_operation_case30">eval_static_operation_case30</a> [constructor, in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#eval_static_operation_case31">eval_static_operation_case31</a> [constructor, in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#eval_static_operation_case32">eval_static_operation_case32</a> [constructor, in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#eval_static_operation_case33">eval_static_operation_case33</a> [constructor, in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#eval_static_operation_case34">eval_static_operation_case34</a> [constructor, in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#eval_static_operation_case35">eval_static_operation_case35</a> [constructor, in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#eval_static_operation_case36">eval_static_operation_case36</a> [constructor, in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#eval_static_operation_case37">eval_static_operation_case37</a> [constructor, in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#eval_static_operation_case38">eval_static_operation_case38</a> [constructor, in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#eval_static_operation_case39">eval_static_operation_case39</a> [constructor, in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#eval_static_operation_case4">eval_static_operation_case4</a> [constructor, in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#eval_static_operation_case40">eval_static_operation_case40</a> [constructor, in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#eval_static_operation_case41">eval_static_operation_case41</a> [constructor, in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#eval_static_operation_case42">eval_static_operation_case42</a> [constructor, in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#eval_static_operation_case43">eval_static_operation_case43</a> [constructor, in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#eval_static_operation_case44">eval_static_operation_case44</a> [constructor, in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#eval_static_operation_case45">eval_static_operation_case45</a> [constructor, in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#eval_static_operation_case46">eval_static_operation_case46</a> [constructor, in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#eval_static_operation_case47">eval_static_operation_case47</a> [constructor, in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#eval_static_operation_case6">eval_static_operation_case6</a> [constructor, in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#eval_static_operation_case7">eval_static_operation_case7</a> [constructor, in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#eval_static_operation_case8">eval_static_operation_case8</a> [constructor, in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#eval_static_operation_case9">eval_static_operation_case9</a> [constructor, in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constpropproof.html#eval_static_operation_correct">eval_static_operation_correct</a> [lemma, in <a href="backend.Constpropproof.html">backend.Constpropproof</a>]<br/>
+<a href="backend.Constprop.html#eval_static_operation_default">eval_static_operation_default</a> [constructor, in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#eval_static_operation_match">eval_static_operation_match</a> [definition, in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Cmconstrproof.html#eval_store">eval_store</a> [lemma, in <a href="backend.Cmconstrproof.html">backend.Cmconstrproof</a>]<br/>
+<a href="backend.Cmconstrproof.html#eval_sub">eval_sub</a> [lemma, in <a href="backend.Cmconstrproof.html">backend.Cmconstrproof</a>]<br/>
+<a href="backend.Cmconstrproof.html#eval_subf">eval_subf</a> [lemma, in <a href="backend.Cmconstrproof.html">backend.Cmconstrproof</a>]<br/>
+<a href="backend.Cmconstrproof.html#eval_sub_ptr_int">eval_sub_ptr_int</a> [lemma, in <a href="backend.Cmconstrproof.html">backend.Cmconstrproof</a>]<br/>
+<a href="backend.Cmconstrproof.html#eval_sub_ptr_ptr">eval_sub_ptr_ptr</a> [lemma, in <a href="backend.Cmconstrproof.html">backend.Cmconstrproof</a>]<br/>
+<a href="backend.Cmconstrproof.html#eval_xor">eval_xor</a> [lemma, in <a href="backend.Cmconstrproof.html">backend.Cmconstrproof</a>]<br/>
+<a href="backend.Cminor.html#Evar">Evar</a> [constructor, in <a href="backend.Cminor.html">backend.Cminor</a>]<br/>
+<a href="backend.Csharpminor.html#Evar">Evar</a> [constructor, in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Parallelmove.html#exec">exec</a> [definition, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.LTL.html#exec_Bgetstack">exec_Bgetstack</a> [constructor, in <a href="backend.LTL.html">backend.LTL</a>]<br/>
+<a href="backend.Tunnelingproof.html#exec_blocks_Bgoto_inv">exec_blocks_Bgoto_inv</a> [lemma, in <a href="backend.Tunnelingproof.html">backend.Tunnelingproof</a>]<br/>
+<a href="backend.LTL.html#exec_blocks_extends">exec_blocks_extends</a> [lemma, in <a href="backend.LTL.html">backend.LTL</a>]<br/>
+<a href="backend.Linearizeproof.html#exec_blocks_prop">exec_blocks_prop</a> [definition, in <a href="backend.Linearizeproof.html">backend.Linearizeproof</a>]<br/>
+<a href="backend.Tunnelingproof.html#exec_blocks_prop">exec_blocks_prop</a> [definition, in <a href="backend.Tunnelingproof.html">backend.Tunnelingproof</a>]<br/>
+<a href="backend.Linearizeproof.html#exec_blocks_valid_outcome">exec_blocks_valid_outcome</a> [lemma, in <a href="backend.Linearizeproof.html">backend.Linearizeproof</a>]<br/>
+<a href="backend.Tunnelingproof.html#exec_block_Bgoto_inv">exec_block_Bgoto_inv</a> [lemma, in <a href="backend.Tunnelingproof.html">backend.Tunnelingproof</a>]<br/>
+<a href="backend.Linearizeproof.html#exec_block_prop">exec_block_prop</a> [definition, in <a href="backend.Linearizeproof.html">backend.Linearizeproof</a>]<br/>
+<a href="backend.Tunnelingproof.html#exec_block_prop">exec_block_prop</a> [definition, in <a href="backend.Tunnelingproof.html">backend.Tunnelingproof</a>]<br/>
+<a href="backend.Machabstr2mach.html#exec_function_body_prop">exec_function_body_prop</a> [definition, in <a href="backend.Machabstr2mach.html">backend.Machabstr2mach</a>]<br/>
+<a href="backend.PPCgenproof.html#exec_function_body_prop">exec_function_body_prop</a> [definition, in <a href="backend.PPCgenproof.html">backend.PPCgenproof</a>]<br/>
+<a href="backend.Machtyping.html#exec_function_body_prop">exec_function_body_prop</a> [definition, in <a href="backend.Machtyping.html">backend.Machtyping</a>]<br/>
+<a href="backend.PPCgenproof.html#exec_function_body_prop_">exec_function_body_prop_</a> [lemma, in <a href="backend.PPCgenproof.html">backend.PPCgenproof</a>]<br/>
+<a href="backend.Machabstr2mach.html#exec_function_equiv">exec_function_equiv</a> [lemma, in <a href="backend.Machabstr2mach.html">backend.Machabstr2mach</a>]<br/>
+<a href="backend.Stackingproof.html#exec_function_prop">exec_function_prop</a> [definition, in <a href="backend.Stackingproof.html">backend.Stackingproof</a>]<br/>
+<a href="backend.Machtyping.html#exec_function_prop">exec_function_prop</a> [definition, in <a href="backend.Machtyping.html">backend.Machtyping</a>]<br/>
+<a href="backend.PPCgenproof.html#exec_function_prop">exec_function_prop</a> [definition, in <a href="backend.PPCgenproof.html">backend.PPCgenproof</a>]<br/>
+<a href="backend.Constpropproof.html#exec_function_prop">exec_function_prop</a> [definition, in <a href="backend.Constpropproof.html">backend.Constpropproof</a>]<br/>
+<a href="backend.Linearizeproof.html#exec_function_prop">exec_function_prop</a> [definition, in <a href="backend.Linearizeproof.html">backend.Linearizeproof</a>]<br/>
+<a href="backend.Machabstr2mach.html#exec_function_prop">exec_function_prop</a> [definition, in <a href="backend.Machabstr2mach.html">backend.Machabstr2mach</a>]<br/>
+<a href="backend.CSEproof.html#exec_function_prop">exec_function_prop</a> [definition, in <a href="backend.CSEproof.html">backend.CSEproof</a>]<br/>
+<a href="backend.Tunnelingproof.html#exec_function_prop">exec_function_prop</a> [definition, in <a href="backend.Tunnelingproof.html">backend.Tunnelingproof</a>]<br/>
+<a href="backend.Allocproof.html#exec_function_prop">exec_function_prop</a> [definition, in <a href="backend.Allocproof.html">backend.Allocproof</a>]<br/>
+<a href="backend.PPCgenproof.html#exec_function_prop_">exec_function_prop_</a> [lemma, in <a href="backend.PPCgenproof.html">backend.PPCgenproof</a>]<br/>
+<a href="backend.RTLtyping.html#exec_function_subject_reduction">exec_function_subject_reduction</a> [definition, in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.Cmconstrproof.html#exec_ifthenelse_false">exec_ifthenelse_false</a> [lemma, in <a href="backend.Cmconstrproof.html">backend.Cmconstrproof</a>]<br/>
+<a href="backend.Cmconstrproof.html#exec_ifthenelse_true">exec_ifthenelse_true</a> [lemma, in <a href="backend.Cmconstrproof.html">backend.Cmconstrproof</a>]<br/>
+<a href="backend.RTL.html#exec_Iload">exec_Iload</a> [constructor, in <a href="backend.RTL.html">backend.RTL</a>]<br/>
+<a href="backend.RTL.html#exec_Iload'">exec_Iload'</a> [lemma, in <a href="backend.RTL.html">backend.RTL</a>]<br/>
+<a href="backend.RTL.html#exec_Inop">exec_Inop</a> [constructor, in <a href="backend.RTL.html">backend.RTL</a>]<br/>
+<a href="backend.Machabstr.html#exec_instr">exec_instr</a> [inductive, in <a href="backend.Machabstr.html">backend.Machabstr</a>]<br/>
+<a href="backend.RTL.html#exec_instr">exec_instr</a> [inductive, in <a href="backend.RTL.html">backend.RTL</a>]<br/>
+<a href="backend.LTL.html#exec_instr">exec_instr</a> [inductive, in <a href="backend.LTL.html">backend.LTL</a>]<br/>
+<a href="backend.Linear.html#exec_instr">exec_instr</a> [inductive, in <a href="backend.Linear.html">backend.Linear</a>]<br/>
+<a href="backend.Mach.html#exec_instr">exec_instr</a> [inductive, in <a href="backend.Mach.html">backend.Mach</a>]<br/>
+<a href="backend.PPC.html#exec_instr">exec_instr</a> [definition, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.Tunnelingproof.html#exec_instrs_Bgoto_inv">exec_instrs_Bgoto_inv</a> [lemma, in <a href="backend.Tunnelingproof.html">backend.Tunnelingproof</a>]<br/>
+<a href="backend.RTLgenproof1.html#exec_instrs_extends">exec_instrs_extends</a> [lemma, in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.RTLgenproof1.html#exec_instrs_extends_rec">exec_instrs_extends_rec</a> [lemma, in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.Stackingproof.html#exec_instrs_incl">exec_instrs_incl</a> [lemma, in <a href="backend.Stackingproof.html">backend.Stackingproof</a>]<br/>
+<a href="backend.PPCgenproof.html#exec_instrs_incl">exec_instrs_incl</a> [lemma, in <a href="backend.PPCgenproof.html">backend.PPCgenproof</a>]<br/>
+<a href="backend.RTLgenproof1.html#exec_instrs_incr">exec_instrs_incr</a> [lemma, in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.Machtyping.html#exec_instrs_link_invariant">exec_instrs_link_invariant</a> [lemma, in <a href="backend.Machtyping.html">backend.Machtyping</a>]<br/>
+<a href="backend.Allocproof_aux.html#exec_instrs_pmov">exec_instrs_pmov</a> [lemma, in <a href="backend.Allocproof_aux.html">backend.Allocproof_aux</a>]<br/>
+<a href="backend.RTL.html#exec_instrs_present">exec_instrs_present</a> [lemma, in <a href="backend.RTL.html">backend.RTL</a>]<br/>
+<a href="backend.Allocproof.html#exec_instrs_prop">exec_instrs_prop</a> [definition, in <a href="backend.Allocproof.html">backend.Allocproof</a>]<br/>
+<a href="backend.Tunnelingproof.html#exec_instrs_prop">exec_instrs_prop</a> [definition, in <a href="backend.Tunnelingproof.html">backend.Tunnelingproof</a>]<br/>
+<a href="backend.Machabstr2mach.html#exec_instrs_prop">exec_instrs_prop</a> [definition, in <a href="backend.Machabstr2mach.html">backend.Machabstr2mach</a>]<br/>
+<a href="backend.CSEproof.html#exec_instrs_prop">exec_instrs_prop</a> [definition, in <a href="backend.CSEproof.html">backend.CSEproof</a>]<br/>
+<a href="backend.Constpropproof.html#exec_instrs_prop">exec_instrs_prop</a> [definition, in <a href="backend.Constpropproof.html">backend.Constpropproof</a>]<br/>
+<a href="backend.Linearizeproof.html#exec_instrs_prop">exec_instrs_prop</a> [definition, in <a href="backend.Linearizeproof.html">backend.Linearizeproof</a>]<br/>
+<a href="backend.RTLgenproof1.html#exec_instr_extends">exec_instr_extends</a> [lemma, in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.RTLgenproof1.html#exec_instr_extends_rec">exec_instr_extends_rec</a> [lemma, in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.PPCgenproof.html#exec_instr_incl">exec_instr_incl</a> [lemma, in <a href="backend.PPCgenproof.html">backend.PPCgenproof</a>]<br/>
+<a href="backend.Stackingproof.html#exec_instr_incl">exec_instr_incl</a> [lemma, in <a href="backend.Stackingproof.html">backend.Stackingproof</a>]<br/>
+<a href="backend.RTLgenproof1.html#exec_instr_incr">exec_instr_incr</a> [lemma, in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.RTLgenproof1.html#exec_instr_in_s2">exec_instr_in_s2</a> [lemma, in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.Machtyping.html#exec_instr_link_invariant">exec_instr_link_invariant</a> [lemma, in <a href="backend.Machtyping.html">backend.Machtyping</a>]<br/>
+<a href="backend.RTLgenproof1.html#exec_instr_not_halt">exec_instr_not_halt</a> [lemma, in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.RTL.html#exec_instr_present">exec_instr_present</a> [lemma, in <a href="backend.RTL.html">backend.RTL</a>]<br/>
+<a href="backend.Allocproof.html#exec_instr_prop">exec_instr_prop</a> [definition, in <a href="backend.Allocproof.html">backend.Allocproof</a>]<br/>
+<a href="backend.Machabstr2mach.html#exec_instr_prop">exec_instr_prop</a> [definition, in <a href="backend.Machabstr2mach.html">backend.Machabstr2mach</a>]<br/>
+<a href="backend.Machtyping.html#exec_instr_prop">exec_instr_prop</a> [definition, in <a href="backend.Machtyping.html">backend.Machtyping</a>]<br/>
+<a href="backend.Constpropproof.html#exec_instr_prop">exec_instr_prop</a> [definition, in <a href="backend.Constpropproof.html">backend.Constpropproof</a>]<br/>
+<a href="backend.CSEproof.html#exec_instr_prop">exec_instr_prop</a> [definition, in <a href="backend.CSEproof.html">backend.CSEproof</a>]<br/>
+<a href="backend.Tunnelingproof.html#exec_instr_prop">exec_instr_prop</a> [definition, in <a href="backend.Tunnelingproof.html">backend.Tunnelingproof</a>]<br/>
+<a href="backend.Stackingproof.html#exec_instr_prop">exec_instr_prop</a> [definition, in <a href="backend.Stackingproof.html">backend.Stackingproof</a>]<br/>
+<a href="backend.Linearizeproof.html#exec_instr_prop">exec_instr_prop</a> [definition, in <a href="backend.Linearizeproof.html">backend.Linearizeproof</a>]<br/>
+<a href="backend.PPCgenproof.html#exec_instr_prop">exec_instr_prop</a> [definition, in <a href="backend.PPCgenproof.html">backend.PPCgenproof</a>]<br/>
+<a href="backend.RTLtyping.html#exec_instr_subject_reduction">exec_instr_subject_reduction</a> [definition, in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.Allocproof_aux.html#exec_instr_update">exec_instr_update</a> [lemma, in <a href="backend.Allocproof_aux.html">backend.Allocproof_aux</a>]<br/>
+<a href="backend.RTL.html#exec_Iop">exec_Iop</a> [constructor, in <a href="backend.RTL.html">backend.RTL</a>]<br/>
+<a href="backend.RTL.html#exec_Iop'">exec_Iop'</a> [lemma, in <a href="backend.RTL.html">backend.RTL</a>]<br/>
+<a href="backend.Linear.html#exec_Lgetstack">exec_Lgetstack</a> [constructor, in <a href="backend.Linear.html">backend.Linear</a>]<br/>
+<a href="backend.PPCgenproof.html#exec_Mcall_prop">exec_Mcall_prop</a> [lemma, in <a href="backend.PPCgenproof.html">backend.PPCgenproof</a>]<br/>
+<a href="backend.PPCgenproof.html#exec_Mcond_false_prop">exec_Mcond_false_prop</a> [lemma, in <a href="backend.PPCgenproof.html">backend.PPCgenproof</a>]<br/>
+<a href="backend.PPCgenproof.html#exec_Mcond_true_prop">exec_Mcond_true_prop</a> [lemma, in <a href="backend.PPCgenproof.html">backend.PPCgenproof</a>]<br/>
+<a href="backend.Mach.html#exec_Mgetparam">exec_Mgetparam</a> [constructor, in <a href="backend.Mach.html">backend.Mach</a>]<br/>
+<a href="backend.PPCgenproof.html#exec_Mgetparam_prop">exec_Mgetparam_prop</a> [lemma, in <a href="backend.PPCgenproof.html">backend.PPCgenproof</a>]<br/>
+<a href="backend.Mach.html#exec_Mgetstack">exec_Mgetstack</a> [constructor, in <a href="backend.Mach.html">backend.Mach</a>]<br/>
+<a href="backend.Machabstr.html#exec_Mgetstack">exec_Mgetstack</a> [constructor, in <a href="backend.Machabstr.html">backend.Machabstr</a>]<br/>
+<a href="backend.Stackingproof.html#exec_Mgetstack'">exec_Mgetstack'</a> [lemma, in <a href="backend.Stackingproof.html">backend.Stackingproof</a>]<br/>
+<a href="backend.PPCgenproof.html#exec_Mgetstack_prop">exec_Mgetstack_prop</a> [lemma, in <a href="backend.PPCgenproof.html">backend.PPCgenproof</a>]<br/>
+<a href="backend.PPCgenproof.html#exec_Mgoto_prop">exec_Mgoto_prop</a> [lemma, in <a href="backend.PPCgenproof.html">backend.PPCgenproof</a>]<br/>
+<a href="backend.Mach.html#exec_Mlabel">exec_Mlabel</a> [constructor, in <a href="backend.Mach.html">backend.Mach</a>]<br/>
+<a href="backend.Machabstr.html#exec_Mlabel">exec_Mlabel</a> [constructor, in <a href="backend.Machabstr.html">backend.Machabstr</a>]<br/>
+<a href="backend.PPCgenproof.html#exec_Mlabel_prop">exec_Mlabel_prop</a> [lemma, in <a href="backend.PPCgenproof.html">backend.PPCgenproof</a>]<br/>
+<a href="backend.PPCgenproof.html#exec_Mload_prop">exec_Mload_prop</a> [lemma, in <a href="backend.PPCgenproof.html">backend.PPCgenproof</a>]<br/>
+<a href="backend.PPCgenproof.html#exec_Mop_prop">exec_Mop_prop</a> [lemma, in <a href="backend.PPCgenproof.html">backend.PPCgenproof</a>]<br/>
+<a href="backend.Mach.html#exec_Msetstack">exec_Msetstack</a> [constructor, in <a href="backend.Mach.html">backend.Mach</a>]<br/>
+<a href="backend.Stackingproof.html#exec_Msetstack'">exec_Msetstack'</a> [lemma, in <a href="backend.Stackingproof.html">backend.Stackingproof</a>]<br/>
+<a href="backend.PPCgenproof.html#exec_Msetstack_prop">exec_Msetstack_prop</a> [lemma, in <a href="backend.PPCgenproof.html">backend.PPCgenproof</a>]<br/>
+<a href="backend.PPCgenproof.html#exec_Mstore_prop">exec_Mstore_prop</a> [lemma, in <a href="backend.PPCgenproof.html">backend.PPCgenproof</a>]<br/>
+<a href="backend.Machabstr.html#exec_mutual_induction">exec_mutual_induction</a> [lemma, in <a href="backend.Machabstr.html">backend.Machabstr</a>]<br/>
+<a href="backend.PPC.html#exec_one">exec_one</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPCgenproof.html#exec_one_prop">exec_one_prop</a> [lemma, in <a href="backend.PPCgenproof.html">backend.PPCgenproof</a>]<br/>
+<a href="backend.Csharpminor.html#exec_program">exec_program</a> [definition, in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.LTL.html#exec_program">exec_program</a> [definition, in <a href="backend.LTL.html">backend.LTL</a>]<br/>
+<a href="backend.Cminor.html#exec_program">exec_program</a> [definition, in <a href="backend.Cminor.html">backend.Cminor</a>]<br/>
+<a href="backend.RTL.html#exec_program">exec_program</a> [definition, in <a href="backend.RTL.html">backend.RTL</a>]<br/>
+<a href="backend.Mach.html#exec_program">exec_program</a> [definition, in <a href="backend.Mach.html">backend.Mach</a>]<br/>
+<a href="backend.Machabstr.html#exec_program">exec_program</a> [definition, in <a href="backend.Machabstr.html">backend.Machabstr</a>]<br/>
+<a href="backend.Linear.html#exec_program">exec_program</a> [definition, in <a href="backend.Linear.html">backend.Linear</a>]<br/>
+<a href="backend.PPC.html#exec_program">exec_program</a> [definition, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.Machabstr2mach.html#exec_program_equiv">exec_program_equiv</a> [lemma, in <a href="backend.Machabstr2mach.html">backend.Machabstr2mach</a>]<br/>
+<a href="backend.PPC.html#exec_refl">exec_refl</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPCgenproof.html#exec_refl_prop">exec_refl_prop</a> [lemma, in <a href="backend.PPCgenproof.html">backend.PPCgenproof</a>]<br/>
+<a href="backend.RTL.html#exec_step">exec_step</a> [lemma, in <a href="backend.RTL.html">backend.RTL</a>]<br/>
+<a href="backend.PPC.html#exec_step">exec_step</a> [inductive, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#exec_steps">exec_steps</a> [inductive, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#exec_step_intro">exec_step_intro</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.Cminorgenproof.html#exec_stmtlist_prop">exec_stmtlist_prop</a> [definition, in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.Cminorgenproof.html#exec_stmt_prop">exec_stmt_prop</a> [definition, in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.PPCgenproof1.html#exec_straight">exec_straight</a> [inductive, in <a href="backend.PPCgenproof1.html">backend.PPCgenproof1</a>]<br/>
+<a href="backend.PPCgenproof.html#exec_straight_exec_prop">exec_straight_exec_prop</a> [lemma, in <a href="backend.PPCgenproof.html">backend.PPCgenproof</a>]<br/>
+<a href="backend.PPCgenproof1.html#exec_straight_one">exec_straight_one</a> [lemma, in <a href="backend.PPCgenproof1.html">backend.PPCgenproof1</a>]<br/>
+<a href="backend.PPCgenproof1.html#exec_straight_refl">exec_straight_refl</a> [constructor, in <a href="backend.PPCgenproof1.html">backend.PPCgenproof1</a>]<br/>
+<a href="backend.PPCgenproof1.html#exec_straight_step">exec_straight_step</a> [constructor, in <a href="backend.PPCgenproof1.html">backend.PPCgenproof1</a>]<br/>
+<a href="backend.PPCgenproof.html#exec_straight_steps">exec_straight_steps</a> [lemma, in <a href="backend.PPCgenproof.html">backend.PPCgenproof</a>]<br/>
+<a href="backend.PPCgenproof.html#exec_straight_steps_1">exec_straight_steps_1</a> [lemma, in <a href="backend.PPCgenproof.html">backend.PPCgenproof</a>]<br/>
+<a href="backend.PPCgenproof.html#exec_straight_steps_2">exec_straight_steps_2</a> [lemma, in <a href="backend.PPCgenproof.html">backend.PPCgenproof</a>]<br/>
+<a href="backend.PPCgenproof1.html#exec_straight_three">exec_straight_three</a> [lemma, in <a href="backend.PPCgenproof1.html">backend.PPCgenproof1</a>]<br/>
+<a href="backend.PPCgenproof1.html#exec_straight_trans">exec_straight_trans</a> [lemma, in <a href="backend.PPCgenproof1.html">backend.PPCgenproof1</a>]<br/>
+<a href="backend.PPCgenproof1.html#exec_straight_two">exec_straight_two</a> [lemma, in <a href="backend.PPCgenproof1.html">backend.PPCgenproof1</a>]<br/>
+<a href="backend.PPC.html#exec_trans">exec_trans</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPCgenproof.html#exec_trans_prop">exec_trans_prop</a> [lemma, in <a href="backend.PPCgenproof.html">backend.PPCgenproof</a>]<br/>
+<a href="backend.Csharpminor.html#expr">expr</a> [inductive, in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Cminor.html#expr">expr</a> [inductive, in <a href="backend.Cminor.html">backend.Cminor</a>]<br/>
+<a href="backend.Csharpminor.html#exprlist">exprlist</a> [inductive, in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Cminor.html#exprlist">exprlist</a> [inductive, in <a href="backend.Cminor.html">backend.Cminor</a>]<br/>
+<a href="backend.RTLgenproof1.html#expr_condexpr_exprlist_ind">expr_condexpr_exprlist_ind</a> [lemma, in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="lib.Maps.html#exten">exten</a> [lemma, in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="backend.Mem.html#extends">extends</a> [definition, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#extends_refl">extends_refl</a> [lemma, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#extend_inject">extend_inject</a> [definition, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#extend_inject_incr">extend_inject_incr</a> [lemma, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="lib.Coqlib.html#extensionality">extensionality</a> [axiom, in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<br/><br/><a name="global_F"></a><h2>F </h2>
+<a href="backend.Globalenvs.html#find_funct">find_funct</a> [definition, in <a href="backend.Globalenvs.html">backend.Globalenvs</a>]<br/>
+<a href="backend.LTL.html#find_function">find_function</a> [definition, in <a href="backend.LTL.html">backend.LTL</a>]<br/>
+<a href="backend.Mach.html#find_function">find_function</a> [definition, in <a href="backend.Mach.html">backend.Mach</a>]<br/>
+<a href="backend.RTL.html#find_function">find_function</a> [definition, in <a href="backend.RTL.html">backend.RTL</a>]<br/>
+<a href="backend.Linear.html#find_function">find_function</a> [definition, in <a href="backend.Linear.html">backend.Linear</a>]<br/>
+<a href="backend.Allocproof.html#find_function2">find_function2</a> [definition, in <a href="backend.Allocproof.html">backend.Allocproof</a>]<br/>
+<a href="backend.Globalenvs.html#find_funct_find_funct_ptr">find_funct_find_funct_ptr</a> [lemma, in <a href="backend.Globalenvs.html">backend.Globalenvs</a>]<br/>
+<a href="backend.Globalenvs.html#find_funct_inv">find_funct_inv</a> [lemma, in <a href="backend.Globalenvs.html">backend.Globalenvs</a>]<br/>
+<a href="backend.Globalenvs.html#find_funct_prop">find_funct_prop</a> [lemma, in <a href="backend.Globalenvs.html">backend.Globalenvs</a>]<br/>
+<a href="backend.Globalenvs.html#find_funct_ptr">find_funct_ptr</a> [definition, in <a href="backend.Globalenvs.html">backend.Globalenvs</a>]<br/>
+<a href="backend.Globalenvs.html#find_funct_ptr_inv">find_funct_ptr_inv</a> [lemma, in <a href="backend.Globalenvs.html">backend.Globalenvs</a>]<br/>
+<a href="backend.Globalenvs.html#find_funct_ptr_prop">find_funct_ptr_prop</a> [lemma, in <a href="backend.Globalenvs.html">backend.Globalenvs</a>]<br/>
+<a href="backend.Globalenvs.html#find_funct_ptr_transf">find_funct_ptr_transf</a> [lemma, in <a href="backend.Globalenvs.html">backend.Globalenvs</a>]<br/>
+<a href="backend.Globalenvs.html#find_funct_ptr_transf_partial">find_funct_ptr_transf_partial</a> [lemma, in <a href="backend.Globalenvs.html">backend.Globalenvs</a>]<br/>
+<a href="backend.Globalenvs.html#find_funct_transf">find_funct_transf</a> [lemma, in <a href="backend.Globalenvs.html">backend.Globalenvs</a>]<br/>
+<a href="backend.Globalenvs.html#find_funct_transf_partial">find_funct_transf_partial</a> [lemma, in <a href="backend.Globalenvs.html">backend.Globalenvs</a>]<br/>
+<a href="backend.PPC.html#find_instr">find_instr</a> [definition, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPCgenproof.html#find_instr_in">find_instr_in</a> [lemma, in <a href="backend.PPCgenproof.html">backend.PPCgenproof</a>]<br/>
+<a href="backend.PPCgenproof.html#find_instr_tail">find_instr_tail</a> [lemma, in <a href="backend.PPCgenproof.html">backend.PPCgenproof</a>]<br/>
+<a href="backend.Mach.html#find_label">find_label</a> [definition, in <a href="backend.Mach.html">backend.Mach</a>]<br/>
+<a href="backend.PPCgenproof.html#find_label">find_label</a> [definition, in <a href="backend.PPCgenproof.html">backend.PPCgenproof</a>]<br/>
+<a href="backend.Linear.html#find_label">find_label</a> [definition, in <a href="backend.Linear.html">backend.Linear</a>]<br/>
+<a href="backend.Linearizeproof.html#find_label_cleanup_code">find_label_cleanup_code</a> [lemma, in <a href="backend.Linearizeproof.html">backend.Linearizeproof</a>]<br/>
+<a href="backend.PPCgenproof.html#find_label_goto_label">find_label_goto_label</a> [lemma, in <a href="backend.PPCgenproof.html">backend.PPCgenproof</a>]<br/>
+<a href="backend.Stackingproof.html#find_label_incl">find_label_incl</a> [lemma, in <a href="backend.Stackingproof.html">backend.Stackingproof</a>]<br/>
+<a href="backend.Linearizeproof.html#find_label_lin">find_label_lin</a> [lemma, in <a href="backend.Linearizeproof.html">backend.Linearizeproof</a>]<br/>
+<a href="backend.Linearizeproof.html#find_label_lin_block">find_label_lin_block</a> [lemma, in <a href="backend.Linearizeproof.html">backend.Linearizeproof</a>]<br/>
+<a href="backend.Linearizeproof.html#find_label_lin_rec">find_label_lin_rec</a> [lemma, in <a href="backend.Linearizeproof.html">backend.Linearizeproof</a>]<br/>
+<a href="backend.Stackingproof.html#find_label_transl_code">find_label_transl_code</a> [lemma, in <a href="backend.Stackingproof.html">backend.Stackingproof</a>]<br/>
+<a href="backend.Linearizeproof.html#find_label_unique">find_label_unique</a> [lemma, in <a href="backend.Linearizeproof.html">backend.Linearizeproof</a>]<br/>
+<a href="backend.RTLgen.html#find_letvar">find_letvar</a> [definition, in <a href="backend.RTLgen.html">backend.RTLgen</a>]<br/>
+<a href="backend.RTLgenproof1.html#find_letvar_incr">find_letvar_incr</a> [lemma, in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.RTLgenproof1.html#find_letvar_in_map">find_letvar_in_map</a> [lemma, in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.RTLgenproof1.html#find_letvar_not_mutated">find_letvar_not_mutated</a> [lemma, in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.RTLgenproof1.html#find_letvar_valid">find_letvar_valid</a> [lemma, in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.CSE.html#find_load">find_load</a> [definition, in <a href="backend.CSE.html">backend.CSE</a>]<br/>
+<a href="backend.CSEproof.html#find_load_correct">find_load_correct</a> [lemma, in <a href="backend.CSEproof.html">backend.CSEproof</a>]<br/>
+<a href="backend.CSE.html#find_op">find_op</a> [definition, in <a href="backend.CSE.html">backend.CSE</a>]<br/>
+<a href="backend.CSEproof.html#find_op_correct">find_op_correct</a> [lemma, in <a href="backend.CSEproof.html">backend.CSEproof</a>]<br/>
+<a href="backend.CSE.html#find_rhs">find_rhs</a> [definition, in <a href="backend.CSE.html">backend.CSE</a>]<br/>
+<a href="backend.CSEproof.html#find_rhs_correct">find_rhs_correct</a> [lemma, in <a href="backend.CSEproof.html">backend.CSEproof</a>]<br/>
+<a href="backend.Globalenvs.html#find_symbol">find_symbol</a> [definition, in <a href="backend.Globalenvs.html">backend.Globalenvs</a>]<br/>
+<a href="backend.Globalenvs.html#find_symbol_inv">find_symbol_inv</a> [lemma, in <a href="backend.Globalenvs.html">backend.Globalenvs</a>]<br/>
+<a href="backend.Op.html#find_symbol_offset">find_symbol_offset</a> [definition, in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Globalenvs.html#find_symbol_transf">find_symbol_transf</a> [lemma, in <a href="backend.Globalenvs.html">backend.Globalenvs</a>]<br/>
+<a href="backend.Globalenvs.html#find_symbol_transf_partial">find_symbol_transf_partial</a> [lemma, in <a href="backend.Globalenvs.html">backend.Globalenvs</a>]<br/>
+<a href="backend.CSE.html#find_valnum_rhs">find_valnum_rhs</a> [definition, in <a href="backend.CSE.html">backend.CSE</a>]<br/>
+<a href="backend.CSEproof.html#find_valnum_rhs_correct">find_valnum_rhs_correct</a> [lemma, in <a href="backend.CSEproof.html">backend.CSEproof</a>]<br/>
+<a href="backend.RTLgen.html#find_var">find_var</a> [definition, in <a href="backend.RTLgen.html">backend.RTLgen</a>]<br/>
+<a href="backend.RTLgenproof1.html#find_var_incr">find_var_incr</a> [lemma, in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.RTLgenproof1.html#find_var_in_map">find_var_in_map</a> [lemma, in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.RTLgenproof1.html#find_var_not_mutated">find_var_not_mutated</a> [lemma, in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.RTLgenproof1.html#find_var_valid">find_var_valid</a> [lemma, in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.Kildall.html#fixpoint">fixpoint</a> [definition, in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.Kildall.html#fixpoint">fixpoint</a> [definition, in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.Kildall.html#fixpoint">fixpoint</a> [definition, in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.Kildall.html#fixpoint_entry">fixpoint_entry</a> [lemma, in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.Kildall.html#fixpoint_entry">fixpoint_entry</a> [lemma, in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.Kildall.html#fixpoint_entry">fixpoint_entry</a> [lemma, in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.Kildall.html#fixpoint_incr">fixpoint_incr</a> [lemma, in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.Kildall.html#fixpoint_invariant">fixpoint_invariant</a> [lemma, in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.Kildall.html#fixpoint_solution">fixpoint_solution</a> [lemma, in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.Kildall.html#fixpoint_solution">fixpoint_solution</a> [lemma, in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.Kildall.html#fixpoint_solution">fixpoint_solution</a> [lemma, in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.Stacking.html#FI_arg">FI_arg</a> [constructor, in <a href="backend.Stacking.html">backend.Stacking</a>]<br/>
+<a href="backend.Stacking.html#FI_local">FI_local</a> [constructor, in <a href="backend.Stacking.html">backend.Stacking</a>]<br/>
+<a href="backend.Stacking.html#FI_saved_float">FI_saved_float</a> [constructor, in <a href="backend.Stacking.html">backend.Stacking</a>]<br/>
+<a href="backend.Stacking.html#FI_saved_int">FI_saved_int</a> [constructor, in <a href="backend.Stacking.html">backend.Stacking</a>]<br/>
+<a href="lib.Inclusion.html#flatten">flatten</a> [definition, in <a href="lib.Inclusion.html">lib.Inclusion</a>]<br/>
+<a href="lib.Inclusion.html#flatten_aux">flatten_aux</a> [definition, in <a href="lib.Inclusion.html">lib.Inclusion</a>]<br/>
+<a href="lib.Inclusion.html#flatten_aux_valid_A">flatten_aux_valid_A</a> [lemma, in <a href="lib.Inclusion.html">lib.Inclusion</a>]<br/>
+<a href="lib.Inclusion.html#flatten_valid_A">flatten_valid_A</a> [lemma, in <a href="lib.Inclusion.html">lib.Inclusion</a>]<br/>
+<a href="lib.Floats.html#float">float</a> [axiom, in <a href="lib.Floats.html">lib.Floats</a>]<br/>
+<a href="lib.Floats.html#Float">Float</a> [module, in <a href="lib.Floats.html">lib.Floats</a>]<br/>
+<a href="backend.PPCgen.html#floatcomp">floatcomp</a> [definition, in <a href="backend.PPCgen.html">backend.PPCgen</a>]<br/>
+<a href="backend.PPCgenproof1.html#floatcomp_correct">floatcomp_correct</a> [lemma, in <a href="backend.PPCgenproof1.html">backend.PPCgenproof1</a>]<br/>
+<a href="backend.Values.html#floatofint">floatofint</a> [definition, in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="lib.Floats.html#floatofint">floatofint</a> [axiom, in <a href="lib.Floats.html">lib.Floats</a>]<br/>
+<a href="backend.Cmconstr.html#floatofint">floatofint</a> [definition, in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Cmconstr.html#floatofintu">floatofintu</a> [definition, in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Values.html#floatofintu">floatofintu</a> [definition, in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="lib.Floats.html#floatofintu">floatofintu</a> [axiom, in <a href="lib.Floats.html">lib.Floats</a>]<br/>
+<a href="lib.Floats.html">Floats</a> [library]<br/>
+<a href="backend.Lineartyping.html#float_callee_save">float_callee_save</a> [definition, in <a href="backend.Lineartyping.html">backend.Lineartyping</a>]<br/>
+<a href="backend.Linearizetyping.html#float_callee_save_bound">float_callee_save_bound</a> [lemma, in <a href="backend.Linearizetyping.html">backend.Linearizetyping</a>]<br/>
+<a href="backend.Conventions.html#float_callee_save_norepet">float_callee_save_norepet</a> [lemma, in <a href="backend.Conventions.html">backend.Conventions</a>]<br/>
+<a href="backend.Conventions.html#float_callee_save_not_destroyed">float_callee_save_not_destroyed</a> [lemma, in <a href="backend.Conventions.html">backend.Conventions</a>]<br/>
+<a href="backend.Conventions.html#float_callee_save_regs">float_callee_save_regs</a> [definition, in <a href="backend.Conventions.html">backend.Conventions</a>]<br/>
+<a href="backend.Conventions.html#float_callee_save_type">float_callee_save_type</a> [lemma, in <a href="backend.Conventions.html">backend.Conventions</a>]<br/>
+<a href="backend.Lineartyping.html#float_local">float_local</a> [definition, in <a href="backend.Lineartyping.html">backend.Lineartyping</a>]<br/>
+<a href="backend.Linearizetyping.html#float_local_slot_bound">float_local_slot_bound</a> [lemma, in <a href="backend.Linearizetyping.html">backend.Linearizetyping</a>]<br/>
+<a href="backend.Conventions.html#float_param_regs">float_param_regs</a> [definition, in <a href="backend.Conventions.html">backend.Conventions</a>]<br/>
+<a href="backend.Csharpminor.html#fn_params_names">fn_params_names</a> [definition, in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Csharpminor.html#fn_variables">fn_variables</a> [definition, in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Csharpminor.html#fn_vars_names">fn_vars_names</a> [definition, in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="lib.Sets.html#fold">fold</a> [definition, in <a href="lib.Sets.html">lib.Sets</a>]<br/>
+<a href="lib.Maps.html#fold">fold</a> [definition, in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="backend.RTLtyping.html#fold2">fold2</a> [definition, in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="lib.Maps.html#fold_spec">fold_spec</a> [lemma, in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Sets.html#fold_spec">fold_spec</a> [lemma, in <a href="lib.Sets.html">lib.Sets</a>]<br/>
+<a href="lib.Sets.html#for_all">for_all</a> [definition, in <a href="lib.Sets.html">lib.Sets</a>]<br/>
+<a href="lib.Sets.html#for_all_spec">for_all_spec</a> [lemma, in <a href="lib.Sets.html">lib.Sets</a>]<br/>
+<a href="backend.Parallelmove.html#Fpmov_correct">Fpmov_correct</a> [lemma, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#Fpmov_correctMoves">Fpmov_correctMoves</a> [lemma, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#Fpmov_correct1">Fpmov_correct1</a> [lemma, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#Fpmov_correct2">Fpmov_correct2</a> [lemma, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#Fpmov_correct_ext">Fpmov_correct_ext</a> [lemma, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#Fpmov_correct_IT3">Fpmov_correct_IT3</a> [lemma, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#Fpmov_correct_map">Fpmov_correct_map</a> [lemma, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.PPC.html#FPR0">FPR0</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#FPR1">FPR1</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#FPR10">FPR10</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#FPR11">FPR11</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#FPR12">FPR12</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#FPR13">FPR13</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#FPR14">FPR14</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#FPR15">FPR15</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#FPR16">FPR16</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#FPR17">FPR17</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#FPR18">FPR18</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#FPR19">FPR19</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#FPR2">FPR2</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#FPR20">FPR20</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#FPR21">FPR21</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#FPR22">FPR22</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#FPR23">FPR23</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#FPR24">FPR24</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#FPR25">FPR25</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#FPR26">FPR26</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#FPR27">FPR27</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#FPR28">FPR28</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#FPR29">FPR29</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#FPR3">FPR3</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#FPR30">FPR30</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#FPR31">FPR31</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#FPR4">FPR4</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#FPR5">FPR5</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#FPR6">FPR6</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#FPR7">FPR7</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#FPR8">FPR8</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#FPR9">FPR9</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#FR">FR</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.Cminorgenproof.html#frame">frame</a> [inductive, in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.Machabstr.html#frame">frame</a> [definition, in <a href="backend.Machabstr.html">backend.Machabstr</a>]<br/>
+<a href="backend.Stacking.html#frame_env">frame_env</a> [inductive, in <a href="backend.Stacking.html">backend.Stacking</a>]<br/>
+<a href="backend.Stacking.html#frame_index">frame_index</a> [inductive, in <a href="backend.Stacking.html">backend.Stacking</a>]<br/>
+<a href="backend.Machabstr2mach.html#frame_match">frame_match</a> [inductive, in <a href="backend.Machabstr2mach.html">backend.Machabstr2mach</a>]<br/>
+<a href="backend.Machabstr2mach.html#frame_match_alloc">frame_match_alloc</a> [lemma, in <a href="backend.Machabstr2mach.html">backend.Machabstr2mach</a>]<br/>
+<a href="backend.Machabstr2mach.html#frame_match_exten">frame_match_exten</a> [lemma, in <a href="backend.Machabstr2mach.html">backend.Machabstr2mach</a>]<br/>
+<a href="backend.Machabstr2mach.html#frame_match_free">frame_match_free</a> [lemma, in <a href="backend.Machabstr2mach.html">backend.Machabstr2mach</a>]<br/>
+<a href="backend.Machabstr2mach.html#frame_match_get_slot">frame_match_get_slot</a> [lemma, in <a href="backend.Machabstr2mach.html">backend.Machabstr2mach</a>]<br/>
+<a href="backend.Machabstr2mach.html#frame_match_intro">frame_match_intro</a> [constructor, in <a href="backend.Machabstr2mach.html">backend.Machabstr2mach</a>]<br/>
+<a href="backend.Machabstr2mach.html#frame_match_load">frame_match_load</a> [lemma, in <a href="backend.Machabstr2mach.html">backend.Machabstr2mach</a>]<br/>
+<a href="backend.Machabstr2mach.html#frame_match_new">frame_match_new</a> [lemma, in <a href="backend.Machabstr2mach.html">backend.Machabstr2mach</a>]<br/>
+<a href="backend.Machabstr2mach.html#frame_match_set_slot">frame_match_set_slot</a> [lemma, in <a href="backend.Machabstr2mach.html">backend.Machabstr2mach</a>]<br/>
+<a href="backend.Machabstr2mach.html#frame_match_store">frame_match_store</a> [lemma, in <a href="backend.Machabstr2mach.html">backend.Machabstr2mach</a>]<br/>
+<a href="backend.Machabstr2mach.html#frame_match_store_ok">frame_match_store_ok</a> [lemma, in <a href="backend.Machabstr2mach.html">backend.Machabstr2mach</a>]<br/>
+<a href="backend.Machabstr2mach.html#frame_match_store_stack_other">frame_match_store_stack_other</a> [lemma, in <a href="backend.Machabstr2mach.html">backend.Machabstr2mach</a>]<br/>
+<a href="backend.Mem.html#free">free</a> [definition, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#free_empty_bounds">free_empty_bounds</a> [lemma, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#free_extends">free_extends</a> [lemma, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#free_first_inject">free_first_inject</a> [lemma, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#free_first_list_inject">free_first_list_inject</a> [lemma, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#free_inject">free_inject</a> [lemma, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#free_list">free_list</a> [definition, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#free_snd_inject">free_snd_inject</a> [lemma, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.PPC.html#freg">freg</a> [inductive, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#freg_eq">freg_eq</a> [lemma, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPCgen.html#freg_of">freg_of</a> [definition, in <a href="backend.PPCgen.html">backend.PPCgen</a>]<br/>
+<a href="backend.PPCgenproof1.html#freg_of_is_data_reg">freg_of_is_data_reg</a> [lemma, in <a href="backend.PPCgenproof1.html">backend.PPCgenproof1</a>]<br/>
+<a href="backend.PPCgenproof1.html#freg_of_not_FPR13">freg_of_not_FPR13</a> [lemma, in <a href="backend.PPCgenproof1.html">backend.PPCgenproof1</a>]<br/>
+<a href="backend.PPCgenproof1.html#freg_val">freg_val</a> [lemma, in <a href="backend.PPCgenproof1.html">backend.PPCgenproof1</a>]<br/>
+<a href="backend.Mem.html#fresh_block_alloc">fresh_block_alloc</a> [lemma, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Locations.html#FT1">FT1</a> [constructor, in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Locations.html#FT2">FT2</a> [constructor, in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Locations.html#FT3">FT3</a> [constructor, in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Mach.html#function">function</a> [inductive, in <a href="backend.Mach.html">backend.Mach</a>]<br/>
+<a href="backend.Csharpminor.html#function">function</a> [inductive, in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.RTL.html#function">function</a> [inductive, in <a href="backend.RTL.html">backend.RTL</a>]<br/>
+<a href="backend.LTL.html#function">function</a> [inductive, in <a href="backend.LTL.html">backend.LTL</a>]<br/>
+<a href="backend.Cminor.html#function">function</a> [inductive, in <a href="backend.Cminor.html">backend.Cminor</a>]<br/>
+<a href="backend.Linear.html#function">function</a> [inductive, in <a href="backend.Linear.html">backend.Linear</a>]<br/>
+<a href="backend.Globalenvs.html#functions_globalenv">functions_globalenv</a> [lemma, in <a href="backend.Globalenvs.html">backend.Globalenvs</a>]<br/>
+<a href="backend.Constpropproof.html#functions_translated">functions_translated</a> [lemma, in <a href="backend.Constpropproof.html">backend.Constpropproof</a>]<br/>
+<a href="backend.Tunnelingproof.html#functions_translated">functions_translated</a> [lemma, in <a href="backend.Tunnelingproof.html">backend.Tunnelingproof</a>]<br/>
+<a href="backend.PPCgenproof.html#functions_translated">functions_translated</a> [lemma, in <a href="backend.PPCgenproof.html">backend.PPCgenproof</a>]<br/>
+<a href="backend.Allocproof.html#functions_translated">functions_translated</a> [lemma, in <a href="backend.Allocproof.html">backend.Allocproof</a>]<br/>
+<a href="backend.Linearizeproof.html#functions_translated">functions_translated</a> [lemma, in <a href="backend.Linearizeproof.html">backend.Linearizeproof</a>]<br/>
+<a href="backend.Stackingproof.html#functions_translated">functions_translated</a> [lemma, in <a href="backend.Stackingproof.html">backend.Stackingproof</a>]<br/>
+<a href="backend.CSEproof.html#functions_translated">functions_translated</a> [lemma, in <a href="backend.CSEproof.html">backend.CSEproof</a>]<br/>
+<a href="backend.Cminorgenproof.html#functions_translated">functions_translated</a> [lemma, in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.RTLgenproof.html#functions_translated">functions_translated</a> [lemma, in <a href="backend.RTLgenproof.html">backend.RTLgenproof</a>]<br/>
+<a href="backend.PPCgenproof.html#functions_translated_no_overflow">functions_translated_no_overflow</a> [lemma, in <a href="backend.PPCgenproof.html">backend.PPCgenproof</a>]<br/>
+<a href="backend.PPCgenproof.html#functions_translated_2">functions_translated_2</a> [lemma, in <a href="backend.PPCgenproof.html">backend.PPCgenproof</a>]<br/>
+<a href="backend.Lineartyping.html#function_bounds">function_bounds</a> [definition, in <a href="backend.Lineartyping.html">backend.Lineartyping</a>]<br/>
+<a href="backend.Cminorgenproof.html#function_entry_ok">function_entry_ok</a> [lemma, in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.Linearizeproof.html#function_ptr_translated">function_ptr_translated</a> [lemma, in <a href="backend.Linearizeproof.html">backend.Linearizeproof</a>]<br/>
+<a href="backend.Allocproof.html#function_ptr_translated">function_ptr_translated</a> [lemma, in <a href="backend.Allocproof.html">backend.Allocproof</a>]<br/>
+<a href="backend.Stackingproof.html#function_ptr_translated">function_ptr_translated</a> [lemma, in <a href="backend.Stackingproof.html">backend.Stackingproof</a>]<br/>
+<a href="backend.Cminorgenproof.html#function_ptr_translated">function_ptr_translated</a> [lemma, in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.RTLgenproof.html#function_ptr_translated">function_ptr_translated</a> [lemma, in <a href="backend.RTLgenproof.html">backend.RTLgenproof</a>]<br/>
+<a href="backend.Constpropproof.html#function_ptr_translated">function_ptr_translated</a> [lemma, in <a href="backend.Constpropproof.html">backend.Constpropproof</a>]<br/>
+<a href="backend.Tunnelingproof.html#function_ptr_translated">function_ptr_translated</a> [lemma, in <a href="backend.Tunnelingproof.html">backend.Tunnelingproof</a>]<br/>
+<a href="backend.CSEproof.html#funct_ptr_translated">funct_ptr_translated</a> [lemma, in <a href="backend.CSEproof.html">backend.CSEproof</a>]<br/>
+<a href="backend.Locations.html#F1">F1</a> [constructor, in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Locations.html#F10">F10</a> [constructor, in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Locations.html#F14">F14</a> [constructor, in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Locations.html#F15">F15</a> [constructor, in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Locations.html#F16">F16</a> [constructor, in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Locations.html#F17">F17</a> [constructor, in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Locations.html#F18">F18</a> [constructor, in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Locations.html#F19">F19</a> [constructor, in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Locations.html#F2">F2</a> [constructor, in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Parallelmove.html#f2ind">f2ind</a> [lemma, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#f2ind'">f2ind'</a> [lemma, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Locations.html#F20">F20</a> [constructor, in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Locations.html#F21">F21</a> [constructor, in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Locations.html#F22">F22</a> [constructor, in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Locations.html#F23">F23</a> [constructor, in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Locations.html#F24">F24</a> [constructor, in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Locations.html#F25">F25</a> [constructor, in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Locations.html#F26">F26</a> [constructor, in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Locations.html#F27">F27</a> [constructor, in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Locations.html#F28">F28</a> [constructor, in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Locations.html#F29">F29</a> [constructor, in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Locations.html#F3">F3</a> [constructor, in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Locations.html#F30">F30</a> [constructor, in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Locations.html#F31">F31</a> [constructor, in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Locations.html#F4">F4</a> [constructor, in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Locations.html#F5">F5</a> [constructor, in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Locations.html#F6">F6</a> [constructor, in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Locations.html#F7">F7</a> [constructor, in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Locations.html#F8">F8</a> [constructor, in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Locations.html#F9">F9</a> [constructor, in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<br/><br/><a name="global_G"></a><h2>G </h2>
+<a href="lib.Maps.html#gcombine">gcombine</a> [lemma, in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Lattice.html#ge">ge</a> [definition, in <a href="lib.Lattice.html">lib.Lattice</a>]<br/>
+<a href="backend.CSE.html#ge">ge</a> [definition, in <a href="backend.CSE.html">backend.CSE</a>]<br/>
+<a href="lib.Lattice.html#ge">ge</a> [definition, in <a href="lib.Lattice.html">lib.Lattice</a>]<br/>
+<a href="backend.Constprop.html#ge">ge</a> [definition, in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="lib.Lattice.html#ge">ge</a> [definition, in <a href="lib.Lattice.html">lib.Lattice</a>]<br/>
+<a href="lib.Sets.html#ge">ge</a> [definition, in <a href="lib.Sets.html">lib.Sets</a>]<br/>
+<a href="lib.Maps.html#gempty">gempty</a> [lemma, in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="backend.Cminor.html#genv">genv</a> [definition, in <a href="backend.Cminor.html">backend.Cminor</a>]<br/>
+<a href="backend.LTL.html#genv">genv</a> [definition, in <a href="backend.LTL.html">backend.LTL</a>]<br/>
+<a href="backend.Globalenvs.html#Genv">Genv</a> [module, in <a href="backend.Globalenvs.html">backend.Globalenvs</a>]<br/>
+<a href="backend.PPC.html#genv">genv</a> [definition, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.Globalenvs.html#GENV">GENV</a> [module, in <a href="backend.Globalenvs.html">backend.Globalenvs</a>]<br/>
+<a href="backend.Csharpminor.html#genv">genv</a> [definition, in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Globalenvs.html#genv">genv</a> [inductive, in <a href="backend.Globalenvs.html">backend.Globalenvs</a>]<br/>
+<a href="backend.RTL.html#genv">genv</a> [definition, in <a href="backend.RTL.html">backend.RTL</a>]<br/>
+<a href="backend.Mach.html#genv">genv</a> [definition, in <a href="backend.Mach.html">backend.Mach</a>]<br/>
+<a href="backend.Linear.html#genv">genv</a> [definition, in <a href="backend.Linear.html">backend.Linear</a>]<br/>
+<a href="lib.Maps.html#get">get</a> [definition, in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Maps.html#get">get</a> [definition, in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Maps.html#get">get</a> [definition, in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="backend.Parallelmove.html#Get">Get</a> [definition, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Locations.html#get">get</a> [definition, in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="lib.Lattice.html#get">get</a> [definition, in <a href="lib.Lattice.html">lib.Lattice</a>]<br/>
+<a href="lib.Maps.html#get">get</a> [definition, in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="backend.Parallelmove.html#get">get</a> [definition, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.RTLtyping.html#get">get</a> [definition, in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.Parallelmove.html#getdst">getdst</a> [definition, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#getdst_add">getdst_add</a> [lemma, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#getdst_app">getdst_app</a> [lemma, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Alloctyping_aux.html#getdst_f">getdst_f</a> [lemma, in <a href="backend.Alloctyping_aux.html">backend.Alloctyping_aux</a>]<br/>
+<a href="backend.Allocproof_aux.html#getdst_lists2moves">getdst_lists2moves</a> [lemma, in <a href="backend.Allocproof_aux.html">backend.Allocproof_aux</a>]<br/>
+<a href="backend.Parallelmove.html#getdst_map">getdst_map</a> [lemma, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Mem.html#getN">getN</a> [definition, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#getN_agree">getN_agree</a> [lemma, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#getN_init">getN_init</a> [lemma, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#getN_inject">getN_inject</a> [lemma, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#getN_setN_mismatch">getN_setN_mismatch</a> [lemma, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#getN_setN_other">getN_setN_other</a> [lemma, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#getN_setN_overlap">getN_setN_overlap</a> [lemma, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#getN_setN_same">getN_setN_same</a> [lemma, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Parallelmove.html#getsrc">getsrc</a> [definition, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Allocproof_aux.html#getsrcdst_app">getsrcdst_app</a> [lemma, in <a href="backend.Allocproof_aux.html">backend.Allocproof_aux</a>]<br/>
+<a href="backend.Parallelmove.html#getsrc_add">getsrc_add</a> [lemma, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#getsrc_add1">getsrc_add1</a> [lemma, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#getsrc_app">getsrc_app</a> [lemma, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Alloctyping_aux.html#getsrc_f">getsrc_f</a> [lemma, in <a href="backend.Alloctyping_aux.html">backend.Alloctyping_aux</a>]<br/>
+<a href="backend.Parallelmove.html#getsrc_map">getsrc_map</a> [lemma, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.RTLtyping.html#get_add_1">get_add_1</a> [lemma, in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.RTLtyping.html#get_add_2">get_add_2</a> [lemma, in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="lib.Lattice.html#get_bot">get_bot</a> [lemma, in <a href="lib.Lattice.html">lib.Lattice</a>]<br/>
+<a href="backend.RTLtyping.html#get_empty">get_empty</a> [lemma, in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.Parallelmove.html#get_noWrite">get_noWrite</a> [lemma, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#get_pexec_id_noWrite">get_pexec_id_noWrite</a> [lemma, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Machabstr.html#get_slot">get_slot</a> [inductive, in <a href="backend.Machabstr.html">backend.Machabstr</a>]<br/>
+<a href="backend.Stackingproof.html#get_slot_index">get_slot_index</a> [lemma, in <a href="backend.Stackingproof.html">backend.Stackingproof</a>]<br/>
+<a href="backend.Machabstr.html#get_slot_intro">get_slot_intro</a> [constructor, in <a href="backend.Machabstr.html">backend.Machabstr</a>]<br/>
+<a href="backend.Stackingproof.html#get_slot_ok">get_slot_ok</a> [lemma, in <a href="backend.Stackingproof.html">backend.Stackingproof</a>]<br/>
+<a href="lib.Lattice.html#get_top">get_top</a> [lemma, in <a href="lib.Lattice.html">lib.Lattice</a>]<br/>
+<a href="backend.Parallelmove.html#get_update">get_update</a> [lemma, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#get_update_diff">get_update_diff</a> [lemma, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#get_update_id">get_update_id</a> [lemma, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#get_update_ndiff">get_update_ndiff</a> [lemma, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="lib.Maps.html#get_xget_h">get_xget_h</a> [lemma, in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Lattice.html#ge_bot">ge_bot</a> [lemma, in <a href="lib.Lattice.html">lib.Lattice</a>]<br/>
+<a href="lib.Lattice.html#ge_bot">ge_bot</a> [lemma, in <a href="lib.Lattice.html">lib.Lattice</a>]<br/>
+<a href="lib.Sets.html#ge_bot">ge_bot</a> [lemma, in <a href="lib.Sets.html">lib.Sets</a>]<br/>
+<a href="lib.Lattice.html#ge_bot">ge_bot</a> [lemma, in <a href="lib.Lattice.html">lib.Lattice</a>]<br/>
+<a href="backend.Constprop.html#ge_bot">ge_bot</a> [lemma, in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="lib.Lattice.html#ge_lub_left">ge_lub_left</a> [lemma, in <a href="lib.Lattice.html">lib.Lattice</a>]<br/>
+<a href="lib.Sets.html#ge_lub_left">ge_lub_left</a> [lemma, in <a href="lib.Sets.html">lib.Sets</a>]<br/>
+<a href="backend.Constprop.html#ge_lub_left">ge_lub_left</a> [lemma, in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="lib.Lattice.html#ge_lub_left">ge_lub_left</a> [lemma, in <a href="lib.Lattice.html">lib.Lattice</a>]<br/>
+<a href="lib.Lattice.html#ge_lub_left">ge_lub_left</a> [lemma, in <a href="lib.Lattice.html">lib.Lattice</a>]<br/>
+<a href="lib.Sets.html#ge_lub_right">ge_lub_right</a> [lemma, in <a href="lib.Sets.html">lib.Sets</a>]<br/>
+<a href="lib.Lattice.html#ge_refl">ge_refl</a> [lemma, in <a href="lib.Lattice.html">lib.Lattice</a>]<br/>
+<a href="lib.Sets.html#ge_refl">ge_refl</a> [lemma, in <a href="lib.Sets.html">lib.Sets</a>]<br/>
+<a href="lib.Lattice.html#ge_refl">ge_refl</a> [lemma, in <a href="lib.Lattice.html">lib.Lattice</a>]<br/>
+<a href="lib.Lattice.html#ge_refl">ge_refl</a> [lemma, in <a href="lib.Lattice.html">lib.Lattice</a>]<br/>
+<a href="backend.Constprop.html#ge_refl">ge_refl</a> [lemma, in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="lib.Lattice.html#ge_top">ge_top</a> [lemma, in <a href="lib.Lattice.html">lib.Lattice</a>]<br/>
+<a href="backend.Constprop.html#ge_top">ge_top</a> [lemma, in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="lib.Lattice.html#ge_top">ge_top</a> [lemma, in <a href="lib.Lattice.html">lib.Lattice</a>]<br/>
+<a href="lib.Lattice.html#ge_top">ge_top</a> [lemma, in <a href="lib.Lattice.html">lib.Lattice</a>]<br/>
+<a href="lib.Lattice.html#ge_trans">ge_trans</a> [lemma, in <a href="lib.Lattice.html">lib.Lattice</a>]<br/>
+<a href="backend.Constprop.html#ge_trans">ge_trans</a> [lemma, in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="lib.Sets.html#ge_trans">ge_trans</a> [lemma, in <a href="lib.Sets.html">lib.Sets</a>]<br/>
+<a href="lib.Lattice.html#ge_trans">ge_trans</a> [lemma, in <a href="lib.Lattice.html">lib.Lattice</a>]<br/>
+<a href="lib.Lattice.html#ge_trans">ge_trans</a> [lemma, in <a href="lib.Lattice.html">lib.Lattice</a>]<br/>
+<a href="lib.Maps.html#gi">gi</a> [lemma, in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Maps.html#gi">gi</a> [lemma, in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Maps.html#gi">gi</a> [lemma, in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Maps.html#gleaf">gleaf</a> [lemma, in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="backend.Globalenvs.html#globalenv">globalenv</a> [definition, in <a href="backend.Globalenvs.html">backend.Globalenvs</a>]<br/>
+<a href="backend.Globalenvs.html">Globalenvs</a> [library]<br/>
+<a href="backend.Globalenvs.html#globalenv_initmem">globalenv_initmem</a> [definition, in <a href="backend.Globalenvs.html">backend.Globalenvs</a>]<br/>
+<a href="lib.Maps.html#gmap">gmap</a> [lemma, in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Maps.html#gmap">gmap</a> [lemma, in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Maps.html#gmap">gmap</a> [lemma, in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Maps.html#gmap">gmap</a> [lemma, in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="backend.Kildall.html#good_state">good_state</a> [definition, in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.PPC.html#goto_label">goto_label</a> [definition, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#GPR0">GPR0</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#GPR1">GPR1</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#GPR10">GPR10</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#GPR11">GPR11</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#GPR12">GPR12</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#GPR13">GPR13</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#GPR14">GPR14</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#GPR15">GPR15</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#GPR16">GPR16</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#GPR17">GPR17</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#GPR18">GPR18</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#GPR19">GPR19</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#GPR2">GPR2</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#GPR20">GPR20</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#GPR21">GPR21</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#GPR22">GPR22</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#GPR23">GPR23</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#GPR24">GPR24</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#GPR25">GPR25</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#GPR26">GPR26</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#GPR27">GPR27</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#GPR28">GPR28</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#GPR29">GPR29</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#GPR3">GPR3</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#GPR30">GPR30</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#GPR31">GPR31</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#GPR4">GPR4</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#GPR5">GPR5</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#GPR6">GPR6</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#GPR7">GPR7</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#GPR8">GPR8</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#GPR9">GPR9</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#gpr_or_zero">gpr_or_zero</a> [definition, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPCgenproof1.html#gpr_or_zero_not_zero">gpr_or_zero_not_zero</a> [lemma, in <a href="backend.PPCgenproof1.html">backend.PPCgenproof1</a>]<br/>
+<a href="backend.PPCgenproof1.html#gpr_or_zero_zero">gpr_or_zero_zero</a> [lemma, in <a href="backend.PPCgenproof1.html">backend.PPCgenproof1</a>]<br/>
+<a href="backend.InterfGraph.html#graph">graph</a> [inductive, in <a href="backend.InterfGraph.html">backend.InterfGraph</a>]<br/>
+<a href="backend.Coloring.html#graph_coloring">graph_coloring</a> [axiom, in <a href="backend.Coloring.html">backend.Coloring</a>]<br/>
+<a href="backend.InterfGraph.html#graph_incl">graph_incl</a> [definition, in <a href="backend.InterfGraph.html">backend.InterfGraph</a>]<br/>
+<a href="backend.Coloringproof.html#graph_incl_refl">graph_incl_refl</a> [lemma, in <a href="backend.Coloringproof.html">backend.Coloringproof</a>]<br/>
+<a href="backend.InterfGraph.html#graph_incl_trans">graph_incl_trans</a> [lemma, in <a href="backend.InterfGraph.html">backend.InterfGraph</a>]<br/>
+<a href="lib.Maps.html#gro">gro</a> [lemma, in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Maps.html#grs">grs</a> [lemma, in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Maps.html#gsident">gsident</a> [lemma, in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Maps.html#gsident">gsident</a> [lemma, in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Maps.html#gsident">gsident</a> [lemma, in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Maps.html#gso">gso</a> [lemma, in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="backend.Locations.html#gso">gso</a> [lemma, in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="lib.Maps.html#gso">gso</a> [lemma, in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Maps.html#gso">gso</a> [lemma, in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Lattice.html#gso">gso</a> [lemma, in <a href="lib.Lattice.html">lib.Lattice</a>]<br/>
+<a href="lib.Maps.html#gso">gso</a> [lemma, in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Maps.html#gss">gss</a> [lemma, in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Maps.html#gss">gss</a> [lemma, in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="backend.Locations.html#gss">gss</a> [lemma, in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="lib.Maps.html#gss">gss</a> [lemma, in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Lattice.html#gss">gss</a> [lemma, in <a href="lib.Lattice.html">lib.Lattice</a>]<br/>
+<a href="lib.Maps.html#gss">gss</a> [lemma, in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Maps.html#gsspec">gsspec</a> [lemma, in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Maps.html#gsspec">gsspec</a> [lemma, in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Maps.html#gsspec">gsspec</a> [lemma, in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Maps.html#gsspec">gsspec</a> [lemma, in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<br/><br/><a name="global_H"></a><h2>H </h2>
+<a href="lib.Integers.html#half_modulus">half_modulus</a> [definition, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Values.html#has_type">has_type</a> [definition, in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.Values.html#has_type_list">has_type_list</a> [definition, in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.Parallelmove.html#head_but_last">head_but_last</a> [definition, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Mem.html#high_bound">high_bound</a> [definition, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#high_bound_alloc">high_bound_alloc</a> [lemma, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#high_bound_free">high_bound_free</a> [lemma, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#high_bound_store">high_bound_store</a> [lemma, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.PPC.html#high_half_signed">high_half_signed</a> [axiom, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#high_half_signed_type">high_half_signed_type</a> [axiom, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPCgenproof1.html#high_half_signed_zero">high_half_signed_zero</a> [lemma, in <a href="backend.PPCgenproof1.html">backend.PPCgenproof1</a>]<br/>
+<a href="backend.PPC.html#high_half_unsigned">high_half_unsigned</a> [axiom, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#high_half_unsigned_type">high_half_unsigned_type</a> [axiom, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPCgenproof1.html#high_half_unsigned_zero">high_half_unsigned_zero</a> [lemma, in <a href="backend.PPCgenproof1.html">backend.PPCgenproof1</a>]<br/>
+<a href="backend.PPCgen.html#high_s">high_s</a> [definition, in <a href="backend.PPCgen.html">backend.PPCgen</a>]<br/>
+<a href="backend.PPCgen.html#high_u">high_u</a> [definition, in <a href="backend.PPCgen.html">backend.PPCgen</a>]<br/>
+<br/><br/><a name="global_I"></a><h2>I </h2>
+<a href="backend.AST.html#ident">ident</a> [definition, in <a href="backend.AST.html">backend.AST</a>]<br/>
+<a href="lib.union_find.html#identify">identify</a> [definition, in <a href="lib.union_find.html">lib.union_find</a>]<br/>
+<a href="lib.union_find.html#identify_aux_decomp">identify_aux_decomp</a> [lemma, in <a href="lib.union_find.html">lib.union_find</a>]<br/>
+<a href="lib.union_find.html#identify_base">identify_base</a> [definition, in <a href="lib.union_find.html">lib.union_find</a>]<br/>
+<a href="lib.union_find.html#identify_base_a_maps_to_b">identify_base_a_maps_to_b</a> [lemma, in <a href="lib.union_find.html">lib.union_find</a>]<br/>
+<a href="lib.union_find.html#identify_base_b_canon">identify_base_b_canon</a> [lemma, in <a href="lib.union_find.html">lib.union_find</a>]<br/>
+<a href="lib.union_find.html#identify_base_order_wf">identify_base_order_wf</a> [lemma, in <a href="lib.union_find.html">lib.union_find</a>]<br/>
+<a href="lib.union_find.html#identify_base_repr">identify_base_repr</a> [lemma, in <a href="lib.union_find.html">lib.union_find</a>]<br/>
+<a href="lib.union_find.html#identify_base_repr_order">identify_base_repr_order</a> [lemma, in <a href="lib.union_find.html">lib.union_find</a>]<br/>
+<a href="lib.union_find.html#identify_base_sameclass_1">identify_base_sameclass_1</a> [lemma, in <a href="lib.union_find.html">lib.union_find</a>]<br/>
+<a href="lib.union_find.html#identify_base_sameclass_2">identify_base_sameclass_2</a> [lemma, in <a href="lib.union_find.html">lib.union_find</a>]<br/>
+<a href="backend.Cminorgen.html#Identset">Identset</a> [module, in <a href="backend.Cminorgen.html">backend.Cminorgen</a>]<br/>
+<a href="backend.AST.html#ident_eq">ident_eq</a> [definition, in <a href="backend.AST.html">backend.AST</a>]<br/>
+<a href="backend.Cmconstr.html#ifthenelse">ifthenelse</a> [definition, in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="lib.Maps.html#IMap">IMap</a> [module, in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="backend.PPC.html#immediate">immediate</a> [inductive, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#immediate">immediate</a> [inductive, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#immediate">immediate</a> [inductive, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#immediate">immediate</a> [inductive, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#immediate">immediate</a> [inductive, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#immediate">immediate</a> [inductive, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.RTLtyping.html#included">included</a> [definition, in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.RTLtyping.html#included_consistent">included_consistent</a> [lemma, in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.RTLtyping.html#included_identify">included_identify</a> [lemma, in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.RTLtyping.html#included_mapped">included_mapped</a> [lemma, in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.RTLtyping.html#included_mapped_forall">included_mapped_forall</a> [lemma, in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.RTLtyping.html#included_refl">included_refl</a> [lemma, in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.RTLtyping.html#included_trans">included_trans</a> [lemma, in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="lib.Inclusion.html">Inclusion</a> [library]<br/>
+<a href="lib.Inclusion.html#inclusion_theorem">inclusion_theorem</a> [lemma, in <a href="lib.Inclusion.html">lib.Inclusion</a>]<br/>
+<a href="lib.Coqlib.html#incl_app_inv_l">incl_app_inv_l</a> [lemma, in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="lib.Coqlib.html#incl_app_inv_r">incl_app_inv_r</a> [lemma, in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="lib.Coqlib.html#incl_cons_inv">incl_cons_inv</a> [lemma, in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="backend.Alloctyping_aux.html#incl_dst">incl_dst</a> [lemma, in <a href="backend.Alloctyping_aux.html">backend.Alloctyping_aux</a>]<br/>
+<a href="backend.Machtyping.html#incl_find_label">incl_find_label</a> [lemma, in <a href="backend.Machtyping.html">backend.Machtyping</a>]<br/>
+<a href="backend.Alloctyping_aux.html#incl_nil">incl_nil</a> [lemma, in <a href="backend.Alloctyping_aux.html">backend.Alloctyping_aux</a>]<br/>
+<a href="lib.Coqlib.html#incl_same_head">incl_same_head</a> [lemma, in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="backend.Alloctyping_aux.html#incl_src">incl_src</a> [lemma, in <a href="backend.Alloctyping_aux.html">backend.Alloctyping_aux</a>]<br/>
+<a href="backend.Locations.html#Incoming">Incoming</a> [constructor, in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.LTLtyping.html#Incoming">Incoming</a> [inductive, in <a href="backend.LTLtyping.html">backend.LTLtyping</a>]<br/>
+<a href="backend.Lineartyping.html#Incoming">Incoming</a> [inductive, in <a href="backend.Lineartyping.html">backend.Lineartyping</a>]<br/>
+<a href="backend.Locations.html#index">index</a> [definition, in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="lib.Maps.html#index">index</a> [definition, in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Maps.html#index">index</a> [definition, in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="backend.Locations.html#IndexedMreg">IndexedMreg</a> [module, in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="lib.Maps.html#INDEXED_TYPE">INDEXED_TYPE</a> [module, in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="backend.Stackingproof.html#index_arg_valid">index_arg_valid</a> [lemma, in <a href="backend.Stackingproof.html">backend.Stackingproof</a>]<br/>
+<a href="backend.Stackingproof.html#index_diff">index_diff</a> [definition, in <a href="backend.Stackingproof.html">backend.Stackingproof</a>]<br/>
+<a href="backend.Conventions.html#index_float_callee_save">index_float_callee_save</a> [definition, in <a href="backend.Conventions.html">backend.Conventions</a>]<br/>
+<a href="backend.Conventions.html#index_float_callee_save_inj">index_float_callee_save_inj</a> [lemma, in <a href="backend.Conventions.html">backend.Conventions</a>]<br/>
+<a href="backend.Conventions.html#index_float_callee_save_pos">index_float_callee_save_pos</a> [lemma, in <a href="backend.Conventions.html">backend.Conventions</a>]<br/>
+<a href="backend.Conventions.html#index_float_callee_save_pos2">index_float_callee_save_pos2</a> [lemma, in <a href="backend.Conventions.html">backend.Conventions</a>]<br/>
+<a href="lib.Maps.html#index_inj">index_inj</a> [lemma, in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="backend.Locations.html#index_inj">index_inj</a> [lemma, in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="lib.Maps.html#index_inj">index_inj</a> [lemma, in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="backend.Conventions.html#index_int_callee_save">index_int_callee_save</a> [definition, in <a href="backend.Conventions.html">backend.Conventions</a>]<br/>
+<a href="backend.Conventions.html#index_int_callee_save_inj">index_int_callee_save_inj</a> [lemma, in <a href="backend.Conventions.html">backend.Conventions</a>]<br/>
+<a href="backend.Conventions.html#index_int_callee_save_pos">index_int_callee_save_pos</a> [lemma, in <a href="backend.Conventions.html">backend.Conventions</a>]<br/>
+<a href="backend.Conventions.html#index_int_callee_save_pos2">index_int_callee_save_pos2</a> [lemma, in <a href="backend.Conventions.html">backend.Conventions</a>]<br/>
+<a href="backend.Stackingproof.html#index_local_valid">index_local_valid</a> [lemma, in <a href="backend.Stackingproof.html">backend.Stackingproof</a>]<br/>
+<a href="backend.Stackingproof.html#index_saved_float_valid">index_saved_float_valid</a> [lemma, in <a href="backend.Stackingproof.html">backend.Stackingproof</a>]<br/>
+<a href="backend.Stackingproof.html#index_saved_int_valid">index_saved_int_valid</a> [lemma, in <a href="backend.Stackingproof.html">backend.Stackingproof</a>]<br/>
+<a href="backend.Stackingproof.html#index_val">index_val</a> [definition, in <a href="backend.Stackingproof.html">backend.Stackingproof</a>]<br/>
+<a href="backend.Stackingproof.html#index_valid">index_valid</a> [definition, in <a href="backend.Stackingproof.html">backend.Stackingproof</a>]<br/>
+<a href="backend.Stackingproof.html#index_val_init_frame">index_val_init_frame</a> [lemma, in <a href="backend.Stackingproof.html">backend.Stackingproof</a>]<br/>
+<a href="backend.Parallelmove.html#Indst_noOverlap_aux">Indst_noOverlap_aux</a> [lemma, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#Ingetsrc_swap">Ingetsrc_swap</a> [lemma, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#Ingetsrc_swap2">Ingetsrc_swap2</a> [lemma, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="lib.Maps.html#init">init</a> [definition, in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="backend.Locations.html#init">init</a> [definition, in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="lib.Maps.html#init">init</a> [definition, in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Maps.html#init">init</a> [definition, in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="backend.Kildall.html#initial_state_invariant">initial_state_invariant</a> [lemma, in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.Globalenvs.html#initmem_nullptr">initmem_nullptr</a> [lemma, in <a href="backend.Globalenvs.html">backend.Globalenvs</a>]<br/>
+<a href="backend.Globalenvs.html#initmem_undef">initmem_undef</a> [lemma, in <a href="backend.Globalenvs.html">backend.Globalenvs</a>]<br/>
+<a href="backend.Machabstr.html#init_frame">init_frame</a> [definition, in <a href="backend.Machabstr.html">backend.Machabstr</a>]<br/>
+<a href="backend.RTLgen.html#init_mapping">init_mapping</a> [definition, in <a href="backend.RTLgen.html">backend.RTLgen</a>]<br/>
+<a href="backend.RTLgenproof1.html#init_mapping_wf">init_mapping_wf</a> [lemma, in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.Globalenvs.html#init_mem">init_mem</a> [definition, in <a href="backend.Globalenvs.html">backend.Globalenvs</a>]<br/>
+<a href="backend.Globalenvs.html#init_mem_transf">init_mem_transf</a> [lemma, in <a href="backend.Globalenvs.html">backend.Globalenvs</a>]<br/>
+<a href="backend.Globalenvs.html#init_mem_transf_partial">init_mem_transf_partial</a> [lemma, in <a href="backend.Globalenvs.html">backend.Globalenvs</a>]<br/>
+<a href="backend.RTL.html#init_regs">init_regs</a> [definition, in <a href="backend.RTL.html">backend.RTL</a>]<br/>
+<a href="backend.RTLgen.html#init_state">init_state</a> [definition, in <a href="backend.RTLgen.html">backend.RTLgen</a>]<br/>
+<a href="backend.RTLgen.html#init_state_wf">init_state_wf</a> [lemma, in <a href="backend.RTLgen.html">backend.RTLgen</a>]<br/>
+<a href="lib.Lattice.html#Inj">Inj</a> [constructor, in <a href="lib.Lattice.html">lib.Lattice</a>]<br/>
+<a href="backend.Mem.html#inject_incr">inject_incr</a> [definition, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#inject_incr_refl">inject_incr_refl</a> [lemma, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#inject_incr_trans">inject_incr_trans</a> [lemma, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.RTL.html#Inop">Inop</a> [constructor, in <a href="backend.RTL.html">backend.RTL</a>]<br/>
+<a href="lib.Inclusion.html#insert_bin">insert_bin</a> [definition, in <a href="lib.Inclusion.html">lib.Inclusion</a>]<br/>
+<a href="lib.Inclusion.html#insert_bin_included">insert_bin_included</a> [lemma, in <a href="lib.Inclusion.html">lib.Inclusion</a>]<br/>
+<a href="backend.Cmconstrproof.html#insert_lenv">insert_lenv</a> [inductive, in <a href="backend.Cmconstrproof.html">backend.Cmconstrproof</a>]<br/>
+<a href="backend.Cmconstrproof.html#insert_lenv_lookup1">insert_lenv_lookup1</a> [lemma, in <a href="backend.Cmconstrproof.html">backend.Cmconstrproof</a>]<br/>
+<a href="backend.Cmconstrproof.html#insert_lenv_lookup2">insert_lenv_lookup2</a> [lemma, in <a href="backend.Cmconstrproof.html">backend.Cmconstrproof</a>]<br/>
+<a href="backend.Cmconstrproof.html#insert_lenv_S">insert_lenv_S</a> [constructor, in <a href="backend.Cmconstrproof.html">backend.Cmconstrproof</a>]<br/>
+<a href="backend.Cmconstrproof.html#insert_lenv_0">insert_lenv_0</a> [constructor, in <a href="backend.Cmconstrproof.html">backend.Cmconstrproof</a>]<br/>
+<a href="backend.Linear.html#instruction">instruction</a> [inductive, in <a href="backend.Linear.html">backend.Linear</a>]<br/>
+<a href="backend.PPC.html#instruction">instruction</a> [inductive, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.RTL.html#instruction">instruction</a> [inductive, in <a href="backend.RTL.html">backend.RTL</a>]<br/>
+<a href="backend.Mach.html#instruction">instruction</a> [inductive, in <a href="backend.Mach.html">backend.Mach</a>]<br/>
+<a href="backend.RTLgenproof1.html#instr_at_incr">instr_at_incr</a> [lemma, in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="lib.Integers.html#int">int</a> [inductive, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#Int">Int</a> [module, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html">Integers</a> [library]<br/>
+<a href="backend.InterfGraph.html#interfere">interfere</a> [definition, in <a href="backend.InterfGraph.html">backend.InterfGraph</a>]<br/>
+<a href="backend.Coloringproof.html#interfere_incl">interfere_incl</a> [lemma, in <a href="backend.Coloringproof.html">backend.Coloringproof</a>]<br/>
+<a href="backend.InterfGraph.html#interfere_mreg">interfere_mreg</a> [definition, in <a href="backend.InterfGraph.html">backend.InterfGraph</a>]<br/>
+<a href="backend.Coloringproof.html#interfere_mreg_incl">interfere_mreg_incl</a> [lemma, in <a href="backend.Coloringproof.html">backend.Coloringproof</a>]<br/>
+<a href="backend.InterfGraph.html#interfere_sym">interfere_sym</a> [lemma, in <a href="backend.InterfGraph.html">backend.InterfGraph</a>]<br/>
+<a href="backend.InterfGraph.html">InterfGraph</a> [library]<br/>
+<a href="backend.Coloring.html#interf_graph">interf_graph</a> [definition, in <a href="backend.Coloring.html">backend.Coloring</a>]<br/>
+<a href="backend.Coloringproof.html#interf_graph_correct_1">interf_graph_correct_1</a> [lemma, in <a href="backend.Coloringproof.html">backend.Coloringproof</a>]<br/>
+<a href="backend.Coloringproof.html#interf_graph_correct_2">interf_graph_correct_2</a> [lemma, in <a href="backend.Coloringproof.html">backend.Coloringproof</a>]<br/>
+<a href="backend.Coloringproof.html#interf_graph_correct_3">interf_graph_correct_3</a> [lemma, in <a href="backend.Coloringproof.html">backend.Coloringproof</a>]<br/>
+<a href="backend.Cmconstr.html#intoffloat">intoffloat</a> [definition, in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="lib.Floats.html#intoffloat">intoffloat</a> [axiom, in <a href="lib.Floats.html">lib.Floats</a>]<br/>
+<a href="backend.Values.html#intoffloat">intoffloat</a> [definition, in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.Constprop.html#intval">intval</a> [definition, in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constpropproof.html#intval_correct">intval_correct</a> [lemma, in <a href="backend.Constpropproof.html">backend.Constpropproof</a>]<br/>
+<a href="backend.Machabstr2mach.html#int_add_no_overflow">int_add_no_overflow</a> [lemma, in <a href="backend.Machabstr2mach.html">backend.Machabstr2mach</a>]<br/>
+<a href="backend.Lineartyping.html#int_callee_save">int_callee_save</a> [definition, in <a href="backend.Lineartyping.html">backend.Lineartyping</a>]<br/>
+<a href="backend.Linearizetyping.html#int_callee_save_bound">int_callee_save_bound</a> [lemma, in <a href="backend.Linearizetyping.html">backend.Linearizetyping</a>]<br/>
+<a href="backend.Conventions.html#int_callee_save_norepet">int_callee_save_norepet</a> [lemma, in <a href="backend.Conventions.html">backend.Conventions</a>]<br/>
+<a href="backend.Conventions.html#int_callee_save_not_destroyed">int_callee_save_not_destroyed</a> [lemma, in <a href="backend.Conventions.html">backend.Conventions</a>]<br/>
+<a href="backend.Conventions.html#int_callee_save_regs">int_callee_save_regs</a> [definition, in <a href="backend.Conventions.html">backend.Conventions</a>]<br/>
+<a href="backend.Conventions.html#int_callee_save_type">int_callee_save_type</a> [lemma, in <a href="backend.Conventions.html">backend.Conventions</a>]<br/>
+<a href="backend.Conventions.html#int_float_callee_save_disjoint">int_float_callee_save_disjoint</a> [lemma, in <a href="backend.Conventions.html">backend.Conventions</a>]<br/>
+<a href="backend.Lineartyping.html#int_local">int_local</a> [definition, in <a href="backend.Lineartyping.html">backend.Lineartyping</a>]<br/>
+<a href="backend.Linearizetyping.html#int_local_slot_bound">int_local_slot_bound</a> [lemma, in <a href="backend.Linearizetyping.html">backend.Linearizetyping</a>]<br/>
+<a href="lib.Integers.html#int_of_one_bits">int_of_one_bits</a> [definition, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Conventions.html#int_param_regs">int_param_regs</a> [definition, in <a href="backend.Conventions.html">backend.Conventions</a>]<br/>
+<a href="backend.Cmconstrproof.html#inv_eval_Eop_0">inv_eval_Eop_0</a> [lemma, in <a href="backend.Cmconstrproof.html">backend.Cmconstrproof</a>]<br/>
+<a href="backend.Cmconstrproof.html#inv_eval_Eop_1">inv_eval_Eop_1</a> [lemma, in <a href="backend.Cmconstrproof.html">backend.Cmconstrproof</a>]<br/>
+<a href="backend.Cmconstrproof.html#inv_eval_Eop_2">inv_eval_Eop_2</a> [lemma, in <a href="backend.Cmconstrproof.html">backend.Cmconstrproof</a>]<br/>
+<a href="backend.Mem.html#in_bounds">in_bounds</a> [definition, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#in_bounds_exten">in_bounds_exten</a> [lemma, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#in_bounds_holds">in_bounds_holds</a> [lemma, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#in_bounds_inject">in_bounds_inject</a> [lemma, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Allocproof_aux.html#in_cons_noteq">in_cons_noteq</a> [lemma, in <a href="backend.Allocproof_aux.html">backend.Allocproof_aux</a>]<br/>
+<a href="backend.Kildall.html#in_incr">in_incr</a> [definition, in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.Kildall.html#in_incr_refl">in_incr_refl</a> [lemma, in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.Kildall.html#in_incr_trans">in_incr_trans</a> [lemma, in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.Parallelmove.html#In_Indst">In_Indst</a> [lemma, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Alloctyping_aux.html#in_move__in_srcdst">in_move__in_srcdst</a> [lemma, in <a href="backend.Alloctyping_aux.html">backend.Alloctyping_aux</a>]<br/>
+<a href="backend.Allocproof_aux.html#In_norepet">In_norepet</a> [lemma, in <a href="backend.Allocproof_aux.html">backend.Allocproof_aux</a>]<br/>
+<a href="backend.Locations.html#in_notin_diff">in_notin_diff</a> [lemma, in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Parallelmove.html#In_noTmp_notempo">In_noTmp_notempo</a> [lemma, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="lib.Inclusion.html#in_or_insert_bin">in_or_insert_bin</a> [lemma, in <a href="lib.Inclusion.html">lib.Inclusion</a>]<br/>
+<a href="backend.Machabstr2mach.html#in_or_notin_callstack">in_or_notin_callstack</a> [lemma, in <a href="backend.Machabstr2mach.html">backend.Machabstr2mach</a>]<br/>
+<a href="lib.Inclusion.html#In_permute_app_head">In_permute_app_head</a> [lemma, in <a href="lib.Inclusion.html">lib.Inclusion</a>]<br/>
+<a href="lib.Integers.html#in_range">in_range</a> [definition, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#in_range_range">in_range_range</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Inclusion.html#in_remove_head">in_remove_head</a> [lemma, in <a href="lib.Inclusion.html">lib.Inclusion</a>]<br/>
+<a href="backend.Parallelmove.html#In_SD_diff">In_SD_diff</a> [lemma, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#In_SD_diff'">In_SD_diff'</a> [lemma, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#In_SD_no_o">In_SD_no_o</a> [lemma, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Alloctyping_aux.html#in_split_move">in_split_move</a> [lemma, in <a href="backend.Alloctyping_aux.html">backend.Alloctyping_aux</a>]<br/>
+<a href="lib.Maps.html#in_xelements">in_xelements</a> [lemma, in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Maps.html#in_xkeys">in_xkeys</a> [lemma, in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="backend.PPC.html#IR">IR</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#ireg">ireg</a> [inductive, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#ireg_eq">ireg_eq</a> [lemma, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPCgen.html#ireg_of">ireg_of</a> [definition, in <a href="backend.PPCgen.html">backend.PPCgen</a>]<br/>
+<a href="backend.PPCgenproof1.html#ireg_of_is_data_reg">ireg_of_is_data_reg</a> [lemma, in <a href="backend.PPCgenproof1.html">backend.PPCgenproof1</a>]<br/>
+<a href="backend.PPCgenproof1.html#ireg_of_not_GPR1">ireg_of_not_GPR1</a> [lemma, in <a href="backend.PPCgenproof1.html">backend.PPCgenproof1</a>]<br/>
+<a href="backend.PPCgenproof1.html#ireg_of_not_GPR2">ireg_of_not_GPR2</a> [lemma, in <a href="backend.PPCgenproof1.html">backend.PPCgenproof1</a>]<br/>
+<a href="backend.PPCgenproof1.html#ireg_val">ireg_val</a> [lemma, in <a href="backend.PPCgenproof1.html">backend.PPCgenproof1</a>]<br/>
+<a href="backend.Values.html#isfalse_not_istrue">isfalse_not_istrue</a> [lemma, in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.Values.html#istrue_not_isfalse">istrue_not_isfalse</a> [lemma, in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.Kildall.html#is_basic_block_head">is_basic_block_head</a> [definition, in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.Values.html#is_bool">is_bool</a> [definition, in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.PPCgenproof1.html#is_data_reg">is_data_reg</a> [definition, in <a href="backend.PPCgenproof1.html">backend.PPCgenproof1</a>]<br/>
+<a href="lib.Integers.html#is_false">is_false</a> [definition, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Values.html#is_false">is_false</a> [definition, in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.Tunneling.html#is_goto_block">is_goto_block</a> [definition, in <a href="backend.Tunneling.html">backend.Tunneling</a>]<br/>
+<a href="backend.Tunnelingproof.html#is_goto_block_correct">is_goto_block_correct</a> [lemma, in <a href="backend.Tunnelingproof.html">backend.Tunnelingproof</a>]<br/>
+<a href="backend.PPC.html#is_label">is_label</a> [definition, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.Mach.html#is_label">is_label</a> [definition, in <a href="backend.Mach.html">backend.Mach</a>]<br/>
+<a href="backend.Linear.html#is_label">is_label</a> [definition, in <a href="backend.Linear.html">backend.Linear</a>]<br/>
+<a href="backend.PPC.html#is_label_correct">is_label_correct</a> [lemma, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.Mach.html#is_label_correct">is_label_correct</a> [lemma, in <a href="backend.Mach.html">backend.Mach</a>]<br/>
+<a href="backend.Linear.html#is_label_correct">is_label_correct</a> [lemma, in <a href="backend.Linear.html">backend.Linear</a>]<br/>
+<a href="backend.Op.html#is_move_operation">is_move_operation</a> [definition, in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Op.html#is_move_operation_correct">is_move_operation_correct</a> [lemma, in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="lib.Integers.html#is_power2">is_power2</a> [definition, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#is_power2_correct">is_power2_correct</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#is_power2_range">is_power2_range</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#is_power2_rng">is_power2_rng</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#is_rlw_mask">is_rlw_mask</a> [definition, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#is_rlw_mask_rec">is_rlw_mask_rec</a> [definition, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Linearizeproof.html#is_tail">is_tail</a> [inductive, in <a href="backend.Linearizeproof.html">backend.Linearizeproof</a>]<br/>
+<a href="backend.Linearizeproof.html#is_tail_cons">is_tail_cons</a> [constructor, in <a href="backend.Linearizeproof.html">backend.Linearizeproof</a>]<br/>
+<a href="backend.Linearizeproof.html#is_tail_cons_left">is_tail_cons_left</a> [lemma, in <a href="backend.Linearizeproof.html">backend.Linearizeproof</a>]<br/>
+<a href="backend.Linearizeproof.html#is_tail_exec_instr">is_tail_exec_instr</a> [lemma, in <a href="backend.Linearizeproof.html">backend.Linearizeproof</a>]<br/>
+<a href="backend.Linearizeproof.html#is_tail_exec_instrs">is_tail_exec_instrs</a> [lemma, in <a href="backend.Linearizeproof.html">backend.Linearizeproof</a>]<br/>
+<a href="backend.Linearizeproof.html#is_tail_find_label">is_tail_find_label</a> [lemma, in <a href="backend.Linearizeproof.html">backend.Linearizeproof</a>]<br/>
+<a href="backend.Linearizeproof.html#is_tail_in">is_tail_in</a> [lemma, in <a href="backend.Linearizeproof.html">backend.Linearizeproof</a>]<br/>
+<a href="backend.Linearizeproof.html#is_tail_refl">is_tail_refl</a> [constructor, in <a href="backend.Linearizeproof.html">backend.Linearizeproof</a>]<br/>
+<a href="backend.CSE.html#is_trivial_op">is_trivial_op</a> [definition, in <a href="backend.CSE.html">backend.CSE</a>]<br/>
+<a href="lib.Integers.html#is_true">is_true</a> [definition, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Values.html#is_true">is_true</a> [definition, in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.Kildall.html#iterate">iterate</a> [definition, in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.Kildall.html#iterate_base">iterate_base</a> [lemma, in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.Kildall.html#iterate_incr">iterate_incr</a> [lemma, in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.Kildall.html#iterate_solution">iterate_solution</a> [lemma, in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.Kildall.html#iterate_step">iterate_step</a> [lemma, in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.Kildall.html#iter_step">iter_step</a> [definition, in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.Locations.html#IT1">IT1</a> [constructor, in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Locations.html#IT2">IT2</a> [constructor, in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Locations.html#IT3">IT3</a> [constructor, in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<br/><br/><a name="global_K"></a><h2>K </h2>
+<a href="backend.Kildall.html">Kildall</a> [library]<br/>
+<a href="backend.CSE.html#kill_loads">kill_loads</a> [definition, in <a href="backend.CSE.html">backend.CSE</a>]<br/>
+<a href="backend.CSE.html#kill_load_eqs">kill_load_eqs</a> [definition, in <a href="backend.CSE.html">backend.CSE</a>]<br/>
+<a href="backend.CSEproof.html#kill_load_eqs_incl">kill_load_eqs_incl</a> [lemma, in <a href="backend.CSEproof.html">backend.CSEproof</a>]<br/>
+<a href="backend.CSEproof.html#kill_load_eqs_ops">kill_load_eqs_ops</a> [lemma, in <a href="backend.CSEproof.html">backend.CSEproof</a>]<br/>
+<a href="backend.CSEproof.html#kill_load_satisfiable">kill_load_satisfiable</a> [lemma, in <a href="backend.CSEproof.html">backend.CSEproof</a>]<br/>
+<br/><br/><a name="global_L"></a><h2>L </h2>
+<a href="backend.Kildall.html#L">L</a> [module, in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.Kildall.html#L">L</a> [module, in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.Kildall.html#L">L</a> [module, in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.Kildall.html#L">L</a> [module, in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.Kildall.html#L">L</a> [module, in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.Kildall.html#L">L</a> [module, in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.Kildall.html#L">L</a> [module, in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.Kildall.html#L">L</a> [module, in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.Kildall.html#L">L</a> [module, in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.Linear.html#label">label</a> [definition, in <a href="backend.Linear.html">backend.Linear</a>]<br/>
+<a href="backend.PPC.html#label">label</a> [definition, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.Mach.html#label">label</a> [definition, in <a href="backend.Mach.html">backend.Mach</a>]<br/>
+<a href="backend.Linearizeproof.html#label_in_lin_block">label_in_lin_block</a> [lemma, in <a href="backend.Linearizeproof.html">backend.Linearizeproof</a>]<br/>
+<a href="backend.Linearizeproof.html#label_in_lin_rec">label_in_lin_rec</a> [lemma, in <a href="backend.Linearizeproof.html">backend.Linearizeproof</a>]<br/>
+<a href="backend.PPC.html#label_pos">label_pos</a> [definition, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPCgenproof.html#label_pos_code_tail">label_pos_code_tail</a> [lemma, in <a href="backend.PPCgenproof.html">backend.PPCgenproof</a>]<br/>
+<a href="backend.Parallelmove.html#last">last</a> [definition, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#last_app">last_app</a> [lemma, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#last_cons">last_cons</a> [lemma, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#last_replace">last_replace</a> [lemma, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="lib.Lattice.html">Lattice</a> [library]<br/>
+<a href="backend.Linearize.html#lbl">lbl</a> [definition, in <a href="backend.Linearize.html">backend.Linearize</a>]<br/>
+<a href="backend.Linearize.html#lbl">lbl</a> [definition, in <a href="backend.Linearize.html">backend.Linearize</a>]<br/>
+<a href="lib.Lattice.html#LBoolean">LBoolean</a> [module, in <a href="lib.Lattice.html">lib.Lattice</a>]<br/>
+<a href="backend.Linear.html#Lcall">Lcall</a> [constructor, in <a href="backend.Linear.html">backend.Linear</a>]<br/>
+<a href="backend.Linear.html#Lcond">Lcond</a> [constructor, in <a href="backend.Linear.html">backend.Linear</a>]<br/>
+<a href="lib.Maps.html#Leaf">Leaf</a> [constructor, in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Inclusion.html#leaf">leaf</a> [definition, in <a href="lib.Inclusion.html">lib.Inclusion</a>]<br/>
+<a href="lib.Inclusion.html#leaf">leaf</a> [constructor, in <a href="lib.Inclusion.html">lib.Inclusion</a>]<br/>
+<a href="lib.Inclusion.html#leaf">leaf</a> [definition, in <a href="lib.Inclusion.html">lib.Inclusion</a>]<br/>
+<a href="lib.Inclusion.html#leaf">leaf</a> [definition, in <a href="lib.Inclusion.html">lib.Inclusion</a>]<br/>
+<a href="backend.Allocproof.html#length_addr_args">length_addr_args</a> [lemma, in <a href="backend.Allocproof.html">backend.Allocproof</a>]<br/>
+<a href="backend.Parallelmove.html#length_app">length_app</a> [lemma, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Allocproof.html#length_cond_args">length_cond_args</a> [lemma, in <a href="backend.Allocproof.html">backend.Allocproof</a>]<br/>
+<a href="backend.Allocproof.html#length_op_args">length_op_args</a> [lemma, in <a href="backend.Allocproof.html">backend.Allocproof</a>]<br/>
+<a href="backend.Parallelmove.html#length_replace">length_replace</a> [lemma, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Cminor.html#letenv">letenv</a> [definition, in <a href="backend.Cminor.html">backend.Cminor</a>]<br/>
+<a href="backend.Csharpminor.html#letenv">letenv</a> [definition, in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.RTLtyping.html#let_fold_args_res">let_fold_args_res</a> [lemma, in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="lib.Lattice.html#LFlat">LFlat</a> [module, in <a href="lib.Lattice.html">lib.Lattice</a>]<br/>
+<a href="backend.Linear.html#Lgetstack">Lgetstack</a> [constructor, in <a href="backend.Linear.html">backend.Linear</a>]<br/>
+<a href="backend.Linear.html#Lgoto">Lgoto</a> [constructor, in <a href="backend.Linear.html">backend.Linear</a>]<br/>
+<a href="backend.Cmconstr.html#lift">lift</a> [definition, in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Cmconstr.html#lift_condexpr">lift_condexpr</a> [definition, in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Cmconstr.html#lift_expr">lift_expr</a> [definition, in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Cmconstr.html#lift_exprlist">lift_exprlist</a> [definition, in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Linear.html">Linear</a> [library]<br/>
+<a href="backend.Linearize.html">Linearize</a> [library]<br/>
+<a href="backend.Linearizeproof.html">Linearizeproof</a> [library]<br/>
+<a href="backend.Linearizetyping.html">Linearizetyping</a> [library]<br/>
+<a href="backend.Linearize.html#linearize_block">linearize_block</a> [definition, in <a href="backend.Linearize.html">backend.Linearize</a>]<br/>
+<a href="backend.Linearizetyping.html#linearize_block_incl">linearize_block_incl</a> [lemma, in <a href="backend.Linearizetyping.html">backend.Linearizetyping</a>]<br/>
+<a href="backend.Linearize.html#linearize_body">linearize_body</a> [definition, in <a href="backend.Linearize.html">backend.Linearize</a>]<br/>
+<a href="backend.Linearize.html#linearize_function">linearize_function</a> [definition, in <a href="backend.Linearize.html">backend.Linearize</a>]<br/>
+<a href="backend.Lineartyping.html">Lineartyping</a> [library]<br/>
+<a href="backend.Machtyping.html#link_invariant">link_invariant</a> [definition, in <a href="backend.Machtyping.html">backend.Machtyping</a>]<br/>
+<a href="backend.Parallelmove.html#listsLoc2Moves">listsLoc2Moves</a> [definition, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Allocation.html#listsLoc2Moves">listsLoc2Moves</a> [definition, in <a href="backend.Allocation.html">backend.Allocation</a>]<br/>
+<a href="lib.Coqlib.html#list_append_map">list_append_map</a> [lemma, in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="lib.Coqlib.html#list_disjoint">list_disjoint</a> [definition, in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="lib.Coqlib.html#list_disjoint_cons_left">list_disjoint_cons_left</a> [lemma, in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="lib.Coqlib.html#list_disjoint_cons_right">list_disjoint_cons_right</a> [lemma, in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="lib.Coqlib.html#list_disjoint_notin">list_disjoint_notin</a> [lemma, in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="lib.Coqlib.html#list_disjoint_sym">list_disjoint_sym</a> [lemma, in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="lib.Coqlib.html#list_forall2">list_forall2</a> [inductive, in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="lib.Coqlib.html#list_forall2_cons">list_forall2_cons</a> [constructor, in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="lib.Coqlib.html#list_forall2_imply">list_forall2_imply</a> [lemma, in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="lib.Coqlib.html#list_forall2_nil">list_forall2_nil</a> [constructor, in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="lib.Coqlib.html#list_in_map_inv">list_in_map_inv</a> [lemma, in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="lib.Coqlib.html#list_length_map">list_length_map</a> [lemma, in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="lib.Coqlib.html#list_map_compose">list_map_compose</a> [lemma, in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="lib.Coqlib.html#list_map_exten">list_map_exten</a> [lemma, in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="lib.Coqlib.html#list_map_norepet">list_map_norepet</a> [lemma, in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="lib.Coqlib.html#list_map_nth">list_map_nth</a> [lemma, in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="lib.Coqlib.html#list_norepet">list_norepet</a> [inductive, in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="lib.Coqlib.html#list_norepet_append">list_norepet_append</a> [lemma, in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="lib.Coqlib.html#list_norepet_append_left">list_norepet_append_left</a> [lemma, in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="lib.Coqlib.html#list_norepet_append_right">list_norepet_append_right</a> [lemma, in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="lib.Coqlib.html#list_norepet_cons">list_norepet_cons</a> [constructor, in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="lib.Coqlib.html#list_norepet_dec">list_norepet_dec</a> [lemma, in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="lib.Coqlib.html#list_norepet_nil">list_norepet_nil</a> [constructor, in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="backend.Allocproof.html#live0">live0</a> [definition, in <a href="backend.Allocproof.html">backend.Allocproof</a>]<br/>
+<a href="backend.Linear.html#Llabel">Llabel</a> [constructor, in <a href="backend.Linear.html">backend.Linear</a>]<br/>
+<a href="backend.Linear.html#Lload">Lload</a> [constructor, in <a href="backend.Linear.html">backend.Linear</a>]<br/>
+<a href="backend.Mem.html#load">load</a> [definition, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Cmconstr.html#load">load</a> [definition, in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.CSE.html#Load">Load</a> [constructor, in <a href="backend.CSE.html">backend.CSE</a>]<br/>
+<a href="backend.PPCgen.html#loadimm">loadimm</a> [definition, in <a href="backend.PPCgen.html">backend.PPCgen</a>]<br/>
+<a href="backend.PPCgenproof1.html#loadimm_correct">loadimm_correct</a> [lemma, in <a href="backend.PPCgenproof1.html">backend.PPCgenproof1</a>]<br/>
+<a href="backend.PPCgen.html#loadind">loadind</a> [definition, in <a href="backend.PPCgen.html">backend.PPCgen</a>]<br/>
+<a href="backend.PPCgen.html#loadind_aux">loadind_aux</a> [definition, in <a href="backend.PPCgen.html">backend.PPCgen</a>]<br/>
+<a href="backend.PPCgenproof1.html#loadind_aux_correct">loadind_aux_correct</a> [lemma, in <a href="backend.PPCgenproof1.html">backend.PPCgenproof1</a>]<br/>
+<a href="backend.PPCgenproof1.html#loadind_correct">loadind_correct</a> [lemma, in <a href="backend.PPCgenproof1.html">backend.PPCgenproof1</a>]<br/>
+<a href="backend.Mem.html#loadv">loadv</a> [definition, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#loadv_inject">loadv_inject</a> [lemma, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.PPCgenproof.html#loadv_8_signed_unsigned">loadv_8_signed_unsigned</a> [lemma, in <a href="backend.PPCgenproof.html">backend.PPCgenproof</a>]<br/>
+<a href="backend.PPC.html#load1">load1</a> [definition, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#load2">load2</a> [definition, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.Mem.html#load_agree">load_agree</a> [lemma, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#load_alloc_other">load_alloc_other</a> [lemma, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#load_alloc_same">load_alloc_same</a> [lemma, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#load_contentmap_agree">load_contentmap_agree</a> [lemma, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#load_contents">load_contents</a> [definition, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#load_contents_init">load_contents_init</a> [lemma, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#load_contents_inject">load_contents_inject</a> [lemma, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#load_extends">load_extends</a> [lemma, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#load_free">load_free</a> [lemma, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Cminorgenproof.html#load_freelist">load_freelist</a> [lemma, in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.Cminorgenproof.html#load_from_alloc_is_undef">load_from_alloc_is_undef</a> [lemma, in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.Mem.html#load_inject">load_inject</a> [lemma, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#load_inv">load_inv</a> [lemma, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#load_in_bounds">load_in_bounds</a> [lemma, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Values.html#load_result">load_result</a> [definition, in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.Cminorgenproof.html#load_result_idem">load_result_idem</a> [lemma, in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.Mem.html#load_result_inject">load_result_inject</a> [lemma, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Cminorgenproof.html#load_result_normalized">load_result_normalized</a> [lemma, in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.Machabstr2mach.html#load_result_ty">load_result_ty</a> [lemma, in <a href="backend.Machabstr2mach.html">backend.Machabstr2mach</a>]<br/>
+<a href="backend.Mach.html#load_stack">load_stack</a> [definition, in <a href="backend.Mach.html">backend.Mach</a>]<br/>
+<a href="backend.Mem.html#load_store_contents_mismatch">load_store_contents_mismatch</a> [lemma, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#load_store_contents_other">load_store_contents_other</a> [lemma, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#load_store_contents_overlap">load_store_contents_overlap</a> [lemma, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#load_store_contents_same">load_store_contents_same</a> [lemma, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#load_store_other">load_store_other</a> [lemma, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#load_store_same">load_store_same</a> [lemma, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Locations.html#loc">loc</a> [inductive, in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Locations.html#Loc">Loc</a> [module, in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Locations.html#Local">Local</a> [constructor, in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Csharpminor.html#local_variable">local_variable</a> [inductive, in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Locations.html">Locations</a> [library]<br/>
+<a href="backend.Locations.html#Locmap">Locmap</a> [module, in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.LTL.html#locset">locset</a> [definition, in <a href="backend.LTL.html">backend.LTL</a>]<br/>
+<a href="backend.Linear.html#locset">locset</a> [definition, in <a href="backend.Linear.html">backend.Linear</a>]<br/>
+<a href="backend.Conventions.html#locs_acceptable">locs_acceptable</a> [definition, in <a href="backend.Conventions.html">backend.Conventions</a>]<br/>
+<a href="backend.Conventions.html#locs_acceptable_disj_temporaries">locs_acceptable_disj_temporaries</a> [lemma, in <a href="backend.Conventions.html">backend.Conventions</a>]<br/>
+<a href="backend.Alloctyping.html#locs_read_ok">locs_read_ok</a> [definition, in <a href="backend.Alloctyping.html">backend.Alloctyping</a>]<br/>
+<a href="backend.Alloctyping.html#locs_write_ok">locs_write_ok</a> [definition, in <a href="backend.Alloctyping.html">backend.Alloctyping</a>]<br/>
+<a href="backend.Conventions.html#loc_acceptable">loc_acceptable</a> [definition, in <a href="backend.Conventions.html">backend.Conventions</a>]<br/>
+<a href="backend.Allocproof.html#loc_acceptable_noteq_diff">loc_acceptable_noteq_diff</a> [lemma, in <a href="backend.Allocproof.html">backend.Allocproof</a>]<br/>
+<a href="backend.Allocproof.html#loc_acceptable_notin_notin">loc_acceptable_notin_notin</a> [lemma, in <a href="backend.Allocproof.html">backend.Allocproof</a>]<br/>
+<a href="backend.Conventions.html#loc_arguments">loc_arguments</a> [definition, in <a href="backend.Conventions.html">backend.Conventions</a>]<br/>
+<a href="backend.Conventions.html#loc_arguments_acceptable">loc_arguments_acceptable</a> [lemma, in <a href="backend.Conventions.html">backend.Conventions</a>]<br/>
+<a href="backend.Conventions.html#loc_arguments_bounded">loc_arguments_bounded</a> [lemma, in <a href="backend.Conventions.html">backend.Conventions</a>]<br/>
+<a href="backend.Conventions.html#loc_arguments_length">loc_arguments_length</a> [lemma, in <a href="backend.Conventions.html">backend.Conventions</a>]<br/>
+<a href="backend.Conventions.html#loc_arguments_norepet">loc_arguments_norepet</a> [lemma, in <a href="backend.Conventions.html">backend.Conventions</a>]<br/>
+<a href="backend.Conventions.html#loc_arguments_not_temporaries">loc_arguments_not_temporaries</a> [lemma, in <a href="backend.Conventions.html">backend.Conventions</a>]<br/>
+<a href="backend.Conventions.html#loc_arguments_rec">loc_arguments_rec</a> [definition, in <a href="backend.Conventions.html">backend.Conventions</a>]<br/>
+<a href="backend.Conventions.html#loc_arguments_type">loc_arguments_type</a> [lemma, in <a href="backend.Conventions.html">backend.Conventions</a>]<br/>
+<a href="backend.Conventions.html#loc_argument_acceptable">loc_argument_acceptable</a> [definition, in <a href="backend.Conventions.html">backend.Conventions</a>]<br/>
+<a href="backend.Coloring.html#loc_is_acceptable">loc_is_acceptable</a> [definition, in <a href="backend.Coloring.html">backend.Coloring</a>]<br/>
+<a href="backend.Coloringproof.html#loc_is_acceptable_correct">loc_is_acceptable_correct</a> [lemma, in <a href="backend.Coloringproof.html">backend.Coloringproof</a>]<br/>
+<a href="backend.Conventions.html#loc_parameters">loc_parameters</a> [definition, in <a href="backend.Conventions.html">backend.Conventions</a>]<br/>
+<a href="backend.Conventions.html#loc_parameters_not_temporaries">loc_parameters_not_temporaries</a> [lemma, in <a href="backend.Conventions.html">backend.Conventions</a>]<br/>
+<a href="backend.Conventions.html#loc_parameters_type">loc_parameters_type</a> [lemma, in <a href="backend.Conventions.html">backend.Conventions</a>]<br/>
+<a href="backend.Alloctyping.html#loc_read_ok">loc_read_ok</a> [definition, in <a href="backend.Alloctyping.html">backend.Alloctyping</a>]<br/>
+<a href="backend.Conventions.html#loc_result">loc_result</a> [definition, in <a href="backend.Conventions.html">backend.Conventions</a>]<br/>
+<a href="backend.Conventions.html#loc_result_acceptable">loc_result_acceptable</a> [lemma, in <a href="backend.Conventions.html">backend.Conventions</a>]<br/>
+<a href="backend.Conventions.html#loc_result_type">loc_result_type</a> [lemma, in <a href="backend.Conventions.html">backend.Conventions</a>]<br/>
+<a href="backend.Alloctyping.html#loc_write_ok">loc_write_ok</a> [definition, in <a href="backend.Alloctyping.html">backend.Alloctyping</a>]<br/>
+<a href="backend.Linear.html#Lop">Lop</a> [constructor, in <a href="backend.Linear.html">backend.Linear</a>]<br/>
+<a href="backend.Mem.html#low_bound">low_bound</a> [definition, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#low_bound_alloc">low_bound_alloc</a> [lemma, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#low_bound_free">low_bound_free</a> [lemma, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#low_bound_store">low_bound_store</a> [lemma, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.PPC.html#low_half_signed">low_half_signed</a> [axiom, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#low_half_signed_type">low_half_signed_type</a> [axiom, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#low_half_unsigned">low_half_unsigned</a> [axiom, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#low_half_unsigned_type">low_half_unsigned_type</a> [axiom, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#low_high_half_signed">low_high_half_signed</a> [axiom, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#low_high_half_unsigned">low_high_half_unsigned</a> [axiom, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPCgenproof1.html#low_high_s">low_high_s</a> [lemma, in <a href="backend.PPCgenproof1.html">backend.PPCgenproof1</a>]<br/>
+<a href="backend.PPCgenproof1.html#low_high_u">low_high_u</a> [lemma, in <a href="backend.PPCgenproof1.html">backend.PPCgenproof1</a>]<br/>
+<a href="backend.PPCgenproof1.html#low_high_u_xor">low_high_u_xor</a> [lemma, in <a href="backend.PPCgenproof1.html">backend.PPCgenproof1</a>]<br/>
+<a href="backend.PPCgen.html#low_s">low_s</a> [definition, in <a href="backend.PPCgen.html">backend.PPCgen</a>]<br/>
+<a href="backend.PPCgen.html#low_u">low_u</a> [definition, in <a href="backend.PPCgen.html">backend.PPCgen</a>]<br/>
+<a href="lib.Lattice.html#LPMap">LPMap</a> [module, in <a href="lib.Lattice.html">lib.Lattice</a>]<br/>
+<a href="backend.PPC.html#LR">LR</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.Linear.html#Lreturn">Lreturn</a> [constructor, in <a href="backend.Linear.html">backend.Linear</a>]<br/>
+<a href="backend.Linear.html#Lsetstack">Lsetstack</a> [constructor, in <a href="backend.Linear.html">backend.Linear</a>]<br/>
+<a href="backend.Linear.html#Lstore">Lstore</a> [constructor, in <a href="backend.Linear.html">backend.Linear</a>]<br/>
+<a href="lib.Integers.html#lt">lt</a> [definition, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Ordered.html#lt">lt</a> [definition, in <a href="lib.Ordered.html">lib.Ordered</a>]<br/>
+<a href="lib.Ordered.html#lt">lt</a> [definition, in <a href="lib.Ordered.html">lib.Ordered</a>]<br/>
+<a href="lib.Ordered.html#lt">lt</a> [definition, in <a href="lib.Ordered.html">lib.Ordered</a>]<br/>
+<a href="backend.LTL.html">LTL</a> [library]<br/>
+<a href="backend.LTLtyping.html">LTLtyping</a> [library]<br/>
+<a href="lib.Integers.html#ltu">ltu</a> [definition, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Ordered.html#lt_not_eq">lt_not_eq</a> [lemma, in <a href="lib.Ordered.html">lib.Ordered</a>]<br/>
+<a href="lib.Ordered.html#lt_not_eq">lt_not_eq</a> [lemma, in <a href="lib.Ordered.html">lib.Ordered</a>]<br/>
+<a href="lib.Ordered.html#lt_not_eq">lt_not_eq</a> [lemma, in <a href="lib.Ordered.html">lib.Ordered</a>]<br/>
+<a href="lib.Ordered.html#lt_trans">lt_trans</a> [lemma, in <a href="lib.Ordered.html">lib.Ordered</a>]<br/>
+<a href="lib.Ordered.html#lt_trans">lt_trans</a> [lemma, in <a href="lib.Ordered.html">lib.Ordered</a>]<br/>
+<a href="lib.Ordered.html#lt_trans">lt_trans</a> [lemma, in <a href="lib.Ordered.html">lib.Ordered</a>]<br/>
+<a href="lib.Lattice.html#lub">lub</a> [definition, in <a href="lib.Lattice.html">lib.Lattice</a>]<br/>
+<a href="lib.Lattice.html#lub">lub</a> [definition, in <a href="lib.Lattice.html">lib.Lattice</a>]<br/>
+<a href="lib.Sets.html#lub">lub</a> [definition, in <a href="lib.Sets.html">lib.Sets</a>]<br/>
+<a href="lib.Lattice.html#lub">lub</a> [definition, in <a href="lib.Lattice.html">lib.Lattice</a>]<br/>
+<a href="backend.Constprop.html#lub">lub</a> [definition, in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="lib.Lattice.html#lub_commut">lub_commut</a> [lemma, in <a href="lib.Lattice.html">lib.Lattice</a>]<br/>
+<a href="backend.Constprop.html#lub_commut">lub_commut</a> [lemma, in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="lib.Lattice.html#lub_commut">lub_commut</a> [lemma, in <a href="lib.Lattice.html">lib.Lattice</a>]<br/>
+<a href="lib.Sets.html#lub_commut">lub_commut</a> [lemma, in <a href="lib.Sets.html">lib.Sets</a>]<br/>
+<a href="lib.Lattice.html#lub_commut">lub_commut</a> [lemma, in <a href="lib.Lattice.html">lib.Lattice</a>]<br/>
+<a href="backend.Csharpminor.html#LVarray">LVarray</a> [constructor, in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Csharpminor.html#LVscalar">LVscalar</a> [constructor, in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<br/><br/><a name="global_M"></a><h2>M </h2>
+<a href="backend.Mach.html">Mach</a> [library]<br/>
+<a href="backend.Machabstr.html">Machabstr</a> [library]<br/>
+<a href="backend.Machabstr2mach.html">Machabstr2mach</a> [library]<br/>
+<a href="backend.Machtyping.html">Machtyping</a> [library]<br/>
+<a href="backend.Main.html">Main</a> [library]<br/>
+<a href="lib.Sets.html#MakeSet">MakeSet</a> [module, in <a href="lib.Sets.html">lib.Sets</a>]<br/>
+<a href="backend.Constprop.html#make_addimm">make_addimm</a> [definition, in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constpropproof.html#make_addimm_correct">make_addimm_correct</a> [lemma, in <a href="backend.Constpropproof.html">backend.Constpropproof</a>]<br/>
+<a href="backend.Constprop.html#make_andimm">make_andimm</a> [definition, in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constpropproof.html#make_andimm_correct">make_andimm_correct</a> [lemma, in <a href="backend.Constpropproof.html">backend.Constpropproof</a>]<br/>
+<a href="backend.Cminorgen.html#make_cast">make_cast</a> [definition, in <a href="backend.Cminorgen.html">backend.Cminorgen</a>]<br/>
+<a href="backend.Cminorgenproof.html#make_cast_correct">make_cast_correct</a> [lemma, in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.Stacking.html#make_env">make_env</a> [definition, in <a href="backend.Stacking.html">backend.Stacking</a>]<br/>
+<a href="backend.Cminorgen.html#make_load">make_load</a> [definition, in <a href="backend.Cminorgen.html">backend.Cminorgen</a>]<br/>
+<a href="backend.Cminorgenproof.html#make_load_correct">make_load_correct</a> [lemma, in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.Constprop.html#make_mulimm">make_mulimm</a> [definition, in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constpropproof.html#make_mulimm_correct">make_mulimm_correct</a> [lemma, in <a href="backend.Constpropproof.html">backend.Constpropproof</a>]<br/>
+<a href="backend.Cminorgen.html#make_op">make_op</a> [definition, in <a href="backend.Cminorgen.html">backend.Cminorgen</a>]<br/>
+<a href="backend.Cminorgenproof.html#make_op_correct">make_op_correct</a> [lemma, in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.Constprop.html#make_orimm">make_orimm</a> [definition, in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constpropproof.html#make_orimm_correct">make_orimm_correct</a> [lemma, in <a href="backend.Constpropproof.html">backend.Constpropproof</a>]<br/>
+<a href="backend.Kildall.html#make_predecessors">make_predecessors</a> [definition, in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.Kildall.html#make_predecessors_correct">make_predecessors_correct</a> [lemma, in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.Constprop.html#make_shlimm">make_shlimm</a> [definition, in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constpropproof.html#make_shlimm_correct">make_shlimm_correct</a> [lemma, in <a href="backend.Constpropproof.html">backend.Constpropproof</a>]<br/>
+<a href="backend.Constprop.html#make_shrimm">make_shrimm</a> [definition, in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constpropproof.html#make_shrimm_correct">make_shrimm_correct</a> [lemma, in <a href="backend.Constpropproof.html">backend.Constpropproof</a>]<br/>
+<a href="backend.Constprop.html#make_shruimm">make_shruimm</a> [definition, in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constpropproof.html#make_shruimm_correct">make_shruimm_correct</a> [lemma, in <a href="backend.Constpropproof.html">backend.Constpropproof</a>]<br/>
+<a href="backend.Cminorgen.html#make_stackaddr">make_stackaddr</a> [definition, in <a href="backend.Cminorgen.html">backend.Cminorgen</a>]<br/>
+<a href="backend.Cminorgenproof.html#make_stackaddr_correct">make_stackaddr_correct</a> [lemma, in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.Cminorgen.html#make_store">make_store</a> [definition, in <a href="backend.Cminorgen.html">backend.Cminorgen</a>]<br/>
+<a href="backend.Cminorgenproof.html#make_store_correct">make_store_correct</a> [lemma, in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.Constprop.html#make_xorimm">make_xorimm</a> [definition, in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constpropproof.html#make_xorimm_correct">make_xorimm_correct</a> [lemma, in <a href="backend.Constpropproof.html">backend.Constpropproof</a>]<br/>
+<a href="lib.Maps.html#map">map</a> [definition, in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Maps.html#map">map</a> [definition, in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Maps.html#map">map</a> [definition, in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Maps.html#map">map</a> [definition, in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Maps.html#MAP">MAP</a> [module, in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.union_find.html#MAP">MAP</a> [module, in <a href="lib.union_find.html">lib.union_find</a>]<br/>
+<a href="backend.RTLtyping.html#mapped">mapped</a> [definition, in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.RTLtyping.html#mapped_included_consistent">mapped_included_consistent</a> [lemma, in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.RTLtyping.html#mapped_list_included">mapped_list_included</a> [lemma, in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.RTLgen.html#mapping">mapping</a> [inductive, in <a href="backend.RTLgen.html">backend.RTLgen</a>]<br/>
+<a href="lib.Maps.html">Maps</a> [library]<br/>
+<a href="backend.Alloctyping_aux.html#map_f_getsrc_getdst">map_f_getsrc_getdst</a> [lemma, in <a href="backend.Alloctyping_aux.html">backend.Alloctyping_aux</a>]<br/>
+<a href="backend.Allocproof_aux.html#map_inv">map_inv</a> [lemma, in <a href="backend.Allocproof_aux.html">backend.Allocproof_aux</a>]<br/>
+<a href="backend.RTLgenproof1.html#map_wf">map_wf</a> [inductive, in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.RTLgenproof1.html#map_wf_incr">map_wf_incr</a> [lemma, in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.Cminorgenproof.html#match_callstack">match_callstack</a> [inductive, in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.Cminorgenproof.html#match_callstack_alloc_left">match_callstack_alloc_left</a> [lemma, in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.Cminorgenproof.html#match_callstack_alloc_other">match_callstack_alloc_other</a> [lemma, in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.Cminorgenproof.html#match_callstack_alloc_right">match_callstack_alloc_right</a> [lemma, in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.Cminorgenproof.html#match_callstack_alloc_variables">match_callstack_alloc_variables</a> [lemma, in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.Cminorgenproof.html#match_callstack_alloc_variables_rec">match_callstack_alloc_variables_rec</a> [lemma, in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.Cminorgenproof.html#match_callstack_freelist">match_callstack_freelist</a> [lemma, in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.Cminorgenproof.html#match_callstack_freelist_rec">match_callstack_freelist_rec</a> [lemma, in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.Cminorgenproof.html#match_callstack_incr_bound">match_callstack_incr_bound</a> [lemma, in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.Cminorgenproof.html#match_callstack_mapped">match_callstack_mapped</a> [lemma, in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.Cminorgenproof.html#match_callstack_match_globalenvs">match_callstack_match_globalenvs</a> [lemma, in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.Cminorgenproof.html#match_callstack_store_above">match_callstack_store_above</a> [lemma, in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.Cminorgenproof.html#match_callstack_store_local">match_callstack_store_local</a> [lemma, in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.Cminorgenproof.html#match_callstack_store_local_unchanged">match_callstack_store_local_unchanged</a> [lemma, in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.Cminorgenproof.html#match_env">match_env</a> [inductive, in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.RTLgenproof1.html#match_env">match_env</a> [inductive, in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.Cminorgenproof.html#match_env_alloc_other">match_env_alloc_other</a> [lemma, in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.Cminorgenproof.html#match_env_alloc_same">match_env_alloc_same</a> [lemma, in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.RTLgenproof1.html#match_env_empty">match_env_empty</a> [lemma, in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.RTLgenproof1.html#match_env_exten">match_env_exten</a> [lemma, in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.Cminorgenproof.html#match_env_extensional">match_env_extensional</a> [lemma, in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.RTLgenproof1.html#match_env_find_reg">match_env_find_reg</a> [lemma, in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.Cminorgenproof.html#match_env_freelist">match_env_freelist</a> [lemma, in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.RTLgenproof1.html#match_env_invariant">match_env_invariant</a> [lemma, in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.RTLgenproof1.html#match_env_letvar">match_env_letvar</a> [lemma, in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.Cminorgenproof.html#match_env_store_above">match_env_store_above</a> [lemma, in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.Cminorgenproof.html#match_env_store_local">match_env_store_local</a> [lemma, in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.Cminorgenproof.html#match_env_store_mapped">match_env_store_mapped</a> [lemma, in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.RTLgenproof1.html#match_env_update_temp">match_env_update_temp</a> [lemma, in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.RTLgenproof1.html#match_env_update_var">match_env_update_var</a> [lemma, in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.Cminorgenproof.html#match_globalenvs">match_globalenvs</a> [inductive, in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.Cminorgenproof.html#match_globalenvs_init">match_globalenvs_init</a> [lemma, in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.RTLgenproof1.html#match_init_env_init_reg">match_init_env_init_reg</a> [lemma, in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.RTLgenproof.html#match_return_outcome">match_return_outcome</a> [definition, in <a href="backend.RTLgenproof.html">backend.RTLgenproof</a>]<br/>
+<a href="backend.RTLgenproof.html#match_return_reg">match_return_reg</a> [definition, in <a href="backend.RTLgenproof.html">backend.RTLgenproof</a>]<br/>
+<a href="backend.RTLgenproof1.html#match_set_locals">match_set_locals</a> [lemma, in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.RTLgenproof1.html#match_set_params_init_regs">match_set_params_init_regs</a> [lemma, in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.Cminorgenproof.html#match_var">match_var</a> [inductive, in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.Lineartyping.html#max_over_instrs">max_over_instrs</a> [definition, in <a href="backend.Lineartyping.html">backend.Lineartyping</a>]<br/>
+<a href="backend.Linearizetyping.html#max_over_instrs_bound">max_over_instrs_bound</a> [lemma, in <a href="backend.Linearizetyping.html">backend.Linearizetyping</a>]<br/>
+<a href="backend.Lineartyping.html#max_over_list">max_over_list</a> [definition, in <a href="backend.Lineartyping.html">backend.Lineartyping</a>]<br/>
+<a href="backend.Linearizetyping.html#max_over_list_bound">max_over_list_bound</a> [lemma, in <a href="backend.Linearizetyping.html">backend.Linearizetyping</a>]<br/>
+<a href="backend.Lineartyping.html#max_over_list_pos">max_over_list_pos</a> [lemma, in <a href="backend.Lineartyping.html">backend.Lineartyping</a>]<br/>
+<a href="backend.Lineartyping.html#max_over_regs_of_funct">max_over_regs_of_funct</a> [definition, in <a href="backend.Lineartyping.html">backend.Lineartyping</a>]<br/>
+<a href="backend.Linearizetyping.html#max_over_regs_of_funct_bound">max_over_regs_of_funct_bound</a> [lemma, in <a href="backend.Linearizetyping.html">backend.Linearizetyping</a>]<br/>
+<a href="backend.Lineartyping.html#max_over_regs_of_funct_pos">max_over_regs_of_funct_pos</a> [lemma, in <a href="backend.Lineartyping.html">backend.Lineartyping</a>]<br/>
+<a href="backend.Lineartyping.html#max_over_regs_of_instr">max_over_regs_of_instr</a> [definition, in <a href="backend.Lineartyping.html">backend.Lineartyping</a>]<br/>
+<a href="backend.Lineartyping.html#max_over_slots_of_funct">max_over_slots_of_funct</a> [definition, in <a href="backend.Lineartyping.html">backend.Lineartyping</a>]<br/>
+<a href="backend.Linearizetyping.html#max_over_slots_of_funct_bound">max_over_slots_of_funct_bound</a> [lemma, in <a href="backend.Linearizetyping.html">backend.Linearizetyping</a>]<br/>
+<a href="backend.Lineartyping.html#max_over_slots_of_funct_pos">max_over_slots_of_funct_pos</a> [lemma, in <a href="backend.Lineartyping.html">backend.Lineartyping</a>]<br/>
+<a href="backend.Lineartyping.html#max_over_slots_of_instr">max_over_slots_of_instr</a> [definition, in <a href="backend.Lineartyping.html">backend.Lineartyping</a>]<br/>
+<a href="lib.Integers.html#max_signed">max_signed</a> [definition, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#max_unsigned">max_unsigned</a> [definition, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Mach.html#Mcall">Mcall</a> [constructor, in <a href="backend.Mach.html">backend.Mach</a>]<br/>
+<a href="backend.Mach.html#Mcond">Mcond</a> [constructor, in <a href="backend.Mach.html">backend.Mach</a>]<br/>
+<a href="backend.Cminorgenproof.html#mcs_cons">mcs_cons</a> [constructor, in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.Cminorgenproof.html#mcs_nil">mcs_nil</a> [constructor, in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.Mem.html#mem">mem</a> [inductive, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="lib.Sets.html#mem">mem</a> [definition, in <a href="lib.Sets.html">lib.Sets</a>]<br/>
+<a href="backend.Mem.html">Mem</a> [library]<br/>
+<a href="backend.RTLtyping.html#member">member</a> [definition, in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.RTLtyping.html#member_correct">member_correct</a> [lemma, in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.Mem.html#meminj">meminj</a> [definition, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.AST.html#memory_chunk">memory_chunk</a> [inductive, in <a href="backend.AST.html">backend.AST</a>]<br/>
+<a href="backend.Mem.html#memory_size">memory_size</a> [inductive, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Globalenvs.html#mem_add_globals_transf">mem_add_globals_transf</a> [lemma, in <a href="backend.Globalenvs.html">backend.Globalenvs</a>]<br/>
+<a href="lib.Sets.html#mem_add_other">mem_add_other</a> [lemma, in <a href="lib.Sets.html">lib.Sets</a>]<br/>
+<a href="lib.Sets.html#mem_add_same">mem_add_same</a> [lemma, in <a href="lib.Sets.html">lib.Sets</a>]<br/>
+<a href="backend.InterfGraph.html#mem_add_tail">mem_add_tail</a> [lemma, in <a href="backend.InterfGraph.html">backend.InterfGraph</a>]<br/>
+<a href="backend.Mem.html#mem_chunk">mem_chunk</a> [definition, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="lib.Sets.html#mem_empty">mem_empty</a> [lemma, in <a href="lib.Sets.html">lib.Sets</a>]<br/>
+<a href="backend.Mem.html#mem_exten">mem_exten</a> [lemma, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#mem_inject">mem_inject</a> [inductive, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="lib.Sets.html#mem_remove_other">mem_remove_other</a> [lemma, in <a href="lib.Sets.html">lib.Sets</a>]<br/>
+<a href="lib.Sets.html#mem_remove_same">mem_remove_same</a> [lemma, in <a href="lib.Sets.html">lib.Sets</a>]<br/>
+<a href="backend.Machabstr.html#mem_type">mem_type</a> [definition, in <a href="backend.Machabstr.html">backend.Machabstr</a>]<br/>
+<a href="lib.Sets.html#mem_union">mem_union</a> [lemma, in <a href="lib.Sets.html">lib.Sets</a>]<br/>
+<a href="backend.Parallelmove.html#mesure">mesure</a> [definition, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.AST.html#Mfloat32">Mfloat32</a> [constructor, in <a href="backend.AST.html">backend.AST</a>]<br/>
+<a href="backend.AST.html#Mfloat64">Mfloat64</a> [constructor, in <a href="backend.AST.html">backend.AST</a>]<br/>
+<a href="backend.Mach.html#Mgetparam">Mgetparam</a> [constructor, in <a href="backend.Mach.html">backend.Mach</a>]<br/>
+<a href="backend.Mach.html#Mgetstack">Mgetstack</a> [constructor, in <a href="backend.Mach.html">backend.Mach</a>]<br/>
+<a href="backend.Mach.html#Mgoto">Mgoto</a> [constructor, in <a href="backend.Mach.html">backend.Mach</a>]<br/>
+<a href="backend.AST.html#Mint16signed">Mint16signed</a> [constructor, in <a href="backend.AST.html">backend.AST</a>]<br/>
+<a href="backend.AST.html#Mint16unsigned">Mint16unsigned</a> [constructor, in <a href="backend.AST.html">backend.AST</a>]<br/>
+<a href="backend.AST.html#Mint32">Mint32</a> [constructor, in <a href="backend.AST.html">backend.AST</a>]<br/>
+<a href="backend.AST.html#Mint8signed">Mint8signed</a> [constructor, in <a href="backend.AST.html">backend.AST</a>]<br/>
+<a href="backend.AST.html#Mint8unsigned">Mint8unsigned</a> [constructor, in <a href="backend.AST.html">backend.AST</a>]<br/>
+<a href="lib.Integers.html#min_signed">min_signed</a> [definition, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#mkint_eq">mkint_eq</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.RTLtyping.html#mk_env">mk_env</a> [definition, in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.Mach.html#Mlabel">Mlabel</a> [constructor, in <a href="backend.Mach.html">backend.Mach</a>]<br/>
+<a href="backend.Mach.html#Mload">Mload</a> [constructor, in <a href="backend.Mach.html">backend.Mach</a>]<br/>
+<a href="lib.Integers.html#mods">mods</a> [definition, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Cmconstr.html#mods">mods</a> [definition, in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Values.html#mods">mods</a> [definition, in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="lib.Integers.html#mods_divs">mods_divs</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Values.html#mods_divs">mods_divs</a> [lemma, in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="lib.Integers.html#modu">modu</a> [definition, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Values.html#modu">modu</a> [definition, in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.Cmconstr.html#modu">modu</a> [definition, in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="lib.Integers.html#modulus">modulus</a> [definition, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#modulus_pos">modulus_pos</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#modu_and">modu_and</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#modu_divu">modu_divu</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Values.html#modu_divu">modu_divu</a> [lemma, in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="lib.Integers.html#modu_divu_Euclid">modu_divu_Euclid</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Values.html#modu_pow2">modu_pow2</a> [lemma, in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.Cmconstr.html#mod_aux">mod_aux</a> [definition, in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="lib.Integers.html#mod_in_range">mod_in_range</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.RTLgen.html#mon">mon</a> [definition, in <a href="backend.RTLgen.html">backend.RTLgen</a>]<br/>
+<a href="lib.Integers.html#mone">mone</a> [definition, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#mone_max_unsigned">mone_max_unsigned</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Mach.html#Mop">Mop</a> [constructor, in <a href="backend.Mach.html">backend.Mach</a>]<br/>
+<a href="backend.RTLgen.html#more_likely">more_likely</a> [axiom, in <a href="backend.RTLgen.html">backend.RTLgen</a>]<br/>
+<a href="backend.Parallelmove.html#Move">Move</a> [definition, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#Moves">Moves</a> [definition, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Alloctyping_aux.html#move_types_res">move_types_res</a> [lemma, in <a href="backend.Alloctyping_aux.html">backend.Alloctyping_aux</a>]<br/>
+<a href="backend.Alloctyping_aux.html#move_types_stepf">move_types_stepf</a> [lemma, in <a href="backend.Alloctyping_aux.html">backend.Alloctyping_aux</a>]<br/>
+<a href="backend.Locations.html#mreg">mreg</a> [inductive, in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Lineartyping.html#mreg_bounded">mreg_bounded</a> [definition, in <a href="backend.Lineartyping.html">backend.Lineartyping</a>]<br/>
+<a href="backend.Locations.html#mreg_eq">mreg_eq</a> [lemma, in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Linearizetyping.html#mreg_is_bounded">mreg_is_bounded</a> [lemma, in <a href="backend.Linearizetyping.html">backend.Linearizetyping</a>]<br/>
+<a href="backend.Locations.html#mreg_type">mreg_type</a> [definition, in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Mach.html#Mreturn">Mreturn</a> [constructor, in <a href="backend.Mach.html">backend.Mach</a>]<br/>
+<a href="backend.Mach.html#Msetstack">Msetstack</a> [constructor, in <a href="backend.Mach.html">backend.Mach</a>]<br/>
+<a href="backend.Mach.html#Mstore">Mstore</a> [constructor, in <a href="backend.Mach.html">backend.Mach</a>]<br/>
+<a href="lib.Floats.html#mul">mul</a> [axiom, in <a href="lib.Floats.html">lib.Floats</a>]<br/>
+<a href="lib.Integers.html#mul">mul</a> [definition, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Cmconstr.html#mul">mul</a> [definition, in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Values.html#mul">mul</a> [definition, in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.Cmconstr.html#mulf">mulf</a> [definition, in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Values.html#mulf">mulf</a> [definition, in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.Cmconstr.html#mulimm">mulimm</a> [definition, in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Cmconstr.html#mulimm_base">mulimm_base</a> [definition, in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Cmconstr.html#mulimm_cases">mulimm_cases</a> [inductive, in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Cmconstr.html#mulimm_case1">mulimm_case1</a> [constructor, in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Cmconstr.html#mulimm_case2">mulimm_case2</a> [constructor, in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Cmconstr.html#mulimm_default">mulimm_default</a> [constructor, in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Cmconstr.html#mulimm_match">mulimm_match</a> [definition, in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Kildall.html#multiple_predecessors">multiple_predecessors</a> [lemma, in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="lib.Integers.html#mul_add_distr_l">mul_add_distr_l</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Values.html#mul_add_distr_l">mul_add_distr_l</a> [lemma, in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="lib.Integers.html#mul_add_distr_r">mul_add_distr_r</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Values.html#mul_add_distr_r">mul_add_distr_r</a> [lemma, in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="lib.Integers.html#mul_assoc">mul_assoc</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Values.html#mul_assoc">mul_assoc</a> [lemma, in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.Cmconstr.html#mul_cases">mul_cases</a> [inductive, in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Cmconstr.html#mul_case1">mul_case1</a> [constructor, in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Cmconstr.html#mul_case2">mul_case2</a> [constructor, in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Values.html#mul_commut">mul_commut</a> [lemma, in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="lib.Integers.html#mul_commut">mul_commut</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Cmconstr.html#mul_default">mul_default</a> [constructor, in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Cmconstr.html#mul_match">mul_match</a> [definition, in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Cmconstr.html#mul_match_aux">mul_match_aux</a> [definition, in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="lib.Integers.html#mul_one">mul_one</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#mul_pow2">mul_pow2</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Values.html#mul_pow2">mul_pow2</a> [lemma, in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="lib.Integers.html#mul_zero">mul_zero</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.RTLgen.html#mutated_condexpr">mutated_condexpr</a> [definition, in <a href="backend.RTLgen.html">backend.RTLgen</a>]<br/>
+<a href="backend.RTLgen.html#mutated_expr">mutated_expr</a> [definition, in <a href="backend.RTLgen.html">backend.RTLgen</a>]<br/>
+<a href="backend.RTLgen.html#mutated_exprlist">mutated_exprlist</a> [definition, in <a href="backend.RTLgen.html">backend.RTLgen</a>]<br/>
+<a href="backend.RTLgenproof1.html#mutated_reg">mutated_reg</a> [definition, in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.RTLgenproof1.html#mutated_reg_in_map">mutated_reg_in_map</a> [lemma, in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.RTLtyping.html#mymap">mymap</a> [module, in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.RTLtyping.html#myreg">myreg</a> [module, in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.RTLtyping.html#myT">myT</a> [inductive, in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<br/><br/><a name="global_N"></a><h2>N </h2>
+<a href="backend.Op.html#n">n</a> [constructor, in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="lib.Inclusion.html#nat_le_bool">nat_le_bool</a> [definition, in <a href="lib.Inclusion.html">lib.Inclusion</a>]<br/>
+<a href="backend.Values.html#neg">neg</a> [definition, in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="lib.Integers.html#neg">neg</a> [definition, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Floats.html#neg">neg</a> [axiom, in <a href="lib.Floats.html">lib.Floats</a>]<br/>
+<a href="backend.Values.html#negate_cmp">negate_cmp</a> [lemma, in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="lib.Integers.html#negate_cmp">negate_cmp</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Values.html#negate_cmpf_eq">negate_cmpf_eq</a> [lemma, in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="lib.Integers.html#negate_cmpu">negate_cmpu</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Values.html#negate_cmpu">negate_cmpu</a> [lemma, in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.Values.html#negate_cmp_mismatch">negate_cmp_mismatch</a> [lemma, in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.AST.html#negate_comparison">negate_comparison</a> [definition, in <a href="backend.AST.html">backend.AST</a>]<br/>
+<a href="backend.Op.html#negate_condition">negate_condition</a> [definition, in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Values.html#negf">negf</a> [definition, in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.Cmconstr.html#negfloat">negfloat</a> [definition, in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Cmconstr.html#negint">negint</a> [definition, in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Values.html#neg_add_distr">neg_add_distr</a> [lemma, in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="lib.Integers.html#neg_add_distr">neg_add_distr</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#neg_mul_distr_l">neg_mul_distr_l</a> [axiom, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#neg_mul_distr_r">neg_mul_distr_r</a> [axiom, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#neg_repr">neg_repr</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#neg_zero">neg_zero</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Values.html#neg_zero">neg_zero</a> [lemma, in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.Parallelmove.html#neq_is_neq">neq_is_neq</a> [lemma, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.RTLgen.html#new_reg">new_reg</a> [definition, in <a href="backend.RTLgen.html">backend.RTLgen</a>]<br/>
+<a href="backend.RTLgenproof1.html#new_reg_fresh">new_reg_fresh</a> [lemma, in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.RTLgenproof1.html#new_reg_incr">new_reg_incr</a> [lemma, in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.RTLgenproof1.html#new_reg_not_in_map">new_reg_not_in_map</a> [lemma, in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.RTLgenproof1.html#new_reg_not_mutated">new_reg_not_mutated</a> [lemma, in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.RTLgenproof1.html#new_reg_return_ok">new_reg_return_ok</a> [lemma, in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.RTLgenproof1.html#new_reg_valid">new_reg_valid</a> [lemma, in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.PPC.html#nextinstr">nextinstr</a> [definition, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPCgenproof1.html#nextinstr_inv">nextinstr_inv</a> [lemma, in <a href="backend.PPCgenproof1.html">backend.PPCgenproof1</a>]<br/>
+<a href="backend.PPCgenproof1.html#nextinstr_set_preg">nextinstr_set_preg</a> [lemma, in <a href="backend.PPCgenproof1.html">backend.PPCgenproof1</a>]<br/>
+<a href="backend.Parallelmove.html#nil">nil</a> [definition, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#nil">nil</a> [definition, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#nil">nil</a> [definition, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#nil">nil</a> [definition, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#nil">nil</a> [definition, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#nil">nil</a> [definition, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#nil">nil</a> [definition, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#nil">nil</a> [definition, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#nil">nil</a> [definition, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#nil">nil</a> [definition, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Allocproof_aux.html#nil">nil</a> [definition, in <a href="backend.Allocproof_aux.html">backend.Allocproof_aux</a>]<br/>
+<a href="backend.Parallelmove.html#nil">nil</a> [definition, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#nil">nil</a> [definition, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#nil">nil</a> [definition, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#nil">nil</a> [definition, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#nil">nil</a> [definition, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#nil">nil</a> [definition, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#nil">nil</a> [definition, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="lib.Maps.html#NIndexed">NIndexed</a> [module, in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Maps.html#NMap">NMap</a> [module, in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Maps.html#Node">Node</a> [constructor, in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="backend.RTL.html#node">node</a> [definition, in <a href="backend.RTL.html">backend.RTL</a>]<br/>
+<a href="backend.LTL.html#node">node</a> [definition, in <a href="backend.LTL.html">backend.LTL</a>]<br/>
+<a href="lib.Inclusion.html#node">node</a> [constructor, in <a href="lib.Inclusion.html">lib.Inclusion</a>]<br/>
+<a href="backend.Locations.html#non_overlap_diff">non_overlap_diff</a> [lemma, in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Parallelmove.html#NoOverlap">NoOverlap</a> [definition, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#noOverlap">noOverlap</a> [definition, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#noOverlapaux_insert">noOverlapaux_insert</a> [lemma, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#noOverlapaux_swap2">noOverlapaux_swap2</a> [lemma, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#noOverlap_aux">noOverlap_aux</a> [definition, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#noOverlap_auxpop">noOverlap_auxpop</a> [lemma, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#noOverlap_auxPop">noOverlap_auxPop</a> [lemma, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#noOverlap_aux_app">noOverlap_aux_app</a> [lemma, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#noOverlap_Front0">noOverlap_Front0</a> [lemma, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#noOverlap_head">noOverlap_head</a> [lemma, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#noOverlap_insert">noOverlap_insert</a> [lemma, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#noOverlap_movBack">noOverlap_movBack</a> [lemma, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#noOverlap_movBack0">noOverlap_movBack0</a> [lemma, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#noOverlap_movFront">noOverlap_movFront</a> [lemma, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#noOverlap_nil">noOverlap_nil</a> [lemma, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#noOverlap_Pop">noOverlap_Pop</a> [lemma, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#noOverlap_pop">noOverlap_pop</a> [lemma, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#noOverlap_right">noOverlap_right</a> [lemma, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#noOverlap_swap">noOverlap_swap</a> [lemma, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#noO_diff">noO_diff</a> [lemma, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Allocproof_aux.html#noO_list_pnilnil">noO_list_pnilnil</a> [lemma, in <a href="backend.Allocproof_aux.html">backend.Allocproof_aux</a>]<br/>
+<a href="backend.Parallelmove.html#noRead">noRead</a> [definition, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#noRead_app">noRead_app</a> [lemma, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#noRead_by_path">noRead_by_path</a> [lemma, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Locations.html#norepet">norepet</a> [inductive, in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Locations.html#norepet_cons">norepet_cons</a> [constructor, in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Locations.html#norepet_nil">norepet_nil</a> [constructor, in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Allocproof_aux.html#norepet_SD">norepet_SD</a> [lemma, in <a href="backend.Allocproof_aux.html">backend.Allocproof_aux</a>]<br/>
+<a href="lib.Integers.html#not">not</a> [definition, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Values.html#notbool">notbool</a> [definition, in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.Cmconstr.html#notbool">notbool</a> [definition, in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="lib.Integers.html#notbool">notbool</a> [definition, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Cmconstr.html#notbool_base">notbool_base</a> [definition, in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Values.html#notbool_idem2">notbool_idem2</a> [lemma, in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.Values.html#notbool_idem3">notbool_idem3</a> [lemma, in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="lib.Integers.html#notbool_isfalse_istrue">notbool_isfalse_istrue</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#notbool_istrue_isfalse">notbool_istrue_isfalse</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Values.html#notbool_is_bool">notbool_is_bool</a> [lemma, in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.Values.html#notbool_negb_1">notbool_negb_1</a> [lemma, in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.Values.html#notbool_negb_2">notbool_negb_2</a> [lemma, in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.Values.html#notbool_xor">notbool_xor</a> [lemma, in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.Parallelmove.html#notemporary">notemporary</a> [definition, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Locations.html#notin">notin</a> [definition, in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Parallelmove.html#notindst_nW">notindst_nW</a> [lemma, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Values.html#notint">notint</a> [definition, in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.Cmconstr.html#notint">notint</a> [definition, in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Cmconstr.html#notint_cases">notint_cases</a> [inductive, in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Cmconstr.html#notint_case1">notint_case1</a> [constructor, in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Cmconstr.html#notint_case2">notint_case2</a> [constructor, in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Cmconstr.html#notint_case3">notint_case3</a> [constructor, in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Cmconstr.html#notint_default">notint_default</a> [constructor, in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Cmconstr.html#notint_match">notint_match</a> [definition, in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Machabstr2mach.html#notin_callstack">notin_callstack</a> [inductive, in <a href="backend.Machabstr2mach.html">backend.Machabstr2mach</a>]<br/>
+<a href="backend.Machabstr2mach.html#notin_callstack_cons">notin_callstack_cons</a> [constructor, in <a href="backend.Machabstr2mach.html">backend.Machabstr2mach</a>]<br/>
+<a href="backend.Machabstr2mach.html#notin_callstack_nil">notin_callstack_nil</a> [constructor, in <a href="backend.Machabstr2mach.html">backend.Machabstr2mach</a>]<br/>
+<a href="backend.Locations.html#notin_disjoint">notin_disjoint</a> [lemma, in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Locations.html#notin_not_in">notin_not_in</a> [lemma, in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Parallelmove.html#noTmp">noTmp</a> [definition, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#noTmpLast">noTmpLast</a> [definition, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#noTmpLast_lastnoTmp">noTmpLast_lastnoTmp</a> [lemma, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#noTmpLast_Pop">noTmpLast_Pop</a> [lemma, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#noTmpLast_pop">noTmpLast_pop</a> [lemma, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#noTmpLast_popBack">noTmpLast_popBack</a> [lemma, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#noTmpLast_push">noTmpLast_push</a> [lemma, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#noTmpLast_tmpLast">noTmpLast_tmpLast</a> [lemma, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#noTmpL_diff">noTmpL_diff</a> [lemma, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#noTmp_app">noTmp_app</a> [lemma, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#noTmp_append">noTmp_append</a> [lemma, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#noTmP_noOverlap_aux">noTmP_noOverlap_aux</a> [lemma, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#noTmp_noReadTmp">noTmp_noReadTmp</a> [lemma, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#noTmp_noTmpLast">noTmp_noTmpLast</a> [lemma, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#noTmp_pop">noTmp_pop</a> [lemma, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Constprop.html#Novalue">Novalue</a> [constructor, in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Parallelmove.html#noWrite">noWrite</a> [definition, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#noWrite_in">noWrite_in</a> [lemma, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#noWrite_insert">noWrite_insert</a> [lemma, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#noWrite_movFront">noWrite_movFront</a> [lemma, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#noWrite_pop">noWrite_pop</a> [lemma, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#noWrite_swap">noWrite_swap</a> [lemma, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#noWrite_tmpLast">noWrite_tmpLast</a> [lemma, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#no_overlap">no_overlap</a> [definition, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Locations.html#no_overlap">no_overlap</a> [definition, in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Allocproof_aux.html#no_overlapD_inv">no_overlapD_inv</a> [lemma, in <a href="backend.Allocproof_aux.html">backend.Allocproof_aux</a>]<br/>
+<a href="backend.Allocproof_aux.html#no_overlapD_invf">no_overlapD_invf</a> [lemma, in <a href="backend.Allocproof_aux.html">backend.Allocproof_aux</a>]<br/>
+<a href="backend.Allocproof_aux.html#no_overlapD_invpp">no_overlapD_invpp</a> [lemma, in <a href="backend.Allocproof_aux.html">backend.Allocproof_aux</a>]<br/>
+<a href="backend.Allocproof_aux.html#no_overlapD_res">no_overlapD_res</a> [lemma, in <a href="backend.Allocproof_aux.html">backend.Allocproof_aux</a>]<br/>
+<a href="backend.Conventions.html#no_overlap_arguments">no_overlap_arguments</a> [lemma, in <a href="backend.Conventions.html">backend.Conventions</a>]<br/>
+<a href="backend.Parallelmove.html#no_overlap_list">no_overlap_list</a> [definition, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Allocproof_aux.html#no_overlap_list_pop">no_overlap_list_pop</a> [lemma, in <a href="backend.Allocproof_aux.html">backend.Allocproof_aux</a>]<br/>
+<a href="backend.Parallelmove.html#no_overlap_noOverlap">no_overlap_noOverlap</a> [lemma, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Conventions.html#no_overlap_parameters">no_overlap_parameters</a> [lemma, in <a href="backend.Conventions.html">backend.Conventions</a>]<br/>
+<a href="backend.Parallelmove.html#no_overlap_state">no_overlap_state</a> [definition, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Allocproof_aux.html#no_overlap_stateD">no_overlap_stateD</a> [definition, in <a href="backend.Allocproof_aux.html">backend.Allocproof_aux</a>]<br/>
+<a href="backend.Allocproof_aux.html#no_overlap_temp">no_overlap_temp</a> [lemma, in <a href="backend.Allocproof_aux.html">backend.Allocproof_aux</a>]<br/>
+<a href="backend.Kildall.html#no_self_loop">no_self_loop</a> [lemma, in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.Allocproof_aux.html#no_tmp13_state">no_tmp13_state</a> [definition, in <a href="backend.Allocproof_aux.html">backend.Allocproof_aux</a>]<br/>
+<a href="lib.Coqlib.html#nth_error_in">nth_error_in</a> [lemma, in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="lib.Coqlib.html#nth_error_nil">nth_error_nil</a> [lemma, in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="backend.Mem.html#nullptr">nullptr</a> [definition, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.CSE.html#Numbering">Numbering</a> [module, in <a href="backend.CSE.html">backend.CSE</a>]<br/>
+<a href="backend.CSE.html#numbering">numbering</a> [inductive, in <a href="backend.CSE.html">backend.CSE</a>]<br/>
+<a href="backend.CSE.html#numbering_holds">numbering_holds</a> [definition, in <a href="backend.CSE.html">backend.CSE</a>]<br/>
+<a href="backend.CSEproof.html#numbering_holds_exten">numbering_holds_exten</a> [lemma, in <a href="backend.CSEproof.html">backend.CSEproof</a>]<br/>
+<a href="backend.CSE.html#numbering_satisfiable">numbering_satisfiable</a> [definition, in <a href="backend.CSE.html">backend.CSE</a>]<br/>
+<a href="backend.Kildall.html#num_iterations">num_iterations</a> [definition, in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<br/><br/><a name="global_O"></a><h2>O </h2>
+<a href="backend.Op.html#Oabsf">Oabsf</a> [constructor, in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Csharpminor.html#Oabsf">Oabsf</a> [constructor, in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Csharpminor.html#Oadd">Oadd</a> [constructor, in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Op.html#Oadd">Oadd</a> [constructor, in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Csharpminor.html#Oaddf">Oaddf</a> [constructor, in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Op.html#Oaddf">Oaddf</a> [constructor, in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Op.html#Oaddimm">Oaddimm</a> [constructor, in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Op.html#Oaddrstack">Oaddrstack</a> [constructor, in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Op.html#Oaddrsymbol">Oaddrsymbol</a> [constructor, in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Op.html#Oand">Oand</a> [constructor, in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Csharpminor.html#Oand">Oand</a> [constructor, in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Op.html#Oandimm">Oandimm</a> [constructor, in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Csharpminor.html#Ocast16signed">Ocast16signed</a> [constructor, in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Op.html#Ocast16signed">Ocast16signed</a> [constructor, in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Csharpminor.html#Ocast16unsigned">Ocast16unsigned</a> [constructor, in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Csharpminor.html#Ocast8signed">Ocast8signed</a> [constructor, in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Op.html#Ocast8signed">Ocast8signed</a> [constructor, in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Csharpminor.html#Ocast8unsigned">Ocast8unsigned</a> [constructor, in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Op.html#Ocmp">Ocmp</a> [constructor, in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Csharpminor.html#Ocmp">Ocmp</a> [constructor, in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Csharpminor.html#Ocmpf">Ocmpf</a> [constructor, in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Csharpminor.html#Ocmpu">Ocmpu</a> [constructor, in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Op.html#Odiv">Odiv</a> [constructor, in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Csharpminor.html#Odiv">Odiv</a> [constructor, in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Op.html#Odivf">Odivf</a> [constructor, in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Csharpminor.html#Odivf">Odivf</a> [constructor, in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Csharpminor.html#Odivu">Odivu</a> [constructor, in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Op.html#Odivu">Odivu</a> [constructor, in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Stacking.html#offset_of_index">offset_of_index</a> [definition, in <a href="backend.Stacking.html">backend.Stacking</a>]<br/>
+<a href="backend.Stackingproof.html#offset_of_index_disj">offset_of_index_disj</a> [lemma, in <a href="backend.Stackingproof.html">backend.Stackingproof</a>]<br/>
+<a href="backend.Stackingproof.html#offset_of_index_no_overflow">offset_of_index_no_overflow</a> [lemma, in <a href="backend.Stackingproof.html">backend.Stackingproof</a>]<br/>
+<a href="backend.Stackingproof.html#offset_of_index_valid">offset_of_index_valid</a> [lemma, in <a href="backend.Stackingproof.html">backend.Stackingproof</a>]<br/>
+<a href="backend.Op.html#offset_sp">offset_sp</a> [definition, in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Op.html#Ofloatconst">Ofloatconst</a> [constructor, in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Csharpminor.html#Ofloatconst">Ofloatconst</a> [constructor, in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Op.html#Ofloatofint">Ofloatofint</a> [constructor, in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Csharpminor.html#Ofloatofint">Ofloatofint</a> [constructor, in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Csharpminor.html#Ofloatofintu">Ofloatofintu</a> [constructor, in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Op.html#Ofloatofintu">Ofloatofintu</a> [constructor, in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Values.html#of_bool">of_bool</a> [definition, in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.Values.html#of_bool_is_bool">of_bool_is_bool</a> [lemma, in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.Csharpminor.html#Ointconst">Ointconst</a> [constructor, in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Op.html#Ointconst">Ointconst</a> [constructor, in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Csharpminor.html#Ointoffloat">Ointoffloat</a> [constructor, in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Op.html#Ointoffloat">Ointoffloat</a> [constructor, in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.RTLgen.html#OK">OK</a> [constructor, in <a href="backend.RTLgen.html">backend.RTLgen</a>]<br/>
+<a href="backend.PPC.html#OK">OK</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.Csharpminor.html#Omod">Omod</a> [constructor, in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Csharpminor.html#Omodu">Omodu</a> [constructor, in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Op.html#Omove">Omove</a> [constructor, in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Csharpminor.html#Omul">Omul</a> [constructor, in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Op.html#Omul">Omul</a> [constructor, in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Op.html#Omuladdf">Omuladdf</a> [constructor, in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Op.html#Omulf">Omulf</a> [constructor, in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Csharpminor.html#Omulf">Omulf</a> [constructor, in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Op.html#Omulimm">Omulimm</a> [constructor, in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Op.html#Omulsubf">Omulsubf</a> [constructor, in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Op.html#Onand">Onand</a> [constructor, in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="lib.Integers.html#one">one</a> [definition, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Floats.html#one">one</a> [axiom, in <a href="lib.Floats.html">lib.Floats</a>]<br/>
+<a href="backend.Csharpminor.html#Onegf">Onegf</a> [constructor, in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Op.html#Onegf">Onegf</a> [constructor, in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="lib.Integers.html#one_bits">one_bits</a> [definition, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#one_bits_decomp">one_bits_decomp</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#one_bits_range">one_bits_range</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#one_not_zero">one_not_zero</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Op.html#Onor">Onor</a> [constructor, in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Csharpminor.html#Onotint">Onotint</a> [constructor, in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Op.html#Onxor">Onxor</a> [constructor, in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Op.html#Oor">Oor</a> [constructor, in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Csharpminor.html#Oor">Oor</a> [constructor, in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Op.html#Oorimm">Oorimm</a> [constructor, in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.CSE.html#Op">Op</a> [constructor, in <a href="backend.CSE.html">backend.CSE</a>]<br/>
+<a href="backend.Op.html">Op</a> [library]<br/>
+<a href="backend.Csharpminor.html#operation">operation</a> [inductive, in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Op.html#operation">operation</a> [inductive, in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.RTLtyping.html#option_fold2">option_fold2</a> [definition, in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="lib.Coqlib.html#option_map">option_map</a> [definition, in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="lib.union_find.html#option_sum">option_sum</a> [lemma, in <a href="lib.union_find.html">lib.union_find</a>]<br/>
+<a href="backend.Constprop.html#op_strength_reduction">op_strength_reduction</a> [definition, in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#op_strength_reduction_cases">op_strength_reduction_cases</a> [inductive, in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#op_strength_reduction_case1">op_strength_reduction_case1</a> [constructor, in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#op_strength_reduction_case10">op_strength_reduction_case10</a> [constructor, in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#op_strength_reduction_case11">op_strength_reduction_case11</a> [constructor, in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#op_strength_reduction_case12">op_strength_reduction_case12</a> [constructor, in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#op_strength_reduction_case2">op_strength_reduction_case2</a> [constructor, in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#op_strength_reduction_case3">op_strength_reduction_case3</a> [constructor, in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#op_strength_reduction_case4">op_strength_reduction_case4</a> [constructor, in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#op_strength_reduction_case5">op_strength_reduction_case5</a> [constructor, in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#op_strength_reduction_case6">op_strength_reduction_case6</a> [constructor, in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#op_strength_reduction_case7">op_strength_reduction_case7</a> [constructor, in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#op_strength_reduction_case8">op_strength_reduction_case8</a> [constructor, in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#op_strength_reduction_case9">op_strength_reduction_case9</a> [constructor, in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constpropproof.html#op_strength_reduction_correct">op_strength_reduction_correct</a> [lemma, in <a href="backend.Constpropproof.html">backend.Constpropproof</a>]<br/>
+<a href="backend.Constprop.html#op_strength_reduction_default">op_strength_reduction_default</a> [constructor, in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#op_strength_reduction_match">op_strength_reduction_match</a> [definition, in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="lib.Integers.html#or">or</a> [definition, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Values.html#or">or</a> [definition, in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.Cmconstr.html#or">or</a> [definition, in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="lib.Ordered.html">Ordered</a> [library]<br/>
+<a href="lib.Ordered.html#OrderedIndexed">OrderedIndexed</a> [module, in <a href="lib.Ordered.html">lib.Ordered</a>]<br/>
+<a href="backend.InterfGraph.html#OrderedMreg">OrderedMreg</a> [module, in <a href="backend.InterfGraph.html">backend.InterfGraph</a>]<br/>
+<a href="lib.Ordered.html#OrderedPair">OrderedPair</a> [module, in <a href="lib.Ordered.html">lib.Ordered</a>]<br/>
+<a href="lib.Ordered.html#OrderedPositive">OrderedPositive</a> [module, in <a href="lib.Ordered.html">lib.Ordered</a>]<br/>
+<a href="backend.InterfGraph.html#OrderedReg">OrderedReg</a> [module, in <a href="backend.InterfGraph.html">backend.InterfGraph</a>]<br/>
+<a href="backend.InterfGraph.html#OrderedRegMreg">OrderedRegMreg</a> [module, in <a href="backend.InterfGraph.html">backend.InterfGraph</a>]<br/>
+<a href="backend.InterfGraph.html#OrderedRegReg">OrderedRegReg</a> [module, in <a href="backend.InterfGraph.html">backend.InterfGraph</a>]<br/>
+<a href="backend.InterfGraph.html#ordered_pair">ordered_pair</a> [definition, in <a href="backend.InterfGraph.html">backend.InterfGraph</a>]<br/>
+<a href="backend.InterfGraph.html#ordered_pair_charact">ordered_pair_charact</a> [lemma, in <a href="backend.InterfGraph.html">backend.InterfGraph</a>]<br/>
+<a href="backend.InterfGraph.html#ordered_pair_sym">ordered_pair_sym</a> [lemma, in <a href="backend.InterfGraph.html">backend.InterfGraph</a>]<br/>
+<a href="backend.Kildall.html#ORDERED_TYPE_WITH_TOP">ORDERED_TYPE_WITH_TOP</a> [module, in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.PPCgen.html#orimm">orimm</a> [definition, in <a href="backend.PPCgen.html">backend.PPCgen</a>]<br/>
+<a href="backend.PPCgenproof1.html#orimm_correct">orimm_correct</a> [lemma, in <a href="backend.PPCgenproof1.html">backend.PPCgenproof1</a>]<br/>
+<a href="backend.Op.html#Orolm">Orolm</a> [constructor, in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="lib.Integers.html#or_assoc">or_assoc</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Values.html#or_assoc">or_assoc</a> [lemma, in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.Cmconstr.html#or_cases">or_cases</a> [inductive, in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Cmconstr.html#or_case1">or_case1</a> [constructor, in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="lib.Integers.html#or_commut">or_commut</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Values.html#or_commut">or_commut</a> [lemma, in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.Cmconstr.html#or_default">or_default</a> [constructor, in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="lib.Integers.html#or_idem">or_idem</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Cmconstr.html#or_match">or_match</a> [definition, in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="lib.Integers.html#or_mone">or_mone</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Values.html#or_of_bool">or_of_bool</a> [lemma, in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="lib.Integers.html#or_rolm">or_rolm</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Values.html#or_rolm">or_rolm</a> [lemma, in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="lib.Integers.html#or_zero">or_zero</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Csharpminor.html#Oshl">Oshl</a> [constructor, in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Op.html#Oshl">Oshl</a> [constructor, in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Op.html#Oshr">Oshr</a> [constructor, in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Csharpminor.html#Oshr">Oshr</a> [constructor, in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Op.html#Oshrimm">Oshrimm</a> [constructor, in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Op.html#Oshru">Oshru</a> [constructor, in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Csharpminor.html#Oshru">Oshru</a> [constructor, in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Op.html#Oshrximm">Oshrximm</a> [constructor, in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Op.html#Osingleoffloat">Osingleoffloat</a> [constructor, in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Csharpminor.html#Osingleoffloat">Osingleoffloat</a> [constructor, in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Csharpminor.html#Osub">Osub</a> [constructor, in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Op.html#Osub">Osub</a> [constructor, in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Csharpminor.html#Osubf">Osubf</a> [constructor, in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Op.html#Osubf">Osubf</a> [constructor, in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Op.html#Osubimm">Osubimm</a> [constructor, in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Op.html#Oundef">Oundef</a> [constructor, in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Cminor.html#outcome">outcome</a> [inductive, in <a href="backend.Cminor.html">backend.Cminor</a>]<br/>
+<a href="backend.LTL.html#outcome">outcome</a> [inductive, in <a href="backend.LTL.html">backend.LTL</a>]<br/>
+<a href="backend.PPC.html#outcome">outcome</a> [inductive, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.Csharpminor.html#outcome">outcome</a> [inductive, in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Csharpminor.html#outcome_block">outcome_block</a> [definition, in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Cminor.html#outcome_block">outcome_block</a> [definition, in <a href="backend.Cminor.html">backend.Cminor</a>]<br/>
+<a href="backend.Cminorgenproof.html#outcome_inject">outcome_inject</a> [inductive, in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.RTLgenproof.html#outcome_node">outcome_node</a> [definition, in <a href="backend.RTLgenproof.html">backend.RTLgenproof</a>]<br/>
+<a href="backend.Cminor.html#outcome_result_value">outcome_result_value</a> [definition, in <a href="backend.Cminor.html">backend.Cminor</a>]<br/>
+<a href="backend.Csharpminor.html#outcome_result_value">outcome_result_value</a> [definition, in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Locations.html#Outgoing">Outgoing</a> [constructor, in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Lineartyping.html#outgoing_slot">outgoing_slot</a> [definition, in <a href="backend.Lineartyping.html">backend.Lineartyping</a>]<br/>
+<a href="backend.Linearizetyping.html#outgoing_slot_bound">outgoing_slot_bound</a> [lemma, in <a href="backend.Linearizetyping.html">backend.Linearizetyping</a>]<br/>
+<a href="backend.Lineartyping.html#outgoing_space">outgoing_space</a> [definition, in <a href="backend.Lineartyping.html">backend.Lineartyping</a>]<br/>
+<a href="backend.Csharpminor.html#Out_exit">Out_exit</a> [constructor, in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Cminor.html#Out_exit">Out_exit</a> [constructor, in <a href="backend.Cminor.html">backend.Cminor</a>]<br/>
+<a href="backend.Cminor.html#Out_normal">Out_normal</a> [constructor, in <a href="backend.Cminor.html">backend.Cminor</a>]<br/>
+<a href="backend.Csharpminor.html#Out_normal">Out_normal</a> [constructor, in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Cminor.html#Out_return">Out_return</a> [constructor, in <a href="backend.Cminor.html">backend.Cminor</a>]<br/>
+<a href="backend.Csharpminor.html#Out_return">Out_return</a> [constructor, in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Locations.html#overlap">overlap</a> [definition, in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Locations.html#overlap_aux">overlap_aux</a> [definition, in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Locations.html#overlap_aux_false_1">overlap_aux_false_1</a> [lemma, in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Locations.html#overlap_aux_true_1">overlap_aux_true_1</a> [lemma, in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Locations.html#overlap_aux_true_2">overlap_aux_true_2</a> [lemma, in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Locations.html#overlap_not_diff">overlap_not_diff</a> [lemma, in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Op.html#Oxor">Oxor</a> [constructor, in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Csharpminor.html#Oxor">Oxor</a> [constructor, in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Op.html#Oxorimm">Oxorimm</a> [constructor, in <a href="backend.Op.html">backend.Op</a>]<br/>
+<br/><br/><a name="global_P"></a><h2>P </h2>
+<a href="backend.PPC.html#Padd">Padd</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Paddi">Paddi</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Paddis">Paddis</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Paddze">Paddze</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Pallocframe">Pallocframe</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Pandc">Pandc</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Pandis_">Pandis_</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Pandi_">Pandi_</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Pand_">Pand_</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.Parallelmove.html">Parallelmove</a> [library]<br/>
+<a href="backend.Allocation.html#parallel_move">parallel_move</a> [definition, in <a href="backend.Allocation.html">backend.Allocation</a>]<br/>
+<a href="backend.Allocproof.html#parallel_move_correct">parallel_move_correct</a> [lemma, in <a href="backend.Allocproof.html">backend.Allocproof</a>]<br/>
+<a href="backend.Allocproof_aux.html#parallel_move_correctX">parallel_move_correctX</a> [lemma, in <a href="backend.Allocproof_aux.html">backend.Allocproof_aux</a>]<br/>
+<a href="backend.Allocproof_aux.html#parallel_move_correct'">parallel_move_correct'</a> [lemma, in <a href="backend.Allocproof_aux.html">backend.Allocproof_aux</a>]<br/>
+<a href="backend.Allocation.html#parallel_move_order">parallel_move_order</a> [definition, in <a href="backend.Allocation.html">backend.Allocation</a>]<br/>
+<a href="backend.Conventions.html#parameter_of_argument">parameter_of_argument</a> [definition, in <a href="backend.Conventions.html">backend.Conventions</a>]<br/>
+<a href="backend.Parallelmove.html#path">path</a> [definition, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#path_pop">path_pop</a> [lemma, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#path_tmpLast">path_tmpLast</a> [lemma, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.PPC.html#Pb">Pb</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Pbctr">Pbctr</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Pbctrl">Pbctrl</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Pbf">Pbf</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Pbl">Pbl</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Pblr">Pblr</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Pbt">Pbt</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#PC">PC</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Pcmplw">Pcmplw</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Pcmplwi">Pcmplwi</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Pcmpw">Pcmpw</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Pcmpwi">Pcmpwi</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Pcror">Pcror</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Pdivw">Pdivw</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Pdivwu">Pdivwu</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="lib.Coqlib.html#peq">peq</a> [definition, in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="backend.PPC.html#Peqv">Peqv</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="lib.Coqlib.html#peq_false">peq_false</a> [lemma, in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="lib.Coqlib.html#peq_true">peq_true</a> [lemma, in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="backend.Parallelmove.html#pexec">pexec</a> [definition, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#pexec_add">pexec_add</a> [lemma, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#pexec_correct">pexec_correct</a> [lemma, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#pexec_mov">pexec_mov</a> [lemma, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#pexec_movBack">pexec_movBack</a> [lemma, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#pexec_movFront">pexec_movFront</a> [lemma, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#pexec_nop">pexec_nop</a> [lemma, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#pexec_push">pexec_push</a> [lemma, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#pexec_swap">pexec_swap</a> [lemma, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#pexec_update">pexec_update</a> [lemma, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.PPC.html#Pextsb">Pextsb</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Pextsh">Pextsh</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Pfabs">Pfabs</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Pfadd">Pfadd</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Pfcmpu">Pfcmpu</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Pfcti">Pfcti</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Pfdiv">Pfdiv</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Pfmadd">Pfmadd</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Pfmr">Pfmr</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Pfmsub">Pfmsub</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Pfmul">Pfmul</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Pfneg">Pfneg</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Pfreeframe">Pfreeframe</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Pfrsp">Pfrsp</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Pfsub">Pfsub</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Pfundef">Pfundef</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Pictf">Pictf</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Piuctf">Piuctf</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Piundef">Piundef</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Plabel">Plabel</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Plbz">Plbz</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Plbzx">Plbzx</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="lib.Coqlib.html#Ple">Ple</a> [definition, in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="lib.Coqlib.html#Ple_refl">Ple_refl</a> [lemma, in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="lib.Coqlib.html#Ple_succ">Ple_succ</a> [lemma, in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="lib.Coqlib.html#Ple_trans">Ple_trans</a> [lemma, in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="backend.PPC.html#Plfd">Plfd</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Plfdx">Plfdx</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Plfi">Plfi</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Plfs">Plfs</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Plfsx">Plfsx</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Plha">Plha</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Plhax">Plhax</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Plhz">Plhz</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Plhzx">Plhzx</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="lib.Coqlib.html#Plt">Plt</a> [definition, in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="lib.Coqlib.html#plt">plt</a> [definition, in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="lib.Coqlib.html#Plt_ne">Plt_ne</a> [lemma, in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="lib.Coqlib.html#Plt_Ple">Plt_Ple</a> [lemma, in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="lib.Coqlib.html#Plt_Ple_trans">Plt_Ple_trans</a> [lemma, in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="lib.Coqlib.html#Plt_strict">Plt_strict</a> [lemma, in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="lib.Coqlib.html#Plt_succ">Plt_succ</a> [lemma, in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="lib.Coqlib.html#Plt_succ_inv">Plt_succ_inv</a> [lemma, in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="lib.Coqlib.html#Plt_trans">Plt_trans</a> [lemma, in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="lib.Coqlib.html#Plt_trans_succ">Plt_trans_succ</a> [lemma, in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="lib.Coqlib.html#Plt_wf">Plt_wf</a> [lemma, in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="backend.PPC.html#Plwz">Plwz</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Plwzx">Plwzx</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="lib.Maps.html#PMap">PMap</a> [module, in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="backend.PPC.html#Pmfcrbit">Pmfcrbit</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Pmflr">Pmflr</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.Parallelmove.html#Pmov">Pmov</a> [definition, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#Pmov_equation">Pmov_equation</a> [lemma, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.PPC.html#Pmr">Pmr</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Pmtctr">Pmtctr</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Pmtlr">Pmtlr</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Pmulli">Pmulli</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Pmullw">Pmullw</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Pnand">Pnand</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Pnor">Pnor</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Por">Por</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Porc">Porc</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Pori">Pori</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Poris">Poris</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="lib.Coqlib.html#positive_Peano_ind">positive_Peano_ind</a> [lemma, in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="lib.Coqlib.html#positive_rec">positive_rec</a> [definition, in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="lib.Coqlib.html#positive_rec_base">positive_rec_base</a> [lemma, in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="lib.Coqlib.html#positive_rec_succ">positive_rec_succ</a> [lemma, in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="lib.Integers.html#powerserie">powerserie</a> [definition, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.PPC.html">PPC</a> [library]<br/>
+<a href="backend.PPCgen.html">PPCgen</a> [library]<br/>
+<a href="backend.PPCgenproof.html">PPCgenproof</a> [library]<br/>
+<a href="backend.PPCgenproof1.html">PPCgenproof1</a> [library]<br/>
+<a href="lib.Coqlib.html#Ppred_Plt">Ppred_Plt</a> [lemma, in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="backend.Kildall.html#predecessors">predecessors</a> [definition, in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.Kildall.html#predecessors_correct">predecessors_correct</a> [lemma, in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.PPC.html#preg">preg</a> [inductive, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#PregEq">PregEq</a> [module, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Pregmap">Pregmap</a> [module, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#preg_eq">preg_eq</a> [lemma, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPCgenproof1.html#preg_of">preg_of</a> [definition, in <a href="backend.PPCgenproof1.html">backend.PPCgenproof1</a>]<br/>
+<a href="backend.PPCgenproof1.html#preg_of_injective">preg_of_injective</a> [lemma, in <a href="backend.PPCgenproof1.html">backend.PPCgenproof1</a>]<br/>
+<a href="backend.PPCgenproof1.html#preg_of_is_data_reg">preg_of_is_data_reg</a> [lemma, in <a href="backend.PPCgenproof1.html">backend.PPCgenproof1</a>]<br/>
+<a href="backend.PPCgenproof1.html#preg_of_not">preg_of_not</a> [lemma, in <a href="backend.PPCgenproof1.html">backend.PPCgenproof1</a>]<br/>
+<a href="backend.PPCgenproof1.html#preg_of_not_GPR1">preg_of_not_GPR1</a> [lemma, in <a href="backend.PPCgenproof1.html">backend.PPCgenproof1</a>]<br/>
+<a href="backend.PPCgenproof1.html#preg_val">preg_val</a> [lemma, in <a href="backend.PPCgenproof1.html">backend.PPCgenproof1</a>]<br/>
+<a href="backend.PPC.html#Prlwinm">Prlwinm</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.LTL.html#program">program</a> [definition, in <a href="backend.LTL.html">backend.LTL</a>]<br/>
+<a href="backend.Cminor.html#program">program</a> [definition, in <a href="backend.Cminor.html">backend.Cminor</a>]<br/>
+<a href="backend.Linear.html#program">program</a> [definition, in <a href="backend.Linear.html">backend.Linear</a>]<br/>
+<a href="backend.AST.html#program">program</a> [inductive, in <a href="backend.AST.html">backend.AST</a>]<br/>
+<a href="backend.RTL.html#program">program</a> [definition, in <a href="backend.RTL.html">backend.RTL</a>]<br/>
+<a href="backend.Csharpminor.html#program">program</a> [definition, in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.PPC.html#program">program</a> [definition, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.Mach.html#program">program</a> [definition, in <a href="backend.Mach.html">backend.Mach</a>]<br/>
+<a href="backend.Tunnelingtyping.html#program_typing_preserved">program_typing_preserved</a> [lemma, in <a href="backend.Tunnelingtyping.html">backend.Tunnelingtyping</a>]<br/>
+<a href="backend.Linearizetyping.html#program_typing_preserved">program_typing_preserved</a> [lemma, in <a href="backend.Linearizetyping.html">backend.Linearizetyping</a>]<br/>
+<a href="backend.Alloctyping.html#program_typing_preserved">program_typing_preserved</a> [lemma, in <a href="backend.Alloctyping.html">backend.Alloctyping</a>]<br/>
+<a href="backend.Stackingtyping.html#program_typing_preserved">program_typing_preserved</a> [lemma, in <a href="backend.Stackingtyping.html">backend.Stackingtyping</a>]<br/>
+<a href="backend.Globalenvs.html#prog_funct_transf_OK">prog_funct_transf_OK</a> [lemma, in <a href="backend.Globalenvs.html">backend.Globalenvs</a>]<br/>
+<a href="lib.Coqlib.html#proof_irrelevance">proof_irrelevance</a> [axiom, in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="backend.Kildall.html#propagate_succ">propagate_succ</a> [definition, in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.Kildall.html#propagate_successors">propagate_successors</a> [definition, in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.Kildall.html#propagate_successors_charact1">propagate_successors_charact1</a> [lemma, in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.Kildall.html#propagate_successors_charact2">propagate_successors_charact2</a> [lemma, in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.Kildall.html#propagate_successors_invariant">propagate_successors_invariant</a> [lemma, in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.Kildall.html#propagate_successors_P">propagate_successors_P</a> [lemma, in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.Kildall.html#propagate_succ_charact">propagate_succ_charact</a> [lemma, in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.Kildall.html#propagate_succ_incr">propagate_succ_incr</a> [lemma, in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.Kildall.html#propagate_succ_incr_worklist">propagate_succ_incr_worklist</a> [lemma, in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.Kildall.html#propagate_succ_list">propagate_succ_list</a> [definition, in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.Kildall.html#propagate_succ_list_charact">propagate_succ_list_charact</a> [lemma, in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.Kildall.html#propagate_succ_list_incr">propagate_succ_list_incr</a> [lemma, in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.Kildall.html#propagate_succ_list_incr_worklist">propagate_succ_list_incr_worklist</a> [lemma, in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.Kildall.html#propagate_succ_list_records_changes">propagate_succ_list_records_changes</a> [lemma, in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.Kildall.html#propagate_succ_records_changes">propagate_succ_records_changes</a> [lemma, in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.PPC.html#Pslw">Pslw</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Psraw">Psraw</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Psrawi">Psrawi</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Psrw">Psrw</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.Kildall.html#Pstate">Pstate</a> [definition, in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.PPC.html#Pstb">Pstb</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Pstbx">Pstbx</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Pstfd">Pstfd</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Pstfdx">Pstfdx</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Pstfs">Pstfs</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Pstfsx">Pstfsx</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Psth">Psth</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Psthx">Psthx</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Pstw">Pstw</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Pstwx">Pstwx</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Psubfc">Psubfc</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Psubfic">Psubfic</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="lib.Maps.html#PTree">PTree</a> [module, in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="backend.PPC.html#Pxor">Pxor</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Pxori">Pxori</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Pxoris">Pxoris</a> [constructor, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.Allocproof_aux.html#p_move">p_move</a> [definition, in <a href="backend.Allocproof_aux.html">backend.Allocproof_aux</a>]<br/>
+<a href="backend.Parallelmove.html#P_move">P_move</a> [definition, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<br/><br/><a name="global_R"></a><h2>R </h2>
+<a href="backend.Locations.html#R">R</a> [constructor, in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Coloring.html#R">R</a> [definition, in <a href="backend.Coloring.html">backend.Coloring</a>]<br/>
+<a href="backend.Linearize.html#reachable">reachable</a> [definition, in <a href="backend.Linearize.html">backend.Linearize</a>]<br/>
+<a href="backend.Linearize.html#reachable_aux">reachable_aux</a> [definition, in <a href="backend.Linearize.html">backend.Linearize</a>]<br/>
+<a href="backend.Linearizeproof.html#reachable_correct_1">reachable_correct_1</a> [lemma, in <a href="backend.Linearizeproof.html">backend.Linearizeproof</a>]<br/>
+<a href="backend.Linearizeproof.html#reachable_correct_2">reachable_correct_2</a> [lemma, in <a href="backend.Linearizeproof.html">backend.Linearizeproof</a>]<br/>
+<a href="backend.Linearizeproof.html#reachable_entrypoint">reachable_entrypoint</a> [lemma, in <a href="backend.Linearizeproof.html">backend.Linearizeproof</a>]<br/>
+<a href="backend.Linearizeproof.html#reachable_successors">reachable_successors</a> [lemma, in <a href="backend.Linearizeproof.html">backend.Linearizeproof</a>]<br/>
+<a href="backend.Parallelmove.html#rebuild_l">rebuild_l</a> [lemma, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.CSE.html#refl_ge">refl_ge</a> [lemma, in <a href="backend.CSE.html">backend.CSE</a>]<br/>
+<a href="backend.Registers.html#Reg">Reg</a> [module, in <a href="backend.Registers.html">backend.Registers</a>]<br/>
+<a href="backend.Registers.html#reg">reg</a> [definition, in <a href="backend.Registers.html">backend.Registers</a>]<br/>
+<a href="backend.Parallelmove.html#Reg">Reg</a> [definition, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Coloring.html#regalloc">regalloc</a> [definition, in <a href="backend.Coloring.html">backend.Coloring</a>]<br/>
+<a href="backend.Coloringproof.html#regalloc_acceptable">regalloc_acceptable</a> [lemma, in <a href="backend.Coloringproof.html">backend.Coloringproof</a>]<br/>
+<a href="backend.Coloringproof.html#regalloc_correct_1">regalloc_correct_1</a> [lemma, in <a href="backend.Coloringproof.html">backend.Coloringproof</a>]<br/>
+<a href="backend.Coloringproof.html#regalloc_correct_2">regalloc_correct_2</a> [lemma, in <a href="backend.Coloringproof.html">backend.Coloringproof</a>]<br/>
+<a href="backend.Coloringproof.html#regalloc_correct_3">regalloc_correct_3</a> [lemma, in <a href="backend.Coloringproof.html">backend.Coloringproof</a>]<br/>
+<a href="backend.Allocproof.html#regalloc_disj_temporaries">regalloc_disj_temporaries</a> [lemma, in <a href="backend.Allocproof.html">backend.Allocproof</a>]<br/>
+<a href="backend.Allocproof.html#regalloc_norepet_norepet">regalloc_norepet_norepet</a> [lemma, in <a href="backend.Allocproof.html">backend.Allocproof</a>]<br/>
+<a href="backend.Allocproof.html#regalloc_noteq_diff">regalloc_noteq_diff</a> [lemma, in <a href="backend.Allocproof.html">backend.Allocproof</a>]<br/>
+<a href="backend.Allocproof.html#regalloc_notin_notin">regalloc_notin_notin</a> [lemma, in <a href="backend.Allocproof.html">backend.Allocproof</a>]<br/>
+<a href="backend.Allocproof.html#regalloc_not_temporary">regalloc_not_temporary</a> [lemma, in <a href="backend.Allocproof.html">backend.Allocproof</a>]<br/>
+<a href="backend.Coloringproof.html#regalloc_ok">regalloc_ok</a> [lemma, in <a href="backend.Coloringproof.html">backend.Coloringproof</a>]<br/>
+<a href="backend.Coloringproof.html#regalloc_preserves_types">regalloc_preserves_types</a> [lemma, in <a href="backend.Coloringproof.html">backend.Coloringproof</a>]<br/>
+<a href="backend.RTLtyping.html#regenv">regenv</a> [definition, in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.Mach.html#RegEq">RegEq</a> [module, in <a href="backend.Mach.html">backend.Mach</a>]<br/>
+<a href="backend.Registers.html">Registers</a> [library]<br/>
+<a href="backend.Conventions.html#register_classification">register_classification</a> [lemma, in <a href="backend.Conventions.html">backend.Conventions</a>]<br/>
+<a href="backend.LTL.html#reglist">reglist</a> [definition, in <a href="backend.LTL.html">backend.LTL</a>]<br/>
+<a href="backend.Mach.html#Regmap">Regmap</a> [module, in <a href="backend.Mach.html">backend.Mach</a>]<br/>
+<a href="backend.Registers.html#Regmap">Regmap</a> [module, in <a href="backend.Registers.html">backend.Registers</a>]<br/>
+<a href="backend.Registers.html#regmap_optget">regmap_optget</a> [definition, in <a href="backend.Registers.html">backend.Registers</a>]<br/>
+<a href="backend.Registers.html#regmap_optset">regmap_optset</a> [definition, in <a href="backend.Registers.html">backend.Registers</a>]<br/>
+<a href="backend.Coloringproof.html#regsalloc_acceptable">regsalloc_acceptable</a> [lemma, in <a href="backend.Coloringproof.html">backend.Coloringproof</a>]<br/>
+<a href="backend.Mach.html#regset">regset</a> [definition, in <a href="backend.Mach.html">backend.Mach</a>]<br/>
+<a href="backend.RTL.html#regset">regset</a> [definition, in <a href="backend.RTL.html">backend.RTL</a>]<br/>
+<a href="backend.PPC.html#regset">regset</a> [definition, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.Registers.html#Regset">Regset</a> [module, in <a href="backend.Registers.html">backend.Registers</a>]<br/>
+<a href="backend.Allocation.html#regs_for">regs_for</a> [definition, in <a href="backend.Allocation.html">backend.Allocation</a>]<br/>
+<a href="backend.Allocation.html#regs_for_rec">regs_for_rec</a> [definition, in <a href="backend.Allocation.html">backend.Allocation</a>]<br/>
+<a href="backend.Constpropproof.html#regs_match_approx">regs_match_approx</a> [definition, in <a href="backend.Constpropproof.html">backend.Constpropproof</a>]<br/>
+<a href="backend.Constpropproof.html#regs_match_approx_increasing">regs_match_approx_increasing</a> [lemma, in <a href="backend.Constpropproof.html">backend.Constpropproof</a>]<br/>
+<a href="backend.Constpropproof.html#regs_match_approx_update">regs_match_approx_update</a> [lemma, in <a href="backend.Constpropproof.html">backend.Constpropproof</a>]<br/>
+<a href="backend.Lineartyping.html#regs_of_instr">regs_of_instr</a> [definition, in <a href="backend.Lineartyping.html">backend.Lineartyping</a>]<br/>
+<a href="backend.Allocation.html#reg_for">reg_for</a> [definition, in <a href="backend.Allocation.html">backend.Allocation</a>]<br/>
+<a href="backend.Allocproof.html#reg_for_spec">reg_for_spec</a> [lemma, in <a href="backend.Allocproof.html">backend.Allocproof</a>]<br/>
+<a href="backend.RTLgenproof1.html#reg_fresh">reg_fresh</a> [definition, in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.RTLgenproof1.html#reg_fresh_decr">reg_fresh_decr</a> [lemma, in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.RTLgenproof1.html#reg_in_map">reg_in_map</a> [definition, in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.RTLgenproof1.html#reg_in_map_valid">reg_in_map_valid</a> [lemma, in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.Allocation.html#reg_list_dead">reg_list_dead</a> [definition, in <a href="backend.Allocation.html">backend.Allocation</a>]<br/>
+<a href="backend.Allocation.html#reg_list_live">reg_list_live</a> [definition, in <a href="backend.Allocation.html">backend.Allocation</a>]<br/>
+<a href="backend.PPC.html#reg_of_crbit">reg_of_crbit</a> [definition, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.Allocation.html#reg_option_live">reg_option_live</a> [definition, in <a href="backend.Allocation.html">backend.Allocation</a>]<br/>
+<a href="backend.Allocation.html#reg_sum_live">reg_sum_live</a> [definition, in <a href="backend.Allocation.html">backend.Allocation</a>]<br/>
+<a href="backend.RTLgenproof1.html#reg_valid">reg_valid</a> [definition, in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.RTLgenproof1.html#reg_valid_incr">reg_valid_incr</a> [lemma, in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.CSE.html#reg_valnum">reg_valnum</a> [definition, in <a href="backend.CSE.html">backend.CSE</a>]<br/>
+<a href="backend.CSEproof.html#reg_valnum_correct">reg_valnum_correct</a> [lemma, in <a href="backend.CSEproof.html">backend.CSEproof</a>]<br/>
+<a href="lib.Sets.html#remove">remove</a> [definition, in <a href="lib.Sets.html">lib.Sets</a>]<br/>
+<a href="lib.Maps.html#remove">remove</a> [definition, in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Inclusion.html#remove_all_leaves">remove_all_leaves</a> [definition, in <a href="lib.Inclusion.html">lib.Inclusion</a>]<br/>
+<a href="lib.Inclusion.html#remove_all_leaves_sound">remove_all_leaves_sound</a> [lemma, in <a href="lib.Inclusion.html">lib.Inclusion</a>]<br/>
+<a href="backend.RTLtyping.html#repet">repet</a> [definition, in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.RTLtyping.html#repet_correct">repet_correct</a> [lemma, in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.Parallelmove.html#replace_last_id">replace_last_id</a> [lemma, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#replace_last_s">replace_last_s</a> [definition, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="lib.union_find.html#repr">repr</a> [definition, in <a href="lib.union_find.html">lib.union_find</a>]<br/>
+<a href="lib.Integers.html#repr">repr</a> [definition, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.union_find.html#repr_aux">repr_aux</a> [definition, in <a href="lib.union_find.html">lib.union_find</a>]<br/>
+<a href="lib.union_find.html#repr_aux_canon">repr_aux_canon</a> [lemma, in <a href="lib.union_find.html">lib.union_find</a>]<br/>
+<a href="lib.union_find.html#repr_aux_none">repr_aux_none</a> [lemma, in <a href="lib.union_find.html">lib.union_find</a>]<br/>
+<a href="lib.union_find.html#repr_aux_some">repr_aux_some</a> [lemma, in <a href="lib.union_find.html">lib.union_find</a>]<br/>
+<a href="lib.union_find.html#repr_empty">repr_empty</a> [lemma, in <a href="lib.union_find.html">lib.union_find</a>]<br/>
+<a href="lib.union_find.html#repr_order">repr_order</a> [definition, in <a href="lib.union_find.html">lib.union_find</a>]<br/>
+<a href="lib.union_find.html#repr_rec">repr_rec</a> [definition, in <a href="lib.union_find.html">lib.union_find</a>]<br/>
+<a href="lib.union_find.html#repr_rec_ext">repr_rec_ext</a> [lemma, in <a href="lib.union_find.html">lib.union_find</a>]<br/>
+<a href="lib.union_find.html#repr_repr">repr_repr</a> [lemma, in <a href="lib.union_find.html">lib.union_find</a>]<br/>
+<a href="lib.Integers.html#repr_signed">repr_signed</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#repr_unsigned">repr_unsigned</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.RTLgen.html#res">res</a> [inductive, in <a href="backend.RTLgen.html">backend.RTLgen</a>]<br/>
+<a href="backend.RTLgen.html#reserve_instr">reserve_instr</a> [definition, in <a href="backend.RTLgen.html">backend.RTLgen</a>]<br/>
+<a href="backend.RTLgenproof1.html#reserve_instr_incr">reserve_instr_incr</a> [lemma, in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.RTLgen.html#reserve_instr_wf">reserve_instr_wf</a> [lemma, in <a href="backend.RTLgen.html">backend.RTLgen</a>]<br/>
+<a href="backend.Stacking.html#restore_callee_save">restore_callee_save</a> [definition, in <a href="backend.Stacking.html">backend.Stacking</a>]<br/>
+<a href="backend.Stackingproof.html#restore_callee_save_correct">restore_callee_save_correct</a> [lemma, in <a href="backend.Stackingproof.html">backend.Stackingproof</a>]<br/>
+<a href="backend.Stacking.html#restore_float_callee_save">restore_float_callee_save</a> [definition, in <a href="backend.Stacking.html">backend.Stacking</a>]<br/>
+<a href="backend.Stackingproof.html#restore_float_callee_save_correct">restore_float_callee_save_correct</a> [lemma, in <a href="backend.Stackingproof.html">backend.Stackingproof</a>]<br/>
+<a href="backend.Stackingproof.html#restore_float_callee_save_correct_rec">restore_float_callee_save_correct_rec</a> [lemma, in <a href="backend.Stackingproof.html">backend.Stackingproof</a>]<br/>
+<a href="backend.Stacking.html#restore_int_callee_save">restore_int_callee_save</a> [definition, in <a href="backend.Stacking.html">backend.Stacking</a>]<br/>
+<a href="backend.Stackingproof.html#restore_int_callee_save_correct">restore_int_callee_save_correct</a> [lemma, in <a href="backend.Stackingproof.html">backend.Stackingproof</a>]<br/>
+<a href="backend.Stackingproof.html#restore_int_callee_save_correct_rec">restore_int_callee_save_correct_rec</a> [lemma, in <a href="backend.Stackingproof.html">backend.Stackingproof</a>]<br/>
+<a href="backend.Kildall.html#result">result</a> [definition, in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.Allocproof_aux.html#reswellFormed">reswellFormed</a> [definition, in <a href="backend.Allocproof_aux.html">backend.Allocproof_aux</a>]<br/>
+<a href="backend.RTLgen.html#ret">ret</a> [definition, in <a href="backend.RTLgen.html">backend.RTLgen</a>]<br/>
+<a href="backend.LTL.html#Return">Return</a> [constructor, in <a href="backend.LTL.html">backend.LTL</a>]<br/>
+<a href="backend.LTL.html#return_regs">return_regs</a> [definition, in <a href="backend.LTL.html">backend.LTL</a>]<br/>
+<a href="backend.Allocproof.html#return_regs_not_destroyed">return_regs_not_destroyed</a> [lemma, in <a href="backend.Allocproof.html">backend.Allocproof</a>]<br/>
+<a href="backend.Allocproof.html#return_regs_result">return_regs_result</a> [lemma, in <a href="backend.Allocproof.html">backend.Allocproof</a>]<br/>
+<a href="backend.RTLgenproof1.html#return_reg_ok">return_reg_ok</a> [inductive, in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.RTLgenproof1.html#return_reg_ok_incr">return_reg_ok_incr</a> [lemma, in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.RTLgenproof1.html#return_reg_ok_none">return_reg_ok_none</a> [constructor, in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.RTLgenproof1.html#return_reg_ok_some">return_reg_ok_some</a> [constructor, in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.RTLgen.html#ret_reg">ret_reg</a> [definition, in <a href="backend.RTLgen.html">backend.RTLgen</a>]<br/>
+<a href="backend.CSE.html#rhs">rhs</a> [inductive, in <a href="backend.CSE.html">backend.CSE</a>]<br/>
+<a href="backend.CSEproof.html#rhs_evals_to">rhs_evals_to</a> [definition, in <a href="backend.CSEproof.html">backend.CSEproof</a>]<br/>
+<a href="backend.Parallelmove.html#right">right</a> [definition, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="lib.Maps.html#rleaf">rleaf</a> [lemma, in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Integers.html#rlw_accepting">rlw_accepting</a> [definition, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#RLW_Sbad">RLW_Sbad</a> [constructor, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#rlw_state">rlw_state</a> [inductive, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#RLW_S0">RLW_S0</a> [constructor, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#RLW_S1">RLW_S1</a> [constructor, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#RLW_S2">RLW_S2</a> [constructor, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#RLW_S3">RLW_S3</a> [constructor, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#RLW_S4">RLW_S4</a> [constructor, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#RLW_S5">RLW_S5</a> [constructor, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#RLW_S6">RLW_S6</a> [constructor, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#rlw_transition">rlw_transition</a> [definition, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#rol">rol</a> [definition, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Values.html#rolm">rolm</a> [definition, in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.Cmconstr.html#rolm">rolm</a> [definition, in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="lib.Integers.html#rolm">rolm</a> [definition, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Cmconstr.html#rolm_cases">rolm_cases</a> [inductive, in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Cmconstr.html#rolm_case1">rolm_case1</a> [constructor, in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Cmconstr.html#rolm_case2">rolm_case2</a> [constructor, in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Cmconstr.html#rolm_default">rolm_default</a> [constructor, in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Cmconstr.html#rolm_match">rolm_match</a> [definition, in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="lib.Integers.html#rolm_rolm">rolm_rolm</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Values.html#rolm_rolm">rolm_rolm</a> [lemma, in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="lib.Integers.html#rolm_zero">rolm_zero</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Values.html#rolm_zero">rolm_zero</a> [lemma, in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="lib.Integers.html#rol_and">rol_and</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#rol_or">rol_or</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#rol_rol">rol_rol</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#rol_zero">rol_zero</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.RTL.html">RTL</a> [library]<br/>
+<a href="backend.RTLgen.html">RTLgen</a> [library]<br/>
+<a href="backend.RTLgenproof.html">RTLgenproof</a> [library]<br/>
+<a href="backend.RTLgenproof1.html">RTLgenproof1</a> [library]<br/>
+<a href="backend.RTLtyping.html">RTLtyping</a> [library]<br/>
+<a href="backend.Locations.html#R10">R10</a> [constructor, in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Locations.html#R13">R13</a> [constructor, in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Locations.html#R14">R14</a> [constructor, in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Locations.html#R15">R15</a> [constructor, in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Locations.html#R16">R16</a> [constructor, in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Locations.html#R17">R17</a> [constructor, in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Locations.html#R18">R18</a> [constructor, in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Locations.html#R19">R19</a> [constructor, in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Op.html#r2">r2</a> [constructor, in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Op.html#r2">r2</a> [constructor, in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Locations.html#R20">R20</a> [constructor, in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Locations.html#R21">R21</a> [constructor, in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Locations.html#R22">R22</a> [constructor, in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Locations.html#R23">R23</a> [constructor, in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Locations.html#R24">R24</a> [constructor, in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Locations.html#R25">R25</a> [constructor, in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Locations.html#R26">R26</a> [constructor, in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Locations.html#R27">R27</a> [constructor, in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Locations.html#R28">R28</a> [constructor, in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Locations.html#R29">R29</a> [constructor, in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Locations.html#R3">R3</a> [constructor, in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Locations.html#R30">R30</a> [constructor, in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Locations.html#R31">R31</a> [constructor, in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Locations.html#R4">R4</a> [constructor, in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Locations.html#R5">R5</a> [constructor, in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Locations.html#R6">R6</a> [constructor, in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Locations.html#R7">R7</a> [constructor, in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Locations.html#R8">R8</a> [constructor, in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Locations.html#R9">R9</a> [constructor, in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<br/><br/><a name="global_S"></a><h2>S </h2>
+<a href="backend.Locations.html#S">S</a> [constructor, in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="lib.union_find.html#sameclass">sameclass</a> [definition, in <a href="lib.union_find.html">lib.union_find</a>]<br/>
+<a href="lib.union_find.html#sameclass">sameclass</a> [definition, in <a href="lib.union_find.html">lib.union_find</a>]<br/>
+<a href="lib.union_find.html#sameclass_empty">sameclass_empty</a> [lemma, in <a href="lib.union_find.html">lib.union_find</a>]<br/>
+<a href="lib.union_find.html#sameclass_identify_1">sameclass_identify_1</a> [lemma, in <a href="lib.union_find.html">lib.union_find</a>]<br/>
+<a href="lib.union_find.html#sameclass_identify_2">sameclass_identify_2</a> [lemma, in <a href="lib.union_find.html">lib.union_find</a>]<br/>
+<a href="lib.union_find.html#sameclass_refl">sameclass_refl</a> [lemma, in <a href="lib.union_find.html">lib.union_find</a>]<br/>
+<a href="lib.union_find.html#sameclass_repr">sameclass_repr</a> [lemma, in <a href="lib.union_find.html">lib.union_find</a>]<br/>
+<a href="lib.union_find.html#sameclass_sym">sameclass_sym</a> [lemma, in <a href="lib.union_find.html">lib.union_find</a>]<br/>
+<a href="lib.union_find.html#sameclass_trans">sameclass_trans</a> [lemma, in <a href="lib.union_find.html">lib.union_find</a>]<br/>
+<a href="backend.Parallelmove.html#sameEnv">sameEnv</a> [definition, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#sameExec">sameExec</a> [definition, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#sameExec_reflexive">sameExec_reflexive</a> [lemma, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#sameExec_transitive">sameExec_transitive</a> [lemma, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Cmconstr.html#same_expr_pure">same_expr_pure</a> [definition, in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Locations.html#same_not_diff">same_not_diff</a> [lemma, in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Coloring.html#same_typ">same_typ</a> [definition, in <a href="backend.Coloring.html">backend.Coloring</a>]<br/>
+<a href="backend.Coloringproof.html#same_typ_correct">same_typ_correct</a> [lemma, in <a href="backend.Coloringproof.html">backend.Coloringproof</a>]<br/>
+<a href="backend.Stacking.html#save_callee_save">save_callee_save</a> [definition, in <a href="backend.Stacking.html">backend.Stacking</a>]<br/>
+<a href="backend.Stackingproof.html#save_callee_save_correct">save_callee_save_correct</a> [lemma, in <a href="backend.Stackingproof.html">backend.Stackingproof</a>]<br/>
+<a href="backend.Stacking.html#save_float_callee_save">save_float_callee_save</a> [definition, in <a href="backend.Stacking.html">backend.Stacking</a>]<br/>
+<a href="backend.Stackingproof.html#save_float_callee_save_correct">save_float_callee_save_correct</a> [lemma, in <a href="backend.Stackingproof.html">backend.Stackingproof</a>]<br/>
+<a href="backend.Stackingproof.html#save_float_callee_save_correct_rec">save_float_callee_save_correct_rec</a> [lemma, in <a href="backend.Stackingproof.html">backend.Stackingproof</a>]<br/>
+<a href="backend.Stacking.html#save_int_callee_save">save_int_callee_save</a> [definition, in <a href="backend.Stacking.html">backend.Stacking</a>]<br/>
+<a href="backend.Stackingproof.html#save_int_callee_save_correct">save_int_callee_save_correct</a> [lemma, in <a href="backend.Stackingproof.html">backend.Stackingproof</a>]<br/>
+<a href="backend.Stackingproof.html#save_int_callee_save_correct_rec">save_int_callee_save_correct_rec</a> [lemma, in <a href="backend.Stackingproof.html">backend.Stackingproof</a>]<br/>
+<a href="backend.Cminor.html#Sblock">Sblock</a> [constructor, in <a href="backend.Cminor.html">backend.Cminor</a>]<br/>
+<a href="backend.Csharpminor.html#Sblock">Sblock</a> [constructor, in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Parallelmove.html#SB_Pmov">SB_Pmov</a> [lemma, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Cminor.html#Scons">Scons</a> [constructor, in <a href="backend.Cminor.html">backend.Cminor</a>]<br/>
+<a href="backend.Csharpminor.html#Scons">Scons</a> [constructor, in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Allocproof_aux.html#SDone_Pmov">SDone_Pmov</a> [lemma, in <a href="backend.Allocproof_aux.html">backend.Allocproof_aux</a>]<br/>
+<a href="backend.Allocproof_aux.html#SDone_stepf">SDone_stepf</a> [lemma, in <a href="backend.Allocproof_aux.html">backend.Allocproof_aux</a>]<br/>
+<a href="backend.Parallelmove.html#sD_nW">sD_nW</a> [lemma, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#sD_pexec">sD_pexec</a> [lemma, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="lib.Lattice.html#SEMILATTICE">SEMILATTICE</a> [module, in <a href="lib.Lattice.html">lib.Lattice</a>]<br/>
+<a href="lib.Lattice.html#SEMILATTICE_WITH_TOP">SEMILATTICE_WITH_TOP</a> [module, in <a href="lib.Lattice.html">lib.Lattice</a>]<br/>
+<a href="lib.Maps.html#set">set</a> [definition, in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="backend.Locations.html#set">set</a> [definition, in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="lib.Maps.html#set">set</a> [definition, in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Maps.html#set">set</a> [definition, in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Lattice.html#set">set</a> [definition, in <a href="lib.Lattice.html">lib.Lattice</a>]<br/>
+<a href="lib.Maps.html#set">set</a> [definition, in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="backend.InterfGraph.html#SetDepRegMreg">SetDepRegMreg</a> [module, in <a href="backend.InterfGraph.html">backend.InterfGraph</a>]<br/>
+<a href="backend.InterfGraph.html#SetDepRegReg">SetDepRegReg</a> [module, in <a href="backend.InterfGraph.html">backend.InterfGraph</a>]<br/>
+<a href="backend.Mem.html#setN">setN</a> [definition, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#setN_agree">setN_agree</a> [lemma, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#setN_inject">setN_inject</a> [lemma, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#setN_outside_agree">setN_outside_agree</a> [lemma, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#setN_outside_inject">setN_outside_inject</a> [lemma, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.InterfGraph.html#SetRegMreg">SetRegMreg</a> [module, in <a href="backend.InterfGraph.html">backend.InterfGraph</a>]<br/>
+<a href="backend.InterfGraph.html#SetRegReg">SetRegReg</a> [module, in <a href="backend.InterfGraph.html">backend.InterfGraph</a>]<br/>
+<a href="lib.Sets.html">Sets</a> [library]<br/>
+<a href="backend.Mem.html#set_cont">set_cont</a> [definition, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#set_cont_agree">set_cont_agree</a> [lemma, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#set_cont_inject">set_cont_inject</a> [lemma, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#set_cont_inside">set_cont_inside</a> [lemma, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#set_cont_outside">set_cont_outside</a> [lemma, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#set_cont_outside1">set_cont_outside1</a> [lemma, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#set_cont_outside_agree">set_cont_outside_agree</a> [lemma, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#set_cont_outside_inject">set_cont_outside_inject</a> [lemma, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Cminor.html#set_locals">set_locals</a> [definition, in <a href="backend.Cminor.html">backend.Cminor</a>]<br/>
+<a href="backend.Cminorgenproof.html#set_locals_defined">set_locals_defined</a> [lemma, in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.Cminorgenproof.html#set_locals_params_defined">set_locals_params_defined</a> [lemma, in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.Cminor.html#set_params">set_params</a> [definition, in <a href="backend.Cminor.html">backend.Cminor</a>]<br/>
+<a href="backend.Cminorgenproof.html#set_params_defined">set_params_defined</a> [lemma, in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.Machabstr.html#set_slot">set_slot</a> [inductive, in <a href="backend.Machabstr.html">backend.Machabstr</a>]<br/>
+<a href="backend.Stackingproof.html#set_slot_index">set_slot_index</a> [lemma, in <a href="backend.Stackingproof.html">backend.Stackingproof</a>]<br/>
+<a href="backend.Machabstr.html#set_slot_intro">set_slot_intro</a> [constructor, in <a href="backend.Machabstr.html">backend.Machabstr</a>]<br/>
+<a href="backend.Machtyping.html#set_slot_link_invariant">set_slot_link_invariant</a> [lemma, in <a href="backend.Machtyping.html">backend.Machtyping</a>]<br/>
+<a href="backend.Stackingproof.html#set_slot_ok">set_slot_ok</a> [lemma, in <a href="backend.Stackingproof.html">backend.Stackingproof</a>]<br/>
+<a href="backend.Parallelmove.html#Sexec">Sexec</a> [definition, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#sexec">sexec</a> [definition, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Cminor.html#Sexit">Sexit</a> [constructor, in <a href="backend.Cminor.html">backend.Cminor</a>]<br/>
+<a href="backend.Csharpminor.html#Sexit">Sexit</a> [constructor, in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Cminor.html#Sexpr">Sexpr</a> [constructor, in <a href="backend.Cminor.html">backend.Cminor</a>]<br/>
+<a href="backend.Csharpminor.html#Sexpr">Sexpr</a> [constructor, in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Cmconstr.html#shift_cases">shift_cases</a> [inductive, in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Cmconstr.html#shift_case1">shift_case1</a> [constructor, in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Cmconstr.html#shift_default">shift_default</a> [constructor, in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Stackingproof.html#shift_eval_addressing">shift_eval_addressing</a> [lemma, in <a href="backend.Stackingproof.html">backend.Stackingproof</a>]<br/>
+<a href="backend.Stackingproof.html#shift_eval_operation">shift_eval_operation</a> [lemma, in <a href="backend.Stackingproof.html">backend.Stackingproof</a>]<br/>
+<a href="backend.Cmconstr.html#shift_match">shift_match</a> [definition, in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Stackingproof.html#shift_sp">shift_sp</a> [definition, in <a href="backend.Stackingproof.html">backend.Stackingproof</a>]<br/>
+<a href="lib.Integers.html#shl">shl</a> [definition, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Cmconstr.html#shl">shl</a> [definition, in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Values.html#shl">shl</a> [definition, in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.Cmconstr.html#shlimm">shlimm</a> [definition, in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Values.html#shl_mul">shl_mul</a> [lemma, in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="lib.Integers.html#shl_mul">shl_mul</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#shl_mul_two_p">shl_mul_two_p</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#shl_rolm">shl_rolm</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Values.html#shl_rolm">shl_rolm</a> [lemma, in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="lib.Integers.html#shl_zero">shl_zero</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#shr">shr</a> [definition, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Cmconstr.html#shr">shr</a> [definition, in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Values.html#shr">shr</a> [definition, in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.Cmconstr.html#shru">shru</a> [definition, in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="lib.Integers.html#shru">shru</a> [definition, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Values.html#shru">shru</a> [definition, in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.Cmconstr.html#shruimm">shruimm</a> [definition, in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="lib.Integers.html#shru_div_two_p">shru_div_two_p</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Values.html#shru_rolm">shru_rolm</a> [lemma, in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="lib.Integers.html#shru_rolm">shru_rolm</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#shru_zero">shru_zero</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#shrx">shrx</a> [definition, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Values.html#shrx">shrx</a> [definition, in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.Values.html#shrx_carry">shrx_carry</a> [lemma, in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="lib.Integers.html#shrx_carry">shrx_carry</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Values.html#shr_carry">shr_carry</a> [definition, in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="lib.Integers.html#shr_carry">shr_carry</a> [definition, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#shr_zero">shr_zero</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Csharpminor.html#Sifthenelse">Sifthenelse</a> [constructor, in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Cminor.html#Sifthenelse">Sifthenelse</a> [constructor, in <a href="backend.Cminor.html">backend.Cminor</a>]<br/>
+<a href="backend.AST.html#signature">signature</a> [inductive, in <a href="backend.AST.html">backend.AST</a>]<br/>
+<a href="lib.Integers.html#signed">signed</a> [definition, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#signed_range">signed_range</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#signed_repr">signed_repr</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Allocproof.html#sig_function_translated">sig_function_translated</a> [lemma, in <a href="backend.Allocproof.html">backend.Allocproof</a>]<br/>
+<a href="backend.Cminorgenproof.html#sig_transl_function">sig_transl_function</a> [lemma, in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.Parallelmove.html#simpleDest">simpleDest</a> [definition, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#simpleDest_insert">simpleDest_insert</a> [lemma, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#simpleDest_movBack">simpleDest_movBack</a> [lemma, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#simpleDest_movFront">simpleDest_movFront</a> [lemma, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#simpleDest_Pop">simpleDest_Pop</a> [lemma, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#simpleDest_pop">simpleDest_pop</a> [lemma, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#simpleDest_pop2">simpleDest_pop2</a> [lemma, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#simpleDest_right">simpleDest_right</a> [lemma, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#simpleDest_swap">simpleDest_swap</a> [lemma, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#simpleDest_swap_app">simpleDest_swap_app</a> [lemma, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#simpleDest_tmpLast">simpleDest_tmpLast</a> [lemma, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Values.html#singleoffloat">singleoffloat</a> [definition, in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.Cmconstr.html#singleoffloat">singleoffloat</a> [definition, in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="lib.Floats.html#singleoffloat">singleoffloat</a> [axiom, in <a href="lib.Floats.html">lib.Floats</a>]<br/>
+<a href="lib.Floats.html#singleoffloat_idem">singleoffloat_idem</a> [axiom, in <a href="lib.Floats.html">lib.Floats</a>]<br/>
+<a href="backend.Csharpminor.html#sizeof">sizeof</a> [definition, in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Mem.html#Size16">Size16</a> [constructor, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#Size32">Size32</a> [constructor, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#Size64">Size64</a> [constructor, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#Size8">Size8</a> [constructor, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Conventions.html#size_arguments">size_arguments</a> [definition, in <a href="backend.Conventions.html">backend.Conventions</a>]<br/>
+<a href="backend.Linearizetyping.html#size_arguments_bound">size_arguments_bound</a> [lemma, in <a href="backend.Linearizetyping.html">backend.Linearizetyping</a>]<br/>
+<a href="backend.Conventions.html#size_arguments_rec">size_arguments_rec</a> [definition, in <a href="backend.Conventions.html">backend.Conventions</a>]<br/>
+<a href="backend.Mem.html#size_chunk">size_chunk</a> [definition, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#size_chunk_pos">size_chunk_pos</a> [lemma, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#size_mem">size_mem</a> [definition, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#size_mem_pos">size_mem_pos</a> [lemma, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Stackingproof.html#size_no_overflow">size_no_overflow</a> [lemma, in <a href="backend.Stackingproof.html">backend.Stackingproof</a>]<br/>
+<a href="backend.Stackingproof.html#size_pos">size_pos</a> [lemma, in <a href="backend.Stackingproof.html">backend.Stackingproof</a>]<br/>
+<a href="backend.Csharpminor.html#Sloop">Sloop</a> [constructor, in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Cminor.html#Sloop">Sloop</a> [constructor, in <a href="backend.Cminor.html">backend.Cminor</a>]<br/>
+<a href="backend.Locations.html#slot">slot</a> [inductive, in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Lineartyping.html#slots_of_instr">slots_of_instr</a> [definition, in <a href="backend.Lineartyping.html">backend.Lineartyping</a>]<br/>
+<a href="backend.Lineartyping.html#slot_bounded">slot_bounded</a> [definition, in <a href="backend.Lineartyping.html">backend.Lineartyping</a>]<br/>
+<a href="backend.LTLtyping.html#slot_bounded">slot_bounded</a> [definition, in <a href="backend.LTLtyping.html">backend.LTLtyping</a>]<br/>
+<a href="backend.Locations.html#slot_eq">slot_eq</a> [lemma, in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Stackingproof.html#slot_gi">slot_gi</a> [lemma, in <a href="backend.Stackingproof.html">backend.Stackingproof</a>]<br/>
+<a href="backend.Stackingproof.html#slot_gso">slot_gso</a> [lemma, in <a href="backend.Stackingproof.html">backend.Stackingproof</a>]<br/>
+<a href="backend.Stackingproof.html#slot_gss">slot_gss</a> [lemma, in <a href="backend.Stackingproof.html">backend.Stackingproof</a>]<br/>
+<a href="backend.Stackingproof.html#slot_iso">slot_iso</a> [lemma, in <a href="backend.Stackingproof.html">backend.Stackingproof</a>]<br/>
+<a href="backend.Stackingproof.html#slot_iss">slot_iss</a> [lemma, in <a href="backend.Stackingproof.html">backend.Stackingproof</a>]<br/>
+<a href="backend.Linearizetyping.html#slot_is_bounded">slot_is_bounded</a> [lemma, in <a href="backend.Linearizetyping.html">backend.Linearizetyping</a>]<br/>
+<a href="backend.Locations.html#slot_type">slot_type</a> [definition, in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Csharpminor.html#Snil">Snil</a> [constructor, in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Cminor.html#Snil">Snil</a> [constructor, in <a href="backend.Cminor.html">backend.Cminor</a>]<br/>
+<a href="backend.CSE.html#Solver">Solver</a> [module, in <a href="backend.CSE.html">backend.CSE</a>]<br/>
+<a href="backend.Parallelmove.html#Some">Some</a> [definition, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="lib.Inclusion.html#sort_bin">sort_bin</a> [definition, in <a href="lib.Inclusion.html">lib.Inclusion</a>]<br/>
+<a href="lib.Inclusion.html#sort_included">sort_included</a> [lemma, in <a href="lib.Inclusion.html">lib.Inclusion</a>]<br/>
+<a href="lib.Inclusion.html#sort_included2">sort_included2</a> [lemma, in <a href="lib.Inclusion.html">lib.Inclusion</a>]<br/>
+<a href="backend.Parallelmove.html#splitNone">splitNone</a> [lemma, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#splitSome">splitSome</a> [lemma, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#split_length">split_length</a> [lemma, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#split_move">split_move</a> [definition, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#split_move'">split_move'</a> [definition, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Alloctyping_aux.html#split_move_incl">split_move_incl</a> [lemma, in <a href="backend.Alloctyping_aux.html">backend.Alloctyping_aux</a>]<br/>
+<a href="backend.PPCgenproof1.html#sp_val">sp_val</a> [lemma, in <a href="backend.PPCgenproof1.html">backend.PPCgenproof1</a>]<br/>
+<a href="backend.Alloctyping_aux.html#srcdst_tmp2_stepf">srcdst_tmp2_stepf</a> [lemma, in <a href="backend.Alloctyping_aux.html">backend.Alloctyping_aux</a>]<br/>
+<a href="backend.Alloctyping_aux.html#src_tmp2_res">src_tmp2_res</a> [lemma, in <a href="backend.Alloctyping_aux.html">backend.Alloctyping_aux</a>]<br/>
+<a href="backend.Csharpminor.html#Sreturn">Sreturn</a> [constructor, in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Cminor.html#Sreturn">Sreturn</a> [constructor, in <a href="backend.Cminor.html">backend.Cminor</a>]<br/>
+<a href="backend.Stacking.html">Stacking</a> [library]<br/>
+<a href="backend.Stackingproof.html">Stackingproof</a> [library]<br/>
+<a href="backend.Stackingtyping.html">Stackingtyping</a> [library]<br/>
+<a href="backend.Linearize.html#starts_with">starts_with</a> [definition, in <a href="backend.Linearize.html">backend.Linearize</a>]<br/>
+<a href="backend.Linearizeproof.html#starts_with_correct">starts_with_correct</a> [lemma, in <a href="backend.Linearizeproof.html">backend.Linearizeproof</a>]<br/>
+<a href="backend.Kildall.html#start_state">start_state</a> [definition, in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.Kildall.html#start_state_good">start_state_good</a> [lemma, in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.Kildall.html#start_state_in">start_state_in</a> [definition, in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.Kildall.html#start_state_in_entry">start_state_in_entry</a> [lemma, in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.Kildall.html#start_state_wrk">start_state_wrk</a> [definition, in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.Kildall.html#state">state</a> [inductive, in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.Parallelmove.html#State">State</a> [definition, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.RTLgen.html#state">state</a> [inductive, in <a href="backend.RTLgen.html">backend.RTLgen</a>]<br/>
+<a href="backend.Kildall.html#state">state</a> [inductive, in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.Parallelmove.html#StateBeing">StateBeing</a> [definition, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#StateDone">StateDone</a> [definition, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#StateToMove">StateToMove</a> [definition, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.RTLgenproof1.html#state_extends">state_extends</a> [definition, in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.RTLgenproof1.html#state_incr">state_incr</a> [inductive, in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.RTLgenproof1.html#state_incr_extends">state_incr_extends</a> [lemma, in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.RTLgenproof1.html#state_incr_intro">state_incr_intro</a> [constructor, in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.RTLgenproof1.html#state_incr_refl">state_incr_refl</a> [lemma, in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.RTLgenproof1.html#state_incr_trans">state_incr_trans</a> [lemma, in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.RTLgenproof1.html#state_incr_trans2">state_incr_trans2</a> [lemma, in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.RTLgenproof1.html#state_incr_trans3">state_incr_trans3</a> [lemma, in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.RTLgenproof1.html#state_incr_trans4">state_incr_trans4</a> [lemma, in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.RTLgenproof1.html#state_incr_trans5">state_incr_trans5</a> [lemma, in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.RTLgenproof1.html#state_incr_trans6">state_incr_trans6</a> [lemma, in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.Kildall.html#state_invariant">state_invariant</a> [definition, in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.Kildall.html#step">step</a> [definition, in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.Parallelmove.html#step">step</a> [inductive, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Kildall.html#step">step</a> [definition, in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.Parallelmove.html#stepf">stepf</a> [definition, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#stepf'">stepf'</a> [definition, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#stepf1_dec">stepf1_dec</a> [lemma, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#stepf_dec">stepf_dec</a> [lemma, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#stepf_dec0">stepf_dec0</a> [lemma, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#stepf_dec0'">stepf_dec0'</a> [lemma, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#stepf_pop">stepf_pop</a> [lemma, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#stepf_popLoop">stepf_popLoop</a> [lemma, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#stepInv">stepInv</a> [definition, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Allocproof_aux.html#stepInv_pnilnil">stepInv_pnilnil</a> [lemma, in <a href="backend.Allocproof_aux.html">backend.Allocproof_aux</a>]<br/>
+<a href="backend.Parallelmove.html#stepp">stepp</a> [inductive, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#stepp_inv">stepp_inv</a> [lemma, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#stepp_refl">stepp_refl</a> [constructor, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#stepp_sameExec">stepp_sameExec</a> [lemma, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#stepp_trans">stepp_trans</a> [constructor, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#stepp_transitive">stepp_transitive</a> [lemma, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.RTLtyping.html#step1">step1</a> [lemma, in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.RTLtyping.html#step2">step2</a> [lemma, in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.RTLtyping.html#step3">step3</a> [lemma, in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.RTLtyping.html#step4">step4</a> [lemma, in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.Parallelmove.html#step_dec">step_dec</a> [lemma, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#step_dec0">step_dec0</a> [lemma, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#step_inv">step_inv</a> [lemma, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#step_inv_getdst">step_inv_getdst</a> [lemma, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#step_inv_loop">step_inv_loop</a> [lemma, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#step_inv_loop_aux">step_inv_loop_aux</a> [lemma, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#step_inv_noOverlap">step_inv_noOverlap</a> [lemma, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#step_inv_NoOverlap">step_inv_NoOverlap</a> [lemma, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#step_inv_noTmp">step_inv_noTmp</a> [lemma, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#step_inv_noTmpLast">step_inv_noTmpLast</a> [lemma, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#step_inv_path">step_inv_path</a> [lemma, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#step_inv_simpleDest">step_inv_simpleDest</a> [lemma, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#step_loop">step_loop</a> [constructor, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#step_NF">step_NF</a> [definition, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#step_nop">step_nop</a> [constructor, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#step_pop">step_pop</a> [constructor, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#step_push">step_push</a> [constructor, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#step_sameExec">step_sameExec</a> [lemma, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#step_start">step_start</a> [constructor, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Kildall.html#step_state_good">step_state_good</a> [lemma, in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.Parallelmove.html#step_stepp">step_stepp</a> [lemma, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Csharpminor.html#stmt">stmt</a> [inductive, in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Cminor.html#stmt">stmt</a> [inductive, in <a href="backend.Cminor.html">backend.Cminor</a>]<br/>
+<a href="backend.Csharpminor.html#stmtlist">stmtlist</a> [inductive, in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Cminor.html#stmtlist">stmtlist</a> [inductive, in <a href="backend.Cminor.html">backend.Cminor</a>]<br/>
+<a href="backend.RTLgenproof1.html#stmt_stmtlist_ind">stmt_stmtlist_ind</a> [lemma, in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.Parallelmove.html#STM_Pmov">STM_Pmov</a> [lemma, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Cmconstr.html#store">store</a> [definition, in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Mem.html#store">store</a> [definition, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.PPCgen.html#storeind">storeind</a> [definition, in <a href="backend.PPCgen.html">backend.PPCgen</a>]<br/>
+<a href="backend.PPCgen.html#storeind_aux">storeind_aux</a> [definition, in <a href="backend.PPCgen.html">backend.PPCgen</a>]<br/>
+<a href="backend.PPCgenproof1.html#storeind_aux_correct">storeind_aux_correct</a> [lemma, in <a href="backend.PPCgenproof1.html">backend.PPCgenproof1</a>]<br/>
+<a href="backend.PPCgenproof1.html#storeind_correct">storeind_correct</a> [lemma, in <a href="backend.PPCgenproof1.html">backend.PPCgenproof1</a>]<br/>
+<a href="backend.Mem.html#storev">storev</a> [definition, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#storev_mapped_inject">storev_mapped_inject</a> [lemma, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#storev_mapped_inject_1">storev_mapped_inject_1</a> [lemma, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.PPCgenproof.html#storev_16_signed_unsigned">storev_16_signed_unsigned</a> [lemma, in <a href="backend.PPCgenproof.html">backend.PPCgenproof</a>]<br/>
+<a href="backend.PPCgenproof.html#storev_8_signed_unsigned">storev_8_signed_unsigned</a> [lemma, in <a href="backend.PPCgenproof.html">backend.PPCgenproof</a>]<br/>
+<a href="backend.PPC.html#store1">store1</a> [definition, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#store2">store2</a> [definition, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.Mem.html#store_agree">store_agree</a> [lemma, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#store_alloc">store_alloc</a> [lemma, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#store_contentmap_agree">store_contentmap_agree</a> [lemma, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#store_contentmap_outside_agree">store_contentmap_outside_agree</a> [lemma, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#store_contents">store_contents</a> [definition, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#store_contents_inject">store_contents_inject</a> [lemma, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#store_contents_outside_inject">store_contents_outside_inject</a> [lemma, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#store_inv">store_inv</a> [lemma, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#store_in_bounds">store_in_bounds</a> [lemma, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#store_is_in_bounds">store_is_in_bounds</a> [lemma, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#store_mapped_inject">store_mapped_inject</a> [lemma, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#store_mapped_inject_1">store_mapped_inject_1</a> [lemma, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#store_outside_agree">store_outside_agree</a> [lemma, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#store_outside_extends">store_outside_extends</a> [lemma, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Cminorgen.html#store_parameters">store_parameters</a> [definition, in <a href="backend.Cminorgen.html">backend.Cminorgen</a>]<br/>
+<a href="backend.Cminorgenproof.html#store_parameters_correct">store_parameters_correct</a> [lemma, in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.Mach.html#store_stack">store_stack</a> [definition, in <a href="backend.Mach.html">backend.Mach</a>]<br/>
+<a href="backend.Mem.html#store_unmapped_inject">store_unmapped_inject</a> [lemma, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#store_within_extends">store_within_extends</a> [lemma, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="lib.Floats.html#sub">sub</a> [axiom, in <a href="lib.Floats.html">lib.Floats</a>]<br/>
+<a href="backend.Values.html#sub">sub</a> [definition, in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="lib.Integers.html#sub">sub</a> [definition, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Cmconstr.html#sub">sub</a> [definition, in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Values.html#subf">subf</a> [definition, in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.Cmconstr.html#subf">subf</a> [definition, in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="lib.Floats.html#subf_addf_opp">subf_addf_opp</a> [axiom, in <a href="lib.Floats.html">lib.Floats</a>]<br/>
+<a href="backend.Cmconstr.html#subf_cases">subf_cases</a> [inductive, in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Cmconstr.html#subf_case1">subf_case1</a> [constructor, in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Cmconstr.html#subf_default">subf_default</a> [constructor, in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Cmconstr.html#subf_match">subf_match</a> [definition, in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Machtyping.html#subject_reduction">subject_reduction</a> [lemma, in <a href="backend.Machtyping.html">backend.Machtyping</a>]<br/>
+<a href="backend.RTLtyping.html#subject_reduction">subject_reduction</a> [lemma, in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.Machtyping.html#subject_reduction_function">subject_reduction_function</a> [lemma, in <a href="backend.Machtyping.html">backend.Machtyping</a>]<br/>
+<a href="backend.Machtyping.html#subject_reduction_instr">subject_reduction_instr</a> [lemma, in <a href="backend.Machtyping.html">backend.Machtyping</a>]<br/>
+<a href="backend.Machtyping.html#subject_reduction_instrs">subject_reduction_instrs</a> [lemma, in <a href="backend.Machtyping.html">backend.Machtyping</a>]<br/>
+<a href="backend.Values.html#sub_add_l">sub_add_l</a> [lemma, in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="lib.Integers.html#sub_add_l">sub_add_l</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#sub_add_opp">sub_add_opp</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Values.html#sub_add_opp">sub_add_opp</a> [lemma, in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.Values.html#sub_add_r">sub_add_r</a> [lemma, in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="lib.Integers.html#sub_add_r">sub_add_r</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Cmconstr.html#sub_cases">sub_cases</a> [inductive, in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Cmconstr.html#sub_case1">sub_case1</a> [constructor, in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Cmconstr.html#sub_case2">sub_case2</a> [constructor, in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Cmconstr.html#sub_case3">sub_case3</a> [constructor, in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Cmconstr.html#sub_case4">sub_case4</a> [constructor, in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Cmconstr.html#sub_default">sub_default</a> [constructor, in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="lib.Integers.html#sub_idem">sub_idem</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Cmconstr.html#sub_match">sub_match</a> [definition, in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Cmconstr.html#sub_match_aux">sub_match_aux</a> [definition, in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="lib.Integers.html#sub_shifted">sub_shifted</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#sub_zero_l">sub_zero_l</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Values.html#sub_zero_r">sub_zero_r</a> [lemma, in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="lib.Integers.html#sub_zero_r">sub_zero_r</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.LTL.html#successors">successors</a> [definition, in <a href="backend.LTL.html">backend.LTL</a>]<br/>
+<a href="backend.RTL.html#successors">successors</a> [definition, in <a href="backend.RTL.html">backend.RTL</a>]<br/>
+<a href="backend.LTL.html#successors_aux">successors_aux</a> [definition, in <a href="backend.LTL.html">backend.LTL</a>]<br/>
+<a href="backend.LTL.html#successors_aux_invariant">successors_aux_invariant</a> [lemma, in <a href="backend.LTL.html">backend.LTL</a>]<br/>
+<a href="backend.LTL.html#successors_correct">successors_correct</a> [lemma, in <a href="backend.LTL.html">backend.LTL</a>]<br/>
+<a href="backend.RTL.html#successors_correct">successors_correct</a> [lemma, in <a href="backend.RTL.html">backend.RTL</a>]<br/>
+<a href="lib.Coqlib.html#sum_left_map">sum_left_map</a> [definition, in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="lib.Integers.html#swap_cmp">swap_cmp</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Values.html#swap_cmp">swap_cmp</a> [lemma, in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.Values.html#swap_cmpu">swap_cmpu</a> [lemma, in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="lib.Integers.html#swap_cmpu">swap_cmpu</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Values.html#swap_cmp_mismatch">swap_cmp_mismatch</a> [lemma, in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.AST.html#swap_comparison">swap_comparison</a> [definition, in <a href="backend.AST.html">backend.AST</a>]<br/>
+<a href="backend.Globalenvs.html#symbols_add_globals_transf">symbols_add_globals_transf</a> [lemma, in <a href="backend.Globalenvs.html">backend.Globalenvs</a>]<br/>
+<a href="backend.Globalenvs.html#symbols_init_transf">symbols_init_transf</a> [lemma, in <a href="backend.Globalenvs.html">backend.Globalenvs</a>]<br/>
+<a href="backend.Tunnelingproof.html#symbols_preserved">symbols_preserved</a> [lemma, in <a href="backend.Tunnelingproof.html">backend.Tunnelingproof</a>]<br/>
+<a href="backend.Allocproof.html#symbols_preserved">symbols_preserved</a> [lemma, in <a href="backend.Allocproof.html">backend.Allocproof</a>]<br/>
+<a href="backend.Cminorgenproof.html#symbols_preserved">symbols_preserved</a> [lemma, in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.Constpropproof.html#symbols_preserved">symbols_preserved</a> [lemma, in <a href="backend.Constpropproof.html">backend.Constpropproof</a>]<br/>
+<a href="backend.PPCgenproof.html#symbols_preserved">symbols_preserved</a> [lemma, in <a href="backend.PPCgenproof.html">backend.PPCgenproof</a>]<br/>
+<a href="backend.RTLgenproof.html#symbols_preserved">symbols_preserved</a> [lemma, in <a href="backend.RTLgenproof.html">backend.RTLgenproof</a>]<br/>
+<a href="backend.Linearizeproof.html#symbols_preserved">symbols_preserved</a> [lemma, in <a href="backend.Linearizeproof.html">backend.Linearizeproof</a>]<br/>
+<a href="backend.CSEproof.html#symbols_preserved">symbols_preserved</a> [lemma, in <a href="backend.CSEproof.html">backend.CSEproof</a>]<br/>
+<a href="backend.Stackingproof.html#symbols_preserved">symbols_preserved</a> [lemma, in <a href="backend.Stackingproof.html">backend.Stackingproof</a>]<br/>
+<a href="backend.PPC.html#symbol_offset">symbol_offset</a> [definition, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.Linearize.html#s1">s1</a> [definition, in <a href="backend.Linearize.html">backend.Linearize</a>]<br/>
+<br/><br/><a name="global_T"></a><h2>T </h2>
+<a href="backend.PPC.html#t">t</a> [definition, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="lib.Ordered.html#t">t</a> [definition, in <a href="lib.Ordered.html">lib.Ordered</a>]<br/>
+<a href="lib.Maps.html#t">t</a> [definition, in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Maps.html#t">t</a> [definition, in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Lattice.html#t">t</a> [definition, in <a href="lib.Lattice.html">lib.Lattice</a>]<br/>
+<a href="backend.Locations.html#t">t</a> [definition, in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Constprop.html#t">t</a> [definition, in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="lib.Ordered.html#t">t</a> [definition, in <a href="lib.Ordered.html">lib.Ordered</a>]<br/>
+<a href="backend.Globalenvs.html#t">t</a> [definition, in <a href="backend.Globalenvs.html">backend.Globalenvs</a>]<br/>
+<a href="lib.Lattice.html#t">t</a> [definition, in <a href="lib.Lattice.html">lib.Lattice</a>]<br/>
+<a href="backend.RTLtyping.html#T">T</a> [definition, in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="lib.union_find.html#T">T</a> [definition, in <a href="lib.union_find.html">lib.union_find</a>]<br/>
+<a href="backend.CSEproof.html#t">t</a> [definition, in <a href="backend.CSEproof.html">backend.CSEproof</a>]<br/>
+<a href="backend.Locations.html#t">t</a> [definition, in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="lib.Maps.html#t">t</a> [definition, in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="backend.Parallelmove.html#T">T</a> [definition, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="lib.Maps.html#t">t</a> [definition, in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="backend.RTLtyping.html#T">T</a> [definition, in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.InterfGraph.html#t">t</a> [definition, in <a href="backend.InterfGraph.html">backend.InterfGraph</a>]<br/>
+<a href="lib.Maps.html#t">t</a> [definition, in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Ordered.html#t">t</a> [definition, in <a href="lib.Ordered.html">lib.Ordered</a>]<br/>
+<a href="lib.Lattice.html#t">t</a> [definition, in <a href="lib.Lattice.html">lib.Lattice</a>]<br/>
+<a href="backend.Mach.html#t">t</a> [definition, in <a href="backend.Mach.html">backend.Mach</a>]<br/>
+<a href="lib.Sets.html#t">t</a> [definition, in <a href="lib.Sets.html">lib.Sets</a>]<br/>
+<a href="lib.Maps.html#t">t</a> [definition, in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="backend.CSE.html#t">t</a> [definition, in <a href="backend.CSE.html">backend.CSE</a>]<br/>
+<a href="backend.RTLgenproof1.html#target_regs_cons">target_regs_cons</a> [constructor, in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.RTLgenproof1.html#target_regs_nil">target_regs_nil</a> [constructor, in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.RTLgenproof1.html#target_regs_not_mutated">target_regs_not_mutated</a> [lemma, in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.RTLgenproof1.html#target_regs_ok">target_regs_ok</a> [inductive, in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.RTLgenproof1.html#target_regs_ok_incr">target_regs_ok_incr</a> [lemma, in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.RTLgenproof1.html#target_regs_valid">target_regs_valid</a> [lemma, in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.RTLgenproof1.html#target_reg_immut_var">target_reg_immut_var</a> [constructor, in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.RTLgenproof1.html#target_reg_not_mutated">target_reg_not_mutated</a> [lemma, in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.RTLgenproof1.html#target_reg_ok">target_reg_ok</a> [inductive, in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.RTLgenproof1.html#target_reg_ok_incr">target_reg_ok_incr</a> [lemma, in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.RTLgenproof1.html#target_reg_valid">target_reg_valid</a> [lemma, in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.Conventions.html#temporaries">temporaries</a> [definition, in <a href="backend.Conventions.html">backend.Conventions</a>]<br/>
+<a href="backend.Allocproof_aux.html#temporaries1">temporaries1</a> [definition, in <a href="backend.Allocproof_aux.html">backend.Allocproof_aux</a>]<br/>
+<a href="backend.Allocproof_aux.html#temporaries1_3">temporaries1_3</a> [definition, in <a href="backend.Allocproof_aux.html">backend.Allocproof_aux</a>]<br/>
+<a href="backend.Allocproof_aux.html#temporaries2">temporaries2</a> [definition, in <a href="backend.Allocproof_aux.html">backend.Allocproof_aux</a>]<br/>
+<a href="backend.Conventions.html#temporaries_not_acceptable">temporaries_not_acceptable</a> [lemma, in <a href="backend.Conventions.html">backend.Conventions</a>]<br/>
+<a href="backend.RTLtyping.html#teq">teq</a> [definition, in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.RTLtyping.html#teq_correct">teq_correct</a> [lemma, in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="lib.Inclusion.html#test_inclusion">test_inclusion</a> [definition, in <a href="lib.Inclusion.html">lib.Inclusion</a>]<br/>
+<a href="lib.Inclusion.html#test_inclusion_sound">test_inclusion_sound</a> [lemma, in <a href="lib.Inclusion.html">lib.Inclusion</a>]<br/>
+<a href="backend.AST.html#Tfloat">Tfloat</a> [constructor, in <a href="backend.AST.html">backend.AST</a>]<br/>
+<a href="backend.Allocation.html#Tint">Tint</a> [definition, in <a href="backend.Allocation.html">backend.Allocation</a>]<br/>
+<a href="backend.AST.html#Tint">Tint</a> [constructor, in <a href="backend.AST.html">backend.AST</a>]<br/>
+<a href="lib.Lattice.html#top">top</a> [definition, in <a href="lib.Lattice.html">lib.Lattice</a>]<br/>
+<a href="lib.Lattice.html#top">top</a> [definition, in <a href="lib.Lattice.html">lib.Lattice</a>]<br/>
+<a href="backend.CSE.html#top">top</a> [definition, in <a href="backend.CSE.html">backend.CSE</a>]<br/>
+<a href="backend.Constprop.html#top">top</a> [definition, in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="lib.Lattice.html#top">top</a> [definition, in <a href="lib.Lattice.html">lib.Lattice</a>]<br/>
+<a href="backend.CSE.html#top_ge">top_ge</a> [lemma, in <a href="backend.CSE.html">backend.CSE</a>]<br/>
+<a href="backend.Allocation.html#transfer">transfer</a> [definition, in <a href="backend.Allocation.html">backend.Allocation</a>]<br/>
+<a href="backend.Constprop.html#transfer">transfer</a> [definition, in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.CSE.html#transfer">transfer</a> [definition, in <a href="backend.CSE.html">backend.CSE</a>]<br/>
+<a href="backend.Constpropproof.html#transfer_correct">transfer_correct</a> [lemma, in <a href="backend.Constpropproof.html">backend.Constpropproof</a>]<br/>
+<a href="backend.CSEproof.html#transfer_correct">transfer_correct</a> [lemma, in <a href="backend.CSEproof.html">backend.CSEproof</a>]<br/>
+<a href="backend.AST.html#transform_partial_program">transform_partial_program</a> [definition, in <a href="backend.AST.html">backend.AST</a>]<br/>
+<a href="backend.Main.html#transform_partial_program_compose">transform_partial_program_compose</a> [lemma, in <a href="backend.Main.html">backend.Main</a>]<br/>
+<a href="backend.AST.html#transform_partial_program_function">transform_partial_program_function</a> [lemma, in <a href="backend.AST.html">backend.AST</a>]<br/>
+<a href="backend.AST.html#transform_partial_program_main">transform_partial_program_main</a> [lemma, in <a href="backend.AST.html">backend.AST</a>]<br/>
+<a href="backend.AST.html#transform_program">transform_program</a> [definition, in <a href="backend.AST.html">backend.AST</a>]<br/>
+<a href="backend.AST.html#transform_program_function">transform_program_function</a> [lemma, in <a href="backend.AST.html">backend.AST</a>]<br/>
+<a href="backend.Main.html#transform_program_partial_total">transform_program_partial_total</a> [lemma, in <a href="backend.Main.html">backend.Main</a>]<br/>
+<a href="backend.Globalenvs.html#transform_program_transform_partial_program">transform_program_transform_partial_program</a> [lemma, in <a href="backend.Globalenvs.html">backend.Globalenvs</a>]<br/>
+<a href="backend.Main.html#transf_cminor_function">transf_cminor_function</a> [definition, in <a href="backend.Main.html">backend.Main</a>]<br/>
+<a href="backend.Main.html#transf_cminor_program">transf_cminor_program</a> [definition, in <a href="backend.Main.html">backend.Main</a>]<br/>
+<a href="backend.Main.html#transf_cminor_program2">transf_cminor_program2</a> [definition, in <a href="backend.Main.html">backend.Main</a>]<br/>
+<a href="backend.Main.html#transf_cminor_program2_correct">transf_cminor_program2_correct</a> [lemma, in <a href="backend.Main.html">backend.Main</a>]<br/>
+<a href="backend.Main.html#transf_cminor_program_correct">transf_cminor_program_correct</a> [lemma, in <a href="backend.Main.html">backend.Main</a>]<br/>
+<a href="backend.Main.html#transf_cminor_program_equiv">transf_cminor_program_equiv</a> [lemma, in <a href="backend.Main.html">backend.Main</a>]<br/>
+<a href="backend.Constprop.html#transf_code">transf_code</a> [definition, in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.CSE.html#transf_code">transf_code</a> [definition, in <a href="backend.CSE.html">backend.CSE</a>]<br/>
+<a href="backend.CSE.html#transf_code_wf">transf_code_wf</a> [lemma, in <a href="backend.CSE.html">backend.CSE</a>]<br/>
+<a href="backend.Constprop.html#transf_code_wf">transf_code_wf</a> [lemma, in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.RTL.html#transf_code_wf">transf_code_wf</a> [lemma, in <a href="backend.RTL.html">backend.RTL</a>]<br/>
+<a href="backend.Main.html#transf_csharpminor_function">transf_csharpminor_function</a> [definition, in <a href="backend.Main.html">backend.Main</a>]<br/>
+<a href="backend.Main.html#transf_csharpminor_program">transf_csharpminor_program</a> [definition, in <a href="backend.Main.html">backend.Main</a>]<br/>
+<a href="backend.Main.html#transf_csharpminor_program2">transf_csharpminor_program2</a> [definition, in <a href="backend.Main.html">backend.Main</a>]<br/>
+<a href="backend.Main.html#transf_csharpminor_program2_correct">transf_csharpminor_program2_correct</a> [lemma, in <a href="backend.Main.html">backend.Main</a>]<br/>
+<a href="backend.Main.html#transf_csharpminor_program_correct">transf_csharpminor_program_correct</a> [lemma, in <a href="backend.Main.html">backend.Main</a>]<br/>
+<a href="backend.Main.html#transf_csharpminor_program_equiv">transf_csharpminor_program_equiv</a> [lemma, in <a href="backend.Main.html">backend.Main</a>]<br/>
+<a href="backend.Allocation.html#transf_entrypoint">transf_entrypoint</a> [definition, in <a href="backend.Allocation.html">backend.Allocation</a>]<br/>
+<a href="backend.Allocproof.html#transf_entrypoint_correct">transf_entrypoint_correct</a> [lemma, in <a href="backend.Allocproof.html">backend.Allocproof</a>]<br/>
+<a href="backend.Allocation.html#transf_entrypoint_wf">transf_entrypoint_wf</a> [lemma, in <a href="backend.Allocation.html">backend.Allocation</a>]<br/>
+<a href="backend.Linearize.html#transf_function">transf_function</a> [definition, in <a href="backend.Linearize.html">backend.Linearize</a>]<br/>
+<a href="backend.Allocation.html#transf_function">transf_function</a> [definition, in <a href="backend.Allocation.html">backend.Allocation</a>]<br/>
+<a href="backend.CSE.html#transf_function">transf_function</a> [definition, in <a href="backend.CSE.html">backend.CSE</a>]<br/>
+<a href="backend.RTL.html#transf_function">transf_function</a> [definition, in <a href="backend.RTL.html">backend.RTL</a>]<br/>
+<a href="backend.PPCgen.html#transf_function">transf_function</a> [definition, in <a href="backend.PPCgen.html">backend.PPCgen</a>]<br/>
+<a href="backend.Stacking.html#transf_function">transf_function</a> [definition, in <a href="backend.Stacking.html">backend.Stacking</a>]<br/>
+<a href="backend.Constprop.html#transf_function">transf_function</a> [definition, in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Linearizeproof.html#transf_function_correct">transf_function_correct</a> [lemma, in <a href="backend.Linearizeproof.html">backend.Linearizeproof</a>]<br/>
+<a href="backend.PPCgenproof.html#transf_function_correct">transf_function_correct</a> [lemma, in <a href="backend.PPCgenproof.html">backend.PPCgenproof</a>]<br/>
+<a href="backend.Stackingproof.html#transf_function_correct">transf_function_correct</a> [lemma, in <a href="backend.Stackingproof.html">backend.Stackingproof</a>]<br/>
+<a href="backend.CSEproof.html#transf_function_correct">transf_function_correct</a> [lemma, in <a href="backend.CSEproof.html">backend.CSEproof</a>]<br/>
+<a href="backend.Constpropproof.html#transf_funct_correct">transf_funct_correct</a> [lemma, in <a href="backend.Constpropproof.html">backend.Constpropproof</a>]<br/>
+<a href="backend.Allocation.html#transf_instr">transf_instr</a> [definition, in <a href="backend.Allocation.html">backend.Allocation</a>]<br/>
+<a href="backend.Constprop.html#transf_instr">transf_instr</a> [definition, in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.CSE.html#transf_instr">transf_instr</a> [definition, in <a href="backend.CSE.html">backend.CSE</a>]<br/>
+<a href="backend.Globalenvs.html#transf_partial">transf_partial</a> [definition, in <a href="backend.Globalenvs.html">backend.Globalenvs</a>]<br/>
+<a href="backend.AST.html#transf_partial_program">transf_partial_program</a> [definition, in <a href="backend.AST.html">backend.AST</a>]<br/>
+<a href="backend.Main.html#transf_partial_program_compose">transf_partial_program_compose</a> [lemma, in <a href="backend.Main.html">backend.Main</a>]<br/>
+<a href="backend.CSE.html#transf_program">transf_program</a> [definition, in <a href="backend.CSE.html">backend.CSE</a>]<br/>
+<a href="backend.PPCgen.html#transf_program">transf_program</a> [definition, in <a href="backend.PPCgen.html">backend.PPCgen</a>]<br/>
+<a href="backend.Stacking.html#transf_program">transf_program</a> [definition, in <a href="backend.Stacking.html">backend.Stacking</a>]<br/>
+<a href="backend.Constprop.html#transf_program">transf_program</a> [definition, in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Allocation.html#transf_program">transf_program</a> [definition, in <a href="backend.Allocation.html">backend.Allocation</a>]<br/>
+<a href="backend.Linearize.html#transf_program">transf_program</a> [definition, in <a href="backend.Linearize.html">backend.Linearize</a>]<br/>
+<a href="backend.AST.html#transf_program">transf_program</a> [definition, in <a href="backend.AST.html">backend.AST</a>]<br/>
+<a href="backend.Linearizeproof.html#transf_program_correct">transf_program_correct</a> [lemma, in <a href="backend.Linearizeproof.html">backend.Linearizeproof</a>]<br/>
+<a href="backend.Tunnelingproof.html#transf_program_correct">transf_program_correct</a> [lemma, in <a href="backend.Tunnelingproof.html">backend.Tunnelingproof</a>]<br/>
+<a href="backend.Constpropproof.html#transf_program_correct">transf_program_correct</a> [lemma, in <a href="backend.Constpropproof.html">backend.Constpropproof</a>]<br/>
+<a href="backend.PPCgenproof.html#transf_program_correct">transf_program_correct</a> [lemma, in <a href="backend.PPCgenproof.html">backend.PPCgenproof</a>]<br/>
+<a href="backend.CSEproof.html#transf_program_correct">transf_program_correct</a> [lemma, in <a href="backend.CSEproof.html">backend.CSEproof</a>]<br/>
+<a href="backend.Main.html#transf_program_partial_total">transf_program_partial_total</a> [lemma, in <a href="backend.Main.html">backend.Main</a>]<br/>
+<a href="backend.Globalenvs.html#transf_program_transf_partial_program">transf_program_transf_partial_program</a> [lemma, in <a href="backend.Globalenvs.html">backend.Globalenvs</a>]<br/>
+<a href="lib.Integers.html#translate_cmp">translate_cmp</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#translate_eq">translate_eq</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#translate_lt">translate_lt</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Stacking.html#transl_addr">transl_addr</a> [definition, in <a href="backend.Stacking.html">backend.Stacking</a>]<br/>
+<a href="backend.Stacking.html#transl_body">transl_body</a> [definition, in <a href="backend.Stacking.html">backend.Stacking</a>]<br/>
+<a href="backend.PPCgen.html#transl_code">transl_code</a> [definition, in <a href="backend.PPCgen.html">backend.PPCgen</a>]<br/>
+<a href="backend.Stacking.html#transl_code">transl_code</a> [definition, in <a href="backend.Stacking.html">backend.Stacking</a>]<br/>
+<a href="backend.PPCgenproof.html#transl_code_at_pc">transl_code_at_pc</a> [inductive, in <a href="backend.PPCgenproof.html">backend.PPCgenproof</a>]<br/>
+<a href="backend.PPCgenproof.html#transl_code_label">transl_code_label</a> [lemma, in <a href="backend.PPCgenproof.html">backend.PPCgenproof</a>]<br/>
+<a href="backend.PPCgen.html#transl_cond">transl_cond</a> [definition, in <a href="backend.PPCgen.html">backend.PPCgen</a>]<br/>
+<a href="backend.RTLgenproof.html#transl_condition_CEcondition_correct">transl_condition_CEcondition_correct</a> [lemma, in <a href="backend.RTLgenproof.html">backend.RTLgenproof</a>]<br/>
+<a href="backend.RTLgenproof.html#transl_condition_CEcond_correct">transl_condition_CEcond_correct</a> [lemma, in <a href="backend.RTLgenproof.html">backend.RTLgenproof</a>]<br/>
+<a href="backend.RTLgenproof.html#transl_condition_CEfalse_correct">transl_condition_CEfalse_correct</a> [lemma, in <a href="backend.RTLgenproof.html">backend.RTLgenproof</a>]<br/>
+<a href="backend.RTLgenproof.html#transl_condition_CEtrue_correct">transl_condition_CEtrue_correct</a> [lemma, in <a href="backend.RTLgenproof.html">backend.RTLgenproof</a>]<br/>
+<a href="backend.RTLgenproof.html#transl_condition_correct">transl_condition_correct</a> [definition, in <a href="backend.RTLgenproof.html">backend.RTLgenproof</a>]<br/>
+<a href="backend.RTLgenproof1.html#transl_condition_incr">transl_condition_incr</a> [lemma, in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.RTLgenproof1.html#transl_condition_incr_pred">transl_condition_incr_pred</a> [definition, in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.PPCgenproof1.html#transl_cond_correct">transl_cond_correct</a> [lemma, in <a href="backend.PPCgenproof1.html">backend.PPCgenproof1</a>]<br/>
+<a href="backend.PPCgenproof1.html#transl_cond_correct_aux">transl_cond_correct_aux</a> [lemma, in <a href="backend.PPCgenproof1.html">backend.PPCgenproof1</a>]<br/>
+<a href="backend.RTLgen.html#transl_expr">transl_expr</a> [definition, in <a href="backend.RTLgen.html">backend.RTLgen</a>]<br/>
+<a href="backend.Cminorgen.html#transl_expr">transl_expr</a> [definition, in <a href="backend.Cminorgen.html">backend.Cminorgen</a>]<br/>
+<a href="backend.RTLgenproof.html#transl_exprlist_correct">transl_exprlist_correct</a> [definition, in <a href="backend.RTLgenproof.html">backend.RTLgenproof</a>]<br/>
+<a href="backend.Cminorgenproof.html#transl_exprlist_Econs_correct">transl_exprlist_Econs_correct</a> [lemma, in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.RTLgenproof.html#transl_exprlist_Econs_correct">transl_exprlist_Econs_correct</a> [lemma, in <a href="backend.RTLgenproof.html">backend.RTLgenproof</a>]<br/>
+<a href="backend.RTLgenproof.html#transl_exprlist_Enil_correct">transl_exprlist_Enil_correct</a> [lemma, in <a href="backend.RTLgenproof.html">backend.RTLgenproof</a>]<br/>
+<a href="backend.Cminorgenproof.html#transl_exprlist_Enil_correct">transl_exprlist_Enil_correct</a> [lemma, in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.RTLgenproof1.html#transl_exprlist_incr">transl_exprlist_incr</a> [lemma, in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.RTLgenproof1.html#transl_exprlist_incr_pred">transl_exprlist_incr_pred</a> [definition, in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.RTLgenproof1.html#transl_expr_condition_exprlist_incr">transl_expr_condition_exprlist_incr</a> [lemma, in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.RTLgenproof.html#transl_expr_correct">transl_expr_correct</a> [definition, in <a href="backend.RTLgenproof.html">backend.RTLgenproof</a>]<br/>
+<a href="backend.Cminorgenproof.html#transl_expr_Eaddrof_global_correct">transl_expr_Eaddrof_global_correct</a> [lemma, in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.Cminorgenproof.html#transl_expr_Eaddrof_local_correct">transl_expr_Eaddrof_local_correct</a> [lemma, in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.Cminorgenproof.html#transl_expr_Eassign_correct">transl_expr_Eassign_correct</a> [lemma, in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.RTLgenproof.html#transl_expr_Eassign_correct">transl_expr_Eassign_correct</a> [lemma, in <a href="backend.RTLgenproof.html">backend.RTLgenproof</a>]<br/>
+<a href="backend.RTLgenproof.html#transl_expr_Ecall_correct">transl_expr_Ecall_correct</a> [lemma, in <a href="backend.RTLgenproof.html">backend.RTLgenproof</a>]<br/>
+<a href="backend.Cminorgenproof.html#transl_expr_Ecall_correct">transl_expr_Ecall_correct</a> [lemma, in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.RTLgenproof.html#transl_expr_Econdition_correct">transl_expr_Econdition_correct</a> [lemma, in <a href="backend.RTLgenproof.html">backend.RTLgenproof</a>]<br/>
+<a href="backend.Cminorgenproof.html#transl_expr_Econdition_false_correct">transl_expr_Econdition_false_correct</a> [lemma, in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.Cminorgenproof.html#transl_expr_Econdition_true_correct">transl_expr_Econdition_true_correct</a> [lemma, in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.RTLgenproof.html#transl_expr_Eletvar_correct">transl_expr_Eletvar_correct</a> [lemma, in <a href="backend.RTLgenproof.html">backend.RTLgenproof</a>]<br/>
+<a href="backend.Cminorgenproof.html#transl_expr_Eletvar_correct">transl_expr_Eletvar_correct</a> [lemma, in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.Cminorgenproof.html#transl_expr_Elet_correct">transl_expr_Elet_correct</a> [lemma, in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.RTLgenproof.html#transl_expr_Elet_correct">transl_expr_Elet_correct</a> [lemma, in <a href="backend.RTLgenproof.html">backend.RTLgenproof</a>]<br/>
+<a href="backend.RTLgenproof.html#transl_expr_Eload_correct">transl_expr_Eload_correct</a> [lemma, in <a href="backend.RTLgenproof.html">backend.RTLgenproof</a>]<br/>
+<a href="backend.Cminorgenproof.html#transl_expr_Eload_correct">transl_expr_Eload_correct</a> [lemma, in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.RTLgenproof.html#transl_expr_Eop_correct">transl_expr_Eop_correct</a> [lemma, in <a href="backend.RTLgenproof.html">backend.RTLgenproof</a>]<br/>
+<a href="backend.Cminorgenproof.html#transl_expr_Eop_correct">transl_expr_Eop_correct</a> [lemma, in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.RTLgenproof.html#transl_expr_Estore_correct">transl_expr_Estore_correct</a> [lemma, in <a href="backend.RTLgenproof.html">backend.RTLgenproof</a>]<br/>
+<a href="backend.Cminorgenproof.html#transl_expr_Estore_correct">transl_expr_Estore_correct</a> [lemma, in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.Cminorgenproof.html#transl_expr_Evar_correct">transl_expr_Evar_correct</a> [lemma, in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.RTLgenproof.html#transl_expr_Evar_correct">transl_expr_Evar_correct</a> [lemma, in <a href="backend.RTLgenproof.html">backend.RTLgenproof</a>]<br/>
+<a href="backend.RTLgenproof1.html#transl_expr_incr">transl_expr_incr</a> [lemma, in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.RTLgenproof1.html#transl_expr_incr_pred">transl_expr_incr_pred</a> [definition, in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.PPCgenproof.html#transl_find_label">transl_find_label</a> [lemma, in <a href="backend.PPCgenproof.html">backend.PPCgenproof</a>]<br/>
+<a href="backend.Stackingproof.html#transl_find_label">transl_find_label</a> [lemma, in <a href="backend.Stackingproof.html">backend.Stackingproof</a>]<br/>
+<a href="backend.RTLgen.html#transl_fun">transl_fun</a> [definition, in <a href="backend.RTLgen.html">backend.RTLgen</a>]<br/>
+<a href="backend.Cminorgenproof.html#transl_funcall_correct">transl_funcall_correct</a> [lemma, in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.RTLgenproof.html#transl_funcall_correct">transl_funcall_correct</a> [lemma, in <a href="backend.RTLgenproof.html">backend.RTLgenproof</a>]<br/>
+<a href="backend.Cminorgen.html#transl_function">transl_function</a> [definition, in <a href="backend.Cminorgen.html">backend.Cminorgen</a>]<br/>
+<a href="backend.PPCgen.html#transl_function">transl_function</a> [definition, in <a href="backend.PPCgen.html">backend.PPCgen</a>]<br/>
+<a href="backend.RTLgen.html#transl_function">transl_function</a> [definition, in <a href="backend.RTLgen.html">backend.RTLgen</a>]<br/>
+<a href="backend.RTLgenproof.html#transl_function_correct">transl_function_correct</a> [definition, in <a href="backend.RTLgenproof.html">backend.RTLgenproof</a>]<br/>
+<a href="backend.Allocproof.html#transl_function_correct">transl_function_correct</a> [lemma, in <a href="backend.Allocproof.html">backend.Allocproof</a>]<br/>
+<a href="backend.Cminorgenproof.html#transl_function_correct">transl_function_correct</a> [lemma, in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.Allocproof.html#transl_function_correctness">transl_function_correctness</a> [lemma, in <a href="backend.Allocproof.html">backend.Allocproof</a>]<br/>
+<a href="backend.RTLgenproof.html#transl_function_correctness">transl_function_correctness</a> [lemma, in <a href="backend.RTLgenproof.html">backend.RTLgenproof</a>]<br/>
+<a href="backend.Allocproof.html#transl_Icall_correct">transl_Icall_correct</a> [lemma, in <a href="backend.Allocproof.html">backend.Allocproof</a>]<br/>
+<a href="backend.Allocproof.html#transl_Icond_false_correct">transl_Icond_false_correct</a> [lemma, in <a href="backend.Allocproof.html">backend.Allocproof</a>]<br/>
+<a href="backend.Allocproof.html#transl_Icond_true_correct">transl_Icond_true_correct</a> [lemma, in <a href="backend.Allocproof.html">backend.Allocproof</a>]<br/>
+<a href="backend.Allocproof.html#transl_Iload_correct">transl_Iload_correct</a> [lemma, in <a href="backend.Allocproof.html">backend.Allocproof</a>]<br/>
+<a href="backend.Allocproof.html#transl_Inop_correct">transl_Inop_correct</a> [lemma, in <a href="backend.Allocproof.html">backend.Allocproof</a>]<br/>
+<a href="backend.PPCgen.html#transl_instr">transl_instr</a> [definition, in <a href="backend.PPCgen.html">backend.PPCgen</a>]<br/>
+<a href="backend.Stacking.html#transl_instr">transl_instr</a> [definition, in <a href="backend.Stacking.html">backend.Stacking</a>]<br/>
+<a href="backend.PPCgenproof.html#transl_instr_label">transl_instr_label</a> [lemma, in <a href="backend.PPCgenproof.html">backend.PPCgenproof</a>]<br/>
+<a href="backend.Allocproof.html#transl_Iop_correct">transl_Iop_correct</a> [lemma, in <a href="backend.Allocproof.html">backend.Allocproof</a>]<br/>
+<a href="backend.Allocproof.html#transl_Istore_correct">transl_Istore_correct</a> [lemma, in <a href="backend.Allocproof.html">backend.Allocproof</a>]<br/>
+<a href="backend.PPCgenproof1.html#transl_load_correct">transl_load_correct</a> [lemma, in <a href="backend.PPCgenproof1.html">backend.PPCgenproof1</a>]<br/>
+<a href="backend.PPCgen.html#transl_load_store">transl_load_store</a> [definition, in <a href="backend.PPCgen.html">backend.PPCgen</a>]<br/>
+<a href="backend.PPCgenproof1.html#transl_load_store_correct">transl_load_store_correct</a> [lemma, in <a href="backend.PPCgenproof1.html">backend.PPCgenproof1</a>]<br/>
+<a href="backend.Allocproof.html#transl_one_correct">transl_one_correct</a> [lemma, in <a href="backend.Allocproof.html">backend.Allocproof</a>]<br/>
+<a href="backend.Stacking.html#transl_op">transl_op</a> [definition, in <a href="backend.Stacking.html">backend.Stacking</a>]<br/>
+<a href="backend.PPCgen.html#transl_op">transl_op</a> [definition, in <a href="backend.PPCgen.html">backend.PPCgen</a>]<br/>
+<a href="backend.PPCgenproof1.html#transl_op_correct">transl_op_correct</a> [lemma, in <a href="backend.PPCgenproof1.html">backend.PPCgenproof1</a>]<br/>
+<a href="backend.RTLgen.html#transl_program">transl_program</a> [definition, in <a href="backend.RTLgen.html">backend.RTLgen</a>]<br/>
+<a href="backend.Cminorgen.html#transl_program">transl_program</a> [definition, in <a href="backend.Cminorgen.html">backend.Cminorgen</a>]<br/>
+<a href="backend.RTLgenproof.html#transl_program_correct">transl_program_correct</a> [lemma, in <a href="backend.RTLgenproof.html">backend.RTLgenproof</a>]<br/>
+<a href="backend.Stackingproof.html#transl_program_correct">transl_program_correct</a> [lemma, in <a href="backend.Stackingproof.html">backend.Stackingproof</a>]<br/>
+<a href="backend.Allocproof.html#transl_program_correct">transl_program_correct</a> [lemma, in <a href="backend.Allocproof.html">backend.Allocproof</a>]<br/>
+<a href="backend.Cminorgenproof.html#transl_program_correct">transl_program_correct</a> [lemma, in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.Allocproof.html#transl_refl_correct">transl_refl_correct</a> [lemma, in <a href="backend.Allocproof.html">backend.Allocproof</a>]<br/>
+<a href="backend.Cminorgen.html#transl_stmt">transl_stmt</a> [definition, in <a href="backend.Cminorgen.html">backend.Cminorgen</a>]<br/>
+<a href="backend.RTLgen.html#transl_stmt">transl_stmt</a> [definition, in <a href="backend.RTLgen.html">backend.RTLgen</a>]<br/>
+<a href="backend.RTLgenproof.html#transl_stmtlist_correct">transl_stmtlist_correct</a> [definition, in <a href="backend.RTLgenproof.html">backend.RTLgenproof</a>]<br/>
+<a href="backend.RTLgenproof1.html#transl_stmtlist_incr">transl_stmtlist_incr</a> [lemma, in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.RTLgenproof1.html#transl_stmtlist_incr_pred">transl_stmtlist_incr_pred</a> [definition, in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.RTLgenproof.html#transl_stmtlist_Scons_continue_correct">transl_stmtlist_Scons_continue_correct</a> [lemma, in <a href="backend.RTLgenproof.html">backend.RTLgenproof</a>]<br/>
+<a href="backend.RTLgenproof.html#transl_stmtlist_Scons_stop_correct">transl_stmtlist_Scons_stop_correct</a> [lemma, in <a href="backend.RTLgenproof.html">backend.RTLgenproof</a>]<br/>
+<a href="backend.Cminorgenproof.html#transl_stmtlist_Scons_1_correct">transl_stmtlist_Scons_1_correct</a> [lemma, in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.Cminorgenproof.html#transl_stmtlist_Scons_2_correct">transl_stmtlist_Scons_2_correct</a> [lemma, in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.RTLgenproof.html#transl_stmtlist_Snil_correct">transl_stmtlist_Snil_correct</a> [lemma, in <a href="backend.RTLgenproof.html">backend.RTLgenproof</a>]<br/>
+<a href="backend.Cminorgenproof.html#transl_stmtlist_Snil_correct">transl_stmtlist_Snil_correct</a> [lemma, in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.RTLgenproof.html#transl_stmt_correct">transl_stmt_correct</a> [definition, in <a href="backend.RTLgenproof.html">backend.RTLgenproof</a>]<br/>
+<a href="backend.RTLgenproof1.html#transl_stmt_incr">transl_stmt_incr</a> [lemma, in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.RTLgenproof1.html#transl_stmt_incr_pred">transl_stmt_incr_pred</a> [definition, in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.RTLgenproof.html#transl_stmt_Sblock_correct">transl_stmt_Sblock_correct</a> [lemma, in <a href="backend.RTLgenproof.html">backend.RTLgenproof</a>]<br/>
+<a href="backend.Cminorgenproof.html#transl_stmt_Sblock_correct">transl_stmt_Sblock_correct</a> [lemma, in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.RTLgenproof.html#transl_stmt_Sexit_correct">transl_stmt_Sexit_correct</a> [lemma, in <a href="backend.RTLgenproof.html">backend.RTLgenproof</a>]<br/>
+<a href="backend.Cminorgenproof.html#transl_stmt_Sexit_correct">transl_stmt_Sexit_correct</a> [lemma, in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.RTLgenproof.html#transl_stmt_Sexpr_correct">transl_stmt_Sexpr_correct</a> [lemma, in <a href="backend.RTLgenproof.html">backend.RTLgenproof</a>]<br/>
+<a href="backend.Cminorgenproof.html#transl_stmt_Sexpr_correct">transl_stmt_Sexpr_correct</a> [lemma, in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.RTLgenproof.html#transl_stmt_Sifthenelse_correct">transl_stmt_Sifthenelse_correct</a> [lemma, in <a href="backend.RTLgenproof.html">backend.RTLgenproof</a>]<br/>
+<a href="backend.Cminorgenproof.html#transl_stmt_Sifthenelse_false_correct">transl_stmt_Sifthenelse_false_correct</a> [lemma, in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.Cminorgenproof.html#transl_stmt_Sifthenelse_true_correct">transl_stmt_Sifthenelse_true_correct</a> [lemma, in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.Cminorgenproof.html#transl_stmt_Sloop_exit_correct">transl_stmt_Sloop_exit_correct</a> [lemma, in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.Cminorgenproof.html#transl_stmt_Sloop_loop_correct">transl_stmt_Sloop_loop_correct</a> [lemma, in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.RTLgenproof.html#transl_stmt_Sloop_loop_correct">transl_stmt_Sloop_loop_correct</a> [lemma, in <a href="backend.RTLgenproof.html">backend.RTLgenproof</a>]<br/>
+<a href="backend.RTLgenproof.html#transl_stmt_Sloop_stop_correct">transl_stmt_Sloop_stop_correct</a> [lemma, in <a href="backend.RTLgenproof.html">backend.RTLgenproof</a>]<br/>
+<a href="backend.Cminorgenproof.html#transl_stmt_Sreturn_none_correct">transl_stmt_Sreturn_none_correct</a> [lemma, in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.RTLgenproof.html#transl_stmt_Sreturn_none_correct">transl_stmt_Sreturn_none_correct</a> [lemma, in <a href="backend.RTLgenproof.html">backend.RTLgenproof</a>]<br/>
+<a href="backend.RTLgenproof.html#transl_stmt_Sreturn_some_correct">transl_stmt_Sreturn_some_correct</a> [lemma, in <a href="backend.RTLgenproof.html">backend.RTLgenproof</a>]<br/>
+<a href="backend.Cminorgenproof.html#transl_stmt_Sreturn_some_correct">transl_stmt_Sreturn_some_correct</a> [lemma, in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.RTLgenproof1.html#transl_stmt_stmtlist_incr">transl_stmt_stmtlist_incr</a> [lemma, in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.PPCgenproof1.html#transl_store_correct">transl_store_correct</a> [lemma, in <a href="backend.PPCgenproof1.html">backend.PPCgenproof1</a>]<br/>
+<a href="backend.Allocproof.html#transl_trans_correct">transl_trans_correct</a> [lemma, in <a href="backend.Allocproof.html">backend.Allocproof</a>]<br/>
+<a href="lib.Maps.html#tree">tree</a> [inductive, in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Maps.html#TREE">TREE</a> [module, in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="backend.RTLtyping.html#tReg">tReg</a> [constructor, in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.RTLtyping.html#tTy">tTy</a> [constructor, in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.Tunnelingproof.html#tunneled_code">tunneled_code</a> [definition, in <a href="backend.Tunnelingproof.html">backend.Tunnelingproof</a>]<br/>
+<a href="backend.Tunneling.html">Tunneling</a> [library]<br/>
+<a href="backend.Tunnelingproof.html">Tunnelingproof</a> [library]<br/>
+<a href="backend.Tunnelingtyping.html">Tunnelingtyping</a> [library]<br/>
+<a href="backend.Tunneling.html#tunnel_block">tunnel_block</a> [definition, in <a href="backend.Tunneling.html">backend.Tunneling</a>]<br/>
+<a href="backend.Tunneling.html#tunnel_function">tunnel_function</a> [definition, in <a href="backend.Tunneling.html">backend.Tunneling</a>]<br/>
+<a href="backend.Tunnelingproof.html#tunnel_function_correct">tunnel_function_correct</a> [lemma, in <a href="backend.Tunnelingproof.html">backend.Tunnelingproof</a>]<br/>
+<a href="backend.Tunnelingproof.html#tunnel_outcome">tunnel_outcome</a> [definition, in <a href="backend.Tunnelingproof.html">backend.Tunnelingproof</a>]<br/>
+<a href="backend.Tunneling.html#tunnel_program">tunnel_program</a> [definition, in <a href="backend.Tunneling.html">backend.Tunneling</a>]<br/>
+<a href="lib.Coqlib.html#two_power_nat_O">two_power_nat_O</a> [lemma, in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="lib.Coqlib.html#two_power_nat_pos">two_power_nat_pos</a> [lemma, in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="backend.AST.html#typ">typ</a> [inductive, in <a href="backend.AST.html">backend.AST</a>]<br/>
+<a href="backend.Locations.html#type">type</a> [definition, in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Registers.html#typenv">typenv</a> [definition, in <a href="backend.Registers.html">backend.Registers</a>]<br/>
+<a href="backend.AST.html#typesize">typesize</a> [definition, in <a href="backend.AST.html">backend.AST</a>]<br/>
+<a href="backend.Locations.html#typesize">typesize</a> [definition, in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Locations.html#typesize_pos">typesize_pos</a> [lemma, in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.RTLtyping.html#type_args_complete">type_args_complete</a> [lemma, in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.RTLtyping.html#type_args_correct">type_args_correct</a> [lemma, in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.RTLtyping.html#type_args_extends">type_args_extends</a> [lemma, in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.RTLtyping.html#type_args_included">type_args_included</a> [lemma, in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.RTLtyping.html#type_args_mapped">type_args_mapped</a> [lemma, in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.RTLtyping.html#type_args_res_complete">type_args_res_complete</a> [lemma, in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.RTLtyping.html#type_args_res_included">type_args_res_included</a> [lemma, in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.RTLtyping.html#type_args_res_ros_included">type_args_res_ros_included</a> [lemma, in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.RTLtyping.html#type_arg_complete">type_arg_complete</a> [lemma, in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.RTLtyping.html#type_arg_correct">type_arg_correct</a> [lemma, in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.RTLtyping.html#type_arg_correct_1">type_arg_correct_1</a> [lemma, in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.RTLtyping.html#type_arg_extends">type_arg_extends</a> [lemma, in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.RTLtyping.html#type_arg_included">type_arg_included</a> [lemma, in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.RTLtyping.html#type_arg_mapped">type_arg_mapped</a> [lemma, in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.RTLtyping.html#type_instrs_extends">type_instrs_extends</a> [lemma, in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.RTLtyping.html#type_instrs_included">type_instrs_included</a> [lemma, in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.RTLtyping.html#type_instr_included">type_instr_included</a> [lemma, in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.Op.html#type_of_addressing">type_of_addressing</a> [definition, in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Op.html#type_of_chunk">type_of_chunk</a> [definition, in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Op.html#type_of_chunk_correct">type_of_chunk_correct</a> [lemma, in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Op.html#type_of_condition">type_of_condition</a> [definition, in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Stackingproof.html#type_of_index">type_of_index</a> [definition, in <a href="backend.Stackingproof.html">backend.Stackingproof</a>]<br/>
+<a href="backend.Op.html#type_of_operation">type_of_operation</a> [definition, in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Op.html#type_of_operation_sound">type_of_operation_sound</a> [lemma, in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.RTLtyping.html#type_of_sig_res">type_of_sig_res</a> [definition, in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.RTLtyping.html#type_res_complete">type_res_complete</a> [lemma, in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.RTLtyping.html#type_res_correct">type_res_correct</a> [lemma, in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.RTLtyping.html#type_ros_complete">type_ros_complete</a> [lemma, in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.RTLtyping.html#type_ros_correct">type_ros_correct</a> [lemma, in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.RTLtyping.html#type_rtl_arg">type_rtl_arg</a> [definition, in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.RTLtyping.html#type_rtl_function">type_rtl_function</a> [definition, in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.RTLtyping.html#type_rtl_function_correct">type_rtl_function_correct</a> [lemma, in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.RTLtyping.html#type_rtl_function_instrs">type_rtl_function_instrs</a> [lemma, in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.RTLtyping.html#type_rtl_function_norepet">type_rtl_function_norepet</a> [lemma, in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.RTLtyping.html#type_rtl_function_params">type_rtl_function_params</a> [lemma, in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.RTLtyping.html#type_rtl_instr">type_rtl_instr</a> [definition, in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.RTLtyping.html#type_rtl_ros">type_rtl_ros</a> [definition, in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="lib.Lattice.html#t_">t_</a> [inductive, in <a href="lib.Lattice.html">lib.Lattice</a>]<br/>
+<a href="lib.Lattice.html#t_">t_</a> [inductive, in <a href="lib.Lattice.html">lib.Lattice</a>]<br/>
+<a href="backend.Alloctyping_aux.html#T_type">T_type</a> [lemma, in <a href="backend.Alloctyping_aux.html">backend.Alloctyping_aux</a>]<br/>
+<br/><br/><a name="global_U"></a><h2>U </h2>
+<a href="backend.RTLtyping.html#Uf">Uf</a> [module, in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.Mem.html#unchecked_store">unchecked_store</a> [definition, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#Undef">Undef</a> [constructor, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Values.html#undef_is_bool">undef_is_bool</a> [lemma, in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.Stackingproof.html#unfold_transf_function">unfold_transf_function</a> [lemma, in <a href="backend.Stackingproof.html">backend.Stackingproof</a>]<br/>
+<a href="lib.Sets.html#union">union</a> [definition, in <a href="lib.Sets.html">lib.Sets</a>]<br/>
+<a href="lib.union_find.html#UNIONFIND">UNIONFIND</a> [module, in <a href="lib.union_find.html">lib.union_find</a>]<br/>
+<a href="lib.union_find.html#unionfind">unionfind</a> [inductive, in <a href="lib.union_find.html">lib.union_find</a>]<br/>
+<a href="lib.union_find.html#Unionfind">Unionfind</a> [module, in <a href="lib.union_find.html">lib.union_find</a>]<br/>
+<a href="lib.union_find.html">union_find</a> [library]<br/>
+<a href="backend.Linearizeproof.html#unique_labels">unique_labels</a> [definition, in <a href="backend.Linearizeproof.html">backend.Linearizeproof</a>]<br/>
+<a href="backend.Linearizeproof.html#unique_labels_lin_block">unique_labels_lin_block</a> [lemma, in <a href="backend.Linearizeproof.html">backend.Linearizeproof</a>]<br/>
+<a href="backend.Linearizeproof.html#unique_labels_lin_function">unique_labels_lin_function</a> [lemma, in <a href="backend.Linearizeproof.html">backend.Linearizeproof</a>]<br/>
+<a href="backend.Linearizeproof.html#unique_labels_lin_rec">unique_labels_lin_rec</a> [lemma, in <a href="backend.Linearizeproof.html">backend.Linearizeproof</a>]<br/>
+<a href="lib.Coqlib.html#unroll_positive_rec">unroll_positive_rec</a> [lemma, in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="lib.Integers.html#unsigned">unsigned</a> [definition, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#unsigned_range">unsigned_range</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#unsigned_range_2">unsigned_range_2</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#unsigned_repr">unsigned_repr</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Parallelmove.html#unsplit_move">unsplit_move</a> [lemma, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Mem.html#update">update</a> [definition, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Parallelmove.html#update">update</a> [definition, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.RTLgen.html#update_instr">update_instr</a> [definition, in <a href="backend.RTLgen.html">backend.RTLgen</a>]<br/>
+<a href="backend.RTLgenproof1.html#update_instr_extends">update_instr_extends</a> [lemma, in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.RTLgenproof1.html#update_instr_incr">update_instr_incr</a> [lemma, in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.RTLgen.html#update_instr_wf">update_instr_wf</a> [lemma, in <a href="backend.RTLgen.html">backend.RTLgen</a>]<br/>
+<a href="backend.Mem.html#update_o">update_o</a> [lemma, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#update_s">update_s</a> [lemma, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<br/><br/><a name="global_V"></a><h2>V </h2>
+<a href="backend.Values.html#Val">Val</a> [module, in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.Values.html#val">val</a> [inductive, in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.Mem.html#valid_block">valid_block</a> [definition, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#valid_block_alloc">valid_block_alloc</a> [lemma, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#valid_block_free">valid_block_free</a> [lemma, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#valid_block_store">valid_block_store</a> [lemma, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.RTLgenproof1.html#valid_fresh_absurd">valid_fresh_absurd</a> [lemma, in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.RTLgenproof1.html#valid_fresh_different">valid_fresh_different</a> [lemma, in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.Mem.html#valid_new_block">valid_new_block</a> [lemma, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#valid_not_valid_diff">valid_not_valid_diff</a> [lemma, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Linearizeproof.html#valid_outcome">valid_outcome</a> [definition, in <a href="backend.Linearizeproof.html">backend.Linearizeproof</a>]<br/>
+<a href="backend.Mem.html#valid_pointer">valid_pointer</a> [definition, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#valid_pointer_inject_no_overflow">valid_pointer_inject_no_overflow</a> [lemma, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.CSE.html#valnum">valnum</a> [definition, in <a href="backend.CSE.html">backend.CSE</a>]<br/>
+<a href="backend.CSEproof.html#ValnumEq">ValnumEq</a> [module, in <a href="backend.CSEproof.html">backend.CSEproof</a>]<br/>
+<a href="backend.CSE.html#valnum_reg">valnum_reg</a> [definition, in <a href="backend.CSE.html">backend.CSE</a>]<br/>
+<a href="backend.CSE.html#valnum_regs">valnum_regs</a> [definition, in <a href="backend.CSE.html">backend.CSE</a>]<br/>
+<a href="backend.CSEproof.html#valnum_regs_holds">valnum_regs_holds</a> [lemma, in <a href="backend.CSEproof.html">backend.CSEproof</a>]<br/>
+<a href="backend.CSEproof.html#valnum_reg_holds">valnum_reg_holds</a> [lemma, in <a href="backend.CSEproof.html">backend.CSEproof</a>]<br/>
+<a href="backend.Parallelmove.html#Value">Value</a> [definition, in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Values.html">Values</a> [library]<br/>
+<a href="backend.CSEproof.html#valu_agree">valu_agree</a> [definition, in <a href="backend.CSEproof.html">backend.CSEproof</a>]<br/>
+<a href="backend.CSEproof.html#valu_agree_list">valu_agree_list</a> [lemma, in <a href="backend.CSEproof.html">backend.CSEproof</a>]<br/>
+<a href="backend.CSEproof.html#valu_agree_refl">valu_agree_refl</a> [lemma, in <a href="backend.CSEproof.html">backend.CSEproof</a>]<br/>
+<a href="backend.CSEproof.html#valu_agree_trans">valu_agree_trans</a> [lemma, in <a href="backend.CSEproof.html">backend.CSEproof</a>]<br/>
+<a href="backend.PPC.html#val_cond_reg">val_cond_reg</a> [definition, in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.Mem.html#val_cons_inject">val_cons_inject</a> [constructor, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#val_content_inject">val_content_inject</a> [inductive, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#val_content_inject_base">val_content_inject_base</a> [constructor, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Cminorgenproof.html#val_content_inject_cast">val_content_inject_cast</a> [lemma, in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.Mem.html#val_content_inject_incr">val_content_inject_incr</a> [lemma, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#val_content_inject_8">val_content_inject_8</a> [constructor, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#val_inject">val_inject</a> [inductive, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#val_inject_float">val_inject_float</a> [constructor, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#val_inject_incr">val_inject_incr</a> [lemma, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#val_inject_int">val_inject_int</a> [constructor, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#val_inject_ptr">val_inject_ptr</a> [constructor, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#val_list_inject">val_list_inject</a> [inductive, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#val_list_inject_incr">val_list_inject_incr</a> [lemma, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Constpropproof.html#val_list_match_approx">val_list_match_approx</a> [inductive, in <a href="backend.Constpropproof.html">backend.Constpropproof</a>]<br/>
+<a href="backend.Constpropproof.html#val_match_approx">val_match_approx</a> [definition, in <a href="backend.Constpropproof.html">backend.Constpropproof</a>]<br/>
+<a href="backend.Constpropproof.html#val_match_approx_increasing">val_match_approx_increasing</a> [lemma, in <a href="backend.Constpropproof.html">backend.Constpropproof</a>]<br/>
+<a href="backend.Mem.html#val_nil_inject">val_nil_inject</a> [constructor, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Cminorgenproof.html#val_normalized">val_normalized</a> [definition, in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.Cminorgenproof.html#vars_vals_cons">vars_vals_cons</a> [constructor, in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.Cminorgenproof.html#vars_vals_match">vars_vals_match</a> [inductive, in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.Cminorgenproof.html#vars_vals_match_extensional">vars_vals_match_extensional</a> [lemma, in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.Cminorgenproof.html#vars_vals_match_holds">vars_vals_match_holds</a> [lemma, in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.Cminorgenproof.html#vars_vals_match_holds_1">vars_vals_match_holds_1</a> [lemma, in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.Cminorgenproof.html#vars_vals_nil">vars_vals_nil</a> [constructor, in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.Cminorgen.html#var_addr">var_addr</a> [definition, in <a href="backend.Cminorgen.html">backend.Cminorgen</a>]<br/>
+<a href="backend.Cminorgenproof.html#var_addr_global_correct">var_addr_global_correct</a> [lemma, in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.Cminorgenproof.html#var_addr_local_correct">var_addr_local_correct</a> [lemma, in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.Cminorgen.html#var_get">var_get</a> [definition, in <a href="backend.Cminorgen.html">backend.Cminorgen</a>]<br/>
+<a href="backend.Cminorgenproof.html#var_get_correct">var_get_correct</a> [lemma, in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.Cminorgen.html#Var_global">Var_global</a> [constructor, in <a href="backend.Cminorgen.html">backend.Cminorgen</a>]<br/>
+<a href="backend.Cminorgen.html#var_info">var_info</a> [inductive, in <a href="backend.Cminorgen.html">backend.Cminorgen</a>]<br/>
+<a href="backend.Cminorgen.html#Var_local">Var_local</a> [constructor, in <a href="backend.Cminorgen.html">backend.Cminorgen</a>]<br/>
+<a href="backend.Cminorgen.html#var_set">var_set</a> [definition, in <a href="backend.Cminorgen.html">backend.Cminorgen</a>]<br/>
+<a href="backend.Cminorgenproof.html#var_set_correct">var_set_correct</a> [lemma, in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.Cminorgen.html#Var_stack_array">Var_stack_array</a> [constructor, in <a href="backend.Cminorgen.html">backend.Cminorgen</a>]<br/>
+<a href="backend.Cminorgen.html#Var_stack_scalar">Var_stack_scalar</a> [constructor, in <a href="backend.Cminorgen.html">backend.Cminorgen</a>]<br/>
+<a href="backend.Values.html#Vfalse">Vfalse</a> [definition, in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.Values.html#Vfloat">Vfloat</a> [constructor, in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.Values.html#Vint">Vint</a> [constructor, in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.Constpropproof.html#vlma_cons">vlma_cons</a> [constructor, in <a href="backend.Constpropproof.html">backend.Constpropproof</a>]<br/>
+<a href="backend.Constpropproof.html#vlma_nil">vlma_nil</a> [constructor, in <a href="backend.Constpropproof.html">backend.Constpropproof</a>]<br/>
+<a href="backend.CSEproof.html#VMap">VMap</a> [module, in <a href="backend.CSEproof.html">backend.CSEproof</a>]<br/>
+<a href="backend.Values.html#Vmone">Vmone</a> [definition, in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.Values.html#Vone">Vone</a> [definition, in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.Values.html#Vptr">Vptr</a> [constructor, in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.Values.html#Vtrue">Vtrue</a> [definition, in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.Values.html#Vundef">Vundef</a> [constructor, in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.Values.html#Vzero">Vzero</a> [definition, in <a href="backend.Values.html">backend.Values</a>]<br/>
+<br/><br/><a name="global_W"></a><h2>W </h2>
+<a href="backend.CSEproof.html#wf_add_load">wf_add_load</a> [lemma, in <a href="backend.CSEproof.html">backend.CSEproof</a>]<br/>
+<a href="backend.CSEproof.html#wf_add_op">wf_add_op</a> [lemma, in <a href="backend.CSEproof.html">backend.CSEproof</a>]<br/>
+<a href="backend.CSEproof.html#wf_add_rhs">wf_add_rhs</a> [lemma, in <a href="backend.CSEproof.html">backend.CSEproof</a>]<br/>
+<a href="backend.CSEproof.html#wf_analyze">wf_analyze</a> [lemma, in <a href="backend.CSEproof.html">backend.CSEproof</a>]<br/>
+<a href="lib.union_find.html#wf_empty">wf_empty</a> [lemma, in <a href="lib.union_find.html">lib.union_find</a>]<br/>
+<a href="backend.CSEproof.html#wf_empty_numbering">wf_empty_numbering</a> [lemma, in <a href="backend.CSEproof.html">backend.CSEproof</a>]<br/>
+<a href="backend.CSEproof.html#wf_equation">wf_equation</a> [definition, in <a href="backend.CSEproof.html">backend.CSEproof</a>]<br/>
+<a href="backend.CSEproof.html#wf_equation_increasing">wf_equation_increasing</a> [lemma, in <a href="backend.CSEproof.html">backend.CSEproof</a>]<br/>
+<a href="backend.CSEproof.html#wf_kill_loads">wf_kill_loads</a> [lemma, in <a href="backend.CSEproof.html">backend.CSEproof</a>]<br/>
+<a href="backend.CSEproof.html#wf_numbering">wf_numbering</a> [definition, in <a href="backend.CSEproof.html">backend.CSEproof</a>]<br/>
+<a href="backend.CSEproof.html#wf_rhs">wf_rhs</a> [definition, in <a href="backend.CSEproof.html">backend.CSEproof</a>]<br/>
+<a href="backend.CSEproof.html#wf_rhs_increasing">wf_rhs_increasing</a> [lemma, in <a href="backend.CSEproof.html">backend.CSEproof</a>]<br/>
+<a href="backend.CSEproof.html#wf_transfer">wf_transfer</a> [lemma, in <a href="backend.CSEproof.html">backend.CSEproof</a>]<br/>
+<a href="backend.Tunneling.html#wf_tunneled_code">wf_tunneled_code</a> [lemma, in <a href="backend.Tunneling.html">backend.Tunneling</a>]<br/>
+<a href="backend.CSEproof.html#wf_valnum_reg">wf_valnum_reg</a> [lemma, in <a href="backend.CSEproof.html">backend.CSEproof</a>]<br/>
+<a href="backend.CSEproof.html#wf_valnum_regs">wf_valnum_regs</a> [lemma, in <a href="backend.CSEproof.html">backend.CSEproof</a>]<br/>
+<a href="lib.Integers.html#wordsize">wordsize</a> [definition, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Alloctyping.html#wt_add_call">wt_add_call</a> [lemma, in <a href="backend.Alloctyping.html">backend.Alloctyping</a>]<br/>
+<a href="backend.Alloctyping.html#wt_add_cond">wt_add_cond</a> [lemma, in <a href="backend.Alloctyping.html">backend.Alloctyping</a>]<br/>
+<a href="backend.Alloctyping.html#wt_add_entry">wt_add_entry</a> [lemma, in <a href="backend.Alloctyping.html">backend.Alloctyping</a>]<br/>
+<a href="backend.Alloctyping.html#wt_add_load">wt_add_load</a> [lemma, in <a href="backend.Alloctyping.html">backend.Alloctyping</a>]<br/>
+<a href="backend.Alloctyping.html#wt_add_move">wt_add_move</a> [lemma, in <a href="backend.Alloctyping.html">backend.Alloctyping</a>]<br/>
+<a href="backend.Alloctyping_aux.html#wt_add_moves">wt_add_moves</a> [lemma, in <a href="backend.Alloctyping_aux.html">backend.Alloctyping_aux</a>]<br/>
+<a href="backend.Alloctyping.html#wt_add_op_move">wt_add_op_move</a> [lemma, in <a href="backend.Alloctyping.html">backend.Alloctyping</a>]<br/>
+<a href="backend.Alloctyping.html#wt_add_op_others">wt_add_op_others</a> [lemma, in <a href="backend.Alloctyping.html">backend.Alloctyping</a>]<br/>
+<a href="backend.Alloctyping.html#wt_add_op_undef">wt_add_op_undef</a> [lemma, in <a href="backend.Alloctyping.html">backend.Alloctyping</a>]<br/>
+<a href="backend.Alloctyping.html#wt_add_reload">wt_add_reload</a> [lemma, in <a href="backend.Alloctyping.html">backend.Alloctyping</a>]<br/>
+<a href="backend.Alloctyping.html#wt_add_reloads">wt_add_reloads</a> [lemma, in <a href="backend.Alloctyping.html">backend.Alloctyping</a>]<br/>
+<a href="backend.Alloctyping.html#wt_add_return">wt_add_return</a> [lemma, in <a href="backend.Alloctyping.html">backend.Alloctyping</a>]<br/>
+<a href="backend.Alloctyping.html#wt_add_spill">wt_add_spill</a> [lemma, in <a href="backend.Alloctyping.html">backend.Alloctyping</a>]<br/>
+<a href="backend.Alloctyping.html#wt_add_store">wt_add_store</a> [lemma, in <a href="backend.Alloctyping.html">backend.Alloctyping</a>]<br/>
+<a href="backend.Alloctyping.html#wt_add_undefs">wt_add_undefs</a> [lemma, in <a href="backend.Alloctyping.html">backend.Alloctyping</a>]<br/>
+<a href="backend.LTLtyping.html#wt_Bgetstack">wt_Bgetstack</a> [constructor, in <a href="backend.LTLtyping.html">backend.LTLtyping</a>]<br/>
+<a href="backend.LTLtyping.html#wt_block">wt_block</a> [inductive, in <a href="backend.LTLtyping.html">backend.LTLtyping</a>]<br/>
+<a href="backend.LTLtyping.html#wt_Bop">wt_Bop</a> [constructor, in <a href="backend.LTLtyping.html">backend.LTLtyping</a>]<br/>
+<a href="backend.LTLtyping.html#wt_Bopmove">wt_Bopmove</a> [constructor, in <a href="backend.LTLtyping.html">backend.LTLtyping</a>]<br/>
+<a href="backend.LTLtyping.html#wt_Bopundef">wt_Bopundef</a> [constructor, in <a href="backend.LTLtyping.html">backend.LTLtyping</a>]<br/>
+<a href="backend.LTLtyping.html#wt_Bsetstack">wt_Bsetstack</a> [constructor, in <a href="backend.LTLtyping.html">backend.LTLtyping</a>]<br/>
+<a href="backend.Machtyping.html#wt_content">wt_content</a> [definition, in <a href="backend.Machtyping.html">backend.Machtyping</a>]<br/>
+<a href="backend.Stackingtyping.html#wt_fold_right">wt_fold_right</a> [lemma, in <a href="backend.Stackingtyping.html">backend.Stackingtyping</a>]<br/>
+<a href="backend.Machtyping.html#wt_frame">wt_frame</a> [definition, in <a href="backend.Machtyping.html">backend.Machtyping</a>]<br/>
+<a href="backend.RTLtyping.html#wt_function">wt_function</a> [inductive, in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.Machtyping.html#wt_function">wt_function</a> [inductive, in <a href="backend.Machtyping.html">backend.Machtyping</a>]<br/>
+<a href="backend.LTLtyping.html#wt_function">wt_function</a> [definition, in <a href="backend.LTLtyping.html">backend.LTLtyping</a>]<br/>
+<a href="backend.Lineartyping.html#wt_function">wt_function</a> [definition, in <a href="backend.Lineartyping.html">backend.Lineartyping</a>]<br/>
+<a href="backend.Machtyping.html#wt_get_slot">wt_get_slot</a> [lemma, in <a href="backend.Machtyping.html">backend.Machtyping</a>]<br/>
+<a href="backend.Machtyping.html#wt_init_frame">wt_init_frame</a> [lemma, in <a href="backend.Machtyping.html">backend.Machtyping</a>]<br/>
+<a href="backend.RTLtyping.html#wt_init_regs">wt_init_regs</a> [lemma, in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.RTLtyping.html#wt_Inop">wt_Inop</a> [constructor, in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.Lineartyping.html#wt_instr">wt_instr</a> [inductive, in <a href="backend.Lineartyping.html">backend.Lineartyping</a>]<br/>
+<a href="backend.Machtyping.html#wt_instr">wt_instr</a> [inductive, in <a href="backend.Machtyping.html">backend.Machtyping</a>]<br/>
+<a href="backend.RTLtyping.html#wt_instr">wt_instr</a> [inductive, in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.Stackingtyping.html#wt_instrs">wt_instrs</a> [definition, in <a href="backend.Stackingtyping.html">backend.Stackingtyping</a>]<br/>
+<a href="backend.Stackingtyping.html#wt_instrs_cons">wt_instrs_cons</a> [lemma, in <a href="backend.Stackingtyping.html">backend.Stackingtyping</a>]<br/>
+<a href="backend.RTLtyping.html#wt_Iop">wt_Iop</a> [constructor, in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.RTLtyping.html#wt_Iopmove">wt_Iopmove</a> [constructor, in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.RTLtyping.html#wt_Iopundef">wt_Iopundef</a> [constructor, in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.Lineartyping.html#wt_Lgetstack">wt_Lgetstack</a> [constructor, in <a href="backend.Lineartyping.html">backend.Lineartyping</a>]<br/>
+<a href="backend.Linearizetyping.html#wt_linearize_block">wt_linearize_block</a> [lemma, in <a href="backend.Linearizetyping.html">backend.Linearizetyping</a>]<br/>
+<a href="backend.Linearizetyping.html#wt_linearize_body">wt_linearize_body</a> [lemma, in <a href="backend.Linearizetyping.html">backend.Linearizetyping</a>]<br/>
+<a href="backend.Lineartyping.html#wt_Lop">wt_Lop</a> [constructor, in <a href="backend.Lineartyping.html">backend.Lineartyping</a>]<br/>
+<a href="backend.Lineartyping.html#wt_Lopmove">wt_Lopmove</a> [constructor, in <a href="backend.Lineartyping.html">backend.Lineartyping</a>]<br/>
+<a href="backend.Lineartyping.html#wt_Lopundef">wt_Lopundef</a> [constructor, in <a href="backend.Lineartyping.html">backend.Lineartyping</a>]<br/>
+<a href="backend.Lineartyping.html#wt_Lsetstack">wt_Lsetstack</a> [constructor, in <a href="backend.Lineartyping.html">backend.Lineartyping</a>]<br/>
+<a href="backend.Machtyping.html#wt_Mgetstack">wt_Mgetstack</a> [constructor, in <a href="backend.Machtyping.html">backend.Machtyping</a>]<br/>
+<a href="backend.Machtyping.html#wt_Mlabel">wt_Mlabel</a> [constructor, in <a href="backend.Machtyping.html">backend.Machtyping</a>]<br/>
+<a href="backend.Machtyping.html#wt_Msetstack">wt_Msetstack</a> [constructor, in <a href="backend.Machtyping.html">backend.Machtyping</a>]<br/>
+<a href="backend.Stackingtyping.html#wt_Msetstack'">wt_Msetstack'</a> [lemma, in <a href="backend.Stackingtyping.html">backend.Stackingtyping</a>]<br/>
+<a href="backend.Alloctyping.html#wt_parallel_move">wt_parallel_move</a> [lemma, in <a href="backend.Alloctyping.html">backend.Alloctyping</a>]<br/>
+<a href="backend.Alloctyping_aux.html#wt_parallel_moveX">wt_parallel_moveX</a> [lemma, in <a href="backend.Alloctyping_aux.html">backend.Alloctyping_aux</a>]<br/>
+<a href="backend.Alloctyping_aux.html#wt_parallel_move'">wt_parallel_move'</a> [lemma, in <a href="backend.Alloctyping_aux.html">backend.Alloctyping_aux</a>]<br/>
+<a href="backend.Lineartyping.html#wt_program">wt_program</a> [definition, in <a href="backend.Lineartyping.html">backend.Lineartyping</a>]<br/>
+<a href="backend.RTLtyping.html#wt_program">wt_program</a> [definition, in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.LTLtyping.html#wt_program">wt_program</a> [definition, in <a href="backend.LTLtyping.html">backend.LTLtyping</a>]<br/>
+<a href="backend.Machtyping.html#wt_program">wt_program</a> [definition, in <a href="backend.Machtyping.html">backend.Machtyping</a>]<br/>
+<a href="backend.RTLtyping.html#wt_regset">wt_regset</a> [definition, in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.Machtyping.html#wt_regset">wt_regset</a> [definition, in <a href="backend.Machtyping.html">backend.Machtyping</a>]<br/>
+<a href="backend.RTLtyping.html#wt_regset_assign">wt_regset_assign</a> [lemma, in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.RTLtyping.html#wt_regset_list">wt_regset_list</a> [lemma, in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.Alloctyping.html#wt_regs_for">wt_regs_for</a> [lemma, in <a href="backend.Alloctyping.html">backend.Alloctyping</a>]<br/>
+<a href="backend.Alloctyping.html#wt_regs_for_rec">wt_regs_for_rec</a> [lemma, in <a href="backend.Alloctyping.html">backend.Alloctyping</a>]<br/>
+<a href="backend.Alloctyping.html#wt_reg_for">wt_reg_for</a> [lemma, in <a href="backend.Alloctyping.html">backend.Alloctyping</a>]<br/>
+<a href="backend.Stackingtyping.html#wt_restore_callee_save">wt_restore_callee_save</a> [lemma, in <a href="backend.Stackingtyping.html">backend.Stackingtyping</a>]<br/>
+<a href="backend.Stackingtyping.html#wt_restore_float_callee_save">wt_restore_float_callee_save</a> [lemma, in <a href="backend.Stackingtyping.html">backend.Stackingtyping</a>]<br/>
+<a href="backend.Stackingtyping.html#wt_restore_int_callee_save">wt_restore_int_callee_save</a> [lemma, in <a href="backend.Stackingtyping.html">backend.Stackingtyping</a>]<br/>
+<a href="backend.Alloctyping.html#wt_rtl_function">wt_rtl_function</a> [lemma, in <a href="backend.Alloctyping.html">backend.Alloctyping</a>]<br/>
+<a href="backend.Stackingtyping.html#wt_save_callee_save">wt_save_callee_save</a> [lemma, in <a href="backend.Stackingtyping.html">backend.Stackingtyping</a>]<br/>
+<a href="backend.Stackingtyping.html#wt_save_float_callee_save">wt_save_float_callee_save</a> [lemma, in <a href="backend.Stackingtyping.html">backend.Stackingtyping</a>]<br/>
+<a href="backend.Stackingtyping.html#wt_save_int_callee_save">wt_save_int_callee_save</a> [lemma, in <a href="backend.Stackingtyping.html">backend.Stackingtyping</a>]<br/>
+<a href="backend.Machtyping.html#wt_setreg">wt_setreg</a> [lemma, in <a href="backend.Machtyping.html">backend.Machtyping</a>]<br/>
+<a href="backend.Machtyping.html#wt_set_slot">wt_set_slot</a> [lemma, in <a href="backend.Machtyping.html">backend.Machtyping</a>]<br/>
+<a href="backend.Alloctyping.html#wt_transf_entrypoint">wt_transf_entrypoint</a> [lemma, in <a href="backend.Alloctyping.html">backend.Alloctyping</a>]<br/>
+<a href="backend.Stackingtyping.html#wt_transf_function">wt_transf_function</a> [lemma, in <a href="backend.Stackingtyping.html">backend.Stackingtyping</a>]<br/>
+<a href="backend.Alloctyping.html#wt_transf_function">wt_transf_function</a> [lemma, in <a href="backend.Alloctyping.html">backend.Alloctyping</a>]<br/>
+<a href="backend.Linearizetyping.html#wt_transf_function">wt_transf_function</a> [lemma, in <a href="backend.Linearizetyping.html">backend.Linearizetyping</a>]<br/>
+<a href="backend.Alloctyping.html#wt_transf_instr">wt_transf_instr</a> [lemma, in <a href="backend.Alloctyping.html">backend.Alloctyping</a>]<br/>
+<a href="backend.Alloctyping.html#wt_transf_instrs">wt_transf_instrs</a> [lemma, in <a href="backend.Alloctyping.html">backend.Alloctyping</a>]<br/>
+<a href="backend.Stackingtyping.html#wt_transl_instr">wt_transl_instr</a> [lemma, in <a href="backend.Stackingtyping.html">backend.Stackingtyping</a>]<br/>
+<a href="backend.Tunnelingtyping.html#wt_tunnel_block">wt_tunnel_block</a> [lemma, in <a href="backend.Tunnelingtyping.html">backend.Tunnelingtyping</a>]<br/>
+<a href="backend.Tunnelingtyping.html#wt_tunnel_function">wt_tunnel_function</a> [lemma, in <a href="backend.Tunnelingtyping.html">backend.Tunnelingtyping</a>]<br/>
+<br/><br/><a name="global_X"></a><h2>X </h2>
+<a href="lib.Maps.html#xcombine_l">xcombine_l</a> [definition, in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Maps.html#xcombine_lr">xcombine_lr</a> [lemma, in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Maps.html#xcombine_r">xcombine_r</a> [definition, in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Maps.html#xelements">xelements</a> [definition, in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Maps.html#xelements_complete">xelements_complete</a> [lemma, in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Maps.html#xelements_correct">xelements_correct</a> [lemma, in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Maps.html#xelements_hi">xelements_hi</a> [lemma, in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Maps.html#xelements_ho">xelements_ho</a> [lemma, in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Maps.html#xelements_ih">xelements_ih</a> [lemma, in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Maps.html#xelements_ii">xelements_ii</a> [lemma, in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Maps.html#xelements_io">xelements_io</a> [lemma, in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Maps.html#xelements_keys_norepet">xelements_keys_norepet</a> [lemma, in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Maps.html#xelements_oh">xelements_oh</a> [lemma, in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Maps.html#xelements_oi">xelements_oi</a> [lemma, in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Maps.html#xelements_oo">xelements_oo</a> [lemma, in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Maps.html#xgcombine">xgcombine</a> [lemma, in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Maps.html#xgcombine_l">xgcombine_l</a> [lemma, in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Maps.html#xgcombine_r">xgcombine_r</a> [lemma, in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Maps.html#xget">xget</a> [definition, in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Maps.html#xget_left">xget_left</a> [lemma, in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Maps.html#xgmap">xgmap</a> [lemma, in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Maps.html#xkeys">xkeys</a> [definition, in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Maps.html#xmap">xmap</a> [definition, in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="backend.Cmconstr.html#xor">xor</a> [definition, in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Values.html#xor">xor</a> [definition, in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="lib.Integers.html#xor">xor</a> [definition, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.PPCgen.html#xorimm">xorimm</a> [definition, in <a href="backend.PPCgen.html">backend.PPCgen</a>]<br/>
+<a href="backend.PPCgenproof1.html#xorimm_correct">xorimm_correct</a> [lemma, in <a href="backend.PPCgenproof1.html">backend.PPCgenproof1</a>]<br/>
+<a href="lib.Integers.html#xor_assoc">xor_assoc</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Values.html#xor_assoc">xor_assoc</a> [lemma, in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.Values.html#xor_commut">xor_commut</a> [lemma, in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="lib.Integers.html#xor_commut">xor_commut</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#xor_one_one">xor_one_one</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#xor_zero">xor_zero</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#xor_zero_one">xor_zero_one</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<br/><br/><a name="global_Z"></a><h2>Z </h2>
+<a href="lib.Integers.html#Zdiv_round">Zdiv_round</a> [definition, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Coqlib.html#Zdiv_small">Zdiv_small</a> [lemma, in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="lib.Coqlib.html#Zdiv_unique">Zdiv_unique</a> [lemma, in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="lib.Coqlib.html#zeq">zeq</a> [definition, in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="lib.Coqlib.html#zeq_false">zeq_false</a> [lemma, in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="lib.Coqlib.html#zeq_true">zeq_true</a> [lemma, in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="lib.Integers.html#zero">zero</a> [definition, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Floats.html#zero">zero</a> [axiom, in <a href="lib.Floats.html">lib.Floats</a>]<br/>
+<a href="lib.Maps.html#ZIndexed">ZIndexed</a> [module, in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Coqlib.html#zle">zle</a> [definition, in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="lib.Coqlib.html#zle_false">zle_false</a> [lemma, in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="lib.Coqlib.html#zle_true">zle_true</a> [lemma, in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="lib.Coqlib.html#zlt">zlt</a> [definition, in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="lib.Coqlib.html#zlt_false">zlt_false</a> [lemma, in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="lib.Coqlib.html#zlt_true">zlt_true</a> [lemma, in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="lib.Maps.html#ZMap">ZMap</a> [module, in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Coqlib.html#Zmax_bound_l">Zmax_bound_l</a> [lemma, in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="lib.Coqlib.html#Zmax_bound_r">Zmax_bound_r</a> [lemma, in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="lib.Coqlib.html#Zmax_spec">Zmax_spec</a> [lemma, in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="lib.Coqlib.html#Zmin_spec">Zmin_spec</a> [lemma, in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="lib.Integers.html#Zmod_round">Zmod_round</a> [definition, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Coqlib.html#Zmod_small">Zmod_small</a> [lemma, in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="lib.Coqlib.html#Zmod_unique">Zmod_unique</a> [lemma, in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="backend.Mem.html#ztonat">ztonat</a> [definition, in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="lib.Integers.html#Z_bin_decomp">Z_bin_decomp</a> [definition, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#Z_bin_decomp_range">Z_bin_decomp_range</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#Z_bin_decomp_shift_add">Z_bin_decomp_shift_add</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#Z_of_bits">Z_of_bits</a> [definition, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#Z_of_bits_excl">Z_of_bits_excl</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#Z_of_bits_exten">Z_of_bits_exten</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#Z_of_bits_of_Z">Z_of_bits_of_Z</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#Z_of_bits_range">Z_of_bits_range</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#Z_of_bits_range_2">Z_of_bits_range_2</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#Z_of_bits_shift">Z_of_bits_shift</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#Z_of_bits_shifts">Z_of_bits_shifts</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#Z_of_bits_shifts_rev">Z_of_bits_shifts_rev</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#Z_of_bits_shift_rev">Z_of_bits_shift_rev</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#Z_one_bits">Z_one_bits</a> [definition, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#Z_one_bits_powerserie">Z_one_bits_powerserie</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#Z_one_bits_range">Z_one_bits_range</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#Z_shift_add">Z_shift_add</a> [definition, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#Z_shift_add_bin_decomp">Z_shift_add_bin_decomp</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#Z_shift_add_inj">Z_shift_add_inj</a> [lemma, in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<br/><br/><a name="global__"></a><h2>_ </h2>
+<a href="backend.Lineartyping.html#_">_</a> [constructor, in <a href="backend.Lineartyping.html">backend.Lineartyping</a>]<br/>
+<a href="backend.LTLtyping.html#_">_</a> [constructor, in <a href="backend.LTLtyping.html">backend.LTLtyping</a>]<br/>
+<br/><br/><hr/>
+<h1>Axiom Index</h1>
+<a name="axiom_A"></a><h2>A </h2>
+<a href="lib.Floats.html#abs">abs</a> [in <a href="lib.Floats.html">lib.Floats</a>]<br/>
+<a href="lib.Floats.html#add">add</a> [in <a href="lib.Floats.html">lib.Floats</a>]<br/>
+<a href="lib.Floats.html#addf_commut">addf_commut</a> [in <a href="lib.Floats.html">lib.Floats</a>]<br/>
+<br/><br/><a name="axiom_C"></a><h2>C </h2>
+<a href="lib.Floats.html#cmp">cmp</a> [in <a href="lib.Floats.html">lib.Floats</a>]<br/>
+<a href="lib.Floats.html#cmp_ge_gt_eq">cmp_ge_gt_eq</a> [in <a href="lib.Floats.html">lib.Floats</a>]<br/>
+<a href="lib.Floats.html#cmp_le_lt_eq">cmp_le_lt_eq</a> [in <a href="lib.Floats.html">lib.Floats</a>]<br/>
+<a href="lib.Floats.html#cmp_ne_eq">cmp_ne_eq</a> [in <a href="lib.Floats.html">lib.Floats</a>]<br/>
+<br/><br/><a name="axiom_D"></a><h2>D </h2>
+<a href="lib.Floats.html#div">div</a> [in <a href="lib.Floats.html">lib.Floats</a>]<br/>
+<br/><br/><a name="axiom_E"></a><h2>E </h2>
+<a href="lib.Floats.html#eq_dec">eq_dec</a> [in <a href="lib.Floats.html">lib.Floats</a>]<br/>
+<a href="lib.Floats.html#eq_zero_false">eq_zero_false</a> [in <a href="lib.Floats.html">lib.Floats</a>]<br/>
+<a href="lib.Floats.html#eq_zero_true">eq_zero_true</a> [in <a href="lib.Floats.html">lib.Floats</a>]<br/>
+<a href="lib.Coqlib.html#extensionality">extensionality</a> [in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<br/><br/><a name="axiom_F"></a><h2>F </h2>
+<a href="lib.Floats.html#float">float</a> [in <a href="lib.Floats.html">lib.Floats</a>]<br/>
+<a href="lib.Floats.html#floatofint">floatofint</a> [in <a href="lib.Floats.html">lib.Floats</a>]<br/>
+<a href="lib.Floats.html#floatofintu">floatofintu</a> [in <a href="lib.Floats.html">lib.Floats</a>]<br/>
+<br/><br/><a name="axiom_G"></a><h2>G </h2>
+<a href="backend.Coloring.html#graph_coloring">graph_coloring</a> [in <a href="backend.Coloring.html">backend.Coloring</a>]<br/>
+<br/><br/><a name="axiom_H"></a><h2>H </h2>
+<a href="backend.PPC.html#high_half_signed">high_half_signed</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#high_half_signed_type">high_half_signed_type</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#high_half_unsigned">high_half_unsigned</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#high_half_unsigned_type">high_half_unsigned_type</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<br/><br/><a name="axiom_I"></a><h2>I </h2>
+<a href="lib.Floats.html#intoffloat">intoffloat</a> [in <a href="lib.Floats.html">lib.Floats</a>]<br/>
+<br/><br/><a name="axiom_L"></a><h2>L </h2>
+<a href="backend.PPC.html#low_half_signed">low_half_signed</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#low_half_signed_type">low_half_signed_type</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#low_half_unsigned">low_half_unsigned</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#low_half_unsigned_type">low_half_unsigned_type</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#low_high_half_signed">low_high_half_signed</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#low_high_half_unsigned">low_high_half_unsigned</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<br/><br/><a name="axiom_M"></a><h2>M </h2>
+<a href="backend.RTLgen.html#more_likely">more_likely</a> [in <a href="backend.RTLgen.html">backend.RTLgen</a>]<br/>
+<a href="lib.Floats.html#mul">mul</a> [in <a href="lib.Floats.html">lib.Floats</a>]<br/>
+<br/><br/><a name="axiom_N"></a><h2>N </h2>
+<a href="lib.Floats.html#neg">neg</a> [in <a href="lib.Floats.html">lib.Floats</a>]<br/>
+<a href="lib.Integers.html#neg_mul_distr_l">neg_mul_distr_l</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#neg_mul_distr_r">neg_mul_distr_r</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<br/><br/><a name="axiom_O"></a><h2>O </h2>
+<a href="lib.Floats.html#one">one</a> [in <a href="lib.Floats.html">lib.Floats</a>]<br/>
+<br/><br/><a name="axiom_P"></a><h2>P </h2>
+<a href="lib.Coqlib.html#proof_irrelevance">proof_irrelevance</a> [in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<br/><br/><a name="axiom_S"></a><h2>S </h2>
+<a href="lib.Floats.html#singleoffloat">singleoffloat</a> [in <a href="lib.Floats.html">lib.Floats</a>]<br/>
+<a href="lib.Floats.html#singleoffloat_idem">singleoffloat_idem</a> [in <a href="lib.Floats.html">lib.Floats</a>]<br/>
+<a href="lib.Floats.html#sub">sub</a> [in <a href="lib.Floats.html">lib.Floats</a>]<br/>
+<a href="lib.Floats.html#subf_addf_opp">subf_addf_opp</a> [in <a href="lib.Floats.html">lib.Floats</a>]<br/>
+<br/><br/><a name="axiom_Z"></a><h2>Z </h2>
+<a href="lib.Floats.html#zero">zero</a> [in <a href="lib.Floats.html">lib.Floats</a>]<br/>
+<br/><br/><hr/>
+<h1>Lemma Index</h1>
+<a name="lemma_A"></a><h2>A </h2>
+<a href="backend.Values.html#addf_commut">addf_commut</a> [in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.PPCgenproof1.html#addimm_correct">addimm_correct</a> [in <a href="backend.PPCgenproof1.html">backend.PPCgenproof1</a>]<br/>
+<a href="backend.PPCgenproof1.html#addimm_1_correct">addimm_1_correct</a> [in <a href="backend.PPCgenproof1.html">backend.PPCgenproof1</a>]<br/>
+<a href="backend.PPCgenproof1.html#addimm_2_correct">addimm_2_correct</a> [in <a href="backend.PPCgenproof1.html">backend.PPCgenproof1</a>]<br/>
+<a href="backend.Mem.html#address_inject">address_inject</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Constpropproof.html#addr_strength_reduction_correct">addr_strength_reduction_correct</a> [in <a href="backend.Constpropproof.html">backend.Constpropproof</a>]<br/>
+<a href="lib.Integers.html#add_and">add_and</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#add_assoc">add_assoc</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Values.html#add_assoc">add_assoc</a> [in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.Allocproof.html#add_call_correct">add_call_correct</a> [in <a href="backend.Allocproof.html">backend.Allocproof</a>]<br/>
+<a href="lib.Integers.html#add_commut">add_commut</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Values.html#add_commut">add_commut</a> [in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.Allocproof.html#add_cond_correct">add_cond_correct</a> [in <a href="backend.Allocproof.html">backend.Allocproof</a>]<br/>
+<a href="backend.Coloringproof.html#add_edges_instrs_correct">add_edges_instrs_correct</a> [in <a href="backend.Coloringproof.html">backend.Coloringproof</a>]<br/>
+<a href="backend.Coloringproof.html#add_edges_instrs_correct_aux">add_edges_instrs_correct_aux</a> [in <a href="backend.Coloringproof.html">backend.Coloringproof</a>]<br/>
+<a href="backend.Coloringproof.html#add_edges_instrs_incl_aux">add_edges_instrs_incl_aux</a> [in <a href="backend.Coloringproof.html">backend.Coloringproof</a>]<br/>
+<a href="backend.Coloringproof.html#add_edges_instr_correct">add_edges_instr_correct</a> [in <a href="backend.Coloringproof.html">backend.Coloringproof</a>]<br/>
+<a href="backend.Coloringproof.html#add_edges_instr_incl">add_edges_instr_incl</a> [in <a href="backend.Coloringproof.html">backend.Coloringproof</a>]<br/>
+<a href="backend.Allocproof.html#add_entry_correct">add_entry_correct</a> [in <a href="backend.Allocproof.html">backend.Allocproof</a>]<br/>
+<a href="backend.Globalenvs.html#add_functs_transf">add_functs_transf</a> [in <a href="backend.Globalenvs.html">backend.Globalenvs</a>]<br/>
+<a href="backend.RTLgenproof1.html#add_instr_at">add_instr_at</a> [in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.RTLgenproof1.html#add_instr_incr">add_instr_incr</a> [in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.RTLgen.html#add_instr_wf">add_instr_wf</a> [in <a href="backend.RTLgen.html">backend.RTLgen</a>]<br/>
+<a href="backend.Coloringproof.html#add_interf_call_correct">add_interf_call_correct</a> [in <a href="backend.Coloringproof.html">backend.Coloringproof</a>]<br/>
+<a href="backend.Coloringproof.html#add_interf_call_correct_aux_1">add_interf_call_correct_aux_1</a> [in <a href="backend.Coloringproof.html">backend.Coloringproof</a>]<br/>
+<a href="backend.Coloringproof.html#add_interf_call_correct_aux_2">add_interf_call_correct_aux_2</a> [in <a href="backend.Coloringproof.html">backend.Coloringproof</a>]<br/>
+<a href="backend.Coloringproof.html#add_interf_call_incl">add_interf_call_incl</a> [in <a href="backend.Coloringproof.html">backend.Coloringproof</a>]<br/>
+<a href="backend.Coloringproof.html#add_interf_call_incl_aux_1">add_interf_call_incl_aux_1</a> [in <a href="backend.Coloringproof.html">backend.Coloringproof</a>]<br/>
+<a href="backend.Coloringproof.html#add_interf_call_incl_aux_2">add_interf_call_incl_aux_2</a> [in <a href="backend.Coloringproof.html">backend.Coloringproof</a>]<br/>
+<a href="backend.InterfGraph.html#add_interf_correct">add_interf_correct</a> [in <a href="backend.InterfGraph.html">backend.InterfGraph</a>]<br/>
+<a href="backend.Coloringproof.html#add_interf_entry_correct">add_interf_entry_correct</a> [in <a href="backend.Coloringproof.html">backend.Coloringproof</a>]<br/>
+<a href="backend.Coloringproof.html#add_interf_entry_incl">add_interf_entry_incl</a> [in <a href="backend.Coloringproof.html">backend.Coloringproof</a>]<br/>
+<a href="backend.InterfGraph.html#add_interf_incl">add_interf_incl</a> [in <a href="backend.InterfGraph.html">backend.InterfGraph</a>]<br/>
+<a href="backend.Coloringproof.html#add_interf_live_correct">add_interf_live_correct</a> [in <a href="backend.Coloringproof.html">backend.Coloringproof</a>]<br/>
+<a href="backend.Coloringproof.html#add_interf_live_correct_aux">add_interf_live_correct_aux</a> [in <a href="backend.Coloringproof.html">backend.Coloringproof</a>]<br/>
+<a href="backend.Coloringproof.html#add_interf_live_incl">add_interf_live_incl</a> [in <a href="backend.Coloringproof.html">backend.Coloringproof</a>]<br/>
+<a href="backend.Coloringproof.html#add_interf_live_incl_aux">add_interf_live_incl_aux</a> [in <a href="backend.Coloringproof.html">backend.Coloringproof</a>]<br/>
+<a href="backend.Coloringproof.html#add_interf_move_correct">add_interf_move_correct</a> [in <a href="backend.Coloringproof.html">backend.Coloringproof</a>]<br/>
+<a href="backend.Coloringproof.html#add_interf_move_incl">add_interf_move_incl</a> [in <a href="backend.Coloringproof.html">backend.Coloringproof</a>]<br/>
+<a href="backend.InterfGraph.html#add_interf_mreg_correct">add_interf_mreg_correct</a> [in <a href="backend.InterfGraph.html">backend.InterfGraph</a>]<br/>
+<a href="backend.InterfGraph.html#add_interf_mreg_incl">add_interf_mreg_incl</a> [in <a href="backend.InterfGraph.html">backend.InterfGraph</a>]<br/>
+<a href="backend.Coloringproof.html#add_interf_op_correct">add_interf_op_correct</a> [in <a href="backend.Coloringproof.html">backend.Coloringproof</a>]<br/>
+<a href="backend.Coloringproof.html#add_interf_op_incl">add_interf_op_incl</a> [in <a href="backend.Coloringproof.html">backend.Coloringproof</a>]<br/>
+<a href="backend.Coloringproof.html#add_interf_params_correct">add_interf_params_correct</a> [in <a href="backend.Coloringproof.html">backend.Coloringproof</a>]<br/>
+<a href="backend.Coloringproof.html#add_interf_params_correct_aux">add_interf_params_correct_aux</a> [in <a href="backend.Coloringproof.html">backend.Coloringproof</a>]<br/>
+<a href="backend.Coloringproof.html#add_interf_params_incl">add_interf_params_incl</a> [in <a href="backend.Coloringproof.html">backend.Coloringproof</a>]<br/>
+<a href="backend.Coloringproof.html#add_interf_params_incl_aux">add_interf_params_incl_aux</a> [in <a href="backend.Coloringproof.html">backend.Coloringproof</a>]<br/>
+<a href="backend.RTLgenproof1.html#add_letvar_wf">add_letvar_wf</a> [in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.Allocproof.html#add_load_correct">add_load_correct</a> [in <a href="backend.Allocproof.html">backend.Allocproof</a>]<br/>
+<a href="backend.CSEproof.html#add_load_satisfiable">add_load_satisfiable</a> [in <a href="backend.CSEproof.html">backend.CSEproof</a>]<br/>
+<a href="backend.RTLgenproof.html#add_move_correct">add_move_correct</a> [in <a href="backend.RTLgenproof.html">backend.RTLgenproof</a>]<br/>
+<a href="backend.Allocproof.html#add_move_correct">add_move_correct</a> [in <a href="backend.Allocproof.html">backend.Allocproof</a>]<br/>
+<a href="backend.RTLgenproof1.html#add_move_incr">add_move_incr</a> [in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="lib.Integers.html#add_neg_zero">add_neg_zero</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Allocproof.html#add_op_correct">add_op_correct</a> [in <a href="backend.Allocproof.html">backend.Allocproof</a>]<br/>
+<a href="backend.CSEproof.html#add_op_satisfiable">add_op_satisfiable</a> [in <a href="backend.CSEproof.html">backend.CSEproof</a>]<br/>
+<a href="backend.Values.html#add_permut">add_permut</a> [in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="lib.Integers.html#add_permut">add_permut</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Values.html#add_permut_4">add_permut_4</a> [in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.Coloringproof.html#add_prefs_call_incl">add_prefs_call_incl</a> [in <a href="backend.Coloringproof.html">backend.Coloringproof</a>]<br/>
+<a href="backend.InterfGraph.html#add_pref_incl">add_pref_incl</a> [in <a href="backend.InterfGraph.html">backend.InterfGraph</a>]<br/>
+<a href="backend.InterfGraph.html#add_pref_mreg_incl">add_pref_mreg_incl</a> [in <a href="backend.InterfGraph.html">backend.InterfGraph</a>]<br/>
+<a href="backend.Allocproof.html#add_reloads_correct">add_reloads_correct</a> [in <a href="backend.Allocproof.html">backend.Allocproof</a>]<br/>
+<a href="backend.Allocproof.html#add_reloads_correct_rec">add_reloads_correct_rec</a> [in <a href="backend.Allocproof.html">backend.Allocproof</a>]<br/>
+<a href="backend.Allocproof.html#add_reload_correct">add_reload_correct</a> [in <a href="backend.Allocproof.html">backend.Allocproof</a>]<br/>
+<a href="backend.Allocproof.html#add_return_correct">add_return_correct</a> [in <a href="backend.Allocproof.html">backend.Allocproof</a>]<br/>
+<a href="backend.CSEproof.html#add_rhs_satisfiable">add_rhs_satisfiable</a> [in <a href="backend.CSEproof.html">backend.CSEproof</a>]<br/>
+<a href="lib.Integers.html#add_signed">add_signed</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Allocproof.html#add_spill_correct">add_spill_correct</a> [in <a href="backend.Allocproof.html">backend.Allocproof</a>]<br/>
+<a href="backend.Allocproof.html#add_store_correct">add_store_correct</a> [in <a href="backend.Allocproof.html">backend.Allocproof</a>]<br/>
+<a href="backend.Kildall.html#add_successors_correct">add_successors_correct</a> [in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.Kildall.html#add_to_worklist_1">add_to_worklist_1</a> [in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.Kildall.html#add_to_worklist_2">add_to_worklist_2</a> [in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.Allocproof.html#add_undefs_correct">add_undefs_correct</a> [in <a href="backend.Allocproof.html">backend.Allocproof</a>]<br/>
+<a href="lib.Integers.html#add_unsigned">add_unsigned</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.RTLgenproof1.html#add_vars_incr">add_vars_incr</a> [in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.RTLgenproof1.html#add_vars_letenv">add_vars_letenv</a> [in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.RTLgenproof1.html#add_vars_valid">add_vars_valid</a> [in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.RTLgenproof1.html#add_vars_wf">add_vars_wf</a> [in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.RTLgenproof1.html#add_var_find">add_var_find</a> [in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.RTLgenproof1.html#add_var_incr">add_var_incr</a> [in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.RTLgenproof1.html#add_var_letenv">add_var_letenv</a> [in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.RTLgenproof1.html#add_var_valid">add_var_valid</a> [in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.RTLgenproof1.html#add_var_wf">add_var_wf</a> [in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="lib.Integers.html#add_zero">add_zero</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Allocproof.html#agree_assign_dead">agree_assign_dead</a> [in <a href="backend.Allocproof.html">backend.Allocproof</a>]<br/>
+<a href="backend.Allocproof.html#agree_assign_live">agree_assign_live</a> [in <a href="backend.Allocproof.html">backend.Allocproof</a>]<br/>
+<a href="backend.Allocproof.html#agree_call">agree_call</a> [in <a href="backend.Allocproof.html">backend.Allocproof</a>]<br/>
+<a href="backend.Stackingproof.html#agree_eval_reg">agree_eval_reg</a> [in <a href="backend.Stackingproof.html">backend.Stackingproof</a>]<br/>
+<a href="backend.Allocproof.html#agree_eval_reg">agree_eval_reg</a> [in <a href="backend.Allocproof.html">backend.Allocproof</a>]<br/>
+<a href="backend.Stackingproof.html#agree_eval_regs">agree_eval_regs</a> [in <a href="backend.Stackingproof.html">backend.Stackingproof</a>]<br/>
+<a href="backend.Allocproof.html#agree_eval_regs">agree_eval_regs</a> [in <a href="backend.Allocproof.html">backend.Allocproof</a>]<br/>
+<a href="backend.Allocproof.html#agree_exten">agree_exten</a> [in <a href="backend.Allocproof.html">backend.Allocproof</a>]<br/>
+<a href="backend.PPCgenproof1.html#agree_exten_1">agree_exten_1</a> [in <a href="backend.PPCgenproof1.html">backend.PPCgenproof1</a>]<br/>
+<a href="backend.PPCgenproof1.html#agree_exten_2">agree_exten_2</a> [in <a href="backend.PPCgenproof1.html">backend.PPCgenproof1</a>]<br/>
+<a href="backend.Allocproof.html#agree_increasing">agree_increasing</a> [in <a href="backend.Allocproof.html">backend.Allocproof</a>]<br/>
+<a href="backend.Allocproof.html#agree_init_regs">agree_init_regs</a> [in <a href="backend.Allocproof.html">backend.Allocproof</a>]<br/>
+<a href="backend.Allocproof.html#agree_move_live">agree_move_live</a> [in <a href="backend.Allocproof.html">backend.Allocproof</a>]<br/>
+<a href="backend.PPCgenproof1.html#agree_nextinstr">agree_nextinstr</a> [in <a href="backend.PPCgenproof1.html">backend.PPCgenproof1</a>]<br/>
+<a href="backend.PPCgenproof1.html#agree_nextinstr_commut">agree_nextinstr_commut</a> [in <a href="backend.PPCgenproof1.html">backend.PPCgenproof1</a>]<br/>
+<a href="backend.Allocproof.html#agree_parameters">agree_parameters</a> [in <a href="backend.Allocproof.html">backend.Allocproof</a>]<br/>
+<a href="backend.Allocproof.html#agree_reg_list_live">agree_reg_list_live</a> [in <a href="backend.Allocproof.html">backend.Allocproof</a>]<br/>
+<a href="backend.Allocproof.html#agree_reg_live">agree_reg_live</a> [in <a href="backend.Allocproof.html">backend.Allocproof</a>]<br/>
+<a href="backend.Allocproof.html#agree_reg_sum_live">agree_reg_sum_live</a> [in <a href="backend.Allocproof.html">backend.Allocproof</a>]<br/>
+<a href="backend.Stackingproof.html#agree_return_regs">agree_return_regs</a> [in <a href="backend.Stackingproof.html">backend.Stackingproof</a>]<br/>
+<a href="backend.PPCgenproof1.html#agree_set_commut">agree_set_commut</a> [in <a href="backend.PPCgenproof1.html">backend.PPCgenproof1</a>]<br/>
+<a href="backend.Stackingproof.html#agree_set_local">agree_set_local</a> [in <a href="backend.Stackingproof.html">backend.Stackingproof</a>]<br/>
+<a href="backend.PPCgenproof1.html#agree_set_mfreg">agree_set_mfreg</a> [in <a href="backend.PPCgenproof1.html">backend.PPCgenproof1</a>]<br/>
+<a href="backend.PPCgenproof1.html#agree_set_mireg">agree_set_mireg</a> [in <a href="backend.PPCgenproof1.html">backend.PPCgenproof1</a>]<br/>
+<a href="backend.PPCgenproof1.html#agree_set_mireg_exten">agree_set_mireg_exten</a> [in <a href="backend.PPCgenproof1.html">backend.PPCgenproof1</a>]<br/>
+<a href="backend.PPCgenproof1.html#agree_set_mireg_twice">agree_set_mireg_twice</a> [in <a href="backend.PPCgenproof1.html">backend.PPCgenproof1</a>]<br/>
+<a href="backend.PPCgenproof1.html#agree_set_mreg">agree_set_mreg</a> [in <a href="backend.PPCgenproof1.html">backend.PPCgenproof1</a>]<br/>
+<a href="backend.PPCgenproof1.html#agree_set_other">agree_set_other</a> [in <a href="backend.PPCgenproof1.html">backend.PPCgenproof1</a>]<br/>
+<a href="backend.Stackingproof.html#agree_set_outgoing">agree_set_outgoing</a> [in <a href="backend.Stackingproof.html">backend.Stackingproof</a>]<br/>
+<a href="backend.Stackingproof.html#agree_set_reg">agree_set_reg</a> [in <a href="backend.Stackingproof.html">backend.Stackingproof</a>]<br/>
+<a href="backend.PPCgenproof1.html#agree_set_twice_mireg">agree_set_twice_mireg</a> [in <a href="backend.PPCgenproof1.html">backend.PPCgenproof1</a>]<br/>
+<a href="lib.Coqlib.html#align_le">align_le</a> [in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="backend.Alloctyping.html#allocs_write_ok">allocs_write_ok</a> [in <a href="backend.Alloctyping.html">backend.Alloctyping</a>]<br/>
+<a href="backend.Mem.html#alloc_extends">alloc_extends</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#alloc_mapped_inject">alloc_mapped_inject</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Coloringproof.html#alloc_of_coloring_correct_1">alloc_of_coloring_correct_1</a> [in <a href="backend.Coloringproof.html">backend.Coloringproof</a>]<br/>
+<a href="backend.Coloringproof.html#alloc_of_coloring_correct_2">alloc_of_coloring_correct_2</a> [in <a href="backend.Coloringproof.html">backend.Coloringproof</a>]<br/>
+<a href="backend.Coloringproof.html#alloc_of_coloring_correct_3">alloc_of_coloring_correct_3</a> [in <a href="backend.Coloringproof.html">backend.Coloringproof</a>]<br/>
+<a href="backend.Coloringproof.html#alloc_of_coloring_correct_4">alloc_of_coloring_correct_4</a> [in <a href="backend.Coloringproof.html">backend.Coloringproof</a>]<br/>
+<a href="backend.RTLgenproof1.html#alloc_regs_fresh_or_in_map">alloc_regs_fresh_or_in_map</a> [in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.RTLgenproof1.html#alloc_regs_incr">alloc_regs_incr</a> [in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.RTLgenproof1.html#alloc_regs_target_ok">alloc_regs_target_ok</a> [in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.RTLgenproof1.html#alloc_regs_valid">alloc_regs_valid</a> [in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.RTLgenproof1.html#alloc_reg_fresh_or_in_map">alloc_reg_fresh_or_in_map</a> [in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.RTLgenproof1.html#alloc_reg_incr">alloc_reg_incr</a> [in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.RTLgenproof1.html#alloc_reg_target_ok">alloc_reg_target_ok</a> [in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.RTLgenproof1.html#alloc_reg_valid">alloc_reg_valid</a> [in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.Mem.html#alloc_right_inject">alloc_right_inject</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Alloctyping.html#alloc_type">alloc_type</a> [in <a href="backend.Alloctyping.html">backend.Alloctyping</a>]<br/>
+<a href="backend.Alloctyping.html#alloc_types">alloc_types</a> [in <a href="backend.Alloctyping.html">backend.Alloctyping</a>]<br/>
+<a href="backend.Mem.html#alloc_unmapped_inject">alloc_unmapped_inject</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Cminorgenproof.html#alloc_variables_list_block">alloc_variables_list_block</a> [in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.Cminorgenproof.html#alloc_variables_nextblock_incr">alloc_variables_nextblock_incr</a> [in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.Alloctyping.html#alloc_write_ok">alloc_write_ok</a> [in <a href="backend.Alloctyping.html">backend.Alloctyping</a>]<br/>
+<a href="backend.InterfGraph.html#all_interf_regs_correct_aux_1">all_interf_regs_correct_aux_1</a> [in <a href="backend.InterfGraph.html">backend.InterfGraph</a>]<br/>
+<a href="backend.InterfGraph.html#all_interf_regs_correct_aux_2">all_interf_regs_correct_aux_2</a> [in <a href="backend.InterfGraph.html">backend.InterfGraph</a>]<br/>
+<a href="backend.InterfGraph.html#all_interf_regs_correct_aux_3">all_interf_regs_correct_aux_3</a> [in <a href="backend.InterfGraph.html">backend.InterfGraph</a>]<br/>
+<a href="backend.InterfGraph.html#all_interf_regs_correct_1">all_interf_regs_correct_1</a> [in <a href="backend.InterfGraph.html">backend.InterfGraph</a>]<br/>
+<a href="backend.InterfGraph.html#all_interf_regs_correct_2">all_interf_regs_correct_2</a> [in <a href="backend.InterfGraph.html">backend.InterfGraph</a>]<br/>
+<a href="backend.CSEproof.html#analysis_correct_entry">analysis_correct_entry</a> [in <a href="backend.CSEproof.html">backend.CSEproof</a>]<br/>
+<a href="backend.CSEproof.html#analysis_correct_N">analysis_correct_N</a> [in <a href="backend.CSEproof.html">backend.CSEproof</a>]<br/>
+<a href="backend.CSEproof.html#analysis_correct_1">analysis_correct_1</a> [in <a href="backend.CSEproof.html">backend.CSEproof</a>]<br/>
+<a href="backend.Allocproof.html#analyze_correct">analyze_correct</a> [in <a href="backend.Allocproof.html">backend.Allocproof</a>]<br/>
+<a href="backend.Constpropproof.html#analyze_correct_1">analyze_correct_1</a> [in <a href="backend.Constpropproof.html">backend.Constpropproof</a>]<br/>
+<a href="backend.Constpropproof.html#analyze_correct_2">analyze_correct_2</a> [in <a href="backend.Constpropproof.html">backend.Constpropproof</a>]<br/>
+<a href="backend.Constpropproof.html#analyze_correct_3">analyze_correct_3</a> [in <a href="backend.Constpropproof.html">backend.Constpropproof</a>]<br/>
+<a href="backend.Kildall.html#analyze_invariant">analyze_invariant</a> [in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.Kildall.html#analyze_P">analyze_P</a> [in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.PPCgenproof1.html#andimm_correct">andimm_correct</a> [in <a href="backend.PPCgenproof1.html">backend.PPCgenproof1</a>]<br/>
+<a href="backend.Values.html#and_assoc">and_assoc</a> [in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="lib.Integers.html#and_assoc">and_assoc</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#and_commut">and_commut</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Values.html#and_commut">and_commut</a> [in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="lib.Integers.html#and_idem">and_idem</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#and_mone">and_mone</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#and_or_distrib">and_or_distrib</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#and_shl">and_shl</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#and_shru">and_shru</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#and_xor_distrib">and_xor_distrib</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#and_zero">and_zero</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Parallelmove.html#appcons_length">appcons_length</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="lib.Maps.html#append_assoc_0">append_assoc_0</a> [in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Maps.html#append_assoc_1">append_assoc_1</a> [in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Maps.html#append_injective">append_injective</a> [in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Maps.html#append_neutral_l">append_neutral_l</a> [in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Maps.html#append_neutral_r">append_neutral_r</a> [in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="backend.Main.html#apply_total_transf_program">apply_total_transf_program</a> [in <a href="backend.Main.html">backend.Main</a>]<br/>
+<a href="backend.Constpropproof.html#approx_regs_val_list">approx_regs_val_list</a> [in <a href="backend.Constpropproof.html">backend.Constpropproof</a>]<br/>
+<a href="backend.Parallelmove.html#app_app">app_app</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#app_cons">app_cons</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#app_nil">app_nil</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#app_rewrite">app_rewrite</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#app_rewriter">app_rewriter</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#app_rewrite2">app_rewrite2</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Conventions.html#arguments_not_preserved">arguments_not_preserved</a> [in <a href="backend.Conventions.html">backend.Conventions</a>]<br/>
+<br/><br/><a name="lemma_B"></a><h2>B </h2>
+<a href="backend.Cminorgenproof.html#bind_parameters_length">bind_parameters_length</a> [in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="lib.Integers.html#bits_of_Z_above">bits_of_Z_above</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#bits_of_Z_below">bits_of_Z_below</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#bits_of_Z_mone">bits_of_Z_mone</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#bits_of_Z_of_bits">bits_of_Z_of_bits</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#bits_of_Z_zero">bits_of_Z_zero</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#bitwise_binop_assoc">bitwise_binop_assoc</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#bitwise_binop_commut">bitwise_binop_commut</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#bitwise_binop_idem">bitwise_binop_idem</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#bitwise_binop_rol">bitwise_binop_rol</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#bitwise_binop_shl">bitwise_binop_shl</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#bitwise_binop_shru">bitwise_binop_shru</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Mem.html#block_agree_refl">block_agree_refl</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#block_agree_sym">block_agree_sym</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#block_agree_trans">block_agree_trans</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#block_contents_exten">block_contents_exten</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#block_contents_inject_incr">block_contents_inject_incr</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#block_cont_val">block_cont_val</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Values.html#bool_of_false_val">bool_of_false_val</a> [in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.Values.html#bool_of_false_val2">bool_of_false_val2</a> [in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.Values.html#bool_of_false_val_inv">bool_of_false_val_inv</a> [in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.Values.html#bool_of_true_val">bool_of_true_val</a> [in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.Values.html#bool_of_true_val2">bool_of_true_val2</a> [in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.Values.html#bool_of_true_val_inv">bool_of_true_val_inv</a> [in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.Mem.html#bounds_free_block">bounds_free_block</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Lineartyping.html#bound_float_callee_save_pos">bound_float_callee_save_pos</a> [in <a href="backend.Lineartyping.html">backend.Lineartyping</a>]<br/>
+<a href="backend.Lineartyping.html#bound_float_local_pos">bound_float_local_pos</a> [in <a href="backend.Lineartyping.html">backend.Lineartyping</a>]<br/>
+<a href="backend.Lineartyping.html#bound_int_callee_save_pos">bound_int_callee_save_pos</a> [in <a href="backend.Lineartyping.html">backend.Lineartyping</a>]<br/>
+<a href="backend.Lineartyping.html#bound_int_local_pos">bound_int_local_pos</a> [in <a href="backend.Lineartyping.html">backend.Lineartyping</a>]<br/>
+<a href="backend.Lineartyping.html#bound_outgoing_pos">bound_outgoing_pos</a> [in <a href="backend.Lineartyping.html">backend.Lineartyping</a>]<br/>
+<a href="backend.Tunnelingproof.html#branch_target_characterization">branch_target_characterization</a> [in <a href="backend.Tunnelingproof.html">backend.Tunnelingproof</a>]<br/>
+<a href="backend.Tunnelingproof.html#branch_target_rec_1">branch_target_rec_1</a> [in <a href="backend.Tunnelingproof.html">backend.Tunnelingproof</a>]<br/>
+<a href="backend.Tunnelingproof.html#branch_target_rec_2">branch_target_rec_2</a> [in <a href="backend.Tunnelingproof.html">backend.Tunnelingproof</a>]<br/>
+<br/><br/><a name="lemma_C"></a><h2>C </h2>
+<a href="backend.Machabstr2mach.html#callstack_dom_diff">callstack_dom_diff</a> [in <a href="backend.Machabstr2mach.html">backend.Machabstr2mach</a>]<br/>
+<a href="backend.Machabstr2mach.html#callstack_dom_incr">callstack_dom_incr</a> [in <a href="backend.Machabstr2mach.html">backend.Machabstr2mach</a>]<br/>
+<a href="backend.Machabstr2mach.html#callstack_dom_less">callstack_dom_less</a> [in <a href="backend.Machabstr2mach.html">backend.Machabstr2mach</a>]<br/>
+<a href="backend.Machabstr2mach.html#callstack_exten">callstack_exten</a> [in <a href="backend.Machabstr2mach.html">backend.Machabstr2mach</a>]<br/>
+<a href="backend.Machabstr2mach.html#callstack_function_entry">callstack_function_entry</a> [in <a href="backend.Machabstr2mach.html">backend.Machabstr2mach</a>]<br/>
+<a href="backend.Machabstr2mach.html#callstack_function_return">callstack_function_return</a> [in <a href="backend.Machabstr2mach.html">backend.Machabstr2mach</a>]<br/>
+<a href="backend.Machabstr2mach.html#callstack_get_parent">callstack_get_parent</a> [in <a href="backend.Machabstr2mach.html">backend.Machabstr2mach</a>]<br/>
+<a href="backend.Machabstr2mach.html#callstack_get_slot">callstack_get_slot</a> [in <a href="backend.Machabstr2mach.html">backend.Machabstr2mach</a>]<br/>
+<a href="backend.Machabstr2mach.html#callstack_init">callstack_init</a> [in <a href="backend.Machabstr2mach.html">backend.Machabstr2mach</a>]<br/>
+<a href="backend.Machabstr2mach.html#callstack_load">callstack_load</a> [in <a href="backend.Machabstr2mach.html">backend.Machabstr2mach</a>]<br/>
+<a href="backend.Machabstr2mach.html#callstack_set_slot">callstack_set_slot</a> [in <a href="backend.Machabstr2mach.html">backend.Machabstr2mach</a>]<br/>
+<a href="backend.Machabstr2mach.html#callstack_store">callstack_store</a> [in <a href="backend.Machabstr2mach.html">backend.Machabstr2mach</a>]<br/>
+<a href="backend.Machabstr2mach.html#callstack_store_aux">callstack_store_aux</a> [in <a href="backend.Machabstr2mach.html">backend.Machabstr2mach</a>]<br/>
+<a href="backend.Machabstr2mach.html#callstack_store_ok">callstack_store_ok</a> [in <a href="backend.Machabstr2mach.html">backend.Machabstr2mach</a>]<br/>
+<a href="backend.Allocproof.html#call_regs_param_of_arg">call_regs_param_of_arg</a> [in <a href="backend.Allocproof.html">backend.Allocproof</a>]<br/>
+<a href="lib.Integers.html#cast16unsigned_and">cast16unsigned_and</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Values.html#cast16unsigned_and">cast16unsigned_and</a> [in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="lib.Integers.html#cast16_signed_equal_if_unsigned_equal">cast16_signed_equal_if_unsigned_equal</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#cast16_signed_idem">cast16_signed_idem</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#cast16_unsigned_idem">cast16_unsigned_idem</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#cast16_unsigned_signed">cast16_unsigned_signed</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#cast8unsigned_and">cast8unsigned_and</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Values.html#cast8unsigned_and">cast8unsigned_and</a> [in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="lib.Integers.html#cast8_signed_equal_if_unsigned_equal">cast8_signed_equal_if_unsigned_equal</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#cast8_signed_idem">cast8_signed_idem</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#cast8_signed_unsigned">cast8_signed_unsigned</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#cast8_unsigned_idem">cast8_unsigned_idem</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#cast8_unsigned_signed">cast8_unsigned_signed</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Inclusion.html#check_all_leaves_sound">check_all_leaves_sound</a> [in <a href="lib.Inclusion.html">lib.Inclusion</a>]<br/>
+<a href="backend.Coloringproof.html#check_coloring_1_correct">check_coloring_1_correct</a> [in <a href="backend.Coloringproof.html">backend.Coloringproof</a>]<br/>
+<a href="backend.Coloringproof.html#check_coloring_2_correct">check_coloring_2_correct</a> [in <a href="backend.Coloringproof.html">backend.Coloringproof</a>]<br/>
+<a href="backend.Coloringproof.html#check_coloring_3_correct">check_coloring_3_correct</a> [in <a href="backend.Coloringproof.html">backend.Coloringproof</a>]<br/>
+<a href="backend.Mem.html#check_cont_agree">check_cont_agree</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#check_cont_false">check_cont_false</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#check_cont_inject">check_cont_inject</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#check_cont_inv">check_cont_inv</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#check_cont_true">check_cont_true</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="lib.Integers.html#check_equal_on_range_correct">check_equal_on_range_correct</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Linearizetyping.html#cleanup_code_conservation">cleanup_code_conservation</a> [in <a href="backend.Linearizetyping.html">backend.Linearizetyping</a>]<br/>
+<a href="backend.Linearizetyping.html#cleanup_code_conservation_2">cleanup_code_conservation_2</a> [in <a href="backend.Linearizetyping.html">backend.Linearizetyping</a>]<br/>
+<a href="backend.Linearizeproof.html#cleanup_code_correct_1">cleanup_code_correct_1</a> [in <a href="backend.Linearizeproof.html">backend.Linearizeproof</a>]<br/>
+<a href="backend.Linearizeproof.html#cleanup_code_correct_2">cleanup_code_correct_2</a> [in <a href="backend.Linearizeproof.html">backend.Linearizeproof</a>]<br/>
+<a href="backend.Linearizetyping.html#cleanup_function_conservation">cleanup_function_conservation</a> [in <a href="backend.Linearizetyping.html">backend.Linearizetyping</a>]<br/>
+<a href="backend.Linearizetyping.html#cleanup_function_conservation_2">cleanup_function_conservation_2</a> [in <a href="backend.Linearizetyping.html">backend.Linearizetyping</a>]<br/>
+<a href="backend.Linearizeproof.html#cleanup_function_correct">cleanup_function_correct</a> [in <a href="backend.Linearizeproof.html">backend.Linearizeproof</a>]<br/>
+<a href="backend.Values.html#cmpf_ge">cmpf_ge</a> [in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.Values.html#cmpf_is_bool">cmpf_is_bool</a> [in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.Values.html#cmpf_le">cmpf_le</a> [in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.Values.html#cmpu_is_bool">cmpu_is_bool</a> [in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.Values.html#cmp_is_bool">cmp_is_bool</a> [in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.Values.html#cmp_mismatch_is_bool">cmp_mismatch_is_bool</a> [in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.PPCgenproof.html#code_tail_next">code_tail_next</a> [in <a href="backend.PPCgenproof.html">backend.PPCgenproof</a>]<br/>
+<a href="backend.PPCgenproof.html#code_tail_next_int">code_tail_next_int</a> [in <a href="backend.PPCgenproof.html">backend.PPCgenproof</a>]<br/>
+<a href="lib.Maps.html#combine_commut">combine_commut</a> [in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Ordered.html#compare">compare</a> [in <a href="lib.Ordered.html">lib.Ordered</a>]<br/>
+<a href="lib.Ordered.html#compare">compare</a> [in <a href="lib.Ordered.html">lib.Ordered</a>]<br/>
+<a href="lib.Ordered.html#compare">compare</a> [in <a href="lib.Ordered.html">lib.Ordered</a>]<br/>
+<a href="backend.PPCgenproof1.html#compare_float_spec">compare_float_spec</a> [in <a href="backend.PPCgenproof1.html">backend.PPCgenproof1</a>]<br/>
+<a href="backend.PPCgenproof1.html#compare_sint_spec">compare_sint_spec</a> [in <a href="backend.PPCgenproof1.html">backend.PPCgenproof1</a>]<br/>
+<a href="backend.PPCgenproof1.html#compare_uint_spec">compare_uint_spec</a> [in <a href="backend.PPCgenproof1.html">backend.PPCgenproof1</a>]<br/>
+<a href="backend.Constpropproof.html#cond_strength_reduction_correct">cond_strength_reduction_correct</a> [in <a href="backend.Constpropproof.html">backend.Constpropproof</a>]<br/>
+<a href="backend.RTLtyping.html#consistent_not_eq">consistent_not_eq</a> [in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.Parallelmove.html#cons_replace">cons_replace</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Mem.html#contentmap_inject_incr">contentmap_inject_incr</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#content_inject_incr">content_inject_incr</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Coloringproof.html#correct_interf_alloc_instr">correct_interf_alloc_instr</a> [in <a href="backend.Coloringproof.html">backend.Coloringproof</a>]<br/>
+<a href="backend.Coloringproof.html#correct_interf_instr_incl">correct_interf_instr_incl</a> [in <a href="backend.Coloringproof.html">backend.Coloringproof</a>]<br/>
+<br/><br/><a name="lemma_D"></a><h2>D </h2>
+<a href="backend.RTLtyping.html#definite_included">definite_included</a> [in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.Locations.html#diff_not_eq">diff_not_eq</a> [in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Locations.html#diff_sym">diff_sym</a> [in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Kildall.html#discard_top_worklist_invariant">discard_top_worklist_invariant</a> [in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.Parallelmove.html#disc1">disc1</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#disc2">disc2</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Locations.html#disjoint_cons_left">disjoint_cons_left</a> [in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Locations.html#disjoint_cons_right">disjoint_cons_right</a> [in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Locations.html#disjoint_notin">disjoint_notin</a> [in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Locations.html#disjoint_sym">disjoint_sym</a> [in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Parallelmove.html#disjoint_tmp__noTmp">disjoint_tmp__noTmp</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Allocproof_aux.html#dis_dsttmp1_pnilnil">dis_dsttmp1_pnilnil</a> [in <a href="backend.Allocproof_aux.html">backend.Allocproof_aux</a>]<br/>
+<a href="backend.Allocproof_aux.html#dis_srctmp1_pnilnil">dis_srctmp1_pnilnil</a> [in <a href="backend.Allocproof_aux.html">backend.Allocproof_aux</a>]<br/>
+<a href="lib.Integers.html#divs_pow2">divs_pow2</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Values.html#divs_pow2">divs_pow2</a> [in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.Values.html#divu_pow2">divu_pow2</a> [in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="lib.Integers.html#divu_pow2">divu_pow2</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Allocproof_aux.html#Done_notmp1src_inv">Done_notmp1src_inv</a> [in <a href="backend.Allocproof_aux.html">backend.Allocproof_aux</a>]<br/>
+<a href="backend.Allocproof_aux.html#Done_notmp1src_invf">Done_notmp1src_invf</a> [in <a href="backend.Allocproof_aux.html">backend.Allocproof_aux</a>]<br/>
+<a href="backend.Allocproof_aux.html#Done_notmp1src_invpp">Done_notmp1src_invpp</a> [in <a href="backend.Allocproof_aux.html">backend.Allocproof_aux</a>]<br/>
+<a href="backend.Allocproof_aux.html#Done_notmp1src_res">Done_notmp1src_res</a> [in <a href="backend.Allocproof_aux.html">backend.Allocproof_aux</a>]<br/>
+<a href="backend.Allocproof_aux.html#Done_notmp1_inv">Done_notmp1_inv</a> [in <a href="backend.Allocproof_aux.html">backend.Allocproof_aux</a>]<br/>
+<a href="backend.Allocproof_aux.html#Done_notmp1_invf">Done_notmp1_invf</a> [in <a href="backend.Allocproof_aux.html">backend.Allocproof_aux</a>]<br/>
+<a href="backend.Allocproof_aux.html#Done_notmp1_invpp">Done_notmp1_invpp</a> [in <a href="backend.Allocproof_aux.html">backend.Allocproof_aux</a>]<br/>
+<a href="backend.Allocproof_aux.html#Done_notmp1_res">Done_notmp1_res</a> [in <a href="backend.Allocproof_aux.html">backend.Allocproof_aux</a>]<br/>
+<a href="backend.Allocproof_aux.html#Done_notmp3_inv">Done_notmp3_inv</a> [in <a href="backend.Allocproof_aux.html">backend.Allocproof_aux</a>]<br/>
+<a href="backend.Allocproof_aux.html#Done_notmp3_invf">Done_notmp3_invf</a> [in <a href="backend.Allocproof_aux.html">backend.Allocproof_aux</a>]<br/>
+<a href="backend.Allocproof_aux.html#Done_notmp3_invpp">Done_notmp3_invpp</a> [in <a href="backend.Allocproof_aux.html">backend.Allocproof_aux</a>]<br/>
+<a href="backend.Allocproof_aux.html#Done_notmp3_res">Done_notmp3_res</a> [in <a href="backend.Allocproof_aux.html">backend.Allocproof_aux</a>]<br/>
+<a href="backend.Parallelmove.html#dstepp_sameExec">dstepp_sameExec</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#dstepp_stepp">dstepp_stepp</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#dstep_inv">dstep_inv</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#dstep_inv_getdst">dstep_inv_getdst</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#dstep_step">dstep_step</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Allocproof_aux.html#dst_tmp2_res">dst_tmp2_res</a> [in <a href="backend.Allocproof_aux.html">backend.Allocproof_aux</a>]<br/>
+<a href="backend.Allocproof_aux.html#dst_tmp2_step">dst_tmp2_step</a> [in <a href="backend.Allocproof_aux.html">backend.Allocproof_aux</a>]<br/>
+<a href="backend.Allocproof_aux.html#dst_tmp2_stepf">dst_tmp2_stepf</a> [in <a href="backend.Allocproof_aux.html">backend.Allocproof_aux</a>]<br/>
+<a href="backend.Allocproof_aux.html#dst_tmp2_stepp">dst_tmp2_stepp</a> [in <a href="backend.Allocproof_aux.html">backend.Allocproof_aux</a>]<br/>
+<br/><br/><a name="lemma_E"></a><h2>E </h2>
+<a href="lib.Maps.html#elements_complete">elements_complete</a> [in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Sets.html#elements_complete">elements_complete</a> [in <a href="lib.Sets.html">lib.Sets</a>]<br/>
+<a href="lib.Maps.html#elements_correct">elements_correct</a> [in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Sets.html#elements_correct">elements_correct</a> [in <a href="lib.Sets.html">lib.Sets</a>]<br/>
+<a href="lib.Maps.html#elements_keys_norepet">elements_keys_norepet</a> [in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="backend.CSE.html#empty_numbering_satisfiable">empty_numbering_satisfiable</a> [in <a href="backend.CSE.html">backend.CSE</a>]<br/>
+<a href="backend.RTLtyping.html#encode_decode">encode_decode</a> [in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.RTLtyping.html#encode_injective">encode_injective</a> [in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.Allocproof.html#entrypoint_function_translated">entrypoint_function_translated</a> [in <a href="backend.Allocproof.html">backend.Allocproof</a>]<br/>
+<a href="backend.Linearizeproof.html#enumerate_complete">enumerate_complete</a> [in <a href="backend.Linearizeproof.html">backend.Linearizeproof</a>]<br/>
+<a href="backend.Linearizeproof.html#enumerate_head">enumerate_head</a> [in <a href="backend.Linearizeproof.html">backend.Linearizeproof</a>]<br/>
+<a href="backend.Linearizeproof.html#enumerate_norepet">enumerate_norepet</a> [in <a href="backend.Linearizeproof.html">backend.Linearizeproof</a>]<br/>
+<a href="backend.Constprop.html#eq">eq</a> [in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="lib.Lattice.html#eq">eq</a> [in <a href="lib.Lattice.html">lib.Lattice</a>]<br/>
+<a href="lib.Sets.html#eq">eq</a> [in <a href="lib.Sets.html">lib.Sets</a>]<br/>
+<a href="lib.Lattice.html#eq">eq</a> [in <a href="lib.Lattice.html">lib.Lattice</a>]<br/>
+<a href="lib.Lattice.html#eq">eq</a> [in <a href="lib.Lattice.html">lib.Lattice</a>]<br/>
+<a href="backend.Locations.html#eq">eq</a> [in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="lib.Maps.html#eq">eq</a> [in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Maps.html#eq">eq</a> [in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Integers.html#eqmod_add">eqmod_add</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#eqmod_mod">eqmod_mod</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#eqmod_mod_eq">eqmod_mod_eq</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#eqmod_mult">eqmod_mult</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#eqmod_neg">eqmod_neg</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#eqmod_refl">eqmod_refl</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#eqmod_refl2">eqmod_refl2</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#eqmod_small_eq">eqmod_small_eq</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#eqmod_sub">eqmod_sub</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#eqmod_sym">eqmod_sym</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#eqmod_trans">eqmod_trans</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#eqmod_256_unsigned_repr">eqmod_256_unsigned_repr</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#eqmod_65536_unsigned_repr">eqmod_65536_unsigned_repr</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#eqm_add">eqm_add</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#eqm_mult">eqm_mult</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#eqm_neg">eqm_neg</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#eqm_refl">eqm_refl</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#eqm_refl2">eqm_refl2</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#eqm_samerepr">eqm_samerepr</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#eqm_signed_unsigned">eqm_signed_unsigned</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#eqm_small_eq">eqm_small_eq</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#eqm_sub">eqm_sub</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#eqm_sym">eqm_sym</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#eqm_trans">eqm_trans</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#eqm_unsigned_repr">eqm_unsigned_repr</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#eqm_unsigned_repr_l">eqm_unsigned_repr_l</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#eqm_unsigned_repr_r">eqm_unsigned_repr_r</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.RTLtyping.html#equal_eq">equal_eq</a> [in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="lib.Integers.html#equal_on_range">equal_on_range</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.CSEproof.html#equation_evals_to_holds_1">equation_evals_to_holds_1</a> [in <a href="backend.CSEproof.html">backend.CSEproof</a>]<br/>
+<a href="backend.CSEproof.html#equation_evals_to_holds_2">equation_evals_to_holds_2</a> [in <a href="backend.CSEproof.html">backend.CSEproof</a>]<br/>
+<a href="lib.Integers.html#eq_dec">eq_dec</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#eq_false">eq_false</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Ordered.html#eq_refl">eq_refl</a> [in <a href="lib.Ordered.html">lib.Ordered</a>]<br/>
+<a href="lib.Ordered.html#eq_refl">eq_refl</a> [in <a href="lib.Ordered.html">lib.Ordered</a>]<br/>
+<a href="lib.Ordered.html#eq_refl">eq_refl</a> [in <a href="lib.Ordered.html">lib.Ordered</a>]<br/>
+<a href="lib.Integers.html#eq_spec">eq_spec</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Ordered.html#eq_sym">eq_sym</a> [in <a href="lib.Ordered.html">lib.Ordered</a>]<br/>
+<a href="lib.Ordered.html#eq_sym">eq_sym</a> [in <a href="lib.Ordered.html">lib.Ordered</a>]<br/>
+<a href="lib.Integers.html#eq_sym">eq_sym</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Ordered.html#eq_sym">eq_sym</a> [in <a href="lib.Ordered.html">lib.Ordered</a>]<br/>
+<a href="lib.Ordered.html#eq_trans">eq_trans</a> [in <a href="lib.Ordered.html">lib.Ordered</a>]<br/>
+<a href="lib.Ordered.html#eq_trans">eq_trans</a> [in <a href="lib.Ordered.html">lib.Ordered</a>]<br/>
+<a href="lib.Ordered.html#eq_trans">eq_trans</a> [in <a href="lib.Ordered.html">lib.Ordered</a>]<br/>
+<a href="lib.Integers.html#eq_true">eq_true</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.RTLtyping.html#error_inconsistent">error_inconsistent</a> [in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.Cmconstrproof.html#eval_absfloat">eval_absfloat</a> [in <a href="backend.Cmconstrproof.html">backend.Cmconstrproof</a>]<br/>
+<a href="backend.Cmconstrproof.html#eval_add">eval_add</a> [in <a href="backend.Cmconstrproof.html">backend.Cmconstrproof</a>]<br/>
+<a href="backend.Cmconstrproof.html#eval_addf">eval_addf</a> [in <a href="backend.Cmconstrproof.html">backend.Cmconstrproof</a>]<br/>
+<a href="backend.Cmconstrproof.html#eval_addimm">eval_addimm</a> [in <a href="backend.Cmconstrproof.html">backend.Cmconstrproof</a>]<br/>
+<a href="backend.Cmconstrproof.html#eval_addimm_ptr">eval_addimm_ptr</a> [in <a href="backend.Cmconstrproof.html">backend.Cmconstrproof</a>]<br/>
+<a href="backend.Cmconstrproof.html#eval_addressing">eval_addressing</a> [in <a href="backend.Cmconstrproof.html">backend.Cmconstrproof</a>]<br/>
+<a href="backend.Op.html#eval_addressing_preserved">eval_addressing_preserved</a> [in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Op.html#eval_addressing_weaken">eval_addressing_weaken</a> [in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Cmconstrproof.html#eval_add_ptr">eval_add_ptr</a> [in <a href="backend.Cmconstrproof.html">backend.Cmconstrproof</a>]<br/>
+<a href="backend.Cmconstrproof.html#eval_add_ptr_2">eval_add_ptr_2</a> [in <a href="backend.Cmconstrproof.html">backend.Cmconstrproof</a>]<br/>
+<a href="backend.Cmconstrproof.html#eval_and">eval_and</a> [in <a href="backend.Cmconstrproof.html">backend.Cmconstrproof</a>]<br/>
+<a href="backend.Cmconstrproof.html#eval_andimm">eval_andimm</a> [in <a href="backend.Cmconstrproof.html">backend.Cmconstrproof</a>]<br/>
+<a href="backend.Cmconstrproof.html#eval_base_condition_of_expr">eval_base_condition_of_expr</a> [in <a href="backend.Cmconstrproof.html">backend.Cmconstrproof</a>]<br/>
+<a href="backend.Cmconstrproof.html#eval_cast16signed">eval_cast16signed</a> [in <a href="backend.Cmconstrproof.html">backend.Cmconstrproof</a>]<br/>
+<a href="backend.Cmconstrproof.html#eval_cast16unsigned">eval_cast16unsigned</a> [in <a href="backend.Cmconstrproof.html">backend.Cmconstrproof</a>]<br/>
+<a href="backend.Cmconstrproof.html#eval_cast8signed">eval_cast8signed</a> [in <a href="backend.Cmconstrproof.html">backend.Cmconstrproof</a>]<br/>
+<a href="backend.Cmconstrproof.html#eval_cast8unsigned">eval_cast8unsigned</a> [in <a href="backend.Cmconstrproof.html">backend.Cmconstrproof</a>]<br/>
+<a href="backend.Cmconstrproof.html#eval_cmp">eval_cmp</a> [in <a href="backend.Cmconstrproof.html">backend.Cmconstrproof</a>]<br/>
+<a href="backend.Cmconstrproof.html#eval_cmpf">eval_cmpf</a> [in <a href="backend.Cmconstrproof.html">backend.Cmconstrproof</a>]<br/>
+<a href="backend.Cmconstrproof.html#eval_cmpu">eval_cmpu</a> [in <a href="backend.Cmconstrproof.html">backend.Cmconstrproof</a>]<br/>
+<a href="backend.Cmconstrproof.html#eval_cmp_null_l">eval_cmp_null_l</a> [in <a href="backend.Cmconstrproof.html">backend.Cmconstrproof</a>]<br/>
+<a href="backend.Cmconstrproof.html#eval_cmp_null_r">eval_cmp_null_r</a> [in <a href="backend.Cmconstrproof.html">backend.Cmconstrproof</a>]<br/>
+<a href="backend.Cmconstrproof.html#eval_cmp_ptr">eval_cmp_ptr</a> [in <a href="backend.Cmconstrproof.html">backend.Cmconstrproof</a>]<br/>
+<a href="backend.Op.html#eval_compare_null_weaken">eval_compare_null_weaken</a> [in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Cmconstrproof.html#eval_conditionalexpr_false">eval_conditionalexpr_false</a> [in <a href="backend.Cmconstrproof.html">backend.Cmconstrproof</a>]<br/>
+<a href="backend.Cmconstrproof.html#eval_conditionalexpr_true">eval_conditionalexpr_true</a> [in <a href="backend.Cmconstrproof.html">backend.Cmconstrproof</a>]<br/>
+<a href="backend.Cmconstrproof.html#eval_condition_of_expr">eval_condition_of_expr</a> [in <a href="backend.Cmconstrproof.html">backend.Cmconstrproof</a>]<br/>
+<a href="backend.Op.html#eval_condition_total_is_bool">eval_condition_total_is_bool</a> [in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Op.html#eval_condition_weaken">eval_condition_weaken</a> [in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Cmconstrproof.html#eval_divf">eval_divf</a> [in <a href="backend.Cmconstrproof.html">backend.Cmconstrproof</a>]<br/>
+<a href="backend.Cmconstrproof.html#eval_divs">eval_divs</a> [in <a href="backend.Cmconstrproof.html">backend.Cmconstrproof</a>]<br/>
+<a href="backend.Cmconstrproof.html#eval_divu">eval_divu</a> [in <a href="backend.Cmconstrproof.html">backend.Cmconstrproof</a>]<br/>
+<a href="backend.Cmconstrproof.html#eval_divu_base">eval_divu_base</a> [in <a href="backend.Cmconstrproof.html">backend.Cmconstrproof</a>]<br/>
+<a href="backend.Cmconstrproof.html#eval_floatofint">eval_floatofint</a> [in <a href="backend.Cmconstrproof.html">backend.Cmconstrproof</a>]<br/>
+<a href="backend.Cmconstrproof.html#eval_floatofintu">eval_floatofintu</a> [in <a href="backend.Cmconstrproof.html">backend.Cmconstrproof</a>]<br/>
+<a href="backend.Cmconstrproof.html#eval_intoffloat">eval_intoffloat</a> [in <a href="backend.Cmconstrproof.html">backend.Cmconstrproof</a>]<br/>
+<a href="backend.Cmconstrproof.html#eval_lift">eval_lift</a> [in <a href="backend.Cmconstrproof.html">backend.Cmconstrproof</a>]<br/>
+<a href="backend.Cmconstrproof.html#eval_lift_expr">eval_lift_expr</a> [in <a href="backend.Cmconstrproof.html">backend.Cmconstrproof</a>]<br/>
+<a href="backend.Cmconstrproof.html#eval_load">eval_load</a> [in <a href="backend.Cmconstrproof.html">backend.Cmconstrproof</a>]<br/>
+<a href="backend.Cmconstrproof.html#eval_mods">eval_mods</a> [in <a href="backend.Cmconstrproof.html">backend.Cmconstrproof</a>]<br/>
+<a href="backend.Cmconstrproof.html#eval_modu">eval_modu</a> [in <a href="backend.Cmconstrproof.html">backend.Cmconstrproof</a>]<br/>
+<a href="backend.Cmconstrproof.html#eval_mod_aux">eval_mod_aux</a> [in <a href="backend.Cmconstrproof.html">backend.Cmconstrproof</a>]<br/>
+<a href="backend.Cmconstrproof.html#eval_mul">eval_mul</a> [in <a href="backend.Cmconstrproof.html">backend.Cmconstrproof</a>]<br/>
+<a href="backend.Cmconstrproof.html#eval_mulf">eval_mulf</a> [in <a href="backend.Cmconstrproof.html">backend.Cmconstrproof</a>]<br/>
+<a href="backend.Cmconstrproof.html#eval_mulimm">eval_mulimm</a> [in <a href="backend.Cmconstrproof.html">backend.Cmconstrproof</a>]<br/>
+<a href="backend.Cmconstrproof.html#eval_mulimm_base">eval_mulimm_base</a> [in <a href="backend.Cmconstrproof.html">backend.Cmconstrproof</a>]<br/>
+<a href="backend.Op.html#eval_negate_condition">eval_negate_condition</a> [in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Cmconstrproof.html#eval_negfloat">eval_negfloat</a> [in <a href="backend.Cmconstrproof.html">backend.Cmconstrproof</a>]<br/>
+<a href="backend.Cmconstrproof.html#eval_negint">eval_negint</a> [in <a href="backend.Cmconstrproof.html">backend.Cmconstrproof</a>]<br/>
+<a href="backend.Cmconstrproof.html#eval_notbool">eval_notbool</a> [in <a href="backend.Cmconstrproof.html">backend.Cmconstrproof</a>]<br/>
+<a href="backend.Cmconstrproof.html#eval_notbool_base">eval_notbool_base</a> [in <a href="backend.Cmconstrproof.html">backend.Cmconstrproof</a>]<br/>
+<a href="backend.Cmconstrproof.html#eval_notint">eval_notint</a> [in <a href="backend.Cmconstrproof.html">backend.Cmconstrproof</a>]<br/>
+<a href="backend.Op.html#eval_operation_preserved">eval_operation_preserved</a> [in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Op.html#eval_operation_weaken">eval_operation_weaken</a> [in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Cmconstrproof.html#eval_or">eval_or</a> [in <a href="backend.Cmconstrproof.html">backend.Cmconstrproof</a>]<br/>
+<a href="backend.Cmconstrproof.html#eval_rolm">eval_rolm</a> [in <a href="backend.Cmconstrproof.html">backend.Cmconstrproof</a>]<br/>
+<a href="backend.Cmconstrproof.html#eval_shl">eval_shl</a> [in <a href="backend.Cmconstrproof.html">backend.Cmconstrproof</a>]<br/>
+<a href="backend.Cmconstrproof.html#eval_shlimm">eval_shlimm</a> [in <a href="backend.Cmconstrproof.html">backend.Cmconstrproof</a>]<br/>
+<a href="backend.Cmconstrproof.html#eval_shr">eval_shr</a> [in <a href="backend.Cmconstrproof.html">backend.Cmconstrproof</a>]<br/>
+<a href="backend.Cmconstrproof.html#eval_shru">eval_shru</a> [in <a href="backend.Cmconstrproof.html">backend.Cmconstrproof</a>]<br/>
+<a href="backend.Cmconstrproof.html#eval_shruimm">eval_shruimm</a> [in <a href="backend.Cmconstrproof.html">backend.Cmconstrproof</a>]<br/>
+<a href="backend.Cmconstrproof.html#eval_singleoffloat">eval_singleoffloat</a> [in <a href="backend.Cmconstrproof.html">backend.Cmconstrproof</a>]<br/>
+<a href="backend.Constpropproof.html#eval_static_condition_correct">eval_static_condition_correct</a> [in <a href="backend.Constpropproof.html">backend.Constpropproof</a>]<br/>
+<a href="backend.Constpropproof.html#eval_static_operation_correct">eval_static_operation_correct</a> [in <a href="backend.Constpropproof.html">backend.Constpropproof</a>]<br/>
+<a href="backend.Cmconstrproof.html#eval_store">eval_store</a> [in <a href="backend.Cmconstrproof.html">backend.Cmconstrproof</a>]<br/>
+<a href="backend.Cmconstrproof.html#eval_sub">eval_sub</a> [in <a href="backend.Cmconstrproof.html">backend.Cmconstrproof</a>]<br/>
+<a href="backend.Cmconstrproof.html#eval_subf">eval_subf</a> [in <a href="backend.Cmconstrproof.html">backend.Cmconstrproof</a>]<br/>
+<a href="backend.Cmconstrproof.html#eval_sub_ptr_int">eval_sub_ptr_int</a> [in <a href="backend.Cmconstrproof.html">backend.Cmconstrproof</a>]<br/>
+<a href="backend.Cmconstrproof.html#eval_sub_ptr_ptr">eval_sub_ptr_ptr</a> [in <a href="backend.Cmconstrproof.html">backend.Cmconstrproof</a>]<br/>
+<a href="backend.Cmconstrproof.html#eval_xor">eval_xor</a> [in <a href="backend.Cmconstrproof.html">backend.Cmconstrproof</a>]<br/>
+<a href="backend.Tunnelingproof.html#exec_blocks_Bgoto_inv">exec_blocks_Bgoto_inv</a> [in <a href="backend.Tunnelingproof.html">backend.Tunnelingproof</a>]<br/>
+<a href="backend.LTL.html#exec_blocks_extends">exec_blocks_extends</a> [in <a href="backend.LTL.html">backend.LTL</a>]<br/>
+<a href="backend.Linearizeproof.html#exec_blocks_valid_outcome">exec_blocks_valid_outcome</a> [in <a href="backend.Linearizeproof.html">backend.Linearizeproof</a>]<br/>
+<a href="backend.Tunnelingproof.html#exec_block_Bgoto_inv">exec_block_Bgoto_inv</a> [in <a href="backend.Tunnelingproof.html">backend.Tunnelingproof</a>]<br/>
+<a href="backend.PPCgenproof.html#exec_function_body_prop_">exec_function_body_prop_</a> [in <a href="backend.PPCgenproof.html">backend.PPCgenproof</a>]<br/>
+<a href="backend.Machabstr2mach.html#exec_function_equiv">exec_function_equiv</a> [in <a href="backend.Machabstr2mach.html">backend.Machabstr2mach</a>]<br/>
+<a href="backend.PPCgenproof.html#exec_function_prop_">exec_function_prop_</a> [in <a href="backend.PPCgenproof.html">backend.PPCgenproof</a>]<br/>
+<a href="backend.Cmconstrproof.html#exec_ifthenelse_false">exec_ifthenelse_false</a> [in <a href="backend.Cmconstrproof.html">backend.Cmconstrproof</a>]<br/>
+<a href="backend.Cmconstrproof.html#exec_ifthenelse_true">exec_ifthenelse_true</a> [in <a href="backend.Cmconstrproof.html">backend.Cmconstrproof</a>]<br/>
+<a href="backend.RTL.html#exec_Iload'">exec_Iload'</a> [in <a href="backend.RTL.html">backend.RTL</a>]<br/>
+<a href="backend.Tunnelingproof.html#exec_instrs_Bgoto_inv">exec_instrs_Bgoto_inv</a> [in <a href="backend.Tunnelingproof.html">backend.Tunnelingproof</a>]<br/>
+<a href="backend.RTLgenproof1.html#exec_instrs_extends">exec_instrs_extends</a> [in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.RTLgenproof1.html#exec_instrs_extends_rec">exec_instrs_extends_rec</a> [in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.Stackingproof.html#exec_instrs_incl">exec_instrs_incl</a> [in <a href="backend.Stackingproof.html">backend.Stackingproof</a>]<br/>
+<a href="backend.PPCgenproof.html#exec_instrs_incl">exec_instrs_incl</a> [in <a href="backend.PPCgenproof.html">backend.PPCgenproof</a>]<br/>
+<a href="backend.RTLgenproof1.html#exec_instrs_incr">exec_instrs_incr</a> [in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.Machtyping.html#exec_instrs_link_invariant">exec_instrs_link_invariant</a> [in <a href="backend.Machtyping.html">backend.Machtyping</a>]<br/>
+<a href="backend.Allocproof_aux.html#exec_instrs_pmov">exec_instrs_pmov</a> [in <a href="backend.Allocproof_aux.html">backend.Allocproof_aux</a>]<br/>
+<a href="backend.RTL.html#exec_instrs_present">exec_instrs_present</a> [in <a href="backend.RTL.html">backend.RTL</a>]<br/>
+<a href="backend.RTLgenproof1.html#exec_instr_extends">exec_instr_extends</a> [in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.RTLgenproof1.html#exec_instr_extends_rec">exec_instr_extends_rec</a> [in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.PPCgenproof.html#exec_instr_incl">exec_instr_incl</a> [in <a href="backend.PPCgenproof.html">backend.PPCgenproof</a>]<br/>
+<a href="backend.Stackingproof.html#exec_instr_incl">exec_instr_incl</a> [in <a href="backend.Stackingproof.html">backend.Stackingproof</a>]<br/>
+<a href="backend.RTLgenproof1.html#exec_instr_incr">exec_instr_incr</a> [in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.RTLgenproof1.html#exec_instr_in_s2">exec_instr_in_s2</a> [in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.Machtyping.html#exec_instr_link_invariant">exec_instr_link_invariant</a> [in <a href="backend.Machtyping.html">backend.Machtyping</a>]<br/>
+<a href="backend.RTLgenproof1.html#exec_instr_not_halt">exec_instr_not_halt</a> [in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.RTL.html#exec_instr_present">exec_instr_present</a> [in <a href="backend.RTL.html">backend.RTL</a>]<br/>
+<a href="backend.Allocproof_aux.html#exec_instr_update">exec_instr_update</a> [in <a href="backend.Allocproof_aux.html">backend.Allocproof_aux</a>]<br/>
+<a href="backend.RTL.html#exec_Iop'">exec_Iop'</a> [in <a href="backend.RTL.html">backend.RTL</a>]<br/>
+<a href="backend.PPCgenproof.html#exec_Mcall_prop">exec_Mcall_prop</a> [in <a href="backend.PPCgenproof.html">backend.PPCgenproof</a>]<br/>
+<a href="backend.PPCgenproof.html#exec_Mcond_false_prop">exec_Mcond_false_prop</a> [in <a href="backend.PPCgenproof.html">backend.PPCgenproof</a>]<br/>
+<a href="backend.PPCgenproof.html#exec_Mcond_true_prop">exec_Mcond_true_prop</a> [in <a href="backend.PPCgenproof.html">backend.PPCgenproof</a>]<br/>
+<a href="backend.PPCgenproof.html#exec_Mgetparam_prop">exec_Mgetparam_prop</a> [in <a href="backend.PPCgenproof.html">backend.PPCgenproof</a>]<br/>
+<a href="backend.Stackingproof.html#exec_Mgetstack'">exec_Mgetstack'</a> [in <a href="backend.Stackingproof.html">backend.Stackingproof</a>]<br/>
+<a href="backend.PPCgenproof.html#exec_Mgetstack_prop">exec_Mgetstack_prop</a> [in <a href="backend.PPCgenproof.html">backend.PPCgenproof</a>]<br/>
+<a href="backend.PPCgenproof.html#exec_Mgoto_prop">exec_Mgoto_prop</a> [in <a href="backend.PPCgenproof.html">backend.PPCgenproof</a>]<br/>
+<a href="backend.PPCgenproof.html#exec_Mlabel_prop">exec_Mlabel_prop</a> [in <a href="backend.PPCgenproof.html">backend.PPCgenproof</a>]<br/>
+<a href="backend.PPCgenproof.html#exec_Mload_prop">exec_Mload_prop</a> [in <a href="backend.PPCgenproof.html">backend.PPCgenproof</a>]<br/>
+<a href="backend.PPCgenproof.html#exec_Mop_prop">exec_Mop_prop</a> [in <a href="backend.PPCgenproof.html">backend.PPCgenproof</a>]<br/>
+<a href="backend.Stackingproof.html#exec_Msetstack'">exec_Msetstack'</a> [in <a href="backend.Stackingproof.html">backend.Stackingproof</a>]<br/>
+<a href="backend.PPCgenproof.html#exec_Msetstack_prop">exec_Msetstack_prop</a> [in <a href="backend.PPCgenproof.html">backend.PPCgenproof</a>]<br/>
+<a href="backend.PPCgenproof.html#exec_Mstore_prop">exec_Mstore_prop</a> [in <a href="backend.PPCgenproof.html">backend.PPCgenproof</a>]<br/>
+<a href="backend.Machabstr.html#exec_mutual_induction">exec_mutual_induction</a> [in <a href="backend.Machabstr.html">backend.Machabstr</a>]<br/>
+<a href="backend.PPCgenproof.html#exec_one_prop">exec_one_prop</a> [in <a href="backend.PPCgenproof.html">backend.PPCgenproof</a>]<br/>
+<a href="backend.Machabstr2mach.html#exec_program_equiv">exec_program_equiv</a> [in <a href="backend.Machabstr2mach.html">backend.Machabstr2mach</a>]<br/>
+<a href="backend.PPCgenproof.html#exec_refl_prop">exec_refl_prop</a> [in <a href="backend.PPCgenproof.html">backend.PPCgenproof</a>]<br/>
+<a href="backend.RTL.html#exec_step">exec_step</a> [in <a href="backend.RTL.html">backend.RTL</a>]<br/>
+<a href="backend.PPCgenproof.html#exec_straight_exec_prop">exec_straight_exec_prop</a> [in <a href="backend.PPCgenproof.html">backend.PPCgenproof</a>]<br/>
+<a href="backend.PPCgenproof1.html#exec_straight_one">exec_straight_one</a> [in <a href="backend.PPCgenproof1.html">backend.PPCgenproof1</a>]<br/>
+<a href="backend.PPCgenproof.html#exec_straight_steps">exec_straight_steps</a> [in <a href="backend.PPCgenproof.html">backend.PPCgenproof</a>]<br/>
+<a href="backend.PPCgenproof.html#exec_straight_steps_1">exec_straight_steps_1</a> [in <a href="backend.PPCgenproof.html">backend.PPCgenproof</a>]<br/>
+<a href="backend.PPCgenproof.html#exec_straight_steps_2">exec_straight_steps_2</a> [in <a href="backend.PPCgenproof.html">backend.PPCgenproof</a>]<br/>
+<a href="backend.PPCgenproof1.html#exec_straight_three">exec_straight_three</a> [in <a href="backend.PPCgenproof1.html">backend.PPCgenproof1</a>]<br/>
+<a href="backend.PPCgenproof1.html#exec_straight_trans">exec_straight_trans</a> [in <a href="backend.PPCgenproof1.html">backend.PPCgenproof1</a>]<br/>
+<a href="backend.PPCgenproof1.html#exec_straight_two">exec_straight_two</a> [in <a href="backend.PPCgenproof1.html">backend.PPCgenproof1</a>]<br/>
+<a href="backend.PPCgenproof.html#exec_trans_prop">exec_trans_prop</a> [in <a href="backend.PPCgenproof.html">backend.PPCgenproof</a>]<br/>
+<a href="backend.RTLgenproof1.html#expr_condexpr_exprlist_ind">expr_condexpr_exprlist_ind</a> [in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="lib.Maps.html#exten">exten</a> [in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="backend.Mem.html#extends_refl">extends_refl</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#extend_inject_incr">extend_inject_incr</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<br/><br/><a name="lemma_F"></a><h2>F </h2>
+<a href="backend.Globalenvs.html#find_funct_find_funct_ptr">find_funct_find_funct_ptr</a> [in <a href="backend.Globalenvs.html">backend.Globalenvs</a>]<br/>
+<a href="backend.Globalenvs.html#find_funct_inv">find_funct_inv</a> [in <a href="backend.Globalenvs.html">backend.Globalenvs</a>]<br/>
+<a href="backend.Globalenvs.html#find_funct_prop">find_funct_prop</a> [in <a href="backend.Globalenvs.html">backend.Globalenvs</a>]<br/>
+<a href="backend.Globalenvs.html#find_funct_ptr_inv">find_funct_ptr_inv</a> [in <a href="backend.Globalenvs.html">backend.Globalenvs</a>]<br/>
+<a href="backend.Globalenvs.html#find_funct_ptr_prop">find_funct_ptr_prop</a> [in <a href="backend.Globalenvs.html">backend.Globalenvs</a>]<br/>
+<a href="backend.Globalenvs.html#find_funct_ptr_transf">find_funct_ptr_transf</a> [in <a href="backend.Globalenvs.html">backend.Globalenvs</a>]<br/>
+<a href="backend.Globalenvs.html#find_funct_ptr_transf_partial">find_funct_ptr_transf_partial</a> [in <a href="backend.Globalenvs.html">backend.Globalenvs</a>]<br/>
+<a href="backend.Globalenvs.html#find_funct_transf">find_funct_transf</a> [in <a href="backend.Globalenvs.html">backend.Globalenvs</a>]<br/>
+<a href="backend.Globalenvs.html#find_funct_transf_partial">find_funct_transf_partial</a> [in <a href="backend.Globalenvs.html">backend.Globalenvs</a>]<br/>
+<a href="backend.PPCgenproof.html#find_instr_in">find_instr_in</a> [in <a href="backend.PPCgenproof.html">backend.PPCgenproof</a>]<br/>
+<a href="backend.PPCgenproof.html#find_instr_tail">find_instr_tail</a> [in <a href="backend.PPCgenproof.html">backend.PPCgenproof</a>]<br/>
+<a href="backend.Linearizeproof.html#find_label_cleanup_code">find_label_cleanup_code</a> [in <a href="backend.Linearizeproof.html">backend.Linearizeproof</a>]<br/>
+<a href="backend.PPCgenproof.html#find_label_goto_label">find_label_goto_label</a> [in <a href="backend.PPCgenproof.html">backend.PPCgenproof</a>]<br/>
+<a href="backend.Stackingproof.html#find_label_incl">find_label_incl</a> [in <a href="backend.Stackingproof.html">backend.Stackingproof</a>]<br/>
+<a href="backend.Linearizeproof.html#find_label_lin">find_label_lin</a> [in <a href="backend.Linearizeproof.html">backend.Linearizeproof</a>]<br/>
+<a href="backend.Linearizeproof.html#find_label_lin_block">find_label_lin_block</a> [in <a href="backend.Linearizeproof.html">backend.Linearizeproof</a>]<br/>
+<a href="backend.Linearizeproof.html#find_label_lin_rec">find_label_lin_rec</a> [in <a href="backend.Linearizeproof.html">backend.Linearizeproof</a>]<br/>
+<a href="backend.Stackingproof.html#find_label_transl_code">find_label_transl_code</a> [in <a href="backend.Stackingproof.html">backend.Stackingproof</a>]<br/>
+<a href="backend.Linearizeproof.html#find_label_unique">find_label_unique</a> [in <a href="backend.Linearizeproof.html">backend.Linearizeproof</a>]<br/>
+<a href="backend.RTLgenproof1.html#find_letvar_incr">find_letvar_incr</a> [in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.RTLgenproof1.html#find_letvar_in_map">find_letvar_in_map</a> [in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.RTLgenproof1.html#find_letvar_not_mutated">find_letvar_not_mutated</a> [in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.RTLgenproof1.html#find_letvar_valid">find_letvar_valid</a> [in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.CSEproof.html#find_load_correct">find_load_correct</a> [in <a href="backend.CSEproof.html">backend.CSEproof</a>]<br/>
+<a href="backend.CSEproof.html#find_op_correct">find_op_correct</a> [in <a href="backend.CSEproof.html">backend.CSEproof</a>]<br/>
+<a href="backend.CSEproof.html#find_rhs_correct">find_rhs_correct</a> [in <a href="backend.CSEproof.html">backend.CSEproof</a>]<br/>
+<a href="backend.Globalenvs.html#find_symbol_inv">find_symbol_inv</a> [in <a href="backend.Globalenvs.html">backend.Globalenvs</a>]<br/>
+<a href="backend.Globalenvs.html#find_symbol_transf">find_symbol_transf</a> [in <a href="backend.Globalenvs.html">backend.Globalenvs</a>]<br/>
+<a href="backend.Globalenvs.html#find_symbol_transf_partial">find_symbol_transf_partial</a> [in <a href="backend.Globalenvs.html">backend.Globalenvs</a>]<br/>
+<a href="backend.CSEproof.html#find_valnum_rhs_correct">find_valnum_rhs_correct</a> [in <a href="backend.CSEproof.html">backend.CSEproof</a>]<br/>
+<a href="backend.RTLgenproof1.html#find_var_incr">find_var_incr</a> [in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.RTLgenproof1.html#find_var_in_map">find_var_in_map</a> [in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.RTLgenproof1.html#find_var_not_mutated">find_var_not_mutated</a> [in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.RTLgenproof1.html#find_var_valid">find_var_valid</a> [in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.Kildall.html#fixpoint_entry">fixpoint_entry</a> [in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.Kildall.html#fixpoint_entry">fixpoint_entry</a> [in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.Kildall.html#fixpoint_entry">fixpoint_entry</a> [in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.Kildall.html#fixpoint_incr">fixpoint_incr</a> [in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.Kildall.html#fixpoint_invariant">fixpoint_invariant</a> [in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.Kildall.html#fixpoint_solution">fixpoint_solution</a> [in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.Kildall.html#fixpoint_solution">fixpoint_solution</a> [in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.Kildall.html#fixpoint_solution">fixpoint_solution</a> [in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="lib.Inclusion.html#flatten_aux_valid_A">flatten_aux_valid_A</a> [in <a href="lib.Inclusion.html">lib.Inclusion</a>]<br/>
+<a href="lib.Inclusion.html#flatten_valid_A">flatten_valid_A</a> [in <a href="lib.Inclusion.html">lib.Inclusion</a>]<br/>
+<a href="backend.PPCgenproof1.html#floatcomp_correct">floatcomp_correct</a> [in <a href="backend.PPCgenproof1.html">backend.PPCgenproof1</a>]<br/>
+<a href="backend.Linearizetyping.html#float_callee_save_bound">float_callee_save_bound</a> [in <a href="backend.Linearizetyping.html">backend.Linearizetyping</a>]<br/>
+<a href="backend.Conventions.html#float_callee_save_norepet">float_callee_save_norepet</a> [in <a href="backend.Conventions.html">backend.Conventions</a>]<br/>
+<a href="backend.Conventions.html#float_callee_save_not_destroyed">float_callee_save_not_destroyed</a> [in <a href="backend.Conventions.html">backend.Conventions</a>]<br/>
+<a href="backend.Conventions.html#float_callee_save_type">float_callee_save_type</a> [in <a href="backend.Conventions.html">backend.Conventions</a>]<br/>
+<a href="backend.Linearizetyping.html#float_local_slot_bound">float_local_slot_bound</a> [in <a href="backend.Linearizetyping.html">backend.Linearizetyping</a>]<br/>
+<a href="lib.Maps.html#fold_spec">fold_spec</a> [in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Sets.html#fold_spec">fold_spec</a> [in <a href="lib.Sets.html">lib.Sets</a>]<br/>
+<a href="lib.Sets.html#for_all_spec">for_all_spec</a> [in <a href="lib.Sets.html">lib.Sets</a>]<br/>
+<a href="backend.Parallelmove.html#Fpmov_correct">Fpmov_correct</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#Fpmov_correctMoves">Fpmov_correctMoves</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#Fpmov_correct1">Fpmov_correct1</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#Fpmov_correct2">Fpmov_correct2</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#Fpmov_correct_ext">Fpmov_correct_ext</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#Fpmov_correct_IT3">Fpmov_correct_IT3</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#Fpmov_correct_map">Fpmov_correct_map</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Machabstr2mach.html#frame_match_alloc">frame_match_alloc</a> [in <a href="backend.Machabstr2mach.html">backend.Machabstr2mach</a>]<br/>
+<a href="backend.Machabstr2mach.html#frame_match_exten">frame_match_exten</a> [in <a href="backend.Machabstr2mach.html">backend.Machabstr2mach</a>]<br/>
+<a href="backend.Machabstr2mach.html#frame_match_free">frame_match_free</a> [in <a href="backend.Machabstr2mach.html">backend.Machabstr2mach</a>]<br/>
+<a href="backend.Machabstr2mach.html#frame_match_get_slot">frame_match_get_slot</a> [in <a href="backend.Machabstr2mach.html">backend.Machabstr2mach</a>]<br/>
+<a href="backend.Machabstr2mach.html#frame_match_load">frame_match_load</a> [in <a href="backend.Machabstr2mach.html">backend.Machabstr2mach</a>]<br/>
+<a href="backend.Machabstr2mach.html#frame_match_new">frame_match_new</a> [in <a href="backend.Machabstr2mach.html">backend.Machabstr2mach</a>]<br/>
+<a href="backend.Machabstr2mach.html#frame_match_set_slot">frame_match_set_slot</a> [in <a href="backend.Machabstr2mach.html">backend.Machabstr2mach</a>]<br/>
+<a href="backend.Machabstr2mach.html#frame_match_store">frame_match_store</a> [in <a href="backend.Machabstr2mach.html">backend.Machabstr2mach</a>]<br/>
+<a href="backend.Machabstr2mach.html#frame_match_store_ok">frame_match_store_ok</a> [in <a href="backend.Machabstr2mach.html">backend.Machabstr2mach</a>]<br/>
+<a href="backend.Machabstr2mach.html#frame_match_store_stack_other">frame_match_store_stack_other</a> [in <a href="backend.Machabstr2mach.html">backend.Machabstr2mach</a>]<br/>
+<a href="backend.Mem.html#free_empty_bounds">free_empty_bounds</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#free_extends">free_extends</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#free_first_inject">free_first_inject</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#free_first_list_inject">free_first_list_inject</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#free_inject">free_inject</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#free_snd_inject">free_snd_inject</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.PPC.html#freg_eq">freg_eq</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPCgenproof1.html#freg_of_is_data_reg">freg_of_is_data_reg</a> [in <a href="backend.PPCgenproof1.html">backend.PPCgenproof1</a>]<br/>
+<a href="backend.PPCgenproof1.html#freg_of_not_FPR13">freg_of_not_FPR13</a> [in <a href="backend.PPCgenproof1.html">backend.PPCgenproof1</a>]<br/>
+<a href="backend.PPCgenproof1.html#freg_val">freg_val</a> [in <a href="backend.PPCgenproof1.html">backend.PPCgenproof1</a>]<br/>
+<a href="backend.Mem.html#fresh_block_alloc">fresh_block_alloc</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Globalenvs.html#functions_globalenv">functions_globalenv</a> [in <a href="backend.Globalenvs.html">backend.Globalenvs</a>]<br/>
+<a href="backend.Constpropproof.html#functions_translated">functions_translated</a> [in <a href="backend.Constpropproof.html">backend.Constpropproof</a>]<br/>
+<a href="backend.Tunnelingproof.html#functions_translated">functions_translated</a> [in <a href="backend.Tunnelingproof.html">backend.Tunnelingproof</a>]<br/>
+<a href="backend.PPCgenproof.html#functions_translated">functions_translated</a> [in <a href="backend.PPCgenproof.html">backend.PPCgenproof</a>]<br/>
+<a href="backend.Allocproof.html#functions_translated">functions_translated</a> [in <a href="backend.Allocproof.html">backend.Allocproof</a>]<br/>
+<a href="backend.Linearizeproof.html#functions_translated">functions_translated</a> [in <a href="backend.Linearizeproof.html">backend.Linearizeproof</a>]<br/>
+<a href="backend.Stackingproof.html#functions_translated">functions_translated</a> [in <a href="backend.Stackingproof.html">backend.Stackingproof</a>]<br/>
+<a href="backend.CSEproof.html#functions_translated">functions_translated</a> [in <a href="backend.CSEproof.html">backend.CSEproof</a>]<br/>
+<a href="backend.Cminorgenproof.html#functions_translated">functions_translated</a> [in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.RTLgenproof.html#functions_translated">functions_translated</a> [in <a href="backend.RTLgenproof.html">backend.RTLgenproof</a>]<br/>
+<a href="backend.PPCgenproof.html#functions_translated_no_overflow">functions_translated_no_overflow</a> [in <a href="backend.PPCgenproof.html">backend.PPCgenproof</a>]<br/>
+<a href="backend.PPCgenproof.html#functions_translated_2">functions_translated_2</a> [in <a href="backend.PPCgenproof.html">backend.PPCgenproof</a>]<br/>
+<a href="backend.Cminorgenproof.html#function_entry_ok">function_entry_ok</a> [in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.Linearizeproof.html#function_ptr_translated">function_ptr_translated</a> [in <a href="backend.Linearizeproof.html">backend.Linearizeproof</a>]<br/>
+<a href="backend.Allocproof.html#function_ptr_translated">function_ptr_translated</a> [in <a href="backend.Allocproof.html">backend.Allocproof</a>]<br/>
+<a href="backend.Stackingproof.html#function_ptr_translated">function_ptr_translated</a> [in <a href="backend.Stackingproof.html">backend.Stackingproof</a>]<br/>
+<a href="backend.Cminorgenproof.html#function_ptr_translated">function_ptr_translated</a> [in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.RTLgenproof.html#function_ptr_translated">function_ptr_translated</a> [in <a href="backend.RTLgenproof.html">backend.RTLgenproof</a>]<br/>
+<a href="backend.Constpropproof.html#function_ptr_translated">function_ptr_translated</a> [in <a href="backend.Constpropproof.html">backend.Constpropproof</a>]<br/>
+<a href="backend.Tunnelingproof.html#function_ptr_translated">function_ptr_translated</a> [in <a href="backend.Tunnelingproof.html">backend.Tunnelingproof</a>]<br/>
+<a href="backend.CSEproof.html#funct_ptr_translated">funct_ptr_translated</a> [in <a href="backend.CSEproof.html">backend.CSEproof</a>]<br/>
+<a href="backend.Parallelmove.html#f2ind">f2ind</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#f2ind'">f2ind'</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<br/><br/><a name="lemma_G"></a><h2>G </h2>
+<a href="lib.Maps.html#gcombine">gcombine</a> [in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Maps.html#gempty">gempty</a> [in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="backend.Parallelmove.html#getdst_add">getdst_add</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#getdst_app">getdst_app</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Alloctyping_aux.html#getdst_f">getdst_f</a> [in <a href="backend.Alloctyping_aux.html">backend.Alloctyping_aux</a>]<br/>
+<a href="backend.Allocproof_aux.html#getdst_lists2moves">getdst_lists2moves</a> [in <a href="backend.Allocproof_aux.html">backend.Allocproof_aux</a>]<br/>
+<a href="backend.Parallelmove.html#getdst_map">getdst_map</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Mem.html#getN_agree">getN_agree</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#getN_init">getN_init</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#getN_inject">getN_inject</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#getN_setN_mismatch">getN_setN_mismatch</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#getN_setN_other">getN_setN_other</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#getN_setN_overlap">getN_setN_overlap</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#getN_setN_same">getN_setN_same</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Allocproof_aux.html#getsrcdst_app">getsrcdst_app</a> [in <a href="backend.Allocproof_aux.html">backend.Allocproof_aux</a>]<br/>
+<a href="backend.Parallelmove.html#getsrc_add">getsrc_add</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#getsrc_add1">getsrc_add1</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#getsrc_app">getsrc_app</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Alloctyping_aux.html#getsrc_f">getsrc_f</a> [in <a href="backend.Alloctyping_aux.html">backend.Alloctyping_aux</a>]<br/>
+<a href="backend.Parallelmove.html#getsrc_map">getsrc_map</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.RTLtyping.html#get_add_1">get_add_1</a> [in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.RTLtyping.html#get_add_2">get_add_2</a> [in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="lib.Lattice.html#get_bot">get_bot</a> [in <a href="lib.Lattice.html">lib.Lattice</a>]<br/>
+<a href="backend.RTLtyping.html#get_empty">get_empty</a> [in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.Parallelmove.html#get_noWrite">get_noWrite</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#get_pexec_id_noWrite">get_pexec_id_noWrite</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Stackingproof.html#get_slot_index">get_slot_index</a> [in <a href="backend.Stackingproof.html">backend.Stackingproof</a>]<br/>
+<a href="backend.Stackingproof.html#get_slot_ok">get_slot_ok</a> [in <a href="backend.Stackingproof.html">backend.Stackingproof</a>]<br/>
+<a href="lib.Lattice.html#get_top">get_top</a> [in <a href="lib.Lattice.html">lib.Lattice</a>]<br/>
+<a href="backend.Parallelmove.html#get_update">get_update</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#get_update_diff">get_update_diff</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#get_update_id">get_update_id</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#get_update_ndiff">get_update_ndiff</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="lib.Maps.html#get_xget_h">get_xget_h</a> [in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Lattice.html#ge_bot">ge_bot</a> [in <a href="lib.Lattice.html">lib.Lattice</a>]<br/>
+<a href="lib.Lattice.html#ge_bot">ge_bot</a> [in <a href="lib.Lattice.html">lib.Lattice</a>]<br/>
+<a href="lib.Sets.html#ge_bot">ge_bot</a> [in <a href="lib.Sets.html">lib.Sets</a>]<br/>
+<a href="lib.Lattice.html#ge_bot">ge_bot</a> [in <a href="lib.Lattice.html">lib.Lattice</a>]<br/>
+<a href="backend.Constprop.html#ge_bot">ge_bot</a> [in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="lib.Lattice.html#ge_lub_left">ge_lub_left</a> [in <a href="lib.Lattice.html">lib.Lattice</a>]<br/>
+<a href="lib.Sets.html#ge_lub_left">ge_lub_left</a> [in <a href="lib.Sets.html">lib.Sets</a>]<br/>
+<a href="backend.Constprop.html#ge_lub_left">ge_lub_left</a> [in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="lib.Lattice.html#ge_lub_left">ge_lub_left</a> [in <a href="lib.Lattice.html">lib.Lattice</a>]<br/>
+<a href="lib.Lattice.html#ge_lub_left">ge_lub_left</a> [in <a href="lib.Lattice.html">lib.Lattice</a>]<br/>
+<a href="lib.Sets.html#ge_lub_right">ge_lub_right</a> [in <a href="lib.Sets.html">lib.Sets</a>]<br/>
+<a href="lib.Lattice.html#ge_refl">ge_refl</a> [in <a href="lib.Lattice.html">lib.Lattice</a>]<br/>
+<a href="lib.Sets.html#ge_refl">ge_refl</a> [in <a href="lib.Sets.html">lib.Sets</a>]<br/>
+<a href="lib.Lattice.html#ge_refl">ge_refl</a> [in <a href="lib.Lattice.html">lib.Lattice</a>]<br/>
+<a href="lib.Lattice.html#ge_refl">ge_refl</a> [in <a href="lib.Lattice.html">lib.Lattice</a>]<br/>
+<a href="backend.Constprop.html#ge_refl">ge_refl</a> [in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="lib.Lattice.html#ge_top">ge_top</a> [in <a href="lib.Lattice.html">lib.Lattice</a>]<br/>
+<a href="backend.Constprop.html#ge_top">ge_top</a> [in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="lib.Lattice.html#ge_top">ge_top</a> [in <a href="lib.Lattice.html">lib.Lattice</a>]<br/>
+<a href="lib.Lattice.html#ge_top">ge_top</a> [in <a href="lib.Lattice.html">lib.Lattice</a>]<br/>
+<a href="lib.Lattice.html#ge_trans">ge_trans</a> [in <a href="lib.Lattice.html">lib.Lattice</a>]<br/>
+<a href="backend.Constprop.html#ge_trans">ge_trans</a> [in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="lib.Sets.html#ge_trans">ge_trans</a> [in <a href="lib.Sets.html">lib.Sets</a>]<br/>
+<a href="lib.Lattice.html#ge_trans">ge_trans</a> [in <a href="lib.Lattice.html">lib.Lattice</a>]<br/>
+<a href="lib.Lattice.html#ge_trans">ge_trans</a> [in <a href="lib.Lattice.html">lib.Lattice</a>]<br/>
+<a href="lib.Maps.html#gi">gi</a> [in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Maps.html#gi">gi</a> [in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Maps.html#gi">gi</a> [in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Maps.html#gleaf">gleaf</a> [in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Maps.html#gmap">gmap</a> [in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Maps.html#gmap">gmap</a> [in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Maps.html#gmap">gmap</a> [in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Maps.html#gmap">gmap</a> [in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="backend.PPCgenproof1.html#gpr_or_zero_not_zero">gpr_or_zero_not_zero</a> [in <a href="backend.PPCgenproof1.html">backend.PPCgenproof1</a>]<br/>
+<a href="backend.PPCgenproof1.html#gpr_or_zero_zero">gpr_or_zero_zero</a> [in <a href="backend.PPCgenproof1.html">backend.PPCgenproof1</a>]<br/>
+<a href="backend.Coloringproof.html#graph_incl_refl">graph_incl_refl</a> [in <a href="backend.Coloringproof.html">backend.Coloringproof</a>]<br/>
+<a href="backend.InterfGraph.html#graph_incl_trans">graph_incl_trans</a> [in <a href="backend.InterfGraph.html">backend.InterfGraph</a>]<br/>
+<a href="lib.Maps.html#gro">gro</a> [in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Maps.html#grs">grs</a> [in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Maps.html#gsident">gsident</a> [in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Maps.html#gsident">gsident</a> [in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Maps.html#gsident">gsident</a> [in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Maps.html#gso">gso</a> [in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="backend.Locations.html#gso">gso</a> [in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="lib.Maps.html#gso">gso</a> [in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Maps.html#gso">gso</a> [in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Lattice.html#gso">gso</a> [in <a href="lib.Lattice.html">lib.Lattice</a>]<br/>
+<a href="lib.Maps.html#gso">gso</a> [in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Maps.html#gss">gss</a> [in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Maps.html#gss">gss</a> [in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="backend.Locations.html#gss">gss</a> [in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="lib.Maps.html#gss">gss</a> [in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Lattice.html#gss">gss</a> [in <a href="lib.Lattice.html">lib.Lattice</a>]<br/>
+<a href="lib.Maps.html#gss">gss</a> [in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Maps.html#gsspec">gsspec</a> [in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Maps.html#gsspec">gsspec</a> [in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Maps.html#gsspec">gsspec</a> [in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Maps.html#gsspec">gsspec</a> [in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<br/><br/><a name="lemma_H"></a><h2>H </h2>
+<a href="backend.Mem.html#high_bound_alloc">high_bound_alloc</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#high_bound_free">high_bound_free</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#high_bound_store">high_bound_store</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.PPCgenproof1.html#high_half_signed_zero">high_half_signed_zero</a> [in <a href="backend.PPCgenproof1.html">backend.PPCgenproof1</a>]<br/>
+<a href="backend.PPCgenproof1.html#high_half_unsigned_zero">high_half_unsigned_zero</a> [in <a href="backend.PPCgenproof1.html">backend.PPCgenproof1</a>]<br/>
+<br/><br/><a name="lemma_I"></a><h2>I </h2>
+<a href="lib.union_find.html#identify_aux_decomp">identify_aux_decomp</a> [in <a href="lib.union_find.html">lib.union_find</a>]<br/>
+<a href="lib.union_find.html#identify_base_a_maps_to_b">identify_base_a_maps_to_b</a> [in <a href="lib.union_find.html">lib.union_find</a>]<br/>
+<a href="lib.union_find.html#identify_base_b_canon">identify_base_b_canon</a> [in <a href="lib.union_find.html">lib.union_find</a>]<br/>
+<a href="lib.union_find.html#identify_base_order_wf">identify_base_order_wf</a> [in <a href="lib.union_find.html">lib.union_find</a>]<br/>
+<a href="lib.union_find.html#identify_base_repr">identify_base_repr</a> [in <a href="lib.union_find.html">lib.union_find</a>]<br/>
+<a href="lib.union_find.html#identify_base_repr_order">identify_base_repr_order</a> [in <a href="lib.union_find.html">lib.union_find</a>]<br/>
+<a href="lib.union_find.html#identify_base_sameclass_1">identify_base_sameclass_1</a> [in <a href="lib.union_find.html">lib.union_find</a>]<br/>
+<a href="lib.union_find.html#identify_base_sameclass_2">identify_base_sameclass_2</a> [in <a href="lib.union_find.html">lib.union_find</a>]<br/>
+<a href="backend.RTLtyping.html#included_consistent">included_consistent</a> [in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.RTLtyping.html#included_identify">included_identify</a> [in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.RTLtyping.html#included_mapped">included_mapped</a> [in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.RTLtyping.html#included_mapped_forall">included_mapped_forall</a> [in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.RTLtyping.html#included_refl">included_refl</a> [in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.RTLtyping.html#included_trans">included_trans</a> [in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="lib.Inclusion.html#inclusion_theorem">inclusion_theorem</a> [in <a href="lib.Inclusion.html">lib.Inclusion</a>]<br/>
+<a href="lib.Coqlib.html#incl_app_inv_l">incl_app_inv_l</a> [in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="lib.Coqlib.html#incl_app_inv_r">incl_app_inv_r</a> [in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="lib.Coqlib.html#incl_cons_inv">incl_cons_inv</a> [in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="backend.Alloctyping_aux.html#incl_dst">incl_dst</a> [in <a href="backend.Alloctyping_aux.html">backend.Alloctyping_aux</a>]<br/>
+<a href="backend.Machtyping.html#incl_find_label">incl_find_label</a> [in <a href="backend.Machtyping.html">backend.Machtyping</a>]<br/>
+<a href="backend.Alloctyping_aux.html#incl_nil">incl_nil</a> [in <a href="backend.Alloctyping_aux.html">backend.Alloctyping_aux</a>]<br/>
+<a href="lib.Coqlib.html#incl_same_head">incl_same_head</a> [in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="backend.Alloctyping_aux.html#incl_src">incl_src</a> [in <a href="backend.Alloctyping_aux.html">backend.Alloctyping_aux</a>]<br/>
+<a href="backend.Stackingproof.html#index_arg_valid">index_arg_valid</a> [in <a href="backend.Stackingproof.html">backend.Stackingproof</a>]<br/>
+<a href="backend.Conventions.html#index_float_callee_save_inj">index_float_callee_save_inj</a> [in <a href="backend.Conventions.html">backend.Conventions</a>]<br/>
+<a href="backend.Conventions.html#index_float_callee_save_pos">index_float_callee_save_pos</a> [in <a href="backend.Conventions.html">backend.Conventions</a>]<br/>
+<a href="backend.Conventions.html#index_float_callee_save_pos2">index_float_callee_save_pos2</a> [in <a href="backend.Conventions.html">backend.Conventions</a>]<br/>
+<a href="lib.Maps.html#index_inj">index_inj</a> [in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="backend.Locations.html#index_inj">index_inj</a> [in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="lib.Maps.html#index_inj">index_inj</a> [in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="backend.Conventions.html#index_int_callee_save_inj">index_int_callee_save_inj</a> [in <a href="backend.Conventions.html">backend.Conventions</a>]<br/>
+<a href="backend.Conventions.html#index_int_callee_save_pos">index_int_callee_save_pos</a> [in <a href="backend.Conventions.html">backend.Conventions</a>]<br/>
+<a href="backend.Conventions.html#index_int_callee_save_pos2">index_int_callee_save_pos2</a> [in <a href="backend.Conventions.html">backend.Conventions</a>]<br/>
+<a href="backend.Stackingproof.html#index_local_valid">index_local_valid</a> [in <a href="backend.Stackingproof.html">backend.Stackingproof</a>]<br/>
+<a href="backend.Stackingproof.html#index_saved_float_valid">index_saved_float_valid</a> [in <a href="backend.Stackingproof.html">backend.Stackingproof</a>]<br/>
+<a href="backend.Stackingproof.html#index_saved_int_valid">index_saved_int_valid</a> [in <a href="backend.Stackingproof.html">backend.Stackingproof</a>]<br/>
+<a href="backend.Stackingproof.html#index_val_init_frame">index_val_init_frame</a> [in <a href="backend.Stackingproof.html">backend.Stackingproof</a>]<br/>
+<a href="backend.Parallelmove.html#Indst_noOverlap_aux">Indst_noOverlap_aux</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#Ingetsrc_swap">Ingetsrc_swap</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#Ingetsrc_swap2">Ingetsrc_swap2</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Kildall.html#initial_state_invariant">initial_state_invariant</a> [in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.Globalenvs.html#initmem_nullptr">initmem_nullptr</a> [in <a href="backend.Globalenvs.html">backend.Globalenvs</a>]<br/>
+<a href="backend.Globalenvs.html#initmem_undef">initmem_undef</a> [in <a href="backend.Globalenvs.html">backend.Globalenvs</a>]<br/>
+<a href="backend.RTLgenproof1.html#init_mapping_wf">init_mapping_wf</a> [in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.Globalenvs.html#init_mem_transf">init_mem_transf</a> [in <a href="backend.Globalenvs.html">backend.Globalenvs</a>]<br/>
+<a href="backend.Globalenvs.html#init_mem_transf_partial">init_mem_transf_partial</a> [in <a href="backend.Globalenvs.html">backend.Globalenvs</a>]<br/>
+<a href="backend.RTLgen.html#init_state_wf">init_state_wf</a> [in <a href="backend.RTLgen.html">backend.RTLgen</a>]<br/>
+<a href="backend.Mem.html#inject_incr_refl">inject_incr_refl</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#inject_incr_trans">inject_incr_trans</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="lib.Inclusion.html#insert_bin_included">insert_bin_included</a> [in <a href="lib.Inclusion.html">lib.Inclusion</a>]<br/>
+<a href="backend.Cmconstrproof.html#insert_lenv_lookup1">insert_lenv_lookup1</a> [in <a href="backend.Cmconstrproof.html">backend.Cmconstrproof</a>]<br/>
+<a href="backend.Cmconstrproof.html#insert_lenv_lookup2">insert_lenv_lookup2</a> [in <a href="backend.Cmconstrproof.html">backend.Cmconstrproof</a>]<br/>
+<a href="backend.RTLgenproof1.html#instr_at_incr">instr_at_incr</a> [in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.Coloringproof.html#interfere_incl">interfere_incl</a> [in <a href="backend.Coloringproof.html">backend.Coloringproof</a>]<br/>
+<a href="backend.Coloringproof.html#interfere_mreg_incl">interfere_mreg_incl</a> [in <a href="backend.Coloringproof.html">backend.Coloringproof</a>]<br/>
+<a href="backend.InterfGraph.html#interfere_sym">interfere_sym</a> [in <a href="backend.InterfGraph.html">backend.InterfGraph</a>]<br/>
+<a href="backend.Coloringproof.html#interf_graph_correct_1">interf_graph_correct_1</a> [in <a href="backend.Coloringproof.html">backend.Coloringproof</a>]<br/>
+<a href="backend.Coloringproof.html#interf_graph_correct_2">interf_graph_correct_2</a> [in <a href="backend.Coloringproof.html">backend.Coloringproof</a>]<br/>
+<a href="backend.Coloringproof.html#interf_graph_correct_3">interf_graph_correct_3</a> [in <a href="backend.Coloringproof.html">backend.Coloringproof</a>]<br/>
+<a href="backend.Constpropproof.html#intval_correct">intval_correct</a> [in <a href="backend.Constpropproof.html">backend.Constpropproof</a>]<br/>
+<a href="backend.Machabstr2mach.html#int_add_no_overflow">int_add_no_overflow</a> [in <a href="backend.Machabstr2mach.html">backend.Machabstr2mach</a>]<br/>
+<a href="backend.Linearizetyping.html#int_callee_save_bound">int_callee_save_bound</a> [in <a href="backend.Linearizetyping.html">backend.Linearizetyping</a>]<br/>
+<a href="backend.Conventions.html#int_callee_save_norepet">int_callee_save_norepet</a> [in <a href="backend.Conventions.html">backend.Conventions</a>]<br/>
+<a href="backend.Conventions.html#int_callee_save_not_destroyed">int_callee_save_not_destroyed</a> [in <a href="backend.Conventions.html">backend.Conventions</a>]<br/>
+<a href="backend.Conventions.html#int_callee_save_type">int_callee_save_type</a> [in <a href="backend.Conventions.html">backend.Conventions</a>]<br/>
+<a href="backend.Conventions.html#int_float_callee_save_disjoint">int_float_callee_save_disjoint</a> [in <a href="backend.Conventions.html">backend.Conventions</a>]<br/>
+<a href="backend.Linearizetyping.html#int_local_slot_bound">int_local_slot_bound</a> [in <a href="backend.Linearizetyping.html">backend.Linearizetyping</a>]<br/>
+<a href="backend.Cmconstrproof.html#inv_eval_Eop_0">inv_eval_Eop_0</a> [in <a href="backend.Cmconstrproof.html">backend.Cmconstrproof</a>]<br/>
+<a href="backend.Cmconstrproof.html#inv_eval_Eop_1">inv_eval_Eop_1</a> [in <a href="backend.Cmconstrproof.html">backend.Cmconstrproof</a>]<br/>
+<a href="backend.Cmconstrproof.html#inv_eval_Eop_2">inv_eval_Eop_2</a> [in <a href="backend.Cmconstrproof.html">backend.Cmconstrproof</a>]<br/>
+<a href="backend.Mem.html#in_bounds_exten">in_bounds_exten</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#in_bounds_holds">in_bounds_holds</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#in_bounds_inject">in_bounds_inject</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Allocproof_aux.html#in_cons_noteq">in_cons_noteq</a> [in <a href="backend.Allocproof_aux.html">backend.Allocproof_aux</a>]<br/>
+<a href="backend.Kildall.html#in_incr_refl">in_incr_refl</a> [in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.Kildall.html#in_incr_trans">in_incr_trans</a> [in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.Parallelmove.html#In_Indst">In_Indst</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Alloctyping_aux.html#in_move__in_srcdst">in_move__in_srcdst</a> [in <a href="backend.Alloctyping_aux.html">backend.Alloctyping_aux</a>]<br/>
+<a href="backend.Allocproof_aux.html#In_norepet">In_norepet</a> [in <a href="backend.Allocproof_aux.html">backend.Allocproof_aux</a>]<br/>
+<a href="backend.Locations.html#in_notin_diff">in_notin_diff</a> [in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Parallelmove.html#In_noTmp_notempo">In_noTmp_notempo</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="lib.Inclusion.html#in_or_insert_bin">in_or_insert_bin</a> [in <a href="lib.Inclusion.html">lib.Inclusion</a>]<br/>
+<a href="backend.Machabstr2mach.html#in_or_notin_callstack">in_or_notin_callstack</a> [in <a href="backend.Machabstr2mach.html">backend.Machabstr2mach</a>]<br/>
+<a href="lib.Inclusion.html#In_permute_app_head">In_permute_app_head</a> [in <a href="lib.Inclusion.html">lib.Inclusion</a>]<br/>
+<a href="lib.Integers.html#in_range_range">in_range_range</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Inclusion.html#in_remove_head">in_remove_head</a> [in <a href="lib.Inclusion.html">lib.Inclusion</a>]<br/>
+<a href="backend.Parallelmove.html#In_SD_diff">In_SD_diff</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#In_SD_diff'">In_SD_diff'</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#In_SD_no_o">In_SD_no_o</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Alloctyping_aux.html#in_split_move">in_split_move</a> [in <a href="backend.Alloctyping_aux.html">backend.Alloctyping_aux</a>]<br/>
+<a href="lib.Maps.html#in_xelements">in_xelements</a> [in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Maps.html#in_xkeys">in_xkeys</a> [in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="backend.PPC.html#ireg_eq">ireg_eq</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPCgenproof1.html#ireg_of_is_data_reg">ireg_of_is_data_reg</a> [in <a href="backend.PPCgenproof1.html">backend.PPCgenproof1</a>]<br/>
+<a href="backend.PPCgenproof1.html#ireg_of_not_GPR1">ireg_of_not_GPR1</a> [in <a href="backend.PPCgenproof1.html">backend.PPCgenproof1</a>]<br/>
+<a href="backend.PPCgenproof1.html#ireg_of_not_GPR2">ireg_of_not_GPR2</a> [in <a href="backend.PPCgenproof1.html">backend.PPCgenproof1</a>]<br/>
+<a href="backend.PPCgenproof1.html#ireg_val">ireg_val</a> [in <a href="backend.PPCgenproof1.html">backend.PPCgenproof1</a>]<br/>
+<a href="backend.Values.html#isfalse_not_istrue">isfalse_not_istrue</a> [in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.Values.html#istrue_not_isfalse">istrue_not_isfalse</a> [in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.Tunnelingproof.html#is_goto_block_correct">is_goto_block_correct</a> [in <a href="backend.Tunnelingproof.html">backend.Tunnelingproof</a>]<br/>
+<a href="backend.PPC.html#is_label_correct">is_label_correct</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.Mach.html#is_label_correct">is_label_correct</a> [in <a href="backend.Mach.html">backend.Mach</a>]<br/>
+<a href="backend.Linear.html#is_label_correct">is_label_correct</a> [in <a href="backend.Linear.html">backend.Linear</a>]<br/>
+<a href="backend.Op.html#is_move_operation_correct">is_move_operation_correct</a> [in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="lib.Integers.html#is_power2_correct">is_power2_correct</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#is_power2_range">is_power2_range</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#is_power2_rng">is_power2_rng</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Linearizeproof.html#is_tail_cons_left">is_tail_cons_left</a> [in <a href="backend.Linearizeproof.html">backend.Linearizeproof</a>]<br/>
+<a href="backend.Linearizeproof.html#is_tail_exec_instr">is_tail_exec_instr</a> [in <a href="backend.Linearizeproof.html">backend.Linearizeproof</a>]<br/>
+<a href="backend.Linearizeproof.html#is_tail_exec_instrs">is_tail_exec_instrs</a> [in <a href="backend.Linearizeproof.html">backend.Linearizeproof</a>]<br/>
+<a href="backend.Linearizeproof.html#is_tail_find_label">is_tail_find_label</a> [in <a href="backend.Linearizeproof.html">backend.Linearizeproof</a>]<br/>
+<a href="backend.Linearizeproof.html#is_tail_in">is_tail_in</a> [in <a href="backend.Linearizeproof.html">backend.Linearizeproof</a>]<br/>
+<a href="backend.Kildall.html#iterate_base">iterate_base</a> [in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.Kildall.html#iterate_incr">iterate_incr</a> [in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.Kildall.html#iterate_solution">iterate_solution</a> [in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.Kildall.html#iterate_step">iterate_step</a> [in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<br/><br/><a name="lemma_K"></a><h2>K </h2>
+<a href="backend.CSEproof.html#kill_load_eqs_incl">kill_load_eqs_incl</a> [in <a href="backend.CSEproof.html">backend.CSEproof</a>]<br/>
+<a href="backend.CSEproof.html#kill_load_eqs_ops">kill_load_eqs_ops</a> [in <a href="backend.CSEproof.html">backend.CSEproof</a>]<br/>
+<a href="backend.CSEproof.html#kill_load_satisfiable">kill_load_satisfiable</a> [in <a href="backend.CSEproof.html">backend.CSEproof</a>]<br/>
+<br/><br/><a name="lemma_L"></a><h2>L </h2>
+<a href="backend.Linearizeproof.html#label_in_lin_block">label_in_lin_block</a> [in <a href="backend.Linearizeproof.html">backend.Linearizeproof</a>]<br/>
+<a href="backend.Linearizeproof.html#label_in_lin_rec">label_in_lin_rec</a> [in <a href="backend.Linearizeproof.html">backend.Linearizeproof</a>]<br/>
+<a href="backend.PPCgenproof.html#label_pos_code_tail">label_pos_code_tail</a> [in <a href="backend.PPCgenproof.html">backend.PPCgenproof</a>]<br/>
+<a href="backend.Parallelmove.html#last_app">last_app</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#last_cons">last_cons</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#last_replace">last_replace</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Allocproof.html#length_addr_args">length_addr_args</a> [in <a href="backend.Allocproof.html">backend.Allocproof</a>]<br/>
+<a href="backend.Parallelmove.html#length_app">length_app</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Allocproof.html#length_cond_args">length_cond_args</a> [in <a href="backend.Allocproof.html">backend.Allocproof</a>]<br/>
+<a href="backend.Allocproof.html#length_op_args">length_op_args</a> [in <a href="backend.Allocproof.html">backend.Allocproof</a>]<br/>
+<a href="backend.Parallelmove.html#length_replace">length_replace</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.RTLtyping.html#let_fold_args_res">let_fold_args_res</a> [in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.Linearizetyping.html#linearize_block_incl">linearize_block_incl</a> [in <a href="backend.Linearizetyping.html">backend.Linearizetyping</a>]<br/>
+<a href="lib.Coqlib.html#list_append_map">list_append_map</a> [in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="lib.Coqlib.html#list_disjoint_cons_left">list_disjoint_cons_left</a> [in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="lib.Coqlib.html#list_disjoint_cons_right">list_disjoint_cons_right</a> [in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="lib.Coqlib.html#list_disjoint_notin">list_disjoint_notin</a> [in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="lib.Coqlib.html#list_disjoint_sym">list_disjoint_sym</a> [in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="lib.Coqlib.html#list_forall2_imply">list_forall2_imply</a> [in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="lib.Coqlib.html#list_in_map_inv">list_in_map_inv</a> [in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="lib.Coqlib.html#list_length_map">list_length_map</a> [in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="lib.Coqlib.html#list_map_compose">list_map_compose</a> [in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="lib.Coqlib.html#list_map_exten">list_map_exten</a> [in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="lib.Coqlib.html#list_map_norepet">list_map_norepet</a> [in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="lib.Coqlib.html#list_map_nth">list_map_nth</a> [in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="lib.Coqlib.html#list_norepet_append">list_norepet_append</a> [in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="lib.Coqlib.html#list_norepet_append_left">list_norepet_append_left</a> [in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="lib.Coqlib.html#list_norepet_append_right">list_norepet_append_right</a> [in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="lib.Coqlib.html#list_norepet_dec">list_norepet_dec</a> [in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="backend.PPCgenproof1.html#loadimm_correct">loadimm_correct</a> [in <a href="backend.PPCgenproof1.html">backend.PPCgenproof1</a>]<br/>
+<a href="backend.PPCgenproof1.html#loadind_aux_correct">loadind_aux_correct</a> [in <a href="backend.PPCgenproof1.html">backend.PPCgenproof1</a>]<br/>
+<a href="backend.PPCgenproof1.html#loadind_correct">loadind_correct</a> [in <a href="backend.PPCgenproof1.html">backend.PPCgenproof1</a>]<br/>
+<a href="backend.Mem.html#loadv_inject">loadv_inject</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.PPCgenproof.html#loadv_8_signed_unsigned">loadv_8_signed_unsigned</a> [in <a href="backend.PPCgenproof.html">backend.PPCgenproof</a>]<br/>
+<a href="backend.Mem.html#load_agree">load_agree</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#load_alloc_other">load_alloc_other</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#load_alloc_same">load_alloc_same</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#load_contentmap_agree">load_contentmap_agree</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#load_contents_init">load_contents_init</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#load_contents_inject">load_contents_inject</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#load_extends">load_extends</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#load_free">load_free</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Cminorgenproof.html#load_freelist">load_freelist</a> [in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.Cminorgenproof.html#load_from_alloc_is_undef">load_from_alloc_is_undef</a> [in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.Mem.html#load_inject">load_inject</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#load_inv">load_inv</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#load_in_bounds">load_in_bounds</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Cminorgenproof.html#load_result_idem">load_result_idem</a> [in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.Mem.html#load_result_inject">load_result_inject</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Cminorgenproof.html#load_result_normalized">load_result_normalized</a> [in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.Machabstr2mach.html#load_result_ty">load_result_ty</a> [in <a href="backend.Machabstr2mach.html">backend.Machabstr2mach</a>]<br/>
+<a href="backend.Mem.html#load_store_contents_mismatch">load_store_contents_mismatch</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#load_store_contents_other">load_store_contents_other</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#load_store_contents_overlap">load_store_contents_overlap</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#load_store_contents_same">load_store_contents_same</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#load_store_other">load_store_other</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#load_store_same">load_store_same</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Conventions.html#locs_acceptable_disj_temporaries">locs_acceptable_disj_temporaries</a> [in <a href="backend.Conventions.html">backend.Conventions</a>]<br/>
+<a href="backend.Allocproof.html#loc_acceptable_noteq_diff">loc_acceptable_noteq_diff</a> [in <a href="backend.Allocproof.html">backend.Allocproof</a>]<br/>
+<a href="backend.Allocproof.html#loc_acceptable_notin_notin">loc_acceptable_notin_notin</a> [in <a href="backend.Allocproof.html">backend.Allocproof</a>]<br/>
+<a href="backend.Conventions.html#loc_arguments_acceptable">loc_arguments_acceptable</a> [in <a href="backend.Conventions.html">backend.Conventions</a>]<br/>
+<a href="backend.Conventions.html#loc_arguments_bounded">loc_arguments_bounded</a> [in <a href="backend.Conventions.html">backend.Conventions</a>]<br/>
+<a href="backend.Conventions.html#loc_arguments_length">loc_arguments_length</a> [in <a href="backend.Conventions.html">backend.Conventions</a>]<br/>
+<a href="backend.Conventions.html#loc_arguments_norepet">loc_arguments_norepet</a> [in <a href="backend.Conventions.html">backend.Conventions</a>]<br/>
+<a href="backend.Conventions.html#loc_arguments_not_temporaries">loc_arguments_not_temporaries</a> [in <a href="backend.Conventions.html">backend.Conventions</a>]<br/>
+<a href="backend.Conventions.html#loc_arguments_type">loc_arguments_type</a> [in <a href="backend.Conventions.html">backend.Conventions</a>]<br/>
+<a href="backend.Coloringproof.html#loc_is_acceptable_correct">loc_is_acceptable_correct</a> [in <a href="backend.Coloringproof.html">backend.Coloringproof</a>]<br/>
+<a href="backend.Conventions.html#loc_parameters_not_temporaries">loc_parameters_not_temporaries</a> [in <a href="backend.Conventions.html">backend.Conventions</a>]<br/>
+<a href="backend.Conventions.html#loc_parameters_type">loc_parameters_type</a> [in <a href="backend.Conventions.html">backend.Conventions</a>]<br/>
+<a href="backend.Conventions.html#loc_result_acceptable">loc_result_acceptable</a> [in <a href="backend.Conventions.html">backend.Conventions</a>]<br/>
+<a href="backend.Conventions.html#loc_result_type">loc_result_type</a> [in <a href="backend.Conventions.html">backend.Conventions</a>]<br/>
+<a href="backend.Mem.html#low_bound_alloc">low_bound_alloc</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#low_bound_free">low_bound_free</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#low_bound_store">low_bound_store</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.PPCgenproof1.html#low_high_s">low_high_s</a> [in <a href="backend.PPCgenproof1.html">backend.PPCgenproof1</a>]<br/>
+<a href="backend.PPCgenproof1.html#low_high_u">low_high_u</a> [in <a href="backend.PPCgenproof1.html">backend.PPCgenproof1</a>]<br/>
+<a href="backend.PPCgenproof1.html#low_high_u_xor">low_high_u_xor</a> [in <a href="backend.PPCgenproof1.html">backend.PPCgenproof1</a>]<br/>
+<a href="lib.Ordered.html#lt_not_eq">lt_not_eq</a> [in <a href="lib.Ordered.html">lib.Ordered</a>]<br/>
+<a href="lib.Ordered.html#lt_not_eq">lt_not_eq</a> [in <a href="lib.Ordered.html">lib.Ordered</a>]<br/>
+<a href="lib.Ordered.html#lt_not_eq">lt_not_eq</a> [in <a href="lib.Ordered.html">lib.Ordered</a>]<br/>
+<a href="lib.Ordered.html#lt_trans">lt_trans</a> [in <a href="lib.Ordered.html">lib.Ordered</a>]<br/>
+<a href="lib.Ordered.html#lt_trans">lt_trans</a> [in <a href="lib.Ordered.html">lib.Ordered</a>]<br/>
+<a href="lib.Ordered.html#lt_trans">lt_trans</a> [in <a href="lib.Ordered.html">lib.Ordered</a>]<br/>
+<a href="lib.Lattice.html#lub_commut">lub_commut</a> [in <a href="lib.Lattice.html">lib.Lattice</a>]<br/>
+<a href="backend.Constprop.html#lub_commut">lub_commut</a> [in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="lib.Lattice.html#lub_commut">lub_commut</a> [in <a href="lib.Lattice.html">lib.Lattice</a>]<br/>
+<a href="lib.Sets.html#lub_commut">lub_commut</a> [in <a href="lib.Sets.html">lib.Sets</a>]<br/>
+<a href="lib.Lattice.html#lub_commut">lub_commut</a> [in <a href="lib.Lattice.html">lib.Lattice</a>]<br/>
+<br/><br/><a name="lemma_M"></a><h2>M </h2>
+<a href="backend.Constpropproof.html#make_addimm_correct">make_addimm_correct</a> [in <a href="backend.Constpropproof.html">backend.Constpropproof</a>]<br/>
+<a href="backend.Constpropproof.html#make_andimm_correct">make_andimm_correct</a> [in <a href="backend.Constpropproof.html">backend.Constpropproof</a>]<br/>
+<a href="backend.Cminorgenproof.html#make_cast_correct">make_cast_correct</a> [in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.Cminorgenproof.html#make_load_correct">make_load_correct</a> [in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.Constpropproof.html#make_mulimm_correct">make_mulimm_correct</a> [in <a href="backend.Constpropproof.html">backend.Constpropproof</a>]<br/>
+<a href="backend.Cminorgenproof.html#make_op_correct">make_op_correct</a> [in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.Constpropproof.html#make_orimm_correct">make_orimm_correct</a> [in <a href="backend.Constpropproof.html">backend.Constpropproof</a>]<br/>
+<a href="backend.Kildall.html#make_predecessors_correct">make_predecessors_correct</a> [in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.Constpropproof.html#make_shlimm_correct">make_shlimm_correct</a> [in <a href="backend.Constpropproof.html">backend.Constpropproof</a>]<br/>
+<a href="backend.Constpropproof.html#make_shrimm_correct">make_shrimm_correct</a> [in <a href="backend.Constpropproof.html">backend.Constpropproof</a>]<br/>
+<a href="backend.Constpropproof.html#make_shruimm_correct">make_shruimm_correct</a> [in <a href="backend.Constpropproof.html">backend.Constpropproof</a>]<br/>
+<a href="backend.Cminorgenproof.html#make_stackaddr_correct">make_stackaddr_correct</a> [in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.Cminorgenproof.html#make_store_correct">make_store_correct</a> [in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.Constpropproof.html#make_xorimm_correct">make_xorimm_correct</a> [in <a href="backend.Constpropproof.html">backend.Constpropproof</a>]<br/>
+<a href="backend.RTLtyping.html#mapped_included_consistent">mapped_included_consistent</a> [in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.RTLtyping.html#mapped_list_included">mapped_list_included</a> [in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.Alloctyping_aux.html#map_f_getsrc_getdst">map_f_getsrc_getdst</a> [in <a href="backend.Alloctyping_aux.html">backend.Alloctyping_aux</a>]<br/>
+<a href="backend.Allocproof_aux.html#map_inv">map_inv</a> [in <a href="backend.Allocproof_aux.html">backend.Allocproof_aux</a>]<br/>
+<a href="backend.RTLgenproof1.html#map_wf_incr">map_wf_incr</a> [in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.Cminorgenproof.html#match_callstack_alloc_left">match_callstack_alloc_left</a> [in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.Cminorgenproof.html#match_callstack_alloc_other">match_callstack_alloc_other</a> [in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.Cminorgenproof.html#match_callstack_alloc_right">match_callstack_alloc_right</a> [in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.Cminorgenproof.html#match_callstack_alloc_variables">match_callstack_alloc_variables</a> [in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.Cminorgenproof.html#match_callstack_alloc_variables_rec">match_callstack_alloc_variables_rec</a> [in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.Cminorgenproof.html#match_callstack_freelist">match_callstack_freelist</a> [in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.Cminorgenproof.html#match_callstack_freelist_rec">match_callstack_freelist_rec</a> [in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.Cminorgenproof.html#match_callstack_incr_bound">match_callstack_incr_bound</a> [in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.Cminorgenproof.html#match_callstack_mapped">match_callstack_mapped</a> [in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.Cminorgenproof.html#match_callstack_match_globalenvs">match_callstack_match_globalenvs</a> [in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.Cminorgenproof.html#match_callstack_store_above">match_callstack_store_above</a> [in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.Cminorgenproof.html#match_callstack_store_local">match_callstack_store_local</a> [in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.Cminorgenproof.html#match_callstack_store_local_unchanged">match_callstack_store_local_unchanged</a> [in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.Cminorgenproof.html#match_env_alloc_other">match_env_alloc_other</a> [in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.Cminorgenproof.html#match_env_alloc_same">match_env_alloc_same</a> [in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.RTLgenproof1.html#match_env_empty">match_env_empty</a> [in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.RTLgenproof1.html#match_env_exten">match_env_exten</a> [in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.Cminorgenproof.html#match_env_extensional">match_env_extensional</a> [in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.RTLgenproof1.html#match_env_find_reg">match_env_find_reg</a> [in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.Cminorgenproof.html#match_env_freelist">match_env_freelist</a> [in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.RTLgenproof1.html#match_env_invariant">match_env_invariant</a> [in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.RTLgenproof1.html#match_env_letvar">match_env_letvar</a> [in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.Cminorgenproof.html#match_env_store_above">match_env_store_above</a> [in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.Cminorgenproof.html#match_env_store_local">match_env_store_local</a> [in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.Cminorgenproof.html#match_env_store_mapped">match_env_store_mapped</a> [in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.RTLgenproof1.html#match_env_update_temp">match_env_update_temp</a> [in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.RTLgenproof1.html#match_env_update_var">match_env_update_var</a> [in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.Cminorgenproof.html#match_globalenvs_init">match_globalenvs_init</a> [in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.RTLgenproof1.html#match_init_env_init_reg">match_init_env_init_reg</a> [in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.RTLgenproof1.html#match_set_locals">match_set_locals</a> [in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.RTLgenproof1.html#match_set_params_init_regs">match_set_params_init_regs</a> [in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.Linearizetyping.html#max_over_instrs_bound">max_over_instrs_bound</a> [in <a href="backend.Linearizetyping.html">backend.Linearizetyping</a>]<br/>
+<a href="backend.Linearizetyping.html#max_over_list_bound">max_over_list_bound</a> [in <a href="backend.Linearizetyping.html">backend.Linearizetyping</a>]<br/>
+<a href="backend.Lineartyping.html#max_over_list_pos">max_over_list_pos</a> [in <a href="backend.Lineartyping.html">backend.Lineartyping</a>]<br/>
+<a href="backend.Linearizetyping.html#max_over_regs_of_funct_bound">max_over_regs_of_funct_bound</a> [in <a href="backend.Linearizetyping.html">backend.Linearizetyping</a>]<br/>
+<a href="backend.Lineartyping.html#max_over_regs_of_funct_pos">max_over_regs_of_funct_pos</a> [in <a href="backend.Lineartyping.html">backend.Lineartyping</a>]<br/>
+<a href="backend.Linearizetyping.html#max_over_slots_of_funct_bound">max_over_slots_of_funct_bound</a> [in <a href="backend.Linearizetyping.html">backend.Linearizetyping</a>]<br/>
+<a href="backend.Lineartyping.html#max_over_slots_of_funct_pos">max_over_slots_of_funct_pos</a> [in <a href="backend.Lineartyping.html">backend.Lineartyping</a>]<br/>
+<a href="backend.RTLtyping.html#member_correct">member_correct</a> [in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.Globalenvs.html#mem_add_globals_transf">mem_add_globals_transf</a> [in <a href="backend.Globalenvs.html">backend.Globalenvs</a>]<br/>
+<a href="lib.Sets.html#mem_add_other">mem_add_other</a> [in <a href="lib.Sets.html">lib.Sets</a>]<br/>
+<a href="lib.Sets.html#mem_add_same">mem_add_same</a> [in <a href="lib.Sets.html">lib.Sets</a>]<br/>
+<a href="backend.InterfGraph.html#mem_add_tail">mem_add_tail</a> [in <a href="backend.InterfGraph.html">backend.InterfGraph</a>]<br/>
+<a href="lib.Sets.html#mem_empty">mem_empty</a> [in <a href="lib.Sets.html">lib.Sets</a>]<br/>
+<a href="backend.Mem.html#mem_exten">mem_exten</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="lib.Sets.html#mem_remove_other">mem_remove_other</a> [in <a href="lib.Sets.html">lib.Sets</a>]<br/>
+<a href="lib.Sets.html#mem_remove_same">mem_remove_same</a> [in <a href="lib.Sets.html">lib.Sets</a>]<br/>
+<a href="lib.Sets.html#mem_union">mem_union</a> [in <a href="lib.Sets.html">lib.Sets</a>]<br/>
+<a href="lib.Integers.html#mkint_eq">mkint_eq</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#mods_divs">mods_divs</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Values.html#mods_divs">mods_divs</a> [in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="lib.Integers.html#modulus_pos">modulus_pos</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#modu_and">modu_and</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#modu_divu">modu_divu</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Values.html#modu_divu">modu_divu</a> [in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="lib.Integers.html#modu_divu_Euclid">modu_divu_Euclid</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Values.html#modu_pow2">modu_pow2</a> [in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="lib.Integers.html#mod_in_range">mod_in_range</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#mone_max_unsigned">mone_max_unsigned</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Alloctyping_aux.html#move_types_res">move_types_res</a> [in <a href="backend.Alloctyping_aux.html">backend.Alloctyping_aux</a>]<br/>
+<a href="backend.Alloctyping_aux.html#move_types_stepf">move_types_stepf</a> [in <a href="backend.Alloctyping_aux.html">backend.Alloctyping_aux</a>]<br/>
+<a href="backend.Locations.html#mreg_eq">mreg_eq</a> [in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Linearizetyping.html#mreg_is_bounded">mreg_is_bounded</a> [in <a href="backend.Linearizetyping.html">backend.Linearizetyping</a>]<br/>
+<a href="backend.Kildall.html#multiple_predecessors">multiple_predecessors</a> [in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="lib.Integers.html#mul_add_distr_l">mul_add_distr_l</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Values.html#mul_add_distr_l">mul_add_distr_l</a> [in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="lib.Integers.html#mul_add_distr_r">mul_add_distr_r</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Values.html#mul_add_distr_r">mul_add_distr_r</a> [in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="lib.Integers.html#mul_assoc">mul_assoc</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Values.html#mul_assoc">mul_assoc</a> [in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.Values.html#mul_commut">mul_commut</a> [in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="lib.Integers.html#mul_commut">mul_commut</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#mul_one">mul_one</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#mul_pow2">mul_pow2</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Values.html#mul_pow2">mul_pow2</a> [in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="lib.Integers.html#mul_zero">mul_zero</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.RTLgenproof1.html#mutated_reg_in_map">mutated_reg_in_map</a> [in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<br/><br/><a name="lemma_N"></a><h2>N </h2>
+<a href="backend.Values.html#negate_cmp">negate_cmp</a> [in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="lib.Integers.html#negate_cmp">negate_cmp</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Values.html#negate_cmpf_eq">negate_cmpf_eq</a> [in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="lib.Integers.html#negate_cmpu">negate_cmpu</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Values.html#negate_cmpu">negate_cmpu</a> [in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.Values.html#negate_cmp_mismatch">negate_cmp_mismatch</a> [in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.Values.html#neg_add_distr">neg_add_distr</a> [in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="lib.Integers.html#neg_add_distr">neg_add_distr</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#neg_repr">neg_repr</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#neg_zero">neg_zero</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Values.html#neg_zero">neg_zero</a> [in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.Parallelmove.html#neq_is_neq">neq_is_neq</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.RTLgenproof1.html#new_reg_fresh">new_reg_fresh</a> [in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.RTLgenproof1.html#new_reg_incr">new_reg_incr</a> [in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.RTLgenproof1.html#new_reg_not_in_map">new_reg_not_in_map</a> [in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.RTLgenproof1.html#new_reg_not_mutated">new_reg_not_mutated</a> [in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.RTLgenproof1.html#new_reg_return_ok">new_reg_return_ok</a> [in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.RTLgenproof1.html#new_reg_valid">new_reg_valid</a> [in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.PPCgenproof1.html#nextinstr_inv">nextinstr_inv</a> [in <a href="backend.PPCgenproof1.html">backend.PPCgenproof1</a>]<br/>
+<a href="backend.PPCgenproof1.html#nextinstr_set_preg">nextinstr_set_preg</a> [in <a href="backend.PPCgenproof1.html">backend.PPCgenproof1</a>]<br/>
+<a href="backend.Locations.html#non_overlap_diff">non_overlap_diff</a> [in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Parallelmove.html#noOverlapaux_insert">noOverlapaux_insert</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#noOverlapaux_swap2">noOverlapaux_swap2</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#noOverlap_auxpop">noOverlap_auxpop</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#noOverlap_auxPop">noOverlap_auxPop</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#noOverlap_aux_app">noOverlap_aux_app</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#noOverlap_Front0">noOverlap_Front0</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#noOverlap_head">noOverlap_head</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#noOverlap_insert">noOverlap_insert</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#noOverlap_movBack">noOverlap_movBack</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#noOverlap_movBack0">noOverlap_movBack0</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#noOverlap_movFront">noOverlap_movFront</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#noOverlap_nil">noOverlap_nil</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#noOverlap_Pop">noOverlap_Pop</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#noOverlap_pop">noOverlap_pop</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#noOverlap_right">noOverlap_right</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#noOverlap_swap">noOverlap_swap</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#noO_diff">noO_diff</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Allocproof_aux.html#noO_list_pnilnil">noO_list_pnilnil</a> [in <a href="backend.Allocproof_aux.html">backend.Allocproof_aux</a>]<br/>
+<a href="backend.Parallelmove.html#noRead_app">noRead_app</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#noRead_by_path">noRead_by_path</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Allocproof_aux.html#norepet_SD">norepet_SD</a> [in <a href="backend.Allocproof_aux.html">backend.Allocproof_aux</a>]<br/>
+<a href="backend.Values.html#notbool_idem2">notbool_idem2</a> [in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.Values.html#notbool_idem3">notbool_idem3</a> [in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="lib.Integers.html#notbool_isfalse_istrue">notbool_isfalse_istrue</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#notbool_istrue_isfalse">notbool_istrue_isfalse</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Values.html#notbool_is_bool">notbool_is_bool</a> [in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.Values.html#notbool_negb_1">notbool_negb_1</a> [in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.Values.html#notbool_negb_2">notbool_negb_2</a> [in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.Values.html#notbool_xor">notbool_xor</a> [in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.Parallelmove.html#notindst_nW">notindst_nW</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Locations.html#notin_disjoint">notin_disjoint</a> [in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Locations.html#notin_not_in">notin_not_in</a> [in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Parallelmove.html#noTmpLast_lastnoTmp">noTmpLast_lastnoTmp</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#noTmpLast_Pop">noTmpLast_Pop</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#noTmpLast_pop">noTmpLast_pop</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#noTmpLast_popBack">noTmpLast_popBack</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#noTmpLast_push">noTmpLast_push</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#noTmpLast_tmpLast">noTmpLast_tmpLast</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#noTmpL_diff">noTmpL_diff</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#noTmp_app">noTmp_app</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#noTmp_append">noTmp_append</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#noTmP_noOverlap_aux">noTmP_noOverlap_aux</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#noTmp_noReadTmp">noTmp_noReadTmp</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#noTmp_noTmpLast">noTmp_noTmpLast</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#noTmp_pop">noTmp_pop</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#noWrite_in">noWrite_in</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#noWrite_insert">noWrite_insert</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#noWrite_movFront">noWrite_movFront</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#noWrite_pop">noWrite_pop</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#noWrite_swap">noWrite_swap</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#noWrite_tmpLast">noWrite_tmpLast</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Allocproof_aux.html#no_overlapD_inv">no_overlapD_inv</a> [in <a href="backend.Allocproof_aux.html">backend.Allocproof_aux</a>]<br/>
+<a href="backend.Allocproof_aux.html#no_overlapD_invf">no_overlapD_invf</a> [in <a href="backend.Allocproof_aux.html">backend.Allocproof_aux</a>]<br/>
+<a href="backend.Allocproof_aux.html#no_overlapD_invpp">no_overlapD_invpp</a> [in <a href="backend.Allocproof_aux.html">backend.Allocproof_aux</a>]<br/>
+<a href="backend.Allocproof_aux.html#no_overlapD_res">no_overlapD_res</a> [in <a href="backend.Allocproof_aux.html">backend.Allocproof_aux</a>]<br/>
+<a href="backend.Conventions.html#no_overlap_arguments">no_overlap_arguments</a> [in <a href="backend.Conventions.html">backend.Conventions</a>]<br/>
+<a href="backend.Allocproof_aux.html#no_overlap_list_pop">no_overlap_list_pop</a> [in <a href="backend.Allocproof_aux.html">backend.Allocproof_aux</a>]<br/>
+<a href="backend.Parallelmove.html#no_overlap_noOverlap">no_overlap_noOverlap</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Conventions.html#no_overlap_parameters">no_overlap_parameters</a> [in <a href="backend.Conventions.html">backend.Conventions</a>]<br/>
+<a href="backend.Allocproof_aux.html#no_overlap_temp">no_overlap_temp</a> [in <a href="backend.Allocproof_aux.html">backend.Allocproof_aux</a>]<br/>
+<a href="backend.Kildall.html#no_self_loop">no_self_loop</a> [in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="lib.Coqlib.html#nth_error_in">nth_error_in</a> [in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="lib.Coqlib.html#nth_error_nil">nth_error_nil</a> [in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="backend.CSEproof.html#numbering_holds_exten">numbering_holds_exten</a> [in <a href="backend.CSEproof.html">backend.CSEproof</a>]<br/>
+<br/><br/><a name="lemma_O"></a><h2>O </h2>
+<a href="backend.Stackingproof.html#offset_of_index_disj">offset_of_index_disj</a> [in <a href="backend.Stackingproof.html">backend.Stackingproof</a>]<br/>
+<a href="backend.Stackingproof.html#offset_of_index_no_overflow">offset_of_index_no_overflow</a> [in <a href="backend.Stackingproof.html">backend.Stackingproof</a>]<br/>
+<a href="backend.Stackingproof.html#offset_of_index_valid">offset_of_index_valid</a> [in <a href="backend.Stackingproof.html">backend.Stackingproof</a>]<br/>
+<a href="backend.Values.html#of_bool_is_bool">of_bool_is_bool</a> [in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="lib.Integers.html#one_bits_decomp">one_bits_decomp</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#one_bits_range">one_bits_range</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#one_not_zero">one_not_zero</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.union_find.html#option_sum">option_sum</a> [in <a href="lib.union_find.html">lib.union_find</a>]<br/>
+<a href="backend.Constpropproof.html#op_strength_reduction_correct">op_strength_reduction_correct</a> [in <a href="backend.Constpropproof.html">backend.Constpropproof</a>]<br/>
+<a href="backend.InterfGraph.html#ordered_pair_charact">ordered_pair_charact</a> [in <a href="backend.InterfGraph.html">backend.InterfGraph</a>]<br/>
+<a href="backend.InterfGraph.html#ordered_pair_sym">ordered_pair_sym</a> [in <a href="backend.InterfGraph.html">backend.InterfGraph</a>]<br/>
+<a href="backend.PPCgenproof1.html#orimm_correct">orimm_correct</a> [in <a href="backend.PPCgenproof1.html">backend.PPCgenproof1</a>]<br/>
+<a href="lib.Integers.html#or_assoc">or_assoc</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Values.html#or_assoc">or_assoc</a> [in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="lib.Integers.html#or_commut">or_commut</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Values.html#or_commut">or_commut</a> [in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="lib.Integers.html#or_idem">or_idem</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#or_mone">or_mone</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Values.html#or_of_bool">or_of_bool</a> [in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="lib.Integers.html#or_rolm">or_rolm</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Values.html#or_rolm">or_rolm</a> [in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="lib.Integers.html#or_zero">or_zero</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Linearizetyping.html#outgoing_slot_bound">outgoing_slot_bound</a> [in <a href="backend.Linearizetyping.html">backend.Linearizetyping</a>]<br/>
+<a href="backend.Locations.html#overlap_aux_false_1">overlap_aux_false_1</a> [in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Locations.html#overlap_aux_true_1">overlap_aux_true_1</a> [in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Locations.html#overlap_aux_true_2">overlap_aux_true_2</a> [in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Locations.html#overlap_not_diff">overlap_not_diff</a> [in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<br/><br/><a name="lemma_P"></a><h2>P </h2>
+<a href="backend.Allocproof.html#parallel_move_correct">parallel_move_correct</a> [in <a href="backend.Allocproof.html">backend.Allocproof</a>]<br/>
+<a href="backend.Allocproof_aux.html#parallel_move_correctX">parallel_move_correctX</a> [in <a href="backend.Allocproof_aux.html">backend.Allocproof_aux</a>]<br/>
+<a href="backend.Allocproof_aux.html#parallel_move_correct'">parallel_move_correct'</a> [in <a href="backend.Allocproof_aux.html">backend.Allocproof_aux</a>]<br/>
+<a href="backend.Parallelmove.html#path_pop">path_pop</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#path_tmpLast">path_tmpLast</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="lib.Coqlib.html#peq_false">peq_false</a> [in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="lib.Coqlib.html#peq_true">peq_true</a> [in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="backend.Parallelmove.html#pexec_add">pexec_add</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#pexec_correct">pexec_correct</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#pexec_mov">pexec_mov</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#pexec_movBack">pexec_movBack</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#pexec_movFront">pexec_movFront</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#pexec_nop">pexec_nop</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#pexec_push">pexec_push</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#pexec_swap">pexec_swap</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#pexec_update">pexec_update</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="lib.Coqlib.html#Ple_refl">Ple_refl</a> [in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="lib.Coqlib.html#Ple_succ">Ple_succ</a> [in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="lib.Coqlib.html#Ple_trans">Ple_trans</a> [in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="lib.Coqlib.html#Plt_ne">Plt_ne</a> [in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="lib.Coqlib.html#Plt_Ple">Plt_Ple</a> [in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="lib.Coqlib.html#Plt_Ple_trans">Plt_Ple_trans</a> [in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="lib.Coqlib.html#Plt_strict">Plt_strict</a> [in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="lib.Coqlib.html#Plt_succ">Plt_succ</a> [in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="lib.Coqlib.html#Plt_succ_inv">Plt_succ_inv</a> [in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="lib.Coqlib.html#Plt_trans">Plt_trans</a> [in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="lib.Coqlib.html#Plt_trans_succ">Plt_trans_succ</a> [in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="lib.Coqlib.html#Plt_wf">Plt_wf</a> [in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="backend.Parallelmove.html#Pmov_equation">Pmov_equation</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="lib.Coqlib.html#positive_Peano_ind">positive_Peano_ind</a> [in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="lib.Coqlib.html#positive_rec_base">positive_rec_base</a> [in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="lib.Coqlib.html#positive_rec_succ">positive_rec_succ</a> [in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="lib.Coqlib.html#Ppred_Plt">Ppred_Plt</a> [in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="backend.Kildall.html#predecessors_correct">predecessors_correct</a> [in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.PPC.html#preg_eq">preg_eq</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPCgenproof1.html#preg_of_injective">preg_of_injective</a> [in <a href="backend.PPCgenproof1.html">backend.PPCgenproof1</a>]<br/>
+<a href="backend.PPCgenproof1.html#preg_of_is_data_reg">preg_of_is_data_reg</a> [in <a href="backend.PPCgenproof1.html">backend.PPCgenproof1</a>]<br/>
+<a href="backend.PPCgenproof1.html#preg_of_not">preg_of_not</a> [in <a href="backend.PPCgenproof1.html">backend.PPCgenproof1</a>]<br/>
+<a href="backend.PPCgenproof1.html#preg_of_not_GPR1">preg_of_not_GPR1</a> [in <a href="backend.PPCgenproof1.html">backend.PPCgenproof1</a>]<br/>
+<a href="backend.PPCgenproof1.html#preg_val">preg_val</a> [in <a href="backend.PPCgenproof1.html">backend.PPCgenproof1</a>]<br/>
+<a href="backend.Tunnelingtyping.html#program_typing_preserved">program_typing_preserved</a> [in <a href="backend.Tunnelingtyping.html">backend.Tunnelingtyping</a>]<br/>
+<a href="backend.Linearizetyping.html#program_typing_preserved">program_typing_preserved</a> [in <a href="backend.Linearizetyping.html">backend.Linearizetyping</a>]<br/>
+<a href="backend.Alloctyping.html#program_typing_preserved">program_typing_preserved</a> [in <a href="backend.Alloctyping.html">backend.Alloctyping</a>]<br/>
+<a href="backend.Stackingtyping.html#program_typing_preserved">program_typing_preserved</a> [in <a href="backend.Stackingtyping.html">backend.Stackingtyping</a>]<br/>
+<a href="backend.Globalenvs.html#prog_funct_transf_OK">prog_funct_transf_OK</a> [in <a href="backend.Globalenvs.html">backend.Globalenvs</a>]<br/>
+<a href="backend.Kildall.html#propagate_successors_charact1">propagate_successors_charact1</a> [in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.Kildall.html#propagate_successors_charact2">propagate_successors_charact2</a> [in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.Kildall.html#propagate_successors_invariant">propagate_successors_invariant</a> [in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.Kildall.html#propagate_successors_P">propagate_successors_P</a> [in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.Kildall.html#propagate_succ_charact">propagate_succ_charact</a> [in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.Kildall.html#propagate_succ_incr">propagate_succ_incr</a> [in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.Kildall.html#propagate_succ_incr_worklist">propagate_succ_incr_worklist</a> [in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.Kildall.html#propagate_succ_list_charact">propagate_succ_list_charact</a> [in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.Kildall.html#propagate_succ_list_incr">propagate_succ_list_incr</a> [in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.Kildall.html#propagate_succ_list_incr_worklist">propagate_succ_list_incr_worklist</a> [in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.Kildall.html#propagate_succ_list_records_changes">propagate_succ_list_records_changes</a> [in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.Kildall.html#propagate_succ_records_changes">propagate_succ_records_changes</a> [in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<br/><br/><a name="lemma_R"></a><h2>R </h2>
+<a href="backend.Linearizeproof.html#reachable_correct_1">reachable_correct_1</a> [in <a href="backend.Linearizeproof.html">backend.Linearizeproof</a>]<br/>
+<a href="backend.Linearizeproof.html#reachable_correct_2">reachable_correct_2</a> [in <a href="backend.Linearizeproof.html">backend.Linearizeproof</a>]<br/>
+<a href="backend.Linearizeproof.html#reachable_entrypoint">reachable_entrypoint</a> [in <a href="backend.Linearizeproof.html">backend.Linearizeproof</a>]<br/>
+<a href="backend.Linearizeproof.html#reachable_successors">reachable_successors</a> [in <a href="backend.Linearizeproof.html">backend.Linearizeproof</a>]<br/>
+<a href="backend.Parallelmove.html#rebuild_l">rebuild_l</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.CSE.html#refl_ge">refl_ge</a> [in <a href="backend.CSE.html">backend.CSE</a>]<br/>
+<a href="backend.Coloringproof.html#regalloc_acceptable">regalloc_acceptable</a> [in <a href="backend.Coloringproof.html">backend.Coloringproof</a>]<br/>
+<a href="backend.Coloringproof.html#regalloc_correct_1">regalloc_correct_1</a> [in <a href="backend.Coloringproof.html">backend.Coloringproof</a>]<br/>
+<a href="backend.Coloringproof.html#regalloc_correct_2">regalloc_correct_2</a> [in <a href="backend.Coloringproof.html">backend.Coloringproof</a>]<br/>
+<a href="backend.Coloringproof.html#regalloc_correct_3">regalloc_correct_3</a> [in <a href="backend.Coloringproof.html">backend.Coloringproof</a>]<br/>
+<a href="backend.Allocproof.html#regalloc_disj_temporaries">regalloc_disj_temporaries</a> [in <a href="backend.Allocproof.html">backend.Allocproof</a>]<br/>
+<a href="backend.Allocproof.html#regalloc_norepet_norepet">regalloc_norepet_norepet</a> [in <a href="backend.Allocproof.html">backend.Allocproof</a>]<br/>
+<a href="backend.Allocproof.html#regalloc_noteq_diff">regalloc_noteq_diff</a> [in <a href="backend.Allocproof.html">backend.Allocproof</a>]<br/>
+<a href="backend.Allocproof.html#regalloc_notin_notin">regalloc_notin_notin</a> [in <a href="backend.Allocproof.html">backend.Allocproof</a>]<br/>
+<a href="backend.Allocproof.html#regalloc_not_temporary">regalloc_not_temporary</a> [in <a href="backend.Allocproof.html">backend.Allocproof</a>]<br/>
+<a href="backend.Coloringproof.html#regalloc_ok">regalloc_ok</a> [in <a href="backend.Coloringproof.html">backend.Coloringproof</a>]<br/>
+<a href="backend.Coloringproof.html#regalloc_preserves_types">regalloc_preserves_types</a> [in <a href="backend.Coloringproof.html">backend.Coloringproof</a>]<br/>
+<a href="backend.Conventions.html#register_classification">register_classification</a> [in <a href="backend.Conventions.html">backend.Conventions</a>]<br/>
+<a href="backend.Coloringproof.html#regsalloc_acceptable">regsalloc_acceptable</a> [in <a href="backend.Coloringproof.html">backend.Coloringproof</a>]<br/>
+<a href="backend.Constpropproof.html#regs_match_approx_increasing">regs_match_approx_increasing</a> [in <a href="backend.Constpropproof.html">backend.Constpropproof</a>]<br/>
+<a href="backend.Constpropproof.html#regs_match_approx_update">regs_match_approx_update</a> [in <a href="backend.Constpropproof.html">backend.Constpropproof</a>]<br/>
+<a href="backend.Allocproof.html#reg_for_spec">reg_for_spec</a> [in <a href="backend.Allocproof.html">backend.Allocproof</a>]<br/>
+<a href="backend.RTLgenproof1.html#reg_fresh_decr">reg_fresh_decr</a> [in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.RTLgenproof1.html#reg_in_map_valid">reg_in_map_valid</a> [in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.RTLgenproof1.html#reg_valid_incr">reg_valid_incr</a> [in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.CSEproof.html#reg_valnum_correct">reg_valnum_correct</a> [in <a href="backend.CSEproof.html">backend.CSEproof</a>]<br/>
+<a href="lib.Inclusion.html#remove_all_leaves_sound">remove_all_leaves_sound</a> [in <a href="lib.Inclusion.html">lib.Inclusion</a>]<br/>
+<a href="backend.RTLtyping.html#repet_correct">repet_correct</a> [in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.Parallelmove.html#replace_last_id">replace_last_id</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="lib.union_find.html#repr_aux_canon">repr_aux_canon</a> [in <a href="lib.union_find.html">lib.union_find</a>]<br/>
+<a href="lib.union_find.html#repr_aux_none">repr_aux_none</a> [in <a href="lib.union_find.html">lib.union_find</a>]<br/>
+<a href="lib.union_find.html#repr_aux_some">repr_aux_some</a> [in <a href="lib.union_find.html">lib.union_find</a>]<br/>
+<a href="lib.union_find.html#repr_empty">repr_empty</a> [in <a href="lib.union_find.html">lib.union_find</a>]<br/>
+<a href="lib.union_find.html#repr_rec_ext">repr_rec_ext</a> [in <a href="lib.union_find.html">lib.union_find</a>]<br/>
+<a href="lib.union_find.html#repr_repr">repr_repr</a> [in <a href="lib.union_find.html">lib.union_find</a>]<br/>
+<a href="lib.Integers.html#repr_signed">repr_signed</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#repr_unsigned">repr_unsigned</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.RTLgenproof1.html#reserve_instr_incr">reserve_instr_incr</a> [in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.RTLgen.html#reserve_instr_wf">reserve_instr_wf</a> [in <a href="backend.RTLgen.html">backend.RTLgen</a>]<br/>
+<a href="backend.Stackingproof.html#restore_callee_save_correct">restore_callee_save_correct</a> [in <a href="backend.Stackingproof.html">backend.Stackingproof</a>]<br/>
+<a href="backend.Stackingproof.html#restore_float_callee_save_correct">restore_float_callee_save_correct</a> [in <a href="backend.Stackingproof.html">backend.Stackingproof</a>]<br/>
+<a href="backend.Stackingproof.html#restore_float_callee_save_correct_rec">restore_float_callee_save_correct_rec</a> [in <a href="backend.Stackingproof.html">backend.Stackingproof</a>]<br/>
+<a href="backend.Stackingproof.html#restore_int_callee_save_correct">restore_int_callee_save_correct</a> [in <a href="backend.Stackingproof.html">backend.Stackingproof</a>]<br/>
+<a href="backend.Stackingproof.html#restore_int_callee_save_correct_rec">restore_int_callee_save_correct_rec</a> [in <a href="backend.Stackingproof.html">backend.Stackingproof</a>]<br/>
+<a href="backend.Allocproof.html#return_regs_not_destroyed">return_regs_not_destroyed</a> [in <a href="backend.Allocproof.html">backend.Allocproof</a>]<br/>
+<a href="backend.Allocproof.html#return_regs_result">return_regs_result</a> [in <a href="backend.Allocproof.html">backend.Allocproof</a>]<br/>
+<a href="backend.RTLgenproof1.html#return_reg_ok_incr">return_reg_ok_incr</a> [in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="lib.Maps.html#rleaf">rleaf</a> [in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Integers.html#rolm_rolm">rolm_rolm</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Values.html#rolm_rolm">rolm_rolm</a> [in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="lib.Integers.html#rolm_zero">rolm_zero</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Values.html#rolm_zero">rolm_zero</a> [in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="lib.Integers.html#rol_and">rol_and</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#rol_or">rol_or</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#rol_rol">rol_rol</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#rol_zero">rol_zero</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<br/><br/><a name="lemma_S"></a><h2>S </h2>
+<a href="lib.union_find.html#sameclass_empty">sameclass_empty</a> [in <a href="lib.union_find.html">lib.union_find</a>]<br/>
+<a href="lib.union_find.html#sameclass_identify_1">sameclass_identify_1</a> [in <a href="lib.union_find.html">lib.union_find</a>]<br/>
+<a href="lib.union_find.html#sameclass_identify_2">sameclass_identify_2</a> [in <a href="lib.union_find.html">lib.union_find</a>]<br/>
+<a href="lib.union_find.html#sameclass_refl">sameclass_refl</a> [in <a href="lib.union_find.html">lib.union_find</a>]<br/>
+<a href="lib.union_find.html#sameclass_repr">sameclass_repr</a> [in <a href="lib.union_find.html">lib.union_find</a>]<br/>
+<a href="lib.union_find.html#sameclass_sym">sameclass_sym</a> [in <a href="lib.union_find.html">lib.union_find</a>]<br/>
+<a href="lib.union_find.html#sameclass_trans">sameclass_trans</a> [in <a href="lib.union_find.html">lib.union_find</a>]<br/>
+<a href="backend.Parallelmove.html#sameExec_reflexive">sameExec_reflexive</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#sameExec_transitive">sameExec_transitive</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Locations.html#same_not_diff">same_not_diff</a> [in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Coloringproof.html#same_typ_correct">same_typ_correct</a> [in <a href="backend.Coloringproof.html">backend.Coloringproof</a>]<br/>
+<a href="backend.Stackingproof.html#save_callee_save_correct">save_callee_save_correct</a> [in <a href="backend.Stackingproof.html">backend.Stackingproof</a>]<br/>
+<a href="backend.Stackingproof.html#save_float_callee_save_correct">save_float_callee_save_correct</a> [in <a href="backend.Stackingproof.html">backend.Stackingproof</a>]<br/>
+<a href="backend.Stackingproof.html#save_float_callee_save_correct_rec">save_float_callee_save_correct_rec</a> [in <a href="backend.Stackingproof.html">backend.Stackingproof</a>]<br/>
+<a href="backend.Stackingproof.html#save_int_callee_save_correct">save_int_callee_save_correct</a> [in <a href="backend.Stackingproof.html">backend.Stackingproof</a>]<br/>
+<a href="backend.Stackingproof.html#save_int_callee_save_correct_rec">save_int_callee_save_correct_rec</a> [in <a href="backend.Stackingproof.html">backend.Stackingproof</a>]<br/>
+<a href="backend.Parallelmove.html#SB_Pmov">SB_Pmov</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Allocproof_aux.html#SDone_Pmov">SDone_Pmov</a> [in <a href="backend.Allocproof_aux.html">backend.Allocproof_aux</a>]<br/>
+<a href="backend.Allocproof_aux.html#SDone_stepf">SDone_stepf</a> [in <a href="backend.Allocproof_aux.html">backend.Allocproof_aux</a>]<br/>
+<a href="backend.Parallelmove.html#sD_nW">sD_nW</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#sD_pexec">sD_pexec</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Mem.html#setN_agree">setN_agree</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#setN_inject">setN_inject</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#setN_outside_agree">setN_outside_agree</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#setN_outside_inject">setN_outside_inject</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#set_cont_agree">set_cont_agree</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#set_cont_inject">set_cont_inject</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#set_cont_inside">set_cont_inside</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#set_cont_outside">set_cont_outside</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#set_cont_outside1">set_cont_outside1</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#set_cont_outside_agree">set_cont_outside_agree</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#set_cont_outside_inject">set_cont_outside_inject</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Cminorgenproof.html#set_locals_defined">set_locals_defined</a> [in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.Cminorgenproof.html#set_locals_params_defined">set_locals_params_defined</a> [in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.Cminorgenproof.html#set_params_defined">set_params_defined</a> [in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.Stackingproof.html#set_slot_index">set_slot_index</a> [in <a href="backend.Stackingproof.html">backend.Stackingproof</a>]<br/>
+<a href="backend.Machtyping.html#set_slot_link_invariant">set_slot_link_invariant</a> [in <a href="backend.Machtyping.html">backend.Machtyping</a>]<br/>
+<a href="backend.Stackingproof.html#set_slot_ok">set_slot_ok</a> [in <a href="backend.Stackingproof.html">backend.Stackingproof</a>]<br/>
+<a href="backend.Stackingproof.html#shift_eval_addressing">shift_eval_addressing</a> [in <a href="backend.Stackingproof.html">backend.Stackingproof</a>]<br/>
+<a href="backend.Stackingproof.html#shift_eval_operation">shift_eval_operation</a> [in <a href="backend.Stackingproof.html">backend.Stackingproof</a>]<br/>
+<a href="backend.Values.html#shl_mul">shl_mul</a> [in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="lib.Integers.html#shl_mul">shl_mul</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#shl_mul_two_p">shl_mul_two_p</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#shl_rolm">shl_rolm</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Values.html#shl_rolm">shl_rolm</a> [in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="lib.Integers.html#shl_zero">shl_zero</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#shru_div_two_p">shru_div_two_p</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Values.html#shru_rolm">shru_rolm</a> [in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="lib.Integers.html#shru_rolm">shru_rolm</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#shru_zero">shru_zero</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Values.html#shrx_carry">shrx_carry</a> [in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="lib.Integers.html#shrx_carry">shrx_carry</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#shr_zero">shr_zero</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#signed_range">signed_range</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#signed_repr">signed_repr</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Allocproof.html#sig_function_translated">sig_function_translated</a> [in <a href="backend.Allocproof.html">backend.Allocproof</a>]<br/>
+<a href="backend.Cminorgenproof.html#sig_transl_function">sig_transl_function</a> [in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.Parallelmove.html#simpleDest_insert">simpleDest_insert</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#simpleDest_movBack">simpleDest_movBack</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#simpleDest_movFront">simpleDest_movFront</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#simpleDest_Pop">simpleDest_Pop</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#simpleDest_pop">simpleDest_pop</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#simpleDest_pop2">simpleDest_pop2</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#simpleDest_right">simpleDest_right</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#simpleDest_swap">simpleDest_swap</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#simpleDest_swap_app">simpleDest_swap_app</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#simpleDest_tmpLast">simpleDest_tmpLast</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Linearizetyping.html#size_arguments_bound">size_arguments_bound</a> [in <a href="backend.Linearizetyping.html">backend.Linearizetyping</a>]<br/>
+<a href="backend.Mem.html#size_chunk_pos">size_chunk_pos</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#size_mem_pos">size_mem_pos</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Stackingproof.html#size_no_overflow">size_no_overflow</a> [in <a href="backend.Stackingproof.html">backend.Stackingproof</a>]<br/>
+<a href="backend.Stackingproof.html#size_pos">size_pos</a> [in <a href="backend.Stackingproof.html">backend.Stackingproof</a>]<br/>
+<a href="backend.Locations.html#slot_eq">slot_eq</a> [in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Stackingproof.html#slot_gi">slot_gi</a> [in <a href="backend.Stackingproof.html">backend.Stackingproof</a>]<br/>
+<a href="backend.Stackingproof.html#slot_gso">slot_gso</a> [in <a href="backend.Stackingproof.html">backend.Stackingproof</a>]<br/>
+<a href="backend.Stackingproof.html#slot_gss">slot_gss</a> [in <a href="backend.Stackingproof.html">backend.Stackingproof</a>]<br/>
+<a href="backend.Stackingproof.html#slot_iso">slot_iso</a> [in <a href="backend.Stackingproof.html">backend.Stackingproof</a>]<br/>
+<a href="backend.Stackingproof.html#slot_iss">slot_iss</a> [in <a href="backend.Stackingproof.html">backend.Stackingproof</a>]<br/>
+<a href="backend.Linearizetyping.html#slot_is_bounded">slot_is_bounded</a> [in <a href="backend.Linearizetyping.html">backend.Linearizetyping</a>]<br/>
+<a href="lib.Inclusion.html#sort_included">sort_included</a> [in <a href="lib.Inclusion.html">lib.Inclusion</a>]<br/>
+<a href="lib.Inclusion.html#sort_included2">sort_included2</a> [in <a href="lib.Inclusion.html">lib.Inclusion</a>]<br/>
+<a href="backend.Parallelmove.html#splitNone">splitNone</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#splitSome">splitSome</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#split_length">split_length</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Alloctyping_aux.html#split_move_incl">split_move_incl</a> [in <a href="backend.Alloctyping_aux.html">backend.Alloctyping_aux</a>]<br/>
+<a href="backend.PPCgenproof1.html#sp_val">sp_val</a> [in <a href="backend.PPCgenproof1.html">backend.PPCgenproof1</a>]<br/>
+<a href="backend.Alloctyping_aux.html#srcdst_tmp2_stepf">srcdst_tmp2_stepf</a> [in <a href="backend.Alloctyping_aux.html">backend.Alloctyping_aux</a>]<br/>
+<a href="backend.Alloctyping_aux.html#src_tmp2_res">src_tmp2_res</a> [in <a href="backend.Alloctyping_aux.html">backend.Alloctyping_aux</a>]<br/>
+<a href="backend.Linearizeproof.html#starts_with_correct">starts_with_correct</a> [in <a href="backend.Linearizeproof.html">backend.Linearizeproof</a>]<br/>
+<a href="backend.Kildall.html#start_state_good">start_state_good</a> [in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.Kildall.html#start_state_in_entry">start_state_in_entry</a> [in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.RTLgenproof1.html#state_incr_extends">state_incr_extends</a> [in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.RTLgenproof1.html#state_incr_refl">state_incr_refl</a> [in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.RTLgenproof1.html#state_incr_trans">state_incr_trans</a> [in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.RTLgenproof1.html#state_incr_trans2">state_incr_trans2</a> [in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.RTLgenproof1.html#state_incr_trans3">state_incr_trans3</a> [in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.RTLgenproof1.html#state_incr_trans4">state_incr_trans4</a> [in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.RTLgenproof1.html#state_incr_trans5">state_incr_trans5</a> [in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.RTLgenproof1.html#state_incr_trans6">state_incr_trans6</a> [in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.Parallelmove.html#stepf1_dec">stepf1_dec</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#stepf_dec">stepf_dec</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#stepf_dec0">stepf_dec0</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#stepf_dec0'">stepf_dec0'</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#stepf_pop">stepf_pop</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#stepf_popLoop">stepf_popLoop</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Allocproof_aux.html#stepInv_pnilnil">stepInv_pnilnil</a> [in <a href="backend.Allocproof_aux.html">backend.Allocproof_aux</a>]<br/>
+<a href="backend.Parallelmove.html#stepp_inv">stepp_inv</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#stepp_sameExec">stepp_sameExec</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#stepp_transitive">stepp_transitive</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.RTLtyping.html#step1">step1</a> [in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.RTLtyping.html#step2">step2</a> [in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.RTLtyping.html#step3">step3</a> [in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.RTLtyping.html#step4">step4</a> [in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.Parallelmove.html#step_dec">step_dec</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#step_dec0">step_dec0</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#step_inv">step_inv</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#step_inv_getdst">step_inv_getdst</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#step_inv_loop">step_inv_loop</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#step_inv_loop_aux">step_inv_loop_aux</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#step_inv_noOverlap">step_inv_noOverlap</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#step_inv_NoOverlap">step_inv_NoOverlap</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#step_inv_noTmp">step_inv_noTmp</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#step_inv_noTmpLast">step_inv_noTmpLast</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#step_inv_path">step_inv_path</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#step_inv_simpleDest">step_inv_simpleDest</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#step_sameExec">step_sameExec</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Kildall.html#step_state_good">step_state_good</a> [in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.Parallelmove.html#step_stepp">step_stepp</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.RTLgenproof1.html#stmt_stmtlist_ind">stmt_stmtlist_ind</a> [in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.Parallelmove.html#STM_Pmov">STM_Pmov</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.PPCgenproof1.html#storeind_aux_correct">storeind_aux_correct</a> [in <a href="backend.PPCgenproof1.html">backend.PPCgenproof1</a>]<br/>
+<a href="backend.PPCgenproof1.html#storeind_correct">storeind_correct</a> [in <a href="backend.PPCgenproof1.html">backend.PPCgenproof1</a>]<br/>
+<a href="backend.Mem.html#storev_mapped_inject">storev_mapped_inject</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#storev_mapped_inject_1">storev_mapped_inject_1</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.PPCgenproof.html#storev_16_signed_unsigned">storev_16_signed_unsigned</a> [in <a href="backend.PPCgenproof.html">backend.PPCgenproof</a>]<br/>
+<a href="backend.PPCgenproof.html#storev_8_signed_unsigned">storev_8_signed_unsigned</a> [in <a href="backend.PPCgenproof.html">backend.PPCgenproof</a>]<br/>
+<a href="backend.Mem.html#store_agree">store_agree</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#store_alloc">store_alloc</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#store_contentmap_agree">store_contentmap_agree</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#store_contentmap_outside_agree">store_contentmap_outside_agree</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#store_contents_inject">store_contents_inject</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#store_contents_outside_inject">store_contents_outside_inject</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#store_inv">store_inv</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#store_in_bounds">store_in_bounds</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#store_is_in_bounds">store_is_in_bounds</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#store_mapped_inject">store_mapped_inject</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#store_mapped_inject_1">store_mapped_inject_1</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#store_outside_agree">store_outside_agree</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#store_outside_extends">store_outside_extends</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Cminorgenproof.html#store_parameters_correct">store_parameters_correct</a> [in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.Mem.html#store_unmapped_inject">store_unmapped_inject</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#store_within_extends">store_within_extends</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Machtyping.html#subject_reduction">subject_reduction</a> [in <a href="backend.Machtyping.html">backend.Machtyping</a>]<br/>
+<a href="backend.RTLtyping.html#subject_reduction">subject_reduction</a> [in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.Machtyping.html#subject_reduction_function">subject_reduction_function</a> [in <a href="backend.Machtyping.html">backend.Machtyping</a>]<br/>
+<a href="backend.Machtyping.html#subject_reduction_instr">subject_reduction_instr</a> [in <a href="backend.Machtyping.html">backend.Machtyping</a>]<br/>
+<a href="backend.Machtyping.html#subject_reduction_instrs">subject_reduction_instrs</a> [in <a href="backend.Machtyping.html">backend.Machtyping</a>]<br/>
+<a href="backend.Values.html#sub_add_l">sub_add_l</a> [in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="lib.Integers.html#sub_add_l">sub_add_l</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#sub_add_opp">sub_add_opp</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Values.html#sub_add_opp">sub_add_opp</a> [in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.Values.html#sub_add_r">sub_add_r</a> [in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="lib.Integers.html#sub_add_r">sub_add_r</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#sub_idem">sub_idem</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#sub_shifted">sub_shifted</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#sub_zero_l">sub_zero_l</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Values.html#sub_zero_r">sub_zero_r</a> [in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="lib.Integers.html#sub_zero_r">sub_zero_r</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.LTL.html#successors_aux_invariant">successors_aux_invariant</a> [in <a href="backend.LTL.html">backend.LTL</a>]<br/>
+<a href="backend.LTL.html#successors_correct">successors_correct</a> [in <a href="backend.LTL.html">backend.LTL</a>]<br/>
+<a href="backend.RTL.html#successors_correct">successors_correct</a> [in <a href="backend.RTL.html">backend.RTL</a>]<br/>
+<a href="lib.Integers.html#swap_cmp">swap_cmp</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Values.html#swap_cmp">swap_cmp</a> [in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.Values.html#swap_cmpu">swap_cmpu</a> [in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="lib.Integers.html#swap_cmpu">swap_cmpu</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Values.html#swap_cmp_mismatch">swap_cmp_mismatch</a> [in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.Globalenvs.html#symbols_add_globals_transf">symbols_add_globals_transf</a> [in <a href="backend.Globalenvs.html">backend.Globalenvs</a>]<br/>
+<a href="backend.Globalenvs.html#symbols_init_transf">symbols_init_transf</a> [in <a href="backend.Globalenvs.html">backend.Globalenvs</a>]<br/>
+<a href="backend.Tunnelingproof.html#symbols_preserved">symbols_preserved</a> [in <a href="backend.Tunnelingproof.html">backend.Tunnelingproof</a>]<br/>
+<a href="backend.Allocproof.html#symbols_preserved">symbols_preserved</a> [in <a href="backend.Allocproof.html">backend.Allocproof</a>]<br/>
+<a href="backend.Cminorgenproof.html#symbols_preserved">symbols_preserved</a> [in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.Constpropproof.html#symbols_preserved">symbols_preserved</a> [in <a href="backend.Constpropproof.html">backend.Constpropproof</a>]<br/>
+<a href="backend.PPCgenproof.html#symbols_preserved">symbols_preserved</a> [in <a href="backend.PPCgenproof.html">backend.PPCgenproof</a>]<br/>
+<a href="backend.RTLgenproof.html#symbols_preserved">symbols_preserved</a> [in <a href="backend.RTLgenproof.html">backend.RTLgenproof</a>]<br/>
+<a href="backend.Linearizeproof.html#symbols_preserved">symbols_preserved</a> [in <a href="backend.Linearizeproof.html">backend.Linearizeproof</a>]<br/>
+<a href="backend.CSEproof.html#symbols_preserved">symbols_preserved</a> [in <a href="backend.CSEproof.html">backend.CSEproof</a>]<br/>
+<a href="backend.Stackingproof.html#symbols_preserved">symbols_preserved</a> [in <a href="backend.Stackingproof.html">backend.Stackingproof</a>]<br/>
+<br/><br/><a name="lemma_T"></a><h2>T </h2>
+<a href="backend.RTLgenproof1.html#target_regs_not_mutated">target_regs_not_mutated</a> [in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.RTLgenproof1.html#target_regs_ok_incr">target_regs_ok_incr</a> [in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.RTLgenproof1.html#target_regs_valid">target_regs_valid</a> [in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.RTLgenproof1.html#target_reg_not_mutated">target_reg_not_mutated</a> [in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.RTLgenproof1.html#target_reg_ok_incr">target_reg_ok_incr</a> [in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.RTLgenproof1.html#target_reg_valid">target_reg_valid</a> [in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.Conventions.html#temporaries_not_acceptable">temporaries_not_acceptable</a> [in <a href="backend.Conventions.html">backend.Conventions</a>]<br/>
+<a href="backend.RTLtyping.html#teq_correct">teq_correct</a> [in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="lib.Inclusion.html#test_inclusion_sound">test_inclusion_sound</a> [in <a href="lib.Inclusion.html">lib.Inclusion</a>]<br/>
+<a href="backend.CSE.html#top_ge">top_ge</a> [in <a href="backend.CSE.html">backend.CSE</a>]<br/>
+<a href="backend.Constpropproof.html#transfer_correct">transfer_correct</a> [in <a href="backend.Constpropproof.html">backend.Constpropproof</a>]<br/>
+<a href="backend.CSEproof.html#transfer_correct">transfer_correct</a> [in <a href="backend.CSEproof.html">backend.CSEproof</a>]<br/>
+<a href="backend.Main.html#transform_partial_program_compose">transform_partial_program_compose</a> [in <a href="backend.Main.html">backend.Main</a>]<br/>
+<a href="backend.AST.html#transform_partial_program_function">transform_partial_program_function</a> [in <a href="backend.AST.html">backend.AST</a>]<br/>
+<a href="backend.AST.html#transform_partial_program_main">transform_partial_program_main</a> [in <a href="backend.AST.html">backend.AST</a>]<br/>
+<a href="backend.AST.html#transform_program_function">transform_program_function</a> [in <a href="backend.AST.html">backend.AST</a>]<br/>
+<a href="backend.Main.html#transform_program_partial_total">transform_program_partial_total</a> [in <a href="backend.Main.html">backend.Main</a>]<br/>
+<a href="backend.Globalenvs.html#transform_program_transform_partial_program">transform_program_transform_partial_program</a> [in <a href="backend.Globalenvs.html">backend.Globalenvs</a>]<br/>
+<a href="backend.Main.html#transf_cminor_program2_correct">transf_cminor_program2_correct</a> [in <a href="backend.Main.html">backend.Main</a>]<br/>
+<a href="backend.Main.html#transf_cminor_program_correct">transf_cminor_program_correct</a> [in <a href="backend.Main.html">backend.Main</a>]<br/>
+<a href="backend.Main.html#transf_cminor_program_equiv">transf_cminor_program_equiv</a> [in <a href="backend.Main.html">backend.Main</a>]<br/>
+<a href="backend.CSE.html#transf_code_wf">transf_code_wf</a> [in <a href="backend.CSE.html">backend.CSE</a>]<br/>
+<a href="backend.Constprop.html#transf_code_wf">transf_code_wf</a> [in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.RTL.html#transf_code_wf">transf_code_wf</a> [in <a href="backend.RTL.html">backend.RTL</a>]<br/>
+<a href="backend.Main.html#transf_csharpminor_program2_correct">transf_csharpminor_program2_correct</a> [in <a href="backend.Main.html">backend.Main</a>]<br/>
+<a href="backend.Main.html#transf_csharpminor_program_correct">transf_csharpminor_program_correct</a> [in <a href="backend.Main.html">backend.Main</a>]<br/>
+<a href="backend.Main.html#transf_csharpminor_program_equiv">transf_csharpminor_program_equiv</a> [in <a href="backend.Main.html">backend.Main</a>]<br/>
+<a href="backend.Allocproof.html#transf_entrypoint_correct">transf_entrypoint_correct</a> [in <a href="backend.Allocproof.html">backend.Allocproof</a>]<br/>
+<a href="backend.Allocation.html#transf_entrypoint_wf">transf_entrypoint_wf</a> [in <a href="backend.Allocation.html">backend.Allocation</a>]<br/>
+<a href="backend.Linearizeproof.html#transf_function_correct">transf_function_correct</a> [in <a href="backend.Linearizeproof.html">backend.Linearizeproof</a>]<br/>
+<a href="backend.PPCgenproof.html#transf_function_correct">transf_function_correct</a> [in <a href="backend.PPCgenproof.html">backend.PPCgenproof</a>]<br/>
+<a href="backend.Stackingproof.html#transf_function_correct">transf_function_correct</a> [in <a href="backend.Stackingproof.html">backend.Stackingproof</a>]<br/>
+<a href="backend.CSEproof.html#transf_function_correct">transf_function_correct</a> [in <a href="backend.CSEproof.html">backend.CSEproof</a>]<br/>
+<a href="backend.Constpropproof.html#transf_funct_correct">transf_funct_correct</a> [in <a href="backend.Constpropproof.html">backend.Constpropproof</a>]<br/>
+<a href="backend.Main.html#transf_partial_program_compose">transf_partial_program_compose</a> [in <a href="backend.Main.html">backend.Main</a>]<br/>
+<a href="backend.Linearizeproof.html#transf_program_correct">transf_program_correct</a> [in <a href="backend.Linearizeproof.html">backend.Linearizeproof</a>]<br/>
+<a href="backend.Tunnelingproof.html#transf_program_correct">transf_program_correct</a> [in <a href="backend.Tunnelingproof.html">backend.Tunnelingproof</a>]<br/>
+<a href="backend.Constpropproof.html#transf_program_correct">transf_program_correct</a> [in <a href="backend.Constpropproof.html">backend.Constpropproof</a>]<br/>
+<a href="backend.PPCgenproof.html#transf_program_correct">transf_program_correct</a> [in <a href="backend.PPCgenproof.html">backend.PPCgenproof</a>]<br/>
+<a href="backend.CSEproof.html#transf_program_correct">transf_program_correct</a> [in <a href="backend.CSEproof.html">backend.CSEproof</a>]<br/>
+<a href="backend.Main.html#transf_program_partial_total">transf_program_partial_total</a> [in <a href="backend.Main.html">backend.Main</a>]<br/>
+<a href="backend.Globalenvs.html#transf_program_transf_partial_program">transf_program_transf_partial_program</a> [in <a href="backend.Globalenvs.html">backend.Globalenvs</a>]<br/>
+<a href="lib.Integers.html#translate_cmp">translate_cmp</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#translate_eq">translate_eq</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#translate_lt">translate_lt</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.PPCgenproof.html#transl_code_label">transl_code_label</a> [in <a href="backend.PPCgenproof.html">backend.PPCgenproof</a>]<br/>
+<a href="backend.RTLgenproof.html#transl_condition_CEcondition_correct">transl_condition_CEcondition_correct</a> [in <a href="backend.RTLgenproof.html">backend.RTLgenproof</a>]<br/>
+<a href="backend.RTLgenproof.html#transl_condition_CEcond_correct">transl_condition_CEcond_correct</a> [in <a href="backend.RTLgenproof.html">backend.RTLgenproof</a>]<br/>
+<a href="backend.RTLgenproof.html#transl_condition_CEfalse_correct">transl_condition_CEfalse_correct</a> [in <a href="backend.RTLgenproof.html">backend.RTLgenproof</a>]<br/>
+<a href="backend.RTLgenproof.html#transl_condition_CEtrue_correct">transl_condition_CEtrue_correct</a> [in <a href="backend.RTLgenproof.html">backend.RTLgenproof</a>]<br/>
+<a href="backend.RTLgenproof1.html#transl_condition_incr">transl_condition_incr</a> [in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.PPCgenproof1.html#transl_cond_correct">transl_cond_correct</a> [in <a href="backend.PPCgenproof1.html">backend.PPCgenproof1</a>]<br/>
+<a href="backend.PPCgenproof1.html#transl_cond_correct_aux">transl_cond_correct_aux</a> [in <a href="backend.PPCgenproof1.html">backend.PPCgenproof1</a>]<br/>
+<a href="backend.Cminorgenproof.html#transl_exprlist_Econs_correct">transl_exprlist_Econs_correct</a> [in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.RTLgenproof.html#transl_exprlist_Econs_correct">transl_exprlist_Econs_correct</a> [in <a href="backend.RTLgenproof.html">backend.RTLgenproof</a>]<br/>
+<a href="backend.RTLgenproof.html#transl_exprlist_Enil_correct">transl_exprlist_Enil_correct</a> [in <a href="backend.RTLgenproof.html">backend.RTLgenproof</a>]<br/>
+<a href="backend.Cminorgenproof.html#transl_exprlist_Enil_correct">transl_exprlist_Enil_correct</a> [in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.RTLgenproof1.html#transl_exprlist_incr">transl_exprlist_incr</a> [in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.RTLgenproof1.html#transl_expr_condition_exprlist_incr">transl_expr_condition_exprlist_incr</a> [in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.Cminorgenproof.html#transl_expr_Eaddrof_global_correct">transl_expr_Eaddrof_global_correct</a> [in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.Cminorgenproof.html#transl_expr_Eaddrof_local_correct">transl_expr_Eaddrof_local_correct</a> [in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.Cminorgenproof.html#transl_expr_Eassign_correct">transl_expr_Eassign_correct</a> [in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.RTLgenproof.html#transl_expr_Eassign_correct">transl_expr_Eassign_correct</a> [in <a href="backend.RTLgenproof.html">backend.RTLgenproof</a>]<br/>
+<a href="backend.RTLgenproof.html#transl_expr_Ecall_correct">transl_expr_Ecall_correct</a> [in <a href="backend.RTLgenproof.html">backend.RTLgenproof</a>]<br/>
+<a href="backend.Cminorgenproof.html#transl_expr_Ecall_correct">transl_expr_Ecall_correct</a> [in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.RTLgenproof.html#transl_expr_Econdition_correct">transl_expr_Econdition_correct</a> [in <a href="backend.RTLgenproof.html">backend.RTLgenproof</a>]<br/>
+<a href="backend.Cminorgenproof.html#transl_expr_Econdition_false_correct">transl_expr_Econdition_false_correct</a> [in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.Cminorgenproof.html#transl_expr_Econdition_true_correct">transl_expr_Econdition_true_correct</a> [in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.RTLgenproof.html#transl_expr_Eletvar_correct">transl_expr_Eletvar_correct</a> [in <a href="backend.RTLgenproof.html">backend.RTLgenproof</a>]<br/>
+<a href="backend.Cminorgenproof.html#transl_expr_Eletvar_correct">transl_expr_Eletvar_correct</a> [in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.Cminorgenproof.html#transl_expr_Elet_correct">transl_expr_Elet_correct</a> [in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.RTLgenproof.html#transl_expr_Elet_correct">transl_expr_Elet_correct</a> [in <a href="backend.RTLgenproof.html">backend.RTLgenproof</a>]<br/>
+<a href="backend.RTLgenproof.html#transl_expr_Eload_correct">transl_expr_Eload_correct</a> [in <a href="backend.RTLgenproof.html">backend.RTLgenproof</a>]<br/>
+<a href="backend.Cminorgenproof.html#transl_expr_Eload_correct">transl_expr_Eload_correct</a> [in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.RTLgenproof.html#transl_expr_Eop_correct">transl_expr_Eop_correct</a> [in <a href="backend.RTLgenproof.html">backend.RTLgenproof</a>]<br/>
+<a href="backend.Cminorgenproof.html#transl_expr_Eop_correct">transl_expr_Eop_correct</a> [in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.RTLgenproof.html#transl_expr_Estore_correct">transl_expr_Estore_correct</a> [in <a href="backend.RTLgenproof.html">backend.RTLgenproof</a>]<br/>
+<a href="backend.Cminorgenproof.html#transl_expr_Estore_correct">transl_expr_Estore_correct</a> [in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.Cminorgenproof.html#transl_expr_Evar_correct">transl_expr_Evar_correct</a> [in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.RTLgenproof.html#transl_expr_Evar_correct">transl_expr_Evar_correct</a> [in <a href="backend.RTLgenproof.html">backend.RTLgenproof</a>]<br/>
+<a href="backend.RTLgenproof1.html#transl_expr_incr">transl_expr_incr</a> [in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.PPCgenproof.html#transl_find_label">transl_find_label</a> [in <a href="backend.PPCgenproof.html">backend.PPCgenproof</a>]<br/>
+<a href="backend.Stackingproof.html#transl_find_label">transl_find_label</a> [in <a href="backend.Stackingproof.html">backend.Stackingproof</a>]<br/>
+<a href="backend.Cminorgenproof.html#transl_funcall_correct">transl_funcall_correct</a> [in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.RTLgenproof.html#transl_funcall_correct">transl_funcall_correct</a> [in <a href="backend.RTLgenproof.html">backend.RTLgenproof</a>]<br/>
+<a href="backend.Allocproof.html#transl_function_correct">transl_function_correct</a> [in <a href="backend.Allocproof.html">backend.Allocproof</a>]<br/>
+<a href="backend.Cminorgenproof.html#transl_function_correct">transl_function_correct</a> [in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.Allocproof.html#transl_function_correctness">transl_function_correctness</a> [in <a href="backend.Allocproof.html">backend.Allocproof</a>]<br/>
+<a href="backend.RTLgenproof.html#transl_function_correctness">transl_function_correctness</a> [in <a href="backend.RTLgenproof.html">backend.RTLgenproof</a>]<br/>
+<a href="backend.Allocproof.html#transl_Icall_correct">transl_Icall_correct</a> [in <a href="backend.Allocproof.html">backend.Allocproof</a>]<br/>
+<a href="backend.Allocproof.html#transl_Icond_false_correct">transl_Icond_false_correct</a> [in <a href="backend.Allocproof.html">backend.Allocproof</a>]<br/>
+<a href="backend.Allocproof.html#transl_Icond_true_correct">transl_Icond_true_correct</a> [in <a href="backend.Allocproof.html">backend.Allocproof</a>]<br/>
+<a href="backend.Allocproof.html#transl_Iload_correct">transl_Iload_correct</a> [in <a href="backend.Allocproof.html">backend.Allocproof</a>]<br/>
+<a href="backend.Allocproof.html#transl_Inop_correct">transl_Inop_correct</a> [in <a href="backend.Allocproof.html">backend.Allocproof</a>]<br/>
+<a href="backend.PPCgenproof.html#transl_instr_label">transl_instr_label</a> [in <a href="backend.PPCgenproof.html">backend.PPCgenproof</a>]<br/>
+<a href="backend.Allocproof.html#transl_Iop_correct">transl_Iop_correct</a> [in <a href="backend.Allocproof.html">backend.Allocproof</a>]<br/>
+<a href="backend.Allocproof.html#transl_Istore_correct">transl_Istore_correct</a> [in <a href="backend.Allocproof.html">backend.Allocproof</a>]<br/>
+<a href="backend.PPCgenproof1.html#transl_load_correct">transl_load_correct</a> [in <a href="backend.PPCgenproof1.html">backend.PPCgenproof1</a>]<br/>
+<a href="backend.PPCgenproof1.html#transl_load_store_correct">transl_load_store_correct</a> [in <a href="backend.PPCgenproof1.html">backend.PPCgenproof1</a>]<br/>
+<a href="backend.Allocproof.html#transl_one_correct">transl_one_correct</a> [in <a href="backend.Allocproof.html">backend.Allocproof</a>]<br/>
+<a href="backend.PPCgenproof1.html#transl_op_correct">transl_op_correct</a> [in <a href="backend.PPCgenproof1.html">backend.PPCgenproof1</a>]<br/>
+<a href="backend.RTLgenproof.html#transl_program_correct">transl_program_correct</a> [in <a href="backend.RTLgenproof.html">backend.RTLgenproof</a>]<br/>
+<a href="backend.Stackingproof.html#transl_program_correct">transl_program_correct</a> [in <a href="backend.Stackingproof.html">backend.Stackingproof</a>]<br/>
+<a href="backend.Allocproof.html#transl_program_correct">transl_program_correct</a> [in <a href="backend.Allocproof.html">backend.Allocproof</a>]<br/>
+<a href="backend.Cminorgenproof.html#transl_program_correct">transl_program_correct</a> [in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.Allocproof.html#transl_refl_correct">transl_refl_correct</a> [in <a href="backend.Allocproof.html">backend.Allocproof</a>]<br/>
+<a href="backend.RTLgenproof1.html#transl_stmtlist_incr">transl_stmtlist_incr</a> [in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.RTLgenproof.html#transl_stmtlist_Scons_continue_correct">transl_stmtlist_Scons_continue_correct</a> [in <a href="backend.RTLgenproof.html">backend.RTLgenproof</a>]<br/>
+<a href="backend.RTLgenproof.html#transl_stmtlist_Scons_stop_correct">transl_stmtlist_Scons_stop_correct</a> [in <a href="backend.RTLgenproof.html">backend.RTLgenproof</a>]<br/>
+<a href="backend.Cminorgenproof.html#transl_stmtlist_Scons_1_correct">transl_stmtlist_Scons_1_correct</a> [in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.Cminorgenproof.html#transl_stmtlist_Scons_2_correct">transl_stmtlist_Scons_2_correct</a> [in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.RTLgenproof.html#transl_stmtlist_Snil_correct">transl_stmtlist_Snil_correct</a> [in <a href="backend.RTLgenproof.html">backend.RTLgenproof</a>]<br/>
+<a href="backend.Cminorgenproof.html#transl_stmtlist_Snil_correct">transl_stmtlist_Snil_correct</a> [in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.RTLgenproof1.html#transl_stmt_incr">transl_stmt_incr</a> [in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.RTLgenproof.html#transl_stmt_Sblock_correct">transl_stmt_Sblock_correct</a> [in <a href="backend.RTLgenproof.html">backend.RTLgenproof</a>]<br/>
+<a href="backend.Cminorgenproof.html#transl_stmt_Sblock_correct">transl_stmt_Sblock_correct</a> [in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.RTLgenproof.html#transl_stmt_Sexit_correct">transl_stmt_Sexit_correct</a> [in <a href="backend.RTLgenproof.html">backend.RTLgenproof</a>]<br/>
+<a href="backend.Cminorgenproof.html#transl_stmt_Sexit_correct">transl_stmt_Sexit_correct</a> [in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.RTLgenproof.html#transl_stmt_Sexpr_correct">transl_stmt_Sexpr_correct</a> [in <a href="backend.RTLgenproof.html">backend.RTLgenproof</a>]<br/>
+<a href="backend.Cminorgenproof.html#transl_stmt_Sexpr_correct">transl_stmt_Sexpr_correct</a> [in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.RTLgenproof.html#transl_stmt_Sifthenelse_correct">transl_stmt_Sifthenelse_correct</a> [in <a href="backend.RTLgenproof.html">backend.RTLgenproof</a>]<br/>
+<a href="backend.Cminorgenproof.html#transl_stmt_Sifthenelse_false_correct">transl_stmt_Sifthenelse_false_correct</a> [in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.Cminorgenproof.html#transl_stmt_Sifthenelse_true_correct">transl_stmt_Sifthenelse_true_correct</a> [in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.Cminorgenproof.html#transl_stmt_Sloop_exit_correct">transl_stmt_Sloop_exit_correct</a> [in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.Cminorgenproof.html#transl_stmt_Sloop_loop_correct">transl_stmt_Sloop_loop_correct</a> [in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.RTLgenproof.html#transl_stmt_Sloop_loop_correct">transl_stmt_Sloop_loop_correct</a> [in <a href="backend.RTLgenproof.html">backend.RTLgenproof</a>]<br/>
+<a href="backend.RTLgenproof.html#transl_stmt_Sloop_stop_correct">transl_stmt_Sloop_stop_correct</a> [in <a href="backend.RTLgenproof.html">backend.RTLgenproof</a>]<br/>
+<a href="backend.Cminorgenproof.html#transl_stmt_Sreturn_none_correct">transl_stmt_Sreturn_none_correct</a> [in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.RTLgenproof.html#transl_stmt_Sreturn_none_correct">transl_stmt_Sreturn_none_correct</a> [in <a href="backend.RTLgenproof.html">backend.RTLgenproof</a>]<br/>
+<a href="backend.RTLgenproof.html#transl_stmt_Sreturn_some_correct">transl_stmt_Sreturn_some_correct</a> [in <a href="backend.RTLgenproof.html">backend.RTLgenproof</a>]<br/>
+<a href="backend.Cminorgenproof.html#transl_stmt_Sreturn_some_correct">transl_stmt_Sreturn_some_correct</a> [in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.RTLgenproof1.html#transl_stmt_stmtlist_incr">transl_stmt_stmtlist_incr</a> [in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.PPCgenproof1.html#transl_store_correct">transl_store_correct</a> [in <a href="backend.PPCgenproof1.html">backend.PPCgenproof1</a>]<br/>
+<a href="backend.Allocproof.html#transl_trans_correct">transl_trans_correct</a> [in <a href="backend.Allocproof.html">backend.Allocproof</a>]<br/>
+<a href="backend.Tunnelingproof.html#tunnel_function_correct">tunnel_function_correct</a> [in <a href="backend.Tunnelingproof.html">backend.Tunnelingproof</a>]<br/>
+<a href="lib.Coqlib.html#two_power_nat_O">two_power_nat_O</a> [in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="lib.Coqlib.html#two_power_nat_pos">two_power_nat_pos</a> [in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="backend.Locations.html#typesize_pos">typesize_pos</a> [in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.RTLtyping.html#type_args_complete">type_args_complete</a> [in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.RTLtyping.html#type_args_correct">type_args_correct</a> [in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.RTLtyping.html#type_args_extends">type_args_extends</a> [in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.RTLtyping.html#type_args_included">type_args_included</a> [in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.RTLtyping.html#type_args_mapped">type_args_mapped</a> [in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.RTLtyping.html#type_args_res_complete">type_args_res_complete</a> [in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.RTLtyping.html#type_args_res_included">type_args_res_included</a> [in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.RTLtyping.html#type_args_res_ros_included">type_args_res_ros_included</a> [in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.RTLtyping.html#type_arg_complete">type_arg_complete</a> [in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.RTLtyping.html#type_arg_correct">type_arg_correct</a> [in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.RTLtyping.html#type_arg_correct_1">type_arg_correct_1</a> [in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.RTLtyping.html#type_arg_extends">type_arg_extends</a> [in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.RTLtyping.html#type_arg_included">type_arg_included</a> [in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.RTLtyping.html#type_arg_mapped">type_arg_mapped</a> [in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.RTLtyping.html#type_instrs_extends">type_instrs_extends</a> [in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.RTLtyping.html#type_instrs_included">type_instrs_included</a> [in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.RTLtyping.html#type_instr_included">type_instr_included</a> [in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.Op.html#type_of_chunk_correct">type_of_chunk_correct</a> [in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Op.html#type_of_operation_sound">type_of_operation_sound</a> [in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.RTLtyping.html#type_res_complete">type_res_complete</a> [in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.RTLtyping.html#type_res_correct">type_res_correct</a> [in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.RTLtyping.html#type_ros_complete">type_ros_complete</a> [in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.RTLtyping.html#type_ros_correct">type_ros_correct</a> [in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.RTLtyping.html#type_rtl_function_correct">type_rtl_function_correct</a> [in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.RTLtyping.html#type_rtl_function_instrs">type_rtl_function_instrs</a> [in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.RTLtyping.html#type_rtl_function_norepet">type_rtl_function_norepet</a> [in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.RTLtyping.html#type_rtl_function_params">type_rtl_function_params</a> [in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.Alloctyping_aux.html#T_type">T_type</a> [in <a href="backend.Alloctyping_aux.html">backend.Alloctyping_aux</a>]<br/>
+<br/><br/><a name="lemma_U"></a><h2>U </h2>
+<a href="backend.Values.html#undef_is_bool">undef_is_bool</a> [in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.Stackingproof.html#unfold_transf_function">unfold_transf_function</a> [in <a href="backend.Stackingproof.html">backend.Stackingproof</a>]<br/>
+<a href="backend.Linearizeproof.html#unique_labels_lin_block">unique_labels_lin_block</a> [in <a href="backend.Linearizeproof.html">backend.Linearizeproof</a>]<br/>
+<a href="backend.Linearizeproof.html#unique_labels_lin_function">unique_labels_lin_function</a> [in <a href="backend.Linearizeproof.html">backend.Linearizeproof</a>]<br/>
+<a href="backend.Linearizeproof.html#unique_labels_lin_rec">unique_labels_lin_rec</a> [in <a href="backend.Linearizeproof.html">backend.Linearizeproof</a>]<br/>
+<a href="lib.Coqlib.html#unroll_positive_rec">unroll_positive_rec</a> [in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="lib.Integers.html#unsigned_range">unsigned_range</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#unsigned_range_2">unsigned_range_2</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#unsigned_repr">unsigned_repr</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Parallelmove.html#unsplit_move">unsplit_move</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.RTLgenproof1.html#update_instr_extends">update_instr_extends</a> [in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.RTLgenproof1.html#update_instr_incr">update_instr_incr</a> [in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.RTLgen.html#update_instr_wf">update_instr_wf</a> [in <a href="backend.RTLgen.html">backend.RTLgen</a>]<br/>
+<a href="backend.Mem.html#update_o">update_o</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#update_s">update_s</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<br/><br/><a name="lemma_V"></a><h2>V </h2>
+<a href="backend.Mem.html#valid_block_alloc">valid_block_alloc</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#valid_block_free">valid_block_free</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#valid_block_store">valid_block_store</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.RTLgenproof1.html#valid_fresh_absurd">valid_fresh_absurd</a> [in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.RTLgenproof1.html#valid_fresh_different">valid_fresh_different</a> [in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.Mem.html#valid_new_block">valid_new_block</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#valid_not_valid_diff">valid_not_valid_diff</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#valid_pointer_inject_no_overflow">valid_pointer_inject_no_overflow</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.CSEproof.html#valnum_regs_holds">valnum_regs_holds</a> [in <a href="backend.CSEproof.html">backend.CSEproof</a>]<br/>
+<a href="backend.CSEproof.html#valnum_reg_holds">valnum_reg_holds</a> [in <a href="backend.CSEproof.html">backend.CSEproof</a>]<br/>
+<a href="backend.CSEproof.html#valu_agree_list">valu_agree_list</a> [in <a href="backend.CSEproof.html">backend.CSEproof</a>]<br/>
+<a href="backend.CSEproof.html#valu_agree_refl">valu_agree_refl</a> [in <a href="backend.CSEproof.html">backend.CSEproof</a>]<br/>
+<a href="backend.CSEproof.html#valu_agree_trans">valu_agree_trans</a> [in <a href="backend.CSEproof.html">backend.CSEproof</a>]<br/>
+<a href="backend.Cminorgenproof.html#val_content_inject_cast">val_content_inject_cast</a> [in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.Mem.html#val_content_inject_incr">val_content_inject_incr</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#val_inject_incr">val_inject_incr</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#val_list_inject_incr">val_list_inject_incr</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Constpropproof.html#val_match_approx_increasing">val_match_approx_increasing</a> [in <a href="backend.Constpropproof.html">backend.Constpropproof</a>]<br/>
+<a href="backend.Cminorgenproof.html#vars_vals_match_extensional">vars_vals_match_extensional</a> [in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.Cminorgenproof.html#vars_vals_match_holds">vars_vals_match_holds</a> [in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.Cminorgenproof.html#vars_vals_match_holds_1">vars_vals_match_holds_1</a> [in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.Cminorgenproof.html#var_addr_global_correct">var_addr_global_correct</a> [in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.Cminorgenproof.html#var_addr_local_correct">var_addr_local_correct</a> [in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.Cminorgenproof.html#var_get_correct">var_get_correct</a> [in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.Cminorgenproof.html#var_set_correct">var_set_correct</a> [in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<br/><br/><a name="lemma_W"></a><h2>W </h2>
+<a href="backend.CSEproof.html#wf_add_load">wf_add_load</a> [in <a href="backend.CSEproof.html">backend.CSEproof</a>]<br/>
+<a href="backend.CSEproof.html#wf_add_op">wf_add_op</a> [in <a href="backend.CSEproof.html">backend.CSEproof</a>]<br/>
+<a href="backend.CSEproof.html#wf_add_rhs">wf_add_rhs</a> [in <a href="backend.CSEproof.html">backend.CSEproof</a>]<br/>
+<a href="backend.CSEproof.html#wf_analyze">wf_analyze</a> [in <a href="backend.CSEproof.html">backend.CSEproof</a>]<br/>
+<a href="lib.union_find.html#wf_empty">wf_empty</a> [in <a href="lib.union_find.html">lib.union_find</a>]<br/>
+<a href="backend.CSEproof.html#wf_empty_numbering">wf_empty_numbering</a> [in <a href="backend.CSEproof.html">backend.CSEproof</a>]<br/>
+<a href="backend.CSEproof.html#wf_equation_increasing">wf_equation_increasing</a> [in <a href="backend.CSEproof.html">backend.CSEproof</a>]<br/>
+<a href="backend.CSEproof.html#wf_kill_loads">wf_kill_loads</a> [in <a href="backend.CSEproof.html">backend.CSEproof</a>]<br/>
+<a href="backend.CSEproof.html#wf_rhs_increasing">wf_rhs_increasing</a> [in <a href="backend.CSEproof.html">backend.CSEproof</a>]<br/>
+<a href="backend.CSEproof.html#wf_transfer">wf_transfer</a> [in <a href="backend.CSEproof.html">backend.CSEproof</a>]<br/>
+<a href="backend.Tunneling.html#wf_tunneled_code">wf_tunneled_code</a> [in <a href="backend.Tunneling.html">backend.Tunneling</a>]<br/>
+<a href="backend.CSEproof.html#wf_valnum_reg">wf_valnum_reg</a> [in <a href="backend.CSEproof.html">backend.CSEproof</a>]<br/>
+<a href="backend.CSEproof.html#wf_valnum_regs">wf_valnum_regs</a> [in <a href="backend.CSEproof.html">backend.CSEproof</a>]<br/>
+<a href="backend.Alloctyping.html#wt_add_call">wt_add_call</a> [in <a href="backend.Alloctyping.html">backend.Alloctyping</a>]<br/>
+<a href="backend.Alloctyping.html#wt_add_cond">wt_add_cond</a> [in <a href="backend.Alloctyping.html">backend.Alloctyping</a>]<br/>
+<a href="backend.Alloctyping.html#wt_add_entry">wt_add_entry</a> [in <a href="backend.Alloctyping.html">backend.Alloctyping</a>]<br/>
+<a href="backend.Alloctyping.html#wt_add_load">wt_add_load</a> [in <a href="backend.Alloctyping.html">backend.Alloctyping</a>]<br/>
+<a href="backend.Alloctyping.html#wt_add_move">wt_add_move</a> [in <a href="backend.Alloctyping.html">backend.Alloctyping</a>]<br/>
+<a href="backend.Alloctyping_aux.html#wt_add_moves">wt_add_moves</a> [in <a href="backend.Alloctyping_aux.html">backend.Alloctyping_aux</a>]<br/>
+<a href="backend.Alloctyping.html#wt_add_op_move">wt_add_op_move</a> [in <a href="backend.Alloctyping.html">backend.Alloctyping</a>]<br/>
+<a href="backend.Alloctyping.html#wt_add_op_others">wt_add_op_others</a> [in <a href="backend.Alloctyping.html">backend.Alloctyping</a>]<br/>
+<a href="backend.Alloctyping.html#wt_add_op_undef">wt_add_op_undef</a> [in <a href="backend.Alloctyping.html">backend.Alloctyping</a>]<br/>
+<a href="backend.Alloctyping.html#wt_add_reload">wt_add_reload</a> [in <a href="backend.Alloctyping.html">backend.Alloctyping</a>]<br/>
+<a href="backend.Alloctyping.html#wt_add_reloads">wt_add_reloads</a> [in <a href="backend.Alloctyping.html">backend.Alloctyping</a>]<br/>
+<a href="backend.Alloctyping.html#wt_add_return">wt_add_return</a> [in <a href="backend.Alloctyping.html">backend.Alloctyping</a>]<br/>
+<a href="backend.Alloctyping.html#wt_add_spill">wt_add_spill</a> [in <a href="backend.Alloctyping.html">backend.Alloctyping</a>]<br/>
+<a href="backend.Alloctyping.html#wt_add_store">wt_add_store</a> [in <a href="backend.Alloctyping.html">backend.Alloctyping</a>]<br/>
+<a href="backend.Alloctyping.html#wt_add_undefs">wt_add_undefs</a> [in <a href="backend.Alloctyping.html">backend.Alloctyping</a>]<br/>
+<a href="backend.Stackingtyping.html#wt_fold_right">wt_fold_right</a> [in <a href="backend.Stackingtyping.html">backend.Stackingtyping</a>]<br/>
+<a href="backend.Machtyping.html#wt_get_slot">wt_get_slot</a> [in <a href="backend.Machtyping.html">backend.Machtyping</a>]<br/>
+<a href="backend.Machtyping.html#wt_init_frame">wt_init_frame</a> [in <a href="backend.Machtyping.html">backend.Machtyping</a>]<br/>
+<a href="backend.RTLtyping.html#wt_init_regs">wt_init_regs</a> [in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.Stackingtyping.html#wt_instrs_cons">wt_instrs_cons</a> [in <a href="backend.Stackingtyping.html">backend.Stackingtyping</a>]<br/>
+<a href="backend.Linearizetyping.html#wt_linearize_block">wt_linearize_block</a> [in <a href="backend.Linearizetyping.html">backend.Linearizetyping</a>]<br/>
+<a href="backend.Linearizetyping.html#wt_linearize_body">wt_linearize_body</a> [in <a href="backend.Linearizetyping.html">backend.Linearizetyping</a>]<br/>
+<a href="backend.Stackingtyping.html#wt_Msetstack'">wt_Msetstack'</a> [in <a href="backend.Stackingtyping.html">backend.Stackingtyping</a>]<br/>
+<a href="backend.Alloctyping.html#wt_parallel_move">wt_parallel_move</a> [in <a href="backend.Alloctyping.html">backend.Alloctyping</a>]<br/>
+<a href="backend.Alloctyping_aux.html#wt_parallel_moveX">wt_parallel_moveX</a> [in <a href="backend.Alloctyping_aux.html">backend.Alloctyping_aux</a>]<br/>
+<a href="backend.Alloctyping_aux.html#wt_parallel_move'">wt_parallel_move'</a> [in <a href="backend.Alloctyping_aux.html">backend.Alloctyping_aux</a>]<br/>
+<a href="backend.RTLtyping.html#wt_regset_assign">wt_regset_assign</a> [in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.RTLtyping.html#wt_regset_list">wt_regset_list</a> [in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.Alloctyping.html#wt_regs_for">wt_regs_for</a> [in <a href="backend.Alloctyping.html">backend.Alloctyping</a>]<br/>
+<a href="backend.Alloctyping.html#wt_regs_for_rec">wt_regs_for_rec</a> [in <a href="backend.Alloctyping.html">backend.Alloctyping</a>]<br/>
+<a href="backend.Alloctyping.html#wt_reg_for">wt_reg_for</a> [in <a href="backend.Alloctyping.html">backend.Alloctyping</a>]<br/>
+<a href="backend.Stackingtyping.html#wt_restore_callee_save">wt_restore_callee_save</a> [in <a href="backend.Stackingtyping.html">backend.Stackingtyping</a>]<br/>
+<a href="backend.Stackingtyping.html#wt_restore_float_callee_save">wt_restore_float_callee_save</a> [in <a href="backend.Stackingtyping.html">backend.Stackingtyping</a>]<br/>
+<a href="backend.Stackingtyping.html#wt_restore_int_callee_save">wt_restore_int_callee_save</a> [in <a href="backend.Stackingtyping.html">backend.Stackingtyping</a>]<br/>
+<a href="backend.Alloctyping.html#wt_rtl_function">wt_rtl_function</a> [in <a href="backend.Alloctyping.html">backend.Alloctyping</a>]<br/>
+<a href="backend.Stackingtyping.html#wt_save_callee_save">wt_save_callee_save</a> [in <a href="backend.Stackingtyping.html">backend.Stackingtyping</a>]<br/>
+<a href="backend.Stackingtyping.html#wt_save_float_callee_save">wt_save_float_callee_save</a> [in <a href="backend.Stackingtyping.html">backend.Stackingtyping</a>]<br/>
+<a href="backend.Stackingtyping.html#wt_save_int_callee_save">wt_save_int_callee_save</a> [in <a href="backend.Stackingtyping.html">backend.Stackingtyping</a>]<br/>
+<a href="backend.Machtyping.html#wt_setreg">wt_setreg</a> [in <a href="backend.Machtyping.html">backend.Machtyping</a>]<br/>
+<a href="backend.Machtyping.html#wt_set_slot">wt_set_slot</a> [in <a href="backend.Machtyping.html">backend.Machtyping</a>]<br/>
+<a href="backend.Alloctyping.html#wt_transf_entrypoint">wt_transf_entrypoint</a> [in <a href="backend.Alloctyping.html">backend.Alloctyping</a>]<br/>
+<a href="backend.Stackingtyping.html#wt_transf_function">wt_transf_function</a> [in <a href="backend.Stackingtyping.html">backend.Stackingtyping</a>]<br/>
+<a href="backend.Alloctyping.html#wt_transf_function">wt_transf_function</a> [in <a href="backend.Alloctyping.html">backend.Alloctyping</a>]<br/>
+<a href="backend.Linearizetyping.html#wt_transf_function">wt_transf_function</a> [in <a href="backend.Linearizetyping.html">backend.Linearizetyping</a>]<br/>
+<a href="backend.Alloctyping.html#wt_transf_instr">wt_transf_instr</a> [in <a href="backend.Alloctyping.html">backend.Alloctyping</a>]<br/>
+<a href="backend.Alloctyping.html#wt_transf_instrs">wt_transf_instrs</a> [in <a href="backend.Alloctyping.html">backend.Alloctyping</a>]<br/>
+<a href="backend.Stackingtyping.html#wt_transl_instr">wt_transl_instr</a> [in <a href="backend.Stackingtyping.html">backend.Stackingtyping</a>]<br/>
+<a href="backend.Tunnelingtyping.html#wt_tunnel_block">wt_tunnel_block</a> [in <a href="backend.Tunnelingtyping.html">backend.Tunnelingtyping</a>]<br/>
+<a href="backend.Tunnelingtyping.html#wt_tunnel_function">wt_tunnel_function</a> [in <a href="backend.Tunnelingtyping.html">backend.Tunnelingtyping</a>]<br/>
+<br/><br/><a name="lemma_X"></a><h2>X </h2>
+<a href="lib.Maps.html#xcombine_lr">xcombine_lr</a> [in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Maps.html#xelements_complete">xelements_complete</a> [in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Maps.html#xelements_correct">xelements_correct</a> [in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Maps.html#xelements_hi">xelements_hi</a> [in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Maps.html#xelements_ho">xelements_ho</a> [in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Maps.html#xelements_ih">xelements_ih</a> [in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Maps.html#xelements_ii">xelements_ii</a> [in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Maps.html#xelements_io">xelements_io</a> [in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Maps.html#xelements_keys_norepet">xelements_keys_norepet</a> [in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Maps.html#xelements_oh">xelements_oh</a> [in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Maps.html#xelements_oi">xelements_oi</a> [in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Maps.html#xelements_oo">xelements_oo</a> [in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Maps.html#xgcombine">xgcombine</a> [in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Maps.html#xgcombine_l">xgcombine_l</a> [in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Maps.html#xgcombine_r">xgcombine_r</a> [in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Maps.html#xget_left">xget_left</a> [in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Maps.html#xgmap">xgmap</a> [in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="backend.PPCgenproof1.html#xorimm_correct">xorimm_correct</a> [in <a href="backend.PPCgenproof1.html">backend.PPCgenproof1</a>]<br/>
+<a href="lib.Integers.html#xor_assoc">xor_assoc</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Values.html#xor_assoc">xor_assoc</a> [in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.Values.html#xor_commut">xor_commut</a> [in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="lib.Integers.html#xor_commut">xor_commut</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#xor_one_one">xor_one_one</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#xor_zero">xor_zero</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#xor_zero_one">xor_zero_one</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<br/><br/><a name="lemma_Z"></a><h2>Z </h2>
+<a href="lib.Coqlib.html#Zdiv_small">Zdiv_small</a> [in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="lib.Coqlib.html#Zdiv_unique">Zdiv_unique</a> [in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="lib.Coqlib.html#zeq_false">zeq_false</a> [in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="lib.Coqlib.html#zeq_true">zeq_true</a> [in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="lib.Coqlib.html#zle_false">zle_false</a> [in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="lib.Coqlib.html#zle_true">zle_true</a> [in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="lib.Coqlib.html#zlt_false">zlt_false</a> [in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="lib.Coqlib.html#zlt_true">zlt_true</a> [in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="lib.Coqlib.html#Zmax_bound_l">Zmax_bound_l</a> [in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="lib.Coqlib.html#Zmax_bound_r">Zmax_bound_r</a> [in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="lib.Coqlib.html#Zmax_spec">Zmax_spec</a> [in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="lib.Coqlib.html#Zmin_spec">Zmin_spec</a> [in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="lib.Coqlib.html#Zmod_small">Zmod_small</a> [in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="lib.Coqlib.html#Zmod_unique">Zmod_unique</a> [in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="lib.Integers.html#Z_bin_decomp_range">Z_bin_decomp_range</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#Z_bin_decomp_shift_add">Z_bin_decomp_shift_add</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#Z_of_bits_excl">Z_of_bits_excl</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#Z_of_bits_exten">Z_of_bits_exten</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#Z_of_bits_of_Z">Z_of_bits_of_Z</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#Z_of_bits_range">Z_of_bits_range</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#Z_of_bits_range_2">Z_of_bits_range_2</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#Z_of_bits_shift">Z_of_bits_shift</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#Z_of_bits_shifts">Z_of_bits_shifts</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#Z_of_bits_shifts_rev">Z_of_bits_shifts_rev</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#Z_of_bits_shift_rev">Z_of_bits_shift_rev</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#Z_one_bits_powerserie">Z_one_bits_powerserie</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#Z_one_bits_range">Z_one_bits_range</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#Z_shift_add_bin_decomp">Z_shift_add_bin_decomp</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#Z_shift_add_inj">Z_shift_add_inj</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<br/><br/><hr/>
+<h1>Constructor Index</h1>
+<a name="constructor_A"></a><h2>A </h2>
+<a href="backend.Op.html#Abased">Abased</a> [in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Cmconstr.html#addf_case1">addf_case1</a> [in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Cmconstr.html#addf_case2">addf_case2</a> [in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Cmconstr.html#addf_default">addf_default</a> [in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Cmconstr.html#addimm_case1">addimm_case1</a> [in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Cmconstr.html#addimm_case2">addimm_case2</a> [in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Cmconstr.html#addimm_case3">addimm_case3</a> [in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Cmconstr.html#addimm_case4">addimm_case4</a> [in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Cmconstr.html#addimm_default">addimm_default</a> [in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Cmconstr.html#addressing_case1">addressing_case1</a> [in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Cmconstr.html#addressing_case2">addressing_case2</a> [in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Cmconstr.html#addressing_case3">addressing_case3</a> [in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Cmconstr.html#addressing_case4">addressing_case4</a> [in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Cmconstr.html#addressing_case5">addressing_case5</a> [in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Cmconstr.html#addressing_default">addressing_default</a> [in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Constprop.html#addr_strength_reduction_case1">addr_strength_reduction_case1</a> [in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#addr_strength_reduction_case2">addr_strength_reduction_case2</a> [in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#addr_strength_reduction_case3">addr_strength_reduction_case3</a> [in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#addr_strength_reduction_default">addr_strength_reduction_default</a> [in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Cmconstr.html#add_case1">add_case1</a> [in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Cmconstr.html#add_case2">add_case2</a> [in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Cmconstr.html#add_case3">add_case3</a> [in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Cmconstr.html#add_case4">add_case4</a> [in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Cmconstr.html#add_case5">add_case5</a> [in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Cmconstr.html#add_default">add_default</a> [in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Op.html#Aglobal">Aglobal</a> [in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Op.html#Aindexed">Aindexed</a> [in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Op.html#Aindexed2">Aindexed2</a> [in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Op.html#Ainstack">Ainstack</a> [in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Csharpminor.html#alloc_variables_cons">alloc_variables_cons</a> [in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Csharpminor.html#alloc_variables_nil">alloc_variables_nil</a> [in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<br/><br/><a name="constructor_B"></a><h2>B </h2>
+<a href="backend.LTL.html#Bcall">Bcall</a> [in <a href="backend.LTL.html">backend.LTL</a>]<br/>
+<a href="backend.LTL.html#Bcond">Bcond</a> [in <a href="backend.LTL.html">backend.LTL</a>]<br/>
+<a href="backend.LTL.html#Bgetstack">Bgetstack</a> [in <a href="backend.LTL.html">backend.LTL</a>]<br/>
+<a href="backend.LTL.html#Bgoto">Bgoto</a> [in <a href="backend.LTL.html">backend.LTL</a>]<br/>
+<a href="backend.Csharpminor.html#bind_parameters_cons">bind_parameters_cons</a> [in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Csharpminor.html#bind_parameters_nil">bind_parameters_nil</a> [in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.LTL.html#Bload">Bload</a> [in <a href="backend.LTL.html">backend.LTL</a>]<br/>
+<a href="backend.Values.html#bool_of_val_int_true">bool_of_val_int_true</a> [in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.LTL.html#Bop">Bop</a> [in <a href="backend.LTL.html">backend.LTL</a>]<br/>
+<a href="lib.Lattice.html#Bot">Bot</a> [in <a href="lib.Lattice.html">lib.Lattice</a>]<br/>
+<a href="lib.Lattice.html#Bot_except">Bot_except</a> [in <a href="lib.Lattice.html">lib.Lattice</a>]<br/>
+<a href="backend.LTL.html#Breturn">Breturn</a> [in <a href="backend.LTL.html">backend.LTL</a>]<br/>
+<a href="backend.LTL.html#Bsetstack">Bsetstack</a> [in <a href="backend.LTL.html">backend.LTL</a>]<br/>
+<a href="backend.LTL.html#Bstore">Bstore</a> [in <a href="backend.LTL.html">backend.LTL</a>]<br/>
+<br/><br/><a name="constructor_C"></a><h2>C </h2>
+<a href="backend.Machabstr2mach.html#callstack_dom_cons">callstack_dom_cons</a> [in <a href="backend.Machabstr2mach.html">backend.Machabstr2mach</a>]<br/>
+<a href="backend.Machabstr2mach.html#callstack_dom_nil">callstack_dom_nil</a> [in <a href="backend.Machabstr2mach.html">backend.Machabstr2mach</a>]<br/>
+<a href="backend.Machabstr2mach.html#callstack_linked_cons">callstack_linked_cons</a> [in <a href="backend.Machabstr2mach.html">backend.Machabstr2mach</a>]<br/>
+<a href="backend.Machabstr2mach.html#callstack_linked_nil">callstack_linked_nil</a> [in <a href="backend.Machabstr2mach.html">backend.Machabstr2mach</a>]<br/>
+<a href="backend.Machabstr2mach.html#callstack_linked_one">callstack_linked_one</a> [in <a href="backend.Machabstr2mach.html">backend.Machabstr2mach</a>]<br/>
+<a href="backend.PPC.html#CARRY">CARRY</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.Op.html#Ccomp">Ccomp</a> [in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Op.html#Ccompf">Ccompf</a> [in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Op.html#Ccompimm">Ccompimm</a> [in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Op.html#Ccompu">Ccompu</a> [in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Op.html#Ccompuimm">Ccompuimm</a> [in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Cminor.html#CEcond">CEcond</a> [in <a href="backend.Cminor.html">backend.Cminor</a>]<br/>
+<a href="backend.Cminor.html#CEcondition">CEcondition</a> [in <a href="backend.Cminor.html">backend.Cminor</a>]<br/>
+<a href="backend.Cminor.html#CEfalse">CEfalse</a> [in <a href="backend.Cminor.html">backend.Cminor</a>]<br/>
+<a href="backend.AST.html#Ceq">Ceq</a> [in <a href="backend.AST.html">backend.AST</a>]<br/>
+<a href="backend.Cminor.html#CEtrue">CEtrue</a> [in <a href="backend.Cminor.html">backend.Cminor</a>]<br/>
+<a href="backend.AST.html#Cge">Cge</a> [in <a href="backend.AST.html">backend.AST</a>]<br/>
+<a href="backend.AST.html#Cgt">Cgt</a> [in <a href="backend.AST.html">backend.AST</a>]<br/>
+<a href="backend.PPC.html#Cint">Cint</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.AST.html#Cle">Cle</a> [in <a href="backend.AST.html">backend.AST</a>]<br/>
+<a href="backend.AST.html#Clt">Clt</a> [in <a href="backend.AST.html">backend.AST</a>]<br/>
+<a href="backend.Op.html#Cmasknotzero">Cmasknotzero</a> [in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Op.html#Cmaskzero">Cmaskzero</a> [in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.AST.html#Cne">Cne</a> [in <a href="backend.AST.html">backend.AST</a>]<br/>
+<a href="backend.Op.html#Cnotcompf">Cnotcompf</a> [in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.LTL.html#Cont">Cont</a> [in <a href="backend.LTL.html">backend.LTL</a>]<br/>
+<a href="backend.Mem.html#Cont">Cont</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#content_inject_cont">content_inject_cont</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#content_inject_datum16">content_inject_datum16</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#content_inject_datum32">content_inject_datum32</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#content_inject_datum64">content_inject_datum64</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#content_inject_datum8">content_inject_datum8</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#content_inject_undef">content_inject_undef</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.PPC.html#CRbit_0">CRbit_0</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#CRbit_1">CRbit_1</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#CRbit_2">CRbit_2</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#CRbit_3">CRbit_3</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#CR0_0">CR0_0</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#CR0_1">CR0_1</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#CR0_2">CR0_2</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#CR0_3">CR0_3</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.Constprop.html#csr_case1">csr_case1</a> [in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#csr_case2">csr_case2</a> [in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#csr_default">csr_default</a> [in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.PPC.html#Csymbol_high_signed">Csymbol_high_signed</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Csymbol_high_unsigned">Csymbol_high_unsigned</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Csymbol_low_signed">Csymbol_low_signed</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Csymbol_low_unsigned">Csymbol_low_unsigned</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#CTR">CTR</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<br/><br/><a name="constructor_D"></a><h2>D </h2>
+<a href="backend.Mem.html#Datum16">Datum16</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#Datum32">Datum32</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#Datum64">Datum64</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#Datum8">Datum8</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Cmconstr.html#divu_case1">divu_case1</a> [in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Cmconstr.html#divu_default">divu_default</a> [in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Parallelmove.html#dstepp_refl">dstepp_refl</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#dstepp_trans">dstepp_trans</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#dstep_nop">dstep_nop</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#dstep_pop">dstep_pop</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#dstep_pop_loop">dstep_pop_loop</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#dstep_push">dstep_push</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#dstep_start">dstep_start</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<br/><br/><a name="constructor_E"></a><h2>E </h2>
+<a href="backend.Csharpminor.html#Eaddrof">Eaddrof</a> [in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Cminor.html#Eassign">Eassign</a> [in <a href="backend.Cminor.html">backend.Cminor</a>]<br/>
+<a href="backend.Csharpminor.html#Eassign">Eassign</a> [in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Csharpminor.html#Ecall">Ecall</a> [in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Cminor.html#Ecall">Ecall</a> [in <a href="backend.Cminor.html">backend.Cminor</a>]<br/>
+<a href="backend.Csharpminor.html#Econdition">Econdition</a> [in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Cminor.html#Econdition">Econdition</a> [in <a href="backend.Cminor.html">backend.Cminor</a>]<br/>
+<a href="backend.Cminor.html#Econs">Econs</a> [in <a href="backend.Cminor.html">backend.Cminor</a>]<br/>
+<a href="backend.Csharpminor.html#Econs">Econs</a> [in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Csharpminor.html#Elet">Elet</a> [in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Cminor.html#Elet">Elet</a> [in <a href="backend.Cminor.html">backend.Cminor</a>]<br/>
+<a href="backend.Cminor.html#Eletvar">Eletvar</a> [in <a href="backend.Cminor.html">backend.Cminor</a>]<br/>
+<a href="backend.Csharpminor.html#Eletvar">Eletvar</a> [in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Cminor.html#Eload">Eload</a> [in <a href="backend.Cminor.html">backend.Cminor</a>]<br/>
+<a href="backend.Csharpminor.html#Eload">Eload</a> [in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Csharpminor.html#Enil">Enil</a> [in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Cminor.html#Enil">Enil</a> [in <a href="backend.Cminor.html">backend.Cminor</a>]<br/>
+<a href="backend.Csharpminor.html#Eop">Eop</a> [in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Cminor.html#Eop">Eop</a> [in <a href="backend.Cminor.html">backend.Cminor</a>]<br/>
+<a href="backend.RTLgen.html#Error">Error</a> [in <a href="backend.RTLgen.html">backend.RTLgen</a>]<br/>
+<a href="backend.PPC.html#Error">Error</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.Cminor.html#Estore">Estore</a> [in <a href="backend.Cminor.html">backend.Cminor</a>]<br/>
+<a href="backend.Csharpminor.html#Estore">Estore</a> [in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Csharpminor.html#eval_Evar">eval_Evar</a> [in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Cminor.html#eval_Evar">eval_Evar</a> [in <a href="backend.Cminor.html">backend.Cminor</a>]<br/>
+<a href="backend.Constprop.html#eval_static_condition_case1">eval_static_condition_case1</a> [in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#eval_static_condition_case2">eval_static_condition_case2</a> [in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#eval_static_condition_case3">eval_static_condition_case3</a> [in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#eval_static_condition_case4">eval_static_condition_case4</a> [in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#eval_static_condition_case5">eval_static_condition_case5</a> [in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#eval_static_condition_case6">eval_static_condition_case6</a> [in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#eval_static_condition_case7">eval_static_condition_case7</a> [in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#eval_static_condition_case8">eval_static_condition_case8</a> [in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#eval_static_condition_default">eval_static_condition_default</a> [in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#eval_static_operation_case1">eval_static_operation_case1</a> [in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#eval_static_operation_case11">eval_static_operation_case11</a> [in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#eval_static_operation_case12">eval_static_operation_case12</a> [in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#eval_static_operation_case13">eval_static_operation_case13</a> [in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#eval_static_operation_case14">eval_static_operation_case14</a> [in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#eval_static_operation_case15">eval_static_operation_case15</a> [in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#eval_static_operation_case16">eval_static_operation_case16</a> [in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#eval_static_operation_case17">eval_static_operation_case17</a> [in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#eval_static_operation_case18">eval_static_operation_case18</a> [in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#eval_static_operation_case19">eval_static_operation_case19</a> [in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#eval_static_operation_case2">eval_static_operation_case2</a> [in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#eval_static_operation_case20">eval_static_operation_case20</a> [in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#eval_static_operation_case21">eval_static_operation_case21</a> [in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#eval_static_operation_case22">eval_static_operation_case22</a> [in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#eval_static_operation_case23">eval_static_operation_case23</a> [in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#eval_static_operation_case24">eval_static_operation_case24</a> [in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#eval_static_operation_case25">eval_static_operation_case25</a> [in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#eval_static_operation_case26">eval_static_operation_case26</a> [in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#eval_static_operation_case27">eval_static_operation_case27</a> [in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#eval_static_operation_case28">eval_static_operation_case28</a> [in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#eval_static_operation_case29">eval_static_operation_case29</a> [in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#eval_static_operation_case3">eval_static_operation_case3</a> [in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#eval_static_operation_case30">eval_static_operation_case30</a> [in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#eval_static_operation_case31">eval_static_operation_case31</a> [in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#eval_static_operation_case32">eval_static_operation_case32</a> [in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#eval_static_operation_case33">eval_static_operation_case33</a> [in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#eval_static_operation_case34">eval_static_operation_case34</a> [in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#eval_static_operation_case35">eval_static_operation_case35</a> [in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#eval_static_operation_case36">eval_static_operation_case36</a> [in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#eval_static_operation_case37">eval_static_operation_case37</a> [in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#eval_static_operation_case38">eval_static_operation_case38</a> [in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#eval_static_operation_case39">eval_static_operation_case39</a> [in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#eval_static_operation_case4">eval_static_operation_case4</a> [in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#eval_static_operation_case40">eval_static_operation_case40</a> [in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#eval_static_operation_case41">eval_static_operation_case41</a> [in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#eval_static_operation_case42">eval_static_operation_case42</a> [in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#eval_static_operation_case43">eval_static_operation_case43</a> [in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#eval_static_operation_case44">eval_static_operation_case44</a> [in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#eval_static_operation_case45">eval_static_operation_case45</a> [in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#eval_static_operation_case46">eval_static_operation_case46</a> [in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#eval_static_operation_case47">eval_static_operation_case47</a> [in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#eval_static_operation_case6">eval_static_operation_case6</a> [in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#eval_static_operation_case7">eval_static_operation_case7</a> [in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#eval_static_operation_case8">eval_static_operation_case8</a> [in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#eval_static_operation_case9">eval_static_operation_case9</a> [in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#eval_static_operation_default">eval_static_operation_default</a> [in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Cminor.html#Evar">Evar</a> [in <a href="backend.Cminor.html">backend.Cminor</a>]<br/>
+<a href="backend.Csharpminor.html#Evar">Evar</a> [in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.LTL.html#exec_Bgetstack">exec_Bgetstack</a> [in <a href="backend.LTL.html">backend.LTL</a>]<br/>
+<a href="backend.RTL.html#exec_Iload">exec_Iload</a> [in <a href="backend.RTL.html">backend.RTL</a>]<br/>
+<a href="backend.RTL.html#exec_Inop">exec_Inop</a> [in <a href="backend.RTL.html">backend.RTL</a>]<br/>
+<a href="backend.RTL.html#exec_Iop">exec_Iop</a> [in <a href="backend.RTL.html">backend.RTL</a>]<br/>
+<a href="backend.Linear.html#exec_Lgetstack">exec_Lgetstack</a> [in <a href="backend.Linear.html">backend.Linear</a>]<br/>
+<a href="backend.Mach.html#exec_Mgetparam">exec_Mgetparam</a> [in <a href="backend.Mach.html">backend.Mach</a>]<br/>
+<a href="backend.Mach.html#exec_Mgetstack">exec_Mgetstack</a> [in <a href="backend.Mach.html">backend.Mach</a>]<br/>
+<a href="backend.Machabstr.html#exec_Mgetstack">exec_Mgetstack</a> [in <a href="backend.Machabstr.html">backend.Machabstr</a>]<br/>
+<a href="backend.Mach.html#exec_Mlabel">exec_Mlabel</a> [in <a href="backend.Mach.html">backend.Mach</a>]<br/>
+<a href="backend.Machabstr.html#exec_Mlabel">exec_Mlabel</a> [in <a href="backend.Machabstr.html">backend.Machabstr</a>]<br/>
+<a href="backend.Mach.html#exec_Msetstack">exec_Msetstack</a> [in <a href="backend.Mach.html">backend.Mach</a>]<br/>
+<a href="backend.PPC.html#exec_one">exec_one</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#exec_refl">exec_refl</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#exec_step_intro">exec_step_intro</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPCgenproof1.html#exec_straight_refl">exec_straight_refl</a> [in <a href="backend.PPCgenproof1.html">backend.PPCgenproof1</a>]<br/>
+<a href="backend.PPCgenproof1.html#exec_straight_step">exec_straight_step</a> [in <a href="backend.PPCgenproof1.html">backend.PPCgenproof1</a>]<br/>
+<a href="backend.PPC.html#exec_trans">exec_trans</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<br/><br/><a name="constructor_F"></a><h2>F </h2>
+<a href="backend.Stacking.html#FI_arg">FI_arg</a> [in <a href="backend.Stacking.html">backend.Stacking</a>]<br/>
+<a href="backend.Stacking.html#FI_local">FI_local</a> [in <a href="backend.Stacking.html">backend.Stacking</a>]<br/>
+<a href="backend.Stacking.html#FI_saved_float">FI_saved_float</a> [in <a href="backend.Stacking.html">backend.Stacking</a>]<br/>
+<a href="backend.Stacking.html#FI_saved_int">FI_saved_int</a> [in <a href="backend.Stacking.html">backend.Stacking</a>]<br/>
+<a href="backend.PPC.html#FPR0">FPR0</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#FPR1">FPR1</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#FPR10">FPR10</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#FPR11">FPR11</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#FPR12">FPR12</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#FPR13">FPR13</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#FPR14">FPR14</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#FPR15">FPR15</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#FPR16">FPR16</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#FPR17">FPR17</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#FPR18">FPR18</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#FPR19">FPR19</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#FPR2">FPR2</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#FPR20">FPR20</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#FPR21">FPR21</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#FPR22">FPR22</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#FPR23">FPR23</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#FPR24">FPR24</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#FPR25">FPR25</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#FPR26">FPR26</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#FPR27">FPR27</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#FPR28">FPR28</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#FPR29">FPR29</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#FPR3">FPR3</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#FPR30">FPR30</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#FPR31">FPR31</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#FPR4">FPR4</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#FPR5">FPR5</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#FPR6">FPR6</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#FPR7">FPR7</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#FPR8">FPR8</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#FPR9">FPR9</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#FR">FR</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.Machabstr2mach.html#frame_match_intro">frame_match_intro</a> [in <a href="backend.Machabstr2mach.html">backend.Machabstr2mach</a>]<br/>
+<a href="backend.Locations.html#FT1">FT1</a> [in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Locations.html#FT2">FT2</a> [in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Locations.html#FT3">FT3</a> [in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Locations.html#F1">F1</a> [in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Locations.html#F10">F10</a> [in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Locations.html#F14">F14</a> [in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Locations.html#F15">F15</a> [in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Locations.html#F16">F16</a> [in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Locations.html#F17">F17</a> [in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Locations.html#F18">F18</a> [in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Locations.html#F19">F19</a> [in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Locations.html#F2">F2</a> [in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Locations.html#F20">F20</a> [in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Locations.html#F21">F21</a> [in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Locations.html#F22">F22</a> [in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Locations.html#F23">F23</a> [in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Locations.html#F24">F24</a> [in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Locations.html#F25">F25</a> [in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Locations.html#F26">F26</a> [in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Locations.html#F27">F27</a> [in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Locations.html#F28">F28</a> [in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Locations.html#F29">F29</a> [in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Locations.html#F3">F3</a> [in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Locations.html#F30">F30</a> [in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Locations.html#F31">F31</a> [in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Locations.html#F4">F4</a> [in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Locations.html#F5">F5</a> [in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Locations.html#F6">F6</a> [in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Locations.html#F7">F7</a> [in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Locations.html#F8">F8</a> [in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Locations.html#F9">F9</a> [in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<br/><br/><a name="constructor_G"></a><h2>G </h2>
+<a href="backend.Machabstr.html#get_slot_intro">get_slot_intro</a> [in <a href="backend.Machabstr.html">backend.Machabstr</a>]<br/>
+<a href="backend.PPC.html#GPR0">GPR0</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#GPR1">GPR1</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#GPR10">GPR10</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#GPR11">GPR11</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#GPR12">GPR12</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#GPR13">GPR13</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#GPR14">GPR14</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#GPR15">GPR15</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#GPR16">GPR16</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#GPR17">GPR17</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#GPR18">GPR18</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#GPR19">GPR19</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#GPR2">GPR2</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#GPR20">GPR20</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#GPR21">GPR21</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#GPR22">GPR22</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#GPR23">GPR23</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#GPR24">GPR24</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#GPR25">GPR25</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#GPR26">GPR26</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#GPR27">GPR27</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#GPR28">GPR28</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#GPR29">GPR29</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#GPR3">GPR3</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#GPR30">GPR30</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#GPR31">GPR31</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#GPR4">GPR4</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#GPR5">GPR5</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#GPR6">GPR6</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#GPR7">GPR7</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#GPR8">GPR8</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#GPR9">GPR9</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<br/><br/><a name="constructor_I"></a><h2>I </h2>
+<a href="backend.Locations.html#Incoming">Incoming</a> [in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="lib.Lattice.html#Inj">Inj</a> [in <a href="lib.Lattice.html">lib.Lattice</a>]<br/>
+<a href="backend.RTL.html#Inop">Inop</a> [in <a href="backend.RTL.html">backend.RTL</a>]<br/>
+<a href="backend.Cmconstrproof.html#insert_lenv_S">insert_lenv_S</a> [in <a href="backend.Cmconstrproof.html">backend.Cmconstrproof</a>]<br/>
+<a href="backend.Cmconstrproof.html#insert_lenv_0">insert_lenv_0</a> [in <a href="backend.Cmconstrproof.html">backend.Cmconstrproof</a>]<br/>
+<a href="backend.PPC.html#IR">IR</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.Linearizeproof.html#is_tail_cons">is_tail_cons</a> [in <a href="backend.Linearizeproof.html">backend.Linearizeproof</a>]<br/>
+<a href="backend.Linearizeproof.html#is_tail_refl">is_tail_refl</a> [in <a href="backend.Linearizeproof.html">backend.Linearizeproof</a>]<br/>
+<a href="backend.Locations.html#IT1">IT1</a> [in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Locations.html#IT2">IT2</a> [in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Locations.html#IT3">IT3</a> [in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<br/><br/><a name="constructor_L"></a><h2>L </h2>
+<a href="backend.Linear.html#Lcall">Lcall</a> [in <a href="backend.Linear.html">backend.Linear</a>]<br/>
+<a href="backend.Linear.html#Lcond">Lcond</a> [in <a href="backend.Linear.html">backend.Linear</a>]<br/>
+<a href="lib.Maps.html#Leaf">Leaf</a> [in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Inclusion.html#leaf">leaf</a> [in <a href="lib.Inclusion.html">lib.Inclusion</a>]<br/>
+<a href="backend.Linear.html#Lgetstack">Lgetstack</a> [in <a href="backend.Linear.html">backend.Linear</a>]<br/>
+<a href="backend.Linear.html#Lgoto">Lgoto</a> [in <a href="backend.Linear.html">backend.Linear</a>]<br/>
+<a href="lib.Coqlib.html#list_forall2_cons">list_forall2_cons</a> [in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="lib.Coqlib.html#list_forall2_nil">list_forall2_nil</a> [in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="lib.Coqlib.html#list_norepet_cons">list_norepet_cons</a> [in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="lib.Coqlib.html#list_norepet_nil">list_norepet_nil</a> [in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="backend.Linear.html#Llabel">Llabel</a> [in <a href="backend.Linear.html">backend.Linear</a>]<br/>
+<a href="backend.Linear.html#Lload">Lload</a> [in <a href="backend.Linear.html">backend.Linear</a>]<br/>
+<a href="backend.CSE.html#Load">Load</a> [in <a href="backend.CSE.html">backend.CSE</a>]<br/>
+<a href="backend.Locations.html#Local">Local</a> [in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Linear.html#Lop">Lop</a> [in <a href="backend.Linear.html">backend.Linear</a>]<br/>
+<a href="backend.PPC.html#LR">LR</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.Linear.html#Lreturn">Lreturn</a> [in <a href="backend.Linear.html">backend.Linear</a>]<br/>
+<a href="backend.Linear.html#Lsetstack">Lsetstack</a> [in <a href="backend.Linear.html">backend.Linear</a>]<br/>
+<a href="backend.Linear.html#Lstore">Lstore</a> [in <a href="backend.Linear.html">backend.Linear</a>]<br/>
+<a href="backend.Csharpminor.html#LVarray">LVarray</a> [in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Csharpminor.html#LVscalar">LVscalar</a> [in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<br/><br/><a name="constructor_M"></a><h2>M </h2>
+<a href="backend.Mach.html#Mcall">Mcall</a> [in <a href="backend.Mach.html">backend.Mach</a>]<br/>
+<a href="backend.Mach.html#Mcond">Mcond</a> [in <a href="backend.Mach.html">backend.Mach</a>]<br/>
+<a href="backend.Cminorgenproof.html#mcs_cons">mcs_cons</a> [in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.Cminorgenproof.html#mcs_nil">mcs_nil</a> [in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.AST.html#Mfloat32">Mfloat32</a> [in <a href="backend.AST.html">backend.AST</a>]<br/>
+<a href="backend.AST.html#Mfloat64">Mfloat64</a> [in <a href="backend.AST.html">backend.AST</a>]<br/>
+<a href="backend.Mach.html#Mgetparam">Mgetparam</a> [in <a href="backend.Mach.html">backend.Mach</a>]<br/>
+<a href="backend.Mach.html#Mgetstack">Mgetstack</a> [in <a href="backend.Mach.html">backend.Mach</a>]<br/>
+<a href="backend.Mach.html#Mgoto">Mgoto</a> [in <a href="backend.Mach.html">backend.Mach</a>]<br/>
+<a href="backend.AST.html#Mint16signed">Mint16signed</a> [in <a href="backend.AST.html">backend.AST</a>]<br/>
+<a href="backend.AST.html#Mint16unsigned">Mint16unsigned</a> [in <a href="backend.AST.html">backend.AST</a>]<br/>
+<a href="backend.AST.html#Mint32">Mint32</a> [in <a href="backend.AST.html">backend.AST</a>]<br/>
+<a href="backend.AST.html#Mint8signed">Mint8signed</a> [in <a href="backend.AST.html">backend.AST</a>]<br/>
+<a href="backend.AST.html#Mint8unsigned">Mint8unsigned</a> [in <a href="backend.AST.html">backend.AST</a>]<br/>
+<a href="backend.Mach.html#Mlabel">Mlabel</a> [in <a href="backend.Mach.html">backend.Mach</a>]<br/>
+<a href="backend.Mach.html#Mload">Mload</a> [in <a href="backend.Mach.html">backend.Mach</a>]<br/>
+<a href="backend.Mach.html#Mop">Mop</a> [in <a href="backend.Mach.html">backend.Mach</a>]<br/>
+<a href="backend.Mach.html#Mreturn">Mreturn</a> [in <a href="backend.Mach.html">backend.Mach</a>]<br/>
+<a href="backend.Mach.html#Msetstack">Msetstack</a> [in <a href="backend.Mach.html">backend.Mach</a>]<br/>
+<a href="backend.Mach.html#Mstore">Mstore</a> [in <a href="backend.Mach.html">backend.Mach</a>]<br/>
+<a href="backend.Cmconstr.html#mulimm_case1">mulimm_case1</a> [in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Cmconstr.html#mulimm_case2">mulimm_case2</a> [in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Cmconstr.html#mulimm_default">mulimm_default</a> [in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Cmconstr.html#mul_case1">mul_case1</a> [in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Cmconstr.html#mul_case2">mul_case2</a> [in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Cmconstr.html#mul_default">mul_default</a> [in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<br/><br/><a name="constructor_N"></a><h2>N </h2>
+<a href="backend.Op.html#n">n</a> [in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="lib.Maps.html#Node">Node</a> [in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Inclusion.html#node">node</a> [in <a href="lib.Inclusion.html">lib.Inclusion</a>]<br/>
+<a href="backend.Locations.html#norepet_cons">norepet_cons</a> [in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Locations.html#norepet_nil">norepet_nil</a> [in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Cmconstr.html#notint_case1">notint_case1</a> [in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Cmconstr.html#notint_case2">notint_case2</a> [in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Cmconstr.html#notint_case3">notint_case3</a> [in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Cmconstr.html#notint_default">notint_default</a> [in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Machabstr2mach.html#notin_callstack_cons">notin_callstack_cons</a> [in <a href="backend.Machabstr2mach.html">backend.Machabstr2mach</a>]<br/>
+<a href="backend.Machabstr2mach.html#notin_callstack_nil">notin_callstack_nil</a> [in <a href="backend.Machabstr2mach.html">backend.Machabstr2mach</a>]<br/>
+<a href="backend.Constprop.html#Novalue">Novalue</a> [in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<br/><br/><a name="constructor_O"></a><h2>O </h2>
+<a href="backend.Op.html#Oabsf">Oabsf</a> [in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Csharpminor.html#Oabsf">Oabsf</a> [in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Csharpminor.html#Oadd">Oadd</a> [in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Op.html#Oadd">Oadd</a> [in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Csharpminor.html#Oaddf">Oaddf</a> [in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Op.html#Oaddf">Oaddf</a> [in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Op.html#Oaddimm">Oaddimm</a> [in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Op.html#Oaddrstack">Oaddrstack</a> [in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Op.html#Oaddrsymbol">Oaddrsymbol</a> [in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Op.html#Oand">Oand</a> [in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Csharpminor.html#Oand">Oand</a> [in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Op.html#Oandimm">Oandimm</a> [in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Csharpminor.html#Ocast16signed">Ocast16signed</a> [in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Op.html#Ocast16signed">Ocast16signed</a> [in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Csharpminor.html#Ocast16unsigned">Ocast16unsigned</a> [in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Csharpminor.html#Ocast8signed">Ocast8signed</a> [in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Op.html#Ocast8signed">Ocast8signed</a> [in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Csharpminor.html#Ocast8unsigned">Ocast8unsigned</a> [in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Op.html#Ocmp">Ocmp</a> [in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Csharpminor.html#Ocmp">Ocmp</a> [in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Csharpminor.html#Ocmpf">Ocmpf</a> [in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Csharpminor.html#Ocmpu">Ocmpu</a> [in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Op.html#Odiv">Odiv</a> [in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Csharpminor.html#Odiv">Odiv</a> [in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Op.html#Odivf">Odivf</a> [in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Csharpminor.html#Odivf">Odivf</a> [in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Csharpminor.html#Odivu">Odivu</a> [in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Op.html#Odivu">Odivu</a> [in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Op.html#Ofloatconst">Ofloatconst</a> [in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Csharpminor.html#Ofloatconst">Ofloatconst</a> [in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Op.html#Ofloatofint">Ofloatofint</a> [in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Csharpminor.html#Ofloatofint">Ofloatofint</a> [in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Csharpminor.html#Ofloatofintu">Ofloatofintu</a> [in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Op.html#Ofloatofintu">Ofloatofintu</a> [in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Csharpminor.html#Ointconst">Ointconst</a> [in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Op.html#Ointconst">Ointconst</a> [in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Csharpminor.html#Ointoffloat">Ointoffloat</a> [in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Op.html#Ointoffloat">Ointoffloat</a> [in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.RTLgen.html#OK">OK</a> [in <a href="backend.RTLgen.html">backend.RTLgen</a>]<br/>
+<a href="backend.PPC.html#OK">OK</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.Csharpminor.html#Omod">Omod</a> [in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Csharpminor.html#Omodu">Omodu</a> [in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Op.html#Omove">Omove</a> [in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Csharpminor.html#Omul">Omul</a> [in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Op.html#Omul">Omul</a> [in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Op.html#Omuladdf">Omuladdf</a> [in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Op.html#Omulf">Omulf</a> [in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Csharpminor.html#Omulf">Omulf</a> [in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Op.html#Omulimm">Omulimm</a> [in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Op.html#Omulsubf">Omulsubf</a> [in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Op.html#Onand">Onand</a> [in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Csharpminor.html#Onegf">Onegf</a> [in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Op.html#Onegf">Onegf</a> [in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Op.html#Onor">Onor</a> [in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Csharpminor.html#Onotint">Onotint</a> [in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Op.html#Onxor">Onxor</a> [in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Op.html#Oor">Oor</a> [in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Csharpminor.html#Oor">Oor</a> [in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Op.html#Oorimm">Oorimm</a> [in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.CSE.html#Op">Op</a> [in <a href="backend.CSE.html">backend.CSE</a>]<br/>
+<a href="backend.Constprop.html#op_strength_reduction_case1">op_strength_reduction_case1</a> [in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#op_strength_reduction_case10">op_strength_reduction_case10</a> [in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#op_strength_reduction_case11">op_strength_reduction_case11</a> [in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#op_strength_reduction_case12">op_strength_reduction_case12</a> [in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#op_strength_reduction_case2">op_strength_reduction_case2</a> [in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#op_strength_reduction_case3">op_strength_reduction_case3</a> [in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#op_strength_reduction_case4">op_strength_reduction_case4</a> [in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#op_strength_reduction_case5">op_strength_reduction_case5</a> [in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#op_strength_reduction_case6">op_strength_reduction_case6</a> [in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#op_strength_reduction_case7">op_strength_reduction_case7</a> [in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#op_strength_reduction_case8">op_strength_reduction_case8</a> [in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#op_strength_reduction_case9">op_strength_reduction_case9</a> [in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#op_strength_reduction_default">op_strength_reduction_default</a> [in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Op.html#Orolm">Orolm</a> [in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Cmconstr.html#or_case1">or_case1</a> [in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Cmconstr.html#or_default">or_default</a> [in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Csharpminor.html#Oshl">Oshl</a> [in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Op.html#Oshl">Oshl</a> [in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Op.html#Oshr">Oshr</a> [in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Csharpminor.html#Oshr">Oshr</a> [in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Op.html#Oshrimm">Oshrimm</a> [in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Op.html#Oshru">Oshru</a> [in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Csharpminor.html#Oshru">Oshru</a> [in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Op.html#Oshrximm">Oshrximm</a> [in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Op.html#Osingleoffloat">Osingleoffloat</a> [in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Csharpminor.html#Osingleoffloat">Osingleoffloat</a> [in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Csharpminor.html#Osub">Osub</a> [in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Op.html#Osub">Osub</a> [in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Csharpminor.html#Osubf">Osubf</a> [in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Op.html#Osubf">Osubf</a> [in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Op.html#Osubimm">Osubimm</a> [in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Op.html#Oundef">Oundef</a> [in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Locations.html#Outgoing">Outgoing</a> [in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Csharpminor.html#Out_exit">Out_exit</a> [in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Cminor.html#Out_exit">Out_exit</a> [in <a href="backend.Cminor.html">backend.Cminor</a>]<br/>
+<a href="backend.Cminor.html#Out_normal">Out_normal</a> [in <a href="backend.Cminor.html">backend.Cminor</a>]<br/>
+<a href="backend.Csharpminor.html#Out_normal">Out_normal</a> [in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Cminor.html#Out_return">Out_return</a> [in <a href="backend.Cminor.html">backend.Cminor</a>]<br/>
+<a href="backend.Csharpminor.html#Out_return">Out_return</a> [in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Op.html#Oxor">Oxor</a> [in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Csharpminor.html#Oxor">Oxor</a> [in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Op.html#Oxorimm">Oxorimm</a> [in <a href="backend.Op.html">backend.Op</a>]<br/>
+<br/><br/><a name="constructor_P"></a><h2>P </h2>
+<a href="backend.PPC.html#Padd">Padd</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Paddi">Paddi</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Paddis">Paddis</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Paddze">Paddze</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Pallocframe">Pallocframe</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Pandc">Pandc</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Pandis_">Pandis_</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Pandi_">Pandi_</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Pand_">Pand_</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Pb">Pb</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Pbctr">Pbctr</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Pbctrl">Pbctrl</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Pbf">Pbf</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Pbl">Pbl</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Pblr">Pblr</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Pbt">Pbt</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#PC">PC</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Pcmplw">Pcmplw</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Pcmplwi">Pcmplwi</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Pcmpw">Pcmpw</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Pcmpwi">Pcmpwi</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Pcror">Pcror</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Pdivw">Pdivw</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Pdivwu">Pdivwu</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Peqv">Peqv</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Pextsb">Pextsb</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Pextsh">Pextsh</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Pfabs">Pfabs</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Pfadd">Pfadd</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Pfcmpu">Pfcmpu</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Pfcti">Pfcti</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Pfdiv">Pfdiv</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Pfmadd">Pfmadd</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Pfmr">Pfmr</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Pfmsub">Pfmsub</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Pfmul">Pfmul</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Pfneg">Pfneg</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Pfreeframe">Pfreeframe</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Pfrsp">Pfrsp</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Pfsub">Pfsub</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Pfundef">Pfundef</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Pictf">Pictf</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Piuctf">Piuctf</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Piundef">Piundef</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Plabel">Plabel</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Plbz">Plbz</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Plbzx">Plbzx</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Plfd">Plfd</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Plfdx">Plfdx</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Plfi">Plfi</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Plfs">Plfs</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Plfsx">Plfsx</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Plha">Plha</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Plhax">Plhax</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Plhz">Plhz</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Plhzx">Plhzx</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Plwz">Plwz</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Plwzx">Plwzx</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Pmfcrbit">Pmfcrbit</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Pmflr">Pmflr</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Pmr">Pmr</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Pmtctr">Pmtctr</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Pmtlr">Pmtlr</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Pmulli">Pmulli</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Pmullw">Pmullw</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Pnand">Pnand</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Pnor">Pnor</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Por">Por</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Porc">Porc</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Pori">Pori</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Poris">Poris</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Prlwinm">Prlwinm</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Pslw">Pslw</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Psraw">Psraw</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Psrawi">Psrawi</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Psrw">Psrw</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Pstb">Pstb</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Pstbx">Pstbx</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Pstfd">Pstfd</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Pstfdx">Pstfdx</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Pstfs">Pstfs</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Pstfsx">Pstfsx</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Psth">Psth</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Psthx">Psthx</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Pstw">Pstw</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Pstwx">Pstwx</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Psubfc">Psubfc</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Psubfic">Psubfic</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Pxor">Pxor</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Pxori">Pxori</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Pxoris">Pxoris</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<br/><br/><a name="constructor_R"></a><h2>R </h2>
+<a href="backend.Locations.html#R">R</a> [in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.LTL.html#Return">Return</a> [in <a href="backend.LTL.html">backend.LTL</a>]<br/>
+<a href="backend.RTLgenproof1.html#return_reg_ok_none">return_reg_ok_none</a> [in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.RTLgenproof1.html#return_reg_ok_some">return_reg_ok_some</a> [in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="lib.Integers.html#RLW_Sbad">RLW_Sbad</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#RLW_S0">RLW_S0</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#RLW_S1">RLW_S1</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#RLW_S2">RLW_S2</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#RLW_S3">RLW_S3</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#RLW_S4">RLW_S4</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#RLW_S5">RLW_S5</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#RLW_S6">RLW_S6</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Cmconstr.html#rolm_case1">rolm_case1</a> [in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Cmconstr.html#rolm_case2">rolm_case2</a> [in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Cmconstr.html#rolm_default">rolm_default</a> [in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Locations.html#R10">R10</a> [in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Locations.html#R13">R13</a> [in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Locations.html#R14">R14</a> [in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Locations.html#R15">R15</a> [in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Locations.html#R16">R16</a> [in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Locations.html#R17">R17</a> [in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Locations.html#R18">R18</a> [in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Locations.html#R19">R19</a> [in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Op.html#r2">r2</a> [in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Op.html#r2">r2</a> [in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Locations.html#R20">R20</a> [in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Locations.html#R21">R21</a> [in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Locations.html#R22">R22</a> [in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Locations.html#R23">R23</a> [in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Locations.html#R24">R24</a> [in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Locations.html#R25">R25</a> [in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Locations.html#R26">R26</a> [in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Locations.html#R27">R27</a> [in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Locations.html#R28">R28</a> [in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Locations.html#R29">R29</a> [in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Locations.html#R3">R3</a> [in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Locations.html#R30">R30</a> [in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Locations.html#R31">R31</a> [in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Locations.html#R4">R4</a> [in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Locations.html#R5">R5</a> [in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Locations.html#R6">R6</a> [in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Locations.html#R7">R7</a> [in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Locations.html#R8">R8</a> [in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Locations.html#R9">R9</a> [in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<br/><br/><a name="constructor_S"></a><h2>S </h2>
+<a href="backend.Locations.html#S">S</a> [in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Cminor.html#Sblock">Sblock</a> [in <a href="backend.Cminor.html">backend.Cminor</a>]<br/>
+<a href="backend.Csharpminor.html#Sblock">Sblock</a> [in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Cminor.html#Scons">Scons</a> [in <a href="backend.Cminor.html">backend.Cminor</a>]<br/>
+<a href="backend.Csharpminor.html#Scons">Scons</a> [in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Machabstr.html#set_slot_intro">set_slot_intro</a> [in <a href="backend.Machabstr.html">backend.Machabstr</a>]<br/>
+<a href="backend.Cminor.html#Sexit">Sexit</a> [in <a href="backend.Cminor.html">backend.Cminor</a>]<br/>
+<a href="backend.Csharpminor.html#Sexit">Sexit</a> [in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Cminor.html#Sexpr">Sexpr</a> [in <a href="backend.Cminor.html">backend.Cminor</a>]<br/>
+<a href="backend.Csharpminor.html#Sexpr">Sexpr</a> [in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Cmconstr.html#shift_case1">shift_case1</a> [in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Cmconstr.html#shift_default">shift_default</a> [in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Csharpminor.html#Sifthenelse">Sifthenelse</a> [in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Cminor.html#Sifthenelse">Sifthenelse</a> [in <a href="backend.Cminor.html">backend.Cminor</a>]<br/>
+<a href="backend.Mem.html#Size16">Size16</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#Size32">Size32</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#Size64">Size64</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#Size8">Size8</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Csharpminor.html#Sloop">Sloop</a> [in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Cminor.html#Sloop">Sloop</a> [in <a href="backend.Cminor.html">backend.Cminor</a>]<br/>
+<a href="backend.Csharpminor.html#Snil">Snil</a> [in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Cminor.html#Snil">Snil</a> [in <a href="backend.Cminor.html">backend.Cminor</a>]<br/>
+<a href="backend.Csharpminor.html#Sreturn">Sreturn</a> [in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Cminor.html#Sreturn">Sreturn</a> [in <a href="backend.Cminor.html">backend.Cminor</a>]<br/>
+<a href="backend.RTLgenproof1.html#state_incr_intro">state_incr_intro</a> [in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.Parallelmove.html#stepp_refl">stepp_refl</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#stepp_trans">stepp_trans</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#step_loop">step_loop</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#step_nop">step_nop</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#step_pop">step_pop</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#step_push">step_push</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#step_start">step_start</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Cmconstr.html#subf_case1">subf_case1</a> [in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Cmconstr.html#subf_default">subf_default</a> [in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Cmconstr.html#sub_case1">sub_case1</a> [in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Cmconstr.html#sub_case2">sub_case2</a> [in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Cmconstr.html#sub_case3">sub_case3</a> [in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Cmconstr.html#sub_case4">sub_case4</a> [in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Cmconstr.html#sub_default">sub_default</a> [in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<br/><br/><a name="constructor_T"></a><h2>T </h2>
+<a href="backend.RTLgenproof1.html#target_regs_cons">target_regs_cons</a> [in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.RTLgenproof1.html#target_regs_nil">target_regs_nil</a> [in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.RTLgenproof1.html#target_reg_immut_var">target_reg_immut_var</a> [in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.AST.html#Tfloat">Tfloat</a> [in <a href="backend.AST.html">backend.AST</a>]<br/>
+<a href="backend.AST.html#Tint">Tint</a> [in <a href="backend.AST.html">backend.AST</a>]<br/>
+<a href="backend.RTLtyping.html#tReg">tReg</a> [in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.RTLtyping.html#tTy">tTy</a> [in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<br/><br/><a name="constructor_U"></a><h2>U </h2>
+<a href="backend.Mem.html#Undef">Undef</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<br/><br/><a name="constructor_V"></a><h2>V </h2>
+<a href="backend.Mem.html#val_cons_inject">val_cons_inject</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#val_content_inject_base">val_content_inject_base</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#val_content_inject_8">val_content_inject_8</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#val_inject_float">val_inject_float</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#val_inject_int">val_inject_int</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#val_inject_ptr">val_inject_ptr</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#val_nil_inject">val_nil_inject</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Cminorgenproof.html#vars_vals_cons">vars_vals_cons</a> [in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.Cminorgenproof.html#vars_vals_nil">vars_vals_nil</a> [in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.Cminorgen.html#Var_global">Var_global</a> [in <a href="backend.Cminorgen.html">backend.Cminorgen</a>]<br/>
+<a href="backend.Cminorgen.html#Var_local">Var_local</a> [in <a href="backend.Cminorgen.html">backend.Cminorgen</a>]<br/>
+<a href="backend.Cminorgen.html#Var_stack_array">Var_stack_array</a> [in <a href="backend.Cminorgen.html">backend.Cminorgen</a>]<br/>
+<a href="backend.Cminorgen.html#Var_stack_scalar">Var_stack_scalar</a> [in <a href="backend.Cminorgen.html">backend.Cminorgen</a>]<br/>
+<a href="backend.Values.html#Vfloat">Vfloat</a> [in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.Values.html#Vint">Vint</a> [in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.Constpropproof.html#vlma_cons">vlma_cons</a> [in <a href="backend.Constpropproof.html">backend.Constpropproof</a>]<br/>
+<a href="backend.Constpropproof.html#vlma_nil">vlma_nil</a> [in <a href="backend.Constpropproof.html">backend.Constpropproof</a>]<br/>
+<a href="backend.Values.html#Vptr">Vptr</a> [in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.Values.html#Vundef">Vundef</a> [in <a href="backend.Values.html">backend.Values</a>]<br/>
+<br/><br/><a name="constructor_W"></a><h2>W </h2>
+<a href="backend.LTLtyping.html#wt_Bgetstack">wt_Bgetstack</a> [in <a href="backend.LTLtyping.html">backend.LTLtyping</a>]<br/>
+<a href="backend.LTLtyping.html#wt_Bop">wt_Bop</a> [in <a href="backend.LTLtyping.html">backend.LTLtyping</a>]<br/>
+<a href="backend.LTLtyping.html#wt_Bopmove">wt_Bopmove</a> [in <a href="backend.LTLtyping.html">backend.LTLtyping</a>]<br/>
+<a href="backend.LTLtyping.html#wt_Bopundef">wt_Bopundef</a> [in <a href="backend.LTLtyping.html">backend.LTLtyping</a>]<br/>
+<a href="backend.LTLtyping.html#wt_Bsetstack">wt_Bsetstack</a> [in <a href="backend.LTLtyping.html">backend.LTLtyping</a>]<br/>
+<a href="backend.RTLtyping.html#wt_Inop">wt_Inop</a> [in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.RTLtyping.html#wt_Iop">wt_Iop</a> [in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.RTLtyping.html#wt_Iopmove">wt_Iopmove</a> [in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.RTLtyping.html#wt_Iopundef">wt_Iopundef</a> [in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.Lineartyping.html#wt_Lgetstack">wt_Lgetstack</a> [in <a href="backend.Lineartyping.html">backend.Lineartyping</a>]<br/>
+<a href="backend.Lineartyping.html#wt_Lop">wt_Lop</a> [in <a href="backend.Lineartyping.html">backend.Lineartyping</a>]<br/>
+<a href="backend.Lineartyping.html#wt_Lopmove">wt_Lopmove</a> [in <a href="backend.Lineartyping.html">backend.Lineartyping</a>]<br/>
+<a href="backend.Lineartyping.html#wt_Lopundef">wt_Lopundef</a> [in <a href="backend.Lineartyping.html">backend.Lineartyping</a>]<br/>
+<a href="backend.Lineartyping.html#wt_Lsetstack">wt_Lsetstack</a> [in <a href="backend.Lineartyping.html">backend.Lineartyping</a>]<br/>
+<a href="backend.Machtyping.html#wt_Mgetstack">wt_Mgetstack</a> [in <a href="backend.Machtyping.html">backend.Machtyping</a>]<br/>
+<a href="backend.Machtyping.html#wt_Mlabel">wt_Mlabel</a> [in <a href="backend.Machtyping.html">backend.Machtyping</a>]<br/>
+<a href="backend.Machtyping.html#wt_Msetstack">wt_Msetstack</a> [in <a href="backend.Machtyping.html">backend.Machtyping</a>]<br/>
+<br/><br/><a name="constructor__"></a><h2>_ </h2>
+<a href="backend.Lineartyping.html#_">_</a> [in <a href="backend.Lineartyping.html">backend.Lineartyping</a>]<br/>
+<a href="backend.LTLtyping.html#_">_</a> [in <a href="backend.LTLtyping.html">backend.LTLtyping</a>]<br/>
+<br/><br/><hr/>
+<h1>Inductive Index</h1>
+<a name="inductive_A"></a><h2>A </h2>
+<a href="backend.Op.html#a">a</a> [in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Op.html#a">a</a> [in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Cmconstr.html#addf_cases">addf_cases</a> [in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Cmconstr.html#addimm_cases">addimm_cases</a> [in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Op.html#addressing">addressing</a> [in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Cmconstr.html#addressing_cases">addressing_cases</a> [in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Constprop.html#addr_strength_reduction_cases">addr_strength_reduction_cases</a> [in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Cmconstr.html#add_cases">add_cases</a> [in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Stackingproof.html#agree">agree</a> [in <a href="backend.Stackingproof.html">backend.Stackingproof</a>]<br/>
+<a href="backend.Csharpminor.html#alloc_variables">alloc_variables</a> [in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Constprop.html#approx">approx</a> [in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<br/><br/><a name="inductive_B"></a><h2>B </h2>
+<a href="lib.Inclusion.html#bin">bin</a> [in <a href="lib.Inclusion.html">lib.Inclusion</a>]<br/>
+<a href="backend.Csharpminor.html#bind_parameters">bind_parameters</a> [in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.LTL.html#block">block</a> [in <a href="backend.LTL.html">backend.LTL</a>]<br/>
+<a href="backend.Mem.html#block_contents">block_contents</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#block_contents_inject">block_contents_inject</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Values.html#bool_of_val">bool_of_val</a> [in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.Lineartyping.html#bounds">bounds</a> [in <a href="backend.Lineartyping.html">backend.Lineartyping</a>]<br/>
+<br/><br/><a name="inductive_C"></a><h2>C </h2>
+<a href="backend.Machabstr2mach.html#callstack_dom">callstack_dom</a> [in <a href="backend.Machabstr2mach.html">backend.Machabstr2mach</a>]<br/>
+<a href="backend.Machabstr2mach.html#callstack_invariant">callstack_invariant</a> [in <a href="backend.Machabstr2mach.html">backend.Machabstr2mach</a>]<br/>
+<a href="backend.Machabstr2mach.html#callstack_linked">callstack_linked</a> [in <a href="backend.Machabstr2mach.html">backend.Machabstr2mach</a>]<br/>
+<a href="backend.AST.html#comparison">comparison</a> [in <a href="backend.AST.html">backend.AST</a>]<br/>
+<a href="backend.Cminor.html#condexpr">condexpr</a> [in <a href="backend.Cminor.html">backend.Cminor</a>]<br/>
+<a href="backend.Op.html#condition">condition</a> [in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Constprop.html#cond_strength_reduction_cases">cond_strength_reduction_cases</a> [in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.PPC.html#constant">constant</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.Mem.html#content">content</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#content_inject">content_inject</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Linearizeproof.html#cont_for_outcome">cont_for_outcome</a> [in <a href="backend.Linearizeproof.html">backend.Linearizeproof</a>]<br/>
+<a href="backend.PPC.html#crbit">crbit</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<br/><br/><a name="inductive_D"></a><h2>D </h2>
+<a href="backend.Cmconstr.html#divu_cases">divu_cases</a> [in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Parallelmove.html#dstep">dstep</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#dstepp">dstepp</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<br/><br/><a name="inductive_E"></a><h2>E </h2>
+<a href="backend.Csharpminor.html#eval_expr">eval_expr</a> [in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Cminor.html#eval_expr">eval_expr</a> [in <a href="backend.Cminor.html">backend.Cminor</a>]<br/>
+<a href="backend.Constprop.html#eval_static_condition_cases">eval_static_condition_cases</a> [in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#eval_static_operation_cases">eval_static_operation_cases</a> [in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Machabstr.html#exec_instr">exec_instr</a> [in <a href="backend.Machabstr.html">backend.Machabstr</a>]<br/>
+<a href="backend.RTL.html#exec_instr">exec_instr</a> [in <a href="backend.RTL.html">backend.RTL</a>]<br/>
+<a href="backend.LTL.html#exec_instr">exec_instr</a> [in <a href="backend.LTL.html">backend.LTL</a>]<br/>
+<a href="backend.Linear.html#exec_instr">exec_instr</a> [in <a href="backend.Linear.html">backend.Linear</a>]<br/>
+<a href="backend.Mach.html#exec_instr">exec_instr</a> [in <a href="backend.Mach.html">backend.Mach</a>]<br/>
+<a href="backend.PPC.html#exec_step">exec_step</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#exec_steps">exec_steps</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPCgenproof1.html#exec_straight">exec_straight</a> [in <a href="backend.PPCgenproof1.html">backend.PPCgenproof1</a>]<br/>
+<a href="backend.Csharpminor.html#expr">expr</a> [in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Cminor.html#expr">expr</a> [in <a href="backend.Cminor.html">backend.Cminor</a>]<br/>
+<a href="backend.Csharpminor.html#exprlist">exprlist</a> [in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Cminor.html#exprlist">exprlist</a> [in <a href="backend.Cminor.html">backend.Cminor</a>]<br/>
+<br/><br/><a name="inductive_F"></a><h2>F </h2>
+<a href="backend.Cminorgenproof.html#frame">frame</a> [in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.Stacking.html#frame_env">frame_env</a> [in <a href="backend.Stacking.html">backend.Stacking</a>]<br/>
+<a href="backend.Stacking.html#frame_index">frame_index</a> [in <a href="backend.Stacking.html">backend.Stacking</a>]<br/>
+<a href="backend.Machabstr2mach.html#frame_match">frame_match</a> [in <a href="backend.Machabstr2mach.html">backend.Machabstr2mach</a>]<br/>
+<a href="backend.PPC.html#freg">freg</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.Mach.html#function">function</a> [in <a href="backend.Mach.html">backend.Mach</a>]<br/>
+<a href="backend.Csharpminor.html#function">function</a> [in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.RTL.html#function">function</a> [in <a href="backend.RTL.html">backend.RTL</a>]<br/>
+<a href="backend.LTL.html#function">function</a> [in <a href="backend.LTL.html">backend.LTL</a>]<br/>
+<a href="backend.Cminor.html#function">function</a> [in <a href="backend.Cminor.html">backend.Cminor</a>]<br/>
+<a href="backend.Linear.html#function">function</a> [in <a href="backend.Linear.html">backend.Linear</a>]<br/>
+<br/><br/><a name="inductive_G"></a><h2>G </h2>
+<a href="backend.Globalenvs.html#genv">genv</a> [in <a href="backend.Globalenvs.html">backend.Globalenvs</a>]<br/>
+<a href="backend.Machabstr.html#get_slot">get_slot</a> [in <a href="backend.Machabstr.html">backend.Machabstr</a>]<br/>
+<a href="backend.InterfGraph.html#graph">graph</a> [in <a href="backend.InterfGraph.html">backend.InterfGraph</a>]<br/>
+<br/><br/><a name="inductive_I"></a><h2>I </h2>
+<a href="backend.PPC.html#immediate">immediate</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#immediate">immediate</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#immediate">immediate</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#immediate">immediate</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#immediate">immediate</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#immediate">immediate</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.LTLtyping.html#Incoming">Incoming</a> [in <a href="backend.LTLtyping.html">backend.LTLtyping</a>]<br/>
+<a href="backend.Lineartyping.html#Incoming">Incoming</a> [in <a href="backend.Lineartyping.html">backend.Lineartyping</a>]<br/>
+<a href="backend.Cmconstrproof.html#insert_lenv">insert_lenv</a> [in <a href="backend.Cmconstrproof.html">backend.Cmconstrproof</a>]<br/>
+<a href="backend.Linear.html#instruction">instruction</a> [in <a href="backend.Linear.html">backend.Linear</a>]<br/>
+<a href="backend.PPC.html#instruction">instruction</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.RTL.html#instruction">instruction</a> [in <a href="backend.RTL.html">backend.RTL</a>]<br/>
+<a href="backend.Mach.html#instruction">instruction</a> [in <a href="backend.Mach.html">backend.Mach</a>]<br/>
+<a href="lib.Integers.html#int">int</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.PPC.html#ireg">ireg</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.Linearizeproof.html#is_tail">is_tail</a> [in <a href="backend.Linearizeproof.html">backend.Linearizeproof</a>]<br/>
+<br/><br/><a name="inductive_L"></a><h2>L </h2>
+<a href="lib.Coqlib.html#list_forall2">list_forall2</a> [in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="lib.Coqlib.html#list_norepet">list_norepet</a> [in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="backend.Locations.html#loc">loc</a> [in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Csharpminor.html#local_variable">local_variable</a> [in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<br/><br/><a name="inductive_M"></a><h2>M </h2>
+<a href="backend.RTLgen.html#mapping">mapping</a> [in <a href="backend.RTLgen.html">backend.RTLgen</a>]<br/>
+<a href="backend.RTLgenproof1.html#map_wf">map_wf</a> [in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.Cminorgenproof.html#match_callstack">match_callstack</a> [in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.Cminorgenproof.html#match_env">match_env</a> [in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.RTLgenproof1.html#match_env">match_env</a> [in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.Cminorgenproof.html#match_globalenvs">match_globalenvs</a> [in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.Cminorgenproof.html#match_var">match_var</a> [in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.Mem.html#mem">mem</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.AST.html#memory_chunk">memory_chunk</a> [in <a href="backend.AST.html">backend.AST</a>]<br/>
+<a href="backend.Mem.html#memory_size">memory_size</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#mem_inject">mem_inject</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Locations.html#mreg">mreg</a> [in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Cmconstr.html#mulimm_cases">mulimm_cases</a> [in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Cmconstr.html#mul_cases">mul_cases</a> [in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.RTLtyping.html#myT">myT</a> [in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<br/><br/><a name="inductive_N"></a><h2>N </h2>
+<a href="backend.Locations.html#norepet">norepet</a> [in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Cmconstr.html#notint_cases">notint_cases</a> [in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Machabstr2mach.html#notin_callstack">notin_callstack</a> [in <a href="backend.Machabstr2mach.html">backend.Machabstr2mach</a>]<br/>
+<a href="backend.CSE.html#numbering">numbering</a> [in <a href="backend.CSE.html">backend.CSE</a>]<br/>
+<br/><br/><a name="inductive_O"></a><h2>O </h2>
+<a href="backend.Csharpminor.html#operation">operation</a> [in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Op.html#operation">operation</a> [in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Constprop.html#op_strength_reduction_cases">op_strength_reduction_cases</a> [in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Cmconstr.html#or_cases">or_cases</a> [in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Cminor.html#outcome">outcome</a> [in <a href="backend.Cminor.html">backend.Cminor</a>]<br/>
+<a href="backend.LTL.html#outcome">outcome</a> [in <a href="backend.LTL.html">backend.LTL</a>]<br/>
+<a href="backend.PPC.html#outcome">outcome</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.Csharpminor.html#outcome">outcome</a> [in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Cminorgenproof.html#outcome_inject">outcome_inject</a> [in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<br/><br/><a name="inductive_P"></a><h2>P </h2>
+<a href="backend.PPC.html#preg">preg</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.AST.html#program">program</a> [in <a href="backend.AST.html">backend.AST</a>]<br/>
+<br/><br/><a name="inductive_R"></a><h2>R </h2>
+<a href="backend.RTLgen.html#res">res</a> [in <a href="backend.RTLgen.html">backend.RTLgen</a>]<br/>
+<a href="backend.RTLgenproof1.html#return_reg_ok">return_reg_ok</a> [in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.CSE.html#rhs">rhs</a> [in <a href="backend.CSE.html">backend.CSE</a>]<br/>
+<a href="lib.Integers.html#rlw_state">rlw_state</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Cmconstr.html#rolm_cases">rolm_cases</a> [in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<br/><br/><a name="inductive_S"></a><h2>S </h2>
+<a href="backend.Machabstr.html#set_slot">set_slot</a> [in <a href="backend.Machabstr.html">backend.Machabstr</a>]<br/>
+<a href="backend.Cmconstr.html#shift_cases">shift_cases</a> [in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.AST.html#signature">signature</a> [in <a href="backend.AST.html">backend.AST</a>]<br/>
+<a href="backend.Locations.html#slot">slot</a> [in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Kildall.html#state">state</a> [in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.RTLgen.html#state">state</a> [in <a href="backend.RTLgen.html">backend.RTLgen</a>]<br/>
+<a href="backend.Kildall.html#state">state</a> [in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.RTLgenproof1.html#state_incr">state_incr</a> [in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.Parallelmove.html#step">step</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#stepp">stepp</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Csharpminor.html#stmt">stmt</a> [in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Cminor.html#stmt">stmt</a> [in <a href="backend.Cminor.html">backend.Cminor</a>]<br/>
+<a href="backend.Csharpminor.html#stmtlist">stmtlist</a> [in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Cminor.html#stmtlist">stmtlist</a> [in <a href="backend.Cminor.html">backend.Cminor</a>]<br/>
+<a href="backend.Cmconstr.html#subf_cases">subf_cases</a> [in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Cmconstr.html#sub_cases">sub_cases</a> [in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<br/><br/><a name="inductive_T"></a><h2>T </h2>
+<a href="backend.RTLgenproof1.html#target_regs_ok">target_regs_ok</a> [in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.RTLgenproof1.html#target_reg_ok">target_reg_ok</a> [in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.PPCgenproof.html#transl_code_at_pc">transl_code_at_pc</a> [in <a href="backend.PPCgenproof.html">backend.PPCgenproof</a>]<br/>
+<a href="lib.Maps.html#tree">tree</a> [in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="backend.AST.html#typ">typ</a> [in <a href="backend.AST.html">backend.AST</a>]<br/>
+<a href="lib.Lattice.html#t_">t_</a> [in <a href="lib.Lattice.html">lib.Lattice</a>]<br/>
+<a href="lib.Lattice.html#t_">t_</a> [in <a href="lib.Lattice.html">lib.Lattice</a>]<br/>
+<br/><br/><a name="inductive_U"></a><h2>U </h2>
+<a href="lib.union_find.html#unionfind">unionfind</a> [in <a href="lib.union_find.html">lib.union_find</a>]<br/>
+<br/><br/><a name="inductive_V"></a><h2>V </h2>
+<a href="backend.Values.html#val">val</a> [in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.Mem.html#val_content_inject">val_content_inject</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#val_inject">val_inject</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#val_list_inject">val_list_inject</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Constpropproof.html#val_list_match_approx">val_list_match_approx</a> [in <a href="backend.Constpropproof.html">backend.Constpropproof</a>]<br/>
+<a href="backend.Cminorgenproof.html#vars_vals_match">vars_vals_match</a> [in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.Cminorgen.html#var_info">var_info</a> [in <a href="backend.Cminorgen.html">backend.Cminorgen</a>]<br/>
+<br/><br/><a name="inductive_W"></a><h2>W </h2>
+<a href="backend.LTLtyping.html#wt_block">wt_block</a> [in <a href="backend.LTLtyping.html">backend.LTLtyping</a>]<br/>
+<a href="backend.RTLtyping.html#wt_function">wt_function</a> [in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.Machtyping.html#wt_function">wt_function</a> [in <a href="backend.Machtyping.html">backend.Machtyping</a>]<br/>
+<a href="backend.Lineartyping.html#wt_instr">wt_instr</a> [in <a href="backend.Lineartyping.html">backend.Lineartyping</a>]<br/>
+<a href="backend.Machtyping.html#wt_instr">wt_instr</a> [in <a href="backend.Machtyping.html">backend.Machtyping</a>]<br/>
+<a href="backend.RTLtyping.html#wt_instr">wt_instr</a> [in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<br/><br/><hr/>
+<h1>Definition Index</h1>
+<a name="definition_A"></a><h2>A </h2>
+<a href="backend.Values.html#absf">absf</a> [in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.Cmconstr.html#absfloat">absfloat</a> [in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Values.html#add">add</a> [in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="lib.Sets.html#add">add</a> [in <a href="lib.Sets.html">lib.Sets</a>]<br/>
+<a href="backend.Cmconstr.html#add">add</a> [in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.RTLtyping.html#add">add</a> [in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="lib.Integers.html#add">add</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Cmconstr.html#addf">addf</a> [in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Values.html#addf">addf</a> [in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.Cmconstr.html#addf_match">addf_match</a> [in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Cmconstr.html#addf_match_aux">addf_match_aux</a> [in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.PPCgen.html#addimm">addimm</a> [in <a href="backend.PPCgen.html">backend.PPCgen</a>]<br/>
+<a href="backend.Cmconstr.html#addimm">addimm</a> [in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Cmconstr.html#addimm_match">addimm_match</a> [in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.PPCgen.html#addimm_1">addimm_1</a> [in <a href="backend.PPCgen.html">backend.PPCgen</a>]<br/>
+<a href="backend.PPCgen.html#addimm_2">addimm_2</a> [in <a href="backend.PPCgen.html">backend.PPCgen</a>]<br/>
+<a href="backend.Cmconstr.html#addressing">addressing</a> [in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Cmconstr.html#addressing_match">addressing_match</a> [in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Constprop.html#addr_strength_reduction">addr_strength_reduction</a> [in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#addr_strength_reduction_match">addr_strength_reduction_match</a> [in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Cminorgen.html#addr_taken_expr">addr_taken_expr</a> [in <a href="backend.Cminorgen.html">backend.Cminorgen</a>]<br/>
+<a href="backend.Cminorgen.html#addr_taken_stmt">addr_taken_stmt</a> [in <a href="backend.Cminorgen.html">backend.Cminorgen</a>]<br/>
+<a href="backend.Allocation.html#add_call">add_call</a> [in <a href="backend.Allocation.html">backend.Allocation</a>]<br/>
+<a href="backend.Allocation.html#add_cond">add_cond</a> [in <a href="backend.Allocation.html">backend.Allocation</a>]<br/>
+<a href="backend.Coloring.html#add_edges_instr">add_edges_instr</a> [in <a href="backend.Coloring.html">backend.Coloring</a>]<br/>
+<a href="backend.Coloring.html#add_edges_instrs">add_edges_instrs</a> [in <a href="backend.Coloring.html">backend.Coloring</a>]<br/>
+<a href="backend.Allocation.html#add_entry">add_entry</a> [in <a href="backend.Allocation.html">backend.Allocation</a>]<br/>
+<a href="backend.Globalenvs.html#add_funct">add_funct</a> [in <a href="backend.Globalenvs.html">backend.Globalenvs</a>]<br/>
+<a href="backend.Globalenvs.html#add_functs">add_functs</a> [in <a href="backend.Globalenvs.html">backend.Globalenvs</a>]<br/>
+<a href="backend.Globalenvs.html#add_globals">add_globals</a> [in <a href="backend.Globalenvs.html">backend.Globalenvs</a>]<br/>
+<a href="backend.RTLgen.html#add_instr">add_instr</a> [in <a href="backend.RTLgen.html">backend.RTLgen</a>]<br/>
+<a href="backend.InterfGraph.html#add_interf">add_interf</a> [in <a href="backend.InterfGraph.html">backend.InterfGraph</a>]<br/>
+<a href="backend.Coloring.html#add_interf_call">add_interf_call</a> [in <a href="backend.Coloring.html">backend.Coloring</a>]<br/>
+<a href="backend.Coloring.html#add_interf_entry">add_interf_entry</a> [in <a href="backend.Coloring.html">backend.Coloring</a>]<br/>
+<a href="backend.Coloring.html#add_interf_live">add_interf_live</a> [in <a href="backend.Coloring.html">backend.Coloring</a>]<br/>
+<a href="backend.Coloring.html#add_interf_move">add_interf_move</a> [in <a href="backend.Coloring.html">backend.Coloring</a>]<br/>
+<a href="backend.InterfGraph.html#add_interf_mreg">add_interf_mreg</a> [in <a href="backend.InterfGraph.html">backend.InterfGraph</a>]<br/>
+<a href="backend.Coloring.html#add_interf_op">add_interf_op</a> [in <a href="backend.Coloring.html">backend.Coloring</a>]<br/>
+<a href="backend.Coloring.html#add_interf_params">add_interf_params</a> [in <a href="backend.Coloring.html">backend.Coloring</a>]<br/>
+<a href="backend.RTLgen.html#add_letvar">add_letvar</a> [in <a href="backend.RTLgen.html">backend.RTLgen</a>]<br/>
+<a href="backend.CSE.html#add_load">add_load</a> [in <a href="backend.CSE.html">backend.CSE</a>]<br/>
+<a href="backend.Allocation.html#add_load">add_load</a> [in <a href="backend.Allocation.html">backend.Allocation</a>]<br/>
+<a href="backend.Cmconstr.html#add_match">add_match</a> [in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Cmconstr.html#add_match_aux">add_match_aux</a> [in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.RTLgen.html#add_move">add_move</a> [in <a href="backend.RTLgen.html">backend.RTLgen</a>]<br/>
+<a href="backend.Allocation.html#add_move">add_move</a> [in <a href="backend.Allocation.html">backend.Allocation</a>]<br/>
+<a href="backend.Allocation.html#add_op">add_op</a> [in <a href="backend.Allocation.html">backend.Allocation</a>]<br/>
+<a href="backend.CSE.html#add_op">add_op</a> [in <a href="backend.CSE.html">backend.CSE</a>]<br/>
+<a href="backend.InterfGraph.html#add_pref">add_pref</a> [in <a href="backend.InterfGraph.html">backend.InterfGraph</a>]<br/>
+<a href="backend.Coloring.html#add_prefs_call">add_prefs_call</a> [in <a href="backend.Coloring.html">backend.Coloring</a>]<br/>
+<a href="backend.InterfGraph.html#add_pref_mreg">add_pref_mreg</a> [in <a href="backend.InterfGraph.html">backend.InterfGraph</a>]<br/>
+<a href="backend.Allocation.html#add_reload">add_reload</a> [in <a href="backend.Allocation.html">backend.Allocation</a>]<br/>
+<a href="backend.Allocation.html#add_reloads">add_reloads</a> [in <a href="backend.Allocation.html">backend.Allocation</a>]<br/>
+<a href="backend.Allocation.html#add_return">add_return</a> [in <a href="backend.Allocation.html">backend.Allocation</a>]<br/>
+<a href="backend.CSE.html#add_rhs">add_rhs</a> [in <a href="backend.CSE.html">backend.CSE</a>]<br/>
+<a href="backend.Allocation.html#add_spill">add_spill</a> [in <a href="backend.Allocation.html">backend.Allocation</a>]<br/>
+<a href="backend.Allocation.html#add_store">add_store</a> [in <a href="backend.Allocation.html">backend.Allocation</a>]<br/>
+<a href="backend.Kildall.html#add_successors">add_successors</a> [in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.Globalenvs.html#add_symbol">add_symbol</a> [in <a href="backend.Globalenvs.html">backend.Globalenvs</a>]<br/>
+<a href="backend.Kildall.html#add_to_worklist">add_to_worklist</a> [in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.Allocation.html#add_undefs">add_undefs</a> [in <a href="backend.Allocation.html">backend.Allocation</a>]<br/>
+<a href="backend.RTLgen.html#add_var">add_var</a> [in <a href="backend.RTLgen.html">backend.RTLgen</a>]<br/>
+<a href="backend.RTLgen.html#add_vars">add_vars</a> [in <a href="backend.RTLgen.html">backend.RTLgen</a>]<br/>
+<a href="backend.Allocproof.html#agree">agree</a> [in <a href="backend.Allocproof.html">backend.Allocproof</a>]<br/>
+<a href="backend.PPCgenproof1.html#agree">agree</a> [in <a href="backend.PPCgenproof1.html">backend.PPCgenproof1</a>]<br/>
+<a href="lib.Coqlib.html#align">align</a> [in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="backend.Mach.html#align_16_top">align_16_top</a> [in <a href="backend.Mach.html">backend.Mach</a>]<br/>
+<a href="backend.Mem.html#alloc">alloc</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Coloring.html#alloc_of_coloring">alloc_of_coloring</a> [in <a href="backend.Coloring.html">backend.Coloring</a>]<br/>
+<a href="backend.RTLgen.html#alloc_reg">alloc_reg</a> [in <a href="backend.RTLgen.html">backend.RTLgen</a>]<br/>
+<a href="backend.RTLgen.html#alloc_regs">alloc_regs</a> [in <a href="backend.RTLgen.html">backend.RTLgen</a>]<br/>
+<a href="backend.InterfGraph.html#all_interf_regs">all_interf_regs</a> [in <a href="backend.InterfGraph.html">backend.InterfGraph</a>]<br/>
+<a href="backend.Allocation.html#analyze">analyze</a> [in <a href="backend.Allocation.html">backend.Allocation</a>]<br/>
+<a href="backend.Constprop.html#analyze">analyze</a> [in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.CSE.html#analyze">analyze</a> [in <a href="backend.CSE.html">backend.CSE</a>]<br/>
+<a href="lib.Integers.html#and">and</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Cmconstr.html#and">and</a> [in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Values.html#and">and</a> [in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.Cmconstr.html#andimm">andimm</a> [in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.PPCgen.html#andimm">andimm</a> [in <a href="backend.PPCgen.html">backend.PPCgen</a>]<br/>
+<a href="lib.Maps.html#append">append</a> [in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="backend.Main.html#apply_partial">apply_partial</a> [in <a href="backend.Main.html">backend.Main</a>]<br/>
+<a href="backend.Main.html#apply_total">apply_total</a> [in <a href="backend.Main.html">backend.Main</a>]<br/>
+<a href="backend.Constprop.html#approx_regs">approx_regs</a> [in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Cminorgen.html#assign_variable">assign_variable</a> [in <a href="backend.Cminorgen.html">backend.Cminorgen</a>]<br/>
+<a href="backend.Cminorgen.html#assign_variables">assign_variables</a> [in <a href="backend.Cminorgen.html">backend.Cminorgen</a>]<br/>
+<br/><br/><a name="definition_B"></a><h2>B </h2>
+<a href="backend.Parallelmove.html#base_case_Pmov_dec">base_case_Pmov_dec</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Kildall.html#basic_block_list">basic_block_list</a> [in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.Kildall.html#basic_block_map">basic_block_map</a> [in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.Kildall.html#bbmap">bbmap</a> [in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.RTLgen.html#bind">bind</a> [in <a href="backend.RTLgen.html">backend.RTLgen</a>]<br/>
+<a href="backend.Cminorgen.html#bind">bind</a> [in <a href="backend.Cminorgen.html">backend.Cminorgen</a>]<br/>
+<a href="backend.RTLgen.html#bind2">bind2</a> [in <a href="backend.RTLgen.html">backend.RTLgen</a>]<br/>
+<a href="lib.Inclusion.html#bin_A">bin_A</a> [in <a href="lib.Inclusion.html">lib.Inclusion</a>]<br/>
+<a href="lib.Integers.html#bits_of_Z">bits_of_Z</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#bitwise_binop">bitwise_binop</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Values.html#block">block</a> [in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.Mem.html#block_agree">block_agree</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#block_contents_agree">block_contents_agree</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#block_contents_extends">block_contents_extends</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="lib.Lattice.html#bot">bot</a> [in <a href="lib.Lattice.html">lib.Lattice</a>]<br/>
+<a href="lib.Lattice.html#bot">bot</a> [in <a href="lib.Lattice.html">lib.Lattice</a>]<br/>
+<a href="backend.Constprop.html#bot">bot</a> [in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="lib.Sets.html#bot">bot</a> [in <a href="lib.Sets.html">lib.Sets</a>]<br/>
+<a href="lib.Lattice.html#bot">bot</a> [in <a href="lib.Lattice.html">lib.Lattice</a>]<br/>
+<a href="backend.Tunneling.html#branch_target">branch_target</a> [in <a href="backend.Tunneling.html">backend.Tunneling</a>]<br/>
+<a href="backend.Tunneling.html#branch_target_rec">branch_target_rec</a> [in <a href="backend.Tunneling.html">backend.Tunneling</a>]<br/>
+<a href="backend.Cminorgen.html#build_compilenv">build_compilenv</a> [in <a href="backend.Cminorgen.html">backend.Cminorgen</a>]<br/>
+<br/><br/><a name="definition_C"></a><h2>C </h2>
+<a href="backend.Machabstr2mach.html#callstack">callstack</a> [in <a href="backend.Machabstr2mach.html">backend.Machabstr2mach</a>]<br/>
+<a href="backend.Cminorgenproof.html#callstack">callstack</a> [in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.LTL.html#call_regs">call_regs</a> [in <a href="backend.LTL.html">backend.LTL</a>]<br/>
+<a href="backend.Csharpminor.html#cast">cast</a> [in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="lib.Integers.html#cast16signed">cast16signed</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Values.html#cast16signed">cast16signed</a> [in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.Cmconstr.html#cast16signed">cast16signed</a> [in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Cmconstr.html#cast16unsigned">cast16unsigned</a> [in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Values.html#cast16unsigned">cast16unsigned</a> [in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="lib.Integers.html#cast16unsigned">cast16unsigned</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Cmconstr.html#cast8signed">cast8signed</a> [in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="lib.Integers.html#cast8signed">cast8signed</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Values.html#cast8signed">cast8signed</a> [in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.Cmconstr.html#cast8unsigned">cast8unsigned</a> [in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Values.html#cast8unsigned">cast8unsigned</a> [in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="lib.Integers.html#cast8unsigned">cast8unsigned</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Inclusion.html#check_all_leaves">check_all_leaves</a> [in <a href="lib.Inclusion.html">lib.Inclusion</a>]<br/>
+<a href="backend.Coloring.html#check_coloring">check_coloring</a> [in <a href="backend.Coloring.html">backend.Coloring</a>]<br/>
+<a href="backend.Coloring.html#check_coloring_1">check_coloring_1</a> [in <a href="backend.Coloring.html">backend.Coloring</a>]<br/>
+<a href="backend.Coloring.html#check_coloring_2">check_coloring_2</a> [in <a href="backend.Coloring.html">backend.Coloring</a>]<br/>
+<a href="backend.Coloring.html#check_coloring_3">check_coloring_3</a> [in <a href="backend.Coloring.html">backend.Coloring</a>]<br/>
+<a href="backend.Mem.html#check_cont">check_cont</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="lib.Integers.html#check_equal_on_range">check_equal_on_range</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Mach.html#chunk_of_type">chunk_of_type</a> [in <a href="backend.Mach.html">backend.Mach</a>]<br/>
+<a href="backend.Linearize.html#cleanup_code">cleanup_code</a> [in <a href="backend.Linearize.html">backend.Linearize</a>]<br/>
+<a href="backend.Linearize.html#cleanup_function">cleanup_function</a> [in <a href="backend.Linearize.html">backend.Linearize</a>]<br/>
+<a href="backend.Cmconstr.html#cmp">cmp</a> [in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Values.html#cmp">cmp</a> [in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="lib.Integers.html#cmp">cmp</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Cmconstr.html#cmpf">cmpf</a> [in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Values.html#cmpf">cmpf</a> [in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.Values.html#cmpu">cmpu</a> [in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.Cmconstr.html#cmpu">cmpu</a> [in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="lib.Integers.html#cmpu">cmpu</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Values.html#cmp_mismatch">cmp_mismatch</a> [in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.LTL.html#code">code</a> [in <a href="backend.LTL.html">backend.LTL</a>]<br/>
+<a href="backend.PPC.html#code">code</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.RTL.html#code">code</a> [in <a href="backend.RTL.html">backend.RTL</a>]<br/>
+<a href="backend.Linear.html#code">code</a> [in <a href="backend.Linear.html">backend.Linear</a>]<br/>
+<a href="backend.Mach.html#code">code</a> [in <a href="backend.Mach.html">backend.Mach</a>]<br/>
+<a href="backend.PPCgen.html#code_size">code_size</a> [in <a href="backend.PPCgen.html">backend.PPCgen</a>]<br/>
+<a href="backend.PPCgenproof.html#code_tail">code_tail</a> [in <a href="backend.PPCgenproof.html">backend.PPCgenproof</a>]<br/>
+<a href="lib.Maps.html#combine">combine</a> [in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="backend.PPC.html#compare_float">compare_float</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#compare_sint">compare_sint</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#compare_uint">compare_uint</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.Cminorgen.html#compilenv">compilenv</a> [in <a href="backend.Cminorgen.html">backend.Cminorgen</a>]<br/>
+<a href="backend.Cmconstr.html#condexpr_of_expr">condexpr_of_expr</a> [in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Cmconstr.html#conditionalexpr">conditionalexpr</a> [in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Constprop.html#cond_strength_reduction">cond_strength_reduction</a> [in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#cond_strength_reduction_match">cond_strength_reduction_match</a> [in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.RTLtyping.html#consistent">consistent</a> [in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.PPC.html#const_high">const_high</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#const_low">const_low</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.Mem.html#contentmap">contentmap</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#contentmap_agree">contentmap_agree</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#contentmap_inject">contentmap_inject</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Coloringproof.html#correct_alloc_instr">correct_alloc_instr</a> [in <a href="backend.Coloringproof.html">backend.Coloringproof</a>]<br/>
+<a href="backend.Coloringproof.html#correct_interf_instr">correct_interf_instr</a> [in <a href="backend.Coloringproof.html">backend.Coloringproof</a>]<br/>
+<a href="backend.PPCgen.html#crbit_for_cond">crbit_for_cond</a> [in <a href="backend.PPCgen.html">backend.PPCgen</a>]<br/>
+<a href="backend.PPCgen.html#crbit_for_fcmp">crbit_for_fcmp</a> [in <a href="backend.PPCgen.html">backend.PPCgen</a>]<br/>
+<a href="backend.PPCgen.html#crbit_for_icmp">crbit_for_icmp</a> [in <a href="backend.PPCgen.html">backend.PPCgen</a>]<br/>
+<br/><br/><a name="definition_D"></a><h2>D </h2>
+<a href="backend.RTLtyping.html#decode">decode</a> [in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.Parallelmove.html#def">def</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.RTLtyping.html#definite">definite</a> [in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.Conventions.html#destroyed_at_call">destroyed_at_call</a> [in <a href="backend.Conventions.html">backend.Conventions</a>]<br/>
+<a href="backend.Conventions.html#destroyed_at_call_regs">destroyed_at_call_regs</a> [in <a href="backend.Conventions.html">backend.Conventions</a>]<br/>
+<a href="backend.Locations.html#diff">diff</a> [in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Parallelmove.html#diff_dec">diff_dec</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Locations.html#disjoint">disjoint</a> [in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Values.html#divf">divf</a> [in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.Cmconstr.html#divf">divf</a> [in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Cmconstr.html#divs">divs</a> [in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="lib.Integers.html#divs">divs</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Values.html#divs">divs</a> [in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.Cmconstr.html#divu">divu</a> [in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Values.html#divu">divu</a> [in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="lib.Integers.html#divu">divu</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Cmconstr.html#divu_match">divu_match</a> [in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Allocproof_aux.html#Done_well_formed">Done_well_formed</a> [in <a href="backend.Allocproof_aux.html">backend.Allocproof_aux</a>]<br/>
+<a href="backend.Conventions.html#drop1">drop1</a> [in <a href="backend.Conventions.html">backend.Conventions</a>]<br/>
+<a href="backend.Conventions.html#drop2">drop2</a> [in <a href="backend.Conventions.html">backend.Conventions</a>]<br/>
+<br/><br/><a name="definition_E"></a><h2>E </h2>
+<a href="lib.Sets.html#elements">elements</a> [in <a href="lib.Sets.html">lib.Sets</a>]<br/>
+<a href="lib.Maps.html#elements">elements</a> [in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Maps.html#elt">elt</a> [in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="backend.RTLtyping.html#elt">elt</a> [in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="lib.Sets.html#elt">elt</a> [in <a href="lib.Sets.html">lib.Sets</a>]<br/>
+<a href="lib.union_find.html#elt">elt</a> [in <a href="lib.union_find.html">lib.union_find</a>]<br/>
+<a href="lib.union_find.html#elt">elt</a> [in <a href="lib.union_find.html">lib.union_find</a>]<br/>
+<a href="lib.union_find.html#elt">elt</a> [in <a href="lib.union_find.html">lib.union_find</a>]<br/>
+<a href="lib.Maps.html#elt">elt</a> [in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Maps.html#elt">elt</a> [in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Maps.html#elt">elt</a> [in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Maps.html#elt_eq">elt_eq</a> [in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Maps.html#elt_eq">elt_eq</a> [in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Maps.html#elt_eq">elt_eq</a> [in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Maps.html#elt_eq">elt_eq</a> [in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Sets.html#empty">empty</a> [in <a href="lib.Sets.html">lib.Sets</a>]<br/>
+<a href="lib.Maps.html#empty">empty</a> [in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.union_find.html#empty">empty</a> [in <a href="lib.union_find.html">lib.union_find</a>]<br/>
+<a href="backend.RTLtyping.html#empty">empty</a> [in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.Globalenvs.html#empty">empty</a> [in <a href="backend.Globalenvs.html">backend.Globalenvs</a>]<br/>
+<a href="backend.Mem.html#empty">empty</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#empty_block">empty_block</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Csharpminor.html#empty_env">empty_env</a> [in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Machabstr.html#empty_frame">empty_frame</a> [in <a href="backend.Machabstr.html">backend.Machabstr</a>]<br/>
+<a href="backend.InterfGraph.html#empty_graph">empty_graph</a> [in <a href="backend.InterfGraph.html">backend.InterfGraph</a>]<br/>
+<a href="backend.CSE.html#empty_numbering">empty_numbering</a> [in <a href="backend.CSE.html">backend.CSE</a>]<br/>
+<a href="backend.RTLtyping.html#encode">encode</a> [in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.Linearize.html#enumerate">enumerate</a> [in <a href="backend.Linearize.html">backend.Linearize</a>]<br/>
+<a href="backend.Csharpminor.html#env">env</a> [in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Parallelmove.html#Env">Env</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Cminor.html#env">env</a> [in <a href="backend.Cminor.html">backend.Cminor</a>]<br/>
+<a href="backend.Mach.html#eq">eq</a> [in <a href="backend.Mach.html">backend.Mach</a>]<br/>
+<a href="lib.Ordered.html#eq">eq</a> [in <a href="lib.Ordered.html">lib.Ordered</a>]<br/>
+<a href="backend.RTLtyping.html#eq">eq</a> [in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.CSEproof.html#eq">eq</a> [in <a href="backend.CSEproof.html">backend.CSEproof</a>]<br/>
+<a href="lib.Maps.html#eq">eq</a> [in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="backend.Locations.html#eq">eq</a> [in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="lib.Ordered.html#eq">eq</a> [in <a href="lib.Ordered.html">lib.Ordered</a>]<br/>
+<a href="backend.Registers.html#eq">eq</a> [in <a href="backend.Registers.html">backend.Registers</a>]<br/>
+<a href="lib.Ordered.html#eq">eq</a> [in <a href="lib.Ordered.html">lib.Ordered</a>]<br/>
+<a href="backend.PPC.html#eq">eq</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="lib.Integers.html#eq">eq</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#eqm">eqm</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#eqmod">eqmod</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.CSE.html#equation_holds">equation_holds</a> [in <a href="backend.CSE.html">backend.CSE</a>]<br/>
+<a href="backend.Values.html#eq_block">eq_block</a> [in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.CSE.html#eq_list_valnum">eq_list_valnum</a> [in <a href="backend.CSE.html">backend.CSE</a>]<br/>
+<a href="backend.CSE.html#eq_rhs">eq_rhs</a> [in <a href="backend.CSE.html">backend.CSE</a>]<br/>
+<a href="backend.CSE.html#eq_valnum">eq_valnum</a> [in <a href="backend.CSE.html">backend.CSE</a>]<br/>
+<a href="backend.RTLtyping.html#error">error</a> [in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.RTLgen.html#error">error</a> [in <a href="backend.RTLgen.html">backend.RTLgen</a>]<br/>
+<a href="backend.Op.html#eval_addressing">eval_addressing</a> [in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Op.html#eval_addressing_total">eval_addressing_total</a> [in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Op.html#eval_compare_null">eval_compare_null</a> [in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Csharpminor.html#eval_compare_null">eval_compare_null</a> [in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Op.html#eval_condition">eval_condition</a> [in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Op.html#eval_condition_total">eval_condition_total</a> [in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Cminorgenproof.html#eval_exprlist_prop">eval_exprlist_prop</a> [in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.Cminorgenproof.html#eval_expr_prop">eval_expr_prop</a> [in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.Cminorgenproof.html#eval_funcall_prop">eval_funcall_prop</a> [in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.Op.html#eval_operation">eval_operation</a> [in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Csharpminor.html#eval_operation">eval_operation</a> [in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Op.html#eval_operation_total">eval_operation_total</a> [in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Constprop.html#eval_static_condition">eval_static_condition</a> [in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#eval_static_condition_match">eval_static_condition_match</a> [in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#eval_static_operation">eval_static_operation</a> [in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#eval_static_operation_match">eval_static_operation_match</a> [in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Parallelmove.html#exec">exec</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Linearizeproof.html#exec_blocks_prop">exec_blocks_prop</a> [in <a href="backend.Linearizeproof.html">backend.Linearizeproof</a>]<br/>
+<a href="backend.Tunnelingproof.html#exec_blocks_prop">exec_blocks_prop</a> [in <a href="backend.Tunnelingproof.html">backend.Tunnelingproof</a>]<br/>
+<a href="backend.Linearizeproof.html#exec_block_prop">exec_block_prop</a> [in <a href="backend.Linearizeproof.html">backend.Linearizeproof</a>]<br/>
+<a href="backend.Tunnelingproof.html#exec_block_prop">exec_block_prop</a> [in <a href="backend.Tunnelingproof.html">backend.Tunnelingproof</a>]<br/>
+<a href="backend.Machabstr2mach.html#exec_function_body_prop">exec_function_body_prop</a> [in <a href="backend.Machabstr2mach.html">backend.Machabstr2mach</a>]<br/>
+<a href="backend.PPCgenproof.html#exec_function_body_prop">exec_function_body_prop</a> [in <a href="backend.PPCgenproof.html">backend.PPCgenproof</a>]<br/>
+<a href="backend.Machtyping.html#exec_function_body_prop">exec_function_body_prop</a> [in <a href="backend.Machtyping.html">backend.Machtyping</a>]<br/>
+<a href="backend.Stackingproof.html#exec_function_prop">exec_function_prop</a> [in <a href="backend.Stackingproof.html">backend.Stackingproof</a>]<br/>
+<a href="backend.Machtyping.html#exec_function_prop">exec_function_prop</a> [in <a href="backend.Machtyping.html">backend.Machtyping</a>]<br/>
+<a href="backend.PPCgenproof.html#exec_function_prop">exec_function_prop</a> [in <a href="backend.PPCgenproof.html">backend.PPCgenproof</a>]<br/>
+<a href="backend.Constpropproof.html#exec_function_prop">exec_function_prop</a> [in <a href="backend.Constpropproof.html">backend.Constpropproof</a>]<br/>
+<a href="backend.Linearizeproof.html#exec_function_prop">exec_function_prop</a> [in <a href="backend.Linearizeproof.html">backend.Linearizeproof</a>]<br/>
+<a href="backend.Machabstr2mach.html#exec_function_prop">exec_function_prop</a> [in <a href="backend.Machabstr2mach.html">backend.Machabstr2mach</a>]<br/>
+<a href="backend.CSEproof.html#exec_function_prop">exec_function_prop</a> [in <a href="backend.CSEproof.html">backend.CSEproof</a>]<br/>
+<a href="backend.Tunnelingproof.html#exec_function_prop">exec_function_prop</a> [in <a href="backend.Tunnelingproof.html">backend.Tunnelingproof</a>]<br/>
+<a href="backend.Allocproof.html#exec_function_prop">exec_function_prop</a> [in <a href="backend.Allocproof.html">backend.Allocproof</a>]<br/>
+<a href="backend.RTLtyping.html#exec_function_subject_reduction">exec_function_subject_reduction</a> [in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.PPC.html#exec_instr">exec_instr</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.Allocproof.html#exec_instrs_prop">exec_instrs_prop</a> [in <a href="backend.Allocproof.html">backend.Allocproof</a>]<br/>
+<a href="backend.Tunnelingproof.html#exec_instrs_prop">exec_instrs_prop</a> [in <a href="backend.Tunnelingproof.html">backend.Tunnelingproof</a>]<br/>
+<a href="backend.Machabstr2mach.html#exec_instrs_prop">exec_instrs_prop</a> [in <a href="backend.Machabstr2mach.html">backend.Machabstr2mach</a>]<br/>
+<a href="backend.CSEproof.html#exec_instrs_prop">exec_instrs_prop</a> [in <a href="backend.CSEproof.html">backend.CSEproof</a>]<br/>
+<a href="backend.Constpropproof.html#exec_instrs_prop">exec_instrs_prop</a> [in <a href="backend.Constpropproof.html">backend.Constpropproof</a>]<br/>
+<a href="backend.Linearizeproof.html#exec_instrs_prop">exec_instrs_prop</a> [in <a href="backend.Linearizeproof.html">backend.Linearizeproof</a>]<br/>
+<a href="backend.Allocproof.html#exec_instr_prop">exec_instr_prop</a> [in <a href="backend.Allocproof.html">backend.Allocproof</a>]<br/>
+<a href="backend.Machabstr2mach.html#exec_instr_prop">exec_instr_prop</a> [in <a href="backend.Machabstr2mach.html">backend.Machabstr2mach</a>]<br/>
+<a href="backend.Machtyping.html#exec_instr_prop">exec_instr_prop</a> [in <a href="backend.Machtyping.html">backend.Machtyping</a>]<br/>
+<a href="backend.Constpropproof.html#exec_instr_prop">exec_instr_prop</a> [in <a href="backend.Constpropproof.html">backend.Constpropproof</a>]<br/>
+<a href="backend.CSEproof.html#exec_instr_prop">exec_instr_prop</a> [in <a href="backend.CSEproof.html">backend.CSEproof</a>]<br/>
+<a href="backend.Tunnelingproof.html#exec_instr_prop">exec_instr_prop</a> [in <a href="backend.Tunnelingproof.html">backend.Tunnelingproof</a>]<br/>
+<a href="backend.Stackingproof.html#exec_instr_prop">exec_instr_prop</a> [in <a href="backend.Stackingproof.html">backend.Stackingproof</a>]<br/>
+<a href="backend.Linearizeproof.html#exec_instr_prop">exec_instr_prop</a> [in <a href="backend.Linearizeproof.html">backend.Linearizeproof</a>]<br/>
+<a href="backend.PPCgenproof.html#exec_instr_prop">exec_instr_prop</a> [in <a href="backend.PPCgenproof.html">backend.PPCgenproof</a>]<br/>
+<a href="backend.RTLtyping.html#exec_instr_subject_reduction">exec_instr_subject_reduction</a> [in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.Csharpminor.html#exec_program">exec_program</a> [in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.LTL.html#exec_program">exec_program</a> [in <a href="backend.LTL.html">backend.LTL</a>]<br/>
+<a href="backend.Cminor.html#exec_program">exec_program</a> [in <a href="backend.Cminor.html">backend.Cminor</a>]<br/>
+<a href="backend.RTL.html#exec_program">exec_program</a> [in <a href="backend.RTL.html">backend.RTL</a>]<br/>
+<a href="backend.Mach.html#exec_program">exec_program</a> [in <a href="backend.Mach.html">backend.Mach</a>]<br/>
+<a href="backend.Machabstr.html#exec_program">exec_program</a> [in <a href="backend.Machabstr.html">backend.Machabstr</a>]<br/>
+<a href="backend.Linear.html#exec_program">exec_program</a> [in <a href="backend.Linear.html">backend.Linear</a>]<br/>
+<a href="backend.PPC.html#exec_program">exec_program</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.Cminorgenproof.html#exec_stmtlist_prop">exec_stmtlist_prop</a> [in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.Cminorgenproof.html#exec_stmt_prop">exec_stmt_prop</a> [in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.Mem.html#extends">extends</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#extend_inject">extend_inject</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<br/><br/><a name="definition_F"></a><h2>F </h2>
+<a href="backend.Globalenvs.html#find_funct">find_funct</a> [in <a href="backend.Globalenvs.html">backend.Globalenvs</a>]<br/>
+<a href="backend.LTL.html#find_function">find_function</a> [in <a href="backend.LTL.html">backend.LTL</a>]<br/>
+<a href="backend.Mach.html#find_function">find_function</a> [in <a href="backend.Mach.html">backend.Mach</a>]<br/>
+<a href="backend.RTL.html#find_function">find_function</a> [in <a href="backend.RTL.html">backend.RTL</a>]<br/>
+<a href="backend.Linear.html#find_function">find_function</a> [in <a href="backend.Linear.html">backend.Linear</a>]<br/>
+<a href="backend.Allocproof.html#find_function2">find_function2</a> [in <a href="backend.Allocproof.html">backend.Allocproof</a>]<br/>
+<a href="backend.Globalenvs.html#find_funct_ptr">find_funct_ptr</a> [in <a href="backend.Globalenvs.html">backend.Globalenvs</a>]<br/>
+<a href="backend.PPC.html#find_instr">find_instr</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.Mach.html#find_label">find_label</a> [in <a href="backend.Mach.html">backend.Mach</a>]<br/>
+<a href="backend.PPCgenproof.html#find_label">find_label</a> [in <a href="backend.PPCgenproof.html">backend.PPCgenproof</a>]<br/>
+<a href="backend.Linear.html#find_label">find_label</a> [in <a href="backend.Linear.html">backend.Linear</a>]<br/>
+<a href="backend.RTLgen.html#find_letvar">find_letvar</a> [in <a href="backend.RTLgen.html">backend.RTLgen</a>]<br/>
+<a href="backend.CSE.html#find_load">find_load</a> [in <a href="backend.CSE.html">backend.CSE</a>]<br/>
+<a href="backend.CSE.html#find_op">find_op</a> [in <a href="backend.CSE.html">backend.CSE</a>]<br/>
+<a href="backend.CSE.html#find_rhs">find_rhs</a> [in <a href="backend.CSE.html">backend.CSE</a>]<br/>
+<a href="backend.Globalenvs.html#find_symbol">find_symbol</a> [in <a href="backend.Globalenvs.html">backend.Globalenvs</a>]<br/>
+<a href="backend.Op.html#find_symbol_offset">find_symbol_offset</a> [in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.CSE.html#find_valnum_rhs">find_valnum_rhs</a> [in <a href="backend.CSE.html">backend.CSE</a>]<br/>
+<a href="backend.RTLgen.html#find_var">find_var</a> [in <a href="backend.RTLgen.html">backend.RTLgen</a>]<br/>
+<a href="backend.Kildall.html#fixpoint">fixpoint</a> [in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.Kildall.html#fixpoint">fixpoint</a> [in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.Kildall.html#fixpoint">fixpoint</a> [in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="lib.Inclusion.html#flatten">flatten</a> [in <a href="lib.Inclusion.html">lib.Inclusion</a>]<br/>
+<a href="lib.Inclusion.html#flatten_aux">flatten_aux</a> [in <a href="lib.Inclusion.html">lib.Inclusion</a>]<br/>
+<a href="backend.PPCgen.html#floatcomp">floatcomp</a> [in <a href="backend.PPCgen.html">backend.PPCgen</a>]<br/>
+<a href="backend.Values.html#floatofint">floatofint</a> [in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.Cmconstr.html#floatofint">floatofint</a> [in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Cmconstr.html#floatofintu">floatofintu</a> [in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Values.html#floatofintu">floatofintu</a> [in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.Lineartyping.html#float_callee_save">float_callee_save</a> [in <a href="backend.Lineartyping.html">backend.Lineartyping</a>]<br/>
+<a href="backend.Conventions.html#float_callee_save_regs">float_callee_save_regs</a> [in <a href="backend.Conventions.html">backend.Conventions</a>]<br/>
+<a href="backend.Lineartyping.html#float_local">float_local</a> [in <a href="backend.Lineartyping.html">backend.Lineartyping</a>]<br/>
+<a href="backend.Conventions.html#float_param_regs">float_param_regs</a> [in <a href="backend.Conventions.html">backend.Conventions</a>]<br/>
+<a href="backend.Csharpminor.html#fn_params_names">fn_params_names</a> [in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Csharpminor.html#fn_variables">fn_variables</a> [in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Csharpminor.html#fn_vars_names">fn_vars_names</a> [in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="lib.Sets.html#fold">fold</a> [in <a href="lib.Sets.html">lib.Sets</a>]<br/>
+<a href="lib.Maps.html#fold">fold</a> [in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="backend.RTLtyping.html#fold2">fold2</a> [in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="lib.Sets.html#for_all">for_all</a> [in <a href="lib.Sets.html">lib.Sets</a>]<br/>
+<a href="backend.Machabstr.html#frame">frame</a> [in <a href="backend.Machabstr.html">backend.Machabstr</a>]<br/>
+<a href="backend.Mem.html#free">free</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#free_list">free_list</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.PPCgen.html#freg_of">freg_of</a> [in <a href="backend.PPCgen.html">backend.PPCgen</a>]<br/>
+<a href="backend.Lineartyping.html#function_bounds">function_bounds</a> [in <a href="backend.Lineartyping.html">backend.Lineartyping</a>]<br/>
+<br/><br/><a name="definition_G"></a><h2>G </h2>
+<a href="lib.Lattice.html#ge">ge</a> [in <a href="lib.Lattice.html">lib.Lattice</a>]<br/>
+<a href="backend.CSE.html#ge">ge</a> [in <a href="backend.CSE.html">backend.CSE</a>]<br/>
+<a href="lib.Lattice.html#ge">ge</a> [in <a href="lib.Lattice.html">lib.Lattice</a>]<br/>
+<a href="backend.Constprop.html#ge">ge</a> [in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="lib.Lattice.html#ge">ge</a> [in <a href="lib.Lattice.html">lib.Lattice</a>]<br/>
+<a href="lib.Sets.html#ge">ge</a> [in <a href="lib.Sets.html">lib.Sets</a>]<br/>
+<a href="backend.Cminor.html#genv">genv</a> [in <a href="backend.Cminor.html">backend.Cminor</a>]<br/>
+<a href="backend.LTL.html#genv">genv</a> [in <a href="backend.LTL.html">backend.LTL</a>]<br/>
+<a href="backend.PPC.html#genv">genv</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.Csharpminor.html#genv">genv</a> [in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.RTL.html#genv">genv</a> [in <a href="backend.RTL.html">backend.RTL</a>]<br/>
+<a href="backend.Mach.html#genv">genv</a> [in <a href="backend.Mach.html">backend.Mach</a>]<br/>
+<a href="backend.Linear.html#genv">genv</a> [in <a href="backend.Linear.html">backend.Linear</a>]<br/>
+<a href="lib.Maps.html#get">get</a> [in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Maps.html#get">get</a> [in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Maps.html#get">get</a> [in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="backend.Parallelmove.html#Get">Get</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Locations.html#get">get</a> [in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="lib.Lattice.html#get">get</a> [in <a href="lib.Lattice.html">lib.Lattice</a>]<br/>
+<a href="lib.Maps.html#get">get</a> [in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="backend.Parallelmove.html#get">get</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.RTLtyping.html#get">get</a> [in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.Parallelmove.html#getdst">getdst</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Mem.html#getN">getN</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Parallelmove.html#getsrc">getsrc</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Globalenvs.html#globalenv">globalenv</a> [in <a href="backend.Globalenvs.html">backend.Globalenvs</a>]<br/>
+<a href="backend.Globalenvs.html#globalenv_initmem">globalenv_initmem</a> [in <a href="backend.Globalenvs.html">backend.Globalenvs</a>]<br/>
+<a href="backend.Kildall.html#good_state">good_state</a> [in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.PPC.html#goto_label">goto_label</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#gpr_or_zero">gpr_or_zero</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.InterfGraph.html#graph_incl">graph_incl</a> [in <a href="backend.InterfGraph.html">backend.InterfGraph</a>]<br/>
+<br/><br/><a name="definition_H"></a><h2>H </h2>
+<a href="lib.Integers.html#half_modulus">half_modulus</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Values.html#has_type">has_type</a> [in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.Values.html#has_type_list">has_type_list</a> [in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.Parallelmove.html#head_but_last">head_but_last</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Mem.html#high_bound">high_bound</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.PPCgen.html#high_s">high_s</a> [in <a href="backend.PPCgen.html">backend.PPCgen</a>]<br/>
+<a href="backend.PPCgen.html#high_u">high_u</a> [in <a href="backend.PPCgen.html">backend.PPCgen</a>]<br/>
+<br/><br/><a name="definition_I"></a><h2>I </h2>
+<a href="backend.AST.html#ident">ident</a> [in <a href="backend.AST.html">backend.AST</a>]<br/>
+<a href="lib.union_find.html#identify">identify</a> [in <a href="lib.union_find.html">lib.union_find</a>]<br/>
+<a href="lib.union_find.html#identify_base">identify_base</a> [in <a href="lib.union_find.html">lib.union_find</a>]<br/>
+<a href="backend.AST.html#ident_eq">ident_eq</a> [in <a href="backend.AST.html">backend.AST</a>]<br/>
+<a href="backend.Cmconstr.html#ifthenelse">ifthenelse</a> [in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.RTLtyping.html#included">included</a> [in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.Locations.html#index">index</a> [in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="lib.Maps.html#index">index</a> [in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Maps.html#index">index</a> [in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="backend.Stackingproof.html#index_diff">index_diff</a> [in <a href="backend.Stackingproof.html">backend.Stackingproof</a>]<br/>
+<a href="backend.Conventions.html#index_float_callee_save">index_float_callee_save</a> [in <a href="backend.Conventions.html">backend.Conventions</a>]<br/>
+<a href="backend.Conventions.html#index_int_callee_save">index_int_callee_save</a> [in <a href="backend.Conventions.html">backend.Conventions</a>]<br/>
+<a href="backend.Stackingproof.html#index_val">index_val</a> [in <a href="backend.Stackingproof.html">backend.Stackingproof</a>]<br/>
+<a href="backend.Stackingproof.html#index_valid">index_valid</a> [in <a href="backend.Stackingproof.html">backend.Stackingproof</a>]<br/>
+<a href="lib.Maps.html#init">init</a> [in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="backend.Locations.html#init">init</a> [in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="lib.Maps.html#init">init</a> [in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Maps.html#init">init</a> [in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="backend.Machabstr.html#init_frame">init_frame</a> [in <a href="backend.Machabstr.html">backend.Machabstr</a>]<br/>
+<a href="backend.RTLgen.html#init_mapping">init_mapping</a> [in <a href="backend.RTLgen.html">backend.RTLgen</a>]<br/>
+<a href="backend.Globalenvs.html#init_mem">init_mem</a> [in <a href="backend.Globalenvs.html">backend.Globalenvs</a>]<br/>
+<a href="backend.RTL.html#init_regs">init_regs</a> [in <a href="backend.RTL.html">backend.RTL</a>]<br/>
+<a href="backend.RTLgen.html#init_state">init_state</a> [in <a href="backend.RTLgen.html">backend.RTLgen</a>]<br/>
+<a href="backend.Mem.html#inject_incr">inject_incr</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="lib.Inclusion.html#insert_bin">insert_bin</a> [in <a href="lib.Inclusion.html">lib.Inclusion</a>]<br/>
+<a href="backend.InterfGraph.html#interfere">interfere</a> [in <a href="backend.InterfGraph.html">backend.InterfGraph</a>]<br/>
+<a href="backend.InterfGraph.html#interfere_mreg">interfere_mreg</a> [in <a href="backend.InterfGraph.html">backend.InterfGraph</a>]<br/>
+<a href="backend.Coloring.html#interf_graph">interf_graph</a> [in <a href="backend.Coloring.html">backend.Coloring</a>]<br/>
+<a href="backend.Cmconstr.html#intoffloat">intoffloat</a> [in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Values.html#intoffloat">intoffloat</a> [in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.Constprop.html#intval">intval</a> [in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Lineartyping.html#int_callee_save">int_callee_save</a> [in <a href="backend.Lineartyping.html">backend.Lineartyping</a>]<br/>
+<a href="backend.Conventions.html#int_callee_save_regs">int_callee_save_regs</a> [in <a href="backend.Conventions.html">backend.Conventions</a>]<br/>
+<a href="backend.Lineartyping.html#int_local">int_local</a> [in <a href="backend.Lineartyping.html">backend.Lineartyping</a>]<br/>
+<a href="lib.Integers.html#int_of_one_bits">int_of_one_bits</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Conventions.html#int_param_regs">int_param_regs</a> [in <a href="backend.Conventions.html">backend.Conventions</a>]<br/>
+<a href="backend.Mem.html#in_bounds">in_bounds</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Kildall.html#in_incr">in_incr</a> [in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="lib.Integers.html#in_range">in_range</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.PPCgen.html#ireg_of">ireg_of</a> [in <a href="backend.PPCgen.html">backend.PPCgen</a>]<br/>
+<a href="backend.Kildall.html#is_basic_block_head">is_basic_block_head</a> [in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.Values.html#is_bool">is_bool</a> [in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.PPCgenproof1.html#is_data_reg">is_data_reg</a> [in <a href="backend.PPCgenproof1.html">backend.PPCgenproof1</a>]<br/>
+<a href="lib.Integers.html#is_false">is_false</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Values.html#is_false">is_false</a> [in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.Tunneling.html#is_goto_block">is_goto_block</a> [in <a href="backend.Tunneling.html">backend.Tunneling</a>]<br/>
+<a href="backend.PPC.html#is_label">is_label</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.Mach.html#is_label">is_label</a> [in <a href="backend.Mach.html">backend.Mach</a>]<br/>
+<a href="backend.Linear.html#is_label">is_label</a> [in <a href="backend.Linear.html">backend.Linear</a>]<br/>
+<a href="backend.Op.html#is_move_operation">is_move_operation</a> [in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="lib.Integers.html#is_power2">is_power2</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#is_rlw_mask">is_rlw_mask</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#is_rlw_mask_rec">is_rlw_mask_rec</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.CSE.html#is_trivial_op">is_trivial_op</a> [in <a href="backend.CSE.html">backend.CSE</a>]<br/>
+<a href="lib.Integers.html#is_true">is_true</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Values.html#is_true">is_true</a> [in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.Kildall.html#iterate">iterate</a> [in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.Kildall.html#iter_step">iter_step</a> [in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<br/><br/><a name="definition_K"></a><h2>K </h2>
+<a href="backend.CSE.html#kill_loads">kill_loads</a> [in <a href="backend.CSE.html">backend.CSE</a>]<br/>
+<a href="backend.CSE.html#kill_load_eqs">kill_load_eqs</a> [in <a href="backend.CSE.html">backend.CSE</a>]<br/>
+<br/><br/><a name="definition_L"></a><h2>L </h2>
+<a href="backend.Linear.html#label">label</a> [in <a href="backend.Linear.html">backend.Linear</a>]<br/>
+<a href="backend.PPC.html#label">label</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.Mach.html#label">label</a> [in <a href="backend.Mach.html">backend.Mach</a>]<br/>
+<a href="backend.PPC.html#label_pos">label_pos</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.Parallelmove.html#last">last</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Linearize.html#lbl">lbl</a> [in <a href="backend.Linearize.html">backend.Linearize</a>]<br/>
+<a href="backend.Linearize.html#lbl">lbl</a> [in <a href="backend.Linearize.html">backend.Linearize</a>]<br/>
+<a href="lib.Inclusion.html#leaf">leaf</a> [in <a href="lib.Inclusion.html">lib.Inclusion</a>]<br/>
+<a href="lib.Inclusion.html#leaf">leaf</a> [in <a href="lib.Inclusion.html">lib.Inclusion</a>]<br/>
+<a href="lib.Inclusion.html#leaf">leaf</a> [in <a href="lib.Inclusion.html">lib.Inclusion</a>]<br/>
+<a href="backend.Cminor.html#letenv">letenv</a> [in <a href="backend.Cminor.html">backend.Cminor</a>]<br/>
+<a href="backend.Csharpminor.html#letenv">letenv</a> [in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Cmconstr.html#lift">lift</a> [in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Cmconstr.html#lift_condexpr">lift_condexpr</a> [in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Cmconstr.html#lift_expr">lift_expr</a> [in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Cmconstr.html#lift_exprlist">lift_exprlist</a> [in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Linearize.html#linearize_block">linearize_block</a> [in <a href="backend.Linearize.html">backend.Linearize</a>]<br/>
+<a href="backend.Linearize.html#linearize_body">linearize_body</a> [in <a href="backend.Linearize.html">backend.Linearize</a>]<br/>
+<a href="backend.Linearize.html#linearize_function">linearize_function</a> [in <a href="backend.Linearize.html">backend.Linearize</a>]<br/>
+<a href="backend.Machtyping.html#link_invariant">link_invariant</a> [in <a href="backend.Machtyping.html">backend.Machtyping</a>]<br/>
+<a href="backend.Parallelmove.html#listsLoc2Moves">listsLoc2Moves</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Allocation.html#listsLoc2Moves">listsLoc2Moves</a> [in <a href="backend.Allocation.html">backend.Allocation</a>]<br/>
+<a href="lib.Coqlib.html#list_disjoint">list_disjoint</a> [in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="backend.Allocproof.html#live0">live0</a> [in <a href="backend.Allocproof.html">backend.Allocproof</a>]<br/>
+<a href="backend.Mem.html#load">load</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Cmconstr.html#load">load</a> [in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.PPCgen.html#loadimm">loadimm</a> [in <a href="backend.PPCgen.html">backend.PPCgen</a>]<br/>
+<a href="backend.PPCgen.html#loadind">loadind</a> [in <a href="backend.PPCgen.html">backend.PPCgen</a>]<br/>
+<a href="backend.PPCgen.html#loadind_aux">loadind_aux</a> [in <a href="backend.PPCgen.html">backend.PPCgen</a>]<br/>
+<a href="backend.Mem.html#loadv">loadv</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.PPC.html#load1">load1</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#load2">load2</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.Mem.html#load_contents">load_contents</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Values.html#load_result">load_result</a> [in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.Mach.html#load_stack">load_stack</a> [in <a href="backend.Mach.html">backend.Mach</a>]<br/>
+<a href="backend.LTL.html#locset">locset</a> [in <a href="backend.LTL.html">backend.LTL</a>]<br/>
+<a href="backend.Linear.html#locset">locset</a> [in <a href="backend.Linear.html">backend.Linear</a>]<br/>
+<a href="backend.Conventions.html#locs_acceptable">locs_acceptable</a> [in <a href="backend.Conventions.html">backend.Conventions</a>]<br/>
+<a href="backend.Alloctyping.html#locs_read_ok">locs_read_ok</a> [in <a href="backend.Alloctyping.html">backend.Alloctyping</a>]<br/>
+<a href="backend.Alloctyping.html#locs_write_ok">locs_write_ok</a> [in <a href="backend.Alloctyping.html">backend.Alloctyping</a>]<br/>
+<a href="backend.Conventions.html#loc_acceptable">loc_acceptable</a> [in <a href="backend.Conventions.html">backend.Conventions</a>]<br/>
+<a href="backend.Conventions.html#loc_arguments">loc_arguments</a> [in <a href="backend.Conventions.html">backend.Conventions</a>]<br/>
+<a href="backend.Conventions.html#loc_arguments_rec">loc_arguments_rec</a> [in <a href="backend.Conventions.html">backend.Conventions</a>]<br/>
+<a href="backend.Conventions.html#loc_argument_acceptable">loc_argument_acceptable</a> [in <a href="backend.Conventions.html">backend.Conventions</a>]<br/>
+<a href="backend.Coloring.html#loc_is_acceptable">loc_is_acceptable</a> [in <a href="backend.Coloring.html">backend.Coloring</a>]<br/>
+<a href="backend.Conventions.html#loc_parameters">loc_parameters</a> [in <a href="backend.Conventions.html">backend.Conventions</a>]<br/>
+<a href="backend.Alloctyping.html#loc_read_ok">loc_read_ok</a> [in <a href="backend.Alloctyping.html">backend.Alloctyping</a>]<br/>
+<a href="backend.Conventions.html#loc_result">loc_result</a> [in <a href="backend.Conventions.html">backend.Conventions</a>]<br/>
+<a href="backend.Alloctyping.html#loc_write_ok">loc_write_ok</a> [in <a href="backend.Alloctyping.html">backend.Alloctyping</a>]<br/>
+<a href="backend.Mem.html#low_bound">low_bound</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.PPCgen.html#low_s">low_s</a> [in <a href="backend.PPCgen.html">backend.PPCgen</a>]<br/>
+<a href="backend.PPCgen.html#low_u">low_u</a> [in <a href="backend.PPCgen.html">backend.PPCgen</a>]<br/>
+<a href="lib.Integers.html#lt">lt</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Ordered.html#lt">lt</a> [in <a href="lib.Ordered.html">lib.Ordered</a>]<br/>
+<a href="lib.Ordered.html#lt">lt</a> [in <a href="lib.Ordered.html">lib.Ordered</a>]<br/>
+<a href="lib.Ordered.html#lt">lt</a> [in <a href="lib.Ordered.html">lib.Ordered</a>]<br/>
+<a href="lib.Integers.html#ltu">ltu</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Lattice.html#lub">lub</a> [in <a href="lib.Lattice.html">lib.Lattice</a>]<br/>
+<a href="lib.Lattice.html#lub">lub</a> [in <a href="lib.Lattice.html">lib.Lattice</a>]<br/>
+<a href="lib.Sets.html#lub">lub</a> [in <a href="lib.Sets.html">lib.Sets</a>]<br/>
+<a href="lib.Lattice.html#lub">lub</a> [in <a href="lib.Lattice.html">lib.Lattice</a>]<br/>
+<a href="backend.Constprop.html#lub">lub</a> [in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<br/><br/><a name="definition_M"></a><h2>M </h2>
+<a href="backend.Constprop.html#make_addimm">make_addimm</a> [in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#make_andimm">make_andimm</a> [in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Cminorgen.html#make_cast">make_cast</a> [in <a href="backend.Cminorgen.html">backend.Cminorgen</a>]<br/>
+<a href="backend.Stacking.html#make_env">make_env</a> [in <a href="backend.Stacking.html">backend.Stacking</a>]<br/>
+<a href="backend.Cminorgen.html#make_load">make_load</a> [in <a href="backend.Cminorgen.html">backend.Cminorgen</a>]<br/>
+<a href="backend.Constprop.html#make_mulimm">make_mulimm</a> [in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Cminorgen.html#make_op">make_op</a> [in <a href="backend.Cminorgen.html">backend.Cminorgen</a>]<br/>
+<a href="backend.Constprop.html#make_orimm">make_orimm</a> [in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Kildall.html#make_predecessors">make_predecessors</a> [in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.Constprop.html#make_shlimm">make_shlimm</a> [in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#make_shrimm">make_shrimm</a> [in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#make_shruimm">make_shruimm</a> [in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Cminorgen.html#make_stackaddr">make_stackaddr</a> [in <a href="backend.Cminorgen.html">backend.Cminorgen</a>]<br/>
+<a href="backend.Cminorgen.html#make_store">make_store</a> [in <a href="backend.Cminorgen.html">backend.Cminorgen</a>]<br/>
+<a href="backend.Constprop.html#make_xorimm">make_xorimm</a> [in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="lib.Maps.html#map">map</a> [in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Maps.html#map">map</a> [in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Maps.html#map">map</a> [in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Maps.html#map">map</a> [in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="backend.RTLtyping.html#mapped">mapped</a> [in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.RTLgenproof.html#match_return_outcome">match_return_outcome</a> [in <a href="backend.RTLgenproof.html">backend.RTLgenproof</a>]<br/>
+<a href="backend.RTLgenproof.html#match_return_reg">match_return_reg</a> [in <a href="backend.RTLgenproof.html">backend.RTLgenproof</a>]<br/>
+<a href="backend.Lineartyping.html#max_over_instrs">max_over_instrs</a> [in <a href="backend.Lineartyping.html">backend.Lineartyping</a>]<br/>
+<a href="backend.Lineartyping.html#max_over_list">max_over_list</a> [in <a href="backend.Lineartyping.html">backend.Lineartyping</a>]<br/>
+<a href="backend.Lineartyping.html#max_over_regs_of_funct">max_over_regs_of_funct</a> [in <a href="backend.Lineartyping.html">backend.Lineartyping</a>]<br/>
+<a href="backend.Lineartyping.html#max_over_regs_of_instr">max_over_regs_of_instr</a> [in <a href="backend.Lineartyping.html">backend.Lineartyping</a>]<br/>
+<a href="backend.Lineartyping.html#max_over_slots_of_funct">max_over_slots_of_funct</a> [in <a href="backend.Lineartyping.html">backend.Lineartyping</a>]<br/>
+<a href="backend.Lineartyping.html#max_over_slots_of_instr">max_over_slots_of_instr</a> [in <a href="backend.Lineartyping.html">backend.Lineartyping</a>]<br/>
+<a href="lib.Integers.html#max_signed">max_signed</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#max_unsigned">max_unsigned</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Sets.html#mem">mem</a> [in <a href="lib.Sets.html">lib.Sets</a>]<br/>
+<a href="backend.RTLtyping.html#member">member</a> [in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.Mem.html#meminj">meminj</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#mem_chunk">mem_chunk</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Machabstr.html#mem_type">mem_type</a> [in <a href="backend.Machabstr.html">backend.Machabstr</a>]<br/>
+<a href="backend.Parallelmove.html#mesure">mesure</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="lib.Integers.html#min_signed">min_signed</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.RTLtyping.html#mk_env">mk_env</a> [in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="lib.Integers.html#mods">mods</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Cmconstr.html#mods">mods</a> [in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Values.html#mods">mods</a> [in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="lib.Integers.html#modu">modu</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Values.html#modu">modu</a> [in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.Cmconstr.html#modu">modu</a> [in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="lib.Integers.html#modulus">modulus</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Cmconstr.html#mod_aux">mod_aux</a> [in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.RTLgen.html#mon">mon</a> [in <a href="backend.RTLgen.html">backend.RTLgen</a>]<br/>
+<a href="lib.Integers.html#mone">mone</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Parallelmove.html#Move">Move</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#Moves">Moves</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Lineartyping.html#mreg_bounded">mreg_bounded</a> [in <a href="backend.Lineartyping.html">backend.Lineartyping</a>]<br/>
+<a href="backend.Locations.html#mreg_type">mreg_type</a> [in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="lib.Integers.html#mul">mul</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Cmconstr.html#mul">mul</a> [in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Values.html#mul">mul</a> [in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.Cmconstr.html#mulf">mulf</a> [in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Values.html#mulf">mulf</a> [in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.Cmconstr.html#mulimm">mulimm</a> [in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Cmconstr.html#mulimm_base">mulimm_base</a> [in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Cmconstr.html#mulimm_match">mulimm_match</a> [in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Cmconstr.html#mul_match">mul_match</a> [in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Cmconstr.html#mul_match_aux">mul_match_aux</a> [in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.RTLgen.html#mutated_condexpr">mutated_condexpr</a> [in <a href="backend.RTLgen.html">backend.RTLgen</a>]<br/>
+<a href="backend.RTLgen.html#mutated_expr">mutated_expr</a> [in <a href="backend.RTLgen.html">backend.RTLgen</a>]<br/>
+<a href="backend.RTLgen.html#mutated_exprlist">mutated_exprlist</a> [in <a href="backend.RTLgen.html">backend.RTLgen</a>]<br/>
+<a href="backend.RTLgenproof1.html#mutated_reg">mutated_reg</a> [in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<br/><br/><a name="definition_N"></a><h2>N </h2>
+<a href="lib.Inclusion.html#nat_le_bool">nat_le_bool</a> [in <a href="lib.Inclusion.html">lib.Inclusion</a>]<br/>
+<a href="backend.Values.html#neg">neg</a> [in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="lib.Integers.html#neg">neg</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.AST.html#negate_comparison">negate_comparison</a> [in <a href="backend.AST.html">backend.AST</a>]<br/>
+<a href="backend.Op.html#negate_condition">negate_condition</a> [in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Values.html#negf">negf</a> [in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.Cmconstr.html#negfloat">negfloat</a> [in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Cmconstr.html#negint">negint</a> [in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.RTLgen.html#new_reg">new_reg</a> [in <a href="backend.RTLgen.html">backend.RTLgen</a>]<br/>
+<a href="backend.PPC.html#nextinstr">nextinstr</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.Parallelmove.html#nil">nil</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#nil">nil</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#nil">nil</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#nil">nil</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#nil">nil</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#nil">nil</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#nil">nil</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#nil">nil</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#nil">nil</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#nil">nil</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Allocproof_aux.html#nil">nil</a> [in <a href="backend.Allocproof_aux.html">backend.Allocproof_aux</a>]<br/>
+<a href="backend.Parallelmove.html#nil">nil</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#nil">nil</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#nil">nil</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#nil">nil</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#nil">nil</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#nil">nil</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#nil">nil</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.RTL.html#node">node</a> [in <a href="backend.RTL.html">backend.RTL</a>]<br/>
+<a href="backend.LTL.html#node">node</a> [in <a href="backend.LTL.html">backend.LTL</a>]<br/>
+<a href="backend.Parallelmove.html#NoOverlap">NoOverlap</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#noOverlap">noOverlap</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#noOverlap_aux">noOverlap_aux</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#noRead">noRead</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="lib.Integers.html#not">not</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Values.html#notbool">notbool</a> [in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.Cmconstr.html#notbool">notbool</a> [in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="lib.Integers.html#notbool">notbool</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Cmconstr.html#notbool_base">notbool_base</a> [in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Parallelmove.html#notemporary">notemporary</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Locations.html#notin">notin</a> [in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Values.html#notint">notint</a> [in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.Cmconstr.html#notint">notint</a> [in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Cmconstr.html#notint_match">notint_match</a> [in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Parallelmove.html#noTmp">noTmp</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#noTmpLast">noTmpLast</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#noWrite">noWrite</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#no_overlap">no_overlap</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Locations.html#no_overlap">no_overlap</a> [in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Parallelmove.html#no_overlap_list">no_overlap_list</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#no_overlap_state">no_overlap_state</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Allocproof_aux.html#no_overlap_stateD">no_overlap_stateD</a> [in <a href="backend.Allocproof_aux.html">backend.Allocproof_aux</a>]<br/>
+<a href="backend.Allocproof_aux.html#no_tmp13_state">no_tmp13_state</a> [in <a href="backend.Allocproof_aux.html">backend.Allocproof_aux</a>]<br/>
+<a href="backend.Mem.html#nullptr">nullptr</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.CSE.html#numbering_holds">numbering_holds</a> [in <a href="backend.CSE.html">backend.CSE</a>]<br/>
+<a href="backend.CSE.html#numbering_satisfiable">numbering_satisfiable</a> [in <a href="backend.CSE.html">backend.CSE</a>]<br/>
+<a href="backend.Kildall.html#num_iterations">num_iterations</a> [in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<br/><br/><a name="definition_O"></a><h2>O </h2>
+<a href="backend.Stacking.html#offset_of_index">offset_of_index</a> [in <a href="backend.Stacking.html">backend.Stacking</a>]<br/>
+<a href="backend.Op.html#offset_sp">offset_sp</a> [in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Values.html#of_bool">of_bool</a> [in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="lib.Integers.html#one">one</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#one_bits">one_bits</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.RTLtyping.html#option_fold2">option_fold2</a> [in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="lib.Coqlib.html#option_map">option_map</a> [in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="backend.Constprop.html#op_strength_reduction">op_strength_reduction</a> [in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Constprop.html#op_strength_reduction_match">op_strength_reduction_match</a> [in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="lib.Integers.html#or">or</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Values.html#or">or</a> [in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.Cmconstr.html#or">or</a> [in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.InterfGraph.html#ordered_pair">ordered_pair</a> [in <a href="backend.InterfGraph.html">backend.InterfGraph</a>]<br/>
+<a href="backend.PPCgen.html#orimm">orimm</a> [in <a href="backend.PPCgen.html">backend.PPCgen</a>]<br/>
+<a href="backend.Cmconstr.html#or_match">or_match</a> [in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Csharpminor.html#outcome_block">outcome_block</a> [in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Cminor.html#outcome_block">outcome_block</a> [in <a href="backend.Cminor.html">backend.Cminor</a>]<br/>
+<a href="backend.RTLgenproof.html#outcome_node">outcome_node</a> [in <a href="backend.RTLgenproof.html">backend.RTLgenproof</a>]<br/>
+<a href="backend.Cminor.html#outcome_result_value">outcome_result_value</a> [in <a href="backend.Cminor.html">backend.Cminor</a>]<br/>
+<a href="backend.Csharpminor.html#outcome_result_value">outcome_result_value</a> [in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Lineartyping.html#outgoing_slot">outgoing_slot</a> [in <a href="backend.Lineartyping.html">backend.Lineartyping</a>]<br/>
+<a href="backend.Lineartyping.html#outgoing_space">outgoing_space</a> [in <a href="backend.Lineartyping.html">backend.Lineartyping</a>]<br/>
+<a href="backend.Locations.html#overlap">overlap</a> [in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Locations.html#overlap_aux">overlap_aux</a> [in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<br/><br/><a name="definition_P"></a><h2>P </h2>
+<a href="backend.Allocation.html#parallel_move">parallel_move</a> [in <a href="backend.Allocation.html">backend.Allocation</a>]<br/>
+<a href="backend.Allocation.html#parallel_move_order">parallel_move_order</a> [in <a href="backend.Allocation.html">backend.Allocation</a>]<br/>
+<a href="backend.Conventions.html#parameter_of_argument">parameter_of_argument</a> [in <a href="backend.Conventions.html">backend.Conventions</a>]<br/>
+<a href="backend.Parallelmove.html#path">path</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="lib.Coqlib.html#peq">peq</a> [in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="backend.Parallelmove.html#pexec">pexec</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="lib.Coqlib.html#Ple">Ple</a> [in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="lib.Coqlib.html#Plt">Plt</a> [in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="lib.Coqlib.html#plt">plt</a> [in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="backend.Parallelmove.html#Pmov">Pmov</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="lib.Coqlib.html#positive_rec">positive_rec</a> [in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="lib.Integers.html#powerserie">powerserie</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Kildall.html#predecessors">predecessors</a> [in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.PPCgenproof1.html#preg_of">preg_of</a> [in <a href="backend.PPCgenproof1.html">backend.PPCgenproof1</a>]<br/>
+<a href="backend.LTL.html#program">program</a> [in <a href="backend.LTL.html">backend.LTL</a>]<br/>
+<a href="backend.Cminor.html#program">program</a> [in <a href="backend.Cminor.html">backend.Cminor</a>]<br/>
+<a href="backend.Linear.html#program">program</a> [in <a href="backend.Linear.html">backend.Linear</a>]<br/>
+<a href="backend.RTL.html#program">program</a> [in <a href="backend.RTL.html">backend.RTL</a>]<br/>
+<a href="backend.Csharpminor.html#program">program</a> [in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.PPC.html#program">program</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.Mach.html#program">program</a> [in <a href="backend.Mach.html">backend.Mach</a>]<br/>
+<a href="backend.Kildall.html#propagate_succ">propagate_succ</a> [in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.Kildall.html#propagate_successors">propagate_successors</a> [in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.Kildall.html#propagate_succ_list">propagate_succ_list</a> [in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.Kildall.html#Pstate">Pstate</a> [in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.Allocproof_aux.html#p_move">p_move</a> [in <a href="backend.Allocproof_aux.html">backend.Allocproof_aux</a>]<br/>
+<a href="backend.Parallelmove.html#P_move">P_move</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<br/><br/><a name="definition_R"></a><h2>R </h2>
+<a href="backend.Coloring.html#R">R</a> [in <a href="backend.Coloring.html">backend.Coloring</a>]<br/>
+<a href="backend.Linearize.html#reachable">reachable</a> [in <a href="backend.Linearize.html">backend.Linearize</a>]<br/>
+<a href="backend.Linearize.html#reachable_aux">reachable_aux</a> [in <a href="backend.Linearize.html">backend.Linearize</a>]<br/>
+<a href="backend.Registers.html#reg">reg</a> [in <a href="backend.Registers.html">backend.Registers</a>]<br/>
+<a href="backend.Parallelmove.html#Reg">Reg</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Coloring.html#regalloc">regalloc</a> [in <a href="backend.Coloring.html">backend.Coloring</a>]<br/>
+<a href="backend.RTLtyping.html#regenv">regenv</a> [in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.LTL.html#reglist">reglist</a> [in <a href="backend.LTL.html">backend.LTL</a>]<br/>
+<a href="backend.Registers.html#regmap_optget">regmap_optget</a> [in <a href="backend.Registers.html">backend.Registers</a>]<br/>
+<a href="backend.Registers.html#regmap_optset">regmap_optset</a> [in <a href="backend.Registers.html">backend.Registers</a>]<br/>
+<a href="backend.Mach.html#regset">regset</a> [in <a href="backend.Mach.html">backend.Mach</a>]<br/>
+<a href="backend.RTL.html#regset">regset</a> [in <a href="backend.RTL.html">backend.RTL</a>]<br/>
+<a href="backend.PPC.html#regset">regset</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.Allocation.html#regs_for">regs_for</a> [in <a href="backend.Allocation.html">backend.Allocation</a>]<br/>
+<a href="backend.Allocation.html#regs_for_rec">regs_for_rec</a> [in <a href="backend.Allocation.html">backend.Allocation</a>]<br/>
+<a href="backend.Constpropproof.html#regs_match_approx">regs_match_approx</a> [in <a href="backend.Constpropproof.html">backend.Constpropproof</a>]<br/>
+<a href="backend.Lineartyping.html#regs_of_instr">regs_of_instr</a> [in <a href="backend.Lineartyping.html">backend.Lineartyping</a>]<br/>
+<a href="backend.Allocation.html#reg_for">reg_for</a> [in <a href="backend.Allocation.html">backend.Allocation</a>]<br/>
+<a href="backend.RTLgenproof1.html#reg_fresh">reg_fresh</a> [in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.RTLgenproof1.html#reg_in_map">reg_in_map</a> [in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.Allocation.html#reg_list_dead">reg_list_dead</a> [in <a href="backend.Allocation.html">backend.Allocation</a>]<br/>
+<a href="backend.Allocation.html#reg_list_live">reg_list_live</a> [in <a href="backend.Allocation.html">backend.Allocation</a>]<br/>
+<a href="backend.PPC.html#reg_of_crbit">reg_of_crbit</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.Allocation.html#reg_option_live">reg_option_live</a> [in <a href="backend.Allocation.html">backend.Allocation</a>]<br/>
+<a href="backend.Allocation.html#reg_sum_live">reg_sum_live</a> [in <a href="backend.Allocation.html">backend.Allocation</a>]<br/>
+<a href="backend.RTLgenproof1.html#reg_valid">reg_valid</a> [in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.CSE.html#reg_valnum">reg_valnum</a> [in <a href="backend.CSE.html">backend.CSE</a>]<br/>
+<a href="lib.Sets.html#remove">remove</a> [in <a href="lib.Sets.html">lib.Sets</a>]<br/>
+<a href="lib.Maps.html#remove">remove</a> [in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Inclusion.html#remove_all_leaves">remove_all_leaves</a> [in <a href="lib.Inclusion.html">lib.Inclusion</a>]<br/>
+<a href="backend.RTLtyping.html#repet">repet</a> [in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.Parallelmove.html#replace_last_s">replace_last_s</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="lib.union_find.html#repr">repr</a> [in <a href="lib.union_find.html">lib.union_find</a>]<br/>
+<a href="lib.Integers.html#repr">repr</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.union_find.html#repr_aux">repr_aux</a> [in <a href="lib.union_find.html">lib.union_find</a>]<br/>
+<a href="lib.union_find.html#repr_order">repr_order</a> [in <a href="lib.union_find.html">lib.union_find</a>]<br/>
+<a href="lib.union_find.html#repr_rec">repr_rec</a> [in <a href="lib.union_find.html">lib.union_find</a>]<br/>
+<a href="backend.RTLgen.html#reserve_instr">reserve_instr</a> [in <a href="backend.RTLgen.html">backend.RTLgen</a>]<br/>
+<a href="backend.Stacking.html#restore_callee_save">restore_callee_save</a> [in <a href="backend.Stacking.html">backend.Stacking</a>]<br/>
+<a href="backend.Stacking.html#restore_float_callee_save">restore_float_callee_save</a> [in <a href="backend.Stacking.html">backend.Stacking</a>]<br/>
+<a href="backend.Stacking.html#restore_int_callee_save">restore_int_callee_save</a> [in <a href="backend.Stacking.html">backend.Stacking</a>]<br/>
+<a href="backend.Kildall.html#result">result</a> [in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.Allocproof_aux.html#reswellFormed">reswellFormed</a> [in <a href="backend.Allocproof_aux.html">backend.Allocproof_aux</a>]<br/>
+<a href="backend.RTLgen.html#ret">ret</a> [in <a href="backend.RTLgen.html">backend.RTLgen</a>]<br/>
+<a href="backend.LTL.html#return_regs">return_regs</a> [in <a href="backend.LTL.html">backend.LTL</a>]<br/>
+<a href="backend.RTLgen.html#ret_reg">ret_reg</a> [in <a href="backend.RTLgen.html">backend.RTLgen</a>]<br/>
+<a href="backend.CSEproof.html#rhs_evals_to">rhs_evals_to</a> [in <a href="backend.CSEproof.html">backend.CSEproof</a>]<br/>
+<a href="backend.Parallelmove.html#right">right</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="lib.Integers.html#rlw_accepting">rlw_accepting</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#rlw_transition">rlw_transition</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#rol">rol</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Values.html#rolm">rolm</a> [in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.Cmconstr.html#rolm">rolm</a> [in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="lib.Integers.html#rolm">rolm</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Cmconstr.html#rolm_match">rolm_match</a> [in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<br/><br/><a name="definition_S"></a><h2>S </h2>
+<a href="lib.union_find.html#sameclass">sameclass</a> [in <a href="lib.union_find.html">lib.union_find</a>]<br/>
+<a href="lib.union_find.html#sameclass">sameclass</a> [in <a href="lib.union_find.html">lib.union_find</a>]<br/>
+<a href="backend.Parallelmove.html#sameEnv">sameEnv</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#sameExec">sameExec</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Cmconstr.html#same_expr_pure">same_expr_pure</a> [in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Coloring.html#same_typ">same_typ</a> [in <a href="backend.Coloring.html">backend.Coloring</a>]<br/>
+<a href="backend.Stacking.html#save_callee_save">save_callee_save</a> [in <a href="backend.Stacking.html">backend.Stacking</a>]<br/>
+<a href="backend.Stacking.html#save_float_callee_save">save_float_callee_save</a> [in <a href="backend.Stacking.html">backend.Stacking</a>]<br/>
+<a href="backend.Stacking.html#save_int_callee_save">save_int_callee_save</a> [in <a href="backend.Stacking.html">backend.Stacking</a>]<br/>
+<a href="lib.Maps.html#set">set</a> [in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="backend.Locations.html#set">set</a> [in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="lib.Maps.html#set">set</a> [in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Maps.html#set">set</a> [in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Lattice.html#set">set</a> [in <a href="lib.Lattice.html">lib.Lattice</a>]<br/>
+<a href="lib.Maps.html#set">set</a> [in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="backend.Mem.html#setN">setN</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#set_cont">set_cont</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Cminor.html#set_locals">set_locals</a> [in <a href="backend.Cminor.html">backend.Cminor</a>]<br/>
+<a href="backend.Cminor.html#set_params">set_params</a> [in <a href="backend.Cminor.html">backend.Cminor</a>]<br/>
+<a href="backend.Parallelmove.html#Sexec">Sexec</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#sexec">sexec</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Cmconstr.html#shift_match">shift_match</a> [in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Stackingproof.html#shift_sp">shift_sp</a> [in <a href="backend.Stackingproof.html">backend.Stackingproof</a>]<br/>
+<a href="lib.Integers.html#shl">shl</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Cmconstr.html#shl">shl</a> [in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Values.html#shl">shl</a> [in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.Cmconstr.html#shlimm">shlimm</a> [in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="lib.Integers.html#shr">shr</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Cmconstr.html#shr">shr</a> [in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Values.html#shr">shr</a> [in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.Cmconstr.html#shru">shru</a> [in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="lib.Integers.html#shru">shru</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Values.html#shru">shru</a> [in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.Cmconstr.html#shruimm">shruimm</a> [in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="lib.Integers.html#shrx">shrx</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Values.html#shrx">shrx</a> [in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.Values.html#shr_carry">shr_carry</a> [in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="lib.Integers.html#shr_carry">shr_carry</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#signed">signed</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Parallelmove.html#simpleDest">simpleDest</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Values.html#singleoffloat">singleoffloat</a> [in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.Cmconstr.html#singleoffloat">singleoffloat</a> [in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Csharpminor.html#sizeof">sizeof</a> [in <a href="backend.Csharpminor.html">backend.Csharpminor</a>]<br/>
+<a href="backend.Conventions.html#size_arguments">size_arguments</a> [in <a href="backend.Conventions.html">backend.Conventions</a>]<br/>
+<a href="backend.Conventions.html#size_arguments_rec">size_arguments_rec</a> [in <a href="backend.Conventions.html">backend.Conventions</a>]<br/>
+<a href="backend.Mem.html#size_chunk">size_chunk</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Mem.html#size_mem">size_mem</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Lineartyping.html#slots_of_instr">slots_of_instr</a> [in <a href="backend.Lineartyping.html">backend.Lineartyping</a>]<br/>
+<a href="backend.Lineartyping.html#slot_bounded">slot_bounded</a> [in <a href="backend.Lineartyping.html">backend.Lineartyping</a>]<br/>
+<a href="backend.LTLtyping.html#slot_bounded">slot_bounded</a> [in <a href="backend.LTLtyping.html">backend.LTLtyping</a>]<br/>
+<a href="backend.Locations.html#slot_type">slot_type</a> [in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Parallelmove.html#Some">Some</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="lib.Inclusion.html#sort_bin">sort_bin</a> [in <a href="lib.Inclusion.html">lib.Inclusion</a>]<br/>
+<a href="backend.Parallelmove.html#split_move">split_move</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#split_move'">split_move'</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Linearize.html#starts_with">starts_with</a> [in <a href="backend.Linearize.html">backend.Linearize</a>]<br/>
+<a href="backend.Kildall.html#start_state">start_state</a> [in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.Kildall.html#start_state_in">start_state_in</a> [in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.Kildall.html#start_state_wrk">start_state_wrk</a> [in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.Parallelmove.html#State">State</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#StateBeing">StateBeing</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#StateDone">StateDone</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#StateToMove">StateToMove</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.RTLgenproof1.html#state_extends">state_extends</a> [in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.Kildall.html#state_invariant">state_invariant</a> [in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.Kildall.html#step">step</a> [in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.Kildall.html#step">step</a> [in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.Parallelmove.html#stepf">stepf</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#stepf'">stepf'</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#stepInv">stepInv</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Parallelmove.html#step_NF">step_NF</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.Cmconstr.html#store">store</a> [in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Mem.html#store">store</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.PPCgen.html#storeind">storeind</a> [in <a href="backend.PPCgen.html">backend.PPCgen</a>]<br/>
+<a href="backend.PPCgen.html#storeind_aux">storeind_aux</a> [in <a href="backend.PPCgen.html">backend.PPCgen</a>]<br/>
+<a href="backend.Mem.html#storev">storev</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.PPC.html#store1">store1</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#store2">store2</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.Mem.html#store_contents">store_contents</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Cminorgen.html#store_parameters">store_parameters</a> [in <a href="backend.Cminorgen.html">backend.Cminorgen</a>]<br/>
+<a href="backend.Mach.html#store_stack">store_stack</a> [in <a href="backend.Mach.html">backend.Mach</a>]<br/>
+<a href="backend.Values.html#sub">sub</a> [in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="lib.Integers.html#sub">sub</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Cmconstr.html#sub">sub</a> [in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Values.html#subf">subf</a> [in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.Cmconstr.html#subf">subf</a> [in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Cmconstr.html#subf_match">subf_match</a> [in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Cmconstr.html#sub_match">sub_match</a> [in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Cmconstr.html#sub_match_aux">sub_match_aux</a> [in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.LTL.html#successors">successors</a> [in <a href="backend.LTL.html">backend.LTL</a>]<br/>
+<a href="backend.RTL.html#successors">successors</a> [in <a href="backend.RTL.html">backend.RTL</a>]<br/>
+<a href="backend.LTL.html#successors_aux">successors_aux</a> [in <a href="backend.LTL.html">backend.LTL</a>]<br/>
+<a href="lib.Coqlib.html#sum_left_map">sum_left_map</a> [in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="backend.AST.html#swap_comparison">swap_comparison</a> [in <a href="backend.AST.html">backend.AST</a>]<br/>
+<a href="backend.PPC.html#symbol_offset">symbol_offset</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.Linearize.html#s1">s1</a> [in <a href="backend.Linearize.html">backend.Linearize</a>]<br/>
+<br/><br/><a name="definition_T"></a><h2>T </h2>
+<a href="backend.PPC.html#t">t</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="lib.Ordered.html#t">t</a> [in <a href="lib.Ordered.html">lib.Ordered</a>]<br/>
+<a href="lib.Maps.html#t">t</a> [in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Maps.html#t">t</a> [in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Lattice.html#t">t</a> [in <a href="lib.Lattice.html">lib.Lattice</a>]<br/>
+<a href="backend.Locations.html#t">t</a> [in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Constprop.html#t">t</a> [in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="lib.Ordered.html#t">t</a> [in <a href="lib.Ordered.html">lib.Ordered</a>]<br/>
+<a href="backend.Globalenvs.html#t">t</a> [in <a href="backend.Globalenvs.html">backend.Globalenvs</a>]<br/>
+<a href="lib.Lattice.html#t">t</a> [in <a href="lib.Lattice.html">lib.Lattice</a>]<br/>
+<a href="backend.RTLtyping.html#T">T</a> [in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="lib.union_find.html#T">T</a> [in <a href="lib.union_find.html">lib.union_find</a>]<br/>
+<a href="backend.CSEproof.html#t">t</a> [in <a href="backend.CSEproof.html">backend.CSEproof</a>]<br/>
+<a href="backend.Locations.html#t">t</a> [in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="lib.Maps.html#t">t</a> [in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="backend.Parallelmove.html#T">T</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="lib.Maps.html#t">t</a> [in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="backend.RTLtyping.html#T">T</a> [in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.InterfGraph.html#t">t</a> [in <a href="backend.InterfGraph.html">backend.InterfGraph</a>]<br/>
+<a href="lib.Maps.html#t">t</a> [in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Ordered.html#t">t</a> [in <a href="lib.Ordered.html">lib.Ordered</a>]<br/>
+<a href="lib.Lattice.html#t">t</a> [in <a href="lib.Lattice.html">lib.Lattice</a>]<br/>
+<a href="backend.Mach.html#t">t</a> [in <a href="backend.Mach.html">backend.Mach</a>]<br/>
+<a href="lib.Sets.html#t">t</a> [in <a href="lib.Sets.html">lib.Sets</a>]<br/>
+<a href="lib.Maps.html#t">t</a> [in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="backend.CSE.html#t">t</a> [in <a href="backend.CSE.html">backend.CSE</a>]<br/>
+<a href="backend.Conventions.html#temporaries">temporaries</a> [in <a href="backend.Conventions.html">backend.Conventions</a>]<br/>
+<a href="backend.Allocproof_aux.html#temporaries1">temporaries1</a> [in <a href="backend.Allocproof_aux.html">backend.Allocproof_aux</a>]<br/>
+<a href="backend.Allocproof_aux.html#temporaries1_3">temporaries1_3</a> [in <a href="backend.Allocproof_aux.html">backend.Allocproof_aux</a>]<br/>
+<a href="backend.Allocproof_aux.html#temporaries2">temporaries2</a> [in <a href="backend.Allocproof_aux.html">backend.Allocproof_aux</a>]<br/>
+<a href="backend.RTLtyping.html#teq">teq</a> [in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="lib.Inclusion.html#test_inclusion">test_inclusion</a> [in <a href="lib.Inclusion.html">lib.Inclusion</a>]<br/>
+<a href="backend.Allocation.html#Tint">Tint</a> [in <a href="backend.Allocation.html">backend.Allocation</a>]<br/>
+<a href="lib.Lattice.html#top">top</a> [in <a href="lib.Lattice.html">lib.Lattice</a>]<br/>
+<a href="lib.Lattice.html#top">top</a> [in <a href="lib.Lattice.html">lib.Lattice</a>]<br/>
+<a href="backend.CSE.html#top">top</a> [in <a href="backend.CSE.html">backend.CSE</a>]<br/>
+<a href="backend.Constprop.html#top">top</a> [in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="lib.Lattice.html#top">top</a> [in <a href="lib.Lattice.html">lib.Lattice</a>]<br/>
+<a href="backend.Allocation.html#transfer">transfer</a> [in <a href="backend.Allocation.html">backend.Allocation</a>]<br/>
+<a href="backend.Constprop.html#transfer">transfer</a> [in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.CSE.html#transfer">transfer</a> [in <a href="backend.CSE.html">backend.CSE</a>]<br/>
+<a href="backend.AST.html#transform_partial_program">transform_partial_program</a> [in <a href="backend.AST.html">backend.AST</a>]<br/>
+<a href="backend.AST.html#transform_program">transform_program</a> [in <a href="backend.AST.html">backend.AST</a>]<br/>
+<a href="backend.Main.html#transf_cminor_function">transf_cminor_function</a> [in <a href="backend.Main.html">backend.Main</a>]<br/>
+<a href="backend.Main.html#transf_cminor_program">transf_cminor_program</a> [in <a href="backend.Main.html">backend.Main</a>]<br/>
+<a href="backend.Main.html#transf_cminor_program2">transf_cminor_program2</a> [in <a href="backend.Main.html">backend.Main</a>]<br/>
+<a href="backend.Constprop.html#transf_code">transf_code</a> [in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.CSE.html#transf_code">transf_code</a> [in <a href="backend.CSE.html">backend.CSE</a>]<br/>
+<a href="backend.Main.html#transf_csharpminor_function">transf_csharpminor_function</a> [in <a href="backend.Main.html">backend.Main</a>]<br/>
+<a href="backend.Main.html#transf_csharpminor_program">transf_csharpminor_program</a> [in <a href="backend.Main.html">backend.Main</a>]<br/>
+<a href="backend.Main.html#transf_csharpminor_program2">transf_csharpminor_program2</a> [in <a href="backend.Main.html">backend.Main</a>]<br/>
+<a href="backend.Allocation.html#transf_entrypoint">transf_entrypoint</a> [in <a href="backend.Allocation.html">backend.Allocation</a>]<br/>
+<a href="backend.Linearize.html#transf_function">transf_function</a> [in <a href="backend.Linearize.html">backend.Linearize</a>]<br/>
+<a href="backend.Allocation.html#transf_function">transf_function</a> [in <a href="backend.Allocation.html">backend.Allocation</a>]<br/>
+<a href="backend.CSE.html#transf_function">transf_function</a> [in <a href="backend.CSE.html">backend.CSE</a>]<br/>
+<a href="backend.RTL.html#transf_function">transf_function</a> [in <a href="backend.RTL.html">backend.RTL</a>]<br/>
+<a href="backend.PPCgen.html#transf_function">transf_function</a> [in <a href="backend.PPCgen.html">backend.PPCgen</a>]<br/>
+<a href="backend.Stacking.html#transf_function">transf_function</a> [in <a href="backend.Stacking.html">backend.Stacking</a>]<br/>
+<a href="backend.Constprop.html#transf_function">transf_function</a> [in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Allocation.html#transf_instr">transf_instr</a> [in <a href="backend.Allocation.html">backend.Allocation</a>]<br/>
+<a href="backend.Constprop.html#transf_instr">transf_instr</a> [in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.CSE.html#transf_instr">transf_instr</a> [in <a href="backend.CSE.html">backend.CSE</a>]<br/>
+<a href="backend.Globalenvs.html#transf_partial">transf_partial</a> [in <a href="backend.Globalenvs.html">backend.Globalenvs</a>]<br/>
+<a href="backend.AST.html#transf_partial_program">transf_partial_program</a> [in <a href="backend.AST.html">backend.AST</a>]<br/>
+<a href="backend.CSE.html#transf_program">transf_program</a> [in <a href="backend.CSE.html">backend.CSE</a>]<br/>
+<a href="backend.PPCgen.html#transf_program">transf_program</a> [in <a href="backend.PPCgen.html">backend.PPCgen</a>]<br/>
+<a href="backend.Stacking.html#transf_program">transf_program</a> [in <a href="backend.Stacking.html">backend.Stacking</a>]<br/>
+<a href="backend.Constprop.html#transf_program">transf_program</a> [in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Allocation.html#transf_program">transf_program</a> [in <a href="backend.Allocation.html">backend.Allocation</a>]<br/>
+<a href="backend.Linearize.html#transf_program">transf_program</a> [in <a href="backend.Linearize.html">backend.Linearize</a>]<br/>
+<a href="backend.AST.html#transf_program">transf_program</a> [in <a href="backend.AST.html">backend.AST</a>]<br/>
+<a href="backend.Stacking.html#transl_addr">transl_addr</a> [in <a href="backend.Stacking.html">backend.Stacking</a>]<br/>
+<a href="backend.Stacking.html#transl_body">transl_body</a> [in <a href="backend.Stacking.html">backend.Stacking</a>]<br/>
+<a href="backend.PPCgen.html#transl_code">transl_code</a> [in <a href="backend.PPCgen.html">backend.PPCgen</a>]<br/>
+<a href="backend.Stacking.html#transl_code">transl_code</a> [in <a href="backend.Stacking.html">backend.Stacking</a>]<br/>
+<a href="backend.PPCgen.html#transl_cond">transl_cond</a> [in <a href="backend.PPCgen.html">backend.PPCgen</a>]<br/>
+<a href="backend.RTLgenproof.html#transl_condition_correct">transl_condition_correct</a> [in <a href="backend.RTLgenproof.html">backend.RTLgenproof</a>]<br/>
+<a href="backend.RTLgenproof1.html#transl_condition_incr_pred">transl_condition_incr_pred</a> [in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.RTLgen.html#transl_expr">transl_expr</a> [in <a href="backend.RTLgen.html">backend.RTLgen</a>]<br/>
+<a href="backend.Cminorgen.html#transl_expr">transl_expr</a> [in <a href="backend.Cminorgen.html">backend.Cminorgen</a>]<br/>
+<a href="backend.RTLgenproof.html#transl_exprlist_correct">transl_exprlist_correct</a> [in <a href="backend.RTLgenproof.html">backend.RTLgenproof</a>]<br/>
+<a href="backend.RTLgenproof1.html#transl_exprlist_incr_pred">transl_exprlist_incr_pred</a> [in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.RTLgenproof.html#transl_expr_correct">transl_expr_correct</a> [in <a href="backend.RTLgenproof.html">backend.RTLgenproof</a>]<br/>
+<a href="backend.RTLgenproof1.html#transl_expr_incr_pred">transl_expr_incr_pred</a> [in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.RTLgen.html#transl_fun">transl_fun</a> [in <a href="backend.RTLgen.html">backend.RTLgen</a>]<br/>
+<a href="backend.Cminorgen.html#transl_function">transl_function</a> [in <a href="backend.Cminorgen.html">backend.Cminorgen</a>]<br/>
+<a href="backend.PPCgen.html#transl_function">transl_function</a> [in <a href="backend.PPCgen.html">backend.PPCgen</a>]<br/>
+<a href="backend.RTLgen.html#transl_function">transl_function</a> [in <a href="backend.RTLgen.html">backend.RTLgen</a>]<br/>
+<a href="backend.RTLgenproof.html#transl_function_correct">transl_function_correct</a> [in <a href="backend.RTLgenproof.html">backend.RTLgenproof</a>]<br/>
+<a href="backend.PPCgen.html#transl_instr">transl_instr</a> [in <a href="backend.PPCgen.html">backend.PPCgen</a>]<br/>
+<a href="backend.Stacking.html#transl_instr">transl_instr</a> [in <a href="backend.Stacking.html">backend.Stacking</a>]<br/>
+<a href="backend.PPCgen.html#transl_load_store">transl_load_store</a> [in <a href="backend.PPCgen.html">backend.PPCgen</a>]<br/>
+<a href="backend.Stacking.html#transl_op">transl_op</a> [in <a href="backend.Stacking.html">backend.Stacking</a>]<br/>
+<a href="backend.PPCgen.html#transl_op">transl_op</a> [in <a href="backend.PPCgen.html">backend.PPCgen</a>]<br/>
+<a href="backend.RTLgen.html#transl_program">transl_program</a> [in <a href="backend.RTLgen.html">backend.RTLgen</a>]<br/>
+<a href="backend.Cminorgen.html#transl_program">transl_program</a> [in <a href="backend.Cminorgen.html">backend.Cminorgen</a>]<br/>
+<a href="backend.Cminorgen.html#transl_stmt">transl_stmt</a> [in <a href="backend.Cminorgen.html">backend.Cminorgen</a>]<br/>
+<a href="backend.RTLgen.html#transl_stmt">transl_stmt</a> [in <a href="backend.RTLgen.html">backend.RTLgen</a>]<br/>
+<a href="backend.RTLgenproof.html#transl_stmtlist_correct">transl_stmtlist_correct</a> [in <a href="backend.RTLgenproof.html">backend.RTLgenproof</a>]<br/>
+<a href="backend.RTLgenproof1.html#transl_stmtlist_incr_pred">transl_stmtlist_incr_pred</a> [in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.RTLgenproof.html#transl_stmt_correct">transl_stmt_correct</a> [in <a href="backend.RTLgenproof.html">backend.RTLgenproof</a>]<br/>
+<a href="backend.RTLgenproof1.html#transl_stmt_incr_pred">transl_stmt_incr_pred</a> [in <a href="backend.RTLgenproof1.html">backend.RTLgenproof1</a>]<br/>
+<a href="backend.Tunnelingproof.html#tunneled_code">tunneled_code</a> [in <a href="backend.Tunnelingproof.html">backend.Tunnelingproof</a>]<br/>
+<a href="backend.Tunneling.html#tunnel_block">tunnel_block</a> [in <a href="backend.Tunneling.html">backend.Tunneling</a>]<br/>
+<a href="backend.Tunneling.html#tunnel_function">tunnel_function</a> [in <a href="backend.Tunneling.html">backend.Tunneling</a>]<br/>
+<a href="backend.Tunnelingproof.html#tunnel_outcome">tunnel_outcome</a> [in <a href="backend.Tunnelingproof.html">backend.Tunnelingproof</a>]<br/>
+<a href="backend.Tunneling.html#tunnel_program">tunnel_program</a> [in <a href="backend.Tunneling.html">backend.Tunneling</a>]<br/>
+<a href="backend.Locations.html#type">type</a> [in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Registers.html#typenv">typenv</a> [in <a href="backend.Registers.html">backend.Registers</a>]<br/>
+<a href="backend.AST.html#typesize">typesize</a> [in <a href="backend.AST.html">backend.AST</a>]<br/>
+<a href="backend.Locations.html#typesize">typesize</a> [in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Op.html#type_of_addressing">type_of_addressing</a> [in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Op.html#type_of_chunk">type_of_chunk</a> [in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Op.html#type_of_condition">type_of_condition</a> [in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.Stackingproof.html#type_of_index">type_of_index</a> [in <a href="backend.Stackingproof.html">backend.Stackingproof</a>]<br/>
+<a href="backend.Op.html#type_of_operation">type_of_operation</a> [in <a href="backend.Op.html">backend.Op</a>]<br/>
+<a href="backend.RTLtyping.html#type_of_sig_res">type_of_sig_res</a> [in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.RTLtyping.html#type_rtl_arg">type_rtl_arg</a> [in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.RTLtyping.html#type_rtl_function">type_rtl_function</a> [in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.RTLtyping.html#type_rtl_instr">type_rtl_instr</a> [in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.RTLtyping.html#type_rtl_ros">type_rtl_ros</a> [in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<br/><br/><a name="definition_U"></a><h2>U </h2>
+<a href="backend.Mem.html#unchecked_store">unchecked_store</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="lib.Sets.html#union">union</a> [in <a href="lib.Sets.html">lib.Sets</a>]<br/>
+<a href="backend.Linearizeproof.html#unique_labels">unique_labels</a> [in <a href="backend.Linearizeproof.html">backend.Linearizeproof</a>]<br/>
+<a href="lib.Integers.html#unsigned">unsigned</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Mem.html#update">update</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Parallelmove.html#update">update</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.RTLgen.html#update_instr">update_instr</a> [in <a href="backend.RTLgen.html">backend.RTLgen</a>]<br/>
+<br/><br/><a name="definition_V"></a><h2>V </h2>
+<a href="backend.Mem.html#valid_block">valid_block</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.Linearizeproof.html#valid_outcome">valid_outcome</a> [in <a href="backend.Linearizeproof.html">backend.Linearizeproof</a>]<br/>
+<a href="backend.Mem.html#valid_pointer">valid_pointer</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="backend.CSE.html#valnum">valnum</a> [in <a href="backend.CSE.html">backend.CSE</a>]<br/>
+<a href="backend.CSE.html#valnum_reg">valnum_reg</a> [in <a href="backend.CSE.html">backend.CSE</a>]<br/>
+<a href="backend.CSE.html#valnum_regs">valnum_regs</a> [in <a href="backend.CSE.html">backend.CSE</a>]<br/>
+<a href="backend.Parallelmove.html#Value">Value</a> [in <a href="backend.Parallelmove.html">backend.Parallelmove</a>]<br/>
+<a href="backend.CSEproof.html#valu_agree">valu_agree</a> [in <a href="backend.CSEproof.html">backend.CSEproof</a>]<br/>
+<a href="backend.PPC.html#val_cond_reg">val_cond_reg</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.Constpropproof.html#val_match_approx">val_match_approx</a> [in <a href="backend.Constpropproof.html">backend.Constpropproof</a>]<br/>
+<a href="backend.Cminorgenproof.html#val_normalized">val_normalized</a> [in <a href="backend.Cminorgenproof.html">backend.Cminorgenproof</a>]<br/>
+<a href="backend.Cminorgen.html#var_addr">var_addr</a> [in <a href="backend.Cminorgen.html">backend.Cminorgen</a>]<br/>
+<a href="backend.Cminorgen.html#var_get">var_get</a> [in <a href="backend.Cminorgen.html">backend.Cminorgen</a>]<br/>
+<a href="backend.Cminorgen.html#var_set">var_set</a> [in <a href="backend.Cminorgen.html">backend.Cminorgen</a>]<br/>
+<a href="backend.Values.html#Vfalse">Vfalse</a> [in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.Values.html#Vmone">Vmone</a> [in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.Values.html#Vone">Vone</a> [in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.Values.html#Vtrue">Vtrue</a> [in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.Values.html#Vzero">Vzero</a> [in <a href="backend.Values.html">backend.Values</a>]<br/>
+<br/><br/><a name="definition_W"></a><h2>W </h2>
+<a href="backend.CSEproof.html#wf_equation">wf_equation</a> [in <a href="backend.CSEproof.html">backend.CSEproof</a>]<br/>
+<a href="backend.CSEproof.html#wf_numbering">wf_numbering</a> [in <a href="backend.CSEproof.html">backend.CSEproof</a>]<br/>
+<a href="backend.CSEproof.html#wf_rhs">wf_rhs</a> [in <a href="backend.CSEproof.html">backend.CSEproof</a>]<br/>
+<a href="lib.Integers.html#wordsize">wordsize</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Machtyping.html#wt_content">wt_content</a> [in <a href="backend.Machtyping.html">backend.Machtyping</a>]<br/>
+<a href="backend.Machtyping.html#wt_frame">wt_frame</a> [in <a href="backend.Machtyping.html">backend.Machtyping</a>]<br/>
+<a href="backend.LTLtyping.html#wt_function">wt_function</a> [in <a href="backend.LTLtyping.html">backend.LTLtyping</a>]<br/>
+<a href="backend.Lineartyping.html#wt_function">wt_function</a> [in <a href="backend.Lineartyping.html">backend.Lineartyping</a>]<br/>
+<a href="backend.Stackingtyping.html#wt_instrs">wt_instrs</a> [in <a href="backend.Stackingtyping.html">backend.Stackingtyping</a>]<br/>
+<a href="backend.Lineartyping.html#wt_program">wt_program</a> [in <a href="backend.Lineartyping.html">backend.Lineartyping</a>]<br/>
+<a href="backend.RTLtyping.html#wt_program">wt_program</a> [in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.LTLtyping.html#wt_program">wt_program</a> [in <a href="backend.LTLtyping.html">backend.LTLtyping</a>]<br/>
+<a href="backend.Machtyping.html#wt_program">wt_program</a> [in <a href="backend.Machtyping.html">backend.Machtyping</a>]<br/>
+<a href="backend.RTLtyping.html#wt_regset">wt_regset</a> [in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.Machtyping.html#wt_regset">wt_regset</a> [in <a href="backend.Machtyping.html">backend.Machtyping</a>]<br/>
+<br/><br/><a name="definition_X"></a><h2>X </h2>
+<a href="lib.Maps.html#xcombine_l">xcombine_l</a> [in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Maps.html#xcombine_r">xcombine_r</a> [in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Maps.html#xelements">xelements</a> [in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Maps.html#xget">xget</a> [in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Maps.html#xkeys">xkeys</a> [in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Maps.html#xmap">xmap</a> [in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="backend.Cmconstr.html#xor">xor</a> [in <a href="backend.Cmconstr.html">backend.Cmconstr</a>]<br/>
+<a href="backend.Values.html#xor">xor</a> [in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="lib.Integers.html#xor">xor</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.PPCgen.html#xorimm">xorimm</a> [in <a href="backend.PPCgen.html">backend.PPCgen</a>]<br/>
+<br/><br/><a name="definition_Z"></a><h2>Z </h2>
+<a href="lib.Integers.html#Zdiv_round">Zdiv_round</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Coqlib.html#zeq">zeq</a> [in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="lib.Integers.html#zero">zero</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Coqlib.html#zle">zle</a> [in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="lib.Coqlib.html#zlt">zlt</a> [in <a href="lib.Coqlib.html">lib.Coqlib</a>]<br/>
+<a href="lib.Integers.html#Zmod_round">Zmod_round</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="backend.Mem.html#ztonat">ztonat</a> [in <a href="backend.Mem.html">backend.Mem</a>]<br/>
+<a href="lib.Integers.html#Z_bin_decomp">Z_bin_decomp</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#Z_of_bits">Z_of_bits</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#Z_one_bits">Z_one_bits</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<a href="lib.Integers.html#Z_shift_add">Z_shift_add</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<br/><br/><hr/>
+<h1>Module Index</h1>
+<a name="module_A"></a><h2>A </h2>
+<a href="backend.Constprop.html#Approx">Approx</a> [in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<br/><br/><a name="module_B"></a><h2>B </h2>
+<a href="backend.Kildall.html#BACKWARD_DATAFLOW_SOLVER">BACKWARD_DATAFLOW_SOLVER</a> [in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.Kildall.html#Backward_Dataflow_Solver">Backward_Dataflow_Solver</a> [in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.Kildall.html#BBlock_solver">BBlock_solver</a> [in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.Kildall.html#BBLOCK_SOLVER">BBLOCK_SOLVER</a> [in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<br/><br/><a name="module_D"></a><h2>D </h2>
+<a href="backend.Constprop.html#D">D</a> [in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Kildall.html#Dataflow_Solver">Dataflow_Solver</a> [in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.Kildall.html#DATAFLOW_SOLVER">DATAFLOW_SOLVER</a> [in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.Kildall.html#DS">DS</a> [in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.Constprop.html#DS">DS</a> [in <a href="backend.Constprop.html">backend.Constprop</a>]<br/>
+<a href="backend.Linearize.html#DS">DS</a> [in <a href="backend.Linearize.html">backend.Linearize</a>]<br/>
+<a href="backend.Allocation.html#DS">DS</a> [in <a href="backend.Allocation.html">backend.Allocation</a>]<br/>
+<br/><br/><a name="module_E"></a><h2>E </h2>
+<a href="lib.union_find.html#ELEMENT">ELEMENT</a> [in <a href="lib.union_find.html">lib.union_find</a>]<br/>
+<a href="lib.Maps.html#EMap">EMap</a> [in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Maps.html#EQUALITY_TYPE">EQUALITY_TYPE</a> [in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<br/><br/><a name="module_F"></a><h2>F </h2>
+<a href="lib.Floats.html#Float">Float</a> [in <a href="lib.Floats.html">lib.Floats</a>]<br/>
+<br/><br/><a name="module_G"></a><h2>G </h2>
+<a href="backend.Globalenvs.html#Genv">Genv</a> [in <a href="backend.Globalenvs.html">backend.Globalenvs</a>]<br/>
+<a href="backend.Globalenvs.html#GENV">GENV</a> [in <a href="backend.Globalenvs.html">backend.Globalenvs</a>]<br/>
+<br/><br/><a name="module_I"></a><h2>I </h2>
+<a href="backend.Cminorgen.html#Identset">Identset</a> [in <a href="backend.Cminorgen.html">backend.Cminorgen</a>]<br/>
+<a href="lib.Maps.html#IMap">IMap</a> [in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="backend.Locations.html#IndexedMreg">IndexedMreg</a> [in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="lib.Maps.html#INDEXED_TYPE">INDEXED_TYPE</a> [in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Integers.html#Int">Int</a> [in <a href="lib.Integers.html">lib.Integers</a>]<br/>
+<br/><br/><a name="module_L"></a><h2>L </h2>
+<a href="backend.Kildall.html#L">L</a> [in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.Kildall.html#L">L</a> [in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.Kildall.html#L">L</a> [in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.Kildall.html#L">L</a> [in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.Kildall.html#L">L</a> [in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.Kildall.html#L">L</a> [in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.Kildall.html#L">L</a> [in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.Kildall.html#L">L</a> [in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="backend.Kildall.html#L">L</a> [in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<a href="lib.Lattice.html#LBoolean">LBoolean</a> [in <a href="lib.Lattice.html">lib.Lattice</a>]<br/>
+<a href="lib.Lattice.html#LFlat">LFlat</a> [in <a href="lib.Lattice.html">lib.Lattice</a>]<br/>
+<a href="backend.Locations.html#Loc">Loc</a> [in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="backend.Locations.html#Locmap">Locmap</a> [in <a href="backend.Locations.html">backend.Locations</a>]<br/>
+<a href="lib.Lattice.html#LPMap">LPMap</a> [in <a href="lib.Lattice.html">lib.Lattice</a>]<br/>
+<br/><br/><a name="module_M"></a><h2>M </h2>
+<a href="lib.Sets.html#MakeSet">MakeSet</a> [in <a href="lib.Sets.html">lib.Sets</a>]<br/>
+<a href="lib.Maps.html#MAP">MAP</a> [in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.union_find.html#MAP">MAP</a> [in <a href="lib.union_find.html">lib.union_find</a>]<br/>
+<a href="backend.RTLtyping.html#mymap">mymap</a> [in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="backend.RTLtyping.html#myreg">myreg</a> [in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<br/><br/><a name="module_N"></a><h2>N </h2>
+<a href="lib.Maps.html#NIndexed">NIndexed</a> [in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Maps.html#NMap">NMap</a> [in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="backend.CSE.html#Numbering">Numbering</a> [in <a href="backend.CSE.html">backend.CSE</a>]<br/>
+<br/><br/><a name="module_O"></a><h2>O </h2>
+<a href="lib.Ordered.html#OrderedIndexed">OrderedIndexed</a> [in <a href="lib.Ordered.html">lib.Ordered</a>]<br/>
+<a href="backend.InterfGraph.html#OrderedMreg">OrderedMreg</a> [in <a href="backend.InterfGraph.html">backend.InterfGraph</a>]<br/>
+<a href="lib.Ordered.html#OrderedPair">OrderedPair</a> [in <a href="lib.Ordered.html">lib.Ordered</a>]<br/>
+<a href="lib.Ordered.html#OrderedPositive">OrderedPositive</a> [in <a href="lib.Ordered.html">lib.Ordered</a>]<br/>
+<a href="backend.InterfGraph.html#OrderedReg">OrderedReg</a> [in <a href="backend.InterfGraph.html">backend.InterfGraph</a>]<br/>
+<a href="backend.InterfGraph.html#OrderedRegMreg">OrderedRegMreg</a> [in <a href="backend.InterfGraph.html">backend.InterfGraph</a>]<br/>
+<a href="backend.InterfGraph.html#OrderedRegReg">OrderedRegReg</a> [in <a href="backend.InterfGraph.html">backend.InterfGraph</a>]<br/>
+<a href="backend.Kildall.html#ORDERED_TYPE_WITH_TOP">ORDERED_TYPE_WITH_TOP</a> [in <a href="backend.Kildall.html">backend.Kildall</a>]<br/>
+<br/><br/><a name="module_P"></a><h2>P </h2>
+<a href="lib.Maps.html#PMap">PMap</a> [in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="backend.PPC.html#PregEq">PregEq</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="backend.PPC.html#Pregmap">Pregmap</a> [in <a href="backend.PPC.html">backend.PPC</a>]<br/>
+<a href="lib.Maps.html#PTree">PTree</a> [in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<br/><br/><a name="module_R"></a><h2>R </h2>
+<a href="backend.Registers.html#Reg">Reg</a> [in <a href="backend.Registers.html">backend.Registers</a>]<br/>
+<a href="backend.Mach.html#RegEq">RegEq</a> [in <a href="backend.Mach.html">backend.Mach</a>]<br/>
+<a href="backend.Mach.html#Regmap">Regmap</a> [in <a href="backend.Mach.html">backend.Mach</a>]<br/>
+<a href="backend.Registers.html#Regmap">Regmap</a> [in <a href="backend.Registers.html">backend.Registers</a>]<br/>
+<a href="backend.Registers.html#Regset">Regset</a> [in <a href="backend.Registers.html">backend.Registers</a>]<br/>
+<br/><br/><a name="module_S"></a><h2>S </h2>
+<a href="lib.Lattice.html#SEMILATTICE">SEMILATTICE</a> [in <a href="lib.Lattice.html">lib.Lattice</a>]<br/>
+<a href="lib.Lattice.html#SEMILATTICE_WITH_TOP">SEMILATTICE_WITH_TOP</a> [in <a href="lib.Lattice.html">lib.Lattice</a>]<br/>
+<a href="backend.InterfGraph.html#SetDepRegMreg">SetDepRegMreg</a> [in <a href="backend.InterfGraph.html">backend.InterfGraph</a>]<br/>
+<a href="backend.InterfGraph.html#SetDepRegReg">SetDepRegReg</a> [in <a href="backend.InterfGraph.html">backend.InterfGraph</a>]<br/>
+<a href="backend.InterfGraph.html#SetRegMreg">SetRegMreg</a> [in <a href="backend.InterfGraph.html">backend.InterfGraph</a>]<br/>
+<a href="backend.InterfGraph.html#SetRegReg">SetRegReg</a> [in <a href="backend.InterfGraph.html">backend.InterfGraph</a>]<br/>
+<a href="backend.CSE.html#Solver">Solver</a> [in <a href="backend.CSE.html">backend.CSE</a>]<br/>
+<br/><br/><a name="module_T"></a><h2>T </h2>
+<a href="lib.Maps.html#TREE">TREE</a> [in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<br/><br/><a name="module_U"></a><h2>U </h2>
+<a href="backend.RTLtyping.html#Uf">Uf</a> [in <a href="backend.RTLtyping.html">backend.RTLtyping</a>]<br/>
+<a href="lib.union_find.html#UNIONFIND">UNIONFIND</a> [in <a href="lib.union_find.html">lib.union_find</a>]<br/>
+<a href="lib.union_find.html#Unionfind">Unionfind</a> [in <a href="lib.union_find.html">lib.union_find</a>]<br/>
+<br/><br/><a name="module_V"></a><h2>V </h2>
+<a href="backend.Values.html#Val">Val</a> [in <a href="backend.Values.html">backend.Values</a>]<br/>
+<a href="backend.CSEproof.html#ValnumEq">ValnumEq</a> [in <a href="backend.CSEproof.html">backend.CSEproof</a>]<br/>
+<a href="backend.CSEproof.html#VMap">VMap</a> [in <a href="backend.CSEproof.html">backend.CSEproof</a>]<br/>
+<br/><br/><a name="module_Z"></a><h2>Z </h2>
+<a href="lib.Maps.html#ZIndexed">ZIndexed</a> [in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<a href="lib.Maps.html#ZMap">ZMap</a> [in <a href="lib.Maps.html">lib.Maps</a>]<br/>
+<br/><br/><hr/>
+<h1>Library Index</h1>
+<a name="library_A"></a><h2>A </h2>
+<a href="backend.Allocation.html">Allocation</a> <br/>
+<a href="backend.Allocproof.html">Allocproof</a> <br/>
+<a href="backend.Allocproof_aux.html">Allocproof_aux</a> <br/>
+<a href="backend.Alloctyping.html">Alloctyping</a> <br/>
+<a href="backend.Alloctyping_aux.html">Alloctyping_aux</a> <br/>
+<a href="backend.AST.html">AST</a> <br/>
+<br/><br/><a name="library_C"></a><h2>C </h2>
+<a href="backend.Cmconstr.html">Cmconstr</a> <br/>
+<a href="backend.Cmconstrproof.html">Cmconstrproof</a> <br/>
+<a href="backend.Cminor.html">Cminor</a> <br/>
+<a href="backend.Cminorgen.html">Cminorgen</a> <br/>
+<a href="backend.Cminorgenproof.html">Cminorgenproof</a> <br/>
+<a href="backend.Coloring.html">Coloring</a> <br/>
+<a href="backend.Coloringproof.html">Coloringproof</a> <br/>
+<a href="backend.Constprop.html">Constprop</a> <br/>
+<a href="backend.Constpropproof.html">Constpropproof</a> <br/>
+<a href="backend.Conventions.html">Conventions</a> <br/>
+<a href="lib.Coqlib.html">Coqlib</a> <br/>
+<a href="backend.CSE.html">CSE</a> <br/>
+<a href="backend.CSEproof.html">CSEproof</a> <br/>
+<a href="backend.Csharpminor.html">Csharpminor</a> <br/>
+<br/><br/><a name="library_F"></a><h2>F </h2>
+<a href="lib.Floats.html">Floats</a> <br/>
+<br/><br/><a name="library_G"></a><h2>G </h2>
+<a href="backend.Globalenvs.html">Globalenvs</a> <br/>
+<br/><br/><a name="library_I"></a><h2>I </h2>
+<a href="lib.Inclusion.html">Inclusion</a> <br/>
+<a href="lib.Integers.html">Integers</a> <br/>
+<a href="backend.InterfGraph.html">InterfGraph</a> <br/>
+<br/><br/><a name="library_K"></a><h2>K </h2>
+<a href="backend.Kildall.html">Kildall</a> <br/>
+<br/><br/><a name="library_L"></a><h2>L </h2>
+<a href="lib.Lattice.html">Lattice</a> <br/>
+<a href="backend.Linear.html">Linear</a> <br/>
+<a href="backend.Linearize.html">Linearize</a> <br/>
+<a href="backend.Linearizeproof.html">Linearizeproof</a> <br/>
+<a href="backend.Linearizetyping.html">Linearizetyping</a> <br/>
+<a href="backend.Lineartyping.html">Lineartyping</a> <br/>
+<a href="backend.Locations.html">Locations</a> <br/>
+<a href="backend.LTL.html">LTL</a> <br/>
+<a href="backend.LTLtyping.html">LTLtyping</a> <br/>
+<br/><br/><a name="library_M"></a><h2>M </h2>
+<a href="backend.Mach.html">Mach</a> <br/>
+<a href="backend.Machabstr.html">Machabstr</a> <br/>
+<a href="backend.Machabstr2mach.html">Machabstr2mach</a> <br/>
+<a href="backend.Machtyping.html">Machtyping</a> <br/>
+<a href="backend.Main.html">Main</a> <br/>
+<a href="lib.Maps.html">Maps</a> <br/>
+<a href="backend.Mem.html">Mem</a> <br/>
+<br/><br/><a name="library_O"></a><h2>O </h2>
+<a href="backend.Op.html">Op</a> <br/>
+<a href="lib.Ordered.html">Ordered</a> <br/>
+<br/><br/><a name="library_P"></a><h2>P </h2>
+<a href="backend.Parallelmove.html">Parallelmove</a> <br/>
+<a href="backend.PPC.html">PPC</a> <br/>
+<a href="backend.PPCgen.html">PPCgen</a> <br/>
+<a href="backend.PPCgenproof.html">PPCgenproof</a> <br/>
+<a href="backend.PPCgenproof1.html">PPCgenproof1</a> <br/>
+<br/><br/><a name="library_R"></a><h2>R </h2>
+<a href="backend.Registers.html">Registers</a> <br/>
+<a href="backend.RTL.html">RTL</a> <br/>
+<a href="backend.RTLgen.html">RTLgen</a> <br/>
+<a href="backend.RTLgenproof.html">RTLgenproof</a> <br/>
+<a href="backend.RTLgenproof1.html">RTLgenproof1</a> <br/>
+<a href="backend.RTLtyping.html">RTLtyping</a> <br/>
+<br/><br/><a name="library_S"></a><h2>S </h2>
+<a href="lib.Sets.html">Sets</a> <br/>
+<a href="backend.Stacking.html">Stacking</a> <br/>
+<a href="backend.Stackingproof.html">Stackingproof</a> <br/>
+<a href="backend.Stackingtyping.html">Stackingtyping</a> <br/>
+<br/><br/><a name="library_T"></a><h2>T </h2>
+<a href="backend.Tunneling.html">Tunneling</a> <br/>
+<a href="backend.Tunnelingproof.html">Tunnelingproof</a> <br/>
+<a href="backend.Tunnelingtyping.html">Tunnelingtyping</a> <br/>
+<br/><br/><a name="library_U"></a><h2>U </h2>
+<a href="lib.union_find.html">union_find</a> <br/>
+<br/><br/><a name="library_V"></a><h2>V </h2>
+<a href="backend.Values.html">Values</a> <br/>
+<br/><br/><hr/><table>
+<tr>
+<td>Global Index</td>
+<td><a href="index.html#global_A">A</a></td>
+<td><a href="index.html#global_B">B</a></td>
+<td><a href="index.html#global_C">C</a></td>
+<td><a href="index.html#global_D">D</a></td>
+<td><a href="index.html#global_E">E</a></td>
+<td><a href="index.html#global_F">F</a></td>
+<td><a href="index.html#global_G">G</a></td>
+<td><a href="index.html#global_H">H</a></td>
+<td><a href="index.html#global_I">I</a></td>
+<td>J</td>
+<td><a href="index.html#global_K">K</a></td>
+<td><a href="index.html#global_L">L</a></td>
+<td><a href="index.html#global_M">M</a></td>
+<td><a href="index.html#global_N">N</a></td>
+<td><a href="index.html#global_O">O</a></td>
+<td><a href="index.html#global_P">P</a></td>
+<td>Q</td>
+<td><a href="index.html#global_R">R</a></td>
+<td><a href="index.html#global_S">S</a></td>
+<td><a href="index.html#global_T">T</a></td>
+<td><a href="index.html#global_U">U</a></td>
+<td><a href="index.html#global_V">V</a></td>
+<td><a href="index.html#global_W">W</a></td>
+<td><a href="index.html#global_X">X</a></td>
+<td>Y</td>
+<td><a href="index.html#global_Z">Z</a></td>
+<td><a href="index.html#global__">_</a></td>
+<td>(3806 entries)</td>
+</tr>
+<tr>
+<td>Axiom Index</td>
+<td><a href="index.html#axiom_A">A</a></td>
+<td>B</td>
+<td><a href="index.html#axiom_C">C</a></td>
+<td><a href="index.html#axiom_D">D</a></td>
+<td><a href="index.html#axiom_E">E</a></td>
+<td><a href="index.html#axiom_F">F</a></td>
+<td><a href="index.html#axiom_G">G</a></td>
+<td><a href="index.html#axiom_H">H</a></td>
+<td><a href="index.html#axiom_I">I</a></td>
+<td>J</td>
+<td>K</td>
+<td><a href="index.html#axiom_L">L</a></td>
+<td><a href="index.html#axiom_M">M</a></td>
+<td><a href="index.html#axiom_N">N</a></td>
+<td><a href="index.html#axiom_O">O</a></td>
+<td><a href="index.html#axiom_P">P</a></td>
+<td>Q</td>
+<td>R</td>
+<td><a href="index.html#axiom_S">S</a></td>
+<td>T</td>
+<td>U</td>
+<td>V</td>
+<td>W</td>
+<td>X</td>
+<td>Y</td>
+<td><a href="index.html#axiom_Z">Z</a></td>
+<td>_</td>
+<td>(39 entries)</td>
+</tr>
+<tr>
+<td>Lemma Index</td>
+<td><a href="index.html#lemma_A">A</a></td>
+<td><a href="index.html#lemma_B">B</a></td>
+<td><a href="index.html#lemma_C">C</a></td>
+<td><a href="index.html#lemma_D">D</a></td>
+<td><a href="index.html#lemma_E">E</a></td>
+<td><a href="index.html#lemma_F">F</a></td>
+<td><a href="index.html#lemma_G">G</a></td>
+<td><a href="index.html#lemma_H">H</a></td>
+<td><a href="index.html#lemma_I">I</a></td>
+<td>J</td>
+<td><a href="index.html#lemma_K">K</a></td>
+<td><a href="index.html#lemma_L">L</a></td>
+<td><a href="index.html#lemma_M">M</a></td>
+<td><a href="index.html#lemma_N">N</a></td>
+<td><a href="index.html#lemma_O">O</a></td>
+<td><a href="index.html#lemma_P">P</a></td>
+<td>Q</td>
+<td><a href="index.html#lemma_R">R</a></td>
+<td><a href="index.html#lemma_S">S</a></td>
+<td><a href="index.html#lemma_T">T</a></td>
+<td><a href="index.html#lemma_U">U</a></td>
+<td><a href="index.html#lemma_V">V</a></td>
+<td><a href="index.html#lemma_W">W</a></td>
+<td><a href="index.html#lemma_X">X</a></td>
+<td>Y</td>
+<td><a href="index.html#lemma_Z">Z</a></td>
+<td>_</td>
+<td>(1753 entries)</td>
+</tr>
+<tr>
+<td>Constructor Index</td>
+<td><a href="index.html#constructor_A">A</a></td>
+<td><a href="index.html#constructor_B">B</a></td>
+<td><a href="index.html#constructor_C">C</a></td>
+<td><a href="index.html#constructor_D">D</a></td>
+<td><a href="index.html#constructor_E">E</a></td>
+<td><a href="index.html#constructor_F">F</a></td>
+<td><a href="index.html#constructor_G">G</a></td>
+<td>H</td>
+<td><a href="index.html#constructor_I">I</a></td>
+<td>J</td>
+<td>K</td>
+<td><a href="index.html#constructor_L">L</a></td>
+<td><a href="index.html#constructor_M">M</a></td>
+<td><a href="index.html#constructor_N">N</a></td>
+<td><a href="index.html#constructor_O">O</a></td>
+<td><a href="index.html#constructor_P">P</a></td>
+<td>Q</td>
+<td><a href="index.html#constructor_R">R</a></td>
+<td><a href="index.html#constructor_S">S</a></td>
+<td><a href="index.html#constructor_T">T</a></td>
+<td><a href="index.html#constructor_U">U</a></td>
+<td><a href="index.html#constructor_V">V</a></td>
+<td><a href="index.html#constructor_W">W</a></td>
+<td>X</td>
+<td>Y</td>
+<td>Z</td>
+<td><a href="index.html#constructor__">_</a></td>
+<td>(700 entries)</td>
+</tr>
+<tr>
+<td>Inductive Index</td>
+<td><a href="index.html#inductive_A">A</a></td>
+<td><a href="index.html#inductive_B">B</a></td>
+<td><a href="index.html#inductive_C">C</a></td>
+<td><a href="index.html#inductive_D">D</a></td>
+<td><a href="index.html#inductive_E">E</a></td>
+<td><a href="index.html#inductive_F">F</a></td>
+<td><a href="index.html#inductive_G">G</a></td>
+<td>H</td>
+<td><a href="index.html#inductive_I">I</a></td>
+<td>J</td>
+<td>K</td>
+<td><a href="index.html#inductive_L">L</a></td>
+<td><a href="index.html#inductive_M">M</a></td>
+<td><a href="index.html#inductive_N">N</a></td>
+<td><a href="index.html#inductive_O">O</a></td>
+<td><a href="index.html#inductive_P">P</a></td>
+<td>Q</td>
+<td><a href="index.html#inductive_R">R</a></td>
+<td><a href="index.html#inductive_S">S</a></td>
+<td><a href="index.html#inductive_T">T</a></td>
+<td><a href="index.html#inductive_U">U</a></td>
+<td><a href="index.html#inductive_V">V</a></td>
+<td><a href="index.html#inductive_W">W</a></td>
+<td>X</td>
+<td>Y</td>
+<td>Z</td>
+<td>_</td>
+<td>(155 entries)</td>
+</tr>
+<tr>
+<td>Definition Index</td>
+<td><a href="index.html#definition_A">A</a></td>
+<td><a href="index.html#definition_B">B</a></td>
+<td><a href="index.html#definition_C">C</a></td>
+<td><a href="index.html#definition_D">D</a></td>
+<td><a href="index.html#definition_E">E</a></td>
+<td><a href="index.html#definition_F">F</a></td>
+<td><a href="index.html#definition_G">G</a></td>
+<td><a href="index.html#definition_H">H</a></td>
+<td><a href="index.html#definition_I">I</a></td>
+<td>J</td>
+<td><a href="index.html#definition_K">K</a></td>
+<td><a href="index.html#definition_L">L</a></td>
+<td><a href="index.html#definition_M">M</a></td>
+<td><a href="index.html#definition_N">N</a></td>
+<td><a href="index.html#definition_O">O</a></td>
+<td><a href="index.html#definition_P">P</a></td>
+<td>Q</td>
+<td><a href="index.html#definition_R">R</a></td>
+<td><a href="index.html#definition_S">S</a></td>
+<td><a href="index.html#definition_T">T</a></td>
+<td><a href="index.html#definition_U">U</a></td>
+<td><a href="index.html#definition_V">V</a></td>
+<td><a href="index.html#definition_W">W</a></td>
+<td><a href="index.html#definition_X">X</a></td>
+<td>Y</td>
+<td><a href="index.html#definition_Z">Z</a></td>
+<td>_</td>
+<td>(1017 entries)</td>
+</tr>
+<tr>
+<td>Module Index</td>
+<td><a href="index.html#module_A">A</a></td>
+<td><a href="index.html#module_B">B</a></td>
+<td>C</td>
+<td><a href="index.html#module_D">D</a></td>
+<td><a href="index.html#module_E">E</a></td>
+<td><a href="index.html#module_F">F</a></td>
+<td><a href="index.html#module_G">G</a></td>
+<td>H</td>
+<td><a href="index.html#module_I">I</a></td>
+<td>J</td>
+<td>K</td>
+<td><a href="index.html#module_L">L</a></td>
+<td><a href="index.html#module_M">M</a></td>
+<td><a href="index.html#module_N">N</a></td>
+<td><a href="index.html#module_O">O</a></td>
+<td><a href="index.html#module_P">P</a></td>
+<td>Q</td>
+<td><a href="index.html#module_R">R</a></td>
+<td><a href="index.html#module_S">S</a></td>
+<td><a href="index.html#module_T">T</a></td>
+<td><a href="index.html#module_U">U</a></td>
+<td><a href="index.html#module_V">V</a></td>
+<td>W</td>
+<td>X</td>
+<td>Y</td>
+<td><a href="index.html#module_Z">Z</a></td>
+<td>_</td>
+<td>(78 entries)</td>
+</tr>
+<tr>
+<td>Library Index</td>
+<td><a href="index.html#library_A">A</a></td>
+<td>B</td>
+<td><a href="index.html#library_C">C</a></td>
+<td>D</td>
+<td>E</td>
+<td><a href="index.html#library_F">F</a></td>
+<td><a href="index.html#library_G">G</a></td>
+<td>H</td>
+<td><a href="index.html#library_I">I</a></td>
+<td>J</td>
+<td><a href="index.html#library_K">K</a></td>
+<td><a href="index.html#library_L">L</a></td>
+<td><a href="index.html#library_M">M</a></td>
+<td>N</td>
+<td><a href="index.html#library_O">O</a></td>
+<td><a href="index.html#library_P">P</a></td>
+<td>Q</td>
+<td><a href="index.html#library_R">R</a></td>
+<td><a href="index.html#library_S">S</a></td>
+<td><a href="index.html#library_T">T</a></td>
+<td><a href="index.html#library_U">U</a></td>
+<td><a href="index.html#library_V">V</a></td>
+<td>W</td>
+<td>X</td>
+<td>Y</td>
+<td>Z</td>
+<td>_</td>
+<td>(64 entries)</td>
+</tr>
+</table>
+<hr/><font size="-1">This page has been generated by <a href="http://www.lri.fr/~filliatr/coqdoc/">coqdoc</a></font>
+</body>
+</html> \ No newline at end of file
diff --git a/doc/removeproofs b/doc/removeproofs
new file mode 100755
index 0000000..0ebe3a8
--- /dev/null
+++ b/doc/removeproofs
@@ -0,0 +1,8 @@
+#!/bin/sh
+
+for i in $*; do
+ mv $i $i.bak
+ sed -e '/<code class="keyword">Proof<\/code>\./,/<code class="keyword">Qed<\/code>\./d' $i.bak > $i
+ rm $i.bak
+done
+
diff --git a/doc/style.css b/doc/style.css
new file mode 100644
index 0000000..9c1eb49
--- /dev/null
+++ b/doc/style.css
@@ -0,0 +1,32 @@
+a:visited {color : #416DFF; text-decoration : none; }
+a:link {color : #416DFF; text-decoration : none; font-weight : bold}
+a:hover {color : Red; text-decoration : underline; }
+a:active {color : Red; text-decoration : underline; }
+.keyword { font-weight : bold ; color : Red }
+.keywordsign { color : #C04600 }
+.superscript { font-size : 4 }
+.subscript { font-size : 4 }
+.comment { color : Green }
+.constructor { color : Blue }
+.string { color : Maroon }
+.warning { color : Red ; font-weight : bold }
+.info { margin-left : 3em; margin-right : 3em }
+#.title1 { font-size : 20pt ; background-color : #416DFF }
+#.title2 { font-size : 20pt ; background-color : #418DFF }
+#.title3 { font-size : 20pt ; background-color : #41ADFF }
+#.title4 { font-size : 20pt ; background-color : #41CDFF }
+#.title5 { font-size : 20pt ; background-color : #41EDFF }
+#.title6 { font-size : 20pt ; background-color : #41FFFF }
+body {
+ color: black; background: white;
+ margin-left: 10%; margin-right: 5%;
+}
+tr { background-color : White }
+# .doc { background-color :#aaeeff }
+# .doc { background-color :#66ff66 }
+.doc { margin-left: -5%; }
+.docright { margin-left: 40%; }
+h1 { margin-left: -10%; text-align: right; }
+h2 { margin-left: -5%; }
+h3,h4,h5,h6 { margin-left: -3%; }
+hr { margin-left: -10%; margin-right:-10%; }
diff --git a/extraction/.depend b/extraction/.depend
new file mode 100644
index 0000000..1067a0a
--- /dev/null
+++ b/extraction/.depend
@@ -0,0 +1,395 @@
+../caml/Allocationaux.cmi: Locations.cmi List.cmi Datatypes.cmi
+../caml/CMlexer.cmi: ../caml/CMparser.cmi
+../caml/CMparser.cmi: Cminor.cmi AST.cmi
+../caml/Coloringaux.cmi: Registers.cmi RTLtyping.cmi RTL.cmi Locations.cmi \
+ InterfGraph.cmi
+../caml/PrintPPC.cmi: PPC.cmi
+../caml/Allocationaux.cmo: Locations.cmi List.cmi Datatypes.cmi \
+ ../caml/Camlcoq.cmo AST.cmi ../caml/Allocationaux.cmi
+../caml/Allocationaux.cmx: Locations.cmx List.cmx Datatypes.cmx \
+ ../caml/Camlcoq.cmx AST.cmx ../caml/Allocationaux.cmi
+../caml/Camlcoq.cmo: List.cmi Integers.cmi Datatypes.cmi BinPos.cmi \
+ BinInt.cmi
+../caml/Camlcoq.cmx: List.cmx Integers.cmx Datatypes.cmx BinPos.cmx \
+ BinInt.cmx
+../caml/CMlexer.cmo: ../caml/Camlcoq.cmo ../caml/CMparser.cmi \
+ ../caml/CMlexer.cmi
+../caml/CMlexer.cmx: ../caml/Camlcoq.cmx ../caml/CMparser.cmx \
+ ../caml/CMlexer.cmi
+../caml/CMparser.cmo: Op.cmi List.cmi Integers.cmi Datatypes.cmi Cminor.cmi \
+ Cmconstr.cmi ../caml/Camlcoq.cmo BinPos.cmi BinInt.cmi AST.cmi \
+ ../caml/CMparser.cmi
+../caml/CMparser.cmx: Op.cmx List.cmx Integers.cmx Datatypes.cmx Cminor.cmx \
+ Cmconstr.cmx ../caml/Camlcoq.cmx BinPos.cmx BinInt.cmx AST.cmx \
+ ../caml/CMparser.cmi
+../caml/Coloringaux.cmo: Registers.cmi RTLtyping.cmi RTL.cmi Maps.cmi \
+ Locations.cmi InterfGraph.cmi Datatypes.cmi Conventions.cmi \
+ ../caml/Camlcoq.cmo BinPos.cmi BinInt.cmi AST.cmi ../caml/Coloringaux.cmi
+../caml/Coloringaux.cmx: Registers.cmx RTLtyping.cmx RTL.cmx Maps.cmx \
+ Locations.cmx InterfGraph.cmx Datatypes.cmx Conventions.cmx \
+ ../caml/Camlcoq.cmx BinPos.cmx BinInt.cmx AST.cmx ../caml/Coloringaux.cmi
+../caml/Floataux.cmo: ../caml/Camlcoq.cmo AST.cmi
+../caml/Floataux.cmx: ../caml/Camlcoq.cmx AST.cmx
+../caml/Main2.cmo: ../caml/PrintPPC.cmi Main.cmi Datatypes.cmi \
+ ../caml/CMparser.cmi ../caml/CMlexer.cmi
+../caml/Main2.cmx: ../caml/PrintPPC.cmx Main.cmx Datatypes.cmx \
+ ../caml/CMparser.cmx ../caml/CMlexer.cmx
+../caml/PrintPPC.cmo: PPC.cmi List.cmi Datatypes.cmi ../caml/Camlcoq.cmo \
+ AST.cmi ../caml/PrintPPC.cmi
+../caml/PrintPPC.cmx: PPC.cmx List.cmx Datatypes.cmx ../caml/Camlcoq.cmx \
+ AST.cmx ../caml/PrintPPC.cmi
+../caml/RTLgenaux.cmo: Cminor.cmi
+../caml/RTLgenaux.cmx: Cminor.cmx
+Allocation.cmi: Specif.cmi Registers.cmi RTLtyping.cmi RTL.cmi \
+ Parallelmove.cmi Op.cmi Maps.cmi Locations.cmi List.cmi LTL.cmi \
+ Datatypes.cmi Conventions.cmi Coloring.cmi BinPos.cmi AST.cmi
+AST.cmi: Specif.cmi List.cmi Datatypes.cmi Coqlib.cmi BinPos.cmi BinInt.cmi
+BinInt.cmi: Datatypes.cmi BinPos.cmi BinNat.cmi
+BinNat.cmi: Datatypes.cmi BinPos.cmi
+BinPos.cmi: Peano.cmi Datatypes.cmi
+Bool.cmi: Specif.cmi Datatypes.cmi
+Cmconstr.cmi: Specif.cmi Op.cmi List.cmi Integers.cmi Datatypes.cmi \
+ Compare_dec.cmi Cminor.cmi BinPos.cmi BinInt.cmi AST.cmi
+Cminorgen.cmi: Zmin.cmi Specif.cmi Op.cmi Mem.cmi Maps.cmi List.cmi \
+ Integers.cmi Datatypes.cmi Csharpminor.cmi Coqlib.cmi Cminor.cmi \
+ Cmconstr.cmi BinPos.cmi BinInt.cmi AST.cmi
+Cminor.cmi: Values.cmi Op.cmi Maps.cmi List.cmi Globalenvs.cmi Datatypes.cmi \
+ BinInt.cmi AST.cmi
+Coloring.cmi: Specif.cmi Registers.cmi RTLtyping.cmi RTL.cmi Op.cmi Maps.cmi \
+ Locations.cmi List.cmi InterfGraph.cmi Datatypes.cmi Coqlib.cmi \
+ Conventions.cmi BinInt.cmi AST.cmi
+Compare_dec.cmi: Specif.cmi Datatypes.cmi
+Constprop.cmi: Specif.cmi Registers.cmi RTL.cmi Op.cmi Maps.cmi List.cmi \
+ Integers.cmi Floats.cmi Datatypes.cmi Bool.cmi BinPos.cmi BinInt.cmi \
+ AST.cmi
+Conventions.cmi: Locations.cmi List.cmi Datatypes.cmi BinPos.cmi BinInt.cmi \
+ AST.cmi
+Coqlib.cmi: Zdiv.cmi ZArith_dec.cmi Wf.cmi Specif.cmi List.cmi Datatypes.cmi \
+ BinPos.cmi BinInt.cmi
+CSE.cmi: Specif.cmi Registers.cmi RTL.cmi Op.cmi Maps.cmi List.cmi \
+ Integers.cmi Floats.cmi Datatypes.cmi Coqlib.cmi BinPos.cmi AST.cmi
+Csharpminor.cmi: Zmin.cmi Values.cmi Specif.cmi Mem.cmi Maps.cmi List.cmi \
+ Integers.cmi Globalenvs.cmi Floats.cmi Datatypes.cmi BinPos.cmi \
+ BinInt.cmi AST.cmi
+Floats.cmi: Specif.cmi Integers.cmi Datatypes.cmi AST.cmi
+FSetAVL.cmi: ZArith_dec.cmi Wf.cmi Specif.cmi Peano.cmi List.cmi \
+ FSetInterface.cmi Datatypes.cmi BinPos.cmi BinInt.cmi
+FSetBridge.cmi: Specif.cmi List.cmi FSetInterface.cmi Datatypes.cmi
+FSetInterface.cmi: Specif.cmi List.cmi Datatypes.cmi
+FSetList.cmi: Specif.cmi List.cmi FSetInterface.cmi Datatypes.cmi
+Globalenvs.cmi: Values.cmi Mem.cmi Maps.cmi List.cmi Integers.cmi \
+ Datatypes.cmi BinPos.cmi BinInt.cmi AST.cmi
+Integers.cmi: Zpower.cmi Zdiv.cmi Specif.cmi List.cmi Datatypes.cmi \
+ Coqlib.cmi Bool.cmi BinPos.cmi BinInt.cmi AST.cmi
+InterfGraph.cmi: Specif.cmi Registers.cmi Locations.cmi List.cmi \
+ FSetInterface.cmi Datatypes.cmi Coqlib.cmi BinPos.cmi BinInt.cmi
+Kildall.cmi: Wf.cmi Specif.cmi Maps.cmi List.cmi Lattice.cmi Datatypes.cmi \
+ Coqlib.cmi BinPos.cmi
+Lattice.cmi: Specif.cmi Maps.cmi Datatypes.cmi BinPos.cmi
+Linearize.cmi: Specif.cmi Op.cmi Maps.cmi List.cmi Linear.cmi Lattice.cmi \
+ LTL.cmi Datatypes.cmi Coqlib.cmi BinPos.cmi AST.cmi
+Linear.cmi: Values.cmi Specif.cmi Op.cmi Locations.cmi List.cmi Integers.cmi \
+ Globalenvs.cmi Datatypes.cmi Coqlib.cmi BinPos.cmi BinInt.cmi AST.cmi
+Lineartyping.cmi: Zmin.cmi Locations.cmi List.cmi Linear.cmi Datatypes.cmi \
+ Conventions.cmi BinPos.cmi BinInt.cmi AST.cmi
+List.cmi: Specif.cmi Datatypes.cmi
+Locations.cmi: Values.cmi Specif.cmi Datatypes.cmi Coqlib.cmi BinPos.cmi \
+ BinInt.cmi AST.cmi
+LTL.cmi: Values.cmi Specif.cmi Op.cmi Maps.cmi Locations.cmi List.cmi \
+ Integers.cmi Globalenvs.cmi Datatypes.cmi Conventions.cmi BinPos.cmi \
+ BinInt.cmi AST.cmi
+Mach.cmi: Zmin.cmi Zdiv.cmi Values.cmi Specif.cmi Op.cmi Mem.cmi \
+ Locations.cmi List.cmi Integers.cmi Globalenvs.cmi Datatypes.cmi \
+ Coqlib.cmi BinPos.cmi BinInt.cmi AST.cmi
+Main.cmi: Tunneling.cmi Stacking.cmi RTLgen.cmi PPCgen.cmi PPC.cmi \
+ Linearize.cmi Datatypes.cmi Csharpminor.cmi Constprop.cmi Cminorgen.cmi \
+ Cminor.cmi CSE.cmi Allocation.cmi AST.cmi
+Maps.cmi: Specif.cmi List.cmi Datatypes.cmi Coqlib.cmi BinPos.cmi BinNat.cmi \
+ BinInt.cmi
+Mem.cmi: Values.cmi Specif.cmi List.cmi Integers.cmi Datatypes.cmi Coqlib.cmi \
+ BinPos.cmi BinInt.cmi AST.cmi
+Op.cmi: Values.cmi Specif.cmi List.cmi Integers.cmi Globalenvs.cmi Floats.cmi \
+ Datatypes.cmi Bool.cmi BinPos.cmi BinInt.cmi AST.cmi
+Ordered.cmi: Specif.cmi Maps.cmi FSetInterface.cmi Datatypes.cmi Coqlib.cmi \
+ BinPos.cmi
+Parallelmove.cmi: Wf.cmi Values.cmi Specif.cmi Peano.cmi Locations.cmi \
+ List.cmi LTL.cmi Datatypes.cmi AST.cmi
+Peano.cmi: Datatypes.cmi
+PPCgen.cmi: Specif.cmi PPC.cmi Op.cmi Mach.cmi Locations.cmi List.cmi \
+ Integers.cmi Datatypes.cmi Coqlib.cmi Bool.cmi BinPos.cmi BinInt.cmi \
+ AST.cmi
+PPC.cmi: Values.cmi Specif.cmi Mem.cmi List.cmi Integers.cmi Globalenvs.cmi \
+ Floats.cmi Datatypes.cmi Coqlib.cmi BinPos.cmi BinInt.cmi AST.cmi
+Registers.cmi: Specif.cmi Maps.cmi List.cmi Datatypes.cmi Coqlib.cmi \
+ BinPos.cmi AST.cmi
+RTLgen.cmi: Specif.cmi Registers.cmi RTL.cmi Op.cmi Maps.cmi List.cmi \
+ Datatypes.cmi Coqlib.cmi Cminor.cmi BinPos.cmi AST.cmi
+RTL.cmi: Values.cmi Registers.cmi Op.cmi Maps.cmi List.cmi Integers.cmi \
+ Globalenvs.cmi Datatypes.cmi BinPos.cmi BinInt.cmi AST.cmi
+RTLtyping.cmi: Specif.cmi Registers.cmi RTL.cmi Op.cmi Maps.cmi List.cmi \
+ Datatypes.cmi Coqlib.cmi BinPos.cmi AST.cmi
+Sets.cmi: Specif.cmi Maps.cmi List.cmi Datatypes.cmi
+Specif.cmi: Datatypes.cmi
+Stacking.cmi: Specif.cmi Op.cmi Mach.cmi Locations.cmi List.cmi \
+ Lineartyping.cmi Linear.cmi Integers.cmi Datatypes.cmi Coqlib.cmi \
+ Conventions.cmi BinPos.cmi BinInt.cmi AST.cmi
+Sumbool.cmi: Specif.cmi Datatypes.cmi
+Tunneling.cmi: Maps.cmi List.cmi LTL.cmi Datatypes.cmi AST.cmi
+union_find.cmi: Wf.cmi Specif.cmi Datatypes.cmi
+Values.cmi: Specif.cmi Integers.cmi Floats.cmi Datatypes.cmi Coqlib.cmi \
+ BinPos.cmi BinInt.cmi AST.cmi
+ZArith_dec.cmi: Sumbool.cmi Specif.cmi Datatypes.cmi BinInt.cmi
+Zbool.cmi: Zeven.cmi ZArith_dec.cmi Sumbool.cmi Specif.cmi Datatypes.cmi \
+ BinInt.cmi
+Zdiv.cmi: Zbool.cmi ZArith_dec.cmi Specif.cmi Datatypes.cmi BinPos.cmi \
+ BinInt.cmi
+Zeven.cmi: Specif.cmi Datatypes.cmi BinPos.cmi BinInt.cmi
+Zmin.cmi: Datatypes.cmi BinInt.cmi
+Zmisc.cmi: Datatypes.cmi BinPos.cmi BinInt.cmi
+Zpower.cmi: Zmisc.cmi Datatypes.cmi BinPos.cmi BinInt.cmi
+Allocation.cmo: Specif.cmi Registers.cmi RTLtyping.cmi RTL.cmi \
+ Parallelmove.cmi Op.cmi Maps.cmi Locations.cmi List.cmi LTL.cmi \
+ Kildall.cmi Datatypes.cmi Conventions.cmi Coloring.cmi BinPos.cmi AST.cmi \
+ Allocation.cmi
+Allocation.cmx: Specif.cmx Registers.cmx RTLtyping.cmx RTL.cmx \
+ Parallelmove.cmx Op.cmx Maps.cmx Locations.cmx List.cmx LTL.cmx \
+ Kildall.cmx Datatypes.cmx Conventions.cmx Coloring.cmx BinPos.cmx AST.cmx \
+ Allocation.cmi
+AST.cmo: Specif.cmi List.cmi Datatypes.cmi Coqlib.cmi BinPos.cmi BinInt.cmi \
+ AST.cmi
+AST.cmx: Specif.cmx List.cmx Datatypes.cmx Coqlib.cmx BinPos.cmx BinInt.cmx \
+ AST.cmi
+BinInt.cmo: Datatypes.cmi BinPos.cmi BinNat.cmi BinInt.cmi
+BinInt.cmx: Datatypes.cmx BinPos.cmx BinNat.cmx BinInt.cmi
+BinNat.cmo: Datatypes.cmi BinPos.cmi BinNat.cmi
+BinNat.cmx: Datatypes.cmx BinPos.cmx BinNat.cmi
+BinPos.cmo: Peano.cmi Datatypes.cmi BinPos.cmi
+BinPos.cmx: Peano.cmx Datatypes.cmx BinPos.cmi
+Bool.cmo: Specif.cmi Datatypes.cmi Bool.cmi
+Bool.cmx: Specif.cmx Datatypes.cmx Bool.cmi
+Cmconstr.cmo: Specif.cmi Op.cmi List.cmi Integers.cmi Datatypes.cmi \
+ Compare_dec.cmi Cminor.cmi BinPos.cmi BinInt.cmi AST.cmi Cmconstr.cmi
+Cmconstr.cmx: Specif.cmx Op.cmx List.cmx Integers.cmx Datatypes.cmx \
+ Compare_dec.cmx Cminor.cmx BinPos.cmx BinInt.cmx AST.cmx Cmconstr.cmi
+Cminorgen.cmo: Zmin.cmi Specif.cmi Sets.cmi Op.cmi Mem.cmi Maps.cmi List.cmi \
+ Integers.cmi Datatypes.cmi Csharpminor.cmi Coqlib.cmi Cminor.cmi \
+ Cmconstr.cmi BinPos.cmi BinInt.cmi AST.cmi Cminorgen.cmi
+Cminorgen.cmx: Zmin.cmx Specif.cmx Sets.cmx Op.cmx Mem.cmx Maps.cmx List.cmx \
+ Integers.cmx Datatypes.cmx Csharpminor.cmx Coqlib.cmx Cminor.cmx \
+ Cmconstr.cmx BinPos.cmx BinInt.cmx AST.cmx Cminorgen.cmi
+Cminor.cmo: Values.cmi Op.cmi Maps.cmi List.cmi Globalenvs.cmi Datatypes.cmi \
+ BinInt.cmi AST.cmi Cminor.cmi
+Cminor.cmx: Values.cmx Op.cmx Maps.cmx List.cmx Globalenvs.cmx Datatypes.cmx \
+ BinInt.cmx AST.cmx Cminor.cmi
+Coloring.cmo: Specif.cmi Registers.cmi RTLtyping.cmi RTL.cmi Op.cmi Maps.cmi \
+ Locations.cmi List.cmi InterfGraph.cmi Datatypes.cmi Coqlib.cmi \
+ Conventions.cmi ../caml/Coloringaux.cmi BinInt.cmi AST.cmi Coloring.cmi
+Coloring.cmx: Specif.cmx Registers.cmx RTLtyping.cmx RTL.cmx Op.cmx Maps.cmx \
+ Locations.cmx List.cmx InterfGraph.cmx Datatypes.cmx Coqlib.cmx \
+ Conventions.cmx ../caml/Coloringaux.cmx BinInt.cmx AST.cmx Coloring.cmi
+Compare_dec.cmo: Specif.cmi Datatypes.cmi Compare_dec.cmi
+Compare_dec.cmx: Specif.cmx Datatypes.cmx Compare_dec.cmi
+Constprop.cmo: Specif.cmi Registers.cmi RTL.cmi Op.cmi Maps.cmi List.cmi \
+ Lattice.cmi Kildall.cmi Integers.cmi Floats.cmi Datatypes.cmi Bool.cmi \
+ BinPos.cmi BinInt.cmi AST.cmi Constprop.cmi
+Constprop.cmx: Specif.cmx Registers.cmx RTL.cmx Op.cmx Maps.cmx List.cmx \
+ Lattice.cmx Kildall.cmx Integers.cmx Floats.cmx Datatypes.cmx Bool.cmx \
+ BinPos.cmx BinInt.cmx AST.cmx Constprop.cmi
+Conventions.cmo: Locations.cmi List.cmi Datatypes.cmi BinPos.cmi BinInt.cmi \
+ AST.cmi Conventions.cmi
+Conventions.cmx: Locations.cmx List.cmx Datatypes.cmx BinPos.cmx BinInt.cmx \
+ AST.cmx Conventions.cmi
+Coqlib.cmo: Zdiv.cmi ZArith_dec.cmi Wf.cmi Specif.cmi List.cmi Datatypes.cmi \
+ BinPos.cmi BinInt.cmi Coqlib.cmi
+Coqlib.cmx: Zdiv.cmx ZArith_dec.cmx Wf.cmx Specif.cmx List.cmx Datatypes.cmx \
+ BinPos.cmx BinInt.cmx Coqlib.cmi
+CSE.cmo: Specif.cmi Registers.cmi RTL.cmi Op.cmi Maps.cmi List.cmi \
+ Kildall.cmi Integers.cmi Floats.cmi Datatypes.cmi Coqlib.cmi BinPos.cmi \
+ AST.cmi CSE.cmi
+CSE.cmx: Specif.cmx Registers.cmx RTL.cmx Op.cmx Maps.cmx List.cmx \
+ Kildall.cmx Integers.cmx Floats.cmx Datatypes.cmx Coqlib.cmx BinPos.cmx \
+ AST.cmx CSE.cmi
+Csharpminor.cmo: Zmin.cmi Values.cmi Specif.cmi Mem.cmi Maps.cmi List.cmi \
+ Integers.cmi Globalenvs.cmi Floats.cmi Datatypes.cmi BinPos.cmi \
+ BinInt.cmi AST.cmi Csharpminor.cmi
+Csharpminor.cmx: Zmin.cmx Values.cmx Specif.cmx Mem.cmx Maps.cmx List.cmx \
+ Integers.cmx Globalenvs.cmx Floats.cmx Datatypes.cmx BinPos.cmx \
+ BinInt.cmx AST.cmx Csharpminor.cmi
+Datatypes.cmo: Datatypes.cmi
+Datatypes.cmx: Datatypes.cmi
+Floats.cmo: Specif.cmi Integers.cmi ../caml/Floataux.cmo Datatypes.cmi \
+ AST.cmi Floats.cmi
+Floats.cmx: Specif.cmx Integers.cmx ../caml/Floataux.cmx Datatypes.cmx \
+ AST.cmx Floats.cmi
+FSetAVL.cmo: ZArith_dec.cmi Wf.cmi Specif.cmi Peano.cmi List.cmi FSetList.cmi \
+ FSetInterface.cmi Datatypes.cmi BinPos.cmi BinInt.cmi FSetAVL.cmi
+FSetAVL.cmx: ZArith_dec.cmx Wf.cmx Specif.cmx Peano.cmx List.cmx FSetList.cmx \
+ FSetInterface.cmx Datatypes.cmx BinPos.cmx BinInt.cmx FSetAVL.cmi
+FSetBridge.cmo: Specif.cmi List.cmi FSetInterface.cmi Datatypes.cmi \
+ FSetBridge.cmi
+FSetBridge.cmx: Specif.cmx List.cmx FSetInterface.cmx Datatypes.cmx \
+ FSetBridge.cmi
+FSetInterface.cmo: Specif.cmi List.cmi Datatypes.cmi FSetInterface.cmi
+FSetInterface.cmx: Specif.cmx List.cmx Datatypes.cmx FSetInterface.cmi
+FSetList.cmo: Specif.cmi List.cmi FSetInterface.cmi Datatypes.cmi \
+ FSetList.cmi
+FSetList.cmx: Specif.cmx List.cmx FSetInterface.cmx Datatypes.cmx \
+ FSetList.cmi
+Globalenvs.cmo: Values.cmi Mem.cmi Maps.cmi List.cmi Integers.cmi \
+ Datatypes.cmi BinPos.cmi BinInt.cmi AST.cmi Globalenvs.cmi
+Globalenvs.cmx: Values.cmx Mem.cmx Maps.cmx List.cmx Integers.cmx \
+ Datatypes.cmx BinPos.cmx BinInt.cmx AST.cmx Globalenvs.cmi
+Integers.cmo: Zpower.cmi Zdiv.cmi Specif.cmi List.cmi Datatypes.cmi \
+ Coqlib.cmi Bool.cmi BinPos.cmi BinInt.cmi AST.cmi Integers.cmi
+Integers.cmx: Zpower.cmx Zdiv.cmx Specif.cmx List.cmx Datatypes.cmx \
+ Coqlib.cmx Bool.cmx BinPos.cmx BinInt.cmx AST.cmx Integers.cmi
+InterfGraph.cmo: Specif.cmi Registers.cmi Ordered.cmi Locations.cmi List.cmi \
+ FSetInterface.cmi FSetBridge.cmi FSetAVL.cmi Datatypes.cmi Coqlib.cmi \
+ BinPos.cmi BinInt.cmi InterfGraph.cmi
+InterfGraph.cmx: Specif.cmx Registers.cmx Ordered.cmx Locations.cmx List.cmx \
+ FSetInterface.cmx FSetBridge.cmx FSetAVL.cmx Datatypes.cmx Coqlib.cmx \
+ BinPos.cmx BinInt.cmx InterfGraph.cmi
+Kildall.cmo: Wf.cmi Specif.cmi Maps.cmi List.cmi Lattice.cmi Datatypes.cmi \
+ Coqlib.cmi BinPos.cmi Kildall.cmi
+Kildall.cmx: Wf.cmx Specif.cmx Maps.cmx List.cmx Lattice.cmx Datatypes.cmx \
+ Coqlib.cmx BinPos.cmx Kildall.cmi
+Lattice.cmo: Specif.cmi Maps.cmi Datatypes.cmi BinPos.cmi Lattice.cmi
+Lattice.cmx: Specif.cmx Maps.cmx Datatypes.cmx BinPos.cmx Lattice.cmi
+Linearize.cmo: Specif.cmi Op.cmi Maps.cmi List.cmi Linear.cmi Lattice.cmi \
+ LTL.cmi Kildall.cmi Datatypes.cmi Coqlib.cmi BinPos.cmi AST.cmi \
+ Linearize.cmi
+Linearize.cmx: Specif.cmx Op.cmx Maps.cmx List.cmx Linear.cmx Lattice.cmx \
+ LTL.cmx Kildall.cmx Datatypes.cmx Coqlib.cmx BinPos.cmx AST.cmx \
+ Linearize.cmi
+Linear.cmo: Values.cmi Specif.cmi Op.cmi Locations.cmi List.cmi Integers.cmi \
+ Globalenvs.cmi Datatypes.cmi Coqlib.cmi BinPos.cmi BinInt.cmi AST.cmi \
+ Linear.cmi
+Linear.cmx: Values.cmx Specif.cmx Op.cmx Locations.cmx List.cmx Integers.cmx \
+ Globalenvs.cmx Datatypes.cmx Coqlib.cmx BinPos.cmx BinInt.cmx AST.cmx \
+ Linear.cmi
+Lineartyping.cmo: Zmin.cmi Locations.cmi List.cmi Linear.cmi Datatypes.cmi \
+ Conventions.cmi BinPos.cmi BinInt.cmi AST.cmi Lineartyping.cmi
+Lineartyping.cmx: Zmin.cmx Locations.cmx List.cmx Linear.cmx Datatypes.cmx \
+ Conventions.cmx BinPos.cmx BinInt.cmx AST.cmx Lineartyping.cmi
+List.cmo: Specif.cmi Datatypes.cmi List.cmi
+List.cmx: Specif.cmx Datatypes.cmx List.cmi
+Locations.cmo: Values.cmi Specif.cmi Datatypes.cmi Coqlib.cmi BinPos.cmi \
+ BinInt.cmi AST.cmi Locations.cmi
+Locations.cmx: Values.cmx Specif.cmx Datatypes.cmx Coqlib.cmx BinPos.cmx \
+ BinInt.cmx AST.cmx Locations.cmi
+Logic.cmo: Logic.cmi
+Logic.cmx: Logic.cmi
+LTL.cmo: Values.cmi Specif.cmi Op.cmi Maps.cmi Locations.cmi List.cmi \
+ Integers.cmi Globalenvs.cmi Datatypes.cmi Conventions.cmi BinPos.cmi \
+ BinInt.cmi AST.cmi LTL.cmi
+LTL.cmx: Values.cmx Specif.cmx Op.cmx Maps.cmx Locations.cmx List.cmx \
+ Integers.cmx Globalenvs.cmx Datatypes.cmx Conventions.cmx BinPos.cmx \
+ BinInt.cmx AST.cmx LTL.cmi
+Mach.cmo: Zmin.cmi Zdiv.cmi Values.cmi Specif.cmi Op.cmi Mem.cmi Maps.cmi \
+ Locations.cmi List.cmi Integers.cmi Globalenvs.cmi Datatypes.cmi \
+ Coqlib.cmi BinPos.cmi BinInt.cmi AST.cmi Mach.cmi
+Mach.cmx: Zmin.cmx Zdiv.cmx Values.cmx Specif.cmx Op.cmx Mem.cmx Maps.cmx \
+ Locations.cmx List.cmx Integers.cmx Globalenvs.cmx Datatypes.cmx \
+ Coqlib.cmx BinPos.cmx BinInt.cmx AST.cmx Mach.cmi
+Main.cmo: Tunneling.cmi Stacking.cmi RTLgen.cmi PPCgen.cmi PPC.cmi \
+ Linearize.cmi Datatypes.cmi Csharpminor.cmi Constprop.cmi Cminorgen.cmi \
+ Cminor.cmi CSE.cmi Allocation.cmi AST.cmi Main.cmi
+Main.cmx: Tunneling.cmx Stacking.cmx RTLgen.cmx PPCgen.cmx PPC.cmx \
+ Linearize.cmx Datatypes.cmx Csharpminor.cmx Constprop.cmx Cminorgen.cmx \
+ Cminor.cmx CSE.cmx Allocation.cmx AST.cmx Main.cmi
+Maps.cmo: Specif.cmi List.cmi Datatypes.cmi Coqlib.cmi BinPos.cmi BinNat.cmi \
+ BinInt.cmi Maps.cmi
+Maps.cmx: Specif.cmx List.cmx Datatypes.cmx Coqlib.cmx BinPos.cmx BinNat.cmx \
+ BinInt.cmx Maps.cmi
+Mem.cmo: Values.cmi Specif.cmi List.cmi Integers.cmi Datatypes.cmi Coqlib.cmi \
+ BinPos.cmi BinInt.cmi AST.cmi Mem.cmi
+Mem.cmx: Values.cmx Specif.cmx List.cmx Integers.cmx Datatypes.cmx Coqlib.cmx \
+ BinPos.cmx BinInt.cmx AST.cmx Mem.cmi
+Op.cmo: Values.cmi Specif.cmi List.cmi Integers.cmi Globalenvs.cmi Floats.cmi \
+ Datatypes.cmi Bool.cmi BinPos.cmi BinInt.cmi AST.cmi Op.cmi
+Op.cmx: Values.cmx Specif.cmx List.cmx Integers.cmx Globalenvs.cmx Floats.cmx \
+ Datatypes.cmx Bool.cmx BinPos.cmx BinInt.cmx AST.cmx Op.cmi
+Ordered.cmo: Specif.cmi Maps.cmi FSetInterface.cmi Datatypes.cmi Coqlib.cmi \
+ BinPos.cmi Ordered.cmi
+Ordered.cmx: Specif.cmx Maps.cmx FSetInterface.cmx Datatypes.cmx Coqlib.cmx \
+ BinPos.cmx Ordered.cmi
+Parallelmove.cmo: Wf.cmi Values.cmi Specif.cmi Peano.cmi Locations.cmi \
+ List.cmi LTL.cmi Datatypes.cmi AST.cmi Parallelmove.cmi
+Parallelmove.cmx: Wf.cmx Values.cmx Specif.cmx Peano.cmx Locations.cmx \
+ List.cmx LTL.cmx Datatypes.cmx AST.cmx Parallelmove.cmi
+Peano.cmo: Datatypes.cmi Peano.cmi
+Peano.cmx: Datatypes.cmx Peano.cmi
+PPCgen.cmo: Specif.cmi PPC.cmi Op.cmi Mach.cmi Locations.cmi List.cmi \
+ Integers.cmi Datatypes.cmi Coqlib.cmi Bool.cmi BinPos.cmi BinInt.cmi \
+ AST.cmi PPCgen.cmi
+PPCgen.cmx: Specif.cmx PPC.cmx Op.cmx Mach.cmx Locations.cmx List.cmx \
+ Integers.cmx Datatypes.cmx Coqlib.cmx Bool.cmx BinPos.cmx BinInt.cmx \
+ AST.cmx PPCgen.cmi
+PPC.cmo: Values.cmi Specif.cmi Mem.cmi Maps.cmi List.cmi Integers.cmi \
+ Globalenvs.cmi Floats.cmi Datatypes.cmi Coqlib.cmi BinPos.cmi BinInt.cmi \
+ AST.cmi PPC.cmi
+PPC.cmx: Values.cmx Specif.cmx Mem.cmx Maps.cmx List.cmx Integers.cmx \
+ Globalenvs.cmx Floats.cmx Datatypes.cmx Coqlib.cmx BinPos.cmx BinInt.cmx \
+ AST.cmx PPC.cmi
+Registers.cmo: Specif.cmi Sets.cmi Maps.cmi List.cmi Datatypes.cmi Coqlib.cmi \
+ BinPos.cmi AST.cmi Registers.cmi
+Registers.cmx: Specif.cmx Sets.cmx Maps.cmx List.cmx Datatypes.cmx Coqlib.cmx \
+ BinPos.cmx AST.cmx Registers.cmi
+RTLgen.cmo: Specif.cmi Registers.cmi ../caml/RTLgenaux.cmo RTL.cmi Op.cmi \
+ Maps.cmi List.cmi Datatypes.cmi Coqlib.cmi Cminor.cmi BinPos.cmi AST.cmi \
+ RTLgen.cmi
+RTLgen.cmx: Specif.cmx Registers.cmx ../caml/RTLgenaux.cmx RTL.cmx Op.cmx \
+ Maps.cmx List.cmx Datatypes.cmx Coqlib.cmx Cminor.cmx BinPos.cmx AST.cmx \
+ RTLgen.cmi
+RTL.cmo: Values.cmi Registers.cmi Op.cmi Maps.cmi List.cmi Integers.cmi \
+ Globalenvs.cmi Datatypes.cmi BinPos.cmi BinInt.cmi AST.cmi RTL.cmi
+RTL.cmx: Values.cmx Registers.cmx Op.cmx Maps.cmx List.cmx Integers.cmx \
+ Globalenvs.cmx Datatypes.cmx BinPos.cmx BinInt.cmx AST.cmx RTL.cmi
+RTLtyping.cmo: union_find.cmi Specif.cmi Registers.cmi RTL.cmi Op.cmi \
+ Maps.cmi List.cmi Datatypes.cmi Coqlib.cmi BinPos.cmi AST.cmi \
+ RTLtyping.cmi
+RTLtyping.cmx: union_find.cmx Specif.cmx Registers.cmx RTL.cmx Op.cmx \
+ Maps.cmx List.cmx Datatypes.cmx Coqlib.cmx BinPos.cmx AST.cmx \
+ RTLtyping.cmi
+Sets.cmo: Specif.cmi Maps.cmi List.cmi Datatypes.cmi Sets.cmi
+Sets.cmx: Specif.cmx Maps.cmx List.cmx Datatypes.cmx Sets.cmi
+Specif.cmo: Datatypes.cmi Specif.cmi
+Specif.cmx: Datatypes.cmx Specif.cmi
+Stacking.cmo: Specif.cmi Op.cmi Mach.cmi Locations.cmi List.cmi \
+ Lineartyping.cmi Linear.cmi Integers.cmi Datatypes.cmi Coqlib.cmi \
+ Conventions.cmi BinPos.cmi BinInt.cmi AST.cmi Stacking.cmi
+Stacking.cmx: Specif.cmx Op.cmx Mach.cmx Locations.cmx List.cmx \
+ Lineartyping.cmx Linear.cmx Integers.cmx Datatypes.cmx Coqlib.cmx \
+ Conventions.cmx BinPos.cmx BinInt.cmx AST.cmx Stacking.cmi
+Sumbool.cmo: Specif.cmi Datatypes.cmi Sumbool.cmi
+Sumbool.cmx: Specif.cmx Datatypes.cmx Sumbool.cmi
+Tunneling.cmo: Maps.cmi List.cmi LTL.cmi Datatypes.cmi AST.cmi Tunneling.cmi
+Tunneling.cmx: Maps.cmx List.cmx LTL.cmx Datatypes.cmx AST.cmx Tunneling.cmi
+union_find.cmo: Wf.cmi Specif.cmi Datatypes.cmi union_find.cmi
+union_find.cmx: Wf.cmx Specif.cmx Datatypes.cmx union_find.cmi
+Values.cmo: Specif.cmi Integers.cmi Floats.cmi Datatypes.cmi Coqlib.cmi \
+ BinPos.cmi BinInt.cmi AST.cmi Values.cmi
+Values.cmx: Specif.cmx Integers.cmx Floats.cmx Datatypes.cmx Coqlib.cmx \
+ BinPos.cmx BinInt.cmx AST.cmx Values.cmi
+Wf.cmo: Wf.cmi
+Wf.cmx: Wf.cmi
+ZArith_dec.cmo: Sumbool.cmi Specif.cmi Datatypes.cmi BinInt.cmi \
+ ZArith_dec.cmi
+ZArith_dec.cmx: Sumbool.cmx Specif.cmx Datatypes.cmx BinInt.cmx \
+ ZArith_dec.cmi
+Zbool.cmo: Zeven.cmi ZArith_dec.cmi Sumbool.cmi Specif.cmi Datatypes.cmi \
+ BinInt.cmi Zbool.cmi
+Zbool.cmx: Zeven.cmx ZArith_dec.cmx Sumbool.cmx Specif.cmx Datatypes.cmx \
+ BinInt.cmx Zbool.cmi
+Zdiv.cmo: Zbool.cmi ZArith_dec.cmi Specif.cmi Datatypes.cmi BinPos.cmi \
+ BinInt.cmi Zdiv.cmi
+Zdiv.cmx: Zbool.cmx ZArith_dec.cmx Specif.cmx Datatypes.cmx BinPos.cmx \
+ BinInt.cmx Zdiv.cmi
+Zeven.cmo: Specif.cmi Datatypes.cmi BinPos.cmi BinInt.cmi Zeven.cmi
+Zeven.cmx: Specif.cmx Datatypes.cmx BinPos.cmx BinInt.cmx Zeven.cmi
+Zmin.cmo: Datatypes.cmi BinInt.cmi Zmin.cmi
+Zmin.cmx: Datatypes.cmx BinInt.cmx Zmin.cmi
+Zmisc.cmo: Datatypes.cmi BinPos.cmi BinInt.cmi Zmisc.cmi
+Zmisc.cmx: Datatypes.cmx BinPos.cmx BinInt.cmx Zmisc.cmi
+Zpower.cmo: Zmisc.cmi Datatypes.cmi BinPos.cmi BinInt.cmi Zpower.cmi
+Zpower.cmx: Zmisc.cmx Datatypes.cmx BinPos.cmx BinInt.cmx Zpower.cmi
diff --git a/extraction/Kildall.ml.patch b/extraction/Kildall.ml.patch
new file mode 100644
index 0000000..a091385
--- /dev/null
+++ b/extraction/Kildall.ml.patch
@@ -0,0 +1,22 @@
+*** Kildall.ml.orig 2006-02-09 11:47:52.000000000 +0100
+--- Kildall.ml 2006-02-09 13:42:35.103321691 +0100
+***************
+*** 191,199 ****
+ Maps.PMap.t option **)
+
+ let fixpoint successors topnode transf entrypoints =
+! DS.fixpoint (fun s ->
+! Maps.PMap.get s (make_predecessors successors topnode)) topnode transf
+! entrypoints
+ end
+
+ module type ORDERED_TYPE_WITH_TOP =
+--- 191,198 ----
+ Maps.PMap.t option **)
+
+ let fixpoint successors topnode transf entrypoints =
+! let pred = make_predecessors successors topnode in
+! DS.fixpoint (fun s -> Maps.PMap.get s pred) topnode transf entrypoints
+ end
+
+ module type ORDERED_TYPE_WITH_TOP =
diff --git a/extraction/Linearize.ml.patch b/extraction/Linearize.ml.patch
new file mode 100644
index 0000000..47b6cc9
--- /dev/null
+++ b/extraction/Linearize.ml.patch
@@ -0,0 +1,22 @@
+*** Linearize.ml.orig 2006-02-09 11:47:55.000000000 +0100
+--- Linearize.ml 2006-02-09 11:58:42.000000000 +0100
+***************
+*** 28,35 ****
+ (** val enumerate : LTL.coq_function -> node list **)
+
+ let enumerate f =
+ positive_rec Coq_nil (fun pc nodes ->
+! match Maps.PMap.get pc (reachable f) with
+ | true -> Coq_cons (pc, nodes)
+ | false -> nodes) (coq_Psucc f.fn_entrypoint)
+
+--- 28,36 ----
+ (** val enumerate : LTL.coq_function -> node list **)
+
+ let enumerate f =
++ let reach = reachable f in
+ positive_rec Coq_nil (fun pc nodes ->
+! match Maps.PMap.get pc reach with
+ | true -> Coq_cons (pc, nodes)
+ | false -> nodes) (coq_Psucc f.fn_entrypoint)
+
diff --git a/extraction/Makefile b/extraction/Makefile
new file mode 100644
index 0000000..038b3d0
--- /dev/null
+++ b/extraction/Makefile
@@ -0,0 +1,91 @@
+FILES=\
+ Datatypes.ml Logic.ml Wf.ml Peano.ml Specif.ml Compare_dec.ml \
+ Bool.ml List.ml Sumbool.ml BinPos.ml BinNat.ml BinInt.ml \
+ ZArith_dec.ml Zeven.ml Zmin.ml Zmisc.ml Zbool.ml Zpower.ml Zdiv.ml \
+ FSetInterface.ml FSetBridge.ml FSetList.ml FSetAVL.ml \
+ Coqlib.ml Maps.ml Sets.ml union_find.ml AST.ml Integers.ml \
+ ../caml/Camlcoq.ml ../caml/Floataux.ml Floats.ml Values.ml \
+ Mem.ml Globalenvs.ml \
+ Op.ml Cminor.ml Cmconstr.ml \
+ Csharpminor.ml Cminorgen.ml \
+ Registers.ml RTL.ml \
+ ../caml/RTLgenaux.ml RTLgen.ml \
+ RTLtyping.ml \
+ Lattice.ml Kildall.ml \
+ Constprop.ml CSE.ml \
+ Locations.ml Conventions.ml LTL.ml \
+ Ordered.ml InterfGraph.ml ../caml/Coloringaux.ml Coloring.ml \
+ Parallelmove.ml Allocation.ml \
+ Tunneling.ml Linear.ml Lineartyping.ml Linearize.ml \
+ Mach.ml Stacking.ml \
+ PPC.ml PPCgen.ml \
+ Main.ml \
+ ../caml/CMparser.ml ../caml/CMlexer.ml \
+ ../caml/PrintPPC.ml ../caml/Main2.ml
+
+EXTRACTEDFILES:=$(filter-out ../caml/%, $(FILES))
+GENFILES:=$(EXTRACTEDFILES) $(EXTRACTEDFILES:.ml=.mli)
+
+CAMLINCL=-I ../caml
+OCAMLC=ocamlc -g $(CAMLINCL)
+OCAMLOPT=ocamlopt $(CAMLINCL)
+OCAMLDEP=ocamldep $(CAMLINCL)
+
+COQINCL=-I ../lib -I ../backend
+COQEXEC=coqtop $(COQINCL) -batch -load-vernac-source
+
+../ccomp: $(FILES:.ml=.cmo)
+ $(OCAMLC) -o ../ccomp $(FILES:.ml=.cmo)
+
+../ccomp.opt: Pack.cmx
+ $(OCAMLOPT) -o ../ccomp.opt Pack.cmx
+
+Pack.cmx: $(FILES:.ml=.cmx)
+ $(OCAMLOPT) -pack -o Pack.cmx $(FILES:.ml=.cmx)
+
+extraction:
+ @rm -f $(GENFILES)
+ $(COQEXEC) extraction.v
+ @echo "Fixing file names..."
+ @for i in $(GENFILES); do \
+ j=`./uncapitalize $$i`; \
+ test -f $$i || (test -f $$j && mv $$j $$i); \
+ done
+ @echo "Patching files..."
+ @for i in *.patch; do patch < $$i; done
+
+../caml/CMparser.ml ../caml/CMparser.mli: ../caml/CMparser.mly
+ ocamlyacc -v ../caml/CMparser.mly
+
+beforedepend:: ../caml/CMparser.ml ../caml/CMparser.mli
+clean::
+ rm -f ../caml/CMparser.ml ../caml/CMparser.mli ../caml/CMparser.output
+
+../caml/CMlexer.ml: ../caml/CMlexer.mll
+ ocamllex ../caml/CMlexer.mll
+
+beforedepend:: ../caml/CMlexer.ml
+clean::
+ rm -f ../caml/CMlexer.ml
+
+.SUFFIXES: .ml .mli .cmo .cmi .cmx
+
+.mli.cmi:
+ $(OCAMLC) -c $*.mli
+.ml.cmo:
+ $(OCAMLC) -c $*.ml
+.ml.cmx:
+ $(OCAMLOPT) -c $*.ml
+
+clean::
+ rm -f $(GENFILES)
+ rm -f *.cm? *.o
+ cd ../caml && rm -f *.cm? *.o
+ rm -f ccomp
+
+depend: beforedepend
+ $(OCAMLDEP) ../caml/*.mli ../caml/*.ml *.mli *.ml > .depend
+
+include .depend
+
+
diff --git a/extraction/extraction.v b/extraction/extraction.v
new file mode 100644
index 0000000..1717882
--- /dev/null
+++ b/extraction/extraction.v
@@ -0,0 +1,53 @@
+Require Floats.
+Require Kildall.
+Require RTLgen.
+Require Coloring.
+Require Allocation.
+Require Cmconstr.
+Require Main.
+
+(* Standard lib *)
+Extract Inductive unit => "unit" [ "()" ].
+Extract Inductive bool => "bool" [ "true" "false" ].
+Extract Inductive sumbool => "bool" [ "true" "false" ].
+
+(* Float *)
+Extract Inlined Constant Floats.float => "float".
+Extract Constant Floats.Float.zero => "0.".
+Extract Constant Floats.Float.one => "1.".
+Extract Constant Floats.Float.neg => "( ~-. )".
+Extract Constant Floats.Float.abs => "abs_float".
+Extract Constant Floats.Float.singleoffloat => "Floataux.singleoffloat".
+Extract Constant Floats.Float.intoffloat => "Floataux.intoffloat".
+Extract Constant Floats.Float.floatofint => "Floataux.floatofint".
+Extract Constant Floats.Float.floatofintu => "Floataux.floatofintu".
+Extract Constant Floats.Float.add => "( +. )".
+Extract Constant Floats.Float.sub => "( -. )".
+Extract Constant Floats.Float.mul => "( *. )".
+Extract Constant Floats.Float.div => "( /. )".
+Extract Constant Floats.Float.cmp => "Floataux.cmp".
+Extract Constant Floats.Float.eq_dec => "fun (x: float) (y: float) -> x = y".
+
+(* RTLgen *)
+Extract Constant RTLgen.more_likely => "RTLgenaux.more_likely".
+
+(* Coloring *)
+Extract Constant Coloring.graph_coloring => "Coloringaux.graph_coloring".
+
+(* PPC *)
+Extract Constant PPC.low_half_signed => "fun _ -> assert false".
+Extract Constant PPC.high_half_signed => "fun _ -> assert false".
+Extract Constant PPC.low_half_unsigned => "fun _ -> assert false".
+Extract Constant PPC.high_half_unsigned => "fun _ -> assert false".
+
+(* Suppression of stupidly big equality functions *)
+Extract Constant CSE.eq_rhs => "fun (x: rhs) (y: rhs) -> x = y".
+Extract Constant Locations.mreg_eq => "fun (x: mreg) (y: mreg) -> x = y".
+Extract Constant PPC.ireg_eq => "fun (x: ireg) (y: ireg) -> x = y".
+Extract Constant PPC.freg_eq => "fun (x: freg) (y: freg) -> x = y".
+Extract Constant PPC.preg_eq => "fun (x: preg) (y: preg) -> x = y".
+
+(* Go! *)
+Recursive Extraction Library Main.
+(*Extraction Library Compare_dec.
+ Extraction Library Cmconstr.*)
diff --git a/extraction/uncapitalize b/extraction/uncapitalize
new file mode 100755
index 0000000..d724b8f
--- /dev/null
+++ b/extraction/uncapitalize
@@ -0,0 +1,6 @@
+#!/bin/sh
+echo $1 | sed -e 'h
+s/\(.\).*/\1/
+y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/
+G
+s/\n.//'
diff --git a/lib/Coqlib.v b/lib/Coqlib.v
new file mode 100644
index 0000000..039dd03
--- /dev/null
+++ b/lib/Coqlib.v
@@ -0,0 +1,709 @@
+(** This file collects a number of definitions and theorems that are
+ used throughout the development. It complements the Coq standard
+ library. *)
+
+Require Export ZArith.
+Require Export List.
+Require Import Wf_nat.
+
+(** * Logical axioms *)
+
+(** We use two logical axioms that are not provable in Coq but consistent
+ with the logic: function extensionality and proof irrelevance.
+ These are used in the memory model to show that two memory states
+ that have identical contents are equal. *)
+
+Axiom extensionality:
+ forall (A B: Set) (f g : A -> B),
+ (forall x, f x = g x) -> f = g.
+
+Axiom proof_irrelevance:
+ forall (P: Prop) (p1 p2: P), p1 = p2.
+
+(** * Useful tactics *)
+
+Ltac predSpec pred predspec x y :=
+ generalize (predspec x y); case (pred x y); intro.
+
+Ltac caseEq name :=
+ generalize (refl_equal name); pattern name at -1 in |- *; case name.
+
+Ltac destructEq name :=
+ generalize (refl_equal name); pattern name at -1 in |- *; destruct name; intro.
+
+Ltac decEq :=
+ match goal with
+ | [ |- (_, _) = (_, _) ] =>
+ apply injective_projections; unfold fst,snd; try reflexivity
+ | [ |- (@Some ?T _ = @Some ?T _) ] =>
+ apply (f_equal (@Some T)); try reflexivity
+ | [ |- (?X _ _ _ _ _ = ?X _ _ _ _ _) ] =>
+ apply (f_equal5 X); try reflexivity
+ | [ |- (?X _ _ _ _ = ?X _ _ _ _) ] =>
+ apply (f_equal4 X); try reflexivity
+ | [ |- (?X _ _ _ = ?X _ _ _) ] =>
+ apply (f_equal3 X); try reflexivity
+ | [ |- (?X _ _ = ?X _ _) ] =>
+ apply (f_equal2 X); try reflexivity
+ | [ |- (?X _ = ?X _) ] =>
+ apply (f_equal X); try reflexivity
+ | [ |- (?X ?A <> ?X ?B) ] =>
+ cut (A <> B); [intro; congruence | try discriminate]
+ end.
+
+Ltac byContradiction :=
+ cut False; [contradiction|idtac].
+
+Ltac omegaContradiction :=
+ cut False; [contradiction|omega].
+
+(** * Definitions and theorems over the type [positive] *)
+
+Definition peq (x y: positive): {x = y} + {x <> y}.
+Proof.
+ intros. caseEq (Pcompare x y Eq).
+ intro. left. apply Pcompare_Eq_eq; auto.
+ intro. right. red. intro. subst y. rewrite (Pcompare_refl x) in H. discriminate.
+ intro. right. red. intro. subst y. rewrite (Pcompare_refl x) in H. discriminate.
+Qed.
+
+Lemma peq_true:
+ forall (A: Set) (x: positive) (a b: A), (if peq x x then a else b) = a.
+Proof.
+ intros. case (peq x x); intros.
+ auto.
+ elim n; auto.
+Qed.
+
+Lemma peq_false:
+ forall (A: Set) (x y: positive) (a b: A), x <> y -> (if peq x y then a else b) = b.
+Proof.
+ intros. case (peq x y); intros.
+ elim H; auto.
+ auto.
+Qed.
+
+Definition Plt (x y: positive): Prop := Zlt (Zpos x) (Zpos y).
+
+Lemma Plt_ne:
+ forall (x y: positive), Plt x y -> x <> y.
+Proof.
+ unfold Plt; intros. red; intro. subst y. omega.
+Qed.
+Hint Resolve Plt_ne: coqlib.
+
+Lemma Plt_trans:
+ forall (x y z: positive), Plt x y -> Plt y z -> Plt x z.
+Proof.
+ unfold Plt; intros; omega.
+Qed.
+
+Remark Psucc_Zsucc:
+ forall (x: positive), Zpos (Psucc x) = Zsucc (Zpos x).
+Proof.
+ intros. rewrite Pplus_one_succ_r.
+ reflexivity.
+Qed.
+
+Lemma Plt_succ:
+ forall (x: positive), Plt x (Psucc x).
+Proof.
+ intro. unfold Plt. rewrite Psucc_Zsucc. omega.
+Qed.
+Hint Resolve Plt_succ: coqlib.
+
+Lemma Plt_trans_succ:
+ forall (x y: positive), Plt x y -> Plt x (Psucc y).
+Proof.
+ intros. apply Plt_trans with y. assumption. apply Plt_succ.
+Qed.
+Hint Resolve Plt_succ: coqlib.
+
+Lemma Plt_succ_inv:
+ forall (x y: positive), Plt x (Psucc y) -> Plt x y \/ x = y.
+Proof.
+ intros x y. unfold Plt. rewrite Psucc_Zsucc.
+ intro. assert (A: (Zpos x < Zpos y)%Z \/ Zpos x = Zpos y). omega.
+ elim A; intro. left; auto. right; injection H0; auto.
+Qed.
+
+Definition plt (x y: positive) : {Plt x y} + {~ Plt x y}.
+Proof.
+ intros. unfold Plt. apply Z_lt_dec.
+Qed.
+
+Definition Ple (p q: positive) := Zle (Zpos p) (Zpos q).
+
+Lemma Ple_refl: forall (p: positive), Ple p p.
+Proof.
+ unfold Ple; intros; omega.
+Qed.
+
+Lemma Ple_trans: forall (p q r: positive), Ple p q -> Ple q r -> Ple p r.
+Proof.
+ unfold Ple; intros; omega.
+Qed.
+
+Lemma Plt_Ple: forall (p q: positive), Plt p q -> Ple p q.
+Proof.
+ unfold Plt, Ple; intros; omega.
+Qed.
+
+Lemma Ple_succ: forall (p: positive), Ple p (Psucc p).
+Proof.
+ intros. apply Plt_Ple. apply Plt_succ.
+Qed.
+
+Lemma Plt_Ple_trans:
+ forall (p q r: positive), Plt p q -> Ple q r -> Plt p r.
+Proof.
+ unfold Plt, Ple; intros; omega.
+Qed.
+
+Lemma Plt_strict: forall p, ~ Plt p p.
+Proof.
+ unfold Plt; intros. omega.
+Qed.
+
+Hint Resolve Ple_refl Plt_Ple Ple_succ Plt_strict: coqlib.
+
+(** Peano recursion over positive numbers. *)
+
+Section POSITIVE_ITERATION.
+
+Lemma Plt_wf: well_founded Plt.
+Proof.
+ apply well_founded_lt_compat with nat_of_P.
+ intros. apply nat_of_P_lt_Lt_compare_morphism. exact H.
+Qed.
+
+Variable A: Set.
+Variable v1: A.
+Variable f: positive -> A -> A.
+
+Lemma Ppred_Plt:
+ forall x, x <> xH -> Plt (Ppred x) x.
+Proof.
+ intros. elim (Psucc_pred x); intro. contradiction.
+ set (y := Ppred x) in *. rewrite <- H0. apply Plt_succ.
+Qed.
+
+Let iter (x: positive) (P: forall y, Plt y x -> A) : A :=
+ match peq x xH with
+ | left EQ => v1
+ | right NOTEQ => f (Ppred x) (P (Ppred x) (Ppred_Plt x NOTEQ))
+ end.
+
+Definition positive_rec : positive -> A :=
+ Fix Plt_wf (fun _ => A) iter.
+
+Lemma unroll_positive_rec:
+ forall x,
+ positive_rec x = iter x (fun y _ => positive_rec y).
+Proof.
+ unfold positive_rec. apply (Fix_eq Plt_wf (fun _ => A) iter).
+ intros. unfold iter. case (peq x 1); intro. auto. decEq. apply H.
+Qed.
+
+Lemma positive_rec_base:
+ positive_rec 1%positive = v1.
+Proof.
+ rewrite unroll_positive_rec. unfold iter. case (peq 1 1); intro.
+ auto. elim n; auto.
+Qed.
+
+Lemma positive_rec_succ:
+ forall x, positive_rec (Psucc x) = f x (positive_rec x).
+Proof.
+ intro. rewrite unroll_positive_rec. unfold iter.
+ case (peq (Psucc x) 1); intro.
+ destruct x; simpl in e; discriminate.
+ rewrite Ppred_succ. auto.
+Qed.
+
+Lemma positive_Peano_ind:
+ forall (P: positive -> Prop),
+ P xH ->
+ (forall x, P x -> P (Psucc x)) ->
+ forall x, P x.
+Proof.
+ intros.
+ apply (well_founded_ind Plt_wf P).
+ intros.
+ case (peq x0 xH); intro.
+ subst x0; auto.
+ elim (Psucc_pred x0); intro. contradiction. rewrite <- H2.
+ apply H0. apply H1. apply Ppred_Plt. auto.
+Qed.
+
+End POSITIVE_ITERATION.
+
+(** * Definitions and theorems over the type [Z] *)
+
+Definition zeq: forall (x y: Z), {x = y} + {x <> y} := Z_eq_dec.
+
+Lemma zeq_true:
+ forall (A: Set) (x: Z) (a b: A), (if zeq x x then a else b) = a.
+Proof.
+ intros. case (zeq x x); intros.
+ auto.
+ elim n; auto.
+Qed.
+
+Lemma zeq_false:
+ forall (A: Set) (x y: Z) (a b: A), x <> y -> (if zeq x y then a else b) = b.
+Proof.
+ intros. case (zeq x y); intros.
+ elim H; auto.
+ auto.
+Qed.
+
+Open Scope Z_scope.
+
+Definition zlt: forall (x y: Z), {x < y} + {x >= y} := Z_lt_ge_dec.
+
+Lemma zlt_true:
+ forall (A: Set) (x y: Z) (a b: A),
+ x < y -> (if zlt x y then a else b) = a.
+Proof.
+ intros. case (zlt x y); intros.
+ auto.
+ omegaContradiction.
+Qed.
+
+Lemma zlt_false:
+ forall (A: Set) (x y: Z) (a b: A),
+ x >= y -> (if zlt x y then a else b) = b.
+Proof.
+ intros. case (zlt x y); intros.
+ omegaContradiction.
+ auto.
+Qed.
+
+Definition zle: forall (x y: Z), {x <= y} + {x > y} := Z_le_gt_dec.
+
+Lemma zle_true:
+ forall (A: Set) (x y: Z) (a b: A),
+ x <= y -> (if zle x y then a else b) = a.
+Proof.
+ intros. case (zle x y); intros.
+ auto.
+ omegaContradiction.
+Qed.
+
+Lemma zle_false:
+ forall (A: Set) (x y: Z) (a b: A),
+ x > y -> (if zle x y then a else b) = b.
+Proof.
+ intros. case (zle x y); intros.
+ omegaContradiction.
+ auto.
+Qed.
+
+(** Properties of powers of two. *)
+
+Lemma two_power_nat_O : two_power_nat O = 1.
+Proof. reflexivity. Qed.
+
+Lemma two_power_nat_pos : forall n : nat, two_power_nat n > 0.
+Proof.
+ induction n. rewrite two_power_nat_O. omega.
+ rewrite two_power_nat_S. omega.
+Qed.
+
+(** Properties of [Zmin] and [Zmax] *)
+
+Lemma Zmin_spec:
+ forall x y, Zmin x y = if zlt x y then x else y.
+Proof.
+ intros. case (zlt x y); unfold Zlt, Zge; intros.
+ unfold Zmin. rewrite z. auto.
+ unfold Zmin. caseEq (x ?= y); intro.
+ apply Zcompare_Eq_eq. auto.
+ contradiction.
+ reflexivity.
+Qed.
+
+Lemma Zmax_spec:
+ forall x y, Zmax x y = if zlt y x then x else y.
+Proof.
+ intros. case (zlt y x); unfold Zlt, Zge; intros.
+ unfold Zmax. rewrite <- (Zcompare_antisym y x).
+ rewrite z. simpl. auto.
+ unfold Zmax. rewrite <- (Zcompare_antisym y x).
+ caseEq (y ?= x); intro; simpl.
+ symmetry. apply Zcompare_Eq_eq. auto.
+ contradiction. reflexivity.
+Qed.
+
+Lemma Zmax_bound_l:
+ forall x y z, x <= y -> x <= Zmax y z.
+Proof.
+ intros. generalize (Zmax1 y z). omega.
+Qed.
+Lemma Zmax_bound_r:
+ forall x y z, x <= z -> x <= Zmax y z.
+Proof.
+ intros. generalize (Zmax2 y z). omega.
+Qed.
+
+(** Properties of Euclidean division and modulus. *)
+
+Lemma Zdiv_small:
+ forall x y, 0 <= x < y -> x / y = 0.
+Proof.
+ intros. assert (y > 0). omega.
+ assert (forall a b,
+ 0 <= a < y ->
+ 0 <= y * b + a < y ->
+ b = 0).
+ intros.
+ assert (b = 0 \/ b > 0 \/ (-b) > 0). omega.
+ elim H3; intro.
+ auto.
+ elim H4; intro.
+ assert (y * b >= y * 1). apply Zmult_ge_compat_l. omega. omega.
+ omegaContradiction.
+ assert (y * (-b) >= y * 1). apply Zmult_ge_compat_l. omega. omega.
+ rewrite <- Zopp_mult_distr_r in H6. omegaContradiction.
+ apply H1 with (x mod y).
+ apply Z_mod_lt. auto.
+ rewrite <- Z_div_mod_eq. auto. auto.
+Qed.
+
+Lemma Zmod_small:
+ forall x y, 0 <= x < y -> x mod y = x.
+Proof.
+ intros. assert (y > 0). omega.
+ generalize (Z_div_mod_eq x y H0).
+ rewrite (Zdiv_small x y H). omega.
+Qed.
+
+Lemma Zmod_unique:
+ forall x y a b,
+ x = a * y + b -> 0 <= b < y -> x mod y = b.
+Proof.
+ intros. subst x. rewrite Zplus_comm.
+ rewrite Z_mod_plus. apply Zmod_small. auto. omega.
+Qed.
+
+Lemma Zdiv_unique:
+ forall x y a b,
+ x = a * y + b -> 0 <= b < y -> x / y = a.
+Proof.
+ intros. subst x. rewrite Zplus_comm.
+ rewrite Z_div_plus. rewrite (Zdiv_small b y H0). omega. omega.
+Qed.
+
+(** Alignment: [align n amount] returns the smallest multiple of [amount]
+ greater than or equal to [n]. *)
+
+Definition align (n: Z) (amount: Z) :=
+ ((n + amount - 1) / amount) * amount.
+
+Lemma align_le: forall x y, y > 0 -> x <= align x y.
+Proof.
+ intros. unfold align.
+ generalize (Z_div_mod_eq (x + y - 1) y H). intro.
+ replace ((x + y - 1) / y * y)
+ with ((x + y - 1) - (x + y - 1) mod y).
+ generalize (Z_mod_lt (x + y - 1) y H). omega.
+ rewrite Zmult_comm. omega.
+Qed.
+
+(** * Definitions and theorems on the data types [option], [sum] and [list] *)
+
+Set Implicit Arguments.
+
+(** Mapping a function over an option type. *)
+
+Definition option_map (A B: Set) (f: A -> B) (x: option A) : option B :=
+ match x with
+ | None => None
+ | Some y => Some (f y)
+ end.
+
+(** Mapping a function over a sum type. *)
+
+Definition sum_left_map (A B C: Set) (f: A -> B) (x: A + C) : B + C :=
+ match x with
+ | inl y => inl C (f y)
+ | inr z => inr B z
+ end.
+
+(** Properties of [List.nth] (n-th element of a list). *)
+
+Hint Resolve in_eq in_cons: coqlib.
+
+Lemma nth_error_in:
+ forall (A: Set) (n: nat) (l: list A) (x: A),
+ List.nth_error l n = Some x -> In x l.
+Proof.
+ induction n; simpl.
+ destruct l; intros.
+ discriminate.
+ injection H; intro; subst a. apply in_eq.
+ destruct l; intros.
+ discriminate.
+ apply in_cons. auto.
+Qed.
+Hint Resolve nth_error_in: coqlib.
+
+Lemma nth_error_nil:
+ forall (A: Set) (idx: nat), nth_error (@nil A) idx = None.
+Proof.
+ induction idx; simpl; intros; reflexivity.
+Qed.
+Hint Resolve nth_error_nil: coqlib.
+
+(** Properties of [List.incl] (list inclusion). *)
+
+Lemma incl_cons_inv:
+ forall (A: Set) (a: A) (b c: list A),
+ incl (a :: b) c -> incl b c.
+Proof.
+ unfold incl; intros. apply H. apply in_cons. auto.
+Qed.
+Hint Resolve incl_cons_inv: coqlib.
+
+Lemma incl_app_inv_l:
+ forall (A: Set) (l1 l2 m: list A),
+ incl (l1 ++ l2) m -> incl l1 m.
+Proof.
+ unfold incl; intros. apply H. apply in_or_app. left; assumption.
+Qed.
+
+Lemma incl_app_inv_r:
+ forall (A: Set) (l1 l2 m: list A),
+ incl (l1 ++ l2) m -> incl l2 m.
+Proof.
+ unfold incl; intros. apply H. apply in_or_app. right; assumption.
+Qed.
+
+Hint Resolve incl_tl incl_refl incl_app_inv_l incl_app_inv_r: coqlib.
+
+Lemma incl_same_head:
+ forall (A: Set) (x: A) (l1 l2: list A),
+ incl l1 l2 -> incl (x::l1) (x::l2).
+Proof.
+ intros; red; simpl; intros. intuition.
+Qed.
+
+(** Properties of [List.map] (mapping a function over a list). *)
+
+Lemma list_map_exten:
+ forall (A B: Set) (f f': A -> B) (l: list A),
+ (forall x, In x l -> f x = f' x) ->
+ List.map f' l = List.map f l.
+Proof.
+ induction l; simpl; intros.
+ reflexivity.
+ rewrite <- H. rewrite IHl. reflexivity.
+ intros. apply H. tauto.
+ tauto.
+Qed.
+
+Lemma list_map_compose:
+ forall (A B C: Set) (f: A -> B) (g: B -> C) (l: list A),
+ List.map g (List.map f l) = List.map (fun x => g(f x)) l.
+Proof.
+ induction l; simpl. reflexivity. rewrite IHl; reflexivity.
+Qed.
+
+Lemma list_map_nth:
+ forall (A B: Set) (f: A -> B) (l: list A) (n: nat),
+ nth_error (List.map f l) n = option_map f (nth_error l n).
+Proof.
+ induction l; simpl; intros.
+ repeat rewrite nth_error_nil. reflexivity.
+ destruct n; simpl. reflexivity. auto.
+Qed.
+
+Lemma list_length_map:
+ forall (A B: Set) (f: A -> B) (l: list A),
+ List.length (List.map f l) = List.length l.
+Proof.
+ induction l; simpl; congruence.
+Qed.
+
+Lemma list_in_map_inv:
+ forall (A B: Set) (f: A -> B) (l: list A) (y: B),
+ In y (List.map f l) -> exists x:A, y = f x /\ In x l.
+Proof.
+ induction l; simpl; intros.
+ contradiction.
+ elim H; intro.
+ exists a; intuition auto.
+ generalize (IHl y H0). intros [x [EQ IN]].
+ exists x; tauto.
+Qed.
+
+Lemma list_append_map:
+ forall (A B: Set) (f: A -> B) (l1 l2: list A),
+ List.map f (l1 ++ l2) = List.map f l1 ++ List.map f l2.
+Proof.
+ induction l1; simpl; intros.
+ auto. rewrite IHl1. auto.
+Qed.
+
+(** [list_disjoint l1 l2] holds iff [l1] and [l2] have no elements
+ in common. *)
+
+Definition list_disjoint (A: Set) (l1 l2: list A) : Prop :=
+ forall (x y: A), In x l1 -> In y l2 -> x <> y.
+
+Lemma list_disjoint_cons_left:
+ forall (A: Set) (a: A) (l1 l2: list A),
+ list_disjoint (a :: l1) l2 -> list_disjoint l1 l2.
+Proof.
+ unfold list_disjoint; simpl; intros. apply H; tauto.
+Qed.
+
+Lemma list_disjoint_cons_right:
+ forall (A: Set) (a: A) (l1 l2: list A),
+ list_disjoint l1 (a :: l2) -> list_disjoint l1 l2.
+Proof.
+ unfold list_disjoint; simpl; intros. apply H; tauto.
+Qed.
+
+Lemma list_disjoint_notin:
+ forall (A: Set) (l1 l2: list A) (a: A),
+ list_disjoint l1 l2 -> In a l1 -> ~(In a l2).
+Proof.
+ unfold list_disjoint; intros; red; intros.
+ apply H with a a; auto.
+Qed.
+
+Lemma list_disjoint_sym:
+ forall (A: Set) (l1 l2: list A),
+ list_disjoint l1 l2 -> list_disjoint l2 l1.
+Proof.
+ unfold list_disjoint; intros.
+ apply sym_not_equal. apply H; auto.
+Qed.
+
+(** [list_norepet l] holds iff the list [l] contains no repetitions,
+ i.e. no element occurs twice. *)
+
+Inductive list_norepet (A: Set) : list A -> Prop :=
+ | list_norepet_nil:
+ list_norepet nil
+ | list_norepet_cons:
+ forall hd tl,
+ ~(In hd tl) -> list_norepet tl -> list_norepet (hd :: tl).
+
+Lemma list_norepet_dec:
+ forall (A: Set) (eqA_dec: forall (x y: A), {x=y} + {x<>y}) (l: list A),
+ {list_norepet l} + {~list_norepet l}.
+Proof.
+ induction l.
+ left; constructor.
+ destruct IHl.
+ case (In_dec eqA_dec a l); intro.
+ right. red; intro. inversion H. contradiction.
+ left. constructor; auto.
+ right. red; intro. inversion H. contradiction.
+Qed.
+
+Lemma list_map_norepet:
+ forall (A B: Set) (f: A -> B) (l: list A),
+ list_norepet l ->
+ (forall x y, In x l -> In y l -> x <> y -> f x <> f y) ->
+ list_norepet (List.map f l).
+Proof.
+ induction 1; simpl; intros.
+ constructor.
+ constructor.
+ red; intro. generalize (list_in_map_inv f _ _ H2).
+ intros [x [EQ IN]]. generalize EQ. change (f hd <> f x).
+ apply H1. tauto. tauto.
+ red; intro; subst x. contradiction.
+ apply IHlist_norepet. intros. apply H1. tauto. tauto. auto.
+Qed.
+
+Remark list_norepet_append_commut:
+ forall (A: Set) (a b: list A),
+ list_norepet (a ++ b) -> list_norepet (b ++ a).
+Proof.
+ intro A.
+ assert (forall (x: A) (b: list A) (a: list A),
+ list_norepet (a ++ b) -> ~(In x a) -> ~(In x b) ->
+ list_norepet (a ++ x :: b)).
+ induction a; simpl; intros.
+ constructor; auto.
+ inversion H. constructor. red; intro.
+ elim (in_app_or _ _ _ H6); intro.
+ elim H4. apply in_or_app. tauto.
+ elim H7; intro. subst a. elim H0. left. auto.
+ elim H4. apply in_or_app. tauto.
+ auto.
+ induction a; simpl; intros.
+ rewrite <- app_nil_end. auto.
+ inversion H0. apply H. auto.
+ red; intro; elim H3. apply in_or_app. tauto.
+ red; intro; elim H3. apply in_or_app. tauto.
+Qed.
+
+Lemma list_norepet_append:
+ forall (A: Set) (l1 l2: list A),
+ list_norepet l1 -> list_norepet l2 -> list_disjoint l1 l2 ->
+ list_norepet (l1 ++ l2).
+Proof.
+ induction l1; simpl; intros.
+ auto.
+ inversion H. subst hd tl.
+ constructor. red; intro. apply (H1 a a). auto with coqlib.
+ elim (in_app_or _ _ _ H2); tauto. auto.
+ apply IHl1. auto. auto.
+ red; intros; apply H1; auto with coqlib.
+Qed.
+
+Lemma list_norepet_append_right:
+ forall (A: Set) (l1 l2: list A),
+ list_norepet (l1 ++ l2) -> list_norepet l2.
+Proof.
+ induction l1; intros.
+ assumption.
+ simpl in H. inversion H. eauto.
+Qed.
+
+Lemma list_norepet_append_left:
+ forall (A: Set) (l1 l2: list A),
+ list_norepet (l1 ++ l2) -> list_norepet l1.
+Proof.
+ intros. apply list_norepet_append_right with l2.
+ apply list_norepet_append_commut. auto.
+Qed.
+
+(** [list_forall2 P [x1 ... xN] [y1 ... yM] holds iff [N = M] and
+ [P xi yi] holds for all [i]. *)
+
+Section FORALL2.
+
+Variable A: Set.
+Variable B: Set.
+Variable P: A -> B -> Prop.
+
+Inductive list_forall2: list A -> list B -> Prop :=
+ | list_forall2_nil:
+ list_forall2 nil nil
+ | list_forall2_cons:
+ forall a1 al b1 bl,
+ P a1 b1 ->
+ list_forall2 al bl ->
+ list_forall2 (a1 :: al) (b1 :: bl).
+
+End FORALL2.
+
+Lemma list_forall2_imply:
+ forall (A B: Set) (P1: A -> B -> Prop) (l1: list A) (l2: list B),
+ list_forall2 P1 l1 l2 ->
+ forall (P2: A -> B -> Prop),
+ (forall v1 v2, In v1 l1 -> In v2 l2 -> P1 v1 v2 -> P2 v1 v2) ->
+ list_forall2 P2 l1 l2.
+Proof.
+ induction 1; intros.
+ constructor.
+ constructor. auto with coqlib. apply IHlist_forall2; auto.
+ intros. auto with coqlib.
+Qed.
diff --git a/lib/Floats.v b/lib/Floats.v
new file mode 100644
index 0000000..b95789e
--- /dev/null
+++ b/lib/Floats.v
@@ -0,0 +1,55 @@
+(** Axiomatization of floating-point numbers. *)
+
+(** In contrast with what we do with machine integers, we do not bother
+ to formalize precisely IEEE floating-point arithmetic. Instead, we
+ simply axiomatize a type [float] for IEEE double-precision floats
+ and the associated operations. *)
+
+Require Import Bool.
+Require Import AST.
+Require Import Integers.
+
+Parameter float: Set.
+
+Module Float.
+
+Parameter zero: float.
+Parameter one: float.
+
+Parameter neg: float -> float.
+Parameter abs: float -> float.
+Parameter singleoffloat: float -> float.
+Parameter intoffloat: float -> int.
+Parameter floatofint: int -> float.
+Parameter floatofintu: int -> float.
+
+Parameter add: float -> float -> float.
+Parameter sub: float -> float -> float.
+Parameter mul: float -> float -> float.
+Parameter div: float -> float -> float.
+
+Parameter cmp: comparison -> float -> float -> bool.
+
+Axiom eq_dec: forall (f1 f2: float), {f1 = f2} + {f1 <> f2}.
+
+(** Below are the only properties of floating-point arithmetic that we
+ rely on in the compiler proof. *)
+
+Axiom addf_commut: forall f1 f2, add f1 f2 = add f2 f1.
+
+Axiom subf_addf_opp: forall f1 f2, sub f1 f2 = add f1 (neg f2).
+
+Axiom singleoffloat_idem:
+ forall f, singleoffloat (singleoffloat f) = singleoffloat f.
+
+Axiom cmp_ne_eq:
+ forall f1 f2, cmp Cne f1 f2 = negb (cmp Ceq f1 f2).
+Axiom cmp_le_lt_eq:
+ forall f1 f2, cmp Cle f1 f2 = cmp Clt f1 f2 || cmp Ceq f1 f2.
+Axiom cmp_ge_gt_eq:
+ forall f1 f2, cmp Cge f1 f2 = cmp Cgt f1 f2 || cmp Ceq f1 f2.
+
+Axiom eq_zero_true: cmp Ceq zero zero = true.
+Axiom eq_zero_false: forall f, f <> zero -> cmp Ceq f zero = false.
+
+End Float.
diff --git a/lib/Inclusion.v b/lib/Inclusion.v
new file mode 100644
index 0000000..1df7517
--- /dev/null
+++ b/lib/Inclusion.v
@@ -0,0 +1,367 @@
+(** Tactics to reason about list inclusion. *)
+
+(** This file (contributed by Laurence Rideau) defines a tactic [in_tac]
+ to reason over list inclusion. It expects goals of the following form:
+<<
+ id : In x l1
+ ============================
+ In x l2
+>>
+and succeeds if it can prove that [l1] is included in [l2].
+The lists [l1] and [l2] must belong to the following sub-language [L]
+<<
+ L ::= L++L | E | E::L
+>>
+The tactic uses no extra fact.
+
+A second tactic, [incl_tac], handles goals of the form
+<<
+ =============================
+ incl l1 l2
+>>
+*)
+
+Require Import List.
+Require Import ArithRing.
+
+Ltac all_app e :=
+ match e with
+ | cons ?x nil => constr:(cons x nil)
+ | cons ?x ?tl =>
+ let v := all_app tl in constr:(app (cons x nil) v)
+ | app ?e1 ?e2 =>
+ let v1 := all_app e1 with v2 := all_app e2 in
+ constr:(app v1 v2)
+ | _ => e
+ end.
+
+(** This data type, [flatten], [insert_bin], [sort_bin] and a few theorem
+ are taken from the CoqArt book, chapt. 16. *)
+
+Inductive bin : Set := node : bin->bin->bin | leaf : nat->bin.
+
+Fixpoint flatten_aux (t fin:bin){struct t} : bin :=
+ match t with
+ | node t1 t2 => flatten_aux t1 (flatten_aux t2 fin)
+ | x => node x fin
+ end.
+
+Fixpoint flatten (t:bin) : bin :=
+ match t with
+ | node t1 t2 => flatten_aux t1 (flatten t2)
+ | x => x
+ end.
+
+Fixpoint nat_le_bool (n m:nat){struct m} : bool :=
+ match n, m with
+ | O, _ => true
+ | S _, O => false
+ | S n, S m => nat_le_bool n m
+ end.
+
+Fixpoint insert_bin (n:nat)(t:bin){struct t} : bin :=
+ match t with
+ | leaf m =>
+ if nat_le_bool n m then
+ node (leaf n)(leaf m)
+ else
+ node (leaf m)(leaf n)
+ | node (leaf m) t' =>
+ if nat_le_bool n m then node (leaf n) t else node (leaf m)(insert_bin n t')
+ | t => node (leaf n) t
+ end.
+
+Fixpoint sort_bin (t:bin) : bin :=
+ match t with
+ | node (leaf n) t' => insert_bin n (sort_bin t')
+ | t => t
+ end.
+
+Section assoc_eq.
+ Variables (A : Set)(f : A->A->A).
+ Hypothesis assoc : forall x y z:A, f x (f y z) = f (f x y) z.
+
+ Fixpoint bin_A (l:list A)(def:A)(t:bin){struct t} : A :=
+ match t with
+ | node t1 t2 => f (bin_A l def t1)(bin_A l def t2)
+ | leaf n => nth n l def
+ end.
+
+ Theorem flatten_aux_valid_A :
+ forall (l:list A)(def:A)(t t':bin),
+ f (bin_A l def t)(bin_A l def t') = bin_A l def (flatten_aux t t').
+ Proof.
+ intros l def t; elim t; simpl; auto.
+ intros t1 IHt1 t2 IHt2 t'; rewrite <- IHt1; rewrite <- IHt2.
+ symmetry; apply assoc.
+ Qed.
+
+ Theorem flatten_valid_A :
+ forall (l:list A)(def:A)(t:bin),
+ bin_A l def t = bin_A l def (flatten t).
+ Proof.
+ intros l def t; elim t; simpl; trivial.
+ intros t1 IHt1 t2 IHt2; rewrite <- flatten_aux_valid_A; rewrite <- IHt2.
+ trivial.
+ Qed.
+
+End assoc_eq.
+
+Ltac compute_rank l n v :=
+ match l with
+ | (cons ?X1 ?X2) =>
+ let tl := constr:X2 in
+ match constr:(X1 = v) with
+ | (?X1 = ?X1) => n
+ | _ => compute_rank tl (S n) v
+ end
+ end.
+
+Ltac term_list_app l v :=
+ match v with
+ | (app ?X1 ?X2) =>
+ let l1 := term_list_app l X2 in term_list_app l1 X1
+ | ?X1 => constr:(cons X1 l)
+ end.
+
+Ltac model_aux_app l v :=
+ match v with
+ | (app ?X1 ?X2) =>
+ let r1 := model_aux_app l X1 with r2 := model_aux_app l X2 in
+ constr:(node r1 r2)
+ | ?X1 => let n := compute_rank l 0 X1 in constr:(leaf n)
+ | _ => constr:(leaf 0)
+ end.
+
+Theorem In_permute_app_head :
+ forall A:Set, forall r:A, forall x y l:list A,
+ In r (x++y++l) -> In r (y++x++l).
+intros A r x y l; generalize r; change (incl (x++y++l)(y++x++l)).
+repeat rewrite ass_app; auto with datatypes.
+Qed.
+
+Theorem insert_bin_included :
+ forall x:nat, forall t2:bin,
+ forall (A:Set) (r:A) (l:list (list A))(def:list A),
+ In r (bin_A (list A) (app (A:=A)) l def (insert_bin x t2)) ->
+ In r (bin_A (list A) (app (A:=A)) l def (node (leaf x) t2)).
+intros x t2; induction t2.
+intros A r l def.
+destruct t2_1 as [t2_11 t2_12|y].
+simpl.
+repeat rewrite app_ass.
+auto.
+simpl; repeat rewrite app_ass.
+simpl; case (nat_le_bool x y); simpl.
+auto.
+intros H; apply In_permute_app_head.
+elim in_app_or with (1:= H); clear H; intros H.
+apply in_or_app; left; assumption.
+apply in_or_app; right;apply (IHt2_2 A r l);assumption.
+intros A r l def; simpl.
+case (nat_le_bool x n); simpl.
+auto.
+intros H.
+rewrite (app_nil_end (nth x l def)) in H.
+rewrite (app_nil_end (nth n l def)).
+apply In_permute_app_head; assumption.
+Qed.
+
+Theorem in_or_insert_bin :
+ forall (n:nat) (t2:bin) (A:Set)(r:A)(l:list (list A)) (def:list A),
+ In r (nth n l def) \/ In r (bin_A (list A)(app (A:=A)) l def t2) ->
+ In r (bin_A (list A)(app (A:=A)) l def (insert_bin n t2)).
+intros n t2 A r l def; induction t2.
+destruct t2_1 as [t2_11 t2_12| y].
+simpl; apply in_or_app.
+simpl; case (nat_le_bool n y); simpl.
+intros H.
+apply in_or_app.
+exact H.
+intros [H|H].
+apply in_or_app; right; apply IHt2_2; auto.
+elim in_app_or with (1:= H);clear H; intros H; apply in_or_app; auto.
+simpl; intros [H|H]; case (nat_le_bool n n0); simpl; apply in_or_app; auto.
+Qed.
+
+Theorem sort_included :
+ forall t:bin, forall (A:Set)(r:A)(l:list(list A))(def:list A),
+ In r (bin_A (list A) (app (A:=A)) l def (sort_bin t)) ->
+ In r (bin_A (list A) (app (A:=A)) l def t).
+induction t.
+destruct t1.
+simpl;intros; assumption.
+intros A r l def H; simpl in H; apply insert_bin_included.
+generalize (insert_bin_included _ _ _ _ _ _ H); clear H; intros H.
+simpl in H.
+elim in_app_or with (1 := H);clear H; intros H;
+apply in_or_insert_bin; auto.
+simpl;intros;assumption.
+Qed.
+
+Theorem sort_included2 :
+ forall t:bin, forall (A:Set)(r:A)(l:list(list A))(def:list A),
+ In r (bin_A (list A) (app (A:=A)) l def t) ->
+ In r (bin_A (list A) (app (A:=A)) l def (sort_bin t)).
+induction t.
+destruct t1.
+simpl; intros; assumption.
+intros A r l def H; simpl in H.
+simpl; apply in_or_insert_bin.
+elim in_app_or with (1:= H); auto.
+simpl; auto.
+Qed.
+
+Theorem in_remove_head :
+ forall (A:Set)(x:A)(l1 l2 l3:list A),
+ In x (l1++l2) -> (In x l2 -> In x l3) -> In x (l1++l3).
+intros A x l1 l2 l3 H H1.
+elim in_app_or with (1:= H);clear H; intros H; apply in_or_app; auto.
+Qed.
+
+Fixpoint check_all_leaves (n:nat)(t:bin) {struct t} : bool :=
+ match t with
+ leaf n1 => nateq n n1
+ | node t1 t2 => andb (check_all_leaves n t1)(check_all_leaves n t2)
+ end.
+
+Fixpoint remove_all_leaves (n:nat)(t:bin){struct t} : bin :=
+ match t with
+ leaf n => leaf n
+ | node (leaf n1) t2 =>
+ if nateq n n1 then remove_all_leaves n t2 else t
+ | _ => t
+ end.
+
+Fixpoint test_inclusion (t1 t2:bin) {struct t1} : bool :=
+ match t1 with
+ leaf n => check_all_leaves n t2
+ | node (leaf n1) t1' =>
+ check_all_leaves n1 t2 || test_inclusion t1' (remove_all_leaves n1 t2)
+ | _ => false
+ end.
+
+Theorem check_all_leaves_sound :
+ forall x t2,
+ check_all_leaves x t2 = true ->
+ forall (A:Set)(r:A)(l:list(list A))(def:list A),
+ In r (bin_A (list A) (app (A:=A)) l def t2) ->
+ In r (nth x l def).
+intros x t2; induction t2; simpl.
+destruct (check_all_leaves x t2_1);
+destruct (check_all_leaves x t2_2); simpl; intros Heq; try discriminate.
+intros A r l def H; elim in_app_or with (1:= H); clear H; intros H; auto.
+intros Heq A r l def; rewrite (nateq_prop x n); auto.
+rewrite Heq; unfold Is_true; auto.
+Qed.
+
+Theorem remove_all_leaves_sound :
+ forall x t2,
+ forall (A:Set)(r:A)(l:list(list A))(def:list A),
+ In r (bin_A (list A) (app(A:=A)) l def t2) ->
+ In r (bin_A (list A) (app(A:=A)) l def (remove_all_leaves x t2)) \/
+ In r (nth x l def).
+intros x t2; induction t2; simpl.
+destruct t2_1.
+simpl; auto.
+intros A r l def.
+generalize (refl_equal (nateq x n)); pattern (nateq x n) at -1;
+ case (nateq x n); simpl; auto.
+intros Heq_nateq.
+assert (Heq_xn : x=n).
+apply nateq_prop; rewrite Heq_nateq;unfold Is_true;auto.
+rewrite Heq_xn.
+intros H; elim in_app_or with (1:= H); auto.
+clear H; intros H.
+rewrite Heq_xn in IHt2_2; auto.
+auto.
+Qed.
+
+Theorem test_inclusion_sound :
+ forall t1 t2:bin,
+ test_inclusion t1 t2 = true ->
+ forall (A:Set)(r:A)(l:list(list A))(def:list A),
+ In r (bin_A (list A)(app(A:=A)) l def t2) ->
+ In r (bin_A (list A)(app(A:=A)) l def t1).
+intros t1; induction t1.
+destruct t1_1 as [t1_11 t1_12|x].
+simpl; intros; discriminate.
+simpl; intros t2 Heq A r l def H.
+assert
+ (check_all_leaves x t2 = true \/
+ test_inclusion t1_2 (remove_all_leaves x t2) = true).
+destruct (check_all_leaves x t2);
+destruct (test_inclusion t1_2 (remove_all_leaves x t2));
+simpl in Heq; try discriminate Heq; auto.
+elim H0; clear H0; intros H0.
+apply in_or_app; left; apply check_all_leaves_sound with (1:= H0); auto.
+elim remove_all_leaves_sound with (x:=x)(1:= H); intros H'.
+apply in_or_app; right; apply IHt1_2 with (1:= H0); auto.
+apply in_or_app; auto.
+simpl; apply check_all_leaves_sound.
+Qed.
+
+Theorem inclusion_theorem :
+ forall t1 t2 : bin,
+ test_inclusion (sort_bin (flatten t1)) (sort_bin (flatten t2)) = true ->
+ forall (A:Set)(r:A)(l:list(list A))(def:list A),
+ In r (bin_A (list A) (app(A:=A)) l def t2) ->
+ In r (bin_A (list A) (app(A:=A)) l def t1).
+intros t1 t2 Heq A r l def H.
+rewrite flatten_valid_A with (t:= t1)(1:= (ass_app (A:= A))).
+apply sort_included.
+apply test_inclusion_sound with (t2 := sort_bin (flatten t2)).
+assumption.
+apply sort_included2.
+rewrite <- flatten_valid_A with (1:= (ass_app (A:= A))).
+assumption.
+Qed.
+
+Ltac in_tac :=
+ match goal with
+ | id : In ?x nil |- _ => elim id
+ | id : In ?x ?l1 |- In ?x ?l2 =>
+ let t := type of x in
+ let v1 := all_app l1 in
+ let v2 := all_app l2 in
+ (let l := term_list_app (nil (A:=list t)) v2 in
+ let term1 := model_aux_app l v1 with
+ term2 := model_aux_app l v2 in
+ (change (In x (bin_A (list t) (app(A:=t)) l (nil(A:=t)) term2));
+ apply inclusion_theorem with (t2:= term1);[apply refl_equal|exact id]))
+ end.
+
+Ltac incl_tac :=
+ match goal with
+ |- incl _ _ => intro; intro; in_tac
+ end.
+
+(* Usage examples.
+
+Theorem ex1 : forall x y z:nat, forall l1 l2 : list nat,
+ In x (y::l1++l2) -> In x (l2++z::l1++(y::nil)).
+intros.
+in_tac.
+Qed.
+
+Fixpoint mklist (f:nat->nat)(n:nat){struct n} : list nat :=
+ match n with 0 => nil | S p => mklist f p++(f p::nil) end.
+
+(* At the time of writing these lines, this example takes about 5 seconds
+ for 40 elements and 22 seconds for 60 elements.
+ A variant to the example is to replace mklist f p++(f p::nil) with
+ f p::mklist f p, in this case the time is 6 seconds for 40 elements and
+ 35 seconds for 60 elements. *)
+
+Theorem ex2 :
+ forall x : nat, In x (mklist (fun y => y) 40) ->
+ In x (mklist (fun y => (40 - 1) - y) 40).
+lazy beta iota zeta delta [mklist minus].
+intros.
+in_tac.
+Qed.
+
+(* The tactic could be made more efficient by using binary trees and
+ numbers of type positive instead of lists and natural numbers. *)
+
+*)
diff --git a/lib/Integers.v b/lib/Integers.v
new file mode 100644
index 0000000..6b605bd
--- /dev/null
+++ b/lib/Integers.v
@@ -0,0 +1,2184 @@
+(** Formalizations of integers modulo $2^32$ #2<sup>32</sup>#. *)
+
+Require Import Coqlib.
+Require Import AST.
+
+Definition wordsize : nat := 32%nat.
+Definition modulus : Z := two_power_nat wordsize.
+Definition half_modulus : Z := modulus / 2.
+
+(** * Representation of machine integers *)
+
+(** A machine integer (type [int]) is represented as a Coq arbitrary-precision
+ integer (type [Z]) plus a proof that it is in the range 0 (included) to
+ [modulus] (excluded. *)
+
+Definition in_range (x: Z) :=
+ match x ?= 0 with
+ | Lt => False
+ | _ =>
+ match x ?= modulus with
+ | Lt => True
+ | _ => False
+ end
+ end.
+
+Record int: Set := mkint { intval: Z; intrange: in_range intval }.
+
+Module Int.
+
+Definition max_unsigned : Z := modulus - 1.
+Definition max_signed : Z := half_modulus - 1.
+Definition min_signed : Z := - half_modulus.
+
+(** The [unsigned] and [signed] functions return the Coq integer corresponding
+ to the given machine integer, interpreted as unsigned or signed
+ respectively. *)
+
+Definition unsigned (n: int) : Z := intval n.
+
+Definition signed (n: int) : Z :=
+ if zlt (unsigned n) half_modulus
+ then unsigned n
+ else unsigned n - modulus.
+
+Lemma mod_in_range:
+ forall x, in_range (Zmod x modulus).
+Proof.
+ intro.
+ generalize (Z_mod_lt x modulus (two_power_nat_pos wordsize)).
+ intros [A B].
+ assert (C: x mod modulus >= 0). omega.
+ red. red in C. red in B.
+ rewrite B. destruct (x mod modulus ?= 0); auto.
+Qed.
+
+(** Conversely, [repr] takes a Coq integer and returns the corresponding
+ machine integer. The argument is treated modulo [modulus]. *)
+
+Definition repr (x: Z) : int :=
+ mkint (Zmod x modulus) (mod_in_range x).
+
+Definition zero := repr 0.
+Definition one := repr 1.
+Definition mone := repr (-1).
+
+Lemma mkint_eq:
+ forall x y Px Py, x = y -> mkint x Px = mkint y Py.
+Proof.
+ intros. subst y.
+ generalize (proof_irrelevance _ Px Py); intro.
+ subst Py. reflexivity.
+Qed.
+
+Lemma eq_dec: forall (x y: int), {x = y} + {x <> y}.
+Proof.
+ intros. destruct x; destruct y. case (zeq intval0 intval1); intro.
+ left. apply mkint_eq. auto.
+ right. red; intro. injection H. exact n.
+Qed.
+
+(** * Arithmetic and logical operations over machine integers *)
+
+Definition eq (x y: int) : bool :=
+ if zeq (unsigned x) (unsigned y) then true else false.
+Definition lt (x y: int) : bool :=
+ if zlt (signed x) (signed y) then true else false.
+Definition ltu (x y: int) : bool :=
+ if zlt (unsigned x) (unsigned y) then true else false.
+
+Definition neg (x: int) : int := repr (- unsigned x).
+Definition cast8signed (x: int) : int :=
+ let y := Zmod (unsigned x) 256 in
+ if zlt y 128 then repr y else repr (y - 256).
+Definition cast8unsigned (x: int) : int :=
+ repr (Zmod (unsigned x) 256).
+Definition cast16signed (x: int) : int :=
+ let y := Zmod (unsigned x) 65536 in
+ if zlt y 32768 then repr y else repr (y - 65536).
+Definition cast16unsigned (x: int) : int :=
+ repr (Zmod (unsigned x) 65536).
+
+Definition add (x y: int) : int :=
+ repr (unsigned x + unsigned y).
+Definition sub (x y: int) : int :=
+ repr (unsigned x - unsigned y).
+Definition mul (x y: int) : int :=
+ repr (unsigned x * unsigned y).
+
+Definition Zdiv_round (x y: Z) : Z :=
+ if zlt x 0 then
+ if zlt y 0 then (-x) / (-y) else - ((-x) / y)
+ else
+ if zlt y 0 then -(x / (-y)) else x / y.
+
+Definition Zmod_round (x y: Z) : Z :=
+ x - (Zdiv_round x y) * y.
+
+Definition divs (x y: int) : int :=
+ repr (Zdiv_round (signed x) (signed y)).
+Definition mods (x y: int) : int :=
+ repr (Zmod_round (signed x) (signed y)).
+Definition divu (x y: int) : int :=
+ repr (unsigned x / unsigned y).
+Definition modu (x y: int) : int :=
+ repr (Zmod (unsigned x) (unsigned y)).
+
+(** For bitwise operations, we need to convert between Coq integers [Z]
+ and their bit-level representations. Bit-level representations are
+ represented as characteristic functions, that is, functions [f]
+ of type [nat -> bool] such that [f i] is the value of the [i]-th bit
+ of the number. The values of characteristic functions for [i] greater
+ than 32 are ignored. *)
+
+Definition Z_shift_add (b: bool) (x: Z) :=
+ if b then 2 * x + 1 else 2 * x.
+
+Definition Z_bin_decomp (x: Z) : bool * Z :=
+ match x with
+ | Z0 => (false, 0)
+ | Zpos p =>
+ match p with
+ | xI q => (true, Zpos q)
+ | xO q => (false, Zpos q)
+ | xH => (true, 0)
+ end
+ | Zneg p =>
+ match p with
+ | xI q => (true, Zneg q - 1)
+ | xO q => (false, Zneg q)
+ | xH => (true, -1)
+ end
+ end.
+
+Fixpoint bits_of_Z (n: nat) (x: Z) {struct n}: Z -> bool :=
+ match n with
+ | O =>
+ (fun i: Z => false)
+ | S m =>
+ let (b, y) := Z_bin_decomp x in
+ let f := bits_of_Z m y in
+ (fun i: Z => if zeq i 0 then b else f (i - 1))
+ end.
+
+Fixpoint Z_of_bits (n: nat) (f: Z -> bool) {struct n}: Z :=
+ match n with
+ | O => 0
+ | S m => Z_shift_add (f 0) (Z_of_bits m (fun i => f (i + 1)))
+ end.
+
+(** Bitwise logical ``and'', ``or'' and ``xor'' operations. *)
+
+Definition bitwise_binop (f: bool -> bool -> bool) (x y: int) :=
+ let fx := bits_of_Z wordsize (unsigned x) in
+ let fy := bits_of_Z wordsize (unsigned y) in
+ repr (Z_of_bits wordsize (fun i => f (fx i) (fy i))).
+
+Definition and (x y: int): int := bitwise_binop andb x y.
+Definition or (x y: int): int := bitwise_binop orb x y.
+Definition xor (x y: int) : int := bitwise_binop xorb x y.
+
+Definition not (x: int) : int := xor x mone.
+
+(** Shifts and rotates. *)
+
+Definition shl (x y: int): int :=
+ let fx := bits_of_Z wordsize (unsigned x) in
+ let vy := unsigned y in
+ repr (Z_of_bits wordsize (fun i => fx (i - vy))).
+
+Definition shru (x y: int): int :=
+ let fx := bits_of_Z wordsize (unsigned x) in
+ let vy := unsigned y in
+ repr (Z_of_bits wordsize (fun i => fx (i + vy))).
+
+(** Arithmetic right shift is defined as signed division by a power of two.
+ Two such shifts are defined: [shr] rounds towards minus infinity
+ (standard behaviour for arithmetic right shift) and
+ [shrx] rounds towards zero. *)
+
+Definition shr (x y: int): int :=
+ repr (signed x / two_p (unsigned y)).
+Definition shrx (x y: int): int :=
+ divs x (shl one y).
+
+Definition shr_carry (x y: int) :=
+ sub (shrx x y) (shr x y).
+
+Definition rol (x y: int) : int :=
+ let fx := bits_of_Z wordsize (unsigned x) in
+ let vy := unsigned y in
+ repr (Z_of_bits wordsize
+ (fun i => fx (Zmod (i - vy) (Z_of_nat wordsize)))).
+
+Definition rolm (x a m: int): int := and (rol x a) m.
+
+(** Decomposition of a number as a sum of powers of two. *)
+
+Fixpoint Z_one_bits (n: nat) (x: Z) (i: Z) {struct n}: list Z :=
+ match n with
+ | O => nil
+ | S m =>
+ let (b, y) := Z_bin_decomp x in
+ if b then i :: Z_one_bits m y (i+1) else Z_one_bits m y (i+1)
+ end.
+
+Definition one_bits (x: int) : list int :=
+ List.map repr (Z_one_bits wordsize (unsigned x) 0).
+
+(** Recognition of powers of two. *)
+
+Definition is_power2 (x: int) : option int :=
+ match Z_one_bits wordsize (unsigned x) 0 with
+ | i :: nil => Some (repr i)
+ | _ => None
+ end.
+
+(** Recognition of integers that are acceptable as immediate operands
+ to the [rlwim] PowerPC instruction. These integers are of the form
+ [000011110000] or [111100001111], that is, a run of one bits
+ surrounded by zero bits, or conversely. We recognize these integers by
+ running the following automaton on the bits. The accepting states are
+ 2, 3, 4, 5, and 6.
+<<
+ 0 1 0
+ / \ / \ / \
+ \ / \ / \ /
+ -0--> [1] --1--> [2] --0--> [3]
+ /
+ [0]
+ \
+ -1--> [4] --0--> [5] --1--> [6]
+ / \ / \ / \
+ \ / \ / \ /
+ 1 0 1
+>>
+*)
+
+Inductive rlw_state: Set :=
+ | RLW_S0 : rlw_state
+ | RLW_S1 : rlw_state
+ | RLW_S2 : rlw_state
+ | RLW_S3 : rlw_state
+ | RLW_S4 : rlw_state
+ | RLW_S5 : rlw_state
+ | RLW_S6 : rlw_state
+ | RLW_Sbad : rlw_state.
+
+Definition rlw_transition (s: rlw_state) (b: bool) : rlw_state :=
+ match s, b with
+ | RLW_S0, false => RLW_S1
+ | RLW_S0, true => RLW_S4
+ | RLW_S1, false => RLW_S1
+ | RLW_S1, true => RLW_S2
+ | RLW_S2, false => RLW_S3
+ | RLW_S2, true => RLW_S2
+ | RLW_S3, false => RLW_S3
+ | RLW_S3, true => RLW_Sbad
+ | RLW_S4, false => RLW_S5
+ | RLW_S4, true => RLW_S4
+ | RLW_S5, false => RLW_S5
+ | RLW_S5, true => RLW_S6
+ | RLW_S6, false => RLW_Sbad
+ | RLW_S6, true => RLW_S6
+ | RLW_Sbad, _ => RLW_Sbad
+ end.
+
+Definition rlw_accepting (s: rlw_state) : bool :=
+ match s with
+ | RLW_S0 => false
+ | RLW_S1 => false
+ | RLW_S2 => true
+ | RLW_S3 => true
+ | RLW_S4 => true
+ | RLW_S5 => true
+ | RLW_S6 => true
+ | RLW_Sbad => false
+ end.
+
+Fixpoint is_rlw_mask_rec (n: nat) (s: rlw_state) (x: Z) {struct n} : bool :=
+ match n with
+ | O =>
+ rlw_accepting s
+ | S m =>
+ let (b, y) := Z_bin_decomp x in
+ is_rlw_mask_rec m (rlw_transition s b) y
+ end.
+
+Definition is_rlw_mask (x: int) : bool :=
+ is_rlw_mask_rec wordsize RLW_S0 (unsigned x).
+
+(** Comparisons. *)
+
+Definition cmp (c: comparison) (x y: int) : bool :=
+ match c with
+ | Ceq => eq x y
+ | Cne => negb (eq x y)
+ | Clt => lt x y
+ | Cle => negb (lt y x)
+ | Cgt => lt y x
+ | Cge => negb (lt x y)
+ end.
+
+Definition cmpu (c: comparison) (x y: int) : bool :=
+ match c with
+ | Ceq => eq x y
+ | Cne => negb (eq x y)
+ | Clt => ltu x y
+ | Cle => negb (ltu y x)
+ | Cgt => ltu y x
+ | Cge => negb (ltu x y)
+ end.
+
+Definition is_false (x: int) : Prop := x = zero.
+Definition is_true (x: int) : Prop := x <> zero.
+Definition notbool (x: int) : int := if eq x zero then one else zero.
+
+(** * Properties of integers and integer arithmetic *)
+
+(** ** Properties of equality *)
+
+Theorem one_not_zero: Int.one <> Int.zero.
+Proof.
+ compute. congruence.
+Qed.
+
+Theorem eq_sym:
+ forall x y, eq x y = eq y x.
+Proof.
+ intros; unfold eq. case (zeq (unsigned x) (unsigned y)); intro.
+ rewrite e. rewrite zeq_true. auto.
+ rewrite zeq_false. auto. auto.
+Qed.
+
+Theorem eq_spec: forall (x y: int), if eq x y then x = y else x <> y.
+Proof.
+ intros; unfold eq. case (eq_dec x y); intro.
+ subst y. rewrite zeq_true. auto.
+ rewrite zeq_false. auto.
+ destruct x; destruct y.
+ simpl. red; intro. elim n. apply mkint_eq. auto.
+Qed.
+
+Theorem eq_true: forall x, eq x x = true.
+Proof.
+ intros. generalize (eq_spec x x); case (eq x x); intros; congruence.
+Qed.
+
+Theorem eq_false: forall x y, x <> y -> eq x y = false.
+Proof.
+ intros. generalize (eq_spec x y); case (eq x y); intros; congruence.
+Qed.
+
+(** ** Modulo arithmetic *)
+
+(** We define and state properties of equality and arithmetic modulo a
+ positive integer. *)
+
+Section EQ_MODULO.
+
+Variable modul: Z.
+Hypothesis modul_pos: modul > 0.
+
+Definition eqmod (x y: Z) : Prop := exists k, x = k * modul + y.
+
+Lemma eqmod_refl: forall x, eqmod x x.
+Proof.
+ intros; red. exists 0. omega.
+Qed.
+
+Lemma eqmod_refl2: forall x y, x = y -> eqmod x y.
+Proof.
+ intros. subst y. apply eqmod_refl.
+Qed.
+
+Lemma eqmod_sym: forall x y, eqmod x y -> eqmod y x.
+Proof.
+ intros x y [k EQ]; red. exists (-k). subst x. ring.
+Qed.
+
+Lemma eqmod_trans: forall x y z, eqmod x y -> eqmod y z -> eqmod x z.
+Proof.
+ intros x y z [k1 EQ1] [k2 EQ2]; red.
+ exists (k1 + k2). subst x; subst y. ring.
+Qed.
+
+Lemma eqmod_small_eq:
+ forall x y, eqmod x y -> 0 <= x < modul -> 0 <= y < modul -> x = y.
+Proof.
+ intros x y [k EQ] I1 I2.
+ generalize (Zdiv_unique _ _ _ _ EQ I2). intro.
+ rewrite (Zdiv_small x modul I1) in H. subst k. omega.
+Qed.
+
+Lemma eqmod_mod_eq:
+ forall x y, eqmod x y -> x mod modul = y mod modul.
+Proof.
+ intros x y [k EQ]. subst x.
+ rewrite Zplus_comm. apply Z_mod_plus. auto.
+Qed.
+
+Lemma eqmod_mod:
+ forall x, eqmod x (x mod modul).
+Proof.
+ intros; red. exists (x / modul).
+ rewrite Zmult_comm. apply Z_div_mod_eq. auto.
+Qed.
+
+Lemma eqmod_add:
+ forall a b c d, eqmod a b -> eqmod c d -> eqmod (a + c) (b + d).
+Proof.
+ intros a b c d [k1 EQ1] [k2 EQ2]; red.
+ subst a; subst c. exists (k1 + k2). ring.
+Qed.
+
+Lemma eqmod_neg:
+ forall x y, eqmod x y -> eqmod (-x) (-y).
+Proof.
+ intros x y [k EQ]; red. exists (-k). rewrite EQ. ring.
+Qed.
+
+Lemma eqmod_sub:
+ forall a b c d, eqmod a b -> eqmod c d -> eqmod (a - c) (b - d).
+Proof.
+ intros a b c d [k1 EQ1] [k2 EQ2]; red.
+ subst a; subst c. exists (k1 - k2). ring.
+Qed.
+
+Lemma eqmod_mult:
+ forall a b c d, eqmod a c -> eqmod b d -> eqmod (a * b) (c * d).
+Proof.
+ intros a b c d [k1 EQ1] [k2 EQ2]; red.
+ subst a; subst b.
+ exists (k1 * k2 * modul + c * k2 + k1 * d).
+ ring.
+Qed.
+
+End EQ_MODULO.
+
+(** We then specialize these definitions to equality modulo
+ $2^32$ #2<sup>32</sup>#. *)
+
+Lemma modulus_pos:
+ modulus > 0.
+Proof.
+ unfold modulus. apply two_power_nat_pos.
+Qed.
+Hint Resolve modulus_pos: ints.
+
+Definition eqm := eqmod modulus.
+
+Lemma eqm_refl: forall x, eqm x x.
+Proof (eqmod_refl modulus).
+Hint Resolve eqm_refl: ints.
+
+Lemma eqm_refl2:
+ forall x y, x = y -> eqm x y.
+Proof (eqmod_refl2 modulus).
+Hint Resolve eqm_refl2: ints.
+
+Lemma eqm_sym: forall x y, eqm x y -> eqm y x.
+Proof (eqmod_sym modulus).
+Hint Resolve eqm_sym: ints.
+
+Lemma eqm_trans: forall x y z, eqm x y -> eqm y z -> eqm x z.
+Proof (eqmod_trans modulus).
+Hint Resolve eqm_trans: ints.
+
+Lemma eqm_samerepr: forall x y, eqm x y -> repr x = repr y.
+Proof.
+ intros. unfold repr. apply mkint_eq.
+ apply eqmod_mod_eq. auto with ints. exact H.
+Qed.
+
+Lemma eqm_small_eq:
+ forall x y, eqm x y -> 0 <= x < modulus -> 0 <= y < modulus -> x = y.
+Proof (eqmod_small_eq modulus).
+Hint Resolve eqm_small_eq: ints.
+
+Lemma eqm_add:
+ forall a b c d, eqm a b -> eqm c d -> eqm (a + c) (b + d).
+Proof (eqmod_add modulus).
+Hint Resolve eqm_add: ints.
+
+Lemma eqm_neg:
+ forall x y, eqm x y -> eqm (-x) (-y).
+Proof (eqmod_neg modulus).
+Hint Resolve eqm_neg: ints.
+
+Lemma eqm_sub:
+ forall a b c d, eqm a b -> eqm c d -> eqm (a - c) (b - d).
+Proof (eqmod_sub modulus).
+Hint Resolve eqm_sub: ints.
+
+Lemma eqm_mult:
+ forall a b c d, eqm a c -> eqm b d -> eqm (a * b) (c * d).
+Proof (eqmod_mult modulus).
+Hint Resolve eqm_mult: ints.
+
+(** ** Properties of the coercions between [Z] and [int] *)
+
+Lemma eqm_unsigned_repr:
+ forall z, eqm z (unsigned (repr z)).
+Proof.
+ unfold eqm, repr, unsigned; intros; simpl.
+ apply eqmod_mod. auto with ints.
+Qed.
+Hint Resolve eqm_unsigned_repr: ints.
+
+Lemma eqm_unsigned_repr_l:
+ forall a b, eqm a b -> eqm (unsigned (repr a)) b.
+Proof.
+ intros. apply eqm_trans with a.
+ apply eqm_sym. apply eqm_unsigned_repr. auto.
+Qed.
+Hint Resolve eqm_unsigned_repr_l: ints.
+
+Lemma eqm_unsigned_repr_r:
+ forall a b, eqm a b -> eqm a (unsigned (repr b)).
+Proof.
+ intros. apply eqm_trans with b. auto.
+ apply eqm_unsigned_repr.
+Qed.
+Hint Resolve eqm_unsigned_repr_r: ints.
+
+Lemma eqm_signed_unsigned:
+ forall x, eqm (signed x) (unsigned x).
+Proof.
+ intro; red; unfold signed. set (y := unsigned x).
+ case (zlt y half_modulus); intro.
+ apply eqmod_refl. red; exists (-1); ring.
+Qed.
+
+Lemma in_range_range:
+ forall z, in_range z -> 0 <= z < modulus.
+Proof.
+ intros.
+ assert (z >= 0 /\ z < modulus).
+ generalize H. unfold in_range, Zge, Zlt.
+ destruct (z ?= 0).
+ destruct (z ?= modulus); try contradiction.
+ intuition congruence.
+ contradiction.
+ destruct (z ?= modulus); try contradiction.
+ intuition congruence.
+ omega.
+Qed.
+
+Theorem unsigned_range:
+ forall i, 0 <= unsigned i < modulus.
+Proof.
+ destruct i; simpl.
+ apply in_range_range. auto.
+Qed.
+Hint Resolve unsigned_range: ints.
+
+Theorem unsigned_range_2:
+ forall i, 0 <= unsigned i <= max_unsigned.
+Proof.
+ intro; unfold max_unsigned.
+ generalize (unsigned_range i). omega.
+Qed.
+Hint Resolve unsigned_range_2: ints.
+
+Theorem signed_range:
+ forall i, min_signed <= signed i <= max_signed.
+Proof.
+ intros. unfold signed.
+ generalize (unsigned_range i). set (n := unsigned i). intros.
+ case (zlt n half_modulus); intro.
+ unfold max_signed. assert (min_signed < 0). compute. auto.
+ omega.
+ unfold min_signed, max_signed. change modulus with (2 * half_modulus).
+ change modulus with (2 * half_modulus) in H. omega.
+Qed.
+
+Theorem repr_unsigned:
+ forall i, repr (unsigned i) = i.
+Proof.
+ destruct i; simpl. unfold repr. apply mkint_eq.
+ apply Zmod_small. apply in_range_range; auto.
+Qed.
+Hint Resolve repr_unsigned: ints.
+
+Lemma repr_signed:
+ forall i, repr (signed i) = i.
+Proof.
+ intros. transitivity (repr (unsigned i)).
+ apply eqm_samerepr. apply eqm_signed_unsigned. auto with ints.
+Qed.
+Hint Resolve repr_unsigned: ints.
+
+Theorem unsigned_repr:
+ forall z, 0 <= z <= max_unsigned -> unsigned (repr z) = z.
+Proof.
+ intros. unfold repr, unsigned; simpl.
+ apply Zmod_small. unfold max_unsigned in H. omega.
+Qed.
+Hint Resolve unsigned_repr: ints.
+
+Theorem signed_repr:
+ forall z, min_signed <= z <= max_signed -> signed (repr z) = z.
+Proof.
+ intros. unfold signed. case (zle 0 z); intro.
+ replace (unsigned (repr z)) with z.
+ rewrite zlt_true. auto. unfold max_signed in H. omega.
+ symmetry. apply unsigned_repr.
+ split. auto. apply Zle_trans with max_signed. tauto.
+ compute; intro; discriminate.
+ pose (z' := z + modulus).
+ replace (repr z) with (repr z').
+ replace (unsigned (repr z')) with z'.
+ rewrite zlt_false. unfold z'. omega.
+ unfold z'. unfold min_signed in H.
+ change modulus with (half_modulus + half_modulus). omega.
+ symmetry. apply unsigned_repr.
+ unfold z', max_unsigned. unfold min_signed, max_signed in H.
+ change modulus with (half_modulus + half_modulus).
+ omega.
+ apply eqm_samerepr. unfold z'; red. exists 1. omega.
+Qed.
+
+(** ** Properties of addition *)
+
+Theorem add_unsigned: forall x y, add x y = repr (unsigned x + unsigned y).
+Proof. intros; reflexivity.
+Qed.
+
+Theorem add_signed: forall x y, add x y = repr (signed x + signed y).
+Proof.
+ intros. rewrite add_unsigned. apply eqm_samerepr.
+ apply eqm_add; apply eqm_sym; apply eqm_signed_unsigned.
+Qed.
+
+Theorem add_commut: forall x y, add x y = add y x.
+Proof. intros; unfold add. decEq. omega. Qed.
+
+Theorem add_zero: forall x, add x zero = x.
+Proof.
+ intros; unfold add, zero. change (unsigned (repr 0)) with 0.
+ rewrite Zplus_0_r. apply repr_unsigned.
+Qed.
+
+Theorem add_assoc: forall x y z, add (add x y) z = add x (add y z).
+Proof.
+ intros; unfold add.
+ set (x' := unsigned x).
+ set (y' := unsigned y).
+ set (z' := unsigned z).
+ apply eqm_samerepr.
+ apply eqm_trans with ((x' + y') + z').
+ auto with ints.
+ rewrite <- Zplus_assoc. auto with ints.
+Qed.
+
+Theorem add_permut: forall x y z, add x (add y z) = add y (add x z).
+Proof.
+ intros. rewrite (add_commut y z). rewrite <- add_assoc. apply add_commut.
+Qed.
+
+Theorem add_neg_zero: forall x, add x (neg x) = zero.
+Proof.
+ intros; unfold add, neg, zero. apply eqm_samerepr.
+ replace 0 with (unsigned x + (- (unsigned x))).
+ auto with ints. omega.
+Qed.
+
+(** ** Properties of negation *)
+
+Theorem neg_repr: forall z, neg (repr z) = repr (-z).
+Proof.
+ intros; unfold neg. apply eqm_samerepr. auto with ints.
+Qed.
+
+Theorem neg_zero: neg zero = zero.
+Proof.
+ unfold neg, zero. compute. apply mkint_eq. auto.
+Qed.
+
+Theorem neg_add_distr: forall x y, neg(add x y) = add (neg x) (neg y).
+Proof.
+ intros; unfold neg, add. apply eqm_samerepr.
+ apply eqm_trans with (- (unsigned x + unsigned y)).
+ auto with ints.
+ replace (- (unsigned x + unsigned y))
+ with ((- unsigned x) + (- unsigned y)).
+ auto with ints. omega.
+Qed.
+
+(** ** Properties of subtraction *)
+
+Theorem sub_zero_l: forall x, sub x zero = x.
+Proof.
+ intros; unfold sub. change (unsigned zero) with 0.
+ replace (unsigned x - 0) with (unsigned x). apply repr_unsigned.
+ omega.
+Qed.
+
+Theorem sub_zero_r: forall x, sub zero x = neg x.
+Proof.
+ intros; unfold sub, neg. change (unsigned zero) with 0.
+ replace (0 - unsigned x) with (- unsigned x). auto.
+ omega.
+Qed.
+
+Theorem sub_add_opp: forall x y, sub x y = add x (neg y).
+Proof.
+ intros; unfold sub, add, neg.
+ replace (unsigned x - unsigned y)
+ with (unsigned x + (- unsigned y)).
+ apply eqm_samerepr. auto with ints. omega.
+Qed.
+
+Theorem sub_idem: forall x, sub x x = zero.
+Proof.
+ intros; unfold sub. replace (unsigned x - unsigned x) with 0.
+ reflexivity. omega.
+Qed.
+
+Theorem sub_add_l: forall x y z, sub (add x y) z = add (sub x z) y.
+Proof.
+ intros. repeat rewrite sub_add_opp.
+ repeat rewrite add_assoc. decEq. apply add_commut.
+Qed.
+
+Theorem sub_add_r: forall x y z, sub x (add y z) = add (sub x z) (neg y).
+Proof.
+ intros. repeat rewrite sub_add_opp.
+ rewrite neg_add_distr. rewrite add_permut. apply add_commut.
+Qed.
+
+Theorem sub_shifted:
+ forall x y z,
+ sub (add x z) (add y z) = sub x y.
+Proof.
+ intros. rewrite sub_add_opp. rewrite neg_add_distr.
+ rewrite add_assoc.
+ rewrite (add_commut (neg y) (neg z)).
+ rewrite <- (add_assoc z). rewrite add_neg_zero.
+ rewrite (add_commut zero). rewrite add_zero.
+ symmetry. apply sub_add_opp.
+Qed.
+
+(** ** Properties of multiplication *)
+
+Theorem mul_commut: forall x y, mul x y = mul y x.
+Proof.
+ intros; unfold mul. decEq. ring.
+Qed.
+
+Theorem mul_zero: forall x, mul x zero = zero.
+Proof.
+ intros; unfold mul. change (unsigned zero) with 0.
+ unfold zero. decEq. ring.
+Qed.
+
+Theorem mul_one: forall x, mul x one = x.
+Proof.
+ intros; unfold mul. change (unsigned one) with 1.
+ transitivity (repr (unsigned x)). decEq. ring.
+ apply repr_unsigned.
+Qed.
+
+Theorem mul_assoc: forall x y z, mul (mul x y) z = mul x (mul y z).
+Proof.
+ intros; unfold mul.
+ set (x' := unsigned x).
+ set (y' := unsigned y).
+ set (z' := unsigned z).
+ apply eqm_samerepr. apply eqm_trans with ((x' * y') * z').
+ auto with ints.
+ rewrite <- Zmult_assoc. auto with ints.
+Qed.
+
+Theorem mul_add_distr_l:
+ forall x y z, mul (add x y) z = add (mul x z) (mul y z).
+Proof.
+ intros; unfold mul, add.
+ apply eqm_samerepr.
+ set (x' := unsigned x).
+ set (y' := unsigned y).
+ set (z' := unsigned z).
+ apply eqm_trans with ((x' + y') * z').
+ auto with ints.
+ replace ((x' + y') * z') with (x' * z' + y' * z').
+ auto with ints.
+ ring.
+Qed.
+
+Theorem mul_add_distr_r:
+ forall x y z, mul x (add y z) = add (mul x y) (mul x z).
+Proof.
+ intros. rewrite mul_commut. rewrite mul_add_distr_l.
+ decEq; apply mul_commut.
+Qed.
+
+Axiom neg_mul_distr_l: forall x y, neg(mul x y) = mul (neg x) y.
+Axiom neg_mul_distr_r: forall x y, neg(mul x y) = mul x (neg y).
+
+(** ** Properties of binary decompositions *)
+
+Lemma Z_shift_add_bin_decomp:
+ forall x,
+ Z_shift_add (fst (Z_bin_decomp x)) (snd (Z_bin_decomp x)) = x.
+Proof.
+ destruct x; simpl.
+ auto.
+ destruct p; reflexivity.
+ destruct p; try reflexivity. simpl.
+ assert (forall z, 2 * (z + 1) - 1 = 2 * z + 1). intro; omega.
+ generalize (H (Zpos p)); simpl. congruence.
+Qed.
+
+Lemma Z_shift_add_inj:
+ forall b1 x1 b2 x2,
+ Z_shift_add b1 x1 = Z_shift_add b2 x2 -> b1 = b2 /\ x1 = x2.
+Proof.
+ intros until x2.
+ unfold Z_shift_add.
+ destruct b1; destruct b2; intros;
+ ((split; [reflexivity|omega]) || omegaContradiction).
+Qed.
+
+Lemma Z_of_bits_exten:
+ forall n f1 f2,
+ (forall z, 0 <= z < Z_of_nat n -> f1 z = f2 z) ->
+ Z_of_bits n f1 = Z_of_bits n f2.
+Proof.
+ induction n; intros.
+ reflexivity.
+ simpl. rewrite inj_S in H. decEq. apply H. omega.
+ apply IHn. intros; apply H. omega.
+Qed.
+
+Opaque Zmult.
+
+Lemma Z_of_bits_of_Z:
+ forall x, eqm (Z_of_bits wordsize (bits_of_Z wordsize x)) x.
+Proof.
+ assert (forall n x, exists k,
+ Z_of_bits n (bits_of_Z n x) = k * two_power_nat n + x).
+ induction n; intros.
+ rewrite two_power_nat_O. simpl. exists (-x). omega.
+ rewrite two_power_nat_S. simpl.
+ caseEq (Z_bin_decomp x). intros b y ZBD. simpl.
+ replace (Z_of_bits n (fun i => if zeq (i + 1) 0 then b else bits_of_Z n y (i + 1 - 1)))
+ with (Z_of_bits n (bits_of_Z n y)).
+ elim (IHn y). intros k1 EQ1. rewrite EQ1.
+ rewrite <- (Z_shift_add_bin_decomp x).
+ rewrite ZBD. simpl.
+ exists k1.
+ case b; unfold Z_shift_add; ring.
+ apply Z_of_bits_exten. intros.
+ rewrite zeq_false. decEq. omega. omega.
+ intro. exact (H wordsize x).
+Qed.
+
+Lemma bits_of_Z_zero:
+ forall n x, bits_of_Z n 0 x = false.
+Proof.
+ induction n; simpl; intros.
+ auto.
+ case (zeq x 0); intro. auto. auto.
+Qed.
+
+Remark Z_bin_decomp_2xm1:
+ forall x, Z_bin_decomp (2 * x - 1) = (true, x - 1).
+Proof.
+ intros. caseEq (Z_bin_decomp (2 * x - 1)). intros b y EQ.
+ generalize (Z_shift_add_bin_decomp (2 * x - 1)).
+ rewrite EQ; simpl.
+ replace (2 * x - 1) with (Z_shift_add true (x - 1)).
+ intro. elim (Z_shift_add_inj _ _ _ _ H); intros.
+ congruence. unfold Z_shift_add. omega.
+Qed.
+
+Lemma bits_of_Z_mone:
+ forall n x,
+ 0 <= x < Z_of_nat n ->
+ bits_of_Z n (two_power_nat n - 1) x = true.
+Proof.
+ induction n; intros.
+ simpl in H. omegaContradiction.
+ unfold bits_of_Z; fold bits_of_Z.
+ rewrite two_power_nat_S. rewrite Z_bin_decomp_2xm1.
+ rewrite inj_S in H. case (zeq x 0); intro. auto.
+ apply IHn. omega.
+Qed.
+
+Lemma Z_bin_decomp_shift_add:
+ forall b x, Z_bin_decomp (Z_shift_add b x) = (b, x).
+Proof.
+ intros. caseEq (Z_bin_decomp (Z_shift_add b x)); intros b' x' EQ.
+ generalize (Z_shift_add_bin_decomp (Z_shift_add b x)).
+ rewrite EQ; simpl fst; simpl snd. intro.
+ elim (Z_shift_add_inj _ _ _ _ H); intros.
+ congruence.
+Qed.
+
+Lemma bits_of_Z_of_bits:
+ forall n f i,
+ 0 <= i < Z_of_nat n ->
+ bits_of_Z n (Z_of_bits n f) i = f i.
+Proof.
+ induction n; intros; simpl.
+ simpl in H. omegaContradiction.
+ rewrite Z_bin_decomp_shift_add.
+ case (zeq i 0); intro.
+ congruence.
+ rewrite IHn. decEq. omega. rewrite inj_S in H. omega.
+Qed.
+
+Lemma Z_of_bits_range:
+ forall f, 0 <= Z_of_bits wordsize f < modulus.
+Proof.
+ unfold max_unsigned, modulus.
+ generalize wordsize. induction n; simpl; intros.
+ rewrite two_power_nat_O. omega.
+ rewrite two_power_nat_S. generalize (IHn (fun i => f (i + 1))).
+ set (x := Z_of_bits n (fun i => f (i + 1))).
+ intro. destruct (f 0); unfold Z_shift_add; omega.
+Qed.
+Hint Resolve Z_of_bits_range: ints.
+
+Lemma Z_of_bits_range_2:
+ forall f, 0 <= Z_of_bits wordsize f <= max_unsigned.
+Proof.
+ intros. unfold max_unsigned.
+ generalize (Z_of_bits_range f). omega.
+Qed.
+Hint Resolve Z_of_bits_range_2: ints.
+
+Lemma bits_of_Z_below:
+ forall n x i, i < 0 -> bits_of_Z n x i = false.
+Proof.
+ induction n; simpl; intros.
+ reflexivity.
+ destruct (Z_bin_decomp x). rewrite zeq_false. apply IHn.
+ omega. omega.
+Qed.
+
+Lemma bits_of_Z_above:
+ forall n x i, i >= Z_of_nat n -> bits_of_Z n x i = false.
+Proof.
+ induction n; intros; simpl.
+ reflexivity.
+ destruct (Z_bin_decomp x). rewrite zeq_false. apply IHn.
+ rewrite inj_S in H. omega. rewrite inj_S in H. omega.
+Qed.
+
+Opaque Zmult.
+
+Lemma Z_of_bits_excl:
+ forall n f g h,
+ (forall i, 0 <= i < Z_of_nat n -> f i && g i = false) ->
+ (forall i, 0 <= i < Z_of_nat n -> f i || g i = h i) ->
+ Z_of_bits n f + Z_of_bits n g = Z_of_bits n h.
+Proof.
+ induction n.
+ intros; reflexivity.
+ intros. simpl. rewrite inj_S in H. rewrite inj_S in H0.
+ rewrite <- (IHn (fun i => f(i+1)) (fun i => g(i+1)) (fun i => h(i+1))).
+ assert (0 <= 0 < Zsucc(Z_of_nat n)). omega.
+ unfold Z_shift_add.
+ rewrite <- H0; auto.
+ set (F := Z_of_bits n (fun i => f(i + 1))).
+ set (G := Z_of_bits n (fun i => g(i + 1))).
+ caseEq (f 0); intros; caseEq (g 0); intros; simpl.
+ generalize (H 0 H1). rewrite H2; rewrite H3. simpl. intros; discriminate.
+ omega. omega. omega.
+ intros; apply H. omega.
+ intros; apply H0. omega.
+Qed.
+
+(** ** Properties of bitwise and, or, xor *)
+
+Lemma bitwise_binop_commut:
+ forall f,
+ (forall a b, f a b = f b a) ->
+ forall x y,
+ bitwise_binop f x y = bitwise_binop f y x.
+Proof.
+ unfold bitwise_binop; intros.
+ decEq. apply Z_of_bits_exten; intros. auto.
+Qed.
+
+Lemma bitwise_binop_assoc:
+ forall f,
+ (forall a b c, f a (f b c) = f (f a b) c) ->
+ forall x y z,
+ bitwise_binop f (bitwise_binop f x y) z =
+ bitwise_binop f x (bitwise_binop f y z).
+Proof.
+ unfold bitwise_binop; intros.
+ repeat rewrite unsigned_repr; auto with ints.
+ decEq. apply Z_of_bits_exten; intros.
+ repeat (rewrite bits_of_Z_of_bits; auto).
+Qed.
+
+Lemma bitwise_binop_idem:
+ forall f,
+ (forall a, f a a = a) ->
+ forall x,
+ bitwise_binop f x x = x.
+Proof.
+ unfold bitwise_binop; intros.
+ transitivity (repr (Z_of_bits wordsize (bits_of_Z wordsize (unsigned x)))).
+ decEq. apply Z_of_bits_exten; intros. auto.
+ transitivity (repr (unsigned x)).
+ apply eqm_samerepr. apply Z_of_bits_of_Z. apply repr_unsigned.
+Qed.
+
+Theorem and_commut: forall x y, and x y = and y x.
+Proof (bitwise_binop_commut andb andb_comm).
+
+Theorem and_assoc: forall x y z, and (and x y) z = and x (and y z).
+Proof (bitwise_binop_assoc andb andb_assoc).
+
+Theorem and_zero: forall x, and x zero = zero.
+Proof.
+ unfold and, bitwise_binop, zero; intros.
+ transitivity (repr (Z_of_bits wordsize (bits_of_Z wordsize 0))).
+ decEq. apply Z_of_bits_exten. intros.
+ change (unsigned (repr 0)) with 0.
+ rewrite bits_of_Z_zero. apply andb_b_false.
+ auto with ints.
+Qed.
+
+Lemma mone_max_unsigned:
+ mone = repr max_unsigned.
+Proof.
+ unfold mone. apply eqm_samerepr. exists (-1).
+ unfold max_unsigned. omega.
+Qed.
+
+Theorem and_mone: forall x, and x mone = x.
+Proof.
+ unfold and, bitwise_binop; intros.
+ rewrite mone_max_unsigned. unfold max_unsigned, modulus.
+ transitivity (repr (Z_of_bits wordsize (bits_of_Z wordsize (unsigned x)))).
+ decEq. apply Z_of_bits_exten. intros.
+ rewrite unsigned_repr. rewrite bits_of_Z_mone.
+ apply andb_b_true. omega. compute. intuition congruence.
+ transitivity (repr (unsigned x)).
+ apply eqm_samerepr. apply Z_of_bits_of_Z.
+ apply repr_unsigned.
+Qed.
+
+Theorem and_idem: forall x, and x x = x.
+Proof.
+ assert (forall b, b && b = b).
+ destruct b; reflexivity.
+ exact (bitwise_binop_idem andb H).
+Qed.
+
+Theorem or_commut: forall x y, or x y = or y x.
+Proof (bitwise_binop_commut orb orb_comm).
+
+Theorem or_assoc: forall x y z, or (or x y) z = or x (or y z).
+Proof (bitwise_binop_assoc orb orb_assoc).
+
+Theorem or_zero: forall x, or x zero = x.
+Proof.
+ unfold or, bitwise_binop, zero; intros.
+ transitivity (repr (Z_of_bits wordsize (bits_of_Z wordsize (unsigned x)))).
+ decEq. apply Z_of_bits_exten. intros.
+ change (unsigned (repr 0)) with 0.
+ rewrite bits_of_Z_zero. apply orb_b_false.
+ transitivity (repr (unsigned x)); auto with ints.
+ apply eqm_samerepr. apply Z_of_bits_of_Z.
+Qed.
+
+Theorem or_mone: forall x, or x mone = mone.
+Proof.
+ rewrite mone_max_unsigned.
+ unfold or, bitwise_binop; intros.
+ decEq.
+ transitivity (Z_of_bits wordsize (bits_of_Z wordsize max_unsigned)).
+ apply Z_of_bits_exten. intros.
+ change (unsigned (repr max_unsigned)) with max_unsigned.
+ unfold max_unsigned, modulus. rewrite bits_of_Z_mone; auto.
+ apply orb_b_true.
+ apply eqm_small_eq; auto with ints. compute; intuition congruence.
+Qed.
+
+Theorem or_idem: forall x, or x x = x.
+Proof.
+ assert (forall b, b || b = b).
+ destruct b; reflexivity.
+ exact (bitwise_binop_idem orb H).
+Qed.
+
+Theorem and_or_distrib:
+ forall x y z,
+ and x (or y z) = or (and x y) (and x z).
+Proof.
+ intros; unfold and, or, bitwise_binop.
+ decEq. repeat rewrite unsigned_repr; auto with ints.
+ apply Z_of_bits_exten; intros.
+ repeat rewrite bits_of_Z_of_bits; auto.
+ apply demorgan1.
+Qed.
+
+Theorem xor_commut: forall x y, xor x y = xor y x.
+Proof (bitwise_binop_commut xorb xorb_comm).
+
+Theorem xor_assoc: forall x y z, xor (xor x y) z = xor x (xor y z).
+Proof.
+ assert (forall a b c, xorb a (xorb b c) = xorb (xorb a b) c).
+ symmetry. apply xorb_assoc.
+ exact (bitwise_binop_assoc xorb H).
+Qed.
+
+Theorem xor_zero: forall x, xor x zero = x.
+Proof.
+ unfold xor, bitwise_binop, zero; intros.
+ transitivity (repr (Z_of_bits wordsize (bits_of_Z wordsize (unsigned x)))).
+ decEq. apply Z_of_bits_exten. intros.
+ change (unsigned (repr 0)) with 0.
+ rewrite bits_of_Z_zero. apply xorb_false.
+ transitivity (repr (unsigned x)); auto with ints.
+ apply eqm_samerepr. apply Z_of_bits_of_Z.
+Qed.
+
+Theorem xor_zero_one: xor zero one = one.
+Proof. reflexivity. Qed.
+
+Theorem xor_one_one: xor one one = zero.
+Proof. reflexivity. Qed.
+
+Theorem and_xor_distrib:
+ forall x y z,
+ and x (xor y z) = xor (and x y) (and x z).
+Proof.
+ intros; unfold and, xor, bitwise_binop.
+ decEq. repeat rewrite unsigned_repr; auto with ints.
+ apply Z_of_bits_exten; intros.
+ repeat rewrite bits_of_Z_of_bits; auto.
+ assert (forall a b c, a && (xorb b c) = xorb (a && b) (a && c)).
+ destruct a; destruct b; destruct c; reflexivity.
+ auto.
+Qed.
+
+(** ** Properties of shifts and rotates *)
+
+Lemma Z_of_bits_shift:
+ forall n f,
+ exists k,
+ Z_of_bits n (fun i => f (i - 1)) =
+ k * two_power_nat n + Z_shift_add (f (-1)) (Z_of_bits n f).
+Proof.
+ induction n; intros.
+ simpl. rewrite two_power_nat_O. unfold Z_shift_add.
+ exists (if f (-1) then (-1) else 0).
+ destruct (f (-1)); omega.
+ rewrite two_power_nat_S. simpl.
+ elim (IHn (fun i => f (i + 1))). intros k' EQ.
+ replace (Z_of_bits n (fun i => f (i - 1 + 1)))
+ with (Z_of_bits n (fun i => f (i + 1 - 1))) in EQ.
+ rewrite EQ.
+ change (-1 + 1) with 0.
+ exists k'.
+ unfold Z_shift_add; destruct (f (-1)); destruct (f 0); ring.
+ apply Z_of_bits_exten; intros.
+ decEq. omega.
+Qed.
+
+Lemma Z_of_bits_shifts:
+ forall m f,
+ 0 <= m ->
+ (forall i, i < 0 -> f i = false) ->
+ eqm (Z_of_bits wordsize (fun i => f (i - m)))
+ (two_p m * Z_of_bits wordsize f).
+Proof.
+ intros. pattern m. apply natlike_ind.
+ apply eqm_refl2. transitivity (Z_of_bits wordsize f).
+ apply Z_of_bits_exten; intros. decEq. omega.
+ simpl two_p. omega.
+ intros. rewrite two_p_S; auto.
+ set (f' := fun i => f (i - x)).
+ apply eqm_trans with (Z_of_bits wordsize (fun i => f' (i - 1))).
+ apply eqm_refl2. apply Z_of_bits_exten; intros.
+ unfold f'. decEq. omega.
+ apply eqm_trans with (Z_shift_add (f' (-1)) (Z_of_bits wordsize f')).
+ exact (Z_of_bits_shift wordsize f').
+ unfold f'. unfold Z_shift_add. rewrite H0.
+ rewrite <- Zmult_assoc. apply eqm_mult. apply eqm_refl.
+ apply H2. omega. assumption.
+Qed.
+
+Lemma shl_mul_two_p:
+ forall x y,
+ shl x y = mul x (repr (two_p (unsigned y))).
+Proof.
+ intros. unfold shl, mul.
+ apply eqm_samerepr.
+ eapply eqm_trans.
+ apply Z_of_bits_shifts.
+ generalize (unsigned_range y). omega.
+ intros; apply bits_of_Z_below; auto.
+ rewrite Zmult_comm. apply eqm_mult.
+ apply Z_of_bits_of_Z. apply eqm_unsigned_repr.
+Qed.
+
+Theorem shl_zero: forall x, shl x zero = x.
+Proof.
+ intros. rewrite shl_mul_two_p.
+ change (repr (two_p (unsigned zero))) with one.
+ apply mul_one.
+Qed.
+
+Theorem shl_mul:
+ forall x y,
+ shl x y = mul x (shl one y).
+Proof.
+ intros.
+ assert (shl one y = repr (two_p (unsigned y))).
+ rewrite shl_mul_two_p. rewrite mul_commut. rewrite mul_one. auto.
+ rewrite H. apply shl_mul_two_p.
+Qed.
+
+Theorem shl_rolm:
+ forall x n,
+ ltu n (repr (Z_of_nat wordsize)) = true ->
+ shl x n = rolm x n (shl mone n).
+Proof.
+ intros x n. unfold ltu.
+ rewrite unsigned_repr. case (zlt (unsigned n) (Z_of_nat wordsize)); intros LT XX.
+ unfold shl, rolm, rol, and, bitwise_binop.
+ decEq. apply Z_of_bits_exten; intros.
+ repeat rewrite unsigned_repr; auto with ints.
+ repeat rewrite bits_of_Z_of_bits; auto.
+ case (zlt z (unsigned n)); intro LT2.
+ assert (z - unsigned n < 0). omega.
+ rewrite (bits_of_Z_below wordsize (unsigned x) _ H0).
+ rewrite (bits_of_Z_below wordsize (unsigned mone) _ H0).
+ symmetry. apply andb_b_false.
+ assert (z - unsigned n < Z_of_nat wordsize).
+ generalize (unsigned_range n). omega.
+ replace (unsigned mone) with (two_power_nat wordsize - 1).
+ rewrite bits_of_Z_mone. rewrite andb_b_true. decEq.
+ rewrite Zmod_small. auto. omega. omega.
+ rewrite mone_max_unsigned. reflexivity.
+ discriminate.
+ compute; intuition congruence.
+Qed.
+
+Lemma bitwise_binop_shl:
+ forall f x y n,
+ f false false = false ->
+ bitwise_binop f (shl x n) (shl y n) = shl (bitwise_binop f x y) n.
+Proof.
+ intros. unfold bitwise_binop, shl.
+ decEq. repeat rewrite unsigned_repr; auto with ints.
+ apply Z_of_bits_exten; intros.
+ case (zlt (z - unsigned n) 0); intro.
+ transitivity false. repeat rewrite bits_of_Z_of_bits; auto.
+ repeat rewrite bits_of_Z_below; auto.
+ rewrite bits_of_Z_below; auto.
+ repeat rewrite bits_of_Z_of_bits; auto.
+ generalize (unsigned_range n). omega.
+Qed.
+
+Lemma and_shl:
+ forall x y n,
+ and (shl x n) (shl y n) = shl (and x y) n.
+Proof.
+ unfold and; intros. apply bitwise_binop_shl. reflexivity.
+Qed.
+
+Theorem shru_rolm:
+ forall x n,
+ ltu n (repr (Z_of_nat wordsize)) = true ->
+ shru x n = rolm x (sub (repr (Z_of_nat wordsize)) n) (shru mone n).
+Proof.
+ intros x n. unfold ltu.
+ rewrite unsigned_repr.
+ case (zlt (unsigned n) (Z_of_nat wordsize)); intros LT XX.
+ unfold shru, rolm, rol, and, bitwise_binop.
+ decEq. apply Z_of_bits_exten; intros.
+ repeat rewrite unsigned_repr; auto with ints.
+ repeat rewrite bits_of_Z_of_bits; auto.
+ unfold sub.
+ change (unsigned (repr (Z_of_nat wordsize)))
+ with (Z_of_nat wordsize).
+ rewrite unsigned_repr.
+ case (zlt (z + unsigned n) (Z_of_nat wordsize)); intro LT2.
+ replace (unsigned mone) with (two_power_nat wordsize - 1).
+ rewrite bits_of_Z_mone. rewrite andb_b_true.
+ decEq.
+ replace (z - (Z_of_nat wordsize - unsigned n))
+ with ((z + unsigned n) + (-1) * Z_of_nat wordsize).
+ rewrite Z_mod_plus. symmetry. apply Zmod_small.
+ generalize (unsigned_range n). omega. omega. omega.
+ generalize (unsigned_range n). omega.
+ reflexivity.
+ rewrite (bits_of_Z_above wordsize (unsigned x) _ LT2).
+ rewrite (bits_of_Z_above wordsize (unsigned mone) _ LT2).
+ symmetry. apply andb_b_false.
+ split. omega. apply Zle_trans with (Z_of_nat wordsize).
+ generalize (unsigned_range n); omega. compute; intuition congruence.
+ discriminate.
+ split. omega. compute; intuition congruence.
+Qed.
+
+Lemma bitwise_binop_shru:
+ forall f x y n,
+ f false false = false ->
+ bitwise_binop f (shru x n) (shru y n) = shru (bitwise_binop f x y) n.
+Proof.
+ intros. unfold bitwise_binop, shru.
+ decEq. repeat rewrite unsigned_repr; auto with ints.
+ apply Z_of_bits_exten; intros.
+ case (zlt (z + unsigned n) (Z_of_nat wordsize)); intro.
+ repeat rewrite bits_of_Z_of_bits; auto.
+ generalize (unsigned_range n); omega.
+ transitivity false. repeat rewrite bits_of_Z_of_bits; auto.
+ repeat rewrite bits_of_Z_above; auto.
+ rewrite bits_of_Z_above; auto.
+Qed.
+
+Lemma and_shru:
+ forall x y n,
+ and (shru x n) (shru y n) = shru (and x y) n.
+Proof.
+ unfold and; intros. apply bitwise_binop_shru. reflexivity.
+Qed.
+
+Theorem rol_zero:
+ forall x,
+ rol x zero = x.
+Proof.
+ intros. unfold rol. transitivity (repr (Z_of_bits wordsize (bits_of_Z wordsize (unsigned x)))).
+ decEq.
+ transitivity (repr (unsigned x)).
+ decEq. apply eqm_small_eq. apply Z_of_bits_of_Z.
+ auto with ints. auto with ints. auto with ints.
+Qed.
+
+Lemma bitwise_binop_rol:
+ forall f x y n,
+ bitwise_binop f (rol x n) (rol y n) = rol (bitwise_binop f x y) n.
+Proof.
+ intros. unfold bitwise_binop, rol.
+ decEq. repeat (rewrite unsigned_repr; auto with ints).
+ apply Z_of_bits_exten; intros.
+ repeat rewrite bits_of_Z_of_bits; auto.
+ apply Z_mod_lt. compute. auto.
+Qed.
+
+Theorem rol_and:
+ forall x y n,
+ rol (and x y) n = and (rol x n) (rol y n).
+Proof.
+ intros. symmetry. unfold and. apply bitwise_binop_rol.
+Qed.
+
+Theorem rol_rol:
+ forall x n m,
+ rol (rol x n) m = rol x (modu (add n m) (repr (Z_of_nat wordsize))).
+Proof.
+ intros. unfold rol. decEq.
+ repeat (rewrite unsigned_repr; auto with ints).
+ apply Z_of_bits_exten; intros.
+ repeat rewrite bits_of_Z_of_bits; auto.
+ decEq. unfold modu, add.
+ set (W := Z_of_nat wordsize).
+ set (M := unsigned m); set (N := unsigned n).
+ assert (W > 0). compute; auto.
+ assert (forall a, eqmod W a (unsigned (repr a))).
+ intro. elim (eqm_unsigned_repr a). intros k EQ.
+ red. exists (k * (modulus / W)).
+ replace (k * (modulus / W) * W) with (k * modulus). auto.
+ rewrite <- Zmult_assoc. reflexivity.
+ apply eqmod_mod_eq. auto.
+ change (unsigned (repr W)) with W.
+ apply eqmod_trans with (z - (N + M) mod W).
+ apply eqmod_trans with ((z - M) - N).
+ apply eqmod_sub. apply eqmod_sym. apply eqmod_mod. auto.
+ apply eqmod_refl.
+ replace (z - M - N) with (z - (N + M)).
+ apply eqmod_sub. apply eqmod_refl. apply eqmod_mod. auto.
+ omega.
+ apply eqmod_sub. apply eqmod_refl.
+ eapply eqmod_trans; [idtac|apply H1].
+ eapply eqmod_trans; [idtac|apply eqmod_mod].
+ apply eqmod_sym. eapply eqmod_trans; [idtac|apply eqmod_mod].
+ apply eqmod_sym. apply H1. auto. auto.
+ apply Z_mod_lt. compute; auto.
+Qed.
+
+Theorem rolm_zero:
+ forall x m,
+ rolm x zero m = and x m.
+Proof.
+ intros. unfold rolm. rewrite rol_zero. auto.
+Qed.
+
+Theorem rolm_rolm:
+ forall x n1 m1 n2 m2,
+ rolm (rolm x n1 m1) n2 m2 =
+ rolm x (modu (add n1 n2) (repr (Z_of_nat wordsize)))
+ (and (rol m1 n2) m2).
+Proof.
+ intros.
+ unfold rolm. rewrite rol_and. rewrite and_assoc.
+ rewrite rol_rol. reflexivity.
+Qed.
+
+Theorem rol_or:
+ forall x y n,
+ rol (or x y) n = or (rol x n) (rol y n).
+Proof.
+ intros. symmetry. unfold or. apply bitwise_binop_rol.
+Qed.
+
+Theorem or_rolm:
+ forall x n m1 m2,
+ or (rolm x n m1) (rolm x n m2) = rolm x n (or m1 m2).
+Proof.
+ intros; unfold rolm. symmetry. apply and_or_distrib.
+Qed.
+
+(** ** Relation between shifts and powers of 2 *)
+
+Fixpoint powerserie (l: list Z): Z :=
+ match l with
+ | nil => 0
+ | x :: xs => two_p x + powerserie xs
+ end.
+
+Lemma Z_bin_decomp_range:
+ forall x n,
+ 0 <= x < 2 * n -> 0 <= snd (Z_bin_decomp x) < n.
+Proof.
+ intros. rewrite <- (Z_shift_add_bin_decomp x) in H.
+ unfold Z_shift_add in H. destruct (fst (Z_bin_decomp x)); omega.
+Qed.
+
+Lemma Z_one_bits_powerserie:
+ forall x, 0 <= x < modulus -> x = powerserie (Z_one_bits wordsize x 0).
+Proof.
+ assert (forall n x i,
+ 0 <= i ->
+ 0 <= x < two_power_nat n ->
+ x * two_p i = powerserie (Z_one_bits n x i)).
+ induction n; intros.
+ simpl. rewrite two_power_nat_O in H0.
+ assert (x = 0). omega. subst x. omega.
+ rewrite two_power_nat_S in H0. simpl Z_one_bits.
+ generalize (Z_shift_add_bin_decomp x).
+ generalize (Z_bin_decomp_range x _ H0).
+ case (Z_bin_decomp x). simpl. intros b y RANGE SHADD.
+ subst x. unfold Z_shift_add.
+ destruct b. simpl powerserie. rewrite <- IHn.
+ rewrite two_p_is_exp. change (two_p 1) with 2. ring.
+ auto. omega. omega. auto.
+ rewrite <- IHn.
+ rewrite two_p_is_exp. change (two_p 1) with 2. ring.
+ auto. omega. omega. auto.
+ intros. rewrite <- H. change (two_p 0) with 1. omega.
+ omega. exact H0.
+Qed.
+
+Lemma Z_one_bits_range:
+ forall x i, In i (Z_one_bits wordsize x 0) -> 0 <= i < Z_of_nat wordsize.
+Proof.
+ assert (forall n x i j,
+ In j (Z_one_bits n x i) -> i <= j < i + Z_of_nat n).
+ induction n; simpl In.
+ intros; elim H.
+ intros x i j. destruct (Z_bin_decomp x). case b.
+ rewrite inj_S. simpl. intros [A|B]. subst j. omega.
+ generalize (IHn _ _ _ B). omega.
+ intros B. rewrite inj_S. generalize (IHn _ _ _ B). omega.
+ intros. generalize (H wordsize x 0 i H0). omega.
+Qed.
+
+Lemma is_power2_rng:
+ forall n logn,
+ is_power2 n = Some logn ->
+ 0 <= unsigned logn < Z_of_nat wordsize.
+Proof.
+ intros n logn. unfold is_power2.
+ generalize (Z_one_bits_range (unsigned n)).
+ destruct (Z_one_bits wordsize (unsigned n) 0).
+ intros; discriminate.
+ destruct l.
+ intros. injection H0; intro; subst logn; clear H0.
+ assert (0 <= z < Z_of_nat wordsize).
+ apply H. auto with coqlib.
+ rewrite unsigned_repr. auto.
+ assert (Z_of_nat wordsize < max_unsigned). compute. auto.
+ omega.
+ intros; discriminate.
+Qed.
+
+Theorem is_power2_range:
+ forall n logn,
+ is_power2 n = Some logn -> ltu logn (repr (Z_of_nat wordsize)) = true.
+Proof.
+ intros. unfold ltu.
+ change (unsigned (repr (Z_of_nat wordsize))) with (Z_of_nat wordsize).
+ generalize (is_power2_rng _ _ H).
+ case (zlt (unsigned logn) (Z_of_nat wordsize)); intros.
+ auto. omegaContradiction.
+Qed.
+
+Lemma is_power2_correct:
+ forall n logn,
+ is_power2 n = Some logn ->
+ unsigned n = two_p (unsigned logn).
+Proof.
+ intros n logn. unfold is_power2.
+ generalize (Z_one_bits_powerserie (unsigned n) (unsigned_range n)).
+ generalize (Z_one_bits_range (unsigned n)).
+ destruct (Z_one_bits wordsize (unsigned n) 0).
+ intros; discriminate.
+ destruct l.
+ intros. simpl in H0. injection H1; intros; subst logn; clear H1.
+ rewrite unsigned_repr. replace (two_p z) with (two_p z + 0).
+ auto. omega. elim (H z); intros.
+ assert (Z_of_nat wordsize < max_unsigned). compute; auto.
+ omega. auto with coqlib.
+ intros; discriminate.
+Qed.
+
+Theorem mul_pow2:
+ forall x n logn,
+ is_power2 n = Some logn ->
+ mul x n = shl x logn.
+Proof.
+ intros. generalize (is_power2_correct n logn H); intro.
+ rewrite shl_mul_two_p. rewrite <- H0. rewrite repr_unsigned.
+ auto.
+Qed.
+
+Lemma Z_of_bits_shift_rev:
+ forall n f,
+ (forall i, i >= Z_of_nat n -> f i = false) ->
+ Z_of_bits n f = Z_shift_add (f 0) (Z_of_bits n (fun i => f(i + 1))).
+Proof.
+ induction n; intros.
+ simpl. rewrite H. reflexivity. unfold Z_of_nat. omega.
+ simpl. rewrite (IHn (fun i => f (i + 1))).
+ reflexivity.
+ intros. apply H. rewrite inj_S. omega.
+Qed.
+
+Lemma Z_of_bits_shifts_rev:
+ forall m f,
+ 0 <= m ->
+ (forall i, i >= Z_of_nat wordsize -> f i = false) ->
+ exists k,
+ Z_of_bits wordsize f = k + two_p m * Z_of_bits wordsize (fun i => f(i + m))
+ /\ 0 <= k < two_p m.
+Proof.
+ intros. pattern m. apply natlike_ind.
+ exists 0. change (two_p 0) with 1. split.
+ transitivity (Z_of_bits wordsize (fun i => f (i + 0))).
+ apply Z_of_bits_exten. intros. decEq. omega.
+ omega. omega.
+ intros x POSx [k [EQ1 RANGE1]].
+ set (f' := fun i => f (i + x)) in *.
+ assert (forall i, i >= Z_of_nat wordsize -> f' i = false).
+ intros. unfold f'. apply H0. omega.
+ generalize (Z_of_bits_shift_rev wordsize f' H1). intro.
+ rewrite EQ1. rewrite H2.
+ set (z := Z_of_bits wordsize (fun i => f (i + Zsucc x))).
+ replace (Z_of_bits wordsize (fun i => f' (i + 1))) with z.
+ rewrite two_p_S.
+ case (f' 0); unfold Z_shift_add.
+ exists (k + two_p x). split. ring. omega.
+ exists k. split. ring. omega.
+ auto.
+ unfold z. apply Z_of_bits_exten; intros. unfold f'.
+ decEq. omega.
+ auto.
+Qed.
+
+Lemma shru_div_two_p:
+ forall x y,
+ shru x y = repr (unsigned x / two_p (unsigned y)).
+Proof.
+ intros. unfold shru.
+ set (x' := unsigned x). set (y' := unsigned y).
+ elim (Z_of_bits_shifts_rev y' (bits_of_Z wordsize x')).
+ intros k [EQ RANGE].
+ replace (Z_of_bits wordsize (bits_of_Z wordsize x')) with x' in EQ.
+ rewrite Zplus_comm in EQ. rewrite Zmult_comm in EQ.
+ generalize (Zdiv_unique _ _ _ _ EQ RANGE). intros.
+ rewrite H. auto.
+ apply eqm_small_eq. apply eqm_sym. apply Z_of_bits_of_Z.
+ unfold x'. apply unsigned_range.
+ auto with ints.
+ generalize (unsigned_range y). unfold y'. omega.
+ intros. apply bits_of_Z_above. auto.
+Qed.
+
+Theorem shru_zero:
+ forall x, shru x zero = x.
+Proof.
+ intros. rewrite shru_div_two_p. change (two_p (unsigned zero)) with 1.
+ transitivity (repr (unsigned x)). decEq. apply Zdiv_unique with 0.
+ omega. omega. auto with ints.
+Qed.
+
+Theorem shr_zero:
+ forall x, shr x zero = x.
+Proof.
+ intros. unfold shr. change (two_p (unsigned zero)) with 1.
+ replace (signed x / 1) with (signed x).
+ apply repr_signed.
+ symmetry. apply Zdiv_unique with 0. omega. omega.
+Qed.
+
+Theorem divu_pow2:
+ forall x n logn,
+ is_power2 n = Some logn ->
+ divu x n = shru x logn.
+Proof.
+ intros. generalize (is_power2_correct n logn H). intro.
+ symmetry. unfold divu. rewrite H0. apply shru_div_two_p.
+Qed.
+
+Lemma modu_divu_Euclid:
+ forall x y, y <> zero -> x = add (mul (divu x y) y) (modu x y).
+Proof.
+ intros. unfold add, mul, divu, modu.
+ transitivity (repr (unsigned x)). auto with ints.
+ apply eqm_samerepr.
+ set (x' := unsigned x). set (y' := unsigned y).
+ apply eqm_trans with ((x' / y') * y' + x' mod y').
+ apply eqm_refl2. rewrite Zmult_comm. apply Z_div_mod_eq.
+ generalize (unsigned_range y); intro.
+ assert (unsigned y <> 0). red; intro.
+ elim H. rewrite <- (repr_unsigned y). unfold zero. congruence.
+ unfold y'. omega.
+ auto with ints.
+Qed.
+
+Theorem modu_divu:
+ forall x y, y <> zero -> modu x y = sub x (mul (divu x y) y).
+Proof.
+ intros.
+ assert (forall a b c, a = add b c -> c = sub a b).
+ intros. subst a. rewrite sub_add_l. rewrite sub_idem.
+ rewrite add_commut. rewrite add_zero. auto.
+ apply H0. apply modu_divu_Euclid. auto.
+Qed.
+
+Theorem mods_divs:
+ forall x y, mods x y = sub x (mul (divs x y) y).
+Proof.
+ intros; unfold mods, sub, mul, divs.
+ apply eqm_samerepr.
+ unfold Zmod_round.
+ apply eqm_sub. apply eqm_signed_unsigned.
+ apply eqm_unsigned_repr_r.
+ apply eqm_mult. auto with ints. apply eqm_signed_unsigned.
+Qed.
+
+Theorem divs_pow2:
+ forall x n logn,
+ is_power2 n = Some logn ->
+ divs x n = shrx x logn.
+Proof.
+ intros. generalize (is_power2_correct _ _ H); intro.
+ unfold shrx. rewrite shl_mul_two_p.
+ rewrite mul_commut. rewrite mul_one.
+ rewrite <- H0. rewrite repr_unsigned. auto.
+Qed.
+
+Theorem shrx_carry:
+ forall x y,
+ add (shr x y) (shr_carry x y) = shrx x y.
+Proof.
+ intros. unfold shr_carry.
+ rewrite sub_add_opp. rewrite add_permut.
+ rewrite add_neg_zero. apply add_zero.
+Qed.
+
+Lemma add_and:
+ forall x y z,
+ and y z = zero ->
+ or y z = mone ->
+ add (and x y) (and x z) = x.
+Proof.
+ intros. unfold add. transitivity (repr (unsigned x)); auto with ints.
+ decEq. unfold and, bitwise_binop.
+ repeat rewrite unsigned_repr; auto with ints.
+ transitivity (Z_of_bits wordsize (bits_of_Z wordsize (unsigned x))).
+ apply Z_of_bits_excl. intros.
+ assert (forall a b c, a && b && (a && c) = a && (b && c)).
+ destruct a; destruct b; destruct c; reflexivity.
+ rewrite H2.
+ replace (bits_of_Z wordsize (unsigned y) i &&
+ bits_of_Z wordsize (unsigned z) i)
+ with (bits_of_Z wordsize (unsigned (and y z)) i).
+ rewrite H. change (unsigned zero) with 0.
+ rewrite bits_of_Z_zero. apply andb_b_false.
+ unfold and, bitwise_binop.
+ rewrite unsigned_repr; auto with ints. rewrite bits_of_Z_of_bits.
+ reflexivity. auto.
+ intros. rewrite <- demorgan1.
+ replace (bits_of_Z wordsize (unsigned y) i ||
+ bits_of_Z wordsize (unsigned z) i)
+ with (bits_of_Z wordsize (unsigned (or y z)) i).
+ rewrite H0. change (unsigned mone) with (two_power_nat wordsize - 1).
+ rewrite bits_of_Z_mone; auto. apply andb_b_true.
+ unfold or, bitwise_binop.
+ rewrite unsigned_repr; auto with ints. rewrite bits_of_Z_of_bits; auto.
+ apply eqm_small_eq; auto with ints. apply Z_of_bits_of_Z.
+Qed.
+
+(** To prove equalities involving modulus and bitwise ``and'', we need to
+ show complicated integer equalities involving one integer variable
+ that ranges between 0 and 31. Rather than proving these equalities,
+ we ask Coq to check them by computing the 32 values of the
+ left and right-hand sides and checking that they are equal.
+ This is an instance of proving by reflection. *)
+
+Section REFLECTION.
+
+Variables (f g: int -> int).
+
+Fixpoint check_equal_on_range (n: nat) : bool :=
+ match n with
+ | O => true
+ | S n => if eq (f (repr (Z_of_nat n))) (g (repr (Z_of_nat n)))
+ then check_equal_on_range n
+ else false
+ end.
+
+Lemma check_equal_on_range_correct:
+ forall n,
+ check_equal_on_range n = true ->
+ forall z, 0 <= z < Z_of_nat n -> f (repr z) = g (repr z).
+Proof.
+ induction n.
+ simpl; intros; omegaContradiction.
+ simpl check_equal_on_range.
+ set (fn := f (repr (Z_of_nat n))).
+ set (gn := g (repr (Z_of_nat n))).
+ generalize (eq_spec fn gn).
+ case (eq fn gn); intros.
+ rewrite inj_S in H1.
+ assert (0 <= z < Z_of_nat n \/ z = Z_of_nat n). omega.
+ elim H2; intro.
+ apply IHn. auto. auto.
+ subst z; auto.
+ discriminate.
+Qed.
+
+Lemma equal_on_range:
+ check_equal_on_range wordsize = true ->
+ forall n, 0 <= unsigned n < Z_of_nat wordsize ->
+ f n = g n.
+Proof.
+ intros. replace n with (repr (unsigned n)).
+ apply check_equal_on_range_correct with wordsize; auto.
+ apply repr_unsigned.
+Qed.
+
+End REFLECTION.
+
+(** Here are the three equalities that we prove by reflection. *)
+
+Remark modu_and_masks_1:
+ forall logn, 0 <= unsigned logn < Z_of_nat wordsize ->
+ rol (shru mone logn) logn = shl mone logn.
+Proof (equal_on_range
+ (fun l => rol (shru mone l) l)
+ (fun l => shl mone l)
+ (refl_equal true)).
+Remark modu_and_masks_2:
+ forall logn, 0 <= unsigned logn < Z_of_nat wordsize ->
+ and (shl mone logn) (sub (repr (two_p (unsigned logn))) one) = zero.
+Proof (equal_on_range
+ (fun l => and (shl mone l)
+ (sub (repr (two_p (unsigned l))) one))
+ (fun l => zero)
+ (refl_equal true)).
+Remark modu_and_masks_3:
+ forall logn, 0 <= unsigned logn < Z_of_nat wordsize ->
+ or (shl mone logn) (sub (repr (two_p (unsigned logn))) one) = mone.
+Proof (equal_on_range
+ (fun l => or (shl mone l)
+ (sub (repr (two_p (unsigned l))) one))
+ (fun l => mone)
+ (refl_equal true)).
+
+Theorem modu_and:
+ forall x n logn,
+ is_power2 n = Some logn ->
+ modu x n = and x (sub n one).
+Proof.
+ intros. generalize (is_power2_correct _ _ H); intro.
+ generalize (is_power2_rng _ _ H); intro.
+ assert (n <> zero).
+ red; intro. subst n. change (unsigned zero) with 0 in H0.
+ assert (two_p (unsigned logn) > 0). apply two_p_gt_ZERO. omega.
+ omegaContradiction.
+ generalize (modu_divu_Euclid x n H2); intro.
+ assert (forall a b c, add a b = add a c -> b = c).
+ intros. assert (sub (add a b) a = sub (add a c) a). congruence.
+ repeat rewrite sub_add_l in H5. repeat rewrite sub_idem in H5.
+ rewrite add_commut in H5; rewrite add_zero in H5.
+ rewrite add_commut in H5; rewrite add_zero in H5.
+ auto.
+ apply H4 with (mul (divu x n) n).
+ rewrite <- H3.
+ rewrite (divu_pow2 x n logn H).
+ rewrite (mul_pow2 (shru x logn) n logn H).
+ rewrite shru_rolm. rewrite shl_rolm. rewrite rolm_rolm.
+ rewrite sub_add_opp. rewrite add_assoc.
+ replace (add (neg logn) logn) with zero.
+ rewrite add_zero.
+ change (modu (repr (Z_of_nat wordsize)) (repr (Z_of_nat wordsize)))
+ with zero.
+ rewrite rolm_zero.
+ symmetry.
+ replace n with (repr (two_p (unsigned logn))).
+ rewrite modu_and_masks_1; auto.
+ rewrite and_idem.
+ apply add_and. apply modu_and_masks_2; auto. apply modu_and_masks_3; auto.
+ transitivity (repr (unsigned n)). decEq. auto. auto with ints.
+ rewrite add_commut. rewrite add_neg_zero. auto.
+ unfold ltu. apply zlt_true.
+ change (unsigned (repr (Z_of_nat wordsize))) with (Z_of_nat wordsize).
+ omega.
+ unfold ltu. apply zlt_true.
+ change (unsigned (repr (Z_of_nat wordsize))) with (Z_of_nat wordsize).
+ omega.
+Qed.
+
+(** ** Properties of integer zero extension and sign extension. *)
+
+Theorem cast8unsigned_and:
+ forall x, cast8unsigned x = and x (repr 255).
+Proof.
+ intros; unfold cast8unsigned.
+ change (repr (unsigned x mod 256)) with (modu x (repr 256)).
+ change (repr 255) with (sub (repr 256) one).
+ apply modu_and with (repr 8). reflexivity.
+Qed.
+
+Theorem cast16unsigned_and:
+ forall x, cast16unsigned x = and x (repr 65535).
+Proof.
+ intros; unfold cast16unsigned.
+ change (repr (unsigned x mod 65536)) with (modu x (repr 65536)).
+ change (repr 65535) with (sub (repr 65536) one).
+ apply modu_and with (repr 16). reflexivity.
+Qed.
+
+Lemma eqmod_256_unsigned_repr:
+ forall a, eqmod 256 a (unsigned (repr a)).
+Proof.
+ intros. generalize (eqm_unsigned_repr a). unfold eqm, eqmod.
+ intros [k EQ]. exists (k * (modulus / 256)).
+ replace (k * (modulus / 256) * 256)
+ with (k * ((modulus / 256) * 256)).
+ exact EQ. ring.
+Qed.
+
+Lemma eqmod_65536_unsigned_repr:
+ forall a, eqmod 65536 a (unsigned (repr a)).
+Proof.
+ intros. generalize (eqm_unsigned_repr a). unfold eqm, eqmod.
+ intros [k EQ]. exists (k * (modulus / 65536)).
+ replace (k * (modulus / 65536) * 65536)
+ with (k * ((modulus / 65536) * 65536)).
+ exact EQ. ring.
+Qed.
+
+Theorem cast8_signed_unsigned:
+ forall n, cast8signed (cast8unsigned n) = cast8signed n.
+Proof.
+ intros; unfold cast8signed, cast8unsigned.
+ set (N := unsigned n).
+ rewrite unsigned_repr.
+ replace ((N mod 256) mod 256) with (N mod 256).
+ auto.
+ symmetry. apply Zmod_small. apply Z_mod_lt. omega.
+ assert (0 <= N mod 256 < 256). apply Z_mod_lt. omega.
+ assert (256 < max_unsigned). compute; auto.
+ omega.
+Qed.
+
+Theorem cast8_unsigned_signed:
+ forall n, cast8unsigned (cast8signed n) = cast8unsigned n.
+Proof.
+ intros; unfold cast8signed, cast8unsigned.
+ set (N := unsigned n mod 256).
+ assert (0 <= N < 256). unfold N; apply Z_mod_lt. omega.
+ assert (N mod 256 = N). apply Zmod_small. auto.
+ assert (256 <= max_unsigned). compute; congruence.
+ decEq.
+ case (zlt N 128); intro.
+ rewrite unsigned_repr. auto. omega.
+ transitivity (N mod 256); auto.
+ apply eqmod_mod_eq. omega.
+ apply eqmod_trans with (N - 256). apply eqmod_sym. apply eqmod_256_unsigned_repr.
+ assert (eqmod 256 (N - 256) (N - 0)).
+ apply eqmod_sub. apply eqmod_refl.
+ red. exists 1; reflexivity.
+ replace (N - 0) with N in H2. auto. omega.
+Qed.
+
+Theorem cast16_unsigned_signed:
+ forall n, cast16unsigned (cast16signed n) = cast16unsigned n.
+Proof.
+ intros; unfold cast16signed, cast16unsigned.
+ set (N := unsigned n mod 65536).
+ assert (0 <= N < 65536). unfold N; apply Z_mod_lt. omega.
+ assert (N mod 65536 = N). apply Zmod_small. auto.
+ assert (65536 <= max_unsigned). compute; congruence.
+ decEq.
+ case (zlt N 32768); intro.
+ rewrite unsigned_repr. auto. omega.
+ transitivity (N mod 65536); auto.
+ apply eqmod_mod_eq. omega.
+ apply eqmod_trans with (N - 65536). apply eqmod_sym. apply eqmod_65536_unsigned_repr.
+ assert (eqmod 65536 (N - 65536) (N - 0)).
+ apply eqmod_sub. apply eqmod_refl.
+ red. exists 1; reflexivity.
+ replace (N - 0) with N in H2. auto. omega.
+Qed.
+
+Theorem cast8_unsigned_idem:
+ forall n, cast8unsigned (cast8unsigned n) = cast8unsigned n.
+Proof.
+ intros. repeat rewrite cast8unsigned_and.
+ rewrite and_assoc. reflexivity.
+Qed.
+
+Theorem cast16_unsigned_idem:
+ forall n, cast16unsigned (cast16unsigned n) = cast16unsigned n.
+Proof.
+ intros. repeat rewrite cast16unsigned_and.
+ rewrite and_assoc. reflexivity.
+Qed.
+
+Theorem cast8_signed_idem:
+ forall n, cast8signed (cast8signed n) = cast8signed n.
+Proof.
+ intros; unfold cast8signed.
+ set (N := unsigned n mod 256).
+ assert (256 < max_unsigned). compute; auto.
+ assert (0 <= N < 256). unfold N. apply Z_mod_lt. omega.
+ case (zlt N 128); intro.
+ assert (unsigned (repr N) = N).
+ apply unsigned_repr. omega.
+ rewrite H1.
+ replace (N mod 256) with N. apply zlt_true. auto.
+ symmetry. apply Zmod_small. auto.
+ set (M := (unsigned (repr (N - 256)) mod 256)).
+ assert (M = N).
+ unfold M, N. apply eqmod_mod_eq. omega.
+ apply eqmod_trans with (unsigned n mod 256 - 256).
+ apply eqmod_sym. apply eqmod_256_unsigned_repr.
+ apply eqmod_trans with (unsigned n - 0).
+ apply eqmod_sub.
+ apply eqmod_sym. apply eqmod_mod. omega.
+ unfold eqmod. exists 1; omega.
+ apply eqmod_refl2. omega.
+ rewrite H1. rewrite zlt_false; auto.
+Qed.
+
+Theorem cast16_signed_idem:
+ forall n, cast16signed (cast16signed n) = cast16signed n.
+Proof.
+ intros; unfold cast16signed.
+ set (N := unsigned n mod 65536).
+ assert (65536 < max_unsigned). compute; auto.
+ assert (0 <= N < 65536). unfold N. apply Z_mod_lt. omega.
+ case (zlt N 32768); intro.
+ assert (unsigned (repr N) = N).
+ apply unsigned_repr. omega.
+ rewrite H1.
+ replace (N mod 65536) with N. apply zlt_true. auto.
+ symmetry. apply Zmod_small. auto.
+ set (M := (unsigned (repr (N - 65536)) mod 65536)).
+ assert (M = N).
+ unfold M, N. apply eqmod_mod_eq. omega.
+ apply eqmod_trans with (unsigned n mod 65536 - 65536).
+ apply eqmod_sym. apply eqmod_65536_unsigned_repr.
+ apply eqmod_trans with (unsigned n - 0).
+ apply eqmod_sub.
+ apply eqmod_sym. apply eqmod_mod. omega.
+ unfold eqmod. exists 1; omega.
+ apply eqmod_refl2. omega.
+ rewrite H1. rewrite zlt_false; auto.
+Qed.
+
+Theorem cast8_signed_equal_if_unsigned_equal:
+ forall x y,
+ cast8unsigned x = cast8unsigned y ->
+ cast8signed x = cast8signed y.
+Proof.
+ unfold cast8unsigned, cast8signed; intros until y.
+ set (x' := unsigned x mod 256).
+ set (y' := unsigned y mod 256).
+ intro.
+ assert (eqm x' y').
+ apply eqm_trans with (unsigned (repr x')). apply eqm_unsigned_repr.
+ rewrite H. apply eqm_sym. apply eqm_unsigned_repr.
+ assert (forall z, 0 <= z mod 256 < modulus).
+ intros.
+ assert (0 <= z mod 256 < 256). apply Z_mod_lt. omega.
+ assert (256 <= modulus). compute. congruence.
+ omega.
+ assert (x' = y').
+ apply eqm_small_eq; unfold x', y'; auto.
+ rewrite H2. auto.
+Qed.
+
+Theorem cast16_signed_equal_if_unsigned_equal:
+ forall x y,
+ cast16unsigned x = cast16unsigned y ->
+ cast16signed x = cast16signed y.
+Proof.
+ unfold cast16unsigned, cast16signed; intros until y.
+ set (x' := unsigned x mod 65536).
+ set (y' := unsigned y mod 65536).
+ intro.
+ assert (eqm x' y').
+ apply eqm_trans with (unsigned (repr x')). apply eqm_unsigned_repr.
+ rewrite H. apply eqm_sym. apply eqm_unsigned_repr.
+ assert (forall z, 0 <= z mod 65536 < modulus).
+ intros.
+ assert (0 <= z mod 65536 < 65536). apply Z_mod_lt. omega.
+ assert (65536 <= modulus). compute. congruence.
+ omega.
+ assert (x' = y').
+ apply eqm_small_eq; unfold x', y'; auto.
+ rewrite H2. auto.
+Qed.
+
+(** ** Properties of [one_bits] (decomposition in sum of powers of two) *)
+
+Opaque Z_one_bits. (* Otherwise, next Qed blows up! *)
+
+Theorem one_bits_range:
+ forall x i, In i (one_bits x) -> ltu i (repr (Z_of_nat wordsize)) = true.
+Proof.
+ intros. unfold one_bits in H.
+ elim (list_in_map_inv _ _ _ H). intros i0 [EQ IN].
+ subst i. unfold ltu. apply zlt_true.
+ generalize (Z_one_bits_range _ _ IN). intros.
+ assert (0 <= Z_of_nat wordsize <= max_unsigned).
+ compute. intuition congruence.
+ repeat rewrite unsigned_repr; omega.
+Qed.
+
+Fixpoint int_of_one_bits (l: list int) : int :=
+ match l with
+ | nil => zero
+ | a :: b => add (shl one a) (int_of_one_bits b)
+ end.
+
+Theorem one_bits_decomp:
+ forall x, x = int_of_one_bits (one_bits x).
+Proof.
+ intros.
+ transitivity (repr (powerserie (Z_one_bits wordsize (unsigned x) 0))).
+ transitivity (repr (unsigned x)).
+ auto with ints. decEq. apply Z_one_bits_powerserie.
+ auto with ints.
+ unfold one_bits.
+ generalize (Z_one_bits_range (unsigned x)).
+ generalize (Z_one_bits wordsize (unsigned x) 0).
+ induction l.
+ intros; reflexivity.
+ intros; simpl. rewrite <- IHl. unfold add. apply eqm_samerepr.
+ apply eqm_add. rewrite shl_mul_two_p. rewrite mul_commut.
+ rewrite mul_one. apply eqm_unsigned_repr_r.
+ rewrite unsigned_repr. auto with ints.
+ generalize (H a (in_eq _ _)).
+ assert (Z_of_nat wordsize < max_unsigned). compute; auto. omega.
+ auto with ints.
+ intros; apply H; auto with coqlib.
+Qed.
+
+(** ** Properties of comparisons *)
+
+Theorem negate_cmp:
+ forall c x y, cmp (negate_comparison c) x y = negb (cmp c x y).
+Proof.
+ intros. destruct c; simpl; try rewrite negb_elim; auto.
+Qed.
+
+Theorem negate_cmpu:
+ forall c x y, cmpu (negate_comparison c) x y = negb (cmpu c x y).
+Proof.
+ intros. destruct c; simpl; try rewrite negb_elim; auto.
+Qed.
+
+Theorem swap_cmp:
+ forall c x y, cmp (swap_comparison c) x y = cmp c y x.
+Proof.
+ intros. destruct c; simpl; auto. apply eq_sym. decEq. apply eq_sym.
+Qed.
+
+Theorem swap_cmpu:
+ forall c x y, cmpu (swap_comparison c) x y = cmpu c y x.
+Proof.
+ intros. destruct c; simpl; auto. apply eq_sym. decEq. apply eq_sym.
+Qed.
+
+Lemma translate_eq:
+ forall x y d,
+ eq (add x d) (add y d) = eq x y.
+Proof.
+ intros. unfold eq. case (zeq (unsigned x) (unsigned y)); intro.
+ unfold add. rewrite e. apply zeq_true.
+ apply zeq_false. unfold add. red; intro. apply n.
+ apply eqm_small_eq; auto with ints.
+ replace (unsigned x) with ((unsigned x + unsigned d) - unsigned d).
+ replace (unsigned y) with ((unsigned y + unsigned d) - unsigned d).
+ apply eqm_sub. apply eqm_trans with (unsigned (repr (unsigned x + unsigned d))).
+ eauto with ints. apply eqm_trans with (unsigned (repr (unsigned y + unsigned d))).
+ eauto with ints. eauto with ints. eauto with ints.
+ omega. omega.
+Qed.
+
+Lemma translate_lt:
+ forall x y d,
+ min_signed <= signed x + signed d <= max_signed ->
+ min_signed <= signed y + signed d <= max_signed ->
+ lt (add x d) (add y d) = lt x y.
+Proof.
+ intros. repeat rewrite add_signed. unfold lt.
+ repeat rewrite signed_repr; auto. case (zlt (signed x) (signed y)); intro.
+ apply zlt_true. omega.
+ apply zlt_false. omega.
+Qed.
+
+Theorem translate_cmp:
+ forall c x y d,
+ min_signed <= signed x + signed d <= max_signed ->
+ min_signed <= signed y + signed d <= max_signed ->
+ cmp c (add x d) (add y d) = cmp c x y.
+Proof.
+ intros. unfold cmp.
+ rewrite translate_eq. repeat rewrite translate_lt; auto.
+Qed.
+
+Theorem notbool_isfalse_istrue:
+ forall x, is_false x -> is_true (notbool x).
+Proof.
+ unfold is_false, is_true, notbool; intros; subst x.
+ simpl. discriminate.
+Qed.
+
+Theorem notbool_istrue_isfalse:
+ forall x, is_true x -> is_false (notbool x).
+Proof.
+ unfold is_false, is_true, notbool; intros.
+ generalize (eq_spec x zero). case (eq x zero); intro.
+ contradiction. auto.
+Qed.
+
+End Int.
diff --git a/lib/Lattice.v b/lib/Lattice.v
new file mode 100644
index 0000000..7adcffb
--- /dev/null
+++ b/lib/Lattice.v
@@ -0,0 +1,331 @@
+(** Constructions of semi-lattices. *)
+
+Require Import Coqlib.
+Require Import Maps.
+
+(** * Signatures of semi-lattices *)
+
+(** A semi-lattice is a type [t] equipped with a decidable equality [eq],
+ a partial order [ge], a smallest element [bot], and an upper
+ bound operation [lub]. Note that we do not demand that [lub] computes
+ the least upper bound. *)
+
+Module Type SEMILATTICE.
+
+ Variable t: Set.
+ Variable eq: forall (x y: t), {x=y} + {x<>y}.
+ Variable ge: t -> t -> Prop.
+ Hypothesis ge_refl: forall x, ge x x.
+ Hypothesis ge_trans: forall x y z, ge x y -> ge y z -> ge x z.
+ Variable bot: t.
+ Hypothesis ge_bot: forall x, ge x bot.
+ Variable lub: t -> t -> t.
+ Hypothesis lub_commut: forall x y, lub x y = lub y x.
+ Hypothesis ge_lub_left: forall x y, ge (lub x y) x.
+
+End SEMILATTICE.
+
+(** A semi-lattice ``with top'' is similar, but also has a greatest
+ element [top]. *)
+
+Module Type SEMILATTICE_WITH_TOP.
+
+ Variable t: Set.
+ Variable eq: forall (x y: t), {x=y} + {x<>y}.
+ Variable ge: t -> t -> Prop.
+ Hypothesis ge_refl: forall x, ge x x.
+ Hypothesis ge_trans: forall x y z, ge x y -> ge y z -> ge x z.
+ Variable bot: t.
+ Hypothesis ge_bot: forall x, ge x bot.
+ Variable top: t.
+ Hypothesis ge_top: forall x, ge top x.
+ Variable lub: t -> t -> t.
+ Hypothesis lub_commut: forall x y, lub x y = lub y x.
+ Hypothesis ge_lub_left: forall x y, ge (lub x y) x.
+
+End SEMILATTICE_WITH_TOP.
+
+(** * Semi-lattice over maps *)
+
+(** Given a semi-lattice with top [L], the following functor implements
+ a semi-lattice structure over finite maps from positive numbers to [L.t].
+ The default value for these maps is either [L.top] or [L.bot]. *)
+
+Module LPMap(L: SEMILATTICE_WITH_TOP) <: SEMILATTICE_WITH_TOP.
+
+Inductive t_ : Set :=
+ | Bot_except: PTree.t L.t -> t_
+ | Top_except: PTree.t L.t -> t_.
+
+Definition t: Set := t_.
+
+Lemma eq: forall (x y: t), {x=y} + {x<>y}.
+Proof.
+ assert (forall m1 m2: PTree.t L.t, {m1=m2} + {m1<>m2}).
+ apply PTree.eq. exact L.eq.
+ decide equality.
+Qed.
+
+Definition get (p: positive) (x: t) : L.t :=
+ match x with
+ | Bot_except m =>
+ match m!p with None => L.bot | Some x => x end
+ | Top_except m =>
+ match m!p with None => L.top | Some x => x end
+ end.
+
+Definition set (p: positive) (v: L.t) (x: t) : t :=
+ match x with
+ | Bot_except m =>
+ Bot_except (PTree.set p v m)
+ | Top_except m =>
+ Top_except (PTree.set p v m)
+ end.
+
+Lemma gss:
+ forall p v x,
+ get p (set p v x) = v.
+Proof.
+ intros. destruct x; simpl; rewrite PTree.gss; auto.
+Qed.
+
+Lemma gso:
+ forall p q v x,
+ p <> q -> get p (set q v x) = get p x.
+Proof.
+ intros. destruct x; simpl; rewrite PTree.gso; auto.
+Qed.
+
+Definition ge (x y: t) : Prop :=
+ forall p, L.ge (get p x) (get p y).
+
+Lemma ge_refl: forall x, ge x x.
+Proof.
+ unfold ge; intros. apply L.ge_refl.
+Qed.
+
+Lemma ge_trans: forall x y z, ge x y -> ge y z -> ge x z.
+Proof.
+ unfold ge; intros. apply L.ge_trans with (get p y); auto.
+Qed.
+
+Definition bot := Bot_except (PTree.empty L.t).
+
+Lemma get_bot: forall p, get p bot = L.bot.
+Proof.
+ unfold bot; intros; simpl. rewrite PTree.gempty. auto.
+Qed.
+
+Lemma ge_bot: forall x, ge x bot.
+Proof.
+ unfold ge; intros. rewrite get_bot. apply L.ge_bot.
+Qed.
+
+Definition top := Top_except (PTree.empty L.t).
+
+Lemma get_top: forall p, get p top = L.top.
+Proof.
+ unfold top; intros; simpl. rewrite PTree.gempty. auto.
+Qed.
+
+Lemma ge_top: forall x, ge top x.
+Proof.
+ unfold ge; intros. rewrite get_top. apply L.ge_top.
+Qed.
+
+Definition lub (x y: t) : t :=
+ match x, y with
+ | Bot_except m, Bot_except n =>
+ Bot_except
+ (PTree.combine
+ (fun a b =>
+ match a, b with
+ | Some u, Some v => Some (L.lub u v)
+ | None, _ => b
+ | _, None => a
+ end)
+ m n)
+ | Bot_except m, Top_except n =>
+ Top_except
+ (PTree.combine
+ (fun a b =>
+ match a, b with
+ | Some u, Some v => Some (L.lub u v)
+ | None, _ => b
+ | _, None => None
+ end)
+ m n)
+ | Top_except m, Bot_except n =>
+ Top_except
+ (PTree.combine
+ (fun a b =>
+ match a, b with
+ | Some u, Some v => Some (L.lub u v)
+ | None, _ => None
+ | _, None => a
+ end)
+ m n)
+ | Top_except m, Top_except n =>
+ Top_except
+ (PTree.combine
+ (fun a b =>
+ match a, b with
+ | Some u, Some v => Some (L.lub u v)
+ | _, _ => None
+ end)
+ m n)
+ end.
+
+Lemma lub_commut:
+ forall x y, lub x y = lub y x.
+Proof.
+ destruct x; destruct y; unfold lub; decEq;
+ apply PTree.combine_commut; intros;
+ (destruct i; destruct j; auto; decEq; apply L.lub_commut).
+Qed.
+
+Lemma ge_lub_left:
+ forall x y, ge (lub x y) x.
+Proof.
+ unfold ge, get, lub; intros; destruct x; destruct y.
+
+ rewrite PTree.gcombine.
+ destruct t0!p. destruct t1!p. apply L.ge_lub_left.
+ apply L.ge_refl. destruct t1!p. apply L.ge_bot. apply L.ge_refl.
+ auto.
+
+ rewrite PTree.gcombine.
+ destruct t0!p. destruct t1!p. apply L.ge_lub_left.
+ apply L.ge_top. destruct t1!p. apply L.ge_bot. apply L.ge_bot.
+ auto.
+
+ rewrite PTree.gcombine.
+ destruct t0!p. destruct t1!p. apply L.ge_lub_left.
+ apply L.ge_refl. apply L.ge_refl. auto.
+
+ rewrite PTree.gcombine.
+ destruct t0!p. destruct t1!p. apply L.ge_lub_left.
+ apply L.ge_top. apply L.ge_refl.
+ auto.
+Qed.
+
+End LPMap.
+
+(** * Flat semi-lattice *)
+
+(** Given a type with decidable equality [X], the following functor
+ returns a semi-lattice structure over [X.t] complemented with
+ a top and a bottom element. The ordering is the flat ordering
+ [Bot < Inj x < Top]. *)
+
+Module LFlat(X: EQUALITY_TYPE) <: SEMILATTICE_WITH_TOP.
+
+Inductive t_ : Set :=
+ | Bot: t_
+ | Inj: X.t -> t_
+ | Top: t_.
+
+Definition t : Set := t_.
+
+Lemma eq: forall (x y: t), {x=y} + {x<>y}.
+Proof.
+ decide equality. apply X.eq.
+Qed.
+
+Definition ge (x y: t) : Prop :=
+ match x, y with
+ | Top, _ => True
+ | _, Bot => True
+ | Inj a, Inj b => a = b
+ | _, _ => False
+ end.
+
+Lemma ge_refl: forall x, ge x x.
+Proof.
+ unfold ge; destruct x; auto.
+Qed.
+
+Lemma ge_trans: forall x y z, ge x y -> ge y z -> ge x z.
+Proof.
+ unfold ge; destruct x; destruct y; try destruct z; intuition.
+ transitivity t1; auto.
+Qed.
+
+Definition bot: t := Bot.
+
+Lemma ge_bot: forall x, ge x bot.
+Proof.
+ destruct x; simpl; auto.
+Qed.
+
+Definition top: t := Top.
+
+Lemma ge_top: forall x, ge top x.
+Proof.
+ destruct x; simpl; auto.
+Qed.
+
+Definition lub (x y: t) : t :=
+ match x, y with
+ | Bot, _ => y
+ | _, Bot => x
+ | Top, _ => Top
+ | _, Top => Top
+ | Inj a, Inj b => if X.eq a b then Inj a else Top
+ end.
+
+Lemma lub_commut: forall x y, lub x y = lub y x.
+Proof.
+ destruct x; destruct y; simpl; auto.
+ case (X.eq t0 t1); case (X.eq t1 t0); intros; congruence.
+Qed.
+
+Lemma ge_lub_left: forall x y, ge (lub x y) x.
+Proof.
+ destruct x; destruct y; simpl; auto.
+ case (X.eq t0 t1); simpl; auto.
+Qed.
+
+End LFlat.
+
+(** * Boolean semi-lattice *)
+
+(** This semi-lattice has only two elements, [bot] and [top], trivially
+ ordered. *)
+
+Module LBoolean <: SEMILATTICE_WITH_TOP.
+
+Definition t := bool.
+
+Lemma eq: forall (x y: t), {x=y} + {x<>y}.
+Proof. decide equality. Qed.
+
+Definition ge (x y: t) : Prop := x = y \/ x = true.
+
+Lemma ge_refl: forall x, ge x x.
+Proof. unfold ge; tauto. Qed.
+
+Lemma ge_trans: forall x y z, ge x y -> ge y z -> ge x z.
+Proof. unfold ge; intuition congruence. Qed.
+
+Definition bot := false.
+
+Lemma ge_bot: forall x, ge x bot.
+Proof. destruct x; compute; tauto. Qed.
+
+Definition top := true.
+
+Lemma ge_top: forall x, ge top x.
+Proof. unfold ge, top; tauto. Qed.
+
+Definition lub (x y: t) := x || y.
+
+Lemma lub_commut: forall x y, lub x y = lub y x.
+Proof. intros; unfold lub. apply orb_comm. Qed.
+
+Lemma ge_lub_left: forall x y, ge (lub x y) x.
+Proof. destruct x; destruct y; compute; tauto. Qed.
+
+End LBoolean.
+
+
diff --git a/lib/Maps.v b/lib/Maps.v
new file mode 100644
index 0000000..6969091
--- /dev/null
+++ b/lib/Maps.v
@@ -0,0 +1,1034 @@
+(** Applicative finite maps are the main data structure used in this
+ project. A finite map associates data to keys. The two main operations
+ are [set k d m], which returns a map identical to [m] except that [d]
+ is associated to [k], and [get k m] which returns the data associated
+ to key [k] in map [m]. In this library, we distinguish two kinds of maps:
+- Trees: the [get] operation returns an option type, either [None]
+ if no data is associated to the key, or [Some d] otherwise.
+- Maps: the [get] operation always returns a data. If no data was explicitly
+ associated with the key, a default data provided at map initialization time
+ is returned.
+
+ In this library, we provide efficient implementations of trees and
+ maps whose keys range over the type [positive] of binary positive
+ integers or any type that can be injected into [positive]. The
+ implementation is based on radix-2 search trees (uncompressed
+ Patricia trees) and guarantees logarithmic-time operations. An
+ inefficient implementation of maps as functions is also provided.
+*)
+
+Require Import Coqlib.
+
+Set Implicit Arguments.
+
+(** * The abstract signatures of trees *)
+
+Module Type TREE.
+ Variable elt: Set.
+ Variable elt_eq: forall (a b: elt), {a = b} + {a <> b}.
+ Variable t: Set -> Set.
+ Variable eq: forall (A: Set), (forall (x y: A), {x=y} + {x<>y}) ->
+ forall (a b: t A), {a = b} + {a <> b}.
+ Variable empty: forall (A: Set), t A.
+ Variable get: forall (A: Set), elt -> t A -> option A.
+ Variable set: forall (A: Set), elt -> A -> t A -> t A.
+ Variable remove: forall (A: Set), elt -> t A -> t A.
+
+ (** The ``good variables'' properties for trees, expressing
+ commutations between [get], [set] and [remove]. *)
+ Hypothesis gempty:
+ forall (A: Set) (i: elt), get i (empty A) = None.
+ Hypothesis gss:
+ forall (A: Set) (i: elt) (x: A) (m: t A), get i (set i x m) = Some x.
+ Hypothesis gso:
+ forall (A: Set) (i j: elt) (x: A) (m: t A),
+ i <> j -> get i (set j x m) = get i m.
+ Hypothesis gsspec:
+ forall (A: Set) (i j: elt) (x: A) (m: t A),
+ get i (set j x m) = if elt_eq i j then Some x else get i m.
+ Hypothesis gsident:
+ forall (A: Set) (i: elt) (m: t A) (v: A),
+ get i m = Some v -> set i v m = m.
+ (* We could implement the following, but it's not needed for the moment.
+ Hypothesis grident:
+ forall (A: Set) (i: elt) (m: t A) (v: A),
+ get i m = None -> remove i m = m.
+ *)
+ Hypothesis grs:
+ forall (A: Set) (i: elt) (m: t A), get i (remove i m) = None.
+ Hypothesis gro:
+ forall (A: Set) (i j: elt) (m: t A),
+ i <> j -> get i (remove j m) = get i m.
+
+ (** Applying a function to all data of a tree. *)
+ Variable map:
+ forall (A B: Set), (elt -> A -> B) -> t A -> t B.
+ Hypothesis gmap:
+ forall (A B: Set) (f: elt -> A -> B) (i: elt) (m: t A),
+ get i (map f m) = option_map (f i) (get i m).
+
+ (** Applying a function pairwise to all data of two trees. *)
+ Variable combine:
+ forall (A: Set), (option A -> option A -> option A) -> t A -> t A -> t A.
+ Hypothesis gcombine:
+ forall (A: Set) (f: option A -> option A -> option A)
+ (m1 m2: t A) (i: elt),
+ f None None = None ->
+ get i (combine f m1 m2) = f (get i m1) (get i m2).
+ Hypothesis combine_commut:
+ forall (A: Set) (f g: option A -> option A -> option A),
+ (forall (i j: option A), f i j = g j i) ->
+ forall (m1 m2: t A),
+ combine f m1 m2 = combine g m2 m1.
+
+ (** Enumerating the bindings of a tree. *)
+ Variable elements:
+ forall (A: Set), t A -> list (elt * A).
+ Hypothesis elements_correct:
+ forall (A: Set) (m: t A) (i: elt) (v: A),
+ get i m = Some v -> In (i, v) (elements m).
+ Hypothesis elements_complete:
+ forall (A: Set) (m: t A) (i: elt) (v: A),
+ In (i, v) (elements m) -> get i m = Some v.
+ Hypothesis elements_keys_norepet:
+ forall (A: Set) (m: t A),
+ list_norepet (List.map (@fst elt A) (elements m)).
+
+ (** Folding a function over all bindings of a tree. *)
+ Variable fold:
+ forall (A B: Set), (B -> elt -> A -> B) -> t A -> B -> B.
+ Hypothesis fold_spec:
+ forall (A B: Set) (f: B -> elt -> A -> B) (v: B) (m: t A),
+ fold f m v =
+ List.fold_left (fun a p => f a (fst p) (snd p)) (elements m) v.
+End TREE.
+
+(** * The abstract signatures of maps *)
+
+Module Type MAP.
+ Variable elt: Set.
+ Variable elt_eq: forall (a b: elt), {a = b} + {a <> b}.
+ Variable t: Set -> Set.
+ Variable init: forall (A: Set), A -> t A.
+ Variable get: forall (A: Set), elt -> t A -> A.
+ Variable set: forall (A: Set), elt -> A -> t A -> t A.
+ Hypothesis gi:
+ forall (A: Set) (i: elt) (x: A), get i (init x) = x.
+ Hypothesis gss:
+ forall (A: Set) (i: elt) (x: A) (m: t A), get i (set i x m) = x.
+ Hypothesis gso:
+ forall (A: Set) (i j: elt) (x: A) (m: t A),
+ i <> j -> get i (set j x m) = get i m.
+ Hypothesis gsspec:
+ forall (A: Set) (i j: elt) (x: A) (m: t A),
+ get i (set j x m) = if elt_eq i j then x else get i m.
+ Hypothesis gsident:
+ forall (A: Set) (i j: elt) (m: t A), get j (set i (get i m) m) = get j m.
+ Variable map: forall (A B: Set), (A -> B) -> t A -> t B.
+ Hypothesis gmap:
+ forall (A B: Set) (f: A -> B) (i: elt) (m: t A),
+ get i (map f m) = f(get i m).
+End MAP.
+
+(** * An implementation of trees over type [positive] *)
+
+Module PTree <: TREE.
+ Definition elt := positive.
+ Definition elt_eq := peq.
+
+ Inductive tree (A : Set) : Set :=
+ | Leaf : tree A
+ | Node : tree A -> option A -> tree A -> tree A
+ .
+ Implicit Arguments Leaf [A].
+ Implicit Arguments Node [A].
+
+ Definition t := tree.
+
+ Theorem eq : forall (A : Set),
+ (forall (x y: A), {x=y} + {x<>y}) ->
+ forall (a b : t A), {a = b} + {a <> b}.
+ Proof.
+ intros A eqA.
+ decide equality.
+ generalize o o0; decide equality.
+ Qed.
+
+ Definition empty (A : Set) := (Leaf : t A).
+
+ Fixpoint get (A : Set) (i : positive) (m : t A) {struct i} : option A :=
+ match m with
+ | Leaf => None
+ | Node l o r =>
+ match i with
+ | xH => o
+ | xO ii => get ii l
+ | xI ii => get ii r
+ end
+ end.
+
+ Fixpoint set (A : Set) (i : positive) (v : A) (m : t A) {struct i} : t A :=
+ match m with
+ | Leaf =>
+ match i with
+ | xH => Node Leaf (Some v) Leaf
+ | xO ii => Node (set ii v Leaf) None Leaf
+ | xI ii => Node Leaf None (set ii v Leaf)
+ end
+ | Node l o r =>
+ match i with
+ | xH => Node l (Some v) r
+ | xO ii => Node (set ii v l) o r
+ | xI ii => Node l o (set ii v r)
+ end
+ end.
+
+ Fixpoint remove (A : Set) (i : positive) (m : t A) {struct i} : t A :=
+ match i with
+ | xH =>
+ match m with
+ | Leaf => Leaf
+ | Node Leaf o Leaf => Leaf
+ | Node l o r => Node l None r
+ end
+ | xO ii =>
+ match m with
+ | Leaf => Leaf
+ | Node l None Leaf =>
+ match remove ii l with
+ | Leaf => Leaf
+ | mm => Node mm None Leaf
+ end
+ | Node l o r => Node (remove ii l) o r
+ end
+ | xI ii =>
+ match m with
+ | Leaf => Leaf
+ | Node Leaf None r =>
+ match remove ii r with
+ | Leaf => Leaf
+ | mm => Node Leaf None mm
+ end
+ | Node l o r => Node l o (remove ii r)
+ end
+ end.
+
+ Theorem gempty:
+ forall (A: Set) (i: positive), get i (empty A) = None.
+ Proof.
+ induction i; simpl; auto.
+ Qed.
+
+ Theorem gss:
+ forall (A: Set) (i: positive) (x: A) (m: t A), get i (set i x m) = Some x.
+ Proof.
+ induction i; destruct m; simpl; auto.
+ Qed.
+
+ Lemma gleaf : forall (A : Set) (i : positive), get i (Leaf : t A) = None.
+ Proof. exact gempty. Qed.
+
+ Theorem gso:
+ forall (A: Set) (i j: positive) (x: A) (m: t A),
+ i <> j -> get i (set j x m) = get i m.
+ Proof.
+ induction i; intros; destruct j; destruct m; simpl;
+ try rewrite <- (gleaf A i); auto; try apply IHi; congruence.
+ Qed.
+
+ Theorem gsspec:
+ forall (A: Set) (i j: positive) (x: A) (m: t A),
+ get i (set j x m) = if peq i j then Some x else get i m.
+ Proof.
+ intros.
+ destruct (peq i j); [ rewrite e; apply gss | apply gso; auto ].
+ Qed.
+
+ Theorem gsident:
+ forall (A: Set) (i: positive) (m: t A) (v: A),
+ get i m = Some v -> set i v m = m.
+ Proof.
+ induction i; intros; destruct m; simpl; simpl in H; try congruence.
+ rewrite (IHi m2 v H); congruence.
+ rewrite (IHi m1 v H); congruence.
+ Qed.
+
+ Lemma rleaf : forall (A : Set) (i : positive), remove i (Leaf : t A) = Leaf.
+ Proof. destruct i; simpl; auto. Qed.
+
+ Theorem grs:
+ forall (A: Set) (i: positive) (m: t A), get i (remove i m) = None.
+ Proof.
+ induction i; destruct m.
+ simpl; auto.
+ destruct m1; destruct o; destruct m2 as [ | ll oo rr]; simpl; auto.
+ rewrite (rleaf A i); auto.
+ cut (get i (remove i (Node ll oo rr)) = None).
+ destruct (remove i (Node ll oo rr)); auto; apply IHi.
+ apply IHi.
+ simpl; auto.
+ destruct m1 as [ | ll oo rr]; destruct o; destruct m2; simpl; auto.
+ rewrite (rleaf A i); auto.
+ cut (get i (remove i (Node ll oo rr)) = None).
+ destruct (remove i (Node ll oo rr)); auto; apply IHi.
+ apply IHi.
+ simpl; auto.
+ destruct m1; destruct m2; simpl; auto.
+ Qed.
+
+ Theorem gro:
+ forall (A: Set) (i j: positive) (m: t A),
+ i <> j -> get i (remove j m) = get i m.
+ Proof.
+ induction i; intros; destruct j; destruct m;
+ try rewrite (rleaf A (xI j));
+ try rewrite (rleaf A (xO j));
+ try rewrite (rleaf A 1); auto;
+ destruct m1; destruct o; destruct m2;
+ simpl;
+ try apply IHi; try congruence;
+ try rewrite (rleaf A j); auto;
+ try rewrite (gleaf A i); auto.
+ cut (get i (remove j (Node m2_1 o m2_2)) = get i (Node m2_1 o m2_2));
+ [ destruct (remove j (Node m2_1 o m2_2)); try rewrite (gleaf A i); auto
+ | apply IHi; congruence ].
+ destruct (remove j (Node m1_1 o0 m1_2)); simpl; try rewrite (gleaf A i);
+ auto.
+ destruct (remove j (Node m2_1 o m2_2)); simpl; try rewrite (gleaf A i);
+ auto.
+ cut (get i (remove j (Node m1_1 o0 m1_2)) = get i (Node m1_1 o0 m1_2));
+ [ destruct (remove j (Node m1_1 o0 m1_2)); try rewrite (gleaf A i); auto
+ | apply IHi; congruence ].
+ destruct (remove j (Node m2_1 o m2_2)); simpl; try rewrite (gleaf A i);
+ auto.
+ destruct (remove j (Node m1_1 o0 m1_2)); simpl; try rewrite (gleaf A i);
+ auto.
+ Qed.
+
+ Fixpoint append (i j : positive) {struct i} : positive :=
+ match i with
+ | xH => j
+ | xI ii => xI (append ii j)
+ | xO ii => xO (append ii j)
+ end.
+
+ Lemma append_assoc_0 : forall (i j : positive),
+ append i (xO j) = append (append i (xO xH)) j.
+ Proof.
+ induction i; intros; destruct j; simpl;
+ try rewrite (IHi (xI j));
+ try rewrite (IHi (xO j));
+ try rewrite <- (IHi xH);
+ auto.
+ Qed.
+
+ Lemma append_assoc_1 : forall (i j : positive),
+ append i (xI j) = append (append i (xI xH)) j.
+ Proof.
+ induction i; intros; destruct j; simpl;
+ try rewrite (IHi (xI j));
+ try rewrite (IHi (xO j));
+ try rewrite <- (IHi xH);
+ auto.
+ Qed.
+
+ Lemma append_neutral_r : forall (i : positive), append i xH = i.
+ Proof.
+ induction i; simpl; congruence.
+ Qed.
+
+ Lemma append_neutral_l : forall (i : positive), append xH i = i.
+ Proof.
+ simpl; auto.
+ Qed.
+
+ Fixpoint xmap (A B : Set) (f : positive -> A -> B) (m : t A) (i : positive)
+ {struct m} : t B :=
+ match m with
+ | Leaf => Leaf
+ | Node l o r => Node (xmap f l (append i (xO xH)))
+ (option_map (f i) o)
+ (xmap f r (append i (xI xH)))
+ end.
+
+ Definition map (A B : Set) (f : positive -> A -> B) m := xmap f m xH.
+
+ Lemma xgmap:
+ forall (A B: Set) (f: positive -> A -> B) (i j : positive) (m: t A),
+ get i (xmap f m j) = option_map (f (append j i)) (get i m).
+ Proof.
+ induction i; intros; destruct m; simpl; auto.
+ rewrite (append_assoc_1 j i); apply IHi.
+ rewrite (append_assoc_0 j i); apply IHi.
+ rewrite (append_neutral_r j); auto.
+ Qed.
+
+ Theorem gmap:
+ forall (A B: Set) (f: positive -> A -> B) (i: positive) (m: t A),
+ get i (map f m) = option_map (f i) (get i m).
+ Proof.
+ intros.
+ unfold map.
+ replace (f i) with (f (append xH i)).
+ apply xgmap.
+ rewrite append_neutral_l; auto.
+ Qed.
+
+ Fixpoint xcombine_l (A : Set) (f : option A -> option A -> option A)
+ (m : t A) {struct m} : t A :=
+ match m with
+ | Leaf => Leaf
+ | Node l o r => Node (xcombine_l f l) (f o None) (xcombine_l f r)
+ end.
+
+ Lemma xgcombine_l :
+ forall (A : Set) (f : option A -> option A -> option A)
+ (i : positive) (m : t A),
+ f None None = None -> get i (xcombine_l f m) = f (get i m) None.
+ Proof.
+ induction i; intros; destruct m; simpl; auto.
+ Qed.
+
+ Fixpoint xcombine_r (A : Set) (f : option A -> option A -> option A)
+ (m : t A) {struct m} : t A :=
+ match m with
+ | Leaf => Leaf
+ | Node l o r => Node (xcombine_r f l) (f None o) (xcombine_r f r)
+ end.
+
+ Lemma xgcombine_r :
+ forall (A : Set) (f : option A -> option A -> option A)
+ (i : positive) (m : t A),
+ f None None = None -> get i (xcombine_r f m) = f None (get i m).
+ Proof.
+ induction i; intros; destruct m; simpl; auto.
+ Qed.
+
+ Fixpoint combine (A : Set) (f : option A -> option A -> option A)
+ (m1 m2 : t A) {struct m1} : t A :=
+ match m1 with
+ | Leaf => xcombine_r f m2
+ | Node l1 o1 r1 =>
+ match m2 with
+ | Leaf => xcombine_l f m1
+ | Node l2 o2 r2 => Node (combine f l1 l2) (f o1 o2) (combine f r1 r2)
+ end
+ end.
+
+ Lemma xgcombine:
+ forall (A: Set) (f: option A -> option A -> option A) (i: positive)
+ (m1 m2: t A),
+ f None None = None ->
+ get i (combine f m1 m2) = f (get i m1) (get i m2).
+ Proof.
+ induction i; intros; destruct m1; destruct m2; simpl; auto;
+ try apply xgcombine_r; try apply xgcombine_l; auto.
+ Qed.
+
+ Theorem gcombine:
+ forall (A: Set) (f: option A -> option A -> option A)
+ (m1 m2: t A) (i: positive),
+ f None None = None ->
+ get i (combine f m1 m2) = f (get i m1) (get i m2).
+ Proof.
+ intros A f m1 m2 i H; exact (xgcombine f i m1 m2 H).
+ Qed.
+
+ Lemma xcombine_lr :
+ forall (A : Set) (f g : option A -> option A -> option A) (m : t A),
+ (forall (i j : option A), f i j = g j i) ->
+ xcombine_l f m = xcombine_r g m.
+ Proof.
+ induction m; intros; simpl; auto.
+ rewrite IHm1; auto.
+ rewrite IHm2; auto.
+ rewrite H; auto.
+ Qed.
+
+ Theorem combine_commut:
+ forall (A: Set) (f g: option A -> option A -> option A),
+ (forall (i j: option A), f i j = g j i) ->
+ forall (m1 m2: t A),
+ combine f m1 m2 = combine g m2 m1.
+ Proof.
+ intros A f g EQ1.
+ assert (EQ2: forall (i j: option A), g i j = f j i).
+ intros; auto.
+ induction m1; intros; destruct m2; simpl;
+ try rewrite EQ1;
+ repeat rewrite (xcombine_lr f g);
+ repeat rewrite (xcombine_lr g f);
+ auto.
+ rewrite IHm1_1.
+ rewrite IHm1_2.
+ auto.
+ Qed.
+
+ Fixpoint xelements (A : Set) (m : t A) (i : positive) {struct m}
+ : list (positive * A) :=
+ match m with
+ | Leaf => nil
+ | Node l None r =>
+ (xelements l (append i (xO xH))) ++ (xelements r (append i (xI xH)))
+ | Node l (Some x) r =>
+ (xelements l (append i (xO xH)))
+ ++ ((i, x) :: xelements r (append i (xI xH)))
+ end.
+
+ (* Note: function [xelements] above is inefficient. We should apply
+ deforestation to it, but that makes the proofs even harder. *)
+
+ Definition elements A (m : t A) := xelements m xH.
+
+ Lemma xelements_correct:
+ forall (A: Set) (m: t A) (i j : positive) (v: A),
+ get i m = Some v -> In (append j i, v) (xelements m j).
+ Proof.
+ induction m; intros.
+ rewrite (gleaf A i) in H; congruence.
+ destruct o; destruct i; simpl; simpl in H.
+ rewrite append_assoc_1; apply in_or_app; right; apply in_cons;
+ apply IHm2; auto.
+ rewrite append_assoc_0; apply in_or_app; left; apply IHm1; auto.
+ rewrite append_neutral_r; apply in_or_app; injection H;
+ intro EQ; rewrite EQ; right; apply in_eq.
+ rewrite append_assoc_1; apply in_or_app; right; apply IHm2; auto.
+ rewrite append_assoc_0; apply in_or_app; left; apply IHm1; auto.
+ congruence.
+ Qed.
+
+ Theorem elements_correct:
+ forall (A: Set) (m: t A) (i: positive) (v: A),
+ get i m = Some v -> In (i, v) (elements m).
+ Proof.
+ intros A m i v H.
+ exact (xelements_correct m i xH H).
+ Qed.
+
+ Fixpoint xget (A : Set) (i j : positive) (m : t A) {struct j} : option A :=
+ match i, j with
+ | _, xH => get i m
+ | xO ii, xO jj => xget ii jj m
+ | xI ii, xI jj => xget ii jj m
+ | _, _ => None
+ end.
+
+ Lemma xget_left :
+ forall (A : Set) (j i : positive) (m1 m2 : t A) (o : option A) (v : A),
+ xget i (append j (xO xH)) m1 = Some v -> xget i j (Node m1 o m2) = Some v.
+ Proof.
+ induction j; intros; destruct i; simpl; simpl in H; auto; try congruence.
+ destruct i; congruence.
+ Qed.
+
+ Lemma xelements_ii :
+ forall (A: Set) (m: t A) (i j : positive) (v: A),
+ In (xI i, v) (xelements m (xI j)) -> In (i, v) (xelements m j).
+ Proof.
+ induction m.
+ simpl; auto.
+ intros; destruct o; simpl; simpl in H; destruct (in_app_or _ _ _ H);
+ apply in_or_app.
+ left; apply IHm1; auto.
+ right; destruct (in_inv H0).
+ injection H1; intros EQ1 EQ2; rewrite EQ1; rewrite EQ2; apply in_eq.
+ apply in_cons; apply IHm2; auto.
+ left; apply IHm1; auto.
+ right; apply IHm2; auto.
+ Qed.
+
+ Lemma xelements_io :
+ forall (A: Set) (m: t A) (i j : positive) (v: A),
+ ~In (xI i, v) (xelements m (xO j)).
+ Proof.
+ induction m.
+ simpl; auto.
+ intros; destruct o; simpl; intro H; destruct (in_app_or _ _ _ H).
+ apply (IHm1 _ _ _ H0).
+ destruct (in_inv H0).
+ congruence.
+ apply (IHm2 _ _ _ H1).
+ apply (IHm1 _ _ _ H0).
+ apply (IHm2 _ _ _ H0).
+ Qed.
+
+ Lemma xelements_oo :
+ forall (A: Set) (m: t A) (i j : positive) (v: A),
+ In (xO i, v) (xelements m (xO j)) -> In (i, v) (xelements m j).
+ Proof.
+ induction m.
+ simpl; auto.
+ intros; destruct o; simpl; simpl in H; destruct (in_app_or _ _ _ H);
+ apply in_or_app.
+ left; apply IHm1; auto.
+ right; destruct (in_inv H0).
+ injection H1; intros EQ1 EQ2; rewrite EQ1; rewrite EQ2; apply in_eq.
+ apply in_cons; apply IHm2; auto.
+ left; apply IHm1; auto.
+ right; apply IHm2; auto.
+ Qed.
+
+ Lemma xelements_oi :
+ forall (A: Set) (m: t A) (i j : positive) (v: A),
+ ~In (xO i, v) (xelements m (xI j)).
+ Proof.
+ induction m.
+ simpl; auto.
+ intros; destruct o; simpl; intro H; destruct (in_app_or _ _ _ H).
+ apply (IHm1 _ _ _ H0).
+ destruct (in_inv H0).
+ congruence.
+ apply (IHm2 _ _ _ H1).
+ apply (IHm1 _ _ _ H0).
+ apply (IHm2 _ _ _ H0).
+ Qed.
+
+ Lemma xelements_ih :
+ forall (A: Set) (m1 m2: t A) (o: option A) (i : positive) (v: A),
+ In (xI i, v) (xelements (Node m1 o m2) xH) -> In (i, v) (xelements m2 xH).
+ Proof.
+ destruct o; simpl; intros; destruct (in_app_or _ _ _ H).
+ absurd (In (xI i, v) (xelements m1 2)); auto; apply xelements_io; auto.
+ destruct (in_inv H0).
+ congruence.
+ apply xelements_ii; auto.
+ absurd (In (xI i, v) (xelements m1 2)); auto; apply xelements_io; auto.
+ apply xelements_ii; auto.
+ Qed.
+
+ Lemma xelements_oh :
+ forall (A: Set) (m1 m2: t A) (o: option A) (i : positive) (v: A),
+ In (xO i, v) (xelements (Node m1 o m2) xH) -> In (i, v) (xelements m1 xH).
+ Proof.
+ destruct o; simpl; intros; destruct (in_app_or _ _ _ H).
+ apply xelements_oo; auto.
+ destruct (in_inv H0).
+ congruence.
+ absurd (In (xO i, v) (xelements m2 3)); auto; apply xelements_oi; auto.
+ apply xelements_oo; auto.
+ absurd (In (xO i, v) (xelements m2 3)); auto; apply xelements_oi; auto.
+ Qed.
+
+ Lemma xelements_hi :
+ forall (A: Set) (m: t A) (i : positive) (v: A),
+ ~In (xH, v) (xelements m (xI i)).
+ Proof.
+ induction m; intros.
+ simpl; auto.
+ destruct o; simpl; intro H; destruct (in_app_or _ _ _ H).
+ generalize H0; apply IHm1; auto.
+ destruct (in_inv H0).
+ congruence.
+ generalize H1; apply IHm2; auto.
+ generalize H0; apply IHm1; auto.
+ generalize H0; apply IHm2; auto.
+ Qed.
+
+ Lemma xelements_ho :
+ forall (A: Set) (m: t A) (i : positive) (v: A),
+ ~In (xH, v) (xelements m (xO i)).
+ Proof.
+ induction m; intros.
+ simpl; auto.
+ destruct o; simpl; intro H; destruct (in_app_or _ _ _ H).
+ generalize H0; apply IHm1; auto.
+ destruct (in_inv H0).
+ congruence.
+ generalize H1; apply IHm2; auto.
+ generalize H0; apply IHm1; auto.
+ generalize H0; apply IHm2; auto.
+ Qed.
+
+ Lemma get_xget_h :
+ forall (A: Set) (m: t A) (i: positive), get i m = xget i xH m.
+ Proof.
+ destruct i; simpl; auto.
+ Qed.
+
+ Lemma xelements_complete:
+ forall (A: Set) (i j : positive) (m: t A) (v: A),
+ In (i, v) (xelements m j) -> xget i j m = Some v.
+ Proof.
+ induction i; simpl; intros; destruct j; simpl.
+ apply IHi; apply xelements_ii; auto.
+ absurd (In (xI i, v) (xelements m (xO j))); auto; apply xelements_io.
+ destruct m.
+ simpl in H; tauto.
+ rewrite get_xget_h. apply IHi. apply (xelements_ih _ _ _ _ _ H).
+ absurd (In (xO i, v) (xelements m (xI j))); auto; apply xelements_oi.
+ apply IHi; apply xelements_oo; auto.
+ destruct m.
+ simpl in H; tauto.
+ rewrite get_xget_h. apply IHi. apply (xelements_oh _ _ _ _ _ H).
+ absurd (In (xH, v) (xelements m (xI j))); auto; apply xelements_hi.
+ absurd (In (xH, v) (xelements m (xO j))); auto; apply xelements_ho.
+ destruct m.
+ simpl in H; tauto.
+ destruct o; simpl in H; destruct (in_app_or _ _ _ H).
+ absurd (In (xH, v) (xelements m1 (xO xH))); auto; apply xelements_ho.
+ destruct (in_inv H0).
+ congruence.
+ absurd (In (xH, v) (xelements m2 (xI xH))); auto; apply xelements_hi.
+ absurd (In (xH, v) (xelements m1 (xO xH))); auto; apply xelements_ho.
+ absurd (In (xH, v) (xelements m2 (xI xH))); auto; apply xelements_hi.
+ Qed.
+
+ Theorem elements_complete:
+ forall (A: Set) (m: t A) (i: positive) (v: A),
+ In (i, v) (elements m) -> get i m = Some v.
+ Proof.
+ intros A m i v H.
+ unfold elements in H.
+ rewrite get_xget_h.
+ exact (xelements_complete i xH m v H).
+ Qed.
+
+ Lemma in_xelements:
+ forall (A: Set) (m: t A) (i k: positive) (v: A),
+ In (k, v) (xelements m i) ->
+ exists j, k = append i j.
+ Proof.
+ induction m; simpl; intros.
+ tauto.
+ assert (k = i \/ In (k, v) (xelements m1 (append i 2))
+ \/ In (k, v) (xelements m2 (append i 3))).
+ destruct o.
+ elim (in_app_or _ _ _ H); simpl; intuition.
+ replace k with i. tauto. congruence.
+ elim (in_app_or _ _ _ H); simpl; intuition.
+ elim H0; intro.
+ exists xH. rewrite append_neutral_r. auto.
+ elim H1; intro.
+ elim (IHm1 _ _ _ H2). intros k1 EQ. rewrite EQ.
+ rewrite <- append_assoc_0. exists (xO k1); auto.
+ elim (IHm2 _ _ _ H2). intros k1 EQ. rewrite EQ.
+ rewrite <- append_assoc_1. exists (xI k1); auto.
+ Qed.
+
+ Definition xkeys (A: Set) (m: t A) (i: positive) :=
+ List.map (@fst positive A) (xelements m i).
+
+ Lemma in_xkeys:
+ forall (A: Set) (m: t A) (i k: positive),
+ In k (xkeys m i) ->
+ exists j, k = append i j.
+ Proof.
+ unfold xkeys; intros.
+ elim (list_in_map_inv _ _ _ H). intros [k1 v1] [EQ IN].
+ simpl in EQ; subst k1. apply in_xelements with A m v1. auto.
+ Qed.
+
+ Remark list_append_cons_norepet:
+ forall (A: Set) (l1 l2: list A) (x: A),
+ list_norepet l1 -> list_norepet l2 -> list_disjoint l1 l2 ->
+ ~In x l1 -> ~In x l2 ->
+ list_norepet (l1 ++ x :: l2).
+ Proof.
+ intros. apply list_norepet_append_commut. simpl; constructor.
+ red; intros. elim (in_app_or _ _ _ H4); intro; tauto.
+ apply list_norepet_append; auto.
+ apply list_disjoint_sym; auto.
+ Qed.
+
+ Lemma append_injective:
+ forall i j1 j2, append i j1 = append i j2 -> j1 = j2.
+ Proof.
+ induction i; simpl; intros.
+ apply IHi. congruence.
+ apply IHi. congruence.
+ auto.
+ Qed.
+
+ Lemma xelements_keys_norepet:
+ forall (A: Set) (m: t A) (i: positive),
+ list_norepet (xkeys m i).
+ Proof.
+ induction m; unfold xkeys; simpl; fold xkeys; intros.
+ constructor.
+ assert (list_disjoint (xkeys m1 (append i 2)) (xkeys m2 (append i 3))).
+ red; intros; red; intro. subst y.
+ elim (in_xkeys _ _ _ H); intros j1 EQ1.
+ elim (in_xkeys _ _ _ H0); intros j2 EQ2.
+ rewrite EQ1 in EQ2.
+ rewrite <- append_assoc_0 in EQ2.
+ rewrite <- append_assoc_1 in EQ2.
+ generalize (append_injective _ _ _ EQ2). congruence.
+ assert (forall (m: t A) j,
+ j = 2%positive \/ j = 3%positive ->
+ ~In i (xkeys m (append i j))).
+ intros; red; intros.
+ elim (in_xkeys _ _ _ H1); intros k EQ.
+ assert (EQ1: append i xH = append (append i j) k).
+ rewrite append_neutral_r. auto.
+ elim H0; intro; subst j;
+ try (rewrite <- append_assoc_0 in EQ1);
+ try (rewrite <- append_assoc_1 in EQ1);
+ generalize (append_injective _ _ _ EQ1); congruence.
+ destruct o; rewrite list_append_map; simpl;
+ change (List.map (@fst positive A) (xelements m1 (append i 2)))
+ with (xkeys m1 (append i 2));
+ change (List.map (@fst positive A) (xelements m2 (append i 3)))
+ with (xkeys m2 (append i 3)).
+ apply list_append_cons_norepet; auto.
+ apply list_norepet_append; auto.
+ Qed.
+
+ Theorem elements_keys_norepet:
+ forall (A: Set) (m: t A),
+ list_norepet (List.map (@fst elt A) (elements m)).
+ Proof.
+ intros. change (list_norepet (xkeys m 1)). apply xelements_keys_norepet.
+ Qed.
+
+ Definition fold (A B : Set) (f: B -> positive -> A -> B) (tr: t A) (v: B) :=
+ List.fold_left (fun a p => f a (fst p) (snd p)) (elements tr) v.
+
+ Theorem fold_spec:
+ forall (A B: Set) (f: B -> positive -> A -> B) (v: B) (m: t A),
+ fold f m v =
+ List.fold_left (fun a p => f a (fst p) (snd p)) (elements m) v.
+ Proof.
+ intros; unfold fold; auto.
+ Qed.
+
+End PTree.
+
+(** * An implementation of maps over type [positive] *)
+
+Module PMap <: MAP.
+ Definition elt := positive.
+ Definition elt_eq := peq.
+
+ Definition t (A : Set) : Set := (A * PTree.t A)%type.
+
+ Definition init (A : Set) (x : A) :=
+ (x, PTree.empty A).
+
+ Definition get (A : Set) (i : positive) (m : t A) :=
+ match PTree.get i (snd m) with
+ | Some x => x
+ | None => fst m
+ end.
+
+ Definition set (A : Set) (i : positive) (x : A) (m : t A) :=
+ (fst m, PTree.set i x (snd m)).
+
+ Theorem gi:
+ forall (A: Set) (i: positive) (x: A), get i (init x) = x.
+ Proof.
+ intros. unfold init. unfold get. simpl. rewrite PTree.gempty. auto.
+ Qed.
+
+ Theorem gss:
+ forall (A: Set) (i: positive) (x: A) (m: t A), get i (set i x m) = x.
+ Proof.
+ intros. unfold get. unfold set. simpl. rewrite PTree.gss. auto.
+ Qed.
+
+ Theorem gso:
+ forall (A: Set) (i j: positive) (x: A) (m: t A),
+ i <> j -> get i (set j x m) = get i m.
+ Proof.
+ intros. unfold get. unfold set. simpl. rewrite PTree.gso; auto.
+ Qed.
+
+ Theorem gsspec:
+ forall (A: Set) (i j: positive) (x: A) (m: t A),
+ get i (set j x m) = if peq i j then x else get i m.
+ Proof.
+ intros. destruct (peq i j).
+ rewrite e. apply gss. auto.
+ apply gso. auto.
+ Qed.
+
+ Theorem gsident:
+ forall (A: Set) (i j: positive) (m: t A),
+ get j (set i (get i m) m) = get j m.
+ Proof.
+ intros. destruct (peq i j).
+ rewrite e. rewrite gss. auto.
+ rewrite gso; auto.
+ Qed.
+
+ Definition map (A B : Set) (f : A -> B) (m : t A) : t B :=
+ (f (fst m), PTree.map (fun _ => f) (snd m)).
+
+ Theorem gmap:
+ forall (A B: Set) (f: A -> B) (i: positive) (m: t A),
+ get i (map f m) = f(get i m).
+ Proof.
+ intros. unfold map. unfold get. simpl. rewrite PTree.gmap.
+ unfold option_map. destruct (PTree.get i (snd m)); auto.
+ Qed.
+
+End PMap.
+
+(** * An implementation of maps over any type that injects into type [positive] *)
+
+Module Type INDEXED_TYPE.
+ Variable t: Set.
+ Variable index: t -> positive.
+ Hypothesis index_inj: forall (x y: t), index x = index y -> x = y.
+ Variable eq: forall (x y: t), {x = y} + {x <> y}.
+End INDEXED_TYPE.
+
+Module IMap(X: INDEXED_TYPE).
+
+ Definition elt := X.t.
+ Definition elt_eq := X.eq.
+ Definition t : Set -> Set := PMap.t.
+ Definition init (A: Set) (x: A) := PMap.init x.
+ Definition get (A: Set) (i: X.t) (m: t A) := PMap.get (X.index i) m.
+ Definition set (A: Set) (i: X.t) (v: A) (m: t A) := PMap.set (X.index i) v m.
+ Definition map (A B: Set) (f: A -> B) (m: t A) : t B := PMap.map f m.
+
+ Lemma gi:
+ forall (A: Set) (x: A) (i: X.t), get i (init x) = x.
+ Proof.
+ intros. unfold get, init. apply PMap.gi.
+ Qed.
+
+ Lemma gss:
+ forall (A: Set) (i: X.t) (x: A) (m: t A), get i (set i x m) = x.
+ Proof.
+ intros. unfold get, set. apply PMap.gss.
+ Qed.
+
+ Lemma gso:
+ forall (A: Set) (i j: X.t) (x: A) (m: t A),
+ i <> j -> get i (set j x m) = get i m.
+ Proof.
+ intros. unfold get, set. apply PMap.gso.
+ red. intro. apply H. apply X.index_inj; auto.
+ Qed.
+
+ Lemma gsspec:
+ forall (A: Set) (i j: X.t) (x: A) (m: t A),
+ get i (set j x m) = if X.eq i j then x else get i m.
+ Proof.
+ intros. unfold get, set.
+ rewrite PMap.gsspec.
+ case (X.eq i j); intro.
+ subst j. rewrite peq_true. reflexivity.
+ rewrite peq_false. reflexivity.
+ red; intro. elim n. apply X.index_inj; auto.
+ Qed.
+
+ Lemma gmap:
+ forall (A B: Set) (f: A -> B) (i: X.t) (m: t A),
+ get i (map f m) = f(get i m).
+ Proof.
+ intros. unfold map, get. apply PMap.gmap.
+ Qed.
+
+End IMap.
+
+Module ZIndexed.
+ Definition t := Z.
+ Definition index (z: Z): positive :=
+ match z with
+ | Z0 => xH
+ | Zpos p => xO p
+ | Zneg p => xI p
+ end.
+ Lemma index_inj: forall (x y: Z), index x = index y -> x = y.
+ Proof.
+ unfold index; destruct x; destruct y; intros;
+ try discriminate; try reflexivity.
+ congruence.
+ congruence.
+ Qed.
+ Definition eq := zeq.
+End ZIndexed.
+
+Module ZMap := IMap(ZIndexed).
+
+Module NIndexed.
+ Definition t := N.
+ Definition index (n: N): positive :=
+ match n with
+ | N0 => xH
+ | Npos p => xO p
+ end.
+ Lemma index_inj: forall (x y: N), index x = index y -> x = y.
+ Proof.
+ unfold index; destruct x; destruct y; intros;
+ try discriminate; try reflexivity.
+ congruence.
+ Qed.
+ Lemma eq: forall (x y: N), {x = y} + {x <> y}.
+ Proof.
+ decide equality. apply peq.
+ Qed.
+End NIndexed.
+
+Module NMap := IMap(NIndexed).
+
+(** * An implementation of maps over any type with decidable equality *)
+
+Module Type EQUALITY_TYPE.
+ Variable t: Set.
+ Variable eq: forall (x y: t), {x = y} + {x <> y}.
+End EQUALITY_TYPE.
+
+Module EMap(X: EQUALITY_TYPE) <: MAP.
+
+ Definition elt := X.t.
+ Definition elt_eq := X.eq.
+ Definition t (A: Set) := X.t -> A.
+ Definition init (A: Set) (v: A) := fun (_: X.t) => v.
+ Definition get (A: Set) (x: X.t) (m: t A) := m x.
+ Definition set (A: Set) (x: X.t) (v: A) (m: t A) :=
+ fun (y: X.t) => if X.eq y x then v else m y.
+ Lemma gi:
+ forall (A: Set) (i: elt) (x: A), init x i = x.
+ Proof.
+ intros. reflexivity.
+ Qed.
+ Lemma gss:
+ forall (A: Set) (i: elt) (x: A) (m: t A), (set i x m) i = x.
+ Proof.
+ intros. unfold set. case (X.eq i i); intro.
+ reflexivity. tauto.
+ Qed.
+ Lemma gso:
+ forall (A: Set) (i j: elt) (x: A) (m: t A),
+ i <> j -> (set j x m) i = m i.
+ Proof.
+ intros. unfold set. case (X.eq i j); intro.
+ congruence. reflexivity.
+ Qed.
+ Lemma gsspec:
+ forall (A: Set) (i j: elt) (x: A) (m: t A),
+ get i (set j x m) = if elt_eq i j then x else get i m.
+ Proof.
+ intros. unfold get, set, elt_eq. reflexivity.
+ Qed.
+ Lemma gsident:
+ forall (A: Set) (i j: elt) (m: t A), get j (set i (get i m) m) = get j m.
+ Proof.
+ intros. unfold get, set. case (X.eq j i); intro.
+ congruence. reflexivity.
+ Qed.
+ Definition map (A B: Set) (f: A -> B) (m: t A) :=
+ fun (x: X.t) => f(m x).
+ Lemma gmap:
+ forall (A B: Set) (f: A -> B) (i: elt) (m: t A),
+ get i (map f m) = f(get i m).
+ Proof.
+ intros. unfold get, map. reflexivity.
+ Qed.
+ Lemma exten:
+ forall (A: Set) (m1 m2: t A),
+ (forall x: X.t, m1 x = m2 x) -> m1 = m2.
+ Proof.
+ intros. unfold t. apply extensionality. assumption.
+ Qed.
+End EMap.
+
+(** * Useful notations *)
+
+Notation "a ! b" := (PTree.get b a) (at level 1).
+Notation "a !! b" := (PMap.get b a) (at level 1).
+
+(* $Id: Maps.v,v 1.12.4.4 2006/01/07 11:46:55 xleroy Exp $ *)
diff --git a/lib/Ordered.v b/lib/Ordered.v
new file mode 100644
index 0000000..1747bbb
--- /dev/null
+++ b/lib/Ordered.v
@@ -0,0 +1,156 @@
+(** Constructions of ordered types, for use with the [FSet] functors
+ for finite sets. *)
+
+Require Import FSet.
+Require Import Coqlib.
+Require Import Maps.
+
+(** The ordered type of positive numbers *)
+
+Module OrderedPositive <: OrderedType.
+
+Definition t := positive.
+Definition eq (x y: t) := x = y.
+Definition lt := Plt.
+
+Lemma eq_refl : forall x : t, eq x x.
+Proof (@refl_equal t).
+Lemma eq_sym : forall x y : t, eq x y -> eq y x.
+Proof (@sym_equal t).
+Lemma eq_trans : forall x y z : t, eq x y -> eq y z -> eq x z.
+Proof (@trans_equal t).
+Lemma lt_trans : forall x y z : t, lt x y -> lt y z -> lt x z.
+Proof Plt_trans.
+Lemma lt_not_eq : forall x y : t, lt x y -> ~ eq x y.
+Proof Plt_ne.
+Lemma compare : forall x y : t, Compare lt eq x y.
+Proof.
+ intros. case (plt x y); intro.
+ apply Lt. auto.
+ case (peq x y); intro.
+ apply Eq. auto.
+ apply Gt. red; unfold Plt in *.
+ assert (Zpos x <> Zpos y). congruence. omega.
+Qed.
+
+End OrderedPositive.
+
+(** Indexed types (those that inject into [positive]) are ordered. *)
+
+Module OrderedIndexed(A: INDEXED_TYPE) <: OrderedType.
+
+Definition t := A.t.
+Definition eq (x y: t) := x = y.
+Definition lt (x y: t) := Plt (A.index x) (A.index y).
+
+Lemma eq_refl : forall x : t, eq x x.
+Proof (@refl_equal t).
+Lemma eq_sym : forall x y : t, eq x y -> eq y x.
+Proof (@sym_equal t).
+Lemma eq_trans : forall x y z : t, eq x y -> eq y z -> eq x z.
+Proof (@trans_equal t).
+
+Lemma lt_trans : forall x y z : t, lt x y -> lt y z -> lt x z.
+Proof.
+ unfold lt; intros. eapply Plt_trans; eauto.
+Qed.
+
+Lemma lt_not_eq : forall x y : t, lt x y -> ~ eq x y.
+Proof.
+ unfold lt; unfold eq; intros.
+ red; intro. subst y. apply Plt_strict with (A.index x). auto.
+Qed.
+
+Lemma compare : forall x y : t, Compare lt eq x y.
+Proof.
+ intros. case (OrderedPositive.compare (A.index x) (A.index y)); intro.
+ apply Lt. exact l.
+ apply Eq. red; red in e. apply A.index_inj; auto.
+ apply Gt. exact l.
+Qed.
+
+End OrderedIndexed.
+
+(** The product of two ordered types is ordered. *)
+
+Module OrderedPair (A B: OrderedType) <: OrderedType.
+
+Definition t := (A.t * B.t)%type.
+
+Definition eq (x y: t) :=
+ A.eq (fst x) (fst y) /\ B.eq (snd x) (snd y).
+
+Lemma eq_refl : forall x : t, eq x x.
+Proof.
+ intros; split; auto.
+Qed.
+
+Lemma eq_sym : forall x y : t, eq x y -> eq y x.
+Proof.
+ unfold eq; intros. intuition auto.
+Qed.
+
+Lemma eq_trans : forall x y z : t, eq x y -> eq y z -> eq x z.
+Proof.
+ unfold eq; intros. intuition eauto.
+Qed.
+
+Definition lt (x y: t) :=
+ A.lt (fst x) (fst y) \/
+ (A.eq (fst x) (fst y) /\ B.lt (snd x) (snd y)).
+
+Lemma lt_trans : forall x y z : t, lt x y -> lt y z -> lt x z.
+Proof.
+ unfold lt; intros.
+ elim H; elim H0; intros.
+
+ left. apply A.lt_trans with (fst y); auto.
+
+ left. elim H1; intros.
+ case (A.compare (fst x) (fst z)); intro.
+ assumption.
+ generalize (A.lt_not_eq H2); intro. elim H5.
+ apply A.eq_trans with (fst z). auto. auto.
+ generalize (@A.lt_not_eq (fst z) (fst y)); intro.
+ elim H5. apply A.lt_trans with (fst x); auto.
+ apply A.eq_sym; auto.
+
+ left. elim H2; intros.
+ case (A.compare (fst x) (fst z)); intro.
+ assumption.
+ generalize (A.lt_not_eq H1); intro. elim H5.
+ apply A.eq_trans with (fst x).
+ apply A.eq_sym. auto. auto.
+ generalize (@A.lt_not_eq (fst y) (fst x)); intro.
+ elim H5. apply A.lt_trans with (fst z); auto.
+ apply A.eq_sym; auto.
+
+ right. elim H1; elim H2; intros.
+ split. apply A.eq_trans with (fst y); auto.
+ apply B.lt_trans with (snd y); auto.
+Qed.
+
+Lemma lt_not_eq : forall x y : t, lt x y -> ~ eq x y.
+Proof.
+ unfold lt, eq, not; intros.
+ elim H0; intros.
+ elim H; intro.
+ apply (@A.lt_not_eq _ _ H3 H1).
+ elim H3; intros.
+ apply (@B.lt_not_eq _ _ H5 H2).
+Qed.
+
+Lemma compare : forall x y : t, Compare lt eq x y.
+Proof.
+ intros.
+ case (A.compare (fst x) (fst y)); intro.
+ apply Lt. red. left. auto.
+ case (B.compare (snd x) (snd y)); intro.
+ apply Lt. red. right. tauto.
+ apply Eq. red. tauto.
+ apply Gt. red. right. split. apply A.eq_sym. auto. auto.
+ apply Gt. red. left. auto.
+Qed.
+
+End OrderedPair.
+
diff --git a/lib/Sets.v b/lib/Sets.v
new file mode 100644
index 0000000..bfc49b1
--- /dev/null
+++ b/lib/Sets.v
@@ -0,0 +1,190 @@
+(** Finite sets. This module implements finite sets over any type
+ that is equipped with a tree (partial finite mapping) structure.
+ The set structure forms a semi-lattice, ordered by set inclusion.
+
+ It would have been better to use the [FSet] library, which provides
+ sets over any totally ordered type. However, there are technical
+ mismatches between the [FSet] export signature and our signature for
+ semi-lattices. For now, we keep this somewhat redundant
+ implementation of sets.
+*)
+
+Require Import Relations.
+Require Import Coqlib.
+Require Import Maps.
+Require Import Lattice.
+
+Set Implicit Arguments.
+
+Module MakeSet (P: TREE) <: SEMILATTICE.
+
+(** Sets of elements of type [P.elt] are implemented as a partial mapping
+ from [P.elt] to the one-element type [unit]. *)
+
+ Definition elt := P.elt.
+
+ Definition t := P.t unit.
+
+ Lemma eq: forall (a b: t), {a=b} + {a<>b}.
+ Proof.
+ unfold t; intros. apply P.eq.
+ intros. left. destruct x; destruct y; auto.
+ Qed.
+
+ Definition empty := P.empty unit.
+
+ Definition mem (r: elt) (s: t) :=
+ match P.get r s with None => false | Some _ => true end.
+
+ Definition add (r: elt) (s: t) := P.set r tt s.
+
+ Definition remove (r: elt) (s: t) := P.remove r s.
+
+ Definition union (s1 s2: t) :=
+ P.combine
+ (fun e1 e2 =>
+ match e1, e2 with
+ | None, None => None
+ | _, _ => Some tt
+ end)
+ s1 s2.
+
+ Lemma mem_empty:
+ forall r, mem r empty = false.
+ Proof.
+ intro; unfold mem, empty. rewrite P.gempty. auto.
+ Qed.
+
+ Lemma mem_add_same:
+ forall r s, mem r (add r s) = true.
+ Proof.
+ intros; unfold mem, add. rewrite P.gss. auto.
+ Qed.
+
+ Lemma mem_add_other:
+ forall r r' s, r <> r' -> mem r' (add r s) = mem r' s.
+ Proof.
+ intros; unfold mem, add. rewrite P.gso; auto.
+ Qed.
+
+ Lemma mem_remove_same:
+ forall r s, mem r (remove r s) = false.
+ Proof.
+ intros; unfold mem, remove. rewrite P.grs; auto.
+ Qed.
+
+ Lemma mem_remove_other:
+ forall r r' s, r <> r' -> mem r' (remove r s) = mem r' s.
+ Proof.
+ intros; unfold mem, remove. rewrite P.gro; auto.
+ Qed.
+
+ Lemma mem_union:
+ forall r s1 s2, mem r (union s1 s2) = (mem r s1 || mem r s2).
+ Proof.
+ intros; unfold union, mem. rewrite P.gcombine.
+ case (P.get r s1); case (P.get r s2); auto.
+ auto.
+ Qed.
+
+ Definition elements (s: t) :=
+ List.map (@fst elt unit) (P.elements s).
+
+ Lemma elements_correct:
+ forall r s, mem r s = true -> In r (elements s).
+ Proof.
+ intros until s. unfold mem, elements. caseEq (P.get r s).
+ intros. change r with (fst (r, u)). apply in_map.
+ apply P.elements_correct. auto.
+ intros; discriminate.
+ Qed.
+
+ Lemma elements_complete:
+ forall r s, In r (elements s) -> mem r s = true.
+ Proof.
+ unfold mem, elements. intros.
+ generalize (list_in_map_inv _ _ _ H).
+ intros [p [EQ IN]].
+ destruct p. simpl in EQ. subst r.
+ rewrite (P.elements_complete _ _ _ IN). auto.
+ Qed.
+
+ Definition fold (A: Set) (f: A -> elt -> A) (s: t) (x: A) :=
+ P.fold (fun (x: A) (r: elt) (z: unit) => f x r) s x.
+
+ Lemma fold_spec:
+ forall (A: Set) (f: A -> elt -> A) (s: t) (x: A),
+ fold f s x = List.fold_left f (elements s) x.
+ Proof.
+ intros. unfold fold. rewrite P.fold_spec.
+ unfold elements. generalize x; generalize (P.elements s).
+ induction l; simpl; auto.
+ Qed.
+
+ Definition for_all (f: elt -> bool) (s: t) :=
+ fold (fun b x => andb b (f x)) s true.
+
+ Lemma for_all_spec:
+ forall f s x,
+ for_all f s = true -> mem x s = true -> f x = true.
+ Proof.
+ intros until x. unfold for_all. rewrite fold_spec.
+ assert (forall l b0,
+ fold_left (fun (b : bool) (x : elt) => b && f x) l b0 = true ->
+ b0 = true).
+ induction l; simpl; intros.
+ auto.
+ generalize (IHl _ H). intro.
+ elim (andb_prop _ _ H0); intros. auto.
+ assert (forall l,
+ fold_left (fun (b : bool) (x : elt) => b && f x) l true = true ->
+ In x l -> f x = true).
+ induction l; simpl; intros.
+ elim H1.
+ generalize (H _ _ H0); intro.
+ elim H1; intros.
+ subst x. auto.
+ apply IHl. rewrite H2 in H0; auto. auto.
+ intros. eapply H0; eauto.
+ apply elements_correct. auto.
+ Qed.
+
+ Definition ge (s1 s2: t) : Prop :=
+ forall r, mem r s2 = true -> mem r s1 = true.
+
+ Lemma ge_refl: forall x, ge x x.
+ Proof.
+ unfold ge; intros. auto.
+ Qed.
+
+ Lemma ge_trans: forall x y z, ge x y -> ge y z -> ge x z.
+ Proof.
+ unfold ge; intros. auto.
+ Qed.
+
+ Definition bot := empty.
+ Definition lub := union.
+
+ Lemma ge_bot: forall (x:t), ge x bot.
+ Proof.
+ unfold ge; intros. rewrite mem_empty in H. discriminate.
+ Qed.
+
+ Lemma lub_commut: forall (x y: t), lub x y = lub y x.
+ Proof.
+ intros. unfold lub; unfold union. apply P.combine_commut.
+ intros; case i; case j; auto.
+ Qed.
+
+ Lemma ge_lub_left: forall (x y: t), ge (lub x y) x.
+ Proof.
+ unfold ge, lub; intros.
+ rewrite mem_union. rewrite H. reflexivity.
+ Qed.
+
+ Lemma ge_lub_right: forall (x y: t), ge (lub x y) y.
+ Proof.
+ intros. rewrite lub_commut. apply ge_lub_left.
+ Qed.
+
+End MakeSet.
diff --git a/lib/union_find.v b/lib/union_find.v
new file mode 100644
index 0000000..61817d7
--- /dev/null
+++ b/lib/union_find.v
@@ -0,0 +1,537 @@
+(** A purely functional union-find algorithm *)
+
+Require Import Wf.
+
+(** The ``union-find'' algorithm is used to represent equivalence classes
+ over a given type. It maintains a data structure representing a partition
+ of the type into equivalence classes. Three operations are provided:
+- [empty], which returns the finest partition: each element of the type
+ is equivalent to itself only.
+- [repr part x] returns a canonical representative for the equivalence
+ class of element [x] in partition [part]. Two elements [x] and [y]
+ are in the same equivalence class if and only if
+ [repr part x = repr part y].
+- [identify part x y] returns a new partition where the equivalence
+ classes of [x] and [y] are merged, and all equivalences valid in [part]
+ are still valid.
+
+ The partitions are represented by partial mappings from elements
+ to elements. If [part] maps [x] to [y], this means that [x] and [y]
+ are in the same equivalence class. The canonical representative
+ of the class of [x] is obtained by iteratively following these mappings
+ until an element not mapped to anything is reached; this element is the
+ canonical representative, as returned by [repr].
+
+ In algorithm textbooks, the mapping is maintained imperatively by
+ storing pointers within elements. Here, we give a purely functional
+ presentation where the mapping is a separate functional data structure.
+*)
+
+Ltac CaseEq name :=
+ generalize (refl_equal name); pattern name at -1 in |- *; case name.
+
+Ltac IntroElim :=
+ match goal with
+ | |- (forall id : exists x : _, _, _) =>
+ intro id; elim id; clear id; IntroElim
+ | |- (forall id : _ /\ _, _) => intro id; elim id; clear id; IntroElim
+ | |- (forall id : _ \/ _, _) => intro id; elim id; clear id; IntroElim
+ | |- (_ -> _) => intro; IntroElim
+ | _ => idtac
+ end.
+
+Ltac MyElim n := elim n; IntroElim.
+
+(** The elements of equivalence classes are represented by the following
+ signature: a type with a decidable equality. *)
+
+Module Type ELEMENT.
+ Variable T: Set.
+ Variable eq: forall (a b: T), {a = b} + {a <> b}.
+End ELEMENT.
+
+(** The mapping structure over elements is represented by the following
+ signature. *)
+
+Module Type MAP.
+ Variable elt: Set.
+ Variable T: Set.
+ Variable empty: T.
+ Variable get: elt -> T -> option elt.
+ Variable add: elt -> elt -> T -> T.
+
+ Hypothesis get_empty: forall (x: elt), get x empty = None.
+ Hypothesis get_add_1:
+ forall (x y: elt) (m: T), get x (add x y m) = Some y.
+ Hypothesis get_add_2:
+ forall (x y z: elt) (m: T), z <> x -> get z (add x y m) = get z m.
+End MAP.
+
+(** Our implementation of union-find is a functor, parameterized by
+ a structure for elements and a structure for maps. It returns a
+ module with the following structure. *)
+
+Module Type UNIONFIND.
+ Variable elt: Set.
+ (** The type of partitions. *)
+ Variable T: Set.
+
+ (** The operations over partitions. *)
+ Variable empty: T.
+ Variable repr: T -> elt -> elt.
+ Variable identify: T -> elt -> elt -> T.
+
+ (** The relation implied by the partition [m]. *)
+ Definition sameclass (m: T) (x y: elt) : Prop := repr m x = repr m y.
+
+ (* [sameclass] is an equivalence relation *)
+ Hypothesis sameclass_refl:
+ forall (m: T) (x: elt), sameclass m x x.
+ Hypothesis sameclass_sym:
+ forall (m: T) (x y: elt), sameclass m x y -> sameclass m y x.
+ Hypothesis sameclass_trans:
+ forall (m: T) (x y z: elt),
+ sameclass m x y -> sameclass m y z -> sameclass m x z.
+
+ (* [repr m x] is a canonical representative of the equivalence class
+ of [x] in partition [m]. *)
+ Hypothesis repr_repr:
+ forall (m: T) (x: elt), repr m (repr m x) = repr m x.
+ Hypothesis sameclass_repr:
+ forall (m: T) (x: elt), sameclass m x (repr m x).
+
+ (* [empty] is the finest partition *)
+ Hypothesis repr_empty:
+ forall (x: elt), repr empty x = x.
+ Hypothesis sameclass_empty:
+ forall (x y: elt), sameclass empty x y -> x = y.
+
+ (* [identify] preserves existing equivalences and adds an equivalence
+ between the two elements provided. *)
+ Hypothesis sameclass_identify_1:
+ forall (m: T) (x y: elt), sameclass (identify m x y) x y.
+ Hypothesis sameclass_identify_2:
+ forall (m: T) (x y u v: elt),
+ sameclass m u v -> sameclass (identify m x y) u v.
+
+End UNIONFIND.
+
+(** Implementation of the union-find algorithm. *)
+
+Module Unionfind (E: ELEMENT) (M: MAP with Definition elt := E.T)
+ <: UNIONFIND with Definition elt := E.T.
+
+Definition elt := E.T.
+
+(* A set of equivalence classes over [elt] is represented by a map [m].
+- [M.get a m = Some a'] means that [a] is in the same class as [a'].
+- [M.get a m = None] means that [a] is the canonical representative
+ for its equivalence class.
+*)
+
+(** Such a map induces an ordering over type [elt]:
+ [repr_order m a a'] if and only if [M.get a' m = Some a].
+ This ordering must be well founded (no cycles). *)
+
+Definition repr_order (m: M.T) (a a': elt) : Prop :=
+ M.get a' m = Some a.
+
+(** The canonical representative of an element.
+ Needs Noetherian recursion. *)
+
+Lemma option_sum:
+ forall (x: option elt), {y: elt | x = Some y} + {x = None}.
+Proof.
+ intro x. case x.
+ left. exists e. auto.
+ right. auto.
+Qed.
+
+Definition repr_rec
+ (m: M.T) (a: elt) (rec: forall b: elt, repr_order m b a -> elt) :=
+ match option_sum (M.get a m) with
+ | inleft (exist b P) => rec b P
+ | inright _ => a
+ end.
+
+Definition repr_aux
+ (m: M.T) (wf: well_founded (repr_order m)) (a: elt) : elt :=
+ Fix wf (fun (_: elt) => elt) (repr_rec m) a.
+
+Lemma repr_rec_ext:
+ forall (m: M.T) (x: elt) (f g: forall y:elt, repr_order m y x -> elt),
+ (forall (y: elt) (p: repr_order m y x), f y p = g y p) ->
+ repr_rec m x f = repr_rec m x g.
+Proof.
+ intros. unfold repr_rec.
+ case (option_sum (M.get x m)).
+ intros. elim s; intros. apply H.
+ intros. auto.
+Qed.
+
+Lemma repr_aux_none:
+ forall (m: M.T) (wf: well_founded (repr_order m)) (a: elt),
+ M.get a m = None ->
+ repr_aux m wf a = a.
+Proof.
+ intros.
+ generalize (Fix_eq wf (fun (_:elt) => elt) (repr_rec m) (repr_rec_ext m) a).
+ intro. unfold repr_aux. rewrite H0.
+ unfold repr_rec.
+ case (option_sum (M.get a m)).
+ intro s; elim s; intros.
+ rewrite H in p; discriminate.
+ intros. auto.
+Qed.
+
+Lemma repr_aux_some:
+ forall (m: M.T) (wf: well_founded (repr_order m)) (a a': elt),
+ M.get a m = Some a' ->
+ repr_aux m wf a = repr_aux m wf a'.
+Proof.
+ intros.
+ generalize (Fix_eq wf (fun (_:elt) => elt) (repr_rec m) (repr_rec_ext m) a).
+ intro. unfold repr_aux. rewrite H0. unfold repr_rec.
+ case (option_sum (M.get a m)).
+ intro s; elim s; intros.
+ rewrite H in p. injection p; intros. rewrite H1. auto.
+ intros. rewrite H in e. discriminate.
+Qed.
+
+Lemma repr_aux_canon:
+ forall (m: M.T) (wf: well_founded (repr_order m)) (a: elt),
+ M.get (repr_aux m wf a) m = None.
+Proof.
+ intros.
+ apply (well_founded_ind wf (fun (a: elt) => M.get (repr_aux m wf a) m = None)).
+ intros.
+ generalize (Fix_eq wf (fun (_:elt) => elt) (repr_rec m) (repr_rec_ext m) x).
+ intro. unfold repr_aux. rewrite H0.
+ unfold repr_rec.
+ case (option_sum (M.get x m)).
+ intro s; elim s; intros.
+ unfold repr_aux in H. apply H.
+ unfold repr_order. auto.
+ intro. auto.
+Qed.
+
+(** The empty partition (each element in its own class) is well founded. *)
+
+Lemma wf_empty:
+ well_founded (repr_order M.empty).
+Proof.
+ red. intro. apply Acc_intro.
+ intros b RO.
+ red in RO.
+ rewrite M.get_empty in RO.
+ discriminate.
+Qed.
+
+(** Merging two equivalence classes. *)
+
+Section IDENTIFY.
+
+Variable m: M.T.
+Hypothesis mwf: well_founded (repr_order m).
+Variable a b: elt.
+Hypothesis a_diff_b: a <> b.
+Hypothesis a_canon: M.get a m = None.
+Hypothesis b_canon: M.get b m = None.
+
+(** Identifying two distinct canonical representatives [a] and [b]
+ is achieved by mapping one to the other. *)
+
+Definition identify_base: M.T := M.add a b m.
+
+Lemma identify_base_b_canon:
+ M.get b identify_base = None.
+Proof.
+ unfold identify_base.
+ rewrite M.get_add_2.
+ auto.
+ apply sym_not_eq. auto.
+Qed.
+
+Lemma identify_base_a_maps_to_b:
+ M.get a identify_base = Some b.
+Proof.
+ unfold identify_base. rewrite M.get_add_1. auto.
+Qed.
+
+Lemma identify_base_repr_order:
+ forall (x y: elt),
+ repr_order identify_base x y ->
+ repr_order m x y \/ (y = a /\ x = b).
+Proof.
+ intros x y. unfold identify_base.
+ unfold repr_order.
+ case (E.eq a y); intro.
+ rewrite e. rewrite M.get_add_1.
+ intro. injection H. intro. rewrite H0. tauto.
+ rewrite M.get_add_2; auto.
+Qed.
+
+(** [identify_base] preserves well foundation. *)
+
+Lemma identify_base_order_wf:
+ well_founded (repr_order identify_base).
+Proof.
+ red.
+ cut (forall (x: elt), Acc (repr_order m) x -> Acc (repr_order identify_base) x).
+ intro CUT. intro x. apply CUT. apply mwf.
+
+ induction 1.
+ apply Acc_intro. intros.
+ MyElim (identify_base_repr_order y x H1).
+ apply H0; auto.
+ rewrite H3.
+ apply Acc_intro.
+ intros z H4.
+ red in H4. rewrite identify_base_b_canon in H4. discriminate.
+Qed.
+
+Lemma identify_aux_decomp:
+ forall (x: elt),
+ (M.get x m = None /\ M.get x identify_base = None)
+ \/ (x = a /\ M.get x m = None /\ M.get x identify_base = Some b)
+ \/ (exists y, M.get x m = Some y /\ M.get x identify_base = Some y).
+Proof.
+ intro x.
+ unfold identify_base.
+ case (E.eq a x); intro.
+ rewrite <- e. rewrite M.get_add_1.
+ tauto.
+ rewrite M.get_add_2; auto.
+ case (M.get x m); intros.
+ right; right; exists e; tauto.
+ tauto.
+Qed.
+
+Lemma identify_base_repr:
+ forall (x: elt),
+ repr_aux identify_base identify_base_order_wf x =
+ (if E.eq (repr_aux m mwf x) a then b else repr_aux m mwf x).
+Proof.
+ intro x0.
+ apply (well_founded_ind mwf
+ (fun (x: elt) =>
+ repr_aux identify_base identify_base_order_wf x =
+ (if E.eq (repr_aux m mwf x) a then b else repr_aux m mwf x)));
+ intros.
+ MyElim (identify_aux_decomp x).
+
+ rewrite (repr_aux_none identify_base).
+ rewrite (repr_aux_none m mwf x).
+ case (E.eq x a); intro.
+ subst x.
+ rewrite identify_base_a_maps_to_b in H1.
+ discriminate.
+ auto. auto. auto.
+
+ subst x. rewrite (repr_aux_none m mwf a); auto.
+ case (E.eq a a); intro.
+ rewrite (repr_aux_some identify_base identify_base_order_wf a b).
+ rewrite (repr_aux_none identify_base identify_base_order_wf b).
+ auto. apply identify_base_b_canon. auto.
+ tauto.
+
+ rewrite (repr_aux_some identify_base identify_base_order_wf x x1); auto.
+ rewrite (repr_aux_some m mwf x x1); auto.
+Qed.
+
+Lemma identify_base_sameclass_1:
+ forall (x y: elt),
+ repr_aux m mwf x = repr_aux m mwf y ->
+ repr_aux identify_base identify_base_order_wf x =
+ repr_aux identify_base identify_base_order_wf y.
+Proof.
+ intros.
+ rewrite identify_base_repr.
+ rewrite identify_base_repr.
+ rewrite H.
+ auto.
+Qed.
+
+Lemma identify_base_sameclass_2:
+ forall (x y: elt),
+ repr_aux m mwf x = a ->
+ repr_aux m mwf y = b ->
+ repr_aux identify_base identify_base_order_wf x =
+ repr_aux identify_base identify_base_order_wf y.
+Proof.
+ intros.
+ rewrite identify_base_repr.
+ rewrite identify_base_repr.
+ rewrite H.
+ case (E.eq a a); intro.
+ case (E.eq (repr_aux m mwf y) a); auto.
+ tauto.
+Qed.
+
+End IDENTIFY.
+
+(** The union-find data structure is a record encapsulating a mapping
+ and a proof of well foundation. *)
+
+Record unionfind : Set := mkunionfind
+ { map: M.T; wf: well_founded (repr_order map) }.
+
+Definition T := unionfind.
+
+Definition repr (uf: unionfind) (a: elt) : elt :=
+ repr_aux (map uf) (wf uf) a.
+
+Lemma repr_repr:
+ forall (uf: unionfind) (a: elt), repr uf (repr uf a) = repr uf a.
+Proof.
+ intros.
+ unfold repr.
+ rewrite (repr_aux_none (map uf) (wf uf) (repr_aux (map uf) (wf uf) a)).
+ auto.
+ apply repr_aux_canon.
+Qed.
+
+Definition empty := mkunionfind M.empty wf_empty.
+
+(** [identify] computes canonical representatives for the two elements
+ and adds a mapping from one to the other, unless they are already
+ equal. *)
+
+Definition identify (uf: unionfind) (a b: elt) : unionfind :=
+ match E.eq (repr uf a) (repr uf b) with
+ | left EQ =>
+ uf
+ | right NOTEQ =>
+ mkunionfind
+ (identify_base (map uf) (repr uf a) (repr uf b))
+ (identify_base_order_wf (map uf) (wf uf)
+ (repr uf a) (repr uf b)
+ NOTEQ
+ (repr_aux_canon (map uf) (wf uf) b))
+ end.
+
+Definition sameclass (uf: unionfind) (a b: elt) : Prop :=
+ repr uf a = repr uf b.
+
+Lemma sameclass_refl:
+ forall (uf: unionfind) (a: elt), sameclass uf a a.
+Proof.
+ intros. red. auto.
+Qed.
+
+Lemma sameclass_sym:
+ forall (uf: unionfind) (a b: elt), sameclass uf a b -> sameclass uf b a.
+Proof.
+ intros. red. symmetry. exact H.
+Qed.
+
+Lemma sameclass_trans:
+ forall (uf: unionfind) (a b c: elt),
+ sameclass uf a b -> sameclass uf b c -> sameclass uf a c.
+Proof.
+ intros. red. transitivity (repr uf b). exact H. exact H0.
+Qed.
+
+Lemma sameclass_repr:
+ forall (uf: unionfind) (a: elt), sameclass uf a (repr uf a).
+Proof.
+ intros. red. symmetry. rewrite repr_repr. auto.
+Qed.
+
+Lemma repr_empty:
+ forall (a: elt), repr empty a = a.
+Proof.
+ intro a. unfold repr; unfold empty.
+ simpl.
+ apply repr_aux_none.
+ apply M.get_empty.
+Qed.
+
+Lemma sameclass_empty:
+ forall (a b: elt), sameclass empty a b -> a = b.
+Proof.
+ intros. red in H. rewrite repr_empty in H.
+ rewrite repr_empty in H. auto.
+Qed.
+
+Lemma sameclass_identify_2:
+ forall (uf: unionfind) (a b x y: elt),
+ sameclass uf x y -> sameclass (identify uf a b) x y.
+Proof.
+ intros.
+ unfold identify.
+ case (E.eq (repr uf a) (repr uf b)).
+ intro. auto.
+ intros; red; unfold repr; simpl.
+ apply identify_base_sameclass_1.
+ apply repr_aux_canon.
+ exact H.
+Qed.
+
+Lemma sameclass_identify_1:
+ forall (uf: unionfind) (a b: elt),
+ sameclass (identify uf a b) a b.
+Proof.
+ intros.
+ unfold identify.
+ case (E.eq (repr uf a) (repr uf b)).
+ intro. auto.
+ intros.
+ red; unfold repr; simpl.
+ apply identify_base_sameclass_2.
+ apply repr_aux_canon.
+ auto.
+ auto.
+Qed.
+
+End Unionfind.
+
+(* Example of use 1: with association lists *)
+
+(*
+
+Require Import List.
+
+Module AListMap(E: ELEMENT) : MAP.
+
+Definition elt := E.T.
+Definition T := list (elt * elt).
+Definition empty : T := nil.
+Fixpoint get (x: elt) (m: T) {struct m} : option elt :=
+ match m with
+ | nil => None
+ | (a,b) :: t =>
+ match E.eq x a with
+ | left _ => Some b
+ | right _ => get x t
+ end
+ end.
+Definition add (x y: elt) (m: T) := (x,y) :: m.
+
+Lemma get_empty: forall (x: elt), get x empty = None.
+Proof.
+ intro. unfold empty. simpl. auto.
+Qed.
+
+Lemma get_add_1:
+ forall (x y: elt) (m: T), get x (add x y m) = Some y.
+Proof.
+ intros. unfold add. simpl.
+ case (E.eq x x); intro.
+ auto.
+ tauto.
+Qed.
+
+Lemma get_add_2:
+ forall (x y z: elt) (m: T), z <> x -> get z (add x y m) = get z m.
+Proof.
+ intros. unfold add. simpl.
+ case (E.eq z x); intro.
+ subst z; tauto.
+ auto.
+Qed.
+
+End AListMap.
+
+*)
+
diff --git a/test/cminor/Makefile b/test/cminor/Makefile
new file mode 100644
index 0000000..35d3e07
--- /dev/null
+++ b/test/cminor/Makefile
@@ -0,0 +1,76 @@
+CCOMP=../../ccomp
+CPP=cpp -P
+CC=gcc
+CFLAGS=-g
+VPATH=../harness ../lib
+
+PROGS=fib integr qsort fft sha1 aes almabench manyargs
+
+all_s: $(PROGS:%=%.s)
+
+all: $(PROGS)
+
+$(PROGS:%=%.s): $(CCOMP)
+
+fib: fib.o mainfib.o
+ $(CC) $(CFLAGS) -o fib fib.o mainfib.o
+clean::
+ rm -f fib
+
+integr: integr.o mainintegr.o
+ $(CC) $(CFLAGS) -o integr integr.o mainintegr.o
+clean::
+ rm -f integr
+
+qsort: qsort.o mainqsort.o
+ $(CC) $(CFLAGS) -o qsort qsort.o mainqsort.o
+clean::
+ rm -f qsort
+
+fft: fft.o mainfft.o staticlib.o
+ $(CC) $(CFLAGS) -o fft fft.o mainfft.o staticlib.o -lm
+clean::
+ rm -f fft
+
+sha1: sha1.o mainsha1.o staticlib.o
+ $(CC) $(CFLAGS) -o sha1 sha1.o mainsha1.o staticlib.o
+clean::
+ rm -f sha1 sha1.cm
+
+aes: aes.o mainaes.o
+ $(CC) $(CFLAGS) -o aes aes.o mainaes.o
+clean::
+ rm -f aes aes.cm
+
+almabench: almabench.o mainalmabench.o staticlib.o
+ $(CC) $(CFLAGS) -o almabench almabench.o mainalmabench.o staticlib.o -lm
+clean::
+ rm -f almabench almabench.cm
+
+manyargs: manyargs.o mainmanyargs.o
+ $(CC) $(CFLAGS) -o manyargs manyargs.o mainmanyargs.o
+clean::
+ rm -f manyargs
+
+.SUFFIXES:
+
+.SUFFIXES: .cmp .cm .s .o .c .S
+
+.cmp.s:
+ $(CPP) $*.cmp > $*.cm
+ $(CCOMP) $(FLAGS) $*.cm
+
+.cm.s:
+ $(CCOMP) $(FLAGS) $*.cm
+
+.c.o:
+ $(CC) $(CFLAGS) -c $<
+
+.s.o:
+ $(AS) $(ASFLAGS) -o $*.o $<
+
+.S.o:
+ $(AS) $(ASFLAGS) -o $*.o $<
+
+clean::
+ rm -f *.s *.o *~
diff --git a/test/cminor/aes.cmp b/test/cminor/aes.cmp
new file mode 100644
index 0000000..35eabc4
--- /dev/null
+++ b/test/cminor/aes.cmp
@@ -0,0 +1,364 @@
+/* AES cipher. To be preprocessed with cpp -P. */
+
+#define GETU32(pt) int32[pt]
+#define PUTU32(ct,st) int32[ct] = st
+
+#define rk(n) int32[rk_ + (n) * 4]
+#define Te0(n) int32["Te0" + (n) * 4]
+#define Te1(n) int32["Te1" + (n) * 4]
+#define Te2(n) int32["Te2" + (n) * 4]
+#define Te3(n) int32["Te3" + (n) * 4]
+#define Te4(n) int32["Te4" + (n) * 4]
+#define Td0(n) int32["Td0" + (n) * 4]
+#define Td1(n) int32["Td1" + (n) * 4]
+#define Td2(n) int32["Td2" + (n) * 4]
+#define Td3(n) int32["Td3" + (n) * 4]
+#define Td4(n) int32["Td4" + (n) * 4]
+#define rcon(n) int32["rcon" + (n) * 4]
+
+/**
+ * Expand the cipher key into the encryption key schedule.
+ *
+ * @return the number of rounds for the given cipher key size.
+ */
+"rijndaelKeySetupEnc"(rk_, cipherKey, keyBits) : int -> int -> int -> int
+{
+ var i, temp;
+ i = 0;
+
+ rk(0) = GETU32(cipherKey );
+ rk(1) = GETU32(cipherKey + 4);
+ rk(2) = GETU32(cipherKey + 8);
+ rk(3) = GETU32(cipherKey + 12);
+ if (keyBits == 128) {
+ {{ loop {
+ temp = rk(3);
+ rk(4) = rk(0) ^
+ (Te4((temp >>u 16) & 0xff) & 0xff000000) ^
+ (Te4((temp >>u 8) & 0xff) & 0x00ff0000) ^
+ (Te4((temp ) & 0xff) & 0x0000ff00) ^
+ (Te4((temp >>u 24) ) & 0x000000ff) ^
+ rcon(i);
+ rk(5) = rk(1) ^ rk(4);
+ rk(6) = rk(2) ^ rk(5);
+ rk(7) = rk(3) ^ rk(6);
+ if ((i = i + 1) == 10) {
+ return 10;
+ }
+ rk_ = rk_ + 4 * 4;
+ } }}
+ }
+ rk(4) = GETU32(cipherKey + 16);
+ rk(5) = GETU32(cipherKey + 20);
+ if (keyBits == 192) {
+ {{ loop {
+ temp = rk( 5);
+ rk( 6) = rk( 0) ^
+ (Te4((temp >>u 16) & 0xff) & 0xff000000) ^
+ (Te4((temp >>u 8) & 0xff) & 0x00ff0000) ^
+ (Te4((temp ) & 0xff) & 0x0000ff00) ^
+ (Te4((temp >>u 24) ) & 0x000000ff) ^
+ rcon(i);
+ rk( 7) = rk( 1) ^ rk( 6);
+ rk( 8) = rk( 2) ^ rk( 7);
+ rk( 9) = rk( 3) ^ rk( 8);
+ if ((i = i + 1) == 8) {
+ return 12;
+ }
+ rk(10) = rk( 4) ^ rk( 9);
+ rk(11) = rk( 5) ^ rk(10);
+ rk_ = rk_ + 6 * 4;
+ } }}
+ }
+ rk(6) = GETU32(cipherKey + 24);
+ rk(7) = GETU32(cipherKey + 28);
+ if (keyBits == 256) {
+ {{ loop {
+ temp = rk( 7);
+ rk( 8) = rk( 0) ^
+ (Te4((temp >>u 16) & 0xff) & 0xff000000) ^
+ (Te4((temp >>u 8) & 0xff) & 0x00ff0000) ^
+ (Te4((temp ) & 0xff) & 0x0000ff00) ^
+ (Te4((temp >>u 24) ) & 0x000000ff) ^
+ rcon(i);
+ rk( 9) = rk( 1) ^ rk( 8);
+ rk(10) = rk( 2) ^ rk( 9);
+ rk(11) = rk( 3) ^ rk(10);
+ if ((i = i + 1) == 7) {
+ return 14;
+ }
+ temp = rk(11);
+ rk(12) = rk( 4) ^
+ (Te4((temp >>u 24) ) & 0xff000000) ^
+ (Te4((temp >>u 16) & 0xff) & 0x00ff0000) ^
+ (Te4((temp >>u 8) & 0xff) & 0x0000ff00) ^
+ (Te4((temp ) & 0xff) & 0x000000ff);
+ rk(13) = rk( 5) ^ rk(12);
+ rk(14) = rk( 6) ^ rk(13);
+ rk(15) = rk( 7) ^ rk(14);
+
+ rk_ = rk_ + 8 * 4;
+ } }}
+ }
+ return 0;
+}
+
+/**
+ * Expand the cipher key into the decryption key schedule.
+ *
+ * @return the number of rounds for the given cipher key size.
+ */
+"rijndaelKeySetupDec"(rk_, cipherKey, keyBits) : int -> int -> int -> int
+{
+ var Nr, i, j, temp;
+
+ /* expand the cipher key: */
+ Nr = "rijndaelKeySetupEnc"(rk_, cipherKey, keyBits) : int -> int -> int -> int;
+ /* invert the order of the round keys: */
+ i = 0; j = 4 * Nr;
+ {{ loop {
+ if (! (i < j)) exit;
+ temp = rk(i ); rk(i ) = rk(j ); rk(j ) = temp;
+ temp = rk(i + 1); rk(i + 1) = rk(j + 1); rk(j + 1) = temp;
+ temp = rk(i + 2); rk(i + 2) = rk(j + 2); rk(j + 2) = temp;
+ temp = rk(i + 3); rk(i + 3) = rk(j + 3); rk(j + 3) = temp;
+ i = i + 4;
+ j = j - 4;
+ } }}
+ /* apply the inverse MixColumn transform to all round keys but the first and the last: */
+ i = 1;
+ {{ loop {
+ if (! (i < Nr)) exit;
+ rk_ = rk_ + 4 * 4;
+ rk(0) =
+ Td0(Te4((rk(0) >>u 24) ) & 0xff) ^
+ Td1(Te4((rk(0) >>u 16) & 0xff) & 0xff) ^
+ Td2(Te4((rk(0) >>u 8) & 0xff) & 0xff) ^
+ Td3(Te4((rk(0) ) & 0xff) & 0xff);
+ rk(1) =
+ Td0(Te4((rk(1) >>u 24) ) & 0xff) ^
+ Td1(Te4((rk(1) >>u 16) & 0xff) & 0xff) ^
+ Td2(Te4((rk(1) >>u 8) & 0xff) & 0xff) ^
+ Td3(Te4((rk(1) ) & 0xff) & 0xff);
+ rk(2) =
+ Td0(Te4((rk(2) >>u 24) ) & 0xff) ^
+ Td1(Te4((rk(2) >>u 16) & 0xff) & 0xff) ^
+ Td2(Te4((rk(2) >>u 8) & 0xff) & 0xff) ^
+ Td3(Te4((rk(2) ) & 0xff) & 0xff);
+ rk(3) =
+ Td0(Te4((rk(3) >>u 24) ) & 0xff) ^
+ Td1(Te4((rk(3) >>u 16) & 0xff) & 0xff) ^
+ Td2(Te4((rk(3) >>u 8) & 0xff) & 0xff) ^
+ Td3(Te4((rk(3) ) & 0xff) & 0xff);
+ i = i + 1;
+ } }}
+ return Nr;
+}
+
+"rijndaelEncrypt"(rk_, Nr, pt, ct): int -> int -> int -> int -> void
+{
+ var s0, s1, s2, s3, t0, t1, t2, t3, r;
+
+ /*
+ * map byte array block to cipher state
+ * and add initial round key:
+ */
+ s0 = GETU32(pt ) ^ rk(0);
+ s1 = GETU32(pt + 4) ^ rk(1);
+ s2 = GETU32(pt + 8) ^ rk(2);
+ s3 = GETU32(pt + 12) ^ rk(3);
+ /*
+ * Nr - 1 full rounds:
+ */
+ r = Nr >>u 1;
+ {{ loop {
+ t0 =
+ Te0((s0 >>u 24) ) ^
+ Te1((s1 >>u 16) & 0xff) ^
+ Te2((s2 >>u 8) & 0xff) ^
+ Te3((s3 ) & 0xff) ^
+ rk(4);
+ t1 =
+ Te0((s1 >>u 24) ) ^
+ Te1((s2 >>u 16) & 0xff) ^
+ Te2((s3 >>u 8) & 0xff) ^
+ Te3((s0 ) & 0xff) ^
+ rk(5);
+ t2 =
+ Te0((s2 >>u 24) ) ^
+ Te1((s3 >>u 16) & 0xff) ^
+ Te2((s0 >>u 8) & 0xff) ^
+ Te3((s1 ) & 0xff) ^
+ rk(6);
+ t3 =
+ Te0((s3 >>u 24) ) ^
+ Te1((s0 >>u 16) & 0xff) ^
+ Te2((s1 >>u 8) & 0xff) ^
+ Te3((s2 ) & 0xff) ^
+ rk(7);
+
+ rk_ = rk_ + 8 * 4;
+ if ((r = r - 1) == 0) exit;
+
+ s0 =
+ Te0((t0 >>u 24) ) ^
+ Te1((t1 >>u 16) & 0xff) ^
+ Te2((t2 >>u 8) & 0xff) ^
+ Te3((t3 ) & 0xff) ^
+ rk(0);
+ s1 =
+ Te0((t1 >>u 24) ) ^
+ Te1((t2 >>u 16) & 0xff) ^
+ Te2((t3 >>u 8) & 0xff) ^
+ Te3((t0 ) & 0xff) ^
+ rk(1);
+ s2 =
+ Te0((t2 >>u 24) ) ^
+ Te1((t3 >>u 16) & 0xff) ^
+ Te2((t0 >>u 8) & 0xff) ^
+ Te3((t1 ) & 0xff) ^
+ rk(2);
+ s3 =
+ Te0((t3 >>u 24) ) ^
+ Te1((t0 >>u 16) & 0xff) ^
+ Te2((t1 >>u 8) & 0xff) ^
+ Te3((t2 ) & 0xff) ^
+ rk(3);
+ } }}
+ /*
+ * apply last round and
+ * map cipher state to byte array block:
+ */
+ s0 =
+ (Te4((t0 >>u 24) ) & 0xff000000) ^
+ (Te4((t1 >>u 16) & 0xff) & 0x00ff0000) ^
+ (Te4((t2 >>u 8) & 0xff) & 0x0000ff00) ^
+ (Te4((t3 ) & 0xff) & 0x000000ff) ^
+ rk(0);
+ PUTU32(ct , s0);
+ s1 =
+ (Te4((t1 >>u 24) ) & 0xff000000) ^
+ (Te4((t2 >>u 16) & 0xff) & 0x00ff0000) ^
+ (Te4((t3 >>u 8) & 0xff) & 0x0000ff00) ^
+ (Te4((t0 ) & 0xff) & 0x000000ff) ^
+ rk(1);
+ PUTU32(ct + 4, s1);
+ s2 =
+ (Te4((t2 >>u 24) ) & 0xff000000) ^
+ (Te4((t3 >>u 16) & 0xff) & 0x00ff0000) ^
+ (Te4((t0 >>u 8) & 0xff) & 0x0000ff00) ^
+ (Te4((t1 ) & 0xff) & 0x000000ff) ^
+ rk(2);
+ PUTU32(ct + 8, s2);
+ s3 =
+ (Te4((t3 >>u 24) ) & 0xff000000) ^
+ (Te4((t0 >>u 16) & 0xff) & 0x00ff0000) ^
+ (Te4((t1 >>u 8) & 0xff) & 0x0000ff00) ^
+ (Te4((t2 ) & 0xff) & 0x000000ff) ^
+ rk(3);
+ PUTU32(ct + 12, s3);
+}
+
+"rijndaelDecrypt"(rk_, Nr, ct, pt) : int -> int -> int -> int -> void
+{
+ var s0, s1, s2, s3, t0, t1, t2, t3, r;
+
+ /*
+ * map byte array block to cipher state
+ * and add initial round key:
+ */
+ s0 = GETU32(ct ) ^ rk(0);
+ s1 = GETU32(ct + 4) ^ rk(1);
+ s2 = GETU32(ct + 8) ^ rk(2);
+ s3 = GETU32(ct + 12) ^ rk(3);
+ /*
+ * Nr - 1 full rounds:
+ */
+ r = Nr >>u 1;
+ {{ loop {
+ t0 =
+ Td0((s0 >>u 24) ) ^
+ Td1((s3 >>u 16) & 0xff) ^
+ Td2((s2 >>u 8) & 0xff) ^
+ Td3((s1 ) & 0xff) ^
+ rk(4);
+ t1 =
+ Td0((s1 >>u 24) ) ^
+ Td1((s0 >>u 16) & 0xff) ^
+ Td2((s3 >>u 8) & 0xff) ^
+ Td3((s2 ) & 0xff) ^
+ rk(5);
+ t2 =
+ Td0((s2 >>u 24) ) ^
+ Td1((s1 >>u 16) & 0xff) ^
+ Td2((s0 >>u 8) & 0xff) ^
+ Td3((s3 ) & 0xff) ^
+ rk(6);
+ t3 =
+ Td0((s3 >>u 24) ) ^
+ Td1((s2 >>u 16) & 0xff) ^
+ Td2((s1 >>u 8) & 0xff) ^
+ Td3((s0 ) & 0xff) ^
+ rk(7);
+
+ rk_ = rk_ + 8 * 4;
+ if ((r = r - 1) == 0) exit;
+
+ s0 =
+ Td0((t0 >>u 24) ) ^
+ Td1((t3 >>u 16) & 0xff) ^
+ Td2((t2 >>u 8) & 0xff) ^
+ Td3((t1 ) & 0xff) ^
+ rk(0);
+ s1 =
+ Td0((t1 >>u 24) ) ^
+ Td1((t0 >>u 16) & 0xff) ^
+ Td2((t3 >>u 8) & 0xff) ^
+ Td3((t2 ) & 0xff) ^
+ rk(1);
+ s2 =
+ Td0((t2 >>u 24) ) ^
+ Td1((t1 >>u 16) & 0xff) ^
+ Td2((t0 >>u 8) & 0xff) ^
+ Td3((t3 ) & 0xff) ^
+ rk(2);
+ s3 =
+ Td0((t3 >>u 24) ) ^
+ Td1((t2 >>u 16) & 0xff) ^
+ Td2((t1 >>u 8) & 0xff) ^
+ Td3((t0 ) & 0xff) ^
+ rk(3);
+ } }}
+ /*
+ * apply last round and
+ * map cipher state to byte array block:
+ */
+ s0 =
+ (Td4((t0 >>u 24) ) & 0xff000000) ^
+ (Td4((t3 >>u 16) & 0xff) & 0x00ff0000) ^
+ (Td4((t2 >>u 8) & 0xff) & 0x0000ff00) ^
+ (Td4((t1 ) & 0xff) & 0x000000ff) ^
+ rk(0);
+ PUTU32(pt , s0);
+ s1 =
+ (Td4((t1 >>u 24) ) & 0xff000000) ^
+ (Td4((t0 >>u 16) & 0xff) & 0x00ff0000) ^
+ (Td4((t3 >>u 8) & 0xff) & 0x0000ff00) ^
+ (Td4((t2 ) & 0xff) & 0x000000ff) ^
+ rk(1);
+ PUTU32(pt + 4, s1);
+ s2 =
+ (Td4((t2 >>u 24) ) & 0xff000000) ^
+ (Td4((t1 >>u 16) & 0xff) & 0x00ff0000) ^
+ (Td4((t0 >>u 8) & 0xff) & 0x0000ff00) ^
+ (Td4((t3 ) & 0xff) & 0x000000ff) ^
+ rk(2);
+ PUTU32(pt + 8, s2);
+ s3 =
+ (Td4((t3 >>u 24) ) & 0xff000000) ^
+ (Td4((t2 >>u 16) & 0xff) & 0x00ff0000) ^
+ (Td4((t1 >>u 8) & 0xff) & 0x0000ff00) ^
+ (Td4((t0 ) & 0xff) & 0x000000ff) ^
+ rk(3);
+ PUTU32(pt + 12, s3);
+}
diff --git a/test/cminor/almabench.cmp b/test/cminor/almabench.cmp
new file mode 100644
index 0000000..e9e8392
--- /dev/null
+++ b/test/cminor/almabench.cmp
@@ -0,0 +1,159 @@
+#define PI 3.14159265358979323846
+#define J2000 2451545.0
+#define JCENTURY 36525.0
+#define JMILLENIA 365250.0
+#define TWOPI (2.0 *f PI)
+#define A2R (PI /f 648000.0)
+#define R2H (12.0 /f PI)
+#define R2D (180.0 /f PI)
+#define GAUSSK 0.01720209895
+#define TEST_LOOPS 20
+#define TEST_LENGTH 36525
+#define sineps 0.3977771559319137
+#define coseps 0.9174820620691818
+
+/* Access to tables */
+#define amas(n) float64["amas" + (n) * 8]
+#define a(x,y) float64["a" + ((x) * 24 + (y) * 8)]
+#define dlm(x,y) float64["dlm" + ((x) * 24 + (y) * 8)]
+#define e(x,y) float64["e" + ((x) * 24 + (y) * 8)]
+#define pi(x,y) float64["pi" + ((x) * 24 + (y) * 8)]
+#define dinc(x,y) float64["dinc" + ((x) * 24 + (y) * 8)]
+#define omega(x,y) float64["omega" + ((x) * 24 + (y) * 8)]
+#define kp(x,y) float64["kp" + ((x) * 72 + (y) * 8)]
+#define ca(x,y) float64["ca" + ((x) * 72 + (y) * 8)]
+#define sa(x,y) float64["sa" + ((x) * 72 + (y) * 8)]
+#define kq(x,y) float64["kq" + ((x) * 80 + (y) * 8)]
+#define cl(x,y) float64["cl" + ((x) * 80 + (y) * 8)]
+#define sl(x,y) float64["sl" + ((x) * 80 + (y) * 8)]
+
+/* Function calls */
+#define cos(x) ("cos_static"(x): float -> float)
+#define sin(x) ("sin_static"(x): float -> float)
+#define atan2(x,y) ("atan2_static"(x,y): float -> float -> float)
+#define asin(x) ("asin_static"(x): float -> float)
+#define sqrt(x) ("sqrt_static"(x): float -> float)
+#define fmod(x,y) ("fmod_static"(x,y): float -> float -> float)
+#define anpm(x) ("anpm"(x) : float -> float)
+
+"anpm"(a): float -> float
+{
+ var w;
+ w = fmod(a,TWOPI);
+ if (absf(w) >=f PI)
+ w = w -f ((a <f 0.0) ? -f TWOPI : TWOPI);
+ return w;
+}
+
+"planetpv" (epoch_, np, pv_): int -> int -> int -> void
+{
+#define epoch(x) float64[epoch_ + (x) * 8]
+#define pv(x,y) float64[pv_ + (x) * 24 + (y) * 8]
+
+ var i, j, k;
+ var t, da, dl, de, dp, di;
+ var doh, dmu, arga, argl, am;
+ var ae, dae, ae2, at, r, v;
+ var si2, xq, xp, tl, xsw;
+ var xcw, xm2, xf, ci2, xms, xmc;
+ var xpxq2, x, y, z;
+
+ t = ((epoch(0) -f J2000) +f epoch(1)) /f JMILLENIA;
+
+ da = a(np,0) +f (a(np,1) +f a(np,2) *f t ) *f t;
+ dl = (3600.0 *f dlm(np,0) +f (dlm(np,1) +f dlm(np,2) *f t ) *f t ) *f A2R;
+ de = e(np,0) +f (e(np,1) +f e(np,2) *f t ) *f t;
+ dp = anpm((3600.0 *f pi(np,0) +f (pi(np,1) +f pi(np,2) *f t ) *f t ) *f A2R );
+ di = (3600.0 *f dinc(np,0) +f (dinc(np,1) +f dinc(np,2) *f t ) *f t ) *f A2R;
+ doh = anpm((3600.0 *f omega(np,0) +f (omega(np,1) +f omega(np,2) *f t ) *f t ) *f A2R );
+
+ dmu = 0.35953620 *f t;
+
+ k = 0;
+ {{ loop {
+ if (! (k < 8)) exit;
+ arga = kp(np,k) *f dmu;
+ argl = kq(np,k) *f dmu;
+ da = da +f (ca(np,k) *f cos(arga) +f sa(np,k) *f sin(arga)) *f 0.0000001;
+ dl = dl +f (cl(np,k) *f cos(argl) +f sl(np,k) *f sin(argl)) *f 0.0000001;
+ k = k + 1;
+ } }}
+
+ arga = kp(np,8) *f dmu;
+ da = da +f t *f (ca(np,8) *f cos(arga) +f sa(np,8) *f sin(arga)) *f 0.0000001;
+
+ k = 8;
+ {{ loop {
+ if (! (k <= 9)) exit;
+ argl = kq(np,k) *f dmu;
+ dl = dl +f t *f ( cl(np,k) *f cos(argl) +f sl(np,k) *f sin(argl) ) *f 0.0000001;
+ k = k + 1;
+ } }}
+
+ dl = "fmod_static"(dl,TWOPI) : float -> float -> float;
+
+ am = dl -f dp;
+ ae = am +f de *f sin(am);
+ k = 0;
+
+ {{ loop {
+ dae = (am -f ae +f de *f sin(ae)) /f (1.0 -f de *f cos(ae));
+ ae = ae +f dae;
+ k = k + 1;
+
+ if ((k >= 10) || (absf(dae) <f 1e-12))
+ exit;
+ } }}
+
+ ae2 = ae /f 2.0;
+ at = 2.0 *f atan2(sqrt((1.0 +f de) /f (1.0 -f de)) *f sin(ae2), cos(ae2));
+
+ r = da *f (1.0 -f de *f cos(ae));
+ v = GAUSSK *f sqrt((1.0 +f 1.0 /f amas(np) ) /f (da *f da *f da));
+
+ si2 = sin(di /f 2.0);
+ xq = si2 *f cos(doh);
+ xp = si2 *f sin(doh);
+ tl = at +f dp;
+ xsw = sin(tl);
+ xcw = cos(tl);
+ xm2 = 2.0 *f (xp *f xcw -f xq *f xsw );
+ xf = da /f sqrt(1.0 -f de *f de);
+ ci2 = cos(di /f 2.0);
+ xms = (de *f sin(dp) +f xsw) *f xf;
+ xmc = (de *f cos(dp) +f xcw) *f xf;
+ xpxq2 = 2.0 *f xp *f xq;
+
+ x = r *f (xcw -f xm2 *f xp);
+ y = r *f (xsw +f xm2 *f xq);
+ z = r *f (-f xm2 *f ci2);
+
+ pv(0,0) = x;
+ pv(0,1) = y *f coseps -f z *f sineps;
+ pv(0,2) = y *f sineps +f z *f coseps;
+
+ x = v *f ((-f 1.0 +f 2.0 *f xp *f xp) *f xms +f xpxq2 *f xmc);
+ y = v *f (( 1.0 -f 2.0 *f xq *f xq ) *f xmc -f xpxq2 *f xms);
+ z = v *f (2.0 *f ci2 *f (xp *f xms +f xq *f xmc));
+
+ pv(1,0) = x;
+ pv(1,1) = y *f coseps -f z *f sineps;
+ pv(1,2) = y *f sineps +f z *f coseps;
+
+#undef epoch
+#undef pv
+}
+
+"radecdist"(state_, rdd_): int -> int -> void
+{
+#define state(x,y) float64[state_ + (x) * 24 + (y) * 8]
+#define rdd(x) float64[rdd_ + (x) * 8]
+
+ rdd(2) = sqrt(state(0,0) *f state(0,0) +f state(0,1) *f state(0,1) +f state(0,2) *f state(0,2));
+ rdd(0) = atan2(state(0,1), state(0,0)) *f R2H;
+ if (rdd(0) <f 0.0) rdd(0) = rdd(0) +f 24.0;
+ rdd(1) = asin(state(0,2) /f rdd(2)) *f R2D;
+
+#undef state
+#undef rdd
+}
diff --git a/test/cminor/fft.cm b/test/cminor/fft.cm
new file mode 100644
index 0000000..b4e6a40
--- /dev/null
+++ b/test/cminor/fft.cm
@@ -0,0 +1,149 @@
+/********************************************************/
+/* A Duhamel-Hollman split-radix dif fft */
+/* Ref: Electronics Letters, Jan. 5, 1984 */
+/* Complex input and output data in arrays x and y */
+/* Length is n. */
+/********************************************************/
+
+"dfft"(x, y, np): int /*float ptr*/ -> int /*float ptr*/ -> int -> int
+{
+ var px, py, /*float ptr*/
+ i, j, k, m, n, i0, i1, i2, i3, is, id, n1, n2, n4, a, e, a3, /*int*/
+ cc1, ss1, cc3, ss3, r1, r2, s1, s2, s3, xt, tpi /*float*/;
+
+ px = x - 8;
+ py = y - 8;
+ i = 2;
+ m = 1;
+
+ {{ loop {
+ if (! (i < np)) exit;
+ i = i+i;
+ m = m+1;
+ } }}
+
+ n = i;
+
+ if (n != np)
+ {
+ i = np + 1;
+ {{ loop {
+ if (! (i <= n)) exit;
+ float64[px + i*8] = 0.0;
+ float64[py + i*8] = 0.0;
+ i = i + 1;
+ } }}
+ }
+
+ n2 = n+n;
+ tpi = 2.0 *f 3.14159265358979323846;
+ k = 1;
+ {{ loop {
+ if (! (k <= m - 1)) exit;
+ n2 = n2 / 2;
+ n4 = n2 / 4;
+ e = tpi /f floatofint(n2);
+ a = 0.0;
+
+ j = 1;
+ {{ loop {
+ if (! (j <= n4)) exit;
+ cc1 = "cos_static"(a) : float -> float;
+ ss1 = "sin_static"(a) : float -> float;
+ a3 = 3.0 *f a;
+ cc3 = "cos_static"(a3) : float -> float;
+ ss3 = "sin_static"(a3) : float -> float;
+ a = e *f floatofint(j);
+ is = j;
+ id = 2 * n2;
+
+ {{ loop {
+ if (! ( is < n )) exit;
+ i0 = is;
+ {{ loop {
+ /* DEBUG "trace"(); */
+ if (! (i0 <= n - 1)) exit;
+ i1 = i0 + n4; /*DEBUG "print_int"(i1); */
+ i2 = i1 + n4; /*DEBUG "print_int"(i2); */
+ i3 = i2 + n4; /*DEBUG "print_int"(i3); */
+ r1 = float64[px+i0*8] -f float64[px+i2*8];
+ /* DEBUG "print_float"(r1); */
+ float64[px+i0*8] = float64[px+i0*8] +f float64[px+i2*8];
+ r2 = float64[px+i1*8] -f float64[px+i3*8];
+ /* DEBUG "print_float"(r2); */
+ float64[px+i1*8] = float64[px+i1*8] +f float64[px+i3*8];
+ s1 = float64[py+i0*8] -f float64[py+i2*8];
+ /* DEBUG "print_float"(s1); */
+ float64[py+i0*8] = float64[py+i0*8] +f float64[py+i2*8];
+ s2 = float64[py+i1*8] -f float64[py+i3*8];
+ /* DEBUG "print_float"(s2); */
+ float64[py+i1*8] = float64[py+i1*8] +f float64[py+i3*8];
+ s3 = r1 -f s2; r1 = r1 +f s2;
+ s2 = r2 -f s1; r2 = r2 +f s1;
+ float64[px+i2*8] = (r1 *f cc1) -f (s2 *f ss1);
+ float64[py+i2*8] = (-f s2 *f cc1) -f (r1 *f ss1);
+ float64[px+i3*8] = (s3 *f cc3) +f (r2 *f ss3);
+ float64[py+i3*8] = (r2 *f cc3) -f (s3 *f ss3);
+ i0 = i0 + id;
+ } }}
+ is = 2 * id - n2 + j;
+ id = 4 * id;
+ } }}
+ j = j + 1;
+ } }}
+ k = k + 1;
+ } }}
+
+/************************************/
+/* Last stage, length=2 butterfly */
+/************************************/
+ is = 1;
+ id = 4;
+
+ {{ loop {
+ if (! ( is < n)) exit;
+ i0 = is;
+ {{ loop {
+ if (! (i0 <= n)) exit;
+ i1 = i0 + 1;
+ r1 = float64[px+i0*8];
+ float64[px+i0*8] = r1 +f float64[px+i1*8];
+ float64[px+i1*8] = r1 -f float64[px+i1*8];
+ r1 = float64[py+i0*8];
+ float64[py+i0*8] = r1 +f float64[py+i1*8];
+ float64[py+i1*8] = r1 -f float64[py+i1*8];
+ i0 = i0 + id;
+ } }}
+ is = 2*id - 1;
+ id = 4 * id;
+ } }}
+
+/*************************/
+/* Bit reverse counter */
+/*************************/
+ j = 1;
+ n1 = n - 1;
+
+ i = 1;
+ {{ loop {
+ if (! (i <= n1)) exit;
+ if (i < j) {
+ xt = float64[px+j*8];
+ float64[px+j*8] = float64[px+i*8];
+ float64[px+i*8] = xt;
+ xt = float64[py+j*8];
+ float64[py+j*8] = float64[py+i*8];
+ float64[py+i*8] = xt;
+ }
+ k = n / 2;
+ {{ loop {
+ if (! (k < j)) exit;
+ j = j - k;
+ k = k / 2;
+ } }}
+ j = j + k;
+ i = i + 1;
+ } }}
+
+ return(n);
+}
diff --git a/test/cminor/fib.cm b/test/cminor/fib.cm
new file mode 100644
index 0000000..42fbdd6
--- /dev/null
+++ b/test/cminor/fib.cm
@@ -0,0 +1,7 @@
+"fib"(n): int -> int
+{
+ if (n < 2)
+ return 1;
+ else
+ return "fib"(n - 1) : int -> int + "fib"(n - 2) : int -> int;
+}
diff --git a/test/cminor/integr.cm b/test/cminor/integr.cm
new file mode 100644
index 0000000..28f0a1d
--- /dev/null
+++ b/test/cminor/integr.cm
@@ -0,0 +1,25 @@
+"square" (x): float -> float
+{
+ return x *f x;
+}
+
+"integr"(f, low, high, n): int -> float -> float -> int -> float
+{
+ var h, x, s, i;
+ h = (high -f low) /f floatofint n;
+ x = low;
+ s = 0.0;
+ i = n;
+ {{ loop {
+ if (! (i > 0)) exit;
+ s = s +f (f(x): float -> float);
+ x = x +f h;
+ i = i - 1;
+ } }}
+ return s *f h;
+}
+
+"test"(n) : int -> float
+{
+ return "integr"("square", 0.0, 1.0, n): int -> float -> float -> int -> float;
+}
diff --git a/test/cminor/manyargs.cm b/test/cminor/manyargs.cm
new file mode 100644
index 0000000..97b1662
--- /dev/null
+++ b/test/cminor/manyargs.cm
@@ -0,0 +1,53 @@
+"f" (i1, i2, i3, i4, i5,
+ i6, i7, i8, i9, i10,
+ f1, f2, f3, f4, f5,
+ f6, f7, f8, f9, f10,
+ f11, f12, f13, f14, f15):
+ int -> int -> int -> int -> int ->
+ int -> int -> int -> int -> int ->
+ float -> float -> float -> float -> float ->
+ float -> float -> float -> float -> float ->
+ float -> float -> float -> float -> float -> void
+{
+ "print_int"(i1): int -> void;
+ "print_int"(i2): int -> void;
+ "print_int"(i3): int -> void;
+ "print_int"(i4): int -> void;
+ "print_int"(i5): int -> void;
+ "print_int"(i6): int -> void;
+ "print_int"(i7): int -> void;
+ "print_int"(i8): int -> void;
+ "print_int"(i9): int -> void;
+ "print_int"(i10): int -> void;
+ "print_float"(f1): float -> void;
+ "print_float"(f2): float -> void;
+ "print_float"(f3): float -> void;
+ "print_float"(f4): float -> void;
+ "print_float"(f5): float -> void;
+ "print_float"(f6): float -> void;
+ "print_float"(f7): float -> void;
+ "print_float"(f8): float -> void;
+ "print_float"(f9): float -> void;
+ "print_float"(f10): float -> void;
+ "print_float"(f11): float -> void;
+ "print_float"(f12): float -> void;
+ "print_float"(f13): float -> void;
+ "print_float"(f14): float -> void;
+ "print_float"(f15): float -> void;
+}
+
+"g" (i1, i2, i3, i4, i5,
+ f1, f2, f3, f4, f5):
+ int -> int -> int -> int -> int ->
+ float -> float -> float -> float -> float -> void
+{
+ "f"(i1,i2,i3,i4,i5, i1,i2,i3,i4,i5,
+ f1,f2,f3,f4,f5, f1,f2,f3,f4,f5, f1,f2,f3,f4,f5):
+ int -> int -> int -> int -> int ->
+ int -> int -> int -> int -> int ->
+ float -> float -> float -> float -> float ->
+ float -> float -> float -> float -> float ->
+ float -> float -> float -> float -> float -> void;
+
+}
+
diff --git a/test/cminor/qsort.cm b/test/cminor/qsort.cm
new file mode 100644
index 0000000..004f8cd
--- /dev/null
+++ b/test/cminor/qsort.cm
@@ -0,0 +1,30 @@
+"quicksort"(lo, hi, a): int -> int -> int -> void
+{
+ var i, j, pivot, temp;
+
+ if (! (lo < hi)) return;
+ i = lo;
+ j = hi;
+ pivot = int32[a + hi * 4];
+ {{ loop {
+ if (! (i < j)) exit;
+ {{ loop {
+ if (i >= hi || int32[a + i * 4] > pivot) exit;
+ i = i + 1;
+ } }}
+ {{ loop {
+ if (j <= lo || int32[a + j * 4] < pivot) exit;
+ j = j - 1;
+ } }}
+ if (i < j) {
+ temp = int32[a + i * 4];
+ int32[a + i * 4] = int32[a + j * 4];
+ int32[a + j * 4] = temp;
+ }
+ } }}
+ temp = int32[a + i * 4];
+ int32[a + i * 4] = int32[a + hi * 4];
+ int32[a + hi * 4] = temp;
+ "quicksort"(lo, i - 1, a) : int -> int -> int -> void;
+ "quicksort"(i + 1, hi, a) : int -> int -> int -> void;
+}
diff --git a/test/cminor/sha1.cmp b/test/cminor/sha1.cmp
new file mode 100644
index 0000000..9a588e4
--- /dev/null
+++ b/test/cminor/sha1.cmp
@@ -0,0 +1,189 @@
+/* SHA-1 cryptographic hash function */
+/* Ref: Handbook of Applied Cryptography, section 9.4.2, algorithm 9.53 */
+
+/* To be preprocessed by cpp -P */
+
+#define ARCH_BIG_ENDIAN
+
+#define rol1(x) (((x) << 1) | ((x) >>u 31))
+#define rol5(x) (((x) << 5) | ((x) >>u 27))
+#define rol30(x) (((x) << 30) | ((x) >>u 2))
+
+"SHA1_copy_and_swap"(src, dst, numwords) : int -> int -> int -> void
+{
+#ifdef ARCH_BIG_ENDIAN
+ "memcpy_static"(dst, src, numwords * 4) : int -> int -> int -> void;
+#else
+ var s, d, a, b;
+ s = src;
+ d = dst;
+ {{ loop {
+ if (numwords <= 0) exit;
+ a = int8u[s];
+ b = int8u[s + 1];
+ int8u[d] = int8u[s + 3];
+ int8u[d + 1] = int8u[s + 2];
+ int8u[d + 2] = b;
+ int8u[d + 3] = a;
+ s = s + 4;
+ d = d + 4;
+ numwords = numwords - 1;
+ } }}
+#endif
+}
+
+#define F(x,y,z) ( z ^ (x & (y ^ z) ) )
+#define G(x,y,z) ( (x & y) | (z & (x | y) ) )
+#define H(x,y,z) ( x ^ y ^ z )
+
+#define Y1 0x5A827999
+#define Y2 0x6ED9EBA1
+#define Y3 0x8F1BBCDC
+#define Y4 0xCA62C1D6
+
+#define context_state(ctx,n) int32[ctx + n * 4]
+#define context_length(ctx) ctx + 20
+#define context_length_hi(ctx) int32[ctx + 20]
+#define context_length_lo(ctx) int32[ctx + 24]
+#define context_numbytes(ctx) int32[ctx + 28]
+#define context_buffer(ctx) (ctx + 32)
+#define context_size 96
+
+"SHA1_transform"(ctx) : int -> void
+{
+ stack 320
+ var i, p, a, b, c, d, e, t;
+
+ /* Convert buffer data to 16 big-endian integers */
+ "SHA1_copy_and_swap"(context_buffer(ctx), &0, 16) : int -> int -> int -> void;
+ /* Expand into 80 integers */
+ i = 16;
+ {{ loop {
+ if (! (i < 80)) exit;
+ p = &0 + i * 4;
+ t = int32[p - 12] ^ int32[p - 32] ^ int32[p - 56] ^ int32[p - 64];
+ int32[p] = rol1(t);
+ i = i + 1;
+ } }}
+
+ /* Initialize working variables */
+ a = context_state(ctx, 0);
+ b = context_state(ctx, 1);
+ c = context_state(ctx, 2);
+ d = context_state(ctx, 3);
+ e = context_state(ctx, 4);
+
+ /* Perform rounds */
+ i = 0;
+ {{ loop {
+ if (! (i < 20)) exit;
+ t = F(b, c, d) + Y1 + rol5(a) + e + int32[&0 + i * 4];
+ e = d; d = c; c = rol30(b); b = a; a = t;
+ i = i + 1;
+ } }}
+ {{ loop {
+ if (! (i < 40)) exit;
+ t = H(b, c, d) + Y2 + rol5(a) + e + int32[&0 + i * 4];
+ e = d; d = c; c = rol30(b); b = a; a = t;
+ i = i + 1;
+ } }}
+ {{ loop {
+ if (! (i < 60)) exit;
+ t = G(b, c, d) + Y3 + rol5(a) + e + int32[&0 + i * 4];
+ e = d; d = c; c = rol30(b); b = a; a = t;
+ i = i + 1;
+ } }}
+ {{ loop {
+ if (! (i < 80)) exit;
+ t = H(b, c, d) + Y4 + rol5(a) + e + int32[&0 + i * 4];
+ e = d; d = c; c = rol30(b); b = a; a = t;
+ i = i + 1;
+ } }}
+
+ /* Update chaining values */
+ context_state(ctx, 0) = context_state(ctx, 0) + a;
+ context_state(ctx, 1) = context_state(ctx, 1) + b;
+ context_state(ctx, 2) = context_state(ctx, 2) + c;
+ context_state(ctx, 3) = context_state(ctx, 3) + d;
+ context_state(ctx, 4) = context_state(ctx, 4) + e;
+}
+
+"SHA1_init"(ctx) : int -> void
+{
+ context_state(ctx, 0) = 0x67452301;
+ context_state(ctx, 1) = 0xEFCDAB89;
+ context_state(ctx, 2) = 0x98BADCFE;
+ context_state(ctx, 3) = 0x10325476;
+ context_state(ctx, 4) = 0xC3D2E1F0;
+ context_numbytes(ctx) = 0;
+ context_length_lo(ctx) = 0;
+ context_length_hi(ctx) = 0;
+}
+
+"SHA1_add_data"(ctx, data, len) : int -> int -> int -> void
+{
+ var t;
+
+ /* Update length */
+ t = context_length_lo(ctx);
+ if ((context_length_lo(ctx) = t + (len << 3)) <u t)
+ context_length_hi(ctx) = context_length_hi(ctx) + 1;
+ context_length_hi(ctx) = context_length_hi(ctx) + (len >>u 29);
+
+ /* If data was left in buffer, pad it with fresh data and munge block */
+ if (context_numbytes(ctx) != 0) {
+ t = 64 - context_numbytes(ctx);
+ if (len <u t) {
+ "memcpy_static"(context_buffer(ctx) + context_numbytes(ctx), data, len)
+ : int -> int -> int -> void;
+ context_numbytes(ctx) = context_numbytes(ctx) + len;
+ return;
+ }
+ "memcpy_static"(context_buffer(ctx) + context_numbytes(ctx), data, t)
+ : int -> int -> int -> void;
+ "SHA1_transform"(ctx) : int -> void;
+ data = data + t;
+ len = len - t;
+ }
+ /* Munge data in 64-byte chunks */
+ {{ loop {
+ if (! (len >=u 64)) exit;
+ "memcpy_static"(context_buffer(ctx), data, 64)
+ : int -> int -> int -> void;
+ "SHA1_transform"(ctx) : int -> void;
+ data = data + 64;
+ len = len - 64;
+ } }}
+ /* Save remaining data */
+ "memcpy_static"(context_buffer(ctx), data, len)
+ : int -> int -> int -> void;
+ context_numbytes(ctx) = len;
+}
+
+"SHA1_finish"(ctx, output) : int -> int -> void
+{
+ var i;
+ i = context_numbytes(ctx);
+ /* Set first char of padding to 0x80. There is always room. */
+ int8u[context_buffer(ctx) + i] = 0x80;
+ i = i + 1;
+ /* If we do not have room for the length (8 bytes), pad to 64 bytes
+ with zeroes and munge the data block */
+ if (i > 56) {
+ "memset_static"(context_buffer(ctx) + i, 0, 64 - i)
+ : int -> int -> int -> void;
+ "SHA1_transform"(ctx) : int -> void;
+ i = 0;
+ }
+ /* Pad to byte 56 with zeroes */
+ "memset_static"(context_buffer(ctx) + i, 0, 56 - i)
+ : int -> int -> int -> void;
+ /* Add length in big-endian */
+ "SHA1_copy_and_swap"(context_length(ctx), context_buffer(ctx) + 56, 2)
+ : int -> int -> int -> void;
+ /* Munge the final block */
+ "SHA1_transform"(ctx) : int -> void;
+ /* Final hash value is in ctx->state modulo big-endian conversion */
+ "SHA1_copy_and_swap"(ctx, output, 5)
+ : int -> int -> int -> void;
+}
diff --git a/test/harness/mainaes.c b/test/harness/mainaes.c
new file mode 100644
index 0000000..82c9c0d
--- /dev/null
+++ b/test/harness/mainaes.c
@@ -0,0 +1,739 @@
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+
+typedef unsigned char u8;
+typedef unsigned short u16;
+typedef unsigned int u32;
+#define MAXNR 14
+
+extern int rijndaelKeySetupEnc(u32 rk[/*4*(Nr + 1)*/], const u8 cipherKey[], int keyBits);
+extern int rijndaelKeySetupDec(u32 rk[/*4*(Nr + 1)*/], const u8 cipherKey[], int keyBits);
+extern void rijndaelEncrypt(const u32 rk[/*4*(Nr + 1)*/], int Nr, const u8 pt[16], u8 ct[16]);
+extern void rijndaelDecrypt(const u32 rk[/*4*(Nr + 1)*/], int Nr, const u8 ct[16], u8 pt[16]);
+
+const u32 Te0[256] = {
+ 0xc66363a5U, 0xf87c7c84U, 0xee777799U, 0xf67b7b8dU,
+ 0xfff2f20dU, 0xd66b6bbdU, 0xde6f6fb1U, 0x91c5c554U,
+ 0x60303050U, 0x02010103U, 0xce6767a9U, 0x562b2b7dU,
+ 0xe7fefe19U, 0xb5d7d762U, 0x4dababe6U, 0xec76769aU,
+ 0x8fcaca45U, 0x1f82829dU, 0x89c9c940U, 0xfa7d7d87U,
+ 0xeffafa15U, 0xb25959ebU, 0x8e4747c9U, 0xfbf0f00bU,
+ 0x41adadecU, 0xb3d4d467U, 0x5fa2a2fdU, 0x45afafeaU,
+ 0x239c9cbfU, 0x53a4a4f7U, 0xe4727296U, 0x9bc0c05bU,
+ 0x75b7b7c2U, 0xe1fdfd1cU, 0x3d9393aeU, 0x4c26266aU,
+ 0x6c36365aU, 0x7e3f3f41U, 0xf5f7f702U, 0x83cccc4fU,
+ 0x6834345cU, 0x51a5a5f4U, 0xd1e5e534U, 0xf9f1f108U,
+ 0xe2717193U, 0xabd8d873U, 0x62313153U, 0x2a15153fU,
+ 0x0804040cU, 0x95c7c752U, 0x46232365U, 0x9dc3c35eU,
+ 0x30181828U, 0x379696a1U, 0x0a05050fU, 0x2f9a9ab5U,
+ 0x0e070709U, 0x24121236U, 0x1b80809bU, 0xdfe2e23dU,
+ 0xcdebeb26U, 0x4e272769U, 0x7fb2b2cdU, 0xea75759fU,
+ 0x1209091bU, 0x1d83839eU, 0x582c2c74U, 0x341a1a2eU,
+ 0x361b1b2dU, 0xdc6e6eb2U, 0xb45a5aeeU, 0x5ba0a0fbU,
+ 0xa45252f6U, 0x763b3b4dU, 0xb7d6d661U, 0x7db3b3ceU,
+ 0x5229297bU, 0xdde3e33eU, 0x5e2f2f71U, 0x13848497U,
+ 0xa65353f5U, 0xb9d1d168U, 0x00000000U, 0xc1eded2cU,
+ 0x40202060U, 0xe3fcfc1fU, 0x79b1b1c8U, 0xb65b5bedU,
+ 0xd46a6abeU, 0x8dcbcb46U, 0x67bebed9U, 0x7239394bU,
+ 0x944a4adeU, 0x984c4cd4U, 0xb05858e8U, 0x85cfcf4aU,
+ 0xbbd0d06bU, 0xc5efef2aU, 0x4faaaae5U, 0xedfbfb16U,
+ 0x864343c5U, 0x9a4d4dd7U, 0x66333355U, 0x11858594U,
+ 0x8a4545cfU, 0xe9f9f910U, 0x04020206U, 0xfe7f7f81U,
+ 0xa05050f0U, 0x783c3c44U, 0x259f9fbaU, 0x4ba8a8e3U,
+ 0xa25151f3U, 0x5da3a3feU, 0x804040c0U, 0x058f8f8aU,
+ 0x3f9292adU, 0x219d9dbcU, 0x70383848U, 0xf1f5f504U,
+ 0x63bcbcdfU, 0x77b6b6c1U, 0xafdada75U, 0x42212163U,
+ 0x20101030U, 0xe5ffff1aU, 0xfdf3f30eU, 0xbfd2d26dU,
+ 0x81cdcd4cU, 0x180c0c14U, 0x26131335U, 0xc3ecec2fU,
+ 0xbe5f5fe1U, 0x359797a2U, 0x884444ccU, 0x2e171739U,
+ 0x93c4c457U, 0x55a7a7f2U, 0xfc7e7e82U, 0x7a3d3d47U,
+ 0xc86464acU, 0xba5d5de7U, 0x3219192bU, 0xe6737395U,
+ 0xc06060a0U, 0x19818198U, 0x9e4f4fd1U, 0xa3dcdc7fU,
+ 0x44222266U, 0x542a2a7eU, 0x3b9090abU, 0x0b888883U,
+ 0x8c4646caU, 0xc7eeee29U, 0x6bb8b8d3U, 0x2814143cU,
+ 0xa7dede79U, 0xbc5e5ee2U, 0x160b0b1dU, 0xaddbdb76U,
+ 0xdbe0e03bU, 0x64323256U, 0x743a3a4eU, 0x140a0a1eU,
+ 0x924949dbU, 0x0c06060aU, 0x4824246cU, 0xb85c5ce4U,
+ 0x9fc2c25dU, 0xbdd3d36eU, 0x43acacefU, 0xc46262a6U,
+ 0x399191a8U, 0x319595a4U, 0xd3e4e437U, 0xf279798bU,
+ 0xd5e7e732U, 0x8bc8c843U, 0x6e373759U, 0xda6d6db7U,
+ 0x018d8d8cU, 0xb1d5d564U, 0x9c4e4ed2U, 0x49a9a9e0U,
+ 0xd86c6cb4U, 0xac5656faU, 0xf3f4f407U, 0xcfeaea25U,
+ 0xca6565afU, 0xf47a7a8eU, 0x47aeaee9U, 0x10080818U,
+ 0x6fbabad5U, 0xf0787888U, 0x4a25256fU, 0x5c2e2e72U,
+ 0x381c1c24U, 0x57a6a6f1U, 0x73b4b4c7U, 0x97c6c651U,
+ 0xcbe8e823U, 0xa1dddd7cU, 0xe874749cU, 0x3e1f1f21U,
+ 0x964b4bddU, 0x61bdbddcU, 0x0d8b8b86U, 0x0f8a8a85U,
+ 0xe0707090U, 0x7c3e3e42U, 0x71b5b5c4U, 0xcc6666aaU,
+ 0x904848d8U, 0x06030305U, 0xf7f6f601U, 0x1c0e0e12U,
+ 0xc26161a3U, 0x6a35355fU, 0xae5757f9U, 0x69b9b9d0U,
+ 0x17868691U, 0x99c1c158U, 0x3a1d1d27U, 0x279e9eb9U,
+ 0xd9e1e138U, 0xebf8f813U, 0x2b9898b3U, 0x22111133U,
+ 0xd26969bbU, 0xa9d9d970U, 0x078e8e89U, 0x339494a7U,
+ 0x2d9b9bb6U, 0x3c1e1e22U, 0x15878792U, 0xc9e9e920U,
+ 0x87cece49U, 0xaa5555ffU, 0x50282878U, 0xa5dfdf7aU,
+ 0x038c8c8fU, 0x59a1a1f8U, 0x09898980U, 0x1a0d0d17U,
+ 0x65bfbfdaU, 0xd7e6e631U, 0x844242c6U, 0xd06868b8U,
+ 0x824141c3U, 0x299999b0U, 0x5a2d2d77U, 0x1e0f0f11U,
+ 0x7bb0b0cbU, 0xa85454fcU, 0x6dbbbbd6U, 0x2c16163aU,
+};
+const u32 Te1[256] = {
+ 0xa5c66363U, 0x84f87c7cU, 0x99ee7777U, 0x8df67b7bU,
+ 0x0dfff2f2U, 0xbdd66b6bU, 0xb1de6f6fU, 0x5491c5c5U,
+ 0x50603030U, 0x03020101U, 0xa9ce6767U, 0x7d562b2bU,
+ 0x19e7fefeU, 0x62b5d7d7U, 0xe64dababU, 0x9aec7676U,
+ 0x458fcacaU, 0x9d1f8282U, 0x4089c9c9U, 0x87fa7d7dU,
+ 0x15effafaU, 0xebb25959U, 0xc98e4747U, 0x0bfbf0f0U,
+ 0xec41adadU, 0x67b3d4d4U, 0xfd5fa2a2U, 0xea45afafU,
+ 0xbf239c9cU, 0xf753a4a4U, 0x96e47272U, 0x5b9bc0c0U,
+ 0xc275b7b7U, 0x1ce1fdfdU, 0xae3d9393U, 0x6a4c2626U,
+ 0x5a6c3636U, 0x417e3f3fU, 0x02f5f7f7U, 0x4f83ccccU,
+ 0x5c683434U, 0xf451a5a5U, 0x34d1e5e5U, 0x08f9f1f1U,
+ 0x93e27171U, 0x73abd8d8U, 0x53623131U, 0x3f2a1515U,
+ 0x0c080404U, 0x5295c7c7U, 0x65462323U, 0x5e9dc3c3U,
+ 0x28301818U, 0xa1379696U, 0x0f0a0505U, 0xb52f9a9aU,
+ 0x090e0707U, 0x36241212U, 0x9b1b8080U, 0x3ddfe2e2U,
+ 0x26cdebebU, 0x694e2727U, 0xcd7fb2b2U, 0x9fea7575U,
+ 0x1b120909U, 0x9e1d8383U, 0x74582c2cU, 0x2e341a1aU,
+ 0x2d361b1bU, 0xb2dc6e6eU, 0xeeb45a5aU, 0xfb5ba0a0U,
+ 0xf6a45252U, 0x4d763b3bU, 0x61b7d6d6U, 0xce7db3b3U,
+ 0x7b522929U, 0x3edde3e3U, 0x715e2f2fU, 0x97138484U,
+ 0xf5a65353U, 0x68b9d1d1U, 0x00000000U, 0x2cc1ededU,
+ 0x60402020U, 0x1fe3fcfcU, 0xc879b1b1U, 0xedb65b5bU,
+ 0xbed46a6aU, 0x468dcbcbU, 0xd967bebeU, 0x4b723939U,
+ 0xde944a4aU, 0xd4984c4cU, 0xe8b05858U, 0x4a85cfcfU,
+ 0x6bbbd0d0U, 0x2ac5efefU, 0xe54faaaaU, 0x16edfbfbU,
+ 0xc5864343U, 0xd79a4d4dU, 0x55663333U, 0x94118585U,
+ 0xcf8a4545U, 0x10e9f9f9U, 0x06040202U, 0x81fe7f7fU,
+ 0xf0a05050U, 0x44783c3cU, 0xba259f9fU, 0xe34ba8a8U,
+ 0xf3a25151U, 0xfe5da3a3U, 0xc0804040U, 0x8a058f8fU,
+ 0xad3f9292U, 0xbc219d9dU, 0x48703838U, 0x04f1f5f5U,
+ 0xdf63bcbcU, 0xc177b6b6U, 0x75afdadaU, 0x63422121U,
+ 0x30201010U, 0x1ae5ffffU, 0x0efdf3f3U, 0x6dbfd2d2U,
+ 0x4c81cdcdU, 0x14180c0cU, 0x35261313U, 0x2fc3ececU,
+ 0xe1be5f5fU, 0xa2359797U, 0xcc884444U, 0x392e1717U,
+ 0x5793c4c4U, 0xf255a7a7U, 0x82fc7e7eU, 0x477a3d3dU,
+ 0xacc86464U, 0xe7ba5d5dU, 0x2b321919U, 0x95e67373U,
+ 0xa0c06060U, 0x98198181U, 0xd19e4f4fU, 0x7fa3dcdcU,
+ 0x66442222U, 0x7e542a2aU, 0xab3b9090U, 0x830b8888U,
+ 0xca8c4646U, 0x29c7eeeeU, 0xd36bb8b8U, 0x3c281414U,
+ 0x79a7dedeU, 0xe2bc5e5eU, 0x1d160b0bU, 0x76addbdbU,
+ 0x3bdbe0e0U, 0x56643232U, 0x4e743a3aU, 0x1e140a0aU,
+ 0xdb924949U, 0x0a0c0606U, 0x6c482424U, 0xe4b85c5cU,
+ 0x5d9fc2c2U, 0x6ebdd3d3U, 0xef43acacU, 0xa6c46262U,
+ 0xa8399191U, 0xa4319595U, 0x37d3e4e4U, 0x8bf27979U,
+ 0x32d5e7e7U, 0x438bc8c8U, 0x596e3737U, 0xb7da6d6dU,
+ 0x8c018d8dU, 0x64b1d5d5U, 0xd29c4e4eU, 0xe049a9a9U,
+ 0xb4d86c6cU, 0xfaac5656U, 0x07f3f4f4U, 0x25cfeaeaU,
+ 0xafca6565U, 0x8ef47a7aU, 0xe947aeaeU, 0x18100808U,
+ 0xd56fbabaU, 0x88f07878U, 0x6f4a2525U, 0x725c2e2eU,
+ 0x24381c1cU, 0xf157a6a6U, 0xc773b4b4U, 0x5197c6c6U,
+ 0x23cbe8e8U, 0x7ca1ddddU, 0x9ce87474U, 0x213e1f1fU,
+ 0xdd964b4bU, 0xdc61bdbdU, 0x860d8b8bU, 0x850f8a8aU,
+ 0x90e07070U, 0x427c3e3eU, 0xc471b5b5U, 0xaacc6666U,
+ 0xd8904848U, 0x05060303U, 0x01f7f6f6U, 0x121c0e0eU,
+ 0xa3c26161U, 0x5f6a3535U, 0xf9ae5757U, 0xd069b9b9U,
+ 0x91178686U, 0x5899c1c1U, 0x273a1d1dU, 0xb9279e9eU,
+ 0x38d9e1e1U, 0x13ebf8f8U, 0xb32b9898U, 0x33221111U,
+ 0xbbd26969U, 0x70a9d9d9U, 0x89078e8eU, 0xa7339494U,
+ 0xb62d9b9bU, 0x223c1e1eU, 0x92158787U, 0x20c9e9e9U,
+ 0x4987ceceU, 0xffaa5555U, 0x78502828U, 0x7aa5dfdfU,
+ 0x8f038c8cU, 0xf859a1a1U, 0x80098989U, 0x171a0d0dU,
+ 0xda65bfbfU, 0x31d7e6e6U, 0xc6844242U, 0xb8d06868U,
+ 0xc3824141U, 0xb0299999U, 0x775a2d2dU, 0x111e0f0fU,
+ 0xcb7bb0b0U, 0xfca85454U, 0xd66dbbbbU, 0x3a2c1616U,
+};
+const u32 Te2[256] = {
+ 0x63a5c663U, 0x7c84f87cU, 0x7799ee77U, 0x7b8df67bU,
+ 0xf20dfff2U, 0x6bbdd66bU, 0x6fb1de6fU, 0xc55491c5U,
+ 0x30506030U, 0x01030201U, 0x67a9ce67U, 0x2b7d562bU,
+ 0xfe19e7feU, 0xd762b5d7U, 0xabe64dabU, 0x769aec76U,
+ 0xca458fcaU, 0x829d1f82U, 0xc94089c9U, 0x7d87fa7dU,
+ 0xfa15effaU, 0x59ebb259U, 0x47c98e47U, 0xf00bfbf0U,
+ 0xadec41adU, 0xd467b3d4U, 0xa2fd5fa2U, 0xafea45afU,
+ 0x9cbf239cU, 0xa4f753a4U, 0x7296e472U, 0xc05b9bc0U,
+ 0xb7c275b7U, 0xfd1ce1fdU, 0x93ae3d93U, 0x266a4c26U,
+ 0x365a6c36U, 0x3f417e3fU, 0xf702f5f7U, 0xcc4f83ccU,
+ 0x345c6834U, 0xa5f451a5U, 0xe534d1e5U, 0xf108f9f1U,
+ 0x7193e271U, 0xd873abd8U, 0x31536231U, 0x153f2a15U,
+ 0x040c0804U, 0xc75295c7U, 0x23654623U, 0xc35e9dc3U,
+ 0x18283018U, 0x96a13796U, 0x050f0a05U, 0x9ab52f9aU,
+ 0x07090e07U, 0x12362412U, 0x809b1b80U, 0xe23ddfe2U,
+ 0xeb26cdebU, 0x27694e27U, 0xb2cd7fb2U, 0x759fea75U,
+ 0x091b1209U, 0x839e1d83U, 0x2c74582cU, 0x1a2e341aU,
+ 0x1b2d361bU, 0x6eb2dc6eU, 0x5aeeb45aU, 0xa0fb5ba0U,
+ 0x52f6a452U, 0x3b4d763bU, 0xd661b7d6U, 0xb3ce7db3U,
+ 0x297b5229U, 0xe33edde3U, 0x2f715e2fU, 0x84971384U,
+ 0x53f5a653U, 0xd168b9d1U, 0x00000000U, 0xed2cc1edU,
+ 0x20604020U, 0xfc1fe3fcU, 0xb1c879b1U, 0x5bedb65bU,
+ 0x6abed46aU, 0xcb468dcbU, 0xbed967beU, 0x394b7239U,
+ 0x4ade944aU, 0x4cd4984cU, 0x58e8b058U, 0xcf4a85cfU,
+ 0xd06bbbd0U, 0xef2ac5efU, 0xaae54faaU, 0xfb16edfbU,
+ 0x43c58643U, 0x4dd79a4dU, 0x33556633U, 0x85941185U,
+ 0x45cf8a45U, 0xf910e9f9U, 0x02060402U, 0x7f81fe7fU,
+ 0x50f0a050U, 0x3c44783cU, 0x9fba259fU, 0xa8e34ba8U,
+ 0x51f3a251U, 0xa3fe5da3U, 0x40c08040U, 0x8f8a058fU,
+ 0x92ad3f92U, 0x9dbc219dU, 0x38487038U, 0xf504f1f5U,
+ 0xbcdf63bcU, 0xb6c177b6U, 0xda75afdaU, 0x21634221U,
+ 0x10302010U, 0xff1ae5ffU, 0xf30efdf3U, 0xd26dbfd2U,
+ 0xcd4c81cdU, 0x0c14180cU, 0x13352613U, 0xec2fc3ecU,
+ 0x5fe1be5fU, 0x97a23597U, 0x44cc8844U, 0x17392e17U,
+ 0xc45793c4U, 0xa7f255a7U, 0x7e82fc7eU, 0x3d477a3dU,
+ 0x64acc864U, 0x5de7ba5dU, 0x192b3219U, 0x7395e673U,
+ 0x60a0c060U, 0x81981981U, 0x4fd19e4fU, 0xdc7fa3dcU,
+ 0x22664422U, 0x2a7e542aU, 0x90ab3b90U, 0x88830b88U,
+ 0x46ca8c46U, 0xee29c7eeU, 0xb8d36bb8U, 0x143c2814U,
+ 0xde79a7deU, 0x5ee2bc5eU, 0x0b1d160bU, 0xdb76addbU,
+ 0xe03bdbe0U, 0x32566432U, 0x3a4e743aU, 0x0a1e140aU,
+ 0x49db9249U, 0x060a0c06U, 0x246c4824U, 0x5ce4b85cU,
+ 0xc25d9fc2U, 0xd36ebdd3U, 0xacef43acU, 0x62a6c462U,
+ 0x91a83991U, 0x95a43195U, 0xe437d3e4U, 0x798bf279U,
+ 0xe732d5e7U, 0xc8438bc8U, 0x37596e37U, 0x6db7da6dU,
+ 0x8d8c018dU, 0xd564b1d5U, 0x4ed29c4eU, 0xa9e049a9U,
+ 0x6cb4d86cU, 0x56faac56U, 0xf407f3f4U, 0xea25cfeaU,
+ 0x65afca65U, 0x7a8ef47aU, 0xaee947aeU, 0x08181008U,
+ 0xbad56fbaU, 0x7888f078U, 0x256f4a25U, 0x2e725c2eU,
+ 0x1c24381cU, 0xa6f157a6U, 0xb4c773b4U, 0xc65197c6U,
+ 0xe823cbe8U, 0xdd7ca1ddU, 0x749ce874U, 0x1f213e1fU,
+ 0x4bdd964bU, 0xbddc61bdU, 0x8b860d8bU, 0x8a850f8aU,
+ 0x7090e070U, 0x3e427c3eU, 0xb5c471b5U, 0x66aacc66U,
+ 0x48d89048U, 0x03050603U, 0xf601f7f6U, 0x0e121c0eU,
+ 0x61a3c261U, 0x355f6a35U, 0x57f9ae57U, 0xb9d069b9U,
+ 0x86911786U, 0xc15899c1U, 0x1d273a1dU, 0x9eb9279eU,
+ 0xe138d9e1U, 0xf813ebf8U, 0x98b32b98U, 0x11332211U,
+ 0x69bbd269U, 0xd970a9d9U, 0x8e89078eU, 0x94a73394U,
+ 0x9bb62d9bU, 0x1e223c1eU, 0x87921587U, 0xe920c9e9U,
+ 0xce4987ceU, 0x55ffaa55U, 0x28785028U, 0xdf7aa5dfU,
+ 0x8c8f038cU, 0xa1f859a1U, 0x89800989U, 0x0d171a0dU,
+ 0xbfda65bfU, 0xe631d7e6U, 0x42c68442U, 0x68b8d068U,
+ 0x41c38241U, 0x99b02999U, 0x2d775a2dU, 0x0f111e0fU,
+ 0xb0cb7bb0U, 0x54fca854U, 0xbbd66dbbU, 0x163a2c16U,
+};
+const u32 Te3[256] = {
+
+ 0x6363a5c6U, 0x7c7c84f8U, 0x777799eeU, 0x7b7b8df6U,
+ 0xf2f20dffU, 0x6b6bbdd6U, 0x6f6fb1deU, 0xc5c55491U,
+ 0x30305060U, 0x01010302U, 0x6767a9ceU, 0x2b2b7d56U,
+ 0xfefe19e7U, 0xd7d762b5U, 0xababe64dU, 0x76769aecU,
+ 0xcaca458fU, 0x82829d1fU, 0xc9c94089U, 0x7d7d87faU,
+ 0xfafa15efU, 0x5959ebb2U, 0x4747c98eU, 0xf0f00bfbU,
+ 0xadadec41U, 0xd4d467b3U, 0xa2a2fd5fU, 0xafafea45U,
+ 0x9c9cbf23U, 0xa4a4f753U, 0x727296e4U, 0xc0c05b9bU,
+ 0xb7b7c275U, 0xfdfd1ce1U, 0x9393ae3dU, 0x26266a4cU,
+ 0x36365a6cU, 0x3f3f417eU, 0xf7f702f5U, 0xcccc4f83U,
+ 0x34345c68U, 0xa5a5f451U, 0xe5e534d1U, 0xf1f108f9U,
+ 0x717193e2U, 0xd8d873abU, 0x31315362U, 0x15153f2aU,
+ 0x04040c08U, 0xc7c75295U, 0x23236546U, 0xc3c35e9dU,
+ 0x18182830U, 0x9696a137U, 0x05050f0aU, 0x9a9ab52fU,
+ 0x0707090eU, 0x12123624U, 0x80809b1bU, 0xe2e23ddfU,
+ 0xebeb26cdU, 0x2727694eU, 0xb2b2cd7fU, 0x75759feaU,
+ 0x09091b12U, 0x83839e1dU, 0x2c2c7458U, 0x1a1a2e34U,
+ 0x1b1b2d36U, 0x6e6eb2dcU, 0x5a5aeeb4U, 0xa0a0fb5bU,
+ 0x5252f6a4U, 0x3b3b4d76U, 0xd6d661b7U, 0xb3b3ce7dU,
+ 0x29297b52U, 0xe3e33eddU, 0x2f2f715eU, 0x84849713U,
+ 0x5353f5a6U, 0xd1d168b9U, 0x00000000U, 0xeded2cc1U,
+ 0x20206040U, 0xfcfc1fe3U, 0xb1b1c879U, 0x5b5bedb6U,
+ 0x6a6abed4U, 0xcbcb468dU, 0xbebed967U, 0x39394b72U,
+ 0x4a4ade94U, 0x4c4cd498U, 0x5858e8b0U, 0xcfcf4a85U,
+ 0xd0d06bbbU, 0xefef2ac5U, 0xaaaae54fU, 0xfbfb16edU,
+ 0x4343c586U, 0x4d4dd79aU, 0x33335566U, 0x85859411U,
+ 0x4545cf8aU, 0xf9f910e9U, 0x02020604U, 0x7f7f81feU,
+ 0x5050f0a0U, 0x3c3c4478U, 0x9f9fba25U, 0xa8a8e34bU,
+ 0x5151f3a2U, 0xa3a3fe5dU, 0x4040c080U, 0x8f8f8a05U,
+ 0x9292ad3fU, 0x9d9dbc21U, 0x38384870U, 0xf5f504f1U,
+ 0xbcbcdf63U, 0xb6b6c177U, 0xdada75afU, 0x21216342U,
+ 0x10103020U, 0xffff1ae5U, 0xf3f30efdU, 0xd2d26dbfU,
+ 0xcdcd4c81U, 0x0c0c1418U, 0x13133526U, 0xecec2fc3U,
+ 0x5f5fe1beU, 0x9797a235U, 0x4444cc88U, 0x1717392eU,
+ 0xc4c45793U, 0xa7a7f255U, 0x7e7e82fcU, 0x3d3d477aU,
+ 0x6464acc8U, 0x5d5de7baU, 0x19192b32U, 0x737395e6U,
+ 0x6060a0c0U, 0x81819819U, 0x4f4fd19eU, 0xdcdc7fa3U,
+ 0x22226644U, 0x2a2a7e54U, 0x9090ab3bU, 0x8888830bU,
+ 0x4646ca8cU, 0xeeee29c7U, 0xb8b8d36bU, 0x14143c28U,
+ 0xdede79a7U, 0x5e5ee2bcU, 0x0b0b1d16U, 0xdbdb76adU,
+ 0xe0e03bdbU, 0x32325664U, 0x3a3a4e74U, 0x0a0a1e14U,
+ 0x4949db92U, 0x06060a0cU, 0x24246c48U, 0x5c5ce4b8U,
+ 0xc2c25d9fU, 0xd3d36ebdU, 0xacacef43U, 0x6262a6c4U,
+ 0x9191a839U, 0x9595a431U, 0xe4e437d3U, 0x79798bf2U,
+ 0xe7e732d5U, 0xc8c8438bU, 0x3737596eU, 0x6d6db7daU,
+ 0x8d8d8c01U, 0xd5d564b1U, 0x4e4ed29cU, 0xa9a9e049U,
+ 0x6c6cb4d8U, 0x5656faacU, 0xf4f407f3U, 0xeaea25cfU,
+ 0x6565afcaU, 0x7a7a8ef4U, 0xaeaee947U, 0x08081810U,
+ 0xbabad56fU, 0x787888f0U, 0x25256f4aU, 0x2e2e725cU,
+ 0x1c1c2438U, 0xa6a6f157U, 0xb4b4c773U, 0xc6c65197U,
+ 0xe8e823cbU, 0xdddd7ca1U, 0x74749ce8U, 0x1f1f213eU,
+ 0x4b4bdd96U, 0xbdbddc61U, 0x8b8b860dU, 0x8a8a850fU,
+ 0x707090e0U, 0x3e3e427cU, 0xb5b5c471U, 0x6666aaccU,
+ 0x4848d890U, 0x03030506U, 0xf6f601f7U, 0x0e0e121cU,
+ 0x6161a3c2U, 0x35355f6aU, 0x5757f9aeU, 0xb9b9d069U,
+ 0x86869117U, 0xc1c15899U, 0x1d1d273aU, 0x9e9eb927U,
+ 0xe1e138d9U, 0xf8f813ebU, 0x9898b32bU, 0x11113322U,
+ 0x6969bbd2U, 0xd9d970a9U, 0x8e8e8907U, 0x9494a733U,
+ 0x9b9bb62dU, 0x1e1e223cU, 0x87879215U, 0xe9e920c9U,
+ 0xcece4987U, 0x5555ffaaU, 0x28287850U, 0xdfdf7aa5U,
+ 0x8c8c8f03U, 0xa1a1f859U, 0x89898009U, 0x0d0d171aU,
+ 0xbfbfda65U, 0xe6e631d7U, 0x4242c684U, 0x6868b8d0U,
+ 0x4141c382U, 0x9999b029U, 0x2d2d775aU, 0x0f0f111eU,
+ 0xb0b0cb7bU, 0x5454fca8U, 0xbbbbd66dU, 0x16163a2cU,
+};
+const u32 Te4[256] = {
+ 0x63636363U, 0x7c7c7c7cU, 0x77777777U, 0x7b7b7b7bU,
+ 0xf2f2f2f2U, 0x6b6b6b6bU, 0x6f6f6f6fU, 0xc5c5c5c5U,
+ 0x30303030U, 0x01010101U, 0x67676767U, 0x2b2b2b2bU,
+ 0xfefefefeU, 0xd7d7d7d7U, 0xababababU, 0x76767676U,
+ 0xcacacacaU, 0x82828282U, 0xc9c9c9c9U, 0x7d7d7d7dU,
+ 0xfafafafaU, 0x59595959U, 0x47474747U, 0xf0f0f0f0U,
+ 0xadadadadU, 0xd4d4d4d4U, 0xa2a2a2a2U, 0xafafafafU,
+ 0x9c9c9c9cU, 0xa4a4a4a4U, 0x72727272U, 0xc0c0c0c0U,
+ 0xb7b7b7b7U, 0xfdfdfdfdU, 0x93939393U, 0x26262626U,
+ 0x36363636U, 0x3f3f3f3fU, 0xf7f7f7f7U, 0xccccccccU,
+ 0x34343434U, 0xa5a5a5a5U, 0xe5e5e5e5U, 0xf1f1f1f1U,
+ 0x71717171U, 0xd8d8d8d8U, 0x31313131U, 0x15151515U,
+ 0x04040404U, 0xc7c7c7c7U, 0x23232323U, 0xc3c3c3c3U,
+ 0x18181818U, 0x96969696U, 0x05050505U, 0x9a9a9a9aU,
+ 0x07070707U, 0x12121212U, 0x80808080U, 0xe2e2e2e2U,
+ 0xebebebebU, 0x27272727U, 0xb2b2b2b2U, 0x75757575U,
+ 0x09090909U, 0x83838383U, 0x2c2c2c2cU, 0x1a1a1a1aU,
+ 0x1b1b1b1bU, 0x6e6e6e6eU, 0x5a5a5a5aU, 0xa0a0a0a0U,
+ 0x52525252U, 0x3b3b3b3bU, 0xd6d6d6d6U, 0xb3b3b3b3U,
+ 0x29292929U, 0xe3e3e3e3U, 0x2f2f2f2fU, 0x84848484U,
+ 0x53535353U, 0xd1d1d1d1U, 0x00000000U, 0xededededU,
+ 0x20202020U, 0xfcfcfcfcU, 0xb1b1b1b1U, 0x5b5b5b5bU,
+ 0x6a6a6a6aU, 0xcbcbcbcbU, 0xbebebebeU, 0x39393939U,
+ 0x4a4a4a4aU, 0x4c4c4c4cU, 0x58585858U, 0xcfcfcfcfU,
+ 0xd0d0d0d0U, 0xefefefefU, 0xaaaaaaaaU, 0xfbfbfbfbU,
+ 0x43434343U, 0x4d4d4d4dU, 0x33333333U, 0x85858585U,
+ 0x45454545U, 0xf9f9f9f9U, 0x02020202U, 0x7f7f7f7fU,
+ 0x50505050U, 0x3c3c3c3cU, 0x9f9f9f9fU, 0xa8a8a8a8U,
+ 0x51515151U, 0xa3a3a3a3U, 0x40404040U, 0x8f8f8f8fU,
+ 0x92929292U, 0x9d9d9d9dU, 0x38383838U, 0xf5f5f5f5U,
+ 0xbcbcbcbcU, 0xb6b6b6b6U, 0xdadadadaU, 0x21212121U,
+ 0x10101010U, 0xffffffffU, 0xf3f3f3f3U, 0xd2d2d2d2U,
+ 0xcdcdcdcdU, 0x0c0c0c0cU, 0x13131313U, 0xececececU,
+ 0x5f5f5f5fU, 0x97979797U, 0x44444444U, 0x17171717U,
+ 0xc4c4c4c4U, 0xa7a7a7a7U, 0x7e7e7e7eU, 0x3d3d3d3dU,
+ 0x64646464U, 0x5d5d5d5dU, 0x19191919U, 0x73737373U,
+ 0x60606060U, 0x81818181U, 0x4f4f4f4fU, 0xdcdcdcdcU,
+ 0x22222222U, 0x2a2a2a2aU, 0x90909090U, 0x88888888U,
+ 0x46464646U, 0xeeeeeeeeU, 0xb8b8b8b8U, 0x14141414U,
+ 0xdedededeU, 0x5e5e5e5eU, 0x0b0b0b0bU, 0xdbdbdbdbU,
+ 0xe0e0e0e0U, 0x32323232U, 0x3a3a3a3aU, 0x0a0a0a0aU,
+ 0x49494949U, 0x06060606U, 0x24242424U, 0x5c5c5c5cU,
+ 0xc2c2c2c2U, 0xd3d3d3d3U, 0xacacacacU, 0x62626262U,
+ 0x91919191U, 0x95959595U, 0xe4e4e4e4U, 0x79797979U,
+ 0xe7e7e7e7U, 0xc8c8c8c8U, 0x37373737U, 0x6d6d6d6dU,
+ 0x8d8d8d8dU, 0xd5d5d5d5U, 0x4e4e4e4eU, 0xa9a9a9a9U,
+ 0x6c6c6c6cU, 0x56565656U, 0xf4f4f4f4U, 0xeaeaeaeaU,
+ 0x65656565U, 0x7a7a7a7aU, 0xaeaeaeaeU, 0x08080808U,
+ 0xbabababaU, 0x78787878U, 0x25252525U, 0x2e2e2e2eU,
+ 0x1c1c1c1cU, 0xa6a6a6a6U, 0xb4b4b4b4U, 0xc6c6c6c6U,
+ 0xe8e8e8e8U, 0xddddddddU, 0x74747474U, 0x1f1f1f1fU,
+ 0x4b4b4b4bU, 0xbdbdbdbdU, 0x8b8b8b8bU, 0x8a8a8a8aU,
+ 0x70707070U, 0x3e3e3e3eU, 0xb5b5b5b5U, 0x66666666U,
+ 0x48484848U, 0x03030303U, 0xf6f6f6f6U, 0x0e0e0e0eU,
+ 0x61616161U, 0x35353535U, 0x57575757U, 0xb9b9b9b9U,
+ 0x86868686U, 0xc1c1c1c1U, 0x1d1d1d1dU, 0x9e9e9e9eU,
+ 0xe1e1e1e1U, 0xf8f8f8f8U, 0x98989898U, 0x11111111U,
+ 0x69696969U, 0xd9d9d9d9U, 0x8e8e8e8eU, 0x94949494U,
+ 0x9b9b9b9bU, 0x1e1e1e1eU, 0x87878787U, 0xe9e9e9e9U,
+ 0xcecececeU, 0x55555555U, 0x28282828U, 0xdfdfdfdfU,
+ 0x8c8c8c8cU, 0xa1a1a1a1U, 0x89898989U, 0x0d0d0d0dU,
+ 0xbfbfbfbfU, 0xe6e6e6e6U, 0x42424242U, 0x68686868U,
+ 0x41414141U, 0x99999999U, 0x2d2d2d2dU, 0x0f0f0f0fU,
+ 0xb0b0b0b0U, 0x54545454U, 0xbbbbbbbbU, 0x16161616U,
+};
+const u32 Td0[256] = {
+ 0x51f4a750U, 0x7e416553U, 0x1a17a4c3U, 0x3a275e96U,
+ 0x3bab6bcbU, 0x1f9d45f1U, 0xacfa58abU, 0x4be30393U,
+ 0x2030fa55U, 0xad766df6U, 0x88cc7691U, 0xf5024c25U,
+ 0x4fe5d7fcU, 0xc52acbd7U, 0x26354480U, 0xb562a38fU,
+ 0xdeb15a49U, 0x25ba1b67U, 0x45ea0e98U, 0x5dfec0e1U,
+ 0xc32f7502U, 0x814cf012U, 0x8d4697a3U, 0x6bd3f9c6U,
+ 0x038f5fe7U, 0x15929c95U, 0xbf6d7aebU, 0x955259daU,
+ 0xd4be832dU, 0x587421d3U, 0x49e06929U, 0x8ec9c844U,
+ 0x75c2896aU, 0xf48e7978U, 0x99583e6bU, 0x27b971ddU,
+ 0xbee14fb6U, 0xf088ad17U, 0xc920ac66U, 0x7dce3ab4U,
+ 0x63df4a18U, 0xe51a3182U, 0x97513360U, 0x62537f45U,
+ 0xb16477e0U, 0xbb6bae84U, 0xfe81a01cU, 0xf9082b94U,
+ 0x70486858U, 0x8f45fd19U, 0x94de6c87U, 0x527bf8b7U,
+ 0xab73d323U, 0x724b02e2U, 0xe31f8f57U, 0x6655ab2aU,
+ 0xb2eb2807U, 0x2fb5c203U, 0x86c57b9aU, 0xd33708a5U,
+ 0x302887f2U, 0x23bfa5b2U, 0x02036abaU, 0xed16825cU,
+ 0x8acf1c2bU, 0xa779b492U, 0xf307f2f0U, 0x4e69e2a1U,
+ 0x65daf4cdU, 0x0605bed5U, 0xd134621fU, 0xc4a6fe8aU,
+ 0x342e539dU, 0xa2f355a0U, 0x058ae132U, 0xa4f6eb75U,
+ 0x0b83ec39U, 0x4060efaaU, 0x5e719f06U, 0xbd6e1051U,
+ 0x3e218af9U, 0x96dd063dU, 0xdd3e05aeU, 0x4de6bd46U,
+ 0x91548db5U, 0x71c45d05U, 0x0406d46fU, 0x605015ffU,
+ 0x1998fb24U, 0xd6bde997U, 0x894043ccU, 0x67d99e77U,
+ 0xb0e842bdU, 0x07898b88U, 0xe7195b38U, 0x79c8eedbU,
+ 0xa17c0a47U, 0x7c420fe9U, 0xf8841ec9U, 0x00000000U,
+ 0x09808683U, 0x322bed48U, 0x1e1170acU, 0x6c5a724eU,
+ 0xfd0efffbU, 0x0f853856U, 0x3daed51eU, 0x362d3927U,
+ 0x0a0fd964U, 0x685ca621U, 0x9b5b54d1U, 0x24362e3aU,
+ 0x0c0a67b1U, 0x9357e70fU, 0xb4ee96d2U, 0x1b9b919eU,
+ 0x80c0c54fU, 0x61dc20a2U, 0x5a774b69U, 0x1c121a16U,
+ 0xe293ba0aU, 0xc0a02ae5U, 0x3c22e043U, 0x121b171dU,
+ 0x0e090d0bU, 0xf28bc7adU, 0x2db6a8b9U, 0x141ea9c8U,
+ 0x57f11985U, 0xaf75074cU, 0xee99ddbbU, 0xa37f60fdU,
+ 0xf701269fU, 0x5c72f5bcU, 0x44663bc5U, 0x5bfb7e34U,
+ 0x8b432976U, 0xcb23c6dcU, 0xb6edfc68U, 0xb8e4f163U,
+ 0xd731dccaU, 0x42638510U, 0x13972240U, 0x84c61120U,
+ 0x854a247dU, 0xd2bb3df8U, 0xaef93211U, 0xc729a16dU,
+ 0x1d9e2f4bU, 0xdcb230f3U, 0x0d8652ecU, 0x77c1e3d0U,
+ 0x2bb3166cU, 0xa970b999U, 0x119448faU, 0x47e96422U,
+ 0xa8fc8cc4U, 0xa0f03f1aU, 0x567d2cd8U, 0x223390efU,
+ 0x87494ec7U, 0xd938d1c1U, 0x8ccaa2feU, 0x98d40b36U,
+ 0xa6f581cfU, 0xa57ade28U, 0xdab78e26U, 0x3fadbfa4U,
+ 0x2c3a9de4U, 0x5078920dU, 0x6a5fcc9bU, 0x547e4662U,
+ 0xf68d13c2U, 0x90d8b8e8U, 0x2e39f75eU, 0x82c3aff5U,
+ 0x9f5d80beU, 0x69d0937cU, 0x6fd52da9U, 0xcf2512b3U,
+ 0xc8ac993bU, 0x10187da7U, 0xe89c636eU, 0xdb3bbb7bU,
+ 0xcd267809U, 0x6e5918f4U, 0xec9ab701U, 0x834f9aa8U,
+ 0xe6956e65U, 0xaaffe67eU, 0x21bccf08U, 0xef15e8e6U,
+ 0xbae79bd9U, 0x4a6f36ceU, 0xea9f09d4U, 0x29b07cd6U,
+ 0x31a4b2afU, 0x2a3f2331U, 0xc6a59430U, 0x35a266c0U,
+ 0x744ebc37U, 0xfc82caa6U, 0xe090d0b0U, 0x33a7d815U,
+ 0xf104984aU, 0x41ecdaf7U, 0x7fcd500eU, 0x1791f62fU,
+ 0x764dd68dU, 0x43efb04dU, 0xccaa4d54U, 0xe49604dfU,
+ 0x9ed1b5e3U, 0x4c6a881bU, 0xc12c1fb8U, 0x4665517fU,
+ 0x9d5eea04U, 0x018c355dU, 0xfa877473U, 0xfb0b412eU,
+ 0xb3671d5aU, 0x92dbd252U, 0xe9105633U, 0x6dd64713U,
+ 0x9ad7618cU, 0x37a10c7aU, 0x59f8148eU, 0xeb133c89U,
+ 0xcea927eeU, 0xb761c935U, 0xe11ce5edU, 0x7a47b13cU,
+ 0x9cd2df59U, 0x55f2733fU, 0x1814ce79U, 0x73c737bfU,
+ 0x53f7cdeaU, 0x5ffdaa5bU, 0xdf3d6f14U, 0x7844db86U,
+ 0xcaaff381U, 0xb968c43eU, 0x3824342cU, 0xc2a3405fU,
+ 0x161dc372U, 0xbce2250cU, 0x283c498bU, 0xff0d9541U,
+ 0x39a80171U, 0x080cb3deU, 0xd8b4e49cU, 0x6456c190U,
+ 0x7bcb8461U, 0xd532b670U, 0x486c5c74U, 0xd0b85742U,
+};
+const u32 Td1[256] = {
+ 0x5051f4a7U, 0x537e4165U, 0xc31a17a4U, 0x963a275eU,
+ 0xcb3bab6bU, 0xf11f9d45U, 0xabacfa58U, 0x934be303U,
+ 0x552030faU, 0xf6ad766dU, 0x9188cc76U, 0x25f5024cU,
+ 0xfc4fe5d7U, 0xd7c52acbU, 0x80263544U, 0x8fb562a3U,
+ 0x49deb15aU, 0x6725ba1bU, 0x9845ea0eU, 0xe15dfec0U,
+ 0x02c32f75U, 0x12814cf0U, 0xa38d4697U, 0xc66bd3f9U,
+ 0xe7038f5fU, 0x9515929cU, 0xebbf6d7aU, 0xda955259U,
+ 0x2dd4be83U, 0xd3587421U, 0x2949e069U, 0x448ec9c8U,
+ 0x6a75c289U, 0x78f48e79U, 0x6b99583eU, 0xdd27b971U,
+ 0xb6bee14fU, 0x17f088adU, 0x66c920acU, 0xb47dce3aU,
+ 0x1863df4aU, 0x82e51a31U, 0x60975133U, 0x4562537fU,
+ 0xe0b16477U, 0x84bb6baeU, 0x1cfe81a0U, 0x94f9082bU,
+ 0x58704868U, 0x198f45fdU, 0x8794de6cU, 0xb7527bf8U,
+ 0x23ab73d3U, 0xe2724b02U, 0x57e31f8fU, 0x2a6655abU,
+ 0x07b2eb28U, 0x032fb5c2U, 0x9a86c57bU, 0xa5d33708U,
+ 0xf2302887U, 0xb223bfa5U, 0xba02036aU, 0x5ced1682U,
+ 0x2b8acf1cU, 0x92a779b4U, 0xf0f307f2U, 0xa14e69e2U,
+ 0xcd65daf4U, 0xd50605beU, 0x1fd13462U, 0x8ac4a6feU,
+ 0x9d342e53U, 0xa0a2f355U, 0x32058ae1U, 0x75a4f6ebU,
+ 0x390b83ecU, 0xaa4060efU, 0x065e719fU, 0x51bd6e10U,
+ 0xf93e218aU, 0x3d96dd06U, 0xaedd3e05U, 0x464de6bdU,
+ 0xb591548dU, 0x0571c45dU, 0x6f0406d4U, 0xff605015U,
+ 0x241998fbU, 0x97d6bde9U, 0xcc894043U, 0x7767d99eU,
+ 0xbdb0e842U, 0x8807898bU, 0x38e7195bU, 0xdb79c8eeU,
+ 0x47a17c0aU, 0xe97c420fU, 0xc9f8841eU, 0x00000000U,
+ 0x83098086U, 0x48322bedU, 0xac1e1170U, 0x4e6c5a72U,
+ 0xfbfd0effU, 0x560f8538U, 0x1e3daed5U, 0x27362d39U,
+ 0x640a0fd9U, 0x21685ca6U, 0xd19b5b54U, 0x3a24362eU,
+ 0xb10c0a67U, 0x0f9357e7U, 0xd2b4ee96U, 0x9e1b9b91U,
+ 0x4f80c0c5U, 0xa261dc20U, 0x695a774bU, 0x161c121aU,
+ 0x0ae293baU, 0xe5c0a02aU, 0x433c22e0U, 0x1d121b17U,
+ 0x0b0e090dU, 0xadf28bc7U, 0xb92db6a8U, 0xc8141ea9U,
+ 0x8557f119U, 0x4caf7507U, 0xbbee99ddU, 0xfda37f60U,
+ 0x9ff70126U, 0xbc5c72f5U, 0xc544663bU, 0x345bfb7eU,
+ 0x768b4329U, 0xdccb23c6U, 0x68b6edfcU, 0x63b8e4f1U,
+ 0xcad731dcU, 0x10426385U, 0x40139722U, 0x2084c611U,
+ 0x7d854a24U, 0xf8d2bb3dU, 0x11aef932U, 0x6dc729a1U,
+ 0x4b1d9e2fU, 0xf3dcb230U, 0xec0d8652U, 0xd077c1e3U,
+ 0x6c2bb316U, 0x99a970b9U, 0xfa119448U, 0x2247e964U,
+ 0xc4a8fc8cU, 0x1aa0f03fU, 0xd8567d2cU, 0xef223390U,
+ 0xc787494eU, 0xc1d938d1U, 0xfe8ccaa2U, 0x3698d40bU,
+ 0xcfa6f581U, 0x28a57adeU, 0x26dab78eU, 0xa43fadbfU,
+ 0xe42c3a9dU, 0x0d507892U, 0x9b6a5fccU, 0x62547e46U,
+ 0xc2f68d13U, 0xe890d8b8U, 0x5e2e39f7U, 0xf582c3afU,
+ 0xbe9f5d80U, 0x7c69d093U, 0xa96fd52dU, 0xb3cf2512U,
+ 0x3bc8ac99U, 0xa710187dU, 0x6ee89c63U, 0x7bdb3bbbU,
+ 0x09cd2678U, 0xf46e5918U, 0x01ec9ab7U, 0xa8834f9aU,
+ 0x65e6956eU, 0x7eaaffe6U, 0x0821bccfU, 0xe6ef15e8U,
+ 0xd9bae79bU, 0xce4a6f36U, 0xd4ea9f09U, 0xd629b07cU,
+ 0xaf31a4b2U, 0x312a3f23U, 0x30c6a594U, 0xc035a266U,
+ 0x37744ebcU, 0xa6fc82caU, 0xb0e090d0U, 0x1533a7d8U,
+ 0x4af10498U, 0xf741ecdaU, 0x0e7fcd50U, 0x2f1791f6U,
+ 0x8d764dd6U, 0x4d43efb0U, 0x54ccaa4dU, 0xdfe49604U,
+ 0xe39ed1b5U, 0x1b4c6a88U, 0xb8c12c1fU, 0x7f466551U,
+ 0x049d5eeaU, 0x5d018c35U, 0x73fa8774U, 0x2efb0b41U,
+ 0x5ab3671dU, 0x5292dbd2U, 0x33e91056U, 0x136dd647U,
+ 0x8c9ad761U, 0x7a37a10cU, 0x8e59f814U, 0x89eb133cU,
+ 0xeecea927U, 0x35b761c9U, 0xede11ce5U, 0x3c7a47b1U,
+ 0x599cd2dfU, 0x3f55f273U, 0x791814ceU, 0xbf73c737U,
+ 0xea53f7cdU, 0x5b5ffdaaU, 0x14df3d6fU, 0x867844dbU,
+ 0x81caaff3U, 0x3eb968c4U, 0x2c382434U, 0x5fc2a340U,
+ 0x72161dc3U, 0x0cbce225U, 0x8b283c49U, 0x41ff0d95U,
+ 0x7139a801U, 0xde080cb3U, 0x9cd8b4e4U, 0x906456c1U,
+ 0x617bcb84U, 0x70d532b6U, 0x74486c5cU, 0x42d0b857U,
+};
+const u32 Td2[256] = {
+ 0xa75051f4U, 0x65537e41U, 0xa4c31a17U, 0x5e963a27U,
+ 0x6bcb3babU, 0x45f11f9dU, 0x58abacfaU, 0x03934be3U,
+ 0xfa552030U, 0x6df6ad76U, 0x769188ccU, 0x4c25f502U,
+ 0xd7fc4fe5U, 0xcbd7c52aU, 0x44802635U, 0xa38fb562U,
+ 0x5a49deb1U, 0x1b6725baU, 0x0e9845eaU, 0xc0e15dfeU,
+ 0x7502c32fU, 0xf012814cU, 0x97a38d46U, 0xf9c66bd3U,
+ 0x5fe7038fU, 0x9c951592U, 0x7aebbf6dU, 0x59da9552U,
+ 0x832dd4beU, 0x21d35874U, 0x692949e0U, 0xc8448ec9U,
+ 0x896a75c2U, 0x7978f48eU, 0x3e6b9958U, 0x71dd27b9U,
+ 0x4fb6bee1U, 0xad17f088U, 0xac66c920U, 0x3ab47dceU,
+ 0x4a1863dfU, 0x3182e51aU, 0x33609751U, 0x7f456253U,
+ 0x77e0b164U, 0xae84bb6bU, 0xa01cfe81U, 0x2b94f908U,
+ 0x68587048U, 0xfd198f45U, 0x6c8794deU, 0xf8b7527bU,
+ 0xd323ab73U, 0x02e2724bU, 0x8f57e31fU, 0xab2a6655U,
+ 0x2807b2ebU, 0xc2032fb5U, 0x7b9a86c5U, 0x08a5d337U,
+ 0x87f23028U, 0xa5b223bfU, 0x6aba0203U, 0x825ced16U,
+ 0x1c2b8acfU, 0xb492a779U, 0xf2f0f307U, 0xe2a14e69U,
+ 0xf4cd65daU, 0xbed50605U, 0x621fd134U, 0xfe8ac4a6U,
+ 0x539d342eU, 0x55a0a2f3U, 0xe132058aU, 0xeb75a4f6U,
+ 0xec390b83U, 0xefaa4060U, 0x9f065e71U, 0x1051bd6eU,
+
+ 0x8af93e21U, 0x063d96ddU, 0x05aedd3eU, 0xbd464de6U,
+ 0x8db59154U, 0x5d0571c4U, 0xd46f0406U, 0x15ff6050U,
+ 0xfb241998U, 0xe997d6bdU, 0x43cc8940U, 0x9e7767d9U,
+ 0x42bdb0e8U, 0x8b880789U, 0x5b38e719U, 0xeedb79c8U,
+ 0x0a47a17cU, 0x0fe97c42U, 0x1ec9f884U, 0x00000000U,
+ 0x86830980U, 0xed48322bU, 0x70ac1e11U, 0x724e6c5aU,
+ 0xfffbfd0eU, 0x38560f85U, 0xd51e3daeU, 0x3927362dU,
+ 0xd9640a0fU, 0xa621685cU, 0x54d19b5bU, 0x2e3a2436U,
+ 0x67b10c0aU, 0xe70f9357U, 0x96d2b4eeU, 0x919e1b9bU,
+ 0xc54f80c0U, 0x20a261dcU, 0x4b695a77U, 0x1a161c12U,
+ 0xba0ae293U, 0x2ae5c0a0U, 0xe0433c22U, 0x171d121bU,
+ 0x0d0b0e09U, 0xc7adf28bU, 0xa8b92db6U, 0xa9c8141eU,
+ 0x198557f1U, 0x074caf75U, 0xddbbee99U, 0x60fda37fU,
+ 0x269ff701U, 0xf5bc5c72U, 0x3bc54466U, 0x7e345bfbU,
+ 0x29768b43U, 0xc6dccb23U, 0xfc68b6edU, 0xf163b8e4U,
+ 0xdccad731U, 0x85104263U, 0x22401397U, 0x112084c6U,
+ 0x247d854aU, 0x3df8d2bbU, 0x3211aef9U, 0xa16dc729U,
+ 0x2f4b1d9eU, 0x30f3dcb2U, 0x52ec0d86U, 0xe3d077c1U,
+ 0x166c2bb3U, 0xb999a970U, 0x48fa1194U, 0x642247e9U,
+ 0x8cc4a8fcU, 0x3f1aa0f0U, 0x2cd8567dU, 0x90ef2233U,
+ 0x4ec78749U, 0xd1c1d938U, 0xa2fe8ccaU, 0x0b3698d4U,
+ 0x81cfa6f5U, 0xde28a57aU, 0x8e26dab7U, 0xbfa43fadU,
+ 0x9de42c3aU, 0x920d5078U, 0xcc9b6a5fU, 0x4662547eU,
+ 0x13c2f68dU, 0xb8e890d8U, 0xf75e2e39U, 0xaff582c3U,
+ 0x80be9f5dU, 0x937c69d0U, 0x2da96fd5U, 0x12b3cf25U,
+ 0x993bc8acU, 0x7da71018U, 0x636ee89cU, 0xbb7bdb3bU,
+ 0x7809cd26U, 0x18f46e59U, 0xb701ec9aU, 0x9aa8834fU,
+ 0x6e65e695U, 0xe67eaaffU, 0xcf0821bcU, 0xe8e6ef15U,
+ 0x9bd9bae7U, 0x36ce4a6fU, 0x09d4ea9fU, 0x7cd629b0U,
+ 0xb2af31a4U, 0x23312a3fU, 0x9430c6a5U, 0x66c035a2U,
+ 0xbc37744eU, 0xcaa6fc82U, 0xd0b0e090U, 0xd81533a7U,
+ 0x984af104U, 0xdaf741ecU, 0x500e7fcdU, 0xf62f1791U,
+ 0xd68d764dU, 0xb04d43efU, 0x4d54ccaaU, 0x04dfe496U,
+ 0xb5e39ed1U, 0x881b4c6aU, 0x1fb8c12cU, 0x517f4665U,
+ 0xea049d5eU, 0x355d018cU, 0x7473fa87U, 0x412efb0bU,
+ 0x1d5ab367U, 0xd25292dbU, 0x5633e910U, 0x47136dd6U,
+ 0x618c9ad7U, 0x0c7a37a1U, 0x148e59f8U, 0x3c89eb13U,
+ 0x27eecea9U, 0xc935b761U, 0xe5ede11cU, 0xb13c7a47U,
+ 0xdf599cd2U, 0x733f55f2U, 0xce791814U, 0x37bf73c7U,
+ 0xcdea53f7U, 0xaa5b5ffdU, 0x6f14df3dU, 0xdb867844U,
+ 0xf381caafU, 0xc43eb968U, 0x342c3824U, 0x405fc2a3U,
+ 0xc372161dU, 0x250cbce2U, 0x498b283cU, 0x9541ff0dU,
+ 0x017139a8U, 0xb3de080cU, 0xe49cd8b4U, 0xc1906456U,
+ 0x84617bcbU, 0xb670d532U, 0x5c74486cU, 0x5742d0b8U,
+};
+const u32 Td3[256] = {
+ 0xf4a75051U, 0x4165537eU, 0x17a4c31aU, 0x275e963aU,
+ 0xab6bcb3bU, 0x9d45f11fU, 0xfa58abacU, 0xe303934bU,
+ 0x30fa5520U, 0x766df6adU, 0xcc769188U, 0x024c25f5U,
+ 0xe5d7fc4fU, 0x2acbd7c5U, 0x35448026U, 0x62a38fb5U,
+ 0xb15a49deU, 0xba1b6725U, 0xea0e9845U, 0xfec0e15dU,
+ 0x2f7502c3U, 0x4cf01281U, 0x4697a38dU, 0xd3f9c66bU,
+ 0x8f5fe703U, 0x929c9515U, 0x6d7aebbfU, 0x5259da95U,
+ 0xbe832dd4U, 0x7421d358U, 0xe0692949U, 0xc9c8448eU,
+ 0xc2896a75U, 0x8e7978f4U, 0x583e6b99U, 0xb971dd27U,
+ 0xe14fb6beU, 0x88ad17f0U, 0x20ac66c9U, 0xce3ab47dU,
+ 0xdf4a1863U, 0x1a3182e5U, 0x51336097U, 0x537f4562U,
+ 0x6477e0b1U, 0x6bae84bbU, 0x81a01cfeU, 0x082b94f9U,
+ 0x48685870U, 0x45fd198fU, 0xde6c8794U, 0x7bf8b752U,
+ 0x73d323abU, 0x4b02e272U, 0x1f8f57e3U, 0x55ab2a66U,
+ 0xeb2807b2U, 0xb5c2032fU, 0xc57b9a86U, 0x3708a5d3U,
+ 0x2887f230U, 0xbfa5b223U, 0x036aba02U, 0x16825cedU,
+ 0xcf1c2b8aU, 0x79b492a7U, 0x07f2f0f3U, 0x69e2a14eU,
+ 0xdaf4cd65U, 0x05bed506U, 0x34621fd1U, 0xa6fe8ac4U,
+ 0x2e539d34U, 0xf355a0a2U, 0x8ae13205U, 0xf6eb75a4U,
+ 0x83ec390bU, 0x60efaa40U, 0x719f065eU, 0x6e1051bdU,
+ 0x218af93eU, 0xdd063d96U, 0x3e05aeddU, 0xe6bd464dU,
+ 0x548db591U, 0xc45d0571U, 0x06d46f04U, 0x5015ff60U,
+ 0x98fb2419U, 0xbde997d6U, 0x4043cc89U, 0xd99e7767U,
+ 0xe842bdb0U, 0x898b8807U, 0x195b38e7U, 0xc8eedb79U,
+ 0x7c0a47a1U, 0x420fe97cU, 0x841ec9f8U, 0x00000000U,
+ 0x80868309U, 0x2bed4832U, 0x1170ac1eU, 0x5a724e6cU,
+ 0x0efffbfdU, 0x8538560fU, 0xaed51e3dU, 0x2d392736U,
+ 0x0fd9640aU, 0x5ca62168U, 0x5b54d19bU, 0x362e3a24U,
+ 0x0a67b10cU, 0x57e70f93U, 0xee96d2b4U, 0x9b919e1bU,
+ 0xc0c54f80U, 0xdc20a261U, 0x774b695aU, 0x121a161cU,
+ 0x93ba0ae2U, 0xa02ae5c0U, 0x22e0433cU, 0x1b171d12U,
+ 0x090d0b0eU, 0x8bc7adf2U, 0xb6a8b92dU, 0x1ea9c814U,
+ 0xf1198557U, 0x75074cafU, 0x99ddbbeeU, 0x7f60fda3U,
+ 0x01269ff7U, 0x72f5bc5cU, 0x663bc544U, 0xfb7e345bU,
+ 0x4329768bU, 0x23c6dccbU, 0xedfc68b6U, 0xe4f163b8U,
+ 0x31dccad7U, 0x63851042U, 0x97224013U, 0xc6112084U,
+ 0x4a247d85U, 0xbb3df8d2U, 0xf93211aeU, 0x29a16dc7U,
+ 0x9e2f4b1dU, 0xb230f3dcU, 0x8652ec0dU, 0xc1e3d077U,
+ 0xb3166c2bU, 0x70b999a9U, 0x9448fa11U, 0xe9642247U,
+ 0xfc8cc4a8U, 0xf03f1aa0U, 0x7d2cd856U, 0x3390ef22U,
+ 0x494ec787U, 0x38d1c1d9U, 0xcaa2fe8cU, 0xd40b3698U,
+ 0xf581cfa6U, 0x7ade28a5U, 0xb78e26daU, 0xadbfa43fU,
+ 0x3a9de42cU, 0x78920d50U, 0x5fcc9b6aU, 0x7e466254U,
+ 0x8d13c2f6U, 0xd8b8e890U, 0x39f75e2eU, 0xc3aff582U,
+ 0x5d80be9fU, 0xd0937c69U, 0xd52da96fU, 0x2512b3cfU,
+ 0xac993bc8U, 0x187da710U, 0x9c636ee8U, 0x3bbb7bdbU,
+ 0x267809cdU, 0x5918f46eU, 0x9ab701ecU, 0x4f9aa883U,
+ 0x956e65e6U, 0xffe67eaaU, 0xbccf0821U, 0x15e8e6efU,
+ 0xe79bd9baU, 0x6f36ce4aU, 0x9f09d4eaU, 0xb07cd629U,
+ 0xa4b2af31U, 0x3f23312aU, 0xa59430c6U, 0xa266c035U,
+ 0x4ebc3774U, 0x82caa6fcU, 0x90d0b0e0U, 0xa7d81533U,
+ 0x04984af1U, 0xecdaf741U, 0xcd500e7fU, 0x91f62f17U,
+ 0x4dd68d76U, 0xefb04d43U, 0xaa4d54ccU, 0x9604dfe4U,
+ 0xd1b5e39eU, 0x6a881b4cU, 0x2c1fb8c1U, 0x65517f46U,
+ 0x5eea049dU, 0x8c355d01U, 0x877473faU, 0x0b412efbU,
+ 0x671d5ab3U, 0xdbd25292U, 0x105633e9U, 0xd647136dU,
+ 0xd7618c9aU, 0xa10c7a37U, 0xf8148e59U, 0x133c89ebU,
+ 0xa927eeceU, 0x61c935b7U, 0x1ce5ede1U, 0x47b13c7aU,
+ 0xd2df599cU, 0xf2733f55U, 0x14ce7918U, 0xc737bf73U,
+ 0xf7cdea53U, 0xfdaa5b5fU, 0x3d6f14dfU, 0x44db8678U,
+ 0xaff381caU, 0x68c43eb9U, 0x24342c38U, 0xa3405fc2U,
+ 0x1dc37216U, 0xe2250cbcU, 0x3c498b28U, 0x0d9541ffU,
+ 0xa8017139U, 0x0cb3de08U, 0xb4e49cd8U, 0x56c19064U,
+ 0xcb84617bU, 0x32b670d5U, 0x6c5c7448U, 0xb85742d0U,
+};
+const u32 Td4[256] = {
+ 0x52525252U, 0x09090909U, 0x6a6a6a6aU, 0xd5d5d5d5U,
+ 0x30303030U, 0x36363636U, 0xa5a5a5a5U, 0x38383838U,
+ 0xbfbfbfbfU, 0x40404040U, 0xa3a3a3a3U, 0x9e9e9e9eU,
+ 0x81818181U, 0xf3f3f3f3U, 0xd7d7d7d7U, 0xfbfbfbfbU,
+ 0x7c7c7c7cU, 0xe3e3e3e3U, 0x39393939U, 0x82828282U,
+ 0x9b9b9b9bU, 0x2f2f2f2fU, 0xffffffffU, 0x87878787U,
+ 0x34343434U, 0x8e8e8e8eU, 0x43434343U, 0x44444444U,
+ 0xc4c4c4c4U, 0xdedededeU, 0xe9e9e9e9U, 0xcbcbcbcbU,
+ 0x54545454U, 0x7b7b7b7bU, 0x94949494U, 0x32323232U,
+ 0xa6a6a6a6U, 0xc2c2c2c2U, 0x23232323U, 0x3d3d3d3dU,
+ 0xeeeeeeeeU, 0x4c4c4c4cU, 0x95959595U, 0x0b0b0b0bU,
+ 0x42424242U, 0xfafafafaU, 0xc3c3c3c3U, 0x4e4e4e4eU,
+ 0x08080808U, 0x2e2e2e2eU, 0xa1a1a1a1U, 0x66666666U,
+ 0x28282828U, 0xd9d9d9d9U, 0x24242424U, 0xb2b2b2b2U,
+ 0x76767676U, 0x5b5b5b5bU, 0xa2a2a2a2U, 0x49494949U,
+ 0x6d6d6d6dU, 0x8b8b8b8bU, 0xd1d1d1d1U, 0x25252525U,
+ 0x72727272U, 0xf8f8f8f8U, 0xf6f6f6f6U, 0x64646464U,
+ 0x86868686U, 0x68686868U, 0x98989898U, 0x16161616U,
+ 0xd4d4d4d4U, 0xa4a4a4a4U, 0x5c5c5c5cU, 0xccccccccU,
+ 0x5d5d5d5dU, 0x65656565U, 0xb6b6b6b6U, 0x92929292U,
+ 0x6c6c6c6cU, 0x70707070U, 0x48484848U, 0x50505050U,
+ 0xfdfdfdfdU, 0xededededU, 0xb9b9b9b9U, 0xdadadadaU,
+ 0x5e5e5e5eU, 0x15151515U, 0x46464646U, 0x57575757U,
+ 0xa7a7a7a7U, 0x8d8d8d8dU, 0x9d9d9d9dU, 0x84848484U,
+ 0x90909090U, 0xd8d8d8d8U, 0xababababU, 0x00000000U,
+ 0x8c8c8c8cU, 0xbcbcbcbcU, 0xd3d3d3d3U, 0x0a0a0a0aU,
+ 0xf7f7f7f7U, 0xe4e4e4e4U, 0x58585858U, 0x05050505U,
+ 0xb8b8b8b8U, 0xb3b3b3b3U, 0x45454545U, 0x06060606U,
+ 0xd0d0d0d0U, 0x2c2c2c2cU, 0x1e1e1e1eU, 0x8f8f8f8fU,
+ 0xcacacacaU, 0x3f3f3f3fU, 0x0f0f0f0fU, 0x02020202U,
+ 0xc1c1c1c1U, 0xafafafafU, 0xbdbdbdbdU, 0x03030303U,
+ 0x01010101U, 0x13131313U, 0x8a8a8a8aU, 0x6b6b6b6bU,
+ 0x3a3a3a3aU, 0x91919191U, 0x11111111U, 0x41414141U,
+ 0x4f4f4f4fU, 0x67676767U, 0xdcdcdcdcU, 0xeaeaeaeaU,
+ 0x97979797U, 0xf2f2f2f2U, 0xcfcfcfcfU, 0xcecececeU,
+ 0xf0f0f0f0U, 0xb4b4b4b4U, 0xe6e6e6e6U, 0x73737373U,
+ 0x96969696U, 0xacacacacU, 0x74747474U, 0x22222222U,
+ 0xe7e7e7e7U, 0xadadadadU, 0x35353535U, 0x85858585U,
+ 0xe2e2e2e2U, 0xf9f9f9f9U, 0x37373737U, 0xe8e8e8e8U,
+ 0x1c1c1c1cU, 0x75757575U, 0xdfdfdfdfU, 0x6e6e6e6eU,
+ 0x47474747U, 0xf1f1f1f1U, 0x1a1a1a1aU, 0x71717171U,
+ 0x1d1d1d1dU, 0x29292929U, 0xc5c5c5c5U, 0x89898989U,
+ 0x6f6f6f6fU, 0xb7b7b7b7U, 0x62626262U, 0x0e0e0e0eU,
+ 0xaaaaaaaaU, 0x18181818U, 0xbebebebeU, 0x1b1b1b1bU,
+ 0xfcfcfcfcU, 0x56565656U, 0x3e3e3e3eU, 0x4b4b4b4bU,
+ 0xc6c6c6c6U, 0xd2d2d2d2U, 0x79797979U, 0x20202020U,
+ 0x9a9a9a9aU, 0xdbdbdbdbU, 0xc0c0c0c0U, 0xfefefefeU,
+ 0x78787878U, 0xcdcdcdcdU, 0x5a5a5a5aU, 0xf4f4f4f4U,
+ 0x1f1f1f1fU, 0xddddddddU, 0xa8a8a8a8U, 0x33333333U,
+ 0x88888888U, 0x07070707U, 0xc7c7c7c7U, 0x31313131U,
+ 0xb1b1b1b1U, 0x12121212U, 0x10101010U, 0x59595959U,
+ 0x27272727U, 0x80808080U, 0xececececU, 0x5f5f5f5fU,
+ 0x60606060U, 0x51515151U, 0x7f7f7f7fU, 0xa9a9a9a9U,
+ 0x19191919U, 0xb5b5b5b5U, 0x4a4a4a4aU, 0x0d0d0d0dU,
+ 0x2d2d2d2dU, 0xe5e5e5e5U, 0x7a7a7a7aU, 0x9f9f9f9fU,
+ 0x93939393U, 0xc9c9c9c9U, 0x9c9c9c9cU, 0xefefefefU,
+ 0xa0a0a0a0U, 0xe0e0e0e0U, 0x3b3b3b3bU, 0x4d4d4d4dU,
+ 0xaeaeaeaeU, 0x2a2a2a2aU, 0xf5f5f5f5U, 0xb0b0b0b0U,
+ 0xc8c8c8c8U, 0xebebebebU, 0xbbbbbbbbU, 0x3c3c3c3cU,
+ 0x83838383U, 0x53535353U, 0x99999999U, 0x61616161U,
+ 0x17171717U, 0x2b2b2b2bU, 0x04040404U, 0x7e7e7e7eU,
+ 0xbabababaU, 0x77777777U, 0xd6d6d6d6U, 0x26262626U,
+ 0xe1e1e1e1U, 0x69696969U, 0x14141414U, 0x63636363U,
+ 0x55555555U, 0x21212121U, 0x0c0c0c0cU, 0x7d7d7d7dU,
+};
+const u32 rcon[] = {
+ 0x01000000, 0x02000000, 0x04000000, 0x08000000,
+ 0x10000000, 0x20000000, 0x40000000, 0x80000000,
+ 0x1B000000, 0x36000000, /* for 128-bit blocks, Rijndael never uses more than 10 rcon values */
+};
+
+static void do_test(int keybits, u8 * key,
+ u8 plain[16], u8 cipher[16],
+ int testno1, int testno2)
+{
+ u32 ckey[4 * (MAXNR + 1)];
+ u8 temp[16];
+ int nr;
+ int ok;
+
+ nr = rijndaelKeySetupEnc(ckey, key, keybits);
+ rijndaelEncrypt(ckey, nr, plain, temp);
+ ok = memcmp(temp, cipher, 16) == 0;
+ printf("Encryption test %d %s\n", testno1, ok ? "passed" : "FAILED");
+ nr = rijndaelKeySetupDec(ckey, key, keybits);
+ rijndaelDecrypt(ckey, nr, cipher, temp);
+ ok = memcmp(temp, plain, 16) == 0;
+ printf("Decryption test %d %s\n", testno2, ok ? "passed" : "FAILED");
+}
+
+static void do_bench(int nblocks)
+{
+ u32 ckey[4 * (MAXNR + 1)];
+ u8 temp[16];
+ int nr;
+
+ nr = rijndaelKeySetupEnc(ckey, "\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0A\x0B\x0C\x0D\x0E\x0F", 128);
+ for (; nblocks > 0; nblocks--)
+ rijndaelEncrypt(ckey, nr, temp, temp);
+}
+
+int main(int argc, char ** argv)
+{
+ if (argc < 2) {
+ do_test(128,
+ "\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0A\x0B\x0C\x0D\x0E\x0F",
+ "\x00\x11\x22\x33\x44\x55\x66\x77\x88\x99\xAA\xBB\xCC\xDD\xEE\xFF",
+ "\x69\xC4\xE0\xD8\x6A\x7B\x04\x30\xD8\xCD\xB7\x80\x70\xB4\xC5\x5A",
+ 1, 2);
+ do_test(192,
+ "\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0A\x0B\x0C\x0D\x0E\x0F\x10\x11\x12\x13\x14\x15\x16\x17",
+ "\x00\x11\x22\x33\x44\x55\x66\x77\x88\x99\xAA\xBB\xCC\xDD\xEE\xFF",
+ "\xDD\xA9\x7C\xA4\x86\x4C\xDF\xE0\x6E\xAF\x70\xA0\xEC\x0D\x71\x91",
+ 3, 4);
+ do_test(256,
+ "\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0A\x0B\x0C\x0D\x0E\x0F\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1A\x1B\x1C\x1D\x1E\x1F",
+ "\x00\x11\x22\x33\x44\x55\x66\x77\x88\x99\xAA\xBB\xCC\xDD\xEE\xFF",
+ "\x8E\xA2\xB7\xCA\x51\x67\x45\xBF\xEA\xFC\x49\x90\x4B\x49\x60\x89",
+ 5, 6);
+ } else {
+ do_bench(atoi(argv[1]));
+ }
+ return 0;
+}
+
+
+
+
diff --git a/test/harness/mainalmabench.c b/test/harness/mainalmabench.c
new file mode 100644
index 0000000..c514cca
--- /dev/null
+++ b/test/harness/mainalmabench.c
@@ -0,0 +1,185 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+
+static const double J2000 = 2451545.0;
+static const int TEST_LENGTH = 36525;
+
+const double amas [8] = { 6023600.0, 408523.5, 328900.5, 3098710.0, 1047.355, 3498.5, 22869.0, 19314.0 };
+
+const double a [8][3] =
+ { { 0.3870983098, 0, 0 },
+ { 0.7233298200, 0, 0 },
+ { 1.0000010178, 0, 0 },
+ { 1.5236793419, 3e-10, 0 },
+ { 5.2026032092, 19132e-10, -39e-10 },
+ { 9.5549091915, -0.0000213896, 444e-10 },
+ { 19.2184460618, -3716e-10, 979e-10 },
+ { 30.1103868694, -16635e-10, 686e-10 } };
+
+const double dlm[8][3] =
+ { { 252.25090552, 5381016286.88982, -1.92789 },
+ { 181.97980085, 2106641364.33548, 0.59381 },
+ { 100.46645683, 1295977422.83429, -2.04411 },
+ { 355.43299958, 689050774.93988, 0.94264 },
+ { 34.35151874, 109256603.77991, -30.60378 },
+ { 50.07744430, 43996098.55732, 75.61614 },
+ { 314.05500511, 15424811.93933, -1.75083 },
+ { 304.34866548, 7865503.20744, 0.21103 } };
+
+const double e[8][3] =
+ { { 0.2056317526, 0.0002040653, -28349e-10 },
+ { 0.0067719164, -0.0004776521, 98127e-10 },
+ { 0.0167086342, -0.0004203654, -0.0000126734 },
+ { 0.0934006477, 0.0009048438, -80641e-10 },
+ { 0.0484979255, 0.0016322542, -0.0000471366 },
+ { 0.0555481426, -0.0034664062, -0.0000643639 },
+ { 0.0463812221, -0.0002729293, 0.0000078913 },
+ { 0.0094557470, 0.0000603263, 0 } };
+
+const double pi[8][3] =
+ { { 77.45611904, 5719.11590, -4.83016 },
+ { 131.56370300, 175.48640, -498.48184 },
+ { 102.93734808, 11612.35290, 53.27577 },
+ { 336.06023395, 15980.45908, -62.32800 },
+ { 14.33120687, 7758.75163, 259.95938 },
+ { 93.05723748, 20395.49439, 190.25952 },
+ { 173.00529106, 3215.56238, -34.09288 },
+ { 48.12027554, 1050.71912, 27.39717 } };
+
+const double dinc[8][3] =
+ { { 7.00498625, -214.25629, 0.28977 },
+ { 3.39466189, -30.84437, -11.67836 },
+ { 0, 469.97289, -3.35053 },
+ { 1.84972648, -293.31722, -8.11830 },
+ { 1.30326698, -71.55890, 11.95297 },
+ { 2.48887878, 91.85195, -17.66225 },
+ { 0.77319689, -60.72723, 1.25759 },
+ { 1.76995259, 8.12333, 0.08135 } };
+
+const double omega[8][3] =
+ { { 48.33089304, -4515.21727, -31.79892 },
+ { 76.67992019, -10008.48154, -51.32614 },
+ { 174.87317577, -8679.27034, 15.34191 },
+ { 49.55809321, -10620.90088, -230.57416 },
+ { 100.46440702, 6362.03561, 326.52178 },
+ { 113.66550252, -9240.19942, -66.23743 },
+ { 74.00595701, 2669.15033, 145.93964 },
+ { 131.78405702, -221.94322, -0.78728 } };
+
+const double kp[8][9] =
+ { { 69613.0, 75645.0, 88306.0, 59899.0, 15746.0, 71087.0, 142173.0, 3086.0, 0.0 },
+ { 21863.0, 32794.0, 26934.0, 10931.0, 26250.0, 43725.0, 53867.0, 28939.0, 0.0 },
+ { 16002.0, 21863.0, 32004.0, 10931.0, 14529.0, 16368.0, 15318.0, 32794.0, 0.0 },
+ { 6345.0, 7818.0, 15636.0, 7077.0, 8184.0, 14163.0, 1107.0, 4872.0, 0.0 },
+ { 1760.0, 1454.0, 1167.0, 880.0, 287.0, 2640.0, 19.0, 2047.0, 1454.0 },
+ { 574.0, 0.0, 880.0, 287.0, 19.0, 1760.0, 1167.0, 306.0, 574.0 },
+ { 204.0, 0.0, 177.0, 1265.0, 4.0, 385.0, 200.0, 208.0, 204.0 },
+ { 0.0, 102.0, 106.0, 4.0, 98.0, 1367.0, 487.0, 204.0, 0.0 } };
+
+const double ca[8][9] =
+ { { 4.0, -13.0, 11.0, -9.0, -9.0, -3.0, -1.0, 4.0, 0.0 },
+ { -156.0, 59.0, -42.0, 6.0, 19.0, -20.0, -10.0, -12.0, 0.0 },
+ { 64.0, -152.0, 62.0, -8.0, 32.0, -41.0, 19.0, -11.0, 0.0 },
+ { 124.0, 621.0, -145.0, 208.0, 54.0, -57.0, 30.0, 15.0, 0.0 },
+ { -23437.0, -2634.0, 6601.0, 6259.0, -1507.0, -1821.0, 2620.0, -2115.0,-1489.0 },
+ { 62911.0,-119919.0, 79336.0, 17814.0,-24241.0, 12068.0, 8306.0, -4893.0, 8902.0 },
+ { 389061.0,-262125.0,-44088.0, 8387.0,-22976.0, -2093.0, -615.0, -9720.0, 6633.0 },
+ { -412235.0,-157046.0,-31430.0, 37817.0, -9740.0, -13.0, -7449.0, 9644.0, 0.0 } };
+
+const double sa[8][9] =
+ { { -29.0, -1.0, 9.0, 6.0, -6.0, 5.0, 4.0, 0.0, 0.0 },
+ { -48.0, -125.0, -26.0, -37.0, 18.0, -13.0, -20.0, -2.0, 0.0 },
+ { -150.0, -46.0, 68.0, 54.0, 14.0, 24.0, -28.0, 22.0, 0.0 },
+ { -621.0, 532.0, -694.0, -20.0, 192.0, -94.0, 71.0, -73.0, 0.0 },
+ { -14614.0,-19828.0, -5869.0, 1881.0, -4372.0, -2255.0, 782.0, 930.0, 913.0 },
+ { 139737.0, 0.0, 24667.0, 51123.0, -5102.0, 7429.0, -4095.0, -1976.0,-9566.0 },
+ { -138081.0, 0.0, 37205.0,-49039.0,-41901.0,-33872.0,-27037.0,-12474.0,18797.0 },
+ { 0.0, 28492.0,133236.0, 69654.0, 52322.0,-49577.0,-26430.0, -3593.0, 0.0 } };
+
+const double kq[8][10] =
+ { { 3086.0, 15746.0, 69613.0, 59899.0, 75645.0, 88306.0, 12661.0, 2658.0, 0.0, 0.0 },
+ { 21863.0, 32794.0, 10931.0, 73.0, 4387.0, 26934.0, 1473.0, 2157.0, 0.0, 0.0 },
+ { 10.0, 16002.0, 21863.0, 10931.0, 1473.0, 32004.0, 4387.0, 73.0, 0.0, 0.0 },
+ { 10.0, 6345.0, 7818.0, 1107.0, 15636.0, 7077.0, 8184.0, 532.0, 10.0, 0.0 },
+ { 19.0, 1760.0, 1454.0, 287.0, 1167.0, 880.0, 574.0, 2640.0, 19.0,1454.0 },
+ { 19.0, 574.0, 287.0, 306.0, 1760.0, 12.0, 31.0, 38.0, 19.0, 574.0 },
+ { 4.0, 204.0, 177.0, 8.0, 31.0, 200.0, 1265.0, 102.0, 4.0, 204.0 },
+ { 4.0, 102.0, 106.0, 8.0, 98.0, 1367.0, 487.0, 204.0, 4.0, 102.0 } };
+
+const double cl[8][10] =
+ { { 21.0, -95.0, -157.0, 41.0, -5.0, 42.0, 23.0, 30.0, 0.0, 0.0 },
+ { -160.0, -313.0, -235.0, 60.0, -74.0, -76.0, -27.0, 34.0, 0.0, 0.0 },
+ { -325.0, -322.0, -79.0, 232.0, -52.0, 97.0, 55.0, -41.0, 0.0, 0.0 },
+ { 2268.0, -979.0, 802.0, 602.0, -668.0, -33.0, 345.0, 201.0, -55.0, 0.0 },
+ { 7610.0, -4997.0,-7689.0,-5841.0,-2617.0, 1115.0, -748.0, -607.0, 6074.0, 354.0 },
+ { -18549.0, 30125.0,20012.0, -730.0, 824.0, 23.0, 1289.0, -352.0,-14767.0,-2062.0 },
+ { -135245.0,-14594.0, 4197.0,-4030.0,-5630.0,-2898.0, 2540.0, -306.0, 2939.0, 1986.0 },
+ { 89948.0, 2103.0, 8963.0, 2695.0, 3682.0, 1648.0, 866.0, -154.0, -1963.0, -283.0 } };
+
+const double sl[8][10] =
+ { { -342.0, 136.0, -23.0, 62.0, 66.0, -52.0, -33.0, 17.0, 0.0, 0.0 },
+ { 524.0, -149.0, -35.0, 117.0, 151.0, 122.0, -71.0, -62.0, 0.0, 0.0 },
+ { -105.0, -137.0, 258.0, 35.0, -116.0, -88.0, -112.0, -80.0, 0.0, 0.0 },
+ { 854.0, -205.0, -936.0, -240.0, 140.0, -341.0, -97.0, -232.0, 536.0, 0.0 },
+ { -56980.0, 8016.0, 1012.0, 1448.0,-3024.0,-3710.0, 318.0, 503.0, 3767.0, 577.0 },
+ { 138606.0,-13478.0,-4964.0, 1441.0,-1319.0,-1482.0, 427.0, 1236.0, -9167.0,-1918.0 },
+ { 71234.0,-41116.0, 5334.0,-4935.0,-1848.0, 66.0, 434.0,-1748.0, 3780.0, -701.0 },
+ { -47645.0, 11647.0, 2166.0, 3194.0, 679.0, 0.0, -244.0, -419.0, -2531.0, 48.0 } };
+
+extern void planetpv (double epoch[2], int np, double pv[2][3]);
+extern void radecdist(double state[2][3], double rdd[3]);
+
+static void test(void)
+{
+ int p;
+ double jd[2];
+ double pv[2][3];
+ double position[3];
+
+ jd[0] = J2000;
+ jd[1] = 0.0;
+ for (p = 0; p < 8; ++p)
+ {
+ planetpv(jd,p,pv);
+ radecdist(pv,position);
+ printf("p = %d position[0] = %g position[1] = %g\n",
+ p, position[0], position[1]);
+ }
+}
+
+
+static void bench(int nloops)
+{
+ int i, n, p;
+ double jd[2];
+ double pv[2][3];
+ double position[3];
+
+ for (i = 0; i < nloops; ++i)
+ {
+ jd[0] = J2000;
+ jd[1] = 0.0;
+
+ for (n = 0; n < TEST_LENGTH; ++n)
+ {
+ jd[0] += 1.0;
+
+ for (p = 0; p < 8; ++p)
+ {
+ planetpv(jd,p,pv);
+ radecdist(pv,position);
+ }
+ }
+ }
+}
+
+int main(int argc, char ** argv)
+{
+ if (argc >= 2)
+ bench(atoi(argv[1]));
+ else
+ test();
+ return 0;
+}
+
diff --git a/test/harness/mainfft.c b/test/harness/mainfft.c
new file mode 100644
index 0000000..ce75062
--- /dev/null
+++ b/test/harness/mainfft.c
@@ -0,0 +1,72 @@
+#undef DEBUG
+#include <math.h>
+#include <stdlib.h>
+#include <stdio.h>
+
+#define PI 3.14159265358979323846
+
+extern void dfft(double * xr, double * xi, int np);
+
+double * xr, * xi;
+
+#ifdef DEBUG
+void trace()
+{
+ int i;
+ for (i=0; i<=15; i++) printf("%d %g %g\n",i,xr[i],xi[i]);
+ printf("-----------\n");
+}
+void print_int(int n) { printf("%d\n", n); }
+void print_float(double x) { printf("%g\n", x); }
+#endif
+
+int main(int argc, char ** argv)
+{
+ int n, np, npm, n2, i, j;
+ double enp, t, y, z, zr, zi, zm, a;
+ double * pxr, * pxi;
+
+ if (argc >= 2) n = atoi(argv[1]); else n = 12;
+ np = 1 << n;
+ enp = np;
+ npm = np / 2 - 1;
+ t = PI / enp;
+ xr = calloc(np, sizeof(double));
+ xi = calloc(np, sizeof(double));
+ pxr = xr;
+ pxi = xi;
+ *pxr = (enp - 1.0) * 0.5;
+ *pxi = 0.0;
+ n2 = np / 2;
+ *(pxr+n2) = -0.5;
+ *(pxi+n2) = 0.0;
+ for (i = 1; i <= npm; i++) {
+ j = np - i;
+ *(pxr+i) = -0.5;
+ *(pxr+j) = -0.5;
+ z = t * (double)i;
+ y = -0.5*(cos(z)/sin(z));
+ *(pxi+i) = y;
+ *(pxi+j) = -y;
+ }
+#ifdef DEBUG
+ trace();
+#endif
+ dfft(xr,xi,np);
+#ifdef DEBUG
+ trace();
+#endif
+ zr = 0.0;
+ zi = 0.0;
+ npm = np-1;
+ for (i = 0; i <= npm; i++ ) {
+ a = fabs(pxr[i] - i);
+ if (zr < a) zr = a;
+ a = fabs(pxi[i]);
+ if (zi < a) zi = a;
+ }
+ zm = zr;
+ if (zr < zi) zm = zi;
+ printf("%d points, error %g\n", np, zm);
+ return 0;
+}
diff --git a/test/harness/mainfib.c b/test/harness/mainfib.c
new file mode 100644
index 0000000..a736d70
--- /dev/null
+++ b/test/harness/mainfib.c
@@ -0,0 +1,13 @@
+#include <stdlib.h>
+#include <stdio.h>
+
+extern int fib(int);
+
+int main(int argc, char ** argv)
+{
+ int n, r;
+ if (argc >= 2) n = atoi(argv[1]); else n = 30;
+ r = fib(n);
+ printf("fib(%d) = %d\n", n, r);
+ return 0;
+}
diff --git a/test/harness/mainintegr.c b/test/harness/mainintegr.c
new file mode 100644
index 0000000..5f5bdfe
--- /dev/null
+++ b/test/harness/mainintegr.c
@@ -0,0 +1,13 @@
+#include <stdlib.h>
+#include <stdio.h>
+
+extern double test(int);
+
+int main(int argc, char ** argv)
+{
+ int n; double r;
+ if (argc >= 2) n = atoi(argv[1]); else n = 10000;
+ r = test(n);
+ printf("integr(square, 0.0, 1.0, %d) = %g\n", n, r);
+ return 0;
+}
diff --git a/test/harness/mainmanyargs.c b/test/harness/mainmanyargs.c
new file mode 100644
index 0000000..36bcf76
--- /dev/null
+++ b/test/harness/mainmanyargs.c
@@ -0,0 +1,13 @@
+#include <stdio.h>
+
+void print_int(int n) { printf("%d\n", n); }
+void print_float(double n) { printf("%g\n", n); }
+
+extern void g(int,int,int,int,int,
+ double,double,double,double,double);
+
+int main()
+{
+ g(1,2,3,4,5, 0.1,0.2,0.3,0.4,0.5);
+ return 0;
+}
diff --git a/test/harness/mainqsort.c b/test/harness/mainqsort.c
new file mode 100644
index 0000000..63a7614
--- /dev/null
+++ b/test/harness/mainqsort.c
@@ -0,0 +1,36 @@
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+extern void quicksort(int lo, int hi, long * data);
+
+int cmplong(const void * i, const void * j)
+{
+ long vi = *((long *) i);
+ long vj = *((long *) j);
+ if (vi == vj) return 0;
+ if (vi < vj) return -1;
+ return 1;
+}
+
+int main(int argc, char ** argv)
+{
+ int n, i;
+ long * a, * b;
+ int bench = 0;
+
+ if (argc >= 2) n = atoi(argv[1]); else n = 1000;
+ if (argc >= 3) bench = 1;
+ a = malloc(n * sizeof(long));
+ b = malloc(n * sizeof(long));
+ for (i = 0; i < n; i++) b[i] = a[i] = rand() & 0xFFFF;
+ quicksort(0, n - 1, a);
+ if (!bench) {
+ qsort(b, n, sizeof(long), cmplong);
+ for (i = 0; i < n; i++) {
+ if (a[i] != b[i]) { printf("Bug!\n"); return 2; }
+ }
+ printf("OK\n");
+ }
+ return 0;
+}
diff --git a/test/harness/mainsha1.c b/test/harness/mainsha1.c
new file mode 100644
index 0000000..2364076
--- /dev/null
+++ b/test/harness/mainsha1.c
@@ -0,0 +1,75 @@
+#include <string.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+typedef unsigned int u32;
+
+struct SHA1Context {
+ u32 state[5];
+ u32 length[2];
+ int numbytes;
+ unsigned char buffer[64];
+};
+
+extern void SHA1_init(struct SHA1Context * ctx);
+extern void SHA1_add_data(struct SHA1Context * ctx, unsigned char * data,
+ unsigned long len);
+extern void SHA1_finish(struct SHA1Context * ctx, unsigned char output[20]);
+
+static void do_test(unsigned char * txt, unsigned char * expected_output)
+{
+ struct SHA1Context ctx;
+ unsigned char output[20];
+ int ok;
+
+ SHA1_init(&ctx);
+ SHA1_add_data(&ctx, txt, strlen((char *) txt));
+ SHA1_finish(&ctx, output);
+ ok = memcmp(output, expected_output, 20) == 0;
+ printf("Test `%s': %s\n",
+ (char *) txt, (ok ? "passed" : "FAILED"));
+}
+
+/* Test vectors:
+ *
+ * "abc"
+ * A999 3E36 4706 816A BA3E 2571 7850 C26C 9CD0 D89D
+ *
+ * "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"
+ * 8498 3E44 1C3B D26E BAAE 4AA1 F951 29E5 E546 70F1
+ */
+
+unsigned char * test_input_1 = "abc";
+unsigned char test_output_1[20] =
+{ 0xA9, 0x99, 0x3E, 0x36, 0x47, 0x06, 0x81, 0x6A, 0xBA, 0x3E ,
+ 0x25, 0x71, 0x78, 0x50, 0xC2, 0x6C, 0x9C, 0xD0, 0xD8, 0x9D };
+
+unsigned char * test_input_2 =
+ "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq";
+unsigned char test_output_2[20] =
+{ 0x84, 0x98, 0x3E, 0x44, 0x1C, 0x3B, 0xD2, 0x6E, 0xBA, 0xAE,
+ 0x4A, 0xA1, 0xF9, 0x51, 0x29, 0xE5, 0xE5, 0x46, 0x70, 0xF1 };
+
+
+static void do_bench(int nblocks)
+{
+ struct SHA1Context ctx;
+ unsigned char output[20];
+ unsigned char data[64];
+
+ SHA1_init(&ctx);
+ for (; nblocks > 0; nblocks--)
+ SHA1_add_data(&ctx, data, 64);
+ SHA1_finish(&ctx, output);
+}
+
+int main(int argc, char ** argv)
+{
+ if (argc < 2) {
+ do_test(test_input_1, test_output_1);
+ do_test(test_input_2, test_output_2);
+ } else {
+ do_bench(atoi(argv[1]));
+ }
+ return 0;
+}
diff --git a/test/lib/staticlib.S b/test/lib/staticlib.S
new file mode 100644
index 0000000..b093e7c
--- /dev/null
+++ b/test/lib/staticlib.S
@@ -0,0 +1,26 @@
+/* Work around MacOX shared-library lossage.
+ (No static version of the C library.) */
+
+.macro GLUE
+ .text
+ .globl _$0_static
+_$0_static:
+ addis r11, 0, ha16(L$0)
+ lwz r11, lo16(L$0)(r11)
+ mtctr r11
+ bctr
+ .non_lazy_symbol_pointer
+L$0:
+ .indirect_symbol _$0
+ .long 0
+.endmacro
+
+ GLUE cos
+ GLUE sin
+ GLUE atan2
+ GLUE asin
+ GLUE sqrt
+ GLUE fmod
+ GLUE memcpy
+ GLUE memset
+ \ No newline at end of file