kb84tkhrのブログ

何を書こうか考え中です あ、あと組織とは関係ないってやつです 個人的なやつ

定理証明手習い (24) If持ち上げを定理に・・・

Ifの持ち上げを何回か書いてると面倒になってきます
これがパターンであるのなら定理として証明してしまえばいいのでは、
と思ったのですがそもそもパターンがJ-Bobで表現できるのかなあ
書けるとしたらこんな感じなんでしょうか

(J-Bob/prove (defun.remb)
  '(((dethm if-lifting (original-focus Q A E)
       (equal (original-focus (if Q A E))
              (if Q (original-focus A) (original-focus E))))
     nil
     ...)))

でも(original-focus A)っていうような書き方は受け付けてくれないようです
これが通れば

(J-Bob/prove (dethm.if-lifting)
  '(((dethm lift-test (x1)
       (equal (memb? (if (equal x1 '?)
                         (remb '())
                         (cons x1 (remb '()))))
              'nil))
     nil
     ((1) (if-lifting memb? 
                      (equal x1 '?)
                      (remb '())
                      (cons x1 (remb '())))))))

(equal (memb? (if (equal x1 '?)
                  (remb '())
                  (cons x1 (remb '()))))
       'nil)

(equal (if (equal x1 '?)
           (memb? (remb '()))
           (memb? (cons x1 (remb '()))))
'nil)

に置き換えることができそうなんですけど
証明的にやっちゃダメって話ではないような気がするので、J-Bobの表現力の問題?
そもそもJ-Bobの使い方がわかってないのかもしれないけど
でもここで出てこないということはそういうことなんだろうなあ