コーディングの例 例1: 平面上の点 [情報] Y ^ | 4 + * <- 点 | | | ----+----+--------> X | 2 [データ] 「点」を、その「座標」で表現する (x,y) x : x 座標 y : y 座標 例 : ( 2, 4 ) [数値] x : 整数 y : 整数 例 : x -> 2, y -> 4 [操作] 点の平行移動 ( x 軸に沿って, y 軸に沿って ) 原点を中心とした回転をする ( 反時計回りに 90 度 ) [平行移動] Y ^ | 4 + * ← 点 p | | | ----+----+--------> X | 2 ↓ (x 軸方向に 3 だけ右にずらす) Y ^ | 4 + * ← 点 q | | | ----+-----------------+--------> X | 2 5 やりたい事 情報 : p → q (右に 3 平行移動) データ : (2,4) → (5,4) (x 座標が 3 だけふえている) 計算 : 2 → 5 ( 2 + 3 = 5 ) [回転移動] Y ^ | 4 + * ← 点 p | | | ----+----+--------> X | 2 ↓ (原点を中心に 90 度反時計回りに回転) Y ^ 点 q | ↓ | * + 2 | ----+-------+-------> X -4 | やりたい事 情報 : p → q (原点を中心に 90 度回転) データ : (2,4) → (-4,2) (回転の行列の積) (x,y) → (-y,x) 90 度の回転行列 R R = ( 0 -1 ) 1 0 90 度の回転は、行列 R をかけるだけ ( 0 -1 ) ( x ) = ( -y ) 1 0 y x 計算 : 2 → -4 4 → 2 result.x = - pt.y result.y = py.x == 例2: 有理数 [情報] 有理数 例 : 2/3, 1, -100/123 [データ] <分母, 分子> 例 : <3,2>, <1,1>, <123,-100> [数値] 分母 : 自然数 ( 1, 2, .. ) 分子 : 整数 ( -1, 0, 1, .. ) 例 : 分母 -> -3, 分子 -> 2 == +--- Z x Z ----+ | | | +--Q--+ | | | | | Z x Z は Q を表すには広すぎる | | | | → 制約によって狭くして「同型」にする | +-----+ | | | +--------------+ 直積は、空間をひろくする仕組み 制約は、空間をせまくする仕組み