summaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2014-03-07use allFin rather than tabulate idHelmut Grohne
2014-03-05Merge branch feature-omit-sequence into masterHelmut Grohne
Beyond allowing default values during shape updates, this branch simplifies working with shapes other than Vec.
2014-03-04make lemma-sequenceV-successful more preciseHelmut Grohne
2014-02-26weaken assumptions made by theorem-2 and asssoc-enoughHelmut Grohne
2014-02-26remove the sequenceV call from bffHelmut Grohne
This allows bff to be more precise with regard to its failure modes, even though we are not yet making use of that projected precision. It allows inserting a default value for entries that could not be recovered in a shape changing update as described in VoigtlaenderHMW13.
2014-02-26fix compilation on Agda 2.3.0.1Helmut Grohne
2014-02-26convert LiftGet module to using heterogeneous equalityHelmut Grohne
The reduction in proof length is impressive.
2014-02-24add intersperse as another exampleHelmut Grohne
2014-02-24theorem-2 works with EqR rather than SetoidReasoning againHelmut Grohne
2014-02-24define fromFunc more convenientlyHelmut Grohne
2014-02-24generalize/weaken lemma-get-mapMVHelmut Grohne
It is now lemma-get-sequenceV and thus no longer applies the free theorem for the function. Apart making the proof shorter, it also makes the main use of the free theorem more visible in theorem-2.
2014-02-24define mapMV via sequenceVHelmut Grohne
This makes a few proofs easier and eliminates the need for sequence-map entirely.
2014-02-24generalize lemma-lookupM-assocHelmut Grohne
2014-02-21minor simplificationsHelmut Grohne
2014-02-21use map-Σ to simplify lemma-mapM-successfulHelmut Grohne
2014-02-17fix compilation on Agda 2.3.0.1Helmut Grohne
2014-02-17use drop, tail and take from Data.Vec in examplesHelmut Grohne
This is possible using the PartialVecVec implementation.
2014-02-17switch examples to PartialVecVecHelmut Grohne
2014-02-17Merge branch feature-partial-getlen into masterHelmut Grohne
It allows defining get functions that are only defined for some vector lengths. It retains backwards compatibility with the previous state via a VecVec compatibility module. The biggest benefit is that now standard library functions such as tail, take and drop can be passed to bff. Conflicts: heavy BFF.agda (imports, bff type clash) Bidir.agda (imports, heavy bff type clash in theorem-{1,2} and lemma-get-mapMV) Generic.agda (imports) Precond.agda (imports, bff type clash in assoc-enough)
2014-02-17avoid useless repetitionHelmut Grohne
2014-02-14Merge branch feature-shape-update into masterHelmut Grohne
The branch enables shape updates in variety of flavours: * explicitly passing the desired target shape * providing a plugin sput : ℕ → ℕ → Maybe ℕ * providing a right-inverse to getlen It also provides a backwards compatibility function to facilitate shape-retaining updates.
2014-02-14add back original bff function before shape updatesHelmut Grohne
2014-02-10add bffplug and bffinv functions and examplesHelmut Grohne
We can now exploit getlen being rightinvertible and it works for drop and sieve.
2014-02-10Merge branch master into feature-shape-updateHelmut Grohne
For building on the sieve example.
2014-02-10add sieve to examplesHelmut Grohne
2014-02-07eliminate useless withsHelmut Grohne
2014-02-07replace rewrite with cong where feasibleHelmut Grohne
2014-02-07allow shape shape updates in bffHelmut Grohne
Unlike the original version in VoigtlaenderHMW13, we do not request an sput : ℕ → ℕ → Maybe ℕ function for determining the updated source shape from the original source and updated view shape. Instead we ask the caller directly to provide the result of sput together with a proof that its getlen matches with the provided, updated view. The precondition assoc-enough is not enriched in this way and still requires a non-changing shape. I.e. it says what it said before.
2014-02-05be more precise about which lookups we useHelmut Grohne
2014-02-05strip even more implementation detail in PrecondHelmut Grohne
2014-02-05strip implementation detail from lemma-union-delete-fromFuncHelmut Grohne
2014-02-05add lemma-lookupM-fromFuncHelmut Grohne
The new lemma replaces two uses of lemma-fromFunc-tabulate, because the latter exposes the implementation of FinMapMaybe, whereas the former argues about the behaviour of FinMapMaybe. The aim of not exposing the implementation (apart from brevity) is to enable refactoring.
2014-02-05add examplesHelmut Grohne
2014-02-04remove unused importsHelmut Grohne
Most of the became unused by using the convenience functions introduced in the parent commit.
2014-02-04add convenience members to PartialVecVec.GetHelmut Grohne
2014-02-04Merge branch feature-get-record into feature-partial-getlenHelmut Grohne
These two features heavily interconnect. As such it makes sense to integrate them properly. This non-trivial merge does that work. Compared to feature-partial-getlen a few definitions moved from FreeTheorems.agda to GetTypes.agda. Many types changed compared to both branches. Conflicts: BFF.agda Bidir.agda FreeTheorems.agda Precond.agda conflict in GetTypes.agda not detected by merge
2014-02-03make things compile with 2.3.0.1Helmut Grohne
* Remove let patter , match = foo usage * Remove Qualified.infix-symbol usage * Add non-obvious absurd patterns * Qualify constructors
2014-02-03Merge branch feature-get-record into masterHelmut Grohne
This branch brings three main benefits: * Only one explicit parameter is needed to ask for a get function. * The postulated free theorems are mostly turned into preconditions, i.e. the only use of the postulates is in LiftGet. * We can now convert list based get functions to vec based ones and back including the (now) accompanying free theorem.
2014-02-03also show the other direction GetL-to-GetVHelmut Grohne
2014-02-03add a GetV-to-GetL transformerHelmut Grohne
This is an improved version of getVec-to-getList in that it also transports the corresponding free theorem.
2014-01-30fully allow partial get functionsHelmut Grohne
By choosing gl₁ = suc and gl₂ = id, the tail function can now be bidirectionalized.
2014-01-30make the getlen functions explicit in PartialVecBFFHelmut Grohne
There is no way for Agda to infer these functions or even the intended index Setoid, so making these explicit is rather required.
2014-01-30express VecBFF via PartialVecBFFHelmut Grohne
2014-01-30allow importing of Bidir without any postulatesHelmut Grohne
2014-01-30pass get functions as recordsHelmut Grohne
This allows passing both getlen and get as a single parameter. It also allows to make the free theorem a prerequisite instead of a postulate.
2014-01-30simplify compilation of the whole sourceHelmut Grohne
2014-01-28define bff on a partial getlenHelmut Grohne
The representation chosen is to give both an injection gl₁ and a function gl₂ (formerly getlen), such that by choosing a non-identity for gl₁ partiality of getlen can be expressed. An alternative would have been to allow getlen to return a Maybe ℕ and have get return maybe (Vec A) ⊤ (getlen n) thus sending all inputs for which getlen yields nothing to tt. It seems that while there is no way to obtain a such a getlen predicate from an arbitrary index Setoid I, it should be possible to manufacture a Setoid from a predicate. Thanks to Stefan Mehner for the insightful discussion.
2014-01-28improve readability using _∋_≈_ instead of Setoid._≈_Helmut Grohne
2014-01-28there is no need to work with IsPreorderHelmut Grohne
2014-01-28use the indexed version of the Vec SetoidHelmut Grohne