(terms) true false zero succ t pred t isZero t if t then t else t 上記で、 t は何らかの項を表すものです(メタ変数といいます) たとえば、 succ t 自体がプログラムになるのではなく、 t を何らかのプログラムで置換した、 succ true や succ isZero false などが有効なプログラムになります。 ◦◦◦◦◦◦•◦◦◦◦◦◦◦◦◦◦◦◦◦◦◦◦◦◦◦◦◦◦ こと@HACK.BAR 「型安全」ってどういう意味? 8 / 30 Hackers' MeetUp #1 - 2024/07/13
E-IfFalse if false then t2 else t3 --> t3 E-If t1 --> t1' ------------------------------------------------ if t1 then t2 else t3 --> if t1' then t2 else t3 ◦◦◦◦◦◦◦◦◦◦◦•◦◦◦◦◦◦◦◦◦◦◦◦◦◦◦◦◦ こと@HACK.BAR 「型安全」ってどういう意味? 13 / 30 Hackers' MeetUp #1 - 2024/07/13
Bool T-If t1 : Bool t2 : T t3 : T ------------------------- if t1 then t2 else t3 : T ◦◦◦◦◦◦◦◦◦◦◦◦◦◦◦◦•◦◦◦◦◦◦◦◦◦◦◦◦ こと@HACK.BAR 「型安全」ってどういう意味? 18 / 30 Hackers' MeetUp #1 - 2024/07/13
booleans' type Nat ; natural numbers' type T -> T ; function types t ::= ; term ... x ; variables (x:T) => t ; functions t t ; applications 関数 (x:T) => t は値に含まれる(それ以上評価できない) 適用 t t の評価規則を定める。 ◦◦◦◦◦◦◦◦◦◦◦◦◦◦◦◦◦◦◦◦◦◦◦◦•◦◦◦◦ こと@HACK.BAR 「型安全」ってどういう意味? 26 / 30 Hackers' MeetUp #1 - 2024/07/13
t12 におけるすべての変数名 x の出現を 値 v2 で置き換えたもの」を表すとする。 これを使って、以下の評価規則をSemanticsに含める E-AppAbs ((x: T) => t12) v2 --> [x |-> v2] t12 例 ((x1: Nat) => if isZero x1 then succ zero else pred x1) (pred (succ zero)) --> ((x1: Nat) => if isZero x1 then succ zero else pred x1) zero ... E-App2, E-PredSucc --> [x |-> zero](if isZero x1 then succ zero else pred x1) ... E-AppAbs == if isZero zero then succ zero else pred zero --> if true then succ zero else pred zero ... E-If --> succ zero ... E-IfTrue ◦◦◦◦◦◦◦◦◦◦◦◦◦◦◦◦◦◦◦◦◦◦◦◦◦◦•◦◦ こと@HACK.BAR 「型安全」ってどういう意味? 28 / 30 Hackers' MeetUp #1 - 2024/07/13