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

6.1 リスト構造

問 6.1

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

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

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

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

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

A×(A×(⋯(A⏟n個のA×Nil)⋯))

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

L=Nil∪(A×L)

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

  1. 1.

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

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

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

    Xi⊆L

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

  2. 2.

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

    X=⋃i≥0Xi

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

解答例 

  1. 1.

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

    (i=0)の場合。

    X0 = Nil
    ⊆ Nil∪(A×ℒ)
    = ℒ

    (i>k+1)の場合。

    Xk+1 = Xk∪(A×Xk)
    ⊆ ℒ∪(A×ℒ)
    = ℒ
  2. 2.
    X=Nil∪A×X

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

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

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