スキーマ、タプル空間、タプルインスタンス、フィールド関数、テーブル
structure Schema where fields : Type typeAssig : fields → Type def TupleSpace (S : Schema) := ((f : S.fields) → S.typeAssig f) inductive NameAge where | name : NameAge | age : NameAge deriving Repr def Person : Schema := { fields := NameAge typeAssig := (λ| .name => String | .age => (Nat:Type)) } #check TupleSpace Person def personTaro : (TupleSpace Person) := (λ| .name => "Taro" | .age => (21 :Nat) ) #eval personTaro .age def personAkane : (TupleSpace Person) := (λ| .name => "Akane" | .age => (25 :Nat) ) structure Person' where name : String age : Nat def personTaro' : Person' := { name := "Taro" age := 21 } #eval personTaro'.age def getField (S : Schema ) (t : TupleSpace S) (f: S.fields) : (S.typeAssig f) := t f #eval getField Person personTaro NameAge.age def Table (S : Schema) :Type := List (TupleSpace S) def TaroAkane : Table Person := [ personTaro, personAkane ] #eval TaroAkane.map (λ p => p NameAge.age)
文字列または番号の有限集合としての列挙型をどうする?