abella-prover / abella

An interactive theorem prover based on lambda-tree syntax
https://abella-prover.org/
GNU General Public License v3.0
90 stars 18 forks source link

A new "reduce" tactic that is a bit more eager than "case" #35

Closed chaudhuri closed 5 years ago

chaudhuri commented 9 years ago

If a definition has only "positive" clauses, meaning that the body of the definition consists of /\, \/, exists, =, and atoms, then there needs to be a tactic reduce that unfolds the definition eagerly on the left. This may loop if there is no fixed point, but that is fine. This would be roughly "level 0" of the Level 0/1 system.

Example: if we have

 H : member F (a :: b :: nil)

then running reduce H should produce two subgoals, with F united with a in one and with b in the other. In case of a loop, we could bound reduce like with search: the invocation reduce 5 H would unfold the definition of member at most 5 times.

This is related to but different from #21.

The name reduce may not be the best option. A less contentious choice might be "async".

Briefly discussed with @ThatDaleMiller.

chaudhuri commented 5 years ago

Obsoleted by #116.