プログラミング言語 Standard ML 入門 (問題の解答例)
6 リスト

6.1 リスト構造

問 6.1

本問では,無限集合の簡単な扱いに慣れている読者のために,リ ストの数学的なモデルを考察する. ポインタ構造を無視すると,上記のリスト構造は以下のように入れ子に なった組とみなせる.

(v1,(v2,(vn,nil)))

v1,v2,,vnが属する集合をAとし, 集合ABの直積A×Bを以下のように定義する.

A×B={(a,b)|aA,bB}

さらに,nilを唯一の要素とする集合をNilとする. すると,n個の要素からなるリストは以下のような集合の要素と考えら れる.

A×(A×((An個のA×Nil)))

n個に限らず,集合Aの要素からなるすべてのリストの集合は,集合に 関する以下のような方程式の解と考えることができる.

L=Nil(A×L)

この方程式の最小解を以下の手順で求めよ.

  1. 1.

    集合の系列Xi を以下のように定める.

    X0 = Nil
    Xi+1 = Xi(A×Xi)

    もしLに関する方程式が解を持てば,任意のiに対して,

    XiL

    であることをiに関する数学的帰納法で示せ.

  2. 2.

    この系列を用いて,集合Xを以下のように定義する.

    X=i0Xi

    このとき,Xは上記の方程式を満たすことを示し,したがって,Xが上記方程 式の最小解であることを確認せよ.

解答例 

  1. 1.

    を方程式の任意の解とし、Xiiに関する数学的帰納法で示す。

    (i=0)の場合。

    X0 = Nil
    Nil(A×)
    =

    (i>k+1)の場合。

    Xk+1 = Xk(A×Xk)
    (A×)
    =
  2. 2.
    X=NilA×X

    を示せば良い。 集合の等式であるから、 XNil(A×X) および Nil(A×X)X を示せばよい。

    XNil(A×X)は、 X=i0Xiの要素集合Xiについて、 XiNil(A×X)を示せばよい。 定義の形から、ほぼ自明である。 厳密には、iに関する帰納法による。 X0=NilNil(A×X)であり、成立する。 i=K+1の場合、Xk+1=XkA×Xkである。 帰納法の仮定からXkNil(A×X)である、 また、定義から、A×XkA×Xであり、 従って、Xk+1A×Xである。

    NilA×XXを示すには、 NilX と 任意のiに関して、A×XiXを示せば十分である。 前者は、Nil=X0Xであり、成立する。 後者は、定義より、 A×XiXiA×Xi=Xi+1X であり成立する。