Guild icon
swift-developers-japan
main / math
数学、情報理論など
Avatar
https://www.nikkei.com/article/DGKKZO25412470W8A100C1MM0000/ こんなのでてましたね。登録してないんで中身読めてないんですが
総務省所管の情報通信研究機構は次世代の超高速計算機の量子コンピューターでも解読が難しい新たな暗号技術を開発した。守りたい情報を特殊な数学の問題に置き換える仕組みで、既存の通信網などの暗号技術を置き換
Avatar
omochimetaru 1/10/2018 3:01 AM
「量子耐性暗号」って研究分野があるみたい。
3:01 AM
 計算で解くには、現在の最高性能のスーパーコンピューターでも少なくとも10の50乗年かかる。量子コンピューターに対しても十分な安全性を確保できる見込みだ。既存の様々な通信システムのソフトウエアを変えるだけで、そのまま使える。  米国立標準技術研究所(NIST)は量子コンピューターでも解読できない次世代暗号技術の標準化を進めており、情通機構の新技術は候補に選ばれた。今後3年以上かけて標準が決まる見通し。採用されれば国際的に普及する可能性が高い。
3:01 AM
記事では具体的な事は書いてないね
3:02 AM
どれやろか
Avatar
日経の記事開けてみたら実質的に何も書いてなくてワロタ
Avatar
omochimetaru 1/10/2018 3:03 AM
@Biacco42 アメリカの標準の候補に入ったってところだけ情報ある
Avatar
2018のプレスはまだないのかな
Avatar
@omochimetaru たしかに
Avatar
omochimetaru 1/10/2018 3:03 AM
これあれでしょ、SHA256とか決めるやつと同じ
Avatar
だね
3:04 AM
いや違うか?NSA?
Avatar
NISTが標準化機関?
Avatar
NIST は JIS みたいなやつだったはず
Avatar
omochimetaru 1/10/2018 3:05 AM
SHA-2は、Secure Hash Algorithmシリーズの暗号学的ハッシュ関数で、SHA-1の改良版である。National Security Agency(NSA)によって設計され、2001年にNational Institute of Standards and Technology(NIST)によ...
3:05 AM
SHA-2は、Secure Hash Algorithmシリーズの暗号学的ハッシュ関数で、SHA-1の改良版である。National Security Agency(NSA)によって設計され、2001年にNational Institute of Standards and Technology(NIST)によってFederal Information Processing Standard(FIPS) PUB 180-4として標準化された。
Avatar
SHA-1 とかは NSA じゃなかったっけ?
Avatar
omochimetaru 1/10/2018 3:05 AM
NSAは組織の名前
Avatar
あー
Avatar
omochimetaru 1/10/2018 3:05 AM
NISTは規格を決める委員会
Avatar
Hashと暗号化は直接関係ないぞ
Avatar
#swift-2 の話の本筋には関係ないですけど この前クヌースの矢印表記の話題がTwitterで流れてきて存在をはじめて知りました https://twitter.com/Perfect_Insider/status/944750954716413952
#仮面ライダービルド 本日の話数の式は「クヌースの矢印表記」という、非常に大きな数を表すための表記法です。計算のルールは、a↑b=a^b(aのb乗)、a↑↑b=a↑(a↑(a↑…↑a))…)(↑aをb回繰り返す)、a↑↑↑b=a↑↑(a↑↑(a↑↑…a))…)という感じです。2↑↑3=2^(2^2)=2^4=16です。
Retweets
229
Likes
317
Avatar
巨大数作るときに使うやつですね。
Avatar
omochimetaru 1/10/2018 3:42 AM
Hashと暗号化は直接関係ないぞ
SHAよりAESの方が適切な例でしたね 日経の記事中に出てくる 「NISTの次世代標準の候補になった」 の文脈について、SHAやAESと同じ標準決定のプロセスなので大きな話ですねとコメントした https://ja.wikipedia.org/wiki/Advanced_Encryption_Standard
Advanced Encryption Standard (AES) は、DESに代わる新しい標準暗号となる共通鍵暗号アルゴリズムである。アメリカ国立標準技術研究所(NIST)の主導により公募され、Rijndael(ラインダール)...
Avatar
コンピュータ上でのテキストとして表記する場合、フォントによっては↑のような記号が無い場合もあるため、a^^bのようにサーカムフレックスを並べる表記を行う場合がある。クヌース自身も、これを代替的あるいは簡便な記法として認めている。 https://ja.wikipedia.org/wiki/%E3%82%AF%E3%83%8C%E3%83%BC%E3%82%B9%E3%81%AE%E7%9F%A2%E5%8D%B0%E8%A1%A8%E8%A8%98 Swift で作ってみた。 ^ は別の演算子なので Python 等に倣って ** で代用。 precedencegroup UpArrowPrecedence { higherThan: MultiplicationPrecedence associativity: right } infix operator ** infix operator ^^ infix operator ^^^ func **(lhs: Int, rhs: Int) -> Int { return uparrow(lhs, rhs, *) } func ^^(lhs: Int, rhs: Int) -> Int { return uparrow(lhs, rhs, **) } func ^^^(lhs: Int, rhs: Int) -> Int { return uparrow(lhs, rhs, ^^) } private func uparrow(_ lhs: Int, _ rhs: Int, _ operation: (Int, Int) -> Int) -> Int { precondition(rhs >= 0) var result = 1 for _ in 0..<rhs { result = operation(lhs, result) } return result } print(2 ** 3) // 8 print(2 ^^ 3) // 16 print(2 ^^^ 3) // 65536
🙌 1
Avatar
omochimetaru 1/10/2018 4:05 AM
uparrowのresult=1は
4:05 AM
掛け算を足し算までバラすと
4:05 AM
おかしくなりそう
4:05 AM
( 掛け算を uparrowによる + の畳み込みで実装し直すとしたら) (edited)
Avatar
reduce で書きたかったんだけど(それなら initialValue を明示的に指定することになる)、同じ値を繰り返す Sequence を簡単に作る方法が思いつかなかった( Array.init(repeating:count:) みたいに実体を作る方法ではなく)。何かあったっけ?
4:08 AM
そもそも 2↑↑0 は 1 でいいんだっけ?
4:10 AM
In mathematics, Knuth's up-arrow notation is a method of notation for very large integers, introduced by Donald Knuth in 1976. It is closely related to the Ackermann function and especially to the hyperoperation sequence. The idea is based on the...
4:11 AM
良さそう
4:13 AM
x^x は x→0 で 1 に収束するけど、 x↑↑x を連続関数に拡張して(できるの?) x →0 のときは 1 に収束するのかな? (edited)
4:13 AM
@Taketo Sano さん案件だ🙃
Avatar
同じ値を繰り返す Sequence を簡単に作る方法
AnyIterator { number }
👍 1
Avatar
↑↑の一般化できてないみたい。 https://ja.wikipedia.org/wiki/%E3%83%86%E3%83%88%E3%83%AC%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3
最初の 3 つ(加算、乗算、冪乗)は正則な複素関数へと一般化できるが、テトレーションは正則な複素関数への一般化が確立できず、また初等関数とも見なせない。
Avatar
@hironytic #swift から #math に移動しました。 https://gist.github.com/hironytic/9cb2f09d22a615dd26c043589c7a4b31 さて、 Either<T, U> の値域は、 任意の t∈T, u∈U に対して、 a == t || b == u を満たすパターンの集合だと言える。 ここの || が XOR になりませんか? a is T && b is U のときの値を表せないように思います。 (edited)
Eitherは論理和でいいと思う理由
Avatar
表せないから、 a is T || b is U かなと思うんですよ。 a is T が成り立ったたら、 || の後ろは判定できませんよね。
Avatar
ああ、今 ||&& を短絡評価の意味合いで使ってるんですね。
Avatar
あ、まあ、そうです。短絡評価じゃなくてもそういう意味になるとは思うんですけど。
Avatar
短絡評価でなければ右オペランドも評価されるんじゃないですか?
Avatar
評価はされるかもしれませんが、その評価に関わらず、式は真になりますよねということ。
7:56 AM
あ、Eitherが表現できる状態は、 a == t || b == u を満たす (a,b) の集合ではなくて、 a == t || b == u を満たすパターンの集合ですよ。パターンの集合って言葉がおかしいけど。
Avatar
うーん、「パターンの集合」の意味するところがよくわからないです。
Avatar
そんな気がしました 😅 うまく説明できるか自信がない
Avatar
えーっと
7:59 AM
型の話と値の話がごちゃまぜになっていて混乱している気がする
8:00 AM
型Aと型Bを状態として取りうる→Either、型的に論理和 値Aと値Bのどちらか片方、或いは両方がある→These、値的に論理和 (edited)
8:00 AM
こういう話ではないでしょうか。
Avatar
直和とかいうはなし?じゃなくて、論理和?
8:01 AM
ちょっとログを読み返します。
Avatar
@tarunon 直感的にはそういう話だと思います。
Avatar
発端は #swift にある @Nobkz
Avatar
Either<A, A> を考えればそんな気もしてきました。
Avatar
そうか Pair<T, U> → Tの値を持っている && Uの値を持っている Either<T, U> → Tの値を持っている Uの値を持っている と言えばよかったのかも。無理に && と を使って説明するには。
Avatar
おもったより、遡りますね。ROMってます。
🙏 1
Avatar
@hironytic 「値を持っている」だと || じゃなくて XOR になってしまって || に対応するのは These<T, U> になってしまうから「値的に」ではなく「型的に」ということなんじゃないでしょうか? (edited)
Avatar
値的にと型的にの区別がぼくのなかで今ひとつわからず。
Avatar
(T?, U?) | | T | N | |:-:|:-:|:-:| | U | o | o | | N | o | o | Either<T, U> | | T | N | |:-:|:-:|:-:| | U | | o | | N | o | | These<T, U> | | T | N | |:-:|:-:|:-:| | U | o | o | | N | o | | #swift @koher より引用 (edited)
Avatar
書いてたら @tarunon さんが貼ってくれた。
Avatar
これなんですが
8:11 AM
これは値TとUが別々の場所に格納されることをイメージしていて
Avatar
(T, U) | | T | N | |:-:|:-:|:-:| | U | o | | | N | | |
Avatar
それぞれの存在を真偽として論理を組み立てています一方で
8:12 AM
@hironytic の議論では、その型が状態として取り得るのは何なのか、という議論なので
8:13 AM
型TとUの具体的な値が同じところに格納されていて、論理の対象は型そのもの
👌 1
Avatar
↑の表を論理演算の表と比較すると、 (T, U) は論理積に対応するけど Either<T, U> より These<T, U> が論理和に対応するように見えるという話でした。
8:18 AM
@tarunon ↑の表も型として取りうる状態になってませんか? Either<T, U> において「値TとUが別々の場所に格納される」わけではないですし。
8:20 AM
ただ、「和」とは何かを taketo1024 さんの貼ってくれたような圏論の定義に従って解釈しないと結局わからない気がしてます。
Avatar
圏論の話になってくると、ちょっとぼくにはついていけないですが。。。知識が足りない
Avatar
ああ、HaskellのData.Theseみたいな話ですか?
Avatar
僕が欲しかったアイテムはそれ。
Avatar
Either A (B, Maybe A) っぽいかんじか。 (edited)
Avatar
AとBがある時に、積は常にPair<A, B>でいいだろう(ここは全員一致) 和は何が相当するのか?でワイワイやってる←今
Avatar
T | | T | N | |:-:|:-:|:-:| | U | | | | N | o | |
Avatar
@Nobkz 代数的データ型では Either<A, B> のようなのが sum type なのに、↑の表を見てると論理和の表と対応しないぞ?論理和と sum type の関係は?って考えてた与太話です😅
8:25 AM
型としてと値としては混同してる気がしますね。
Avatar
Either<T, (U, T?) > とかって、swiftではokなの?
Avatar
便利に書くサムシングは無いけど作れば使える
Avatar
Either は標準ライブラリにないですが作ればできます。
Avatar
あれこうかな? T | | T | N | |:-:|:-:|:-:| | U | o | | | N | o | |
Avatar
swiftzが必要だなw
Avatar
昨日の T|U の話がまさに値と型を混同していて、 T|UTU の値を同時に保持できないけど、 T&U の値は保持できる。
Avatar
どうでもいいですけど、scalazよりも、最近cats がよく話題に上がりますね。scalaですけど。https://github.com/typelevel/cats
cats - Lightweight, modular, and extensible library for functional programming.
👀 1
Avatar
この表で T だけを考えるということが意味をなさないところが、型と値の混同具合を表してますかね。
Avatar
↑の表は意味を成してない気がしてきました。
8:30 AM
そもそも、 sum type は直和型というけど和じゃなくて直和( direct sum )なんだろうか? https://ja.wikipedia.org/wiki/%E7%9B%B4%E5%92%8C
8:30 AM
数学的な知識が足りなさすぎてそもそも問に意味があるのかもわからなくなってきた。
Avatar
ああ、でもそういえば、Eitherはただの型(というか型コンストラクタ) ですが、そのEitherも直和(集合論では論理和)と表わせるという話に近いかな。 (edited)
8:38 AM
Tは型、Uは型といったとき、集合論で考えるならば、T は集合、Uは集合なんですね。
8:40 AM
よんでる間、といったとき、TとUをなんか独立で考えられてる感があるなって思っていて、
8:40 AM
そのたとえば、NumとIntみたいな型同士が含有したりってことを考慮すればいいんじゃないかと。
👆 1
Avatar
そうですね。ぼくは集合で考えてましたね。
Avatar
swiftの型がよくわからないんで、なんともですが、たとえば、長方形集合と菱形集合を考えるのであれば、正方形集合が、どちらの集合も含むってことで。
8:44 AM
Either<長方形、菱形>は、論理和と考えてもいいっすよねみたいな感じの語りでいいのかなぁ
Avatar
継承の話っぽくなってきた
Avatar
それはそう。型を集合とみなせば、継承は部分集合ですよね。
👍 1
8:46 AM
数学の話なのかSwiftの話なのかわからなくなってきた 😅
Avatar
ios-developers-japan の #math だから大丈夫です👍
👍 2
8:48 AM
集合論において、集合の族の直和 (英: direct sum) は、以下の緊密に関連した二種類の概念を指して用いられる。 - 識別された和 (discriminated union): 通常の合併の操作を少し改変して、合併に属する元がもともとどの集合に入っていたか識別することができるようにしたもの。 - 交わりを持たない和 (disjoint union): その族に属する部分集合のどの二つも互いに素 (pairwise disjoint) であるときの、通常の合併。 … 本項においては主に前者について扱い、それを非交和と呼称する。 https://ja.wikipedia.org/wiki/%E9%9D%9E%E4%BA%A4%E5%92%8C (edited)
Avatar
いつかまた、swiftで1+1 = 2の証明をするんだろうな。僕は。こんなチャンネルがあったら...
Avatar
プログラミングにおける直和型( sum type )は↑の前者だから、非交和ってことで良さそう。
8:53 AM
おおお、非交和の定義がまさに sum type だ。
8:54 AM
圏 C の二つの対象 X1, X2 に対し、それら二つの対象の余積 X1 ∐ X2(または X1 ⊕ X2 あるいは単に X1 + X2 と書くこともある)とは 記号ばらつきすぎw
Avatar
こないだの稲見さんのスライドに Either<A, Never> = A とありましたが、これは集合における A ∪ φ = A に対応してそうです。一方で Pair<A, Void> = A というのは、 A × {1点} = A に対応してそうです。 (edited)
3:06 AM
集合の圏において空集合が始対象、一点が終対象であるのに対応して、型の圏では Never が始対象、Void が終対象で、両者の間で直和・直積を保つ綺麗な対応(圏から圏への対応 = 関手)があるんだろうと思います。 (edited)
3:09 AM
上の関係は a || false == a, a && true == a ともよく似ているので、ブール代数を圏と見た場合にも何らかの対応があるんだろうと思います。
Avatar
圏論は「ものとしては違うのにどういう訳か構造が似てる」ものの間の関係を考えるためのものなので、上の議論はまさしく圏論を手探りでやっているのだと思います。
👀 1
Avatar
圏論は「ものとしては違うのにどういう訳か構造が似てる」ものの間の関係を考えるためのもの
なるほど、圏論に興味が出てきました。
(edited)
8:33 AM
工学系の学部レベルの数学的知識しかない人間が圏論を勉強しようと思ったときにオススメの教科書などありますか?
Avatar
最近和訳された『ベーシック圏論』はいい本だと思うのですが、これもある程度色々な数学的構造を知ってることを前提に書かれてるんですよね…僕もまだ途中までしか読めてません。
12:58 PM
あ、そうだ、僕はまだ読んでませんが「プログラマのための圏論」というのがありました。 (edited)
12:59 PM
『プログラマのための圏論』はこれまでの分をまとめてPDFファイルにしました。参考にしてください。
1:00 PM
このブログの著者は実は退官された大学教授で、65歳から圏論を始めたそうですw (edited)
1:01 PM
過去に僕がやっていた勉強会に登壇して頂きました☺️ (講演のお願いをした時点では大学教授だということは知らなかったので驚きました😂 (edited)
Avatar
ありがとうございます!!
Avatar
本題と関係ないですが、↑の(プログラマーのための圏論」の「初めに」にミュータブルオブジェクトと並行処理における競合状態の問題について書かれていて、イミュータブルオブジェクトがその回避策として挙げられてるけど、Swiftでは値型によってその問題が解決されているのがおもしろいです。 https://developer.apple.com/videos/play/wwdc2015/414/
Swift supports rich first-class value types in the form of powerful structs, which provide new ways to architect your apps. Learn about...
Avatar
最初の方を読んでる限りでは射が写像にしか見えなくて写像でない射がイメージできない😵まず集合から離れて集合でない対象を考えないと写像から離れられないのかな…。
Avatar
↑を読んでてふと思ったんだけど、数学の集合は、自身もその要素もどちらも Equatable であることが仮定されているのかな?当然っちゃ当然だけど、そういう定義って見たことがない気が。自明だから?プログラミング的に考えたら、 Set<T> に求められる操作を考える過程で T : EquatableSet<T> : Equatable が導かれる気がする。 (edited)
Avatar
とても考えやすい「小さな圏」に半順序集合があります👍 a ≦ b のとき射 a → b があるということにします。
11:08 AM
半順序というのは、必ずしも全ての要素同士が比較可能でない順序のことを言います。例えば「集合の集合」は包含関係について半順序集合になります。あとは整数全体は「a が b を割り切る」という関係で半順序集合になります。 (edited)
11:10 AM
圏は有向グラフのようなものだと思うと想像しやすいと思います。頂点にあたるのが「対象」で、辺が「射」です。
11:14 AM
そうなんですよね! > Equatable (edited)
Avatar
この辺りのちゃんとした話は「数学基礎論」という分野できちんと定式化されているはずで、僕はちゃんと勉強したことがないのでまた雰囲気でしか話せませんが、 https://en.m.wikipedia.org/wiki/Zermelo–Fraenkel_set_theory (edited)
11:25 AM
「公理論的集合論」では、 a ∈ A という関係を全ての出発点として集合というものを定義していきます。
11:26 AM
要素の equality の定め方には二つの流儀があるらしく、集合の要素は Equatable だということをはじめから規定しておくか、集合が Equatable であることを使って要素の equality を「定義」することもできるそうです。 (edited)
11:26 AM
11:27 AM
後者の場合は Set<T> の Equatable の定義が先にあって、それを使って T: Equatable を定義している、という感じですね。 (edited)
11:33 AM
圏の話に戻すと、圏の射は Equatable だけど対象は Equatable であるとは仮定されていないんですよね。
11:34 AM
圏の一般論では「対象が同型かどうか」までしか言えず、集合のように「ピタッと一致している」ということは言えないんです。だからこそ普遍性などを使って射によって対象を特定していく、という普通の数学でやってたこととは全く別のアプローチを取ることになります。 (edited)
Avatar
「集合が Equatable であることは全然自明じゃない」というのはとても基本的で重要な気づきだと思います👍
Avatar
集合のequalityが先とかあるんですね。おもしろいです。
11:31 PM
今↓を読んでて、ちょうど @taketo1024#1158 さんに挙げていただいたのと同じような例が出て来ました。まだ途中ですが、僕にはこれがわかりやすかったです。 http://www.phys.cs.is.nagoya-u.ac.jp/~tanimura/lectures/tanimura-category.pdf
11:33 PM
↓このメタ具合、 @tarunon さんとかも好きそう。 例えば,群には部分群・正規部分群・ 商群,環には部分環・イデアル・商環,ベクトル空間には部分空間・商空間といった,よく 似た構造があり,群論・環論・線形代数のどの理論でも準同型定理と呼ばれるそっくりの定 理が成り立ちます.準同型定理はどの理論でもほぼ同様のルーチンワークで証明できます. また,いま挙げたどの理論にも直積と呼ばれる構造があって,直積の一意性は同様のルーチ ンワークで証明できます.圏論は,こういったさまざまな理論に見られる相似構造を抽出し て,まとめて面倒を見ることができます.
Avatar
基本的にエンジニアは潜在的には圏論好きだと思います(大きめの主語)ただ圏論の出自がハードコアな数学だということもあって、多くの入門書はそれを踏襲した書き方になっています。個人的にはエンジニアに最適化した形での再構成はきっとできると思います。いずれ型理論の勉強と共にやってみたい。
12:13 AM
とりあえず圏はグラフで、関手はグラフ写像だと思うと理解しやすいと思います👍集合が要素を持っていることは忘れて、一個の点だと思うのです👊 (edited)
Avatar
んー、どうでしょうww 圏論は、個人的には好きなんですがね。
1:40 AM
お、ベーシック圏論が出てたんですね。
1:40 AM
圏論の本も増えましたね。
Avatar
個人的にはエンジニアに最適化した形での再構成はきっとできると思います。
こういうの重要ですよね。記法が異なるだけで理解が格段に遅くなりますし・・・。
いずれ型理論の勉強と共にやってみたい。
期待してます!!
Avatar
koher さんが圏論に興味を持ってくれたことにテンションがあがってつい主語が大きくなってしまいました :trollface:
😀 1
Avatar
メタメタしい表現、理解の言語化みたいな感じで好きなんですが、これをぢっと見ると僕の理解が正しいのかどうかもわかるのかな
5:45 AM
trollfaceを登録しろという圧がある
👀 1
5:47 AM
アップロード失敗しまくる
Avatar
omochimetaru 1/29/2018 5:47 AM
でかすぎるのでは
Avatar
糞でかいわ、アホちゃうかw
Avatar
@tarunon とりあえず僕の挙げた「物理学者のための圏論入門」は本文 18 ページで簡潔に射・圏・関手・自然変換の定義と例が述べられていていい感じでしたよ。大体この手のって、平易な表現がされているけど結局よくわからないものか、ガチガチの抽象で何を意味しているのかわからないものが多い印象がありますが、↑はちょうどよかったです。まだ関手の途中までしか読んでないですが。 (edited)
5:51 AM
例を挙げるにしても、集合だけを例にしてしまうと写像と射の違いがよくわからなくなったりしますが、↑はその辺りも考慮していい感じに色々な例を作ってくれてました。 (edited)
Avatar
主語がデカすぎると怒られてるのかと思ってドキッとしてしまった💗
🙈 1
Avatar
ただ、入門なので もちろんこの講演ノートだけでは,圏論の解説としては まったく不十分ですが,圏論の本を恐れずに読めるくらいの準備は提供できたのでないかと 私は期待します. とのことですが、これまで圏や射の定義すらよくわからなかったので、そこが定義と例でわかりやすく説明されていたのがよかったです。
👍 1
Avatar
僕がおすすめするのが、「圏論の歩き方」ですね。
6:14 AM
僕はわりと「エンジニアのための」と限定すると逆に面白くないんじゃないか?とか考えてまして、この本はわりと、良い感じに分野横断している感じで好きですね。
6:16 AM
というか、「数学セミナー」の記事、シリーズで僕は読んだので、本自体は持ってないんですが、たぶん中身は一緒なので、よいかんじ。
Avatar
圏論の歩き方は個人的には初学者にはかなりハードル高めという印象です😵
6:17 AM
少なくとも僕にはハードル高かったです😵
Avatar
そうなんですか?まぁ、マクレーン本しかなかった時代の時なので、むずかしく感じられるのかもしれないですね。
Avatar
色々な応用があることを知るために流し読みをするには良いのかも知れませんが、ちゃんと分かろうとすると厳しい印象でした。
Avatar
状況としては、ほんとに「線形代数からやりなおせよ!!」って言われて、勉強したころとは、まったく違う感じでよいですなぁ。
Avatar
よく分かりませんでしたw
Avatar
そういえば、あとは、ここにカテゴリ論(圏論)の最低限の理論はかいてましたね。 http://amzn.asia/aXFi7bh
Avatar
koher さんが紹介してくれた資料にも 圏論の歩き方委員会(編著),『圏論の歩き方』,日本評論社 (2015). 数学セミナーに連 載された記事を単行本化したものです.(たぶん)12 人の参加者による,リレー形式, ときには対談形式で,多様な視点から圏論へのアプローチを紹介するガイドブックの ような書物です.こういう本を形にすること自体,非常に面白い試みだと思うのです が,圏論の教科書として通読するのには向いていないかもしれません. とありますが、僕もこれが妥当な評価だと思います。 (edited)
Avatar
うーん、これ一冊だけだとそうですが、理解の助けになる本だと思うんですよね。たぶん、一冊だけでは難しいので、補助的にあるといいんかなぁと。 (edited)
6:43 AM
あとは、Steve Awodeyさんの"Category Theory"ですね。
Avatar
Awodey はコンピュータサイエンスやロジックをやっていた人には読みやすいそうですね。日本語訳は酷いらしく原著を読むべきという声をよく聞きます。
Avatar
「日本語訳は酷いらしい」としか聞いたことないっすね。まぁ原著を読みましたが。
Avatar
僕の読んだドキュメントの著者の↓の書籍が気になってます。 http://www.saiensu.co.jp/?page=book_details&ISBN=ISBN978-4-7819-9901-2&YEAR=2013
10:11 AM
この人の学生時代のエピソードおもしろい。 学部の量子力学の演習中に「(講義担当の)先生の量子力学の教え方は古い」と私が友人にささやいたのを先生に聞き取られ(私の声が大きすぎた),だったら君が講義してみろと先生に言われ(「君が一番わかりやすいと思うやり方で君が講義してもいいよ」という優しい言い方だったと思います),その場で(応用物理学科の教室で)量子力学の講義をしたことがありました。いま思い返しても自分は生意気な学生だったと思います。 http://www.phys.cs.is.nagoya-u.ac.jp/~tanimura/
Avatar
おぉ、いいですね👍トポロジーならもう少しちゃんと力になれると思います☺ (edited)
🙏 1
Avatar
というか、圏論、圏論てるんで、スレcategory-theoryにしてもええんちゃうかみたいなwww
Avatar
1 + 1 = 2をswiftでやらせた。
3:38 PM
なんというか型推論をもっとできるところがあれば、もうちょっと簡単になるのになぁ。
3:40 PM
swiftわかりません。
3:41 PM
コンパイルが通ったので、定義と公理が間違ってなければあってるはず。
3:41 PM
思ったより時間がかかった。
Avatar
// proof4 : succ(succ(zero)) = succ(zero) + succ(zero) let proof4 : Eq<Succ<Succ<Zero>>,Add<Succ<Zero>, Succ<Zero>>> = transitive(s:Add<Succ<Zero>,Succ<Zero>>.self,t: Succ<Add<Succ<Zero>, Zero>>.self,r: Succ<Succ<Zero>>.self)(proof1)(proof3) (edited)
7:08 AM
うまく、ハイライトでけた。この辺りとか、わりと推論できないのかね?
7:10 AM
// proof4 : succ(succ(zero)) = succ(zero) + succ(zero) let proof4 : Eq<Succ<Succ<Zero>>,Add<Succ<Zero>, Succ<Zero>>> = transitive(proof1)(proof3)
7:10 AM
こんな感じにしたさがある。
Avatar
omochimetaru 1/30/2018 7:13 AM
transitiveの引数部分に
7:13 AM
func transitive<S,T,R>(s:S.Type = S.self, t:T.Type = T.self ,r:R.Type = R.self) -> (Eq<S,T>) -> (Eq<T,R>) -> Eq<R,S>
7:13 AM
こうやって、デフォルト引数を入れてやって
7:13 AM
いければいける、いけないといけないです
7:14 AM
少なくとも現状の定義だと絶対に明示せねばならないので。
Avatar
そういやそうか。
7:18 AM
おーいけたいけた。
Avatar
omochimetaru 1/30/2018 7:18 AM
お。
Avatar
高階関数をさ、高階版とただのGenerics版とでオーバーロードしたら()を消せないかな
Avatar
// proof1 : succ(zero) + succ(zero) = succ(zero + succ(zero)) // use axiom3 let proof1 : Eq<Add<Succ<Zero>,Succ<Zero>>, Succ<Add<Succ<Zero>,Zero>>> = axiom3() // proof2 : succ(zero) + zero = succ(zero) let proof2 : Eq<Add<Succ<Zero>, Zero>, Succ<Zero>> = axiom2() // proof3 : succ( succ(zero) + zero ) = succ(succ(zero)) let proof3 : Eq<Succ<Add<Succ<Zero>, Zero>>,Succ<Succ<Zero>>> = axiom1()(proof2) // proof4 : succ(succ(zero)) = succ(zero) + succ(zero) let proof4 : Eq<Succ<Succ<Zero>>,Add<Succ<Zero>, Succ<Zero>>> = transitive()(proof1)(proof3) // proof5 : succ(zero) + succ(zero) = succ(succ(zero)) let proof5 : Eq<Add<Succ<Zero>, Succ<Zero>>,Succ<Succ<Zero>>> = symmetric()(proof4)
7:24 AM
これで、わりとスッキリしてる感があるけど、()を消したいね。オーバロード版やってみるか。
👍 1
Avatar
圏の定義 結合律: f: a → b, g: b → c, h: c → d ならば h ∘ (g ∘ f) = (h ∘ g) ∘ f が成り立つ。 単位律: 各対象 x ∈ ob(C) に対して x の恒等射と呼ばれる自己射 idx = 1x: x → x が存在して、任意の射 f: a → x および g: x → b に対して 1x ∘ f = f and g ∘ 1x = g を満たす。 に出てくる = は何?射は Equatable なんでしょうか? = が満たされる条件は何?始域と終域が同じであること?(つまり対象は Equatable ?) (edited)
Avatar
それは違うか。自己射と恒等射が区別されているから、なんらかの方法で射の = を定義しないといけないのか。
9:39 PM
プログラミング言語における型を対象、(副作用のない)関数を射とみなした圏を考えたとき、型が同じであることを対象の equality と考えると (T) -> T な関数は複数考えられてしまうし、関数のオプジェクトが同一であることと考えると複数の恒等関数が作れてしまうからダメだし、挙動が同じなら = が成り立つとかにしないといけない? (edited)
9:44 PM
これらの公理から、各対象に対して恒等射はただ一つ存在することが示せる。 これも、一つであることを示すには二つの射が同じものかどうかを判定できないといけないから、暗黙的に 射: Equatable と仮定されている?
Avatar
ああ、射のEquatableですね。
4:45 AM
圏に寄って、射が等しいって条件は変わりますね。
4:47 AM
結合律ってのは等しいって条件が圏によっても違っても、(また射の合成が圏によって違っても)、 h ∘ (g ∘ f) = (h ∘ g) ∘ f になるように、圏を設定せよ、といったところでしょうかね。
4:48 AM
(まぁ、圏によって対象や、射が違うんだから、等しいって基準は異なるでしょというか...)
Avatar
上記のたとえば、型(値ではない)を対象したときに、関数を射とするとありました。
4:57 AM
関数 f : Int -> Int は確かに、複数の「"値"から"値"にする」関数は考えられます。しかしながらそれらは、全て「同じInt -> Intの"型"」の関数です
4:58 AM
対象を型をしたときには、値はすべて忘れさって、Int と Stringなどの"型の世界"だけで、圏を構成するのです。
5:04 AM
つまりですね、「射のあつまり」をどう定義するのか?なんですね。
5:04 AM
こんな感じの回答でいいのかしらん?
Avatar
型を対象、関数を射とした圏を考えたときに、 Int -> Int の射が複数存在して、それらが区別されてもいいですよね?
Avatar
うーんと、そもそもそれが"圏"と呼ぶ前提になってるかわかりません。
5:30 AM
対象がこれで、射がこれで、合成はこう定義して、結合律と単位律が達成できれば、圏と呼ぶ権利が与えられる。みたいな。 (edited)
Avatar
僕の読んでいた資料(↑で挙げた「物理学者のための圏論入門」)には、圏の定義のところに次のように書かれていました。 圏(category) とは,対象 (object) と射(arrow, morphism) の集まりで,以下の条件を満た すものです: (1) おのおのの射には始域 (domain) と呼ばれる対象と終域 (codomain) と呼ばれる対象が定まっています.始域がaで終域がbである射f をf : a → bあるいはa−→b と書きます.た だし,a から b への射は一つとは限りません.また,射の始域と終域が同じ対象でもかまいません. (edited)
5:32 AM
型と関数を考えるときに、残りの条件も満たせるかですが。
5:37 AM
射の合成は型さえあっていれば問題なくできますし、結合律も満たされるように思います。
Avatar
それが圏と呼べるものであれば、問題ありませんが、
Avatar
射の同一性を挙動のロジックの一致として考えればですが。
Avatar
ああ、てか、"ただし,a から b への射は一つとは限りません" のあたりで詰まっている感じですか?
Avatar
そうすれば恒等関数は一意に存在することになりますし、単位律も満たすようです。
5:41 AM
疑問に思ったのは、結合律や単位律の中で = が使われているので射に対して = を定義しないといけないと思うんですが、型と関数の圏を考えるときにどう考えるのが一般的なのかなと。
5:43 AM
"ただし,a から b への射は一つとは限りません" のあたりで詰まっている感じですか?
これについては、関数を射と考えていたので、始域と終域が同じ射が複数あることは自然だと考えています。
Avatar
= の定義ですね。そもそも、射の合成をどう考えられてますかね?
Avatar
関数を射とした圏のときの話ですか?それとも一般的な射についてですか?
5:58 AM
前者であれば↓のようになるんじゃないかと考えています。 func f(_ foo: Foo) -> Bar { ... } func g(_ bar: Bar) -> Baz { ... } { g(f($0)) } // g◦f (edited)
Avatar
前者の方ですね、
Avatar
g◦f はコード上で複数宣言することはできますが、ロジックが等しいこと関数を equality とすると、合成射 g◦f は一意に定まると言えると思います。
Avatar
そのつまり、「コード上で複数ある」は先ほどの、 型の集まりと関数の集まりの圏で、表現できますか?ということですね。
Avatar
たとえば、↓の関数はすべて等しいことになるんじゃないかと。 func foo(_ x: UInt) -> UInt { return x * x } func square(of number: UInt) -> UInt { let result = number * number return result } func bar(_ x: UInt) -> UInt { guard x > 0 else { return 1 } var result = 0 for v in 0..<x { result += x } return x }
6:09 AM
言いたいことは、実際に存在する関数のインスタンスを射とする圏というのは作ることができなくて、インスタンスの同一性以外に関数の equality を定義しないといけないんじゃないかと、そしてそれはロジックの本質的な意味の同一性とするのが適当なんじゃないかということです。
Avatar
上記だと、そもそも、射の合成に関数に「実装部」という余計な具象があるように思えます。
6:14 AM
もし、たとえば、対象をプログラムが取り得る値の集まりとして、射と合成を別に定義するなら、話は異なります。
Avatar
上記だと
これは↓のことですか? { g(f($0)) } // g◦f
6:21 AM
ああ、射に関数の入出力の型だけでなくその意味も持ち込むなら、対象が型ではなくてその型のインスタンスの集合でないといけないということですか?
6:23 AM
そうするとインスタンスの equality も考えないといけないのか。
6:27 AM
うーん、やっぱり型を対象、関数を射として、関数のロジックの同一性を equality とした圏を考えても大丈夫なように思うんですが、問題がありますか? (edited)
6:30 AM
実装そのものではなく、↑の foo(_)square(of:)bar(_) を同一とみなす、ただし↓は同一とみなさないという場合です。 func qux(_ x: UInt) -> UInt { return x + x }
Avatar
関数のロジックとは何を指すのかによりますね。
Avatar
同じ入力に対して同じ出力が得られることでしょうか。
6:34 AM
副作用がある関数や、参照透過でない関数は含まないとして、
6:34 AM
入出力が同じであることが確かめられないといけないので、インスタンスの equality を考えないといけないですね。
Avatar
ちょっと、圏の定義をやってみますね。
6:40 AM
圏の対象を、swiftの"型"とします。
6:40 AM
このとき、たとえば、 (Int -> Int)みたいなものも対象に入ってますか?
Avatar
入ると思います。
Avatar
先程、swiftの関数を射とするとおっしゃいましたが、正確に言えば、 型Xと型Yがあり、X -> Yとする関数があり、それを射とするということでいいですか?
Avatar
はい。
Avatar
すみません、しばらく離脱します🙏🏻
Avatar
戻りました。
Avatar
Swift における型(単純化のため、 Equatable を満たす型のみ)を対象とし、関数を射とします(引数の型が始域、戻り値の型が終域)。二つの関数 f: (X) -> Y, g: (X) -> Y があり、任意の x: X について関数 f(x) == g(x) が成り立つとき、 f と g は等しいものとします。このとき、任意の射 f1: (X) -> Y, f2: (Y) -> Z に対して f12: (X) -> Z = f2(f1(X)) が存在し、結合律、単位律が成り立つ(つまり、このような対象と射の集まりは圏な)のではないでしょうか?
Avatar
そこまで、定義すれば成り立つかもしれません(個人的にその定義で、結合律をなどを成り立つのを証明できれば、ですけど。
8:11 AM
ん?成り立たない感がある。あとでちょっと確認してみますね。
Avatar
ちなみに型付きラムダ計算での定義は、
8:21 AM
対象は、型付ラムダ計算の型の有限列。
8:23 AM
射は、プログラムの同値類列、
👀 1
8:23 AM
で定義してました。
Avatar
圏を定めるときに、射の equality もその定義に含まれていて、その上で結合律などを満たすことが要請される、というのが正しいと思います。 例えば集合の圏における二つの射(=写像)の同一性は、koher さんが書いたように始域の任意の要素に対して同じ値を対応させるか、によって定義します。 対象に対しては equatability は要請しないのに射に対しては要請するというところは僕も初学のとき気になったのですが、ちゃんとそのことに言明されてるテキストに出会ったことがありません🤔 (edited)
Avatar
圏における対象が同じでも、射の同一性の基準を変えれば圏としては別のものになります。例えば空間内の点を対象、二点間を結ぶ道を射とする圏を考えることができます。 この道を、両端の二点を固定したままぐにゃぐにゃ動かして移しあえるものは同じと見なそう、ということにすればまた別の圏になります(空間の基本亜群と呼ばれるものになります) (edited)
Avatar
そもそも、圏論の例としてあげられる簡単な例が、集合と写像だとか、そういうものが多くて、
5:09 AM
そうすると、同一性については最初から定義されることが多いんですね。
5:10 AM
そこはあくまでも数学の暗黙知はあるんかなぁと感じています。
5:13 AM
圏自体については、同型が区別の基準ですね。
Avatar
ちなみに、僕は初学者のときは全く気にならなかったので、やっぱり暗黙知なんかぁってなってます。
Avatar
対象と射と射の equality を決めてそれが条件を満たせば圏になるわけですね。射の equality が必要なのは射の合成や結合律、単位律の中から読み取れると。なんだか Structural Subtyping みたいですね。
Avatar
例えば空間内の点を対象、二点間を結ぶ道を射とする圏を考えることができます。 この道を、両端の二点を固定したままぐにゃぐにゃ動かして移しあえるものは同じと見なそう、ということにすればまた別の圏になります(空間の基本亜群と呼ばれるものになります)
N 地点間の到達可能性だけを考えたい場合と(経路を区別して)最適経路を見つけたい場合とでは、 equality の定義が変わって異なる圏として扱うという感じですか?
Avatar
Structual Subtypingっぽいのかぁ、僕が始めた頃はなんだか、群っぽいなぁって感じでしたねぇ。
Avatar
例えば集合の圏における二つの射(=写像)の同一性は、koher さんが書いたように始域の任意の要素に対して同じ値を対応させるか、によって定義します。
すみません、細かい質問なのですが、射の同一性の必要条件に「始域が同一であること」は入らないのでしょうか。
Avatar
入らないんじゃないっすかね。
7:14 AM
あ、必要条件か。 (edited)
Avatar
始域と終域が同じであることは射の同一性の必要条件な気がしますね。ということは暗黙的に対象の equality も定義することが求められている? (edited)
Avatar
はい、同じところにたどり着いて、結構強い要請じゃないか?って思ってました
Avatar
ただ、たとえば Swift の型を対象としても、型の同一性が求められるだけで、型のインスタンスの同一性は必要ないので、それくらいなら色々なものに適用できるような気がします。
7:50 AM
Foo.TypeEquatable じゃないといけないけど、 FooEquatable じゃなくていいみたいな。
Avatar
数学では一般には、同値関係であるというとき、反射律、対象律、推移律を見たすものを、言いますね。 (edited)
Avatar
始域の同一性を仮定しない場合、推移律が怪しいケースがある気がします
Avatar
始域が一致しないと対象律が破れますね(多分
9:36 AM
写像の同値関係を、以下のように定義する: f: X → Y と g: X → Y に対し、X ∈ ∀x について f(x) = g(x) であるとき、f = g である さて、集合 A と B と C があり、A ⊇B とする。 ここで、2つの写像 f: A → C と g: B → C を考え、B ∈∀b について f(b) = g(b) とする。 このとき、写像の同値関係の定義より g = f である。また、同値関係の定義より、同時に f = g を満たす必要がある。 しかし、f = g を満たすためには、 A∈∀a について g(a) を定義できる必要があり、ここから B \ A = φ でなければならない。 したがって、f = g が成り立つのは A = B のときのみである。 証明不慣れなのでこれで証明したことになるのか怪しいですが
9:42 AM
あ、いや f: X → Y と g: X → Y にしてるから、そもそも明白だった。。。
Avatar
というか、この辺りの話 WIkipedia に直接的な言及がありました。二項関係のほうで定義するんですね。https://ja.wikipedia.org/wiki/%E5%86%99%E5%83%8F#%E5%9C%8F%E8%AB%96%E3%81%AE%E5%B0%84%E3%81%AE%E4%B8%80%E7%A8%AE%E3%81%A8%E3%81%97%E3%81%A6%E3%81%AE%E5%86%99%E5%83%8F
Avatar
@Kuniwak#7542 はい、圏論では始域と終域の同一性は課します。 (edited)
Avatar
集合論的には終域の同一性まで課すかは微妙ですね。例えば実数値関数を複素数値と見たときに別の関数と見るべきか… (edited)
12:18 PM
集合論における関数 f:A → B の定義は、「A x B の部分集合 G であって、任意の a に対して (a, b) ∈ G となる b がただ一つだけ存在するもの、このとき f(a) = b と書く」なので関数はグラフ集合によって定義されていて、その同一性もグラフ集合の同一性によって定義されているので、始域については一致している必要はありますが、終域についてはより大きな空間に入ってると見ても関数としては同じ、ということになりそうです。 (edited)
12:24 PM
@koher そうですね、例えばそんな感じです。取り組む問題に対して同値性の条件が細かすぎるとモノが増えすぎて複雑になるので、可能な限り条件を緩くした上で射によって本質的な差を取り出せるようにしたい、という感じです。 (edited)
12:26 PM
@koher 確かにそうですね、気づきませんでした!
Avatar
集合の写像 f: A → B があって、B ⊂ C だったとして、圏論では(厳密には) f: A → C とはせず、包含写像 i: B → C と合成して if: A → C と見ることになると思います。でも実際はこういうケースでも混乱のない場合は同じ f で書くことも多いです。 (edited)
12:37 PM
ただこの区別が重要になるケースはあって、集合の写像としては i はあってもなくても変わらなくても、関手で移すと F(i) は全く非自明な働きをしたりします。例えばベクトル空間への関手を通すと F(i) = 0 となってしまったり。 (edited)
12:39 PM
なので圏論では始域、終域は射の属性であって、同一性の条件に課されます。 (edited)
Avatar
Taketo Sano 2/1/2018 1:02 PM
射の同一性に終域の同一性まで課す必要がある理由をもう一つ思いつきました。集合の圏において、もし終域の違いによって射を区別しなかったら、 A ⊂ B である場合に、包含写像 i: A → B は A の恒等射だということになりますが、始域と終域が異なるので i と i の合成が定義できず、恒等射の条件 ii = i を満たせなくなってしまいます。 (edited)
Avatar
なるほど、なるほど。勉強になります。
Avatar
なんかもっと簡単なのあるかなーって思ったら、代入原理から成り立ちますね。dom(f) = dom(g)もcod(f) = cod(g)も。
7:25 AM
と、Haskellの人から聞きますた。
Avatar
代入原理って少し特別扱いされている印象を受けますね。Wikipedia には「どの自由変数 x」と述べていますが、定義域とかどうするんだろう的な。
Avatar
=は同値律と代入原理を満たす関係として導入するのが、前提としてあるんかなと。
Avatar
初歩的なところですみません、同値律とはなんでしょうか
Avatar
反射律、推移律、対称律 の総称ですね。
Avatar
おお、なるほど。ありがとうございます。
Avatar
Taketo Sano 2/2/2018 2:26 PM
@nobkz#4791 もう少し詳しく説明して頂けると助かります🙏
Avatar
関手の馴染みある例として「微分」があります。多変数関数を微分するとヤコビ行列が出てきますが、これはユークリッド空間を一点上の接ベクトル空間に、微分可能な関数を接ベクトル空間上の線形写像に移す「ユークリッド空間の圏からベクトル空間の圏」への関手です。 (edited)
12:50 AM
合成関数の微分がヤコビ行列の積になるという連鎖律 D(gf) = D(g)D(f) は、まさしく微分 D の関手性です。 (edited)
12:54 AM
微分は「線形化の関手」だと言えます。
Avatar
Taketo Sano 2/8/2018 1:19 AM
1:19 AM
絵を描いてみました🎨
👏 3
👀 2
Avatar
ヤコビ行列にそんな捉え方があるのか・・・・・・
5:04 AM
CodeSnippets を使えば数学記号が気軽に入力できることに気づきました👍
👍 4
5:05 AM
~/Library/Developer/Xcode/UserData/CodeSnippets/ にあるのを GitHub においとけば共有できるっぽい?
Avatar
Taketo Sano 4/1/2018 2:42 PM
conditional conformance を使って、 𝐙/n𝐙 が n: 素数のときに限って体になるというのが表現できました👍 typealias A = IntegerQuotientRing<_5> // 5 は素数 let a = A(4) let b = A(3) print(a / b) // 割り算ができる typealias A = IntegerQuotientRing<_4> // 4 は素数でない! let a = A(4) let b = A(3) print(a / b) // 割り算ができないのでちゃんとエラー (edited)
👏 2
2:42 PM
型パラメータとして扱いたい整数を public struct _4 : _Int { public static let intValue = 4 } public struct _5 : _Prime { public static let intValue = 5 } のように直接定義していますw (edited)
Avatar
Taketo Sano 4/1/2018 3:07 PM
環を極大イデアルで割ると体になる、という風に抽象化できたので、多項式環を既約多項式で割ると体の拡大ができる、というのも実装を共通化することができました👍 // K1 = 𝐐[x]/(x^2 - 2) = 𝐐(√2). struct p1: _IrreduciblePolynomial { // p1 = x^2 - 2 static let value = Polynomial<𝐐>(-2, 0, 1) } typealias I1 = PolynomialIdeal<p1> // I = (x^2 - 2) typealias K1 = QuotientRing<Polynomial<𝐐>, I1> // K = Q[x]/I K1.isField // true let a = Polynomial<𝐐>(0, 1).asQuotient(in: K1.self) // a = x mod I a * a == 2 // a = √2 (edited)
👍 1
Avatar
以前、「微分は関手だ」ということを書きましたが、それに関する分かりやすい記事が出ていたので共有します🤡 https://blog.miz-ar.info/2018/09/chain-rule-and-functoriality/ (edited)
👀 1
Avatar
@Taketo Sano 僕の数学知識ではよくわかりませんが、 Swift for TensorFlow で可微分多様体をプロトコルで表して、接ベクトル空間を AST で扱う PR だそうです。 Swift for TensorFlow は Swift コンパイラを改造するプロジェクトなので、自動微分関連のコンパイラ側の改造と、それを活用したプロトコルの導入かと思います。 https://github.com/apple/swift/pull/19626 (edited)
Three things in this patch: Support general differentiable manifolds in differentiation API through a new Differentiable protocol. This enables user-define matrix types and differentiation of qua...
👍🏼 1
8:34 AM
General differentiable manifolds are now supported by Swift's AutoDiff. A niche use case is to write a function of type (OrthogonalMatrix) -> T and get a gradient of type (OrthogonalMatrix) -> SkewSymmetricMatrix. https://t.co/XQiM2uN9kX
Avatar
プログラマのための線形代数 〜 手計算ではなくコードで学ぼう https://peatix.com/event/606184 ご無沙汰してます、佐野です。3/16,17 (土日)の2日間、メルカリさんの会場にてこのような勉強会を開きます。 線形代数をコードで実装することで学ぼうという試みです。 サンプルコードには SwiftyMath を使う予定なので、Swift 使いで線形代数をやりたい方は是非ご参加下さい☺️先着20名までは半額の 1.5万 となってます✨ 宣伝失礼しました🙇‍♂️ (edited)
「プログラマのための数学勉強会」による 2日間の 線形代数入門講座 です!■ 概要線形代数 は解析学(微分積分)と並ぶ現代数学の基礎です。機... powered by Peatix : More than a ticket.
✍ 3
Avatar
Taketo Sano 9/7/2019 2:01 PM
今日の iOSDC 2019 での発表「SwiftyMath で学ぶ数学(抽象代数学)」の中でやった代数拡大のデモコードを共有します.よかったら遊んでみてください👍 import SwiftyMath typealias AlgebraicExtension<F, p: IrrPolynomialTP> = PolynomialQuotientRing<p> where p.CoeffRing == F typealias Q = RationalNumber typealias Qx = xPolynomial<Q> let x = Qx.indeterminate struct p1: IrrPolynomialTP { static let value = Qx(coeffs: -2, 0, 1) } typealias A = AlgebraicExtension<Q, p1> // A = Q[x]/p1 let α = A(x) print(α) print(α * α) print(α * α == 2) struct p2: IrrPolynomialTP { static let value = xPolynomial<Q>(coeffs: 1, 0, 1) } typealias B = AlgebraicExtension<Q, p2> // B = Q[x]/p2 let i = B(x) print(i) print(i * i) print(i * i == -1)
2:02 PM
(swiftbot で動かしてみようと思ったのですがやり方がわからなくなってしまいました)
Avatar
Kishikawa Katsumi 9/7/2019 2:45 PM
Swift Botのメンテを再開して組み込んどきます 😓
Avatar
Swift 5.1 がリリースされた時点で色々と直してこっちもアップデートしておくので、そのタイミングでも大丈夫です🙆‍♂️
Avatar
norio_nomura 9/9/2019 4:58 AM
僕のボットも5.0以降はSwiftyMathをビルド対象から外してしまいました。 4.2は、オプション無しでインポート可能だけど、0.3.0とかのままですね。 @swift-4.2.4 import SwiftyMath https://github.com/norio-nomura/SwiftCompilerDiscordappBot/blob/swift42/Libraries/Package%40swift-4.2.swift#L34
Swift Compiler Discordapp Bot. Contribute to norio-nomura/SwiftCompilerDiscordappBot development by creating an account on GitHub.
Avatar
swift42 BOT 9/9/2019 4:58 AM
no output (edited)
Avatar
お手数おかけしました 🙇 (edited)
Exported 323 message(s)
Timezone: UTC+0