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

7.2 第七条 被保険者の資格

And(二十歳以上六十歳未満(d), 被扶養配偶者(d)))

被扶養配偶者=(lambda d:

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

主に第二号被保険者の収入により生計維持(d), Not(第二号被保険者(d))))

7.2.3 検証

# v7.py

# 第七条の検証

# 年金原簿honnin_v7のもとでは,同じ日に異なる種別の被保険者にはなれないことの検証

# d:日を表す変数,Int:整数型の変数を作り出すZ3の関数である.

import time

from essentials import * # honnin_v7 from f7_primitive import *

start=time.time() d=Int(’d’)

s=Solver()

p=Or(And(第一号被保険者(d),第二号被保険者(d)), And(第一号被保険者(d),第三号被保険者(d)), And(第二号被保険者(d),第三号被保険者(d))) s.add(p)

print(s.check())

# unsat

# 第一号被保険者になる日の確認

print(充足リスト(成立に至る(第一号被保険者),10))

# [550, 201]

# なお,honnin_v7においては,第一号,第二号,第三号被保険者である日が,それぞれ

# 以下のようであるが,これは次のようにして確認できる.

# 第一号被保険者:日201〜日300 および 日550〜日599

# 第二号被保険者:日301〜日499

# 第三号被保険者:日500〜日549

t=Solver()

p1=ForAll(d,第一号被保険者(d)==Or(And(201<=d,d<=300),And(550<=d,d<=599))) p2=ForAll(d,第二号被保険者(d)==And(301<=d,d<=499))

p3=ForAll(d,第三号被保険者(d)==And(500<=d,d<=549)) t.add(p1,p2,p3)

print(t.check())

# sat

print(time.time()-start,’sec’)

# 0.07591009140014648 sec

# honnin_v7.py

# 第七条,第八条,第九条,第十一条の検証で使用

from essentials import *

年齢=(lambda d:26+d/360)

二十歳以上六十歳未満=(lambda d:And(20<=年齢(d),年齢(d)<60)) 日本国内に住所を有する=(lambda d:And(200<d,d<600))

厚生年金保険法老齢等受給可能=(lambda d:False) 厚生年金保険の被保険者=(lambda d:And(300<d,d<500)) 第二号被保険者の配偶者=(lambda d:And(400<d,d<550))

主に第二号被保険者の収入により生計維持=(lambda d:And(400<d,d<550))

# *----日本在住---*

# | |

# | *----企業に勤務---* |

# | | | |

# | | *----結婚---* |

# | | | | | |

#

---*---*---*---*---*---*---# d=201 301 401 499 549 599

# | || || || |

# *--第一号----**---第二号---**-第三号--**-第一号--*

# なお,以下はhonnin_v7を第十一条期間の検証で用いた場合の,各被保険者期間を示す.

# m= 6 9 10 15 16 17 18 19

# 第一号被保険者期間 [6, 7, 8, 9, 18, 19]

# 第二号被保険者期間 [10, 11, 12, 13, 14, 15]

# 第三号被保険者期間 [16, 17]

# v7_func

# 第七条の検証

# 同時に異なる種別の被保険者にはなれないことを,v7の場合のように具体的な

# 年金原簿に対してではなく,より一般的に検証する.

# "日本国内に住所を有する などを述語変数として扱い,これににいかなる述語を代入

# しても充足出来ないことを示す.

from essentials import * # honnin_v7_func from f7 import *

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

p=Or(And(第一号被保険者(d),第二号被保険者(d)), And(第一号被保険者(d),第三号被保険者(d)), And(第二号被保険者(d),第三号被保険者(d))) s.add(p)

print(s.check())

# unsat

# honnin_v7_func.py

# v7_funcで使用

from essentials import *

二十歳以上六十歳未満=lambda d:True

日本国内に住所を有する=Function(’f’,IntSort(),BoolSort()) 厚生年金保険法老齢等受給可能=lambda d:False

厚生年金保険の被保険者=Function(’g’,IntSort(),BoolSort()) 第二号被保険者の配偶者=Function(’h’,IntSort(),BoolSort())

主に第二号被保険者の収入により生計維持=Function(’h’,IntSort(),BoolSort())

7.2.4 ノート

条文の内容を忠実に論理式に直したものである.なお,条文中の2および3については,こ れらを考慮して「主として第二号被保険者の収入により生計を維持すること」の認定が適切 の行われ,年金原簿に反映されていると仮定した.

検証は3種類の年金原簿データに関して行った.

1. honnin_v7

具体的な日データとしの年金原簿.日本国内に住所を有するなどは,具体的な述語とし てあたえられている.

2. honnin_v7_func

関数変数を許す充足性判定を利用した検証のための年金原簿.日本国内に住所を有する などが関数IntSort→BoolSortを表す変数として定義されており,honnin_v7_func ではこれらの変数への述語の割り当てに関する充足性判定により,honnin_v7より一 般的な検証が行われている.簡単のために,二十歳以上六十歳未満は常にTrueとした.

3. honnin_v7_abs

抽象日付けデータ型を利用した検証のための年金原簿.具体的な内容に関しては,7.23 において述べる.

7.3 第八条 資格取得の時期