集合変数、関係変数、写像変数
可変集合とか不変集合とか言うので、まずは、
- 集合が等しい/違うとは
- 写像が等しい/違うとは
のシッカリした理解が必要。
実体、関連を単に集合変数、関係変数として書いてみる。
図式 {
集合
const int,
var 学生,
var コース
var 教員;
関係
var 2年生(学生),
var 履修(学生, コース),
var 履修2(学生, コース, int),
var 指導(教員, 学生);
写像
var 主任:コース→教員;
var 学年:学生→int;
派生
2年生 isDefinableBy (学年 = 2),
履修2 isCompOf(履修 1, rel_学年 1),
指導 isCompOf(主任_conv, 履修_conv);
}キーワードは英語にしてみる。
schema {
set
const int,
var 学生,
var コース
var 教員;
relation
var 2年生(学生),
var 履修(学生, コース),
var 履修2(学生, コース, int),
var 指導(教員, 学生);
mapping
var 主任:コース→教員;
var 学年:学生→int;
derivation
2年生 isDefinableBy (学年 = 2),
履修2 isCompOf(履修 1, rel_学年 1),
指導 isCompOf(主任_conv, 履修_conv);
}符号圏に持っていくと:
coded schema {
set
var $学生 on string×date absorbed into $(学生+学年),
var $コース on string
var $教員 on string;
relation
var $2年生 on $学生 derived,
var $履修 on $学生×$コース,
var $履修2 on $学生×$コース×int derived,
var $指導 on $教員×$学生 derived;
mapping
var $(コース+主任) on $コース×$教員;
var $(学生+学年) on $学生×int considered as set;
derivation
$2年生 isDefinableBy ($学生.学年 = 2),
履修2 isCompOf(履修 1, rel_学年 1),
指導 isCompOf(主任_conv, 履修_conv);
}coded schema {
set
var $学生 on [string×date]×int
var $コース on [string]
var $教員 on [string];
relation
var $履修 on $学生×$コース,
mapping
var $(コース+主任) on $コース×$教員;
}var $履修 on $学生×$コース, var $(コース+主任) on $コース×$教員 は次のように展開される。
- var $履修 on $学生×$コース on [/string×date/×/string/]
- var $(コース+主任) on $コース×$教員 on [/string/×/string/]