kb84tkhrのブログ

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

定理証明手習い(a3) しゅくだい(11)

またもアドバイスいただきました

意味はわかるような気がする
J-Bobが出してくれた主張の方も見直してみよう

続きを読む

定理証明手習い(a2) しゅくだい(10)

再考します、と言ってはみたもののイメージはつかめてなかったり
(reverse/reverseだって証明はもっと簡単にできるイメージだった・・・)

再掲

同じである、というのはふたつのバージョンのreverseが同じ、ということでしょう
(reverse/reversereverse2/reverse2が同じということではなくて)
「同じ」というのは一方を変換して他方と同じ形にできる、ってことかな
それとも(equal (reverse x) (reverse' x))を証明するのかな
似てるようだけど違う

続きを読む

定理証明手習い(a1) しゅくだい(9)

rcons版のreverse/reverseを証明します
reverse2/reverse2はどうしようかな

rconsreverseの定義・証明

(defun defun.rcons ()
  (J-Bob/define (prelude)
    '(((defun rcons (x y)
         (if (atom x)
             (cons y x)
             (cons (car x) (rcons (cdr x) y))))
       (size x)
       ((Q) (natp/size x))
       (() (if-true (if (atom x) 't (< (size (cdr x)) (size x))) 'nil))
       ((E) (size/cdr x))
       (() (if-same (atom x) 't))))))
(defun defun.reverse ()
  (J-Bob/define (defun.rcons)
    '(((defun reverse (x)
         (if (atom x)
             x
             (rcons (reverse (cdr x)) (car x))))
       (size x)
       ((Q) (natp/size x))
       (() (if-true (if (atom x) 't (< (size (cdr x)) (size x))) 'nil))
       ((E) (size/cdr x))
       (() (if-same (atom x) 't))))))

ここまでは簡単
reverse/reverseもこの調子で証明できるかな

続きを読む

定理証明手習い(a0) しゅくだい(8)

想定以上に寝かせることになってしまいましたがアドバイスいただきましたので考えてみます
寝かせたわりには特にアイデアは思いついていません

さてアドバイスが雰囲気でしかわかってないので最初から考えていきます

続きを読む

J-Bobを作ってみよう(11) おしまい

まあ一度真正面からどう動いているのか見てやろうかと
ソースは組み込み関数を増やす前のものに戻しました

とりあえずこんな感じのベタなことをしてみました
これでも意外とつかめるかもしれないし

続きを読む

J-Bobを作ってみよう(10) 組み込み関数を追加する

たかだか証明を数ステップ進めるだけで関数を何百万会も呼ばなきゃいけないのかという
疑問を脇に押しのけてたくさん呼ばれてる関数を組み込み関数にしてみます
なんにも頭を使わない力技

続きを読む

J-Bobを作ってみよう(9) J-Bobをプロファイリング

J-Bobを動かしてみます

>> (load "j-bob.jbb")
Welcome to J-Bob
#<void>
>> (J-Bob/step
     '((dethm car/cons (x y) (equal (car (cons x y)) x)))
     '(car (cons 'ham '(eggs)))
     '((() (car/cons 'ham '(eggs)))))
'ham
>> (show-profile)
     '((untag 18159)
       (elem1 9304)
       (tag? 6366)
       :

意外とたくさん動いてる感じ

続きを読む