aboutsummaryrefslogtreecommitdiff
path: root/src/README.md
diff options
context:
space:
mode:
Diffstat (limited to 'src/README.md')
-rw-r--r--src/README.md197
1 files changed, 0 insertions, 197 deletions
diff --git a/src/README.md b/src/README.md
deleted file mode 100644
index 400a2e005..000000000
--- a/src/README.md
+++ /dev/null
@@ -1,197 +0,0 @@
-The ordering of files (eliding `*Proofs.v` files) is:
-
-```
- Language.v ←──────────────────────────────────────────────────┬───────────────────────────────┐
- ↗ ↖ │ │
- ↗ ↖ │ │
- UnderLets.v GENERATEDIdentifiersWithoutTypes.v MiscCompilerPasses.v PushButtonSynthesis/ReificationCache.v
- ↑ ↖ ↗ ↑ ↑
-AbstractInterpretation.v Rewriter.v │ │
- ↑ ↑ ┌────────────────────────────────────────────────────┘ │
-CStringification.v │ │ Arithmetic.v │
- ↑ ┌───────────────────┴─┘ ↑ │
-BoundsPipeline.v COperationSpecifications.v │
- ↑ ↑ │
- │ ┌────────────────────────────────────────┴────────────────────────────────────────────────────────────────┘
-PushButtonSynthesis.v ←── Toplevel2.v ←───────────┐
- ↑ │
-CLI.v SlowPrimeSynthesisExamples.v
-↑ ↑
-│ └────────────────────────────┐
-StandaloneHaskellMain.v StandaloneOCamlMain.v
- ↑ ↑
-ExtractionHaskell.v ExtractionOCaml.v
-```
-
-The files contain:
-
-- Arithmetic.v: All of the high-level field arithmetic stuff
-
-- Language.v:
- + PHOAS
- + reification
- + denotation/intepretation
- + utilities for inverting PHOAS exprs
- + default/dummy values of PHOAS exprs
- + default instantiation of generic PHOAS types
- + gallina reification of ground terms
- + Flat/indexed syntax trees, and conversions to and from PHOAS
- Defines the passes:
- + ToFlat
- + FromFlat
- + GeneralizeVar
-
-- UnderLets.v: the UnderLets monad, a pass that does substitution of var-like
- things, a pass that inserts let-binders in the next-to-last line of code,
- substituting away var-like things (this is used to ensure that when we output
- C code, aliasing the input and the output arrays doesn't cause issues).
- Defines the passes:
- + SubstVarFstSndPairOppCast
-
-- AbstractInterpretation.v: type-code-based ZRange definitions, abstract
- interpretation of identifiers (which does let-lifting, for historical reasons,
- and the dependency on UnderLets should probably be removed), defines the
- passes:
- + PartialEvaluateWithBounds
- + PartialEvaluateWithListInfoFromBounds
- + CheckPartialEvaluateWithBounds
-
-- GENERATEDIdentifiersWithoutTypes.v: generated by a python script which is
- included in a comment in the file, this is an untyped version of identifiers
- for the rewriter
-
-- Rewriter.v: rewrite rules, rewriting. Defines the passes:
- + Rewrite
- + RewriteToFancy
- + PartialEvaluate (which is just a synonym for Rewrite)
-
-- MiscCompilerPasses.v: Defines the passes:
- + EliminateDead (dead code elimination)
- + Subst01 (substitute let-binders used 0 or 1 times)
-
-- CStringification.v: conversion to C code as strings. (Depends on
- AbstractInterpretation.v for ZRange utilities.) Defines the passes:
- + ToString.ToFunctionLines
- + ToString.ToFunctionString
- + ToString.LinesToString
-
-- CompilersTestCases.v: Various test cases to ensure everything is working
-
-- BoundsPipeline.v: Assemble the various compiler passes together into
- a composed pipeline. It is the final interface for the compiler.
- Also contains some tactics for applying the BoundsPipeline
- correctness lemma.
-
-- COperationSpecifications.v: The specifications for the various
- operations to be synthesized.
-
-- PushButtonSynthesis/ReificationCache.v: Defines the cache that holds
- reified versions of operations, as well as the tactics that reify
- and apply things from the cache.
-
-- PushButtonSynthesis.v: Reifies the various operations from
- Arithmetic.v, definies the compositions of the BoundsPipeline with
- these operations, proves that their interpretations satisfies the
- specs from COperationSpecifications.v, assembles the reified
- post-bounds operations into synthesis targets. This is the file
- that CLI.v depends on.
-
-- Toplevel2.v: Some not-quite-finished-but-kind-of-slow pipeline stuff
- + all the stuff that uses compilers + arithmetic, together with more
- examples. Also has semi-broken fancy-machine stuff. This should
- probably be merged into Toplevel1.v when working on the pipeline.
-
-- SlowPrimeSynthesisExamples.v: Additional uses of the pipeline for
- primes that are kind-of slow, which I don't want extraction blocking
- on.
-
-- CLI.v: Setting up all of the language-independent parts of extraction; relies
- on having a list of strings-or-error-messages for each pipeline, and on the
- arguments to that pipeline, and builds a parser for command line arguments for
- that.
-
-- StandaloneHaskellMain.v, StandaloneOCamlMain.v, ExtractionHaskell.v,
- ExtractionOCaml.v: Extraction of pipeline to various languages
-
-
-Proofs files:
-For Language.v, there is a semi-arbitrary split between two files
-`LanguageInversion` and `LanguageWf`.
-- LanguageInversion.v:
- + classifies equality of type codes and exprs
- + type codes have decidable equality
- + correctness of the various type-transport definitions
- + correctness lemmas for the various `expr.invert_*` definitions
- + correctness lemmas for the various `reify_*` definitions in Language.v
- + inversion_type, which inverts equality of type codes
- + type_beq_to_eq, which converts boolean equality of types to
- Leibniz equality
- + rewrite_type_transport_correct, which rewrites with the
- correctness lemmas of the various type-transport definitions
- + `type.invert_one e` which does case analysis on any inductive type
- indexed over type codes, in a way that preserves information
- about the type of `e`, and generally works even when the goal is
- dependently typed over `e` and/or its type
- + ident.invert, which does case-anaylsis on idents whose type has
- structure (i.e., is not a var)
- + ident.invert_match, which does case-analysis on idents appearing as
- the discriminee of a `match` in the goal or in any hypothesis
- + expr.invert, which does case-anaylsis on exprs whose type has
- structure (i.e., is not a var)
- + expr.invert_match, which does case-analysis on exprs appearing as
- the discriminee of a `match` in the goal or in any hypothesis
- + expr.invert_subst, which does case-analysis on exprs which show up
- in hypotheses of the form `expr.invert_* _ = Some _`
- + expr.inversion_expr, which inverts equalities of exprs
-
-- LanguageWf.v: Depends on LanguageInversion.v
- Defines:
- + expr.wf, expr.Wf, expr.wf3, expr.Wf3
- + GeneralizeVar.Flat.wf
- + expr.inversion_wf (and variants), which invert `wf` hypotheses
- + expr.wf_t (and variants wf_unsafe_t and wf_safe_t) which make
- progress on `wf` goals; `wf_safe_t` should never turn a provable
- goal into an unprovable one, while `wf_unsafe_t` might.
- + expr.interp_t (and variants), which should make progress on
- equivalence-of-interp hypotheses and goals, but is not used much
- (mainly because I forgot I had defined it)
- + prove_Wf, which proves wf goals on concrete syntax trees in a more
- optimized way than `repeat constructor`
- Proves:
- + funext → (type.eqv ↔ Logic.eq) (`eqv_iff_eq_of_funext`)
- + type.related and type.eqv are PERs
- + Proper instances for type.app_curried, type.and_for_each_lhs_of_arrow
- + type.is_not_higher_order → Reflexive (type.and_for_each_lhs_of_arrow type.eqv)
- + iff between type.related{,_hetero} and related of type.app_curried
- + various properties of type.and{,b_bool}for_each_lhs_of_arrow
- + various properties of type.eqv and ident.{gen_,}interp
- + various properties of ident.cast
- + various properties of expr.wf (particularly of things defined in Language.v)
- + interp and wf proofs for the passes to/from Flat
-
-- UnderLetsProofs.v: wf and interp lemmas for the various passes defined in UnderLets.v
-- MiscCompilerPassesProofs.v: wf and interp lemmas for the various passes defined in MiscCompilerPasses.v
-- GENERATEDIdentifiersWithoutTypesProofs.v: various lemmas about the definitions in GENERATEDIdentifiersWithoutTypes.v
-- AbstractInterpretationZRangeProofs.v: Proves correctness lemmas of the per-operation zrange-bounds-analysis functions
-- AbstractInterpretationWf.v: wf lemmas for the AbstractInterpretation pass
-- AbstractInterpretationProofs.v: interp lemmas for the
- AbstractInterpretation pass, and also correctness lemmas that
- combine Wf and interp
-- RewriterWf1.v: a semi-arbitrary collection of proofs and definitions
- that are mostly shared between the wf proofs and the interp proofs.
- Importantly, this file defines everything needed to state and prove
- that specific rewrite rules are correct.
-- RewriterRulesGood.v: Proves that all specific rewriter rules are
- good enough for wf proofs (as specified in RewriterWf1.v)
-- RewriterRulesInterpGood.v: Proves that all specific rewriter rules
- are good enough for interp proofs (as specified in RewriterWf1.v)
-- RewriterWf2.v: Proves wf of the generic rewriter pass, taking in
- specific-rewriter-rule-correctness as a hypothesis
-- RewriterInterpProofs1.v: Proves interp-correctness of the generic
- rewriter pass, taking in specific-rewriter-rule-correctness as a
- hypothesis
-- RewriterProofs.v: assembles the proofs from RewriterRulesGood.v,
- RewriterRulesInterpGood.v, RewriterWf2.v, and
- RewriterInterpProofs1.v into correctness lemmas for the overall
- rewriter pass, specialized and pre-evaluated for specific rewrite
- rules