Module Qcert.Translation.Operators.ForeignToReduceOps


Require Import EquivDec.
Require Import Utils.
Require Import DataRuntime.
Require Import NNRCMRRuntime.

Section ForeignToReduceOps.
  Class foreign_to_reduce_op
        {fruntime:foreign_runtime}
        {fredop:foreign_reduce_op}
      : Type
      := mk_foreign_to_reduce_op {
             foreign_to_reduce_op_of_unary_op
               (uop:unary_op) : option reduce_op
             ; foreign_to_reduce_op_of_unary_op_correct
                 (uop:unary_op) (rop:reduce_op)
                 (br:brand_relation_t)
                 (dl:list data) :
                 foreign_to_reduce_op_of_unary_op uop = Some rop ->
                 unary_op_eval br uop (dcoll dl) =
                 reduce_op_eval br rop dl
             ; foreign_to_reduce_op_to_unary_op
               (uop:reduce_op) : option unary_op
             ; foreign_to_reduce_op_to_unary_op_correct
                 (rop:reduce_op) (uop:unary_op)
                 (br:brand_relation_t)
                 (dl:list data) :
                 foreign_to_reduce_op_to_unary_op rop = Some uop ->
                 reduce_op_eval br rop dl =
                 unary_op_eval br uop (dcoll dl)
         }.

End ForeignToReduceOps.