• 検索結果がありません。

7.3 第八条 資格取得の時期

7.3.3 検証

# v8.py

# 年金原簿honnin_v7をテストデータとする検証 from essentials import * # honnin_v7 from f8 import *

d=Int(’d’) s=Solver()

p=ForAll(d,Implies(成立に至る(被保険者)(d),被保険者資格取得(d))) s.add(p)

print(s.check()) # sat t=Solver()

q=ForAll(d,Implies(被保険者資格取得(d),成立に至る(被保険者)(d))) t.add(q)

print(t.check()) # unsat

# 実際,成立に至る(被保険者)(d)は,d=201に対してのみTrueとなるが,

# 被保険者資格取得(d)は,d=201,301に対してTrueとなる.

u=Solver()

u.add(成立に至る(被保険者)(d)) print(u.check()) # sat

print(u.model()) # d=201 u.add(d!=201)

print(u.check()) # unsat v=Solver()

v.add(被保険者資格取得(d)) print(v.check()) # sat print(v.model()) # d=301 v.add(d!=301)

print(v.check()) # sat print(v.model()) # d=201

7.3.4 ノート

この条文は,(前日まで成立していなかった)被保険者の資格がある日dに成立に至るため の条件についてのべたものである.すなわち,論理式で書けば,

And(Not(被保険者(d-1)),被保険者(d))

あるいは,マクロ表現

成立に至る=lambda f:lambda d:And(Not(f(d-1),f(d))) を使うと(7.21参照),

成立に至る(被保険者)(d)

である.したがって,この条文は新しい内容を付加するものではなく,第七条から機械的に 判断できることを明文化したものと考えられる.

f8は,条文の構造に従って条文の内容を論理式に変換したものである.条文の意図から,任 意の日dに関して,

被保険者資格取得(d) 成立に至る(被保険者)(d) が期待されるが,検証の結果,これは成立しない.すなわち,

被保険者資格取得(d) 成立に至る(被保険者)(d) は成立するが,逆の

被保険者資格取得(d) 成立に至る(被保険者)(d)

は成立しない.この意味で第七条の条文は正しくないと考えられる.

以下は,条文を論理式表現に変換するうえでのコメントである.

1. 条文中の第一号から第五号の全てにおいて,「達したとき」,「至ったとき」などの表現 がされており,かつ,本文中でこれらを引用するときにも,「該当するに至った日に」と している.「至る」という隣り合う2つの時点を参照する概念が,字義通りに二重に使 われることは考えにくいので,本文中での引用は,単に「該当する日に」と解釈した.

2. f8の論理式表現はマクロANDORNOT,成立に至るの使用によりコンパクトになり,

また,条文の言語表現に近いものになっている.これらのマクロはdefinitionsで定 義されているが,以下のような内容である.

ANDORNOTBool上の論理演算子AndOrNotInt->Bool上に拡張した ものであり,例えば,

 AND(f,g)(d)==And(f(d),g(d))  OR(f,g)(d)==Or(f(d),g(d))  NOT(f)(d)==Not(f(d)) である.

成立に至る(f)(d)は,日d-1では成立していなかったfが日dで成立すること を表す.

成立に至るオペレータについては,以下が成立する.

成立に至る(OR(f,g))=OR(AND(成立に至る(f),前日に不成立(g)),       AND(成立に至る(g),前日に不成立(f)))

成立に至る(AND(f,g))=OR(AND(成立に至る(f),g),AND(成立に至る(g),f))    ただし,前日に不成立=lambda f:lambda d:Not(f(d-1))

これを繰り返し用いて,成立に至る(被保険者)を展開することにより,プリミティブな述

しながら,結果は煩雑なものになる.

f8_1は,前日において被保険者が成立しないことをNot(被保険者(d-1))として陽に与え た場合の論理式である.見かけはより簡単であるが,これに意味があるかどうかは分から ない.

f8_1が正しいことに関しては,v8_1においてテストデータhonnin_v7のもとで.任意の 日dに関して,被保険者資格取得(d)==成立に至る(被保険者)(d)が示されている.また,

f8_1に対応する条文は,例えば,次のようになる.

 被保険者でなかった者が被保険者の資格を獲得するのは,以下の各号のいずれかが成立す る日である.

一 厚生年金保険の被保険者となったとき.

二 二十歳以上六十歳未満,第二号被保険者の配偶者,および,主に第二号被保険者の収入 により生計維持,のいずれもが成立したとき.

三 二十歳以上六十歳未満,日本国内に住所を有する,および,厚生年金保険法老齢等受給 可能でない,のいずれもが成立したとき.

# f8_1.py 第八条 資格取得の時期(ひとつの改訂版)

from essentials import *

from f7 import * # 第七条被保険者の資格

被保険者資格取得=(lambda d:

And(Not(被保険者(d-1)),

Or(厚生年金保険の被保険者(d), And(二十歳以上六十歳未満(d),

第二号被保険者の配偶者(d),

主に第二号被保険者の収入により生計維持(d)), And(二十歳以上六十歳未満(d),

日本国内に住所を有する(d),

Not(厚生年金保険法老齢等受給可能(d))))))

# v8_1.py

# 年金原簿honnin_v7に関してf8_1が正しいことの検証 from essentials import * # honnin_v7

from f8_1 import * d=Int(’d’)

p=ForAll(d,被保険者資格取得(d)==成立に至る(被保険者)(d)) t=Solver()

t.add(p)

print(t.check()) # sat

7.4 第九条 資格喪失の時期