21. Numberの定義
集合論でいう直和
abstract sig Number { data: Number -> Number }
abstract sig Region1, Region2, Region3 extends
Number {}
one sig N1, N2, N3 extends Region1 {}
one sig N4, N5, N6 extends Region2 {}
one sig N7, N8, N9 extends Region3 {}
22. 3×3のブロック
の定義 集合論でいう継承
abstract sig Number { data: Number -> Number }
abstract sig Region1, Region2, Region3 extends
Number {}
one sig N1, N2, N3 extends Region1 {}
one sig N4, N5, N6 extends Region2 {}
one sig N7, N8, N9 extends Region3 {}
23. (R1,R1),(R1,R2),(R1,R3)
実体の定義 (R2,R1),(R2,R2),(R2,R3)
(R3,R1),(R3,R2),(R3,R3)
abstract sig Number { data: Number -> Number }
abstract sig Region1, Region2, Region3 extends
Number {}
one sig N1, N2, N3 extends Region1 {}
one sig N4, N5, N6 extends Region2 {}
one sig N7, N8, N9 extends Region3 {}
Nは数字であり座標である
24. pred complete(rows: set Number,
cols: set Number) {
! Number in cols.(rows.data)
}
指定された行or列に
N1∼N9が1つずつ存在
25. pred rules() {
! all x, y: Number { lone y.(x.data) } N1∼N9は1つずつ、か
つN1∼N9のマップを保
持している
! all row: Number { complete[row , Number] }
! all col: Number { complete[Number, col] }
!
!
complete[Region1,
complete[Region1,
Region1]
Region2]
行・列に1∼9まで存在
! complete[Region1, Region3]
! complete[Region2, Region1]
! complete[Region2, Region2]
!
!
complete[Region2,
complete[Region3,
Region3]
Region1]
9個のブロックはそれ
! complete[Region3, Region2]
! complete[Region3, Region3] ぞれ1∼9が1つずつ存在
}