TeX Users Group 2013(TUG2013) 一日目レポート

講義があったり疲れて寝てたりしたので飛び飛びです。あと、英語力が足りなくてAbstractのほうが詳しいような説明しか書けない。

TiCL The prototype

LispTeXライクなものを書こうとしているらしい。本文もLISPで書けて、(section ...)みたいな感じになる。で、それをマクロをつかってどんどん不思議文法を導入していき、普通のTeXに近づけていくというお話だった。シンボルのあたりは細工をしたと聞いている。ただ、beginとendはLISPのままにしておいたほうが構造が綺麗にみえていいのではないかと思いました。

LISP on TeX: A LISP interpreter written using TeX macros

TeXマクロでLISPを実装した話。変態だー。マンデルブロー書いたりして測ると普通にマクロで書いたりLuaTeX使ったりするより100倍ぐらい遅いらしい。会議の最後のquestionで、「普通に実行して埋めこめばよくないですか」みたいなこと言われてた。

A gentle introduction to PythonTeX

一番便利そうだった。PythonTeXコードを吐き出したりできる。そういうわけで、TeX中で素数を計算したりできる。また、Pythonのモジュールが使えるので、Google Mapから地図を持ってきたり、NumPyモジュールを入れれば科学計算ができるし、SymPyを入れれば多項式の展開などの代数処理がTeX中で行なえるという話だった。

ここで講義と部会のため脱出。

Lunch

1000円はしそうな牛肉弁当だった。前が黒木先生。右のほうでTeXでのLISP実装が遅い原因とか話してた。あと、丸善出版の人に名刺もらって、丸善好きなので嬉しかった。どうも野良pdf*1だと印刷屋が受けてくれないので、このままTeXがpdf出力一本に進んでいくのは不味いという話をしていたらしい。

The incredible tale of the author who didn't want to do the publisher's job

ひどい出版社と編集者の話だけど技術的な話ではないし疲れてきたので省略。編集者からのサンプルはよく確認しようというのと、pdfからWordを作るのは気を付けましょうという話でした。

How we try to make working with TeX comfortable

ConTeXtの話だったと思うけど申し訳ない。寝てた。

ここで講義のため脱出。

How I use LaTeX to make a product catalogue that doesn't look like a dissertation

なんとか終了15分前ぐらいに講義から帰ってこれた。Jason Lewisは一番よく話してくれた人なので心苦しかったのだけれど、まあ少しでも見れてよかった。この方はオーストラリアで食料品の販売(たしか小売ではなかったと思う)で、そのカタログをLaTeXで作る話だった。ちょっと細かいところ聞けなかったのだけれど、どうも商品を入れてくれる人たちがデータを作るらしくて、そのためにVBAマクロ書いたりMS AccessやSQLと連携できるようにしたらしい。それでPerlTeXコードを生成する(?)か何かして、最終的なお洒落なカタログを生成していた。一行ごとに色を変えるとか、回り込みとか細かいところ丁寧で感動した。

TeX in educational institutes

かの有名な鉄緑会がTUGに参戦!数学の先生が来たらしい。鉄緑会についてひとしきり説明したあと、鉄緑会のプリントは日本史等含め全てTeXで書かれていることが明かされる。さらに、過去問データベースはTeXソースを登録するように作られていて、問題をクリックするとその場でコンパイルが通ってpdfが開くようになっていた。当然検索可能。最後のquestionで「なんだか感動的な成功談だったけれど、何か障害はなかったの」みたいな質問があったんだけど答えが聞けなかった。フランスの方が「フランスでも歴史の教師にTeX使うように言ってよwwww」みたいなこと言ってて笑った。

Online Publishing via pdf2htmlEX

明日からできる超便利TeXトリックだと思った。いままでのpdfからhtmlの生成は数式がくずれていたが、このpdf2htmlEXを使うとpdfと見分けのつかないレベルのhtmlが生成される。目次も使える。数式もきちんと出る。サイズも1/3ぐらいになってる。ハイパーリンクも効く。コピペもできる。当然右クリックからの検索もできる。オープンソース。すごい。すごすぎる。あと、開発メンバー募集中らしい。

The stony route to complex page layout

ごめん寝てた。

What is ConTeXt? A short introduction

ConTeXtに関するデモンストレーションだったんだけど、僕の英語力の問題だけでなくHagen氏の英語がどうも聞き取りづらく、ConTeXtに関する予備知識もなく、線形代数演習で割と疲れてたので寝はしなかったがどうしようもなかった。

*1:Adobe製品で出力されたものでないという意味で

ポストモダン解析学: 分割と回転(というか直交行列での変換)が分からなかった話

ポストモダン解析学の176頁の定義13.3で、極限の存在は分かったので、「同様の議論で」の一様収束列のとりかたへ依存しないことやsupp fを含むWのとりかたに依存しないこと(一意性)を調べようと思ったのだが、一部しか分からなかったという話。一意性を示すためには、収束する階段関数の列t_nt'_nをとって、
\left|\int_W t_n(x) dx - \int_{W'} t_m(x) dx\right|\to 0,\, n,m\to\infty
を示せばよい。

2つの関数列について分割の仕方も立方体のとり方も同じ場合

階段関数の積分の定義より、
\left|\int_W t_n(x) dx - \int_{W'} t_m(x) dx\right|=\left|\sum_{i=1}^k (c_i - c'_i)l_i^d\right|であり、c_ic'_iとが近いことは、階段関数の一様収束から言えて、成り立つ。

2つの関数列について立方体のとり方は同じだが、分割の個数が一致しないとき

2つの階段関数がn等分とm等分のとき、nm等分で分割して考えれば両方が一致して上に帰着される。

2つの関数列について立方体のとり方が異なるとき

2つの立方体が平行なら立方体を広げてやればなんとかなると思っていたのだが、広げると分割の仕方が変ってしまって先の式が使えなくなってしまう。ましてや、立方体に直交行列をかましたり平行移動したりしたらお手上げ。

なんでできそうな気がしていたのか

2変数で考えたとき、図的にあまりに自明だったからだと思う。しかし、分割の方法が立方体に限るという厳しい条件のせいか、どうにもならなかった。杉浦解析入門では分割は一般に長方形でできるので、直交行列で回転みたいなことをしなければ対応できた。回転ができるようになるのは結構後のほうだったし、Jurgen Joestさんがどういう意図だったのか本気で気になる。

ほか

考えて自己解決した他の分についてはサイトに置いてあるのでよかったらどうぞ
http://ashiato45.github.io/postmodern_analysis.html

バナッハ空間での二階微分の例(フレッシェ微分)

(2018年8月31日)多分これフレッシェ微分ではないです(当時なんでそんなことを書いたのかよくわからない)

いよいよはてな記法で書くの辛くなってきたのでTeXで書いた。HTML5対応ブラウザでないと見えないかも。pdfファイルは「https://github.com/ashiato45/blog_article/tree/master/postmodern_8_13」のmain.pdf。

これは何?

ポストモダン解析学を読んでいて,バナッハ空間での微分*1が出てきて,この定義なら多変数関数に対す
る二階微分ができるはずなのだが手頃な計算例が載っていなかったので作ってみた.値を与えると関数を吐
く関数のノルムをとったりとかしなくてはいけなくて,これの扱いに慣れていなかったのがてこずった原因
だった.

本文

PDFファイルを指定します。


ご覧の環境では、object要素がサポートされていないようです。PDFファイルをダウンロードしてください

IronPython+PTVS+MonoGameでの環境構築(主にIntellisense)

これは何?

IronPython+PTVS(Python Tools for Visual Studio)+MonoGame(XNAライクなライブラリ)を使ってVS2012でゲームを作ろうとしたらIntellisenseが効かなくて悩んだ話。多分MonoGameに限らずPTVSとdllの連携でIntellisenseが効かないという話に対応すると思う。

どうするの?

とりあえずIronPythonとPTVSが入っていればIronPythonのアプリケーションが作れるはずなので、それを作る。

本題ではないけれど、とりあえずWindowsアプリということで、ソリューションエクスプローラの中でプロジェクトを右クリックして、プロパティを開く。GeneralタブのWindowsApplicationにチェックを入れて、InterpreterIronPythonにしておく。

dllの読みこみは

clr.AddReferenceToFile("MonoGame.Framework.dll")

みたいにやるわけだけど、これだけだとIntellisenseが効かなくて、

import Microsoft.

まで打っても「xna」を補ってくれないので、これが問題になっていた。ちなみにこのとき、IronPython Console(VSやPTVSとは無関係)で補完が効くのは確認していたので、VSかPTVSで問題がおきていることは分かっていた。

結局、先のプロパティページのDebugのSearch Pathのところにdllの在処(私の場合「C:\Program Files (x86)\MonoGame\v3.0\Assemblies\WindowsGL」)を入れて、保存すると、コード中で補完してくれるようになった。DebugのところとIntellisenseが関係あるとは思わなかったので全然思い付かなかったが、PTVSもオープンソースなのだしコードを読む習慣があればもっと早く解決していたのかもしれない。

結局MonoGame+IronPythonのコードがどんな感じになったか。

後述の参考の「MonoGame w/ IronPython Example - doesn't work?」を参考に。

import sys
import os
sys.path.append(os.getcwd() + '\\lib')
 
import clr
clr.AddReferenceToFile("MonoGame.Framework.dll")

from Microsoft.Xna.Framework import *
from Microsoft.Xna.Framework.Graphics import *
from Microsoft.Xna.Framework.Content import *
from Microsoft.Xna.Framework.Storage import *
from Microsoft.Xna.Framework.Input import *

 
class App(Game):
    def __init__(self):
        self.graphics = GraphicsDeviceManager(self)
        RootDirectory = "Content"
 
    def Initialize(self):
        super(App, self).Initialize()
 
    def LoadContent(self):
        self.spriteBatch = SpriteBatch(self.GraphicsDevice)
 
    #TODO: use this.Content to load your game content here
    def Update(self, gameTime):
        if GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed or \
            Keyboard.GetState(PlayerIndex.One).IsKeyDown(Keys.Escape):
            self.Exit()

        super(App, self).Update(gameTime)
 
    def Draw(self, gameTime):
        self.graphics.GraphicsDevice.Clear(Color.CornflowerBlue)

        super(App, self).Draw(gameTime)
 
game = App()
game.Run()

これで無地の青画面が出る。この1ファイル感が好きです。

コンピュータビジョンでできた偶然の産物

「実践コンピュータビジョン」読んで書いてたらこんなのできた。

元画像(http://www.ashinari.com/2010/07/23-338955.php?category=243)
f:id:sle:20100717205247j:plain
できたの
f:id:sle:20130428110859p:plain

from PIL import Image
from numpy import *
import imtools
from pylab import *

im = array(Image.open("sample/artist.jpg").convert("L"))
im2, cdf = imtools.histeq(im)

## imshow(im)
imshow(im2)
show()

ポストモダン解析学: 補題5.13

これは何?

補題5.13の行間(?)が気になって、結局2日ぐらい考えたら分かったので書く。引用は全て丸善出版ポストモダン解析学 原書第3版 J.ヨスト著」から。引用中の赤字強調は全てashiato45による。

問題

状況設定

  • Iは実数の閉区間で、I=[a, b]
  • DはIの可算部分集合*1
  • fはIから実数への関数。以下の性質を満たす。
    • fはI上連続
    • fはI-D上で微分可能(I-D=I \cap D^c)
    • 任意のI-Dの元xについて、f'(x)\le M
    • \rho_nはDの番号付け(Dの定義により、番号付けは可能である。)
    • ηは任意の正実数。

証明しようとしているもの

f(b)-f(a)\le M(b-a)+\eta(b-a+1)

本題

証明から問題の箇所を引用します。

A:=\{\xi\in I: a\le \zeta <\xiとなるすべての\zetaf(\zeta)-f(a)\le M(\zeta-a)+\eta(\zeta-a)+\eta\sum_{\rho_n<\zeta} 2^{-n}\}とおく。a\in Aなので、Aは空集合ではない。c:=\sup Aとおく。fの連続性よりc\in Aであり…(略)

というのが本文なのだが、「fの連続性」からどうしてc\in Aが出るのか分からなかった。cがここに書いてある条件を満たしているのかとも思ったのだが、この直後にc\in Aそのものから
f(c)-f(a)\le M(c-a)+\eta (c-a)+\eta \sum_{\rho_n <  c} 2^{-n}
を導いているのでそうではないっぽい。

「fの連続性より」で何がおこったのか。

かいとう

登場人物が多くて大変なので、問題と直接の関わりがあるかは分からないがとりあえずいろいろ調べてみる。状況をなんとか目視しやすくしてみる。

まず、Aの定義からして\xi'<\xi\xi \in Aならxi'\in Aなことがわかる。*2よって、Aはぶちぶち途中で千切れたりせず、A=[a,c ] A=[a,c)のどちらかであることが分かる。
f:id:sle:20130427230710p:plain

図の下の青字にあるように、AがA=[a,c ] だろうがA=[a,c)だろうがAの任意の点\zeta\in [a,c)
f(\zeta)-f(a)\le M(\zeta-a)+\eta(\zeta-a)+\eta\sum_{\rho_n<\zeta} 2^{-n}\}がなりたつ。なぜなら、cはAの上限なので、cがAに属するとすればAの定義そのままで言え、cがAに属さなかったとしても、cよりちょっとだけ小さい点c-\epsilonを十分小さい正数εで表わせばこれはAに属するので、任意の正数εと任意の\zeta\in [a,c-\epsilon] について
f(\zeta)-f(a)\le M(\zeta-a)+\eta(\zeta-a)+\eta\sum_{\rho_n<\zeta} 2^{-n}\}がなりたち、結局同じことになる。証明おわり。なんなら、一方の点を一個とって、それが他方に入ることを言ってもいい。

ではAから出てしまったらどうなるのかというと、それはf(\zeta)-f(a)M(\zeta-a)+\eta(\zeta-a)+\eta\sum_{\rho_n<\zeta} 2^{-n}\}の大小はどちらだか分からなくなってしまう。先程言ったように、「千切れて」とびとびにf(\zeta)-f(a)\le M(\zeta-a)+\eta(\zeta-a)+\eta\sum_{\rho_n<\zeta} 2^{-n}\}がなりたっているかもしれないし、ひょっとしたらそんな区間はないのかもしれない。

してみると、cは「aからここまでは確実にf(\zeta)-f(a)\le M(\zeta-a)+\eta(\zeta-a)+\eta\sum_{\rho_n<\zeta} 2^{-n}\}と言える」という右端の限界だということになる。そしてこれが大事なのだが、緑字で書いたとおり「右端の限界」ということは、その(cの)ちょっと右ではf(\zeta)-f(a) > M(\zeta-a)+\eta(\zeta-a)+\eta\sum_{\rho_n<\zeta} 2^{-n}\}という風に否定が確実に成りたつということが分かる。

以上をまとめてみると、青字の情報を特殊化してとりだして、「cのちょっと左まではf(\zeta)-f(a)\le M(\zeta-a)+\eta(\zeta-a)+\eta\sum_{\rho_n<\zeta} 2^{-n}\}(不等号が小なりイコール)」が言え、緑字より「cのちょっと右まではf(\zeta)-f(a) > M(\zeta-a)+\eta(\zeta-a)+\eta\sum_{\rho_n<\zeta} 2^{-n}\}(不等号が大なり)」が言える。連続性めいてきた。

不等号の両端に式を書くのが面倒なので、以下
F(\zeta):=[f(\zeta)-f(a)]-[M(\zeta-a)+\eta(\zeta-a)+\eta\sum_{\rho_n<\zeta} 2^{-n}]
と定義する。すると、先程のは「cのちょっと左まではFは0以下」で「cのちょっと右まではFは正」ということが言える。

今は簡単のために、このcの左右ちょっとの範囲で\sum_{\rho_n<\zeta} 2^{-n}は定数であるとする。*3すると、fは連続関数であること、Fはfの足し引き定数倍であること、連続関数の足し引き定数倍は連続関数となることより、Fが連続関数であることが言える。連続関数Fが、cのちょっと左まで0以下、ちょっと右まで正なので、F(c)=0が言えた。

最後に、「cの左右ちょっとの範囲で\sum_{\rho_n<\zeta} 2^{-n}は定数である」の仮定を外す。心配なのは、「cのちょっと左まではFは0以下だったのに、不連続性をつかってぴょんとcで0でない正になってしまうのでは」ということだが、\sum_{\rho_n<\zeta} 2^{-n}が単調増加であることから、この項はFを減少させる方向にしか寄与しない。したがって不連続性を使って「増える」ことは絶対にできない。おわり。

ところで

Dで区切られた区間の各々について、千切れない区間での有限増分の定理をつかって、それを足しあわせるんじゃだめなんですか。

*1:1,2,...とIDを振れるようなIの点の集まり。Dとして[a,(a+b)/2]とかはとれない。

*2:「すべての」があるので、特殊ケースとして得られる。

*3:あとで外せることが分かる。