zipperposition
zipperposition copied to clipboard
tracking: datatypes
- [x] inference for acyclicity (not just simplification):
given
C ∨ s = t, look for σ such thatsσ = tσis absurd by acyclicity. Then inferCσfrom that. E.g.s (f x) = s (s (f a))would giveσ={x→a}(do anti-unification with cstors only, then try to unify cstor-prefixed subterms on one side with the root on the other side) - [ ] remove some specialized rules (positive injectivity) and instead, generate rewrite rules during preprocessing
- [ ] hierarchic superposition for datatypes (with defined functions being part
of the background)
- [x] need corresponding TKBO with 2 levels (just replace KBO with it anyway, and build weight fun from constant classification)
- [x] with TKBO implemented, removed the code that forces rpo6 to be used when induction is enabled, as well as constraint disabling
- narrowing with defined symbols would ± correspond to E-unification on pure background literals
- [ ] add purification inference (read carefully!) → do we want weak abstraction? would need 2 kinds of vars then
- [ ] add "case split" rule for
t != uwhere they are of a datatype. use a table for caching split for a given groundt. split looks liket = cstor1(…) | … | t=cstor_k(…)where each…is a list of fresh parameters (i.e. possibly inductive skolems). → avatar should fire on that! Do not do case split onα != βwhere both are parameters of a recursive datatype (always possible to pick distinct values). For non-recursive datatypes we need to do it. → check onexamples/data/unit_…problems - need a theory solver (msat + small SMT?) that deals with parameters → parameters are the way of dealing with exhaustiveness
- [ ] look into "superposition for fixed domains" more seriously (ask Weidenbach for more details?)
- rule similar to
fool_paramfor for datatypes:C[t]wheret:nat(strict subterm) is not a cstor term nor a variable would becomeC[S x] ∨ t ≠ S xandC[0] ∨ t ≠ 0- should be terminating (reduces the number of such strict subterms) but careful that with reduction you might find the same clause again, this must be an inference and not a simplification
- is sound, and might be decreasing (check!). It does seem to work for fool.
- enables more reductions…