逆に「型 は型 の上位型である」とも読める 包摂規則 部分型関係は以下の包摂規則(subsumption)が大原則 として成り立つ 👉 が の部分型であるならば、 型の項 はすべ て 型の要素でもある 例として、より一般的な型である A, C と、より具 体的な型である B, D を比べると、より詳細な型の 方が部分型となる , が成り立つ type = { : number; }; // より一般的 type = { : number; : string; }; // より具体的 // A型が期待される文脈でB型の項を割り当てることができる const : = { : 42, : "st", }; const : = ; const : = { : 42, }; const b2: = ; // その逆はできない type = number; // より一般的 type = 42; // より具体的 // C型が期待される文脈でD型の項を割り当てることができる const : = 42; const : = ; const : = 42; const d2: = ; // その逆はできない S T S <: T S T T S Γ ⊢ t <: T Γ ⊢ t <: S S <: T S T S t T B <: A C <: D A fst B fst snd b1 B fst snd a1 A b1 a2 A fst B a2 Property 'snd' is missing in type 'A' but required in ty C D d1 D c1 C d1 c2 C D c2 Type 'number' is not assignable to type '42'.
かつ なら であり、 は を介して の部分型であることが推移的に分かる 集合の包含関係は反射律と推移律を満たしており、部 分型関係は集合論的に解釈すると包含関係とみなせる 👉 TAPLではこのような解釈を「部分集合意味論」と 呼ぶ 反射律 S <: S 推移律 S <: T S <: U U <: T (1) (2) S S A <: B B <: C A <: C A B C
反対称律 (asymmetric law) 半順序集合 順序関係を持つ集合は一般に順序集合と呼ばれ、いく つかの種類がある。 この三つの代数法則を満たす集 合は半順序集合(pre-order set)と呼ばれる 全順序集合 c a b 半順序集合 f e g h 前順序集合 同値要素 k i j l m 部分型関係はいくつかの代数的構造を作る ≺ a ≺ a (∀a ∈ S) a ≺ b ∧ b ≺ c ⇒ a ≺ c (∀a, b, c ∈ S) a ≺ b ∧ b ≺ a ⇒ a = b (∀a, b ∈ S)
a e c b 順序集合内では、このような要素を最大元(greatest element)と呼ぶ Bottom型 項がなにもない型は空型と呼ばれ、Bottom型やBot型 などとも呼ばれる。部分型関係では一番底にある型と なる。TypeScriptでは never 型が相当する。 <: <: <: <: a e c b 順序集合内では、このような要素は最小元(lowest element)と呼ぶ
string boolean bigint symbol undefined null number literal string literal boolean literal bigint literal unique symbol Number String Boolean BigInt Symbol unknown never void { } Object User Defined Types Constructor Function Types Function Tuple Array readonly Tuple ReadonlyArray より具体的な束構造
Subtyping" 記事 順序集合や束などに関する基本的な概念の説明 https://www.cs-study.com/koga/lattice/explanatio ns_on_concepts_of_posets.html 集合としての型 - An Introduction to Elm https://guide.elm-lang.jp/appendix/types_as_set s.html