Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Allow for the SMT to help discharging it, since some examples Nick ran into require it. However, I'd like to revisit this throughout the engine: when do we consider it acceptable to call the SMT during tactics execution? I'd like to say never, but not sure how feasible that is. Example file was: ``` module Test open FStar.BV open FStar.Tactics open FStar.Tactics.BV module U = FStar.UInt val lemma_test: x:U.uint_t 64 -> Lemma (U.logand #64 x 0 == 0) let lemma_test x = assert_by_tactic (bv_tac ()) (U.logand #64 x 0 == (0 <: uint_t' 64)) ``` over commit a50b225 It seems the SMT is needed for deciding equality of two types, `uint_t 64` and `uint_t' 64`, which have the same definition but the typechecker can discharge this by itself. They are refinements, but have the same definition. So maybe the typechecker discharges the bi-implication instead of noticing the equality. For now, bite the bullet and call z3.
- Loading branch information