(def-theorem group-to-field-additive-group-obl-1 
    "forall(x:kk,o_kk +_kk x=x)"
    lemma
    (theory fields)
    (proof
      (
        (apply-macete-with-minor-premises commutative-law-for-addition-for-fields)
        (apply-macete-with-minor-premises additive-identity-for-fields)
        )))


(def-theorem group-to-field-additive-group-obl-2 
    "forall(x:kk, -_kk x +_kk x=o_kk)"
    lemma
    (theory fields)
    (proof
      (
        (apply-macete-with-minor-premises commutative-law-for-addition-for-fields)
        (apply-macete-with-minor-premises additive-inverse-for-fields)
        )))


(def-theorem group-to-field-multiplicative-group-obl-1 
    "not(i_kk=o_kk)"
    lemma
    (theory fields)
    (proof
      (
        (force-substitution "i_kk=o_kk" "o_kk=i_kk" (0))
        (apply-macete-with-minor-premises field-zero-is-not-field-one)
        simplify
        )))


(def-theorem group-to-field-multiplicative-group-obl-2 
    "forall(x_1,x_0:kk, not(x_0=o_kk) implies x_1=o_kk or not(x_1 *_kk x_0=o_kk))"
    lemma
    (theory fields)
    (proof
      (
        direct-and-antecedent-inference-strategy
        (apply-macete-with-minor-premises non-o_kk-is-closed-under-*_kk)
        direct-inference
        )))


(def-theorem group-to-field-multiplicative-group-obl-3 
    "forall(x:kk, not(x=o_kk) implies if(not(i_kk=o_kk), x, ?kk)=x)"
    lemma
    (theory fields)
    (proof
      (
        (raise-conditional (0))
        direct-and-antecedent-inference-strategy
        )))


(def-theorem group-to-field-multiplicative-group-obl-4 
    "forall(x:kk, not(x=o_kk) implies if(not(inv(x)=o_kk), inv(x) *_kk x, ?kk)=i_kk)"
    lemma
    (theory fields)
    (proof
      (
        (apply-macete-with-minor-premises commutative-law-for-multiplication-for-fields)
        (apply-macete-with-minor-premises multiplicative-inverse-for-fields)
        (raise-conditional (0))
        direct-and-antecedent-inference-strategy
        (contrapose "with(p:prop,not(not(p)))")
        (apply-macete-with-minor-premises non-o_kk-is-closed-under-inv)
        )))


(def-theorem group-to-field-multiplicative-group-obl-5 
    "forall(x,y,z:kk,
          not(x=o_kk) and not(y=o_kk) and not(z=o_kk)
            implies 
          if(not(y *_kk x=o_kk), z *_kk y *_kk x, ?kk)
          =if(not(z *_kk y=o_kk), z *_kk y *_kk x, ?kk))"
    lemma
    (theory fields)
    (proof
      (
        (raise-conditional (0))
        (raise-conditional (0))
        (raise-conditional (0))
        direct-and-antecedent-inference-strategy
        (contrapose "with(p:prop,not(not(p)));")
        (apply-macete-with-minor-premises non-o_kk-is-closed-under-*_kk)
        direct-inference
        (contrapose "with(p:prop,not(not(p)));")
        (apply-macete-with-minor-premises non-o_kk-is-closed-under-*_kk)
        direct-inference
        (contrapose "with(x,y:kk,not(not(y*x=o_kk)));")
        (apply-macete-with-minor-premises non-o_kk-is-closed-under-*_kk)
        direct-inference
        )))


(def-translation group-to-field-additive-group 
    (source groups)
    (target fields)
    (fixed-theories h-o-real-arithmetic)
    (sort-pairs
      (gg kk))
    (constant-pairs
      (e o_kk)
      (mul +_kk)
      (inv -_kk)))


(def-translation group-to-field-multiplicative-group 
    (source groups)
    (target fields)
    (fixed-theories h-o-real-arithmetic)
    (sort-pairs
      (gg (pred "lambda(z:kk,not(z=o_kk))")))
    (constant-pairs
      (e i_kk)
      (mul "lambda(x,y:kk,if(not(x=o_kk) and not(y=o_kk), x *_kk y, ?kk))")
      (inv "lambda(x:kk,if(not(x=o_kk), inv(x), ?kk))"))
    (theory-interpretation-check using-simplification))