2021年2月23日火曜日

圏論による論理学P22

 λ-h.o.lのA.4がややこしかった。 厳密ではないかもしれないが以下のように考えてみた。

A.4 (Att Tt ∧ Att Ft)= ∀ xt Att xt

     ①     ②

前提として ∀の定義が

 ∀x At=(λx At = λx T) なので

  ∀x Atは、TかF

  Tの場合は 定義より λx Atが どんなxでも→T
  Fの場合は λx At と λx T が違うことがあるということなので

        λx Atが どんなxでも→F の場合と 

              xにより→Fだったり→Tだったり の場合がある

これを もとに A.4を考えると

  ∀ xt Att xt は TかF

    Tの場合は  xt→Att xt が T→T=AttTt ① F→T=AttF ②

    Fの場合は  T→F ① F→F ② のときと

          T→T ① F→F ② のときと

          T→F ① F→T ② の3とおり考えられる

   いずれの場合も A.4を満たす

   ※  A.4は  両辺とも Attの関数とみてもいいのでないかと、、、

        f:Att→TまたはF  つまりf(Att)=T か Fになるという

      イメージか。




2021年2月21日日曜日

ELMでオームの法則ドリル

 以前、.netで作ったものを、タブレットでも使えるようにと思い、ELMで書き直してみた。

https://gh6141.github.io/gitdrill/src/Kairo.html


記号論理学(放送大学)

 放送大学で記号論理学の集中講義があったので学んでみた。

第4回 言語L M={U,v}というモデル 個体変項 閉じた式 などについて
  M⊦ B→C  ⇔  M⊬ B と M⊦C のいずれか成立
第5回  A→B  AがTrueだが、BがFalseである(反例)ものが存在しないとき 正しい
 反例ないことを示すとよい。 反例が1個でもあればだめであるといえる。
 反例が存在すると仮定して、前提をTrue 結論をFalse とおく
 25:10 ∀x(Tx→S'xa) ⊩ ¬Ta  の妥当性 
  すべてのxについて xが三角形なら xはaより小さい そのとき、aは三角形でない
  aが三角形だとすると、 xが丸か五角形でFalse であれば 左はTrue
             xが三角形なら x<a である必要あるが、xがaの可能性ある
   したがって、False 矛盾 よって 妥当
  28:08 A→C,B→C ⊦ (AVB)→C の妥当性
    (AVB)→C がFalseだとすると  AVBがTrue かつ CがFalse
   AVBがTrueならば  AかBがTrueでCはFalse
          よってAがTrue C Falseなら  A→CはFalse  よって AはTrueでありえない
       BがTrue C False なら B→Cは False よって BはTrueでありえない
    よって AVBはFalse よって 仮定はあやまりで、結論はFalseではありえない
    となり、反例は存在しないとわかる よって妥当   
 ※とりあえず、書いてみたが、まだ、十分理解してないところもありそう

第6回以降は、タブローという証明支援ツールを実際に使って(サイト上にも自由に使えるアプリがあり非常に便利です)前提⊩結論 が正しいかどうか判定できます。機械的に変形していくだけで、結果がわかるというのが、なかなか素晴らしい!と思いました。

講義もとても丁寧なので、基本を理解するには書籍等で学習するよりスムーズです。

タブローを使っていると以前Coqを使ったのを思い出します。Coqより使いやすいようです。

記号論理学は、プログラミングの論理で混乱したときは、役立ちそうです。

2021年2月15日月曜日

圏論勉強会第4回 共変Hom関手

 Hom関手の理解が不十分と思い、再度復習してみた。

 Cの対象Aに集合Hom(X,A)を対応させる

 Cの射f:A→Bに、「左からfを合成」という関数を対応させる

  Hom(X,f)=(f・) : Hom(X,A)→Hom(X,B)

 これを 共変Hom関手といい Hom(X,-)  :C→Sets と表す。

・Hom(X,-)という書き方は  - → Hom(X,-) という関数(関手)ととらえるといいようだ。scalaの無名関数にもこの略記法がある。  A→Hom(X,A)  f→Hom(X,f)の意味。

・射の合成関係をたもつことは、次のようにして確認できる。

    g:A→B f:B→C  h:X→A として

  Hom(X , f・g)(h)=(f・g)(h)=f・g・h

 Hom(X,f)・Hom(X,g)(h)=(f・)(g・)(h)=f・(g・h)=f・g・h

  ∵ たとえば Hom(X,g)(h)の処理については

  h=Hom(X,A)なので  Hom(X,f)に適用すると、Hom(X,A)→Hom(X,B)だから、h=Hom(X,A)はHome(X,B)に変換される。つまり、X→Bで、これは、(g・h)を表している。この考え方を上記のすべての式変形に適用していく。

2021年2月13日土曜日

型関手の融合則 圏論勉強会10回

Catamorphismの融合則




型関手の融合則  
  射g:A→B  T:型関手  T(g)=(|in・F(g,1)|) も以下で使う
      正しいかどうか、すっきりしないところもあるが、以下のような図をかいてみた。

2021年2月11日木曜日

圏論勉強会10回

 前回までで、最小不動点の説明が終わり、Haskellのfixは関数の最小不動点を求める関数であることなど、なかなか興味深い内容でした。
  第10回では、initial ω-chainで 理解に時間がかかった。

∀自己関手F:C→Cで
 ∃1 !:0→F(0)  
 F(!):F(0)→FF(0)

 !  F(!)  FF(!)
0→F(0)→FF(0)→FFF(0)→  がFのInitial ωChain

例2としてSetsの場合
関手 F(X)=X+1
f:X→Yに対して  F(f):X+1→Y+1  F(f)=f+1

    !    !+1     !+1+1    !+1+1+1
0 → 1 → 1+1 →1+1+1→1+1+1+1

                     a
              a     b
         a    b     c
空集合 a   →      b   →         c  →  d
                   1                1                     1

新たに追加された集合のみ、次の列へ1の射でうつされる
射はfに該当する前の列のものをそのまま使うのと、追加された1の射。
したがって、fに該当する射は右の列に行くに従い、1が増えていく?

2021年2月8日月曜日

Fokkingのmutual recursion theorem 圏論でElm

 圏論学習会第8回のFokkingaの相互再帰定理を使ったsteep関数(例題)の実装を、Elmで確かめてみた。

         T   ←   F(T)

  <steep,sum> ↓       ↓

        Bool×Int ← F(Bool×Int)

            <[c,f],[d,g']>

         <steep,sum>=(| <[c,f],[d,g']> |)     ←Catgamorphism


※foldのイメージは、Listから一つずつaを取り出し、(b,s)のタプル つまり(Bool×Int):steepとsumの結果のペアに、適用して畳み込んでいく(積み重ねていく)というイメージ

> c=(True,0)

(True,0) : ( Bool, number )

> fnx a (b,s) = ( a > s && b , a + s)

<function> : number -> ( Bool, number ) -> ( Bool, number )

> lst2=[32,16,8,4,2]

[32,16,8,4,2] : List number

> Tuple.first (List.foldr fnx c lst2)

True : Bool

> lst3=[32,16,8,4,4]

[32,16,8,4,4] : List number

> Tuple.first (List.foldr fnx c lst3)

False : Bool

foldも奥が深い。



2021年2月5日金曜日

エクセルで、空白を除外して抽出

別ページの表から特定の列の空白を除外して抽出する方法を考えてみた。
①列を指定するため、ComboBox(F1セル)を使用。選択した列が何番目か取得。



②①の値を使って、別ページから対象となる列のみリンク
<別ページ(sheet2)のデータ>
<リンクを動的に変更する>


③SMALL関数を活用すると、空白(リンクしたものは、空白が0になる)を除外したものを順に抽出できる。

※本当は、③で、B列全体指定と固定せず、動的に変更したかったのだけれど、やり方がよくわからなかったので、B列は固定することにし、B列への別ページからのリンクを変更することにしてみた。