fact: Definition EvalBinaryNumOp (op : BinaryIntOp) (n1 : num) (n2 : num) : num := match n1 , n2 with | I i1 , I i2 => I (EvalBinaryIntOp op i1 i2) | I i1 , B b2 => I (EvalBinaryIntOp op i1 (b2i b2)) | I i1 , Sh s2 => I (EvalBinaryIntOp op i1 (s2i s2)) | B b1 , I i2 => I (EvalBinaryIntOp op (b2i b1) i2) | B b1 , B b2 => B (i2b $ EvalBinaryIntOp op (b2i b1) (b2i b2)) | B b1 , Sh s2 => B (i2b $ EvalBinaryIntOp op (b2i b1) (s2i s2)) | Sh s1, I i2 => I (EvalBinaryIntOp op (s2i s1) i2) | Sh s1, B b2 => B (i2b $ EvalBinaryIntOp op (s2i s1) (b2i b2)) | Sh s1, Sh s2 => Sh(i2s $ EvalBinaryIntOp op (s2i s1) (s2i s2)) end.
imports: Coq(List) Coq(ListSet) Coq(FSetInterface) Coq(Bool) Coq(ZArith) Coq(Relation_Operators) JML(ListHelpers)