さらに遊ぶ

星がクルクル回るアニメーション

#lang frtime
(require
 frtime/animation)

(define long 50)
(define short 20)
  
(define time (- milliseconds (snapshot (milliseconds) milliseconds)))

(define (star x)
    (build-list 10
                (lambda (n)
                  (let ([radius (if (even? n) short long)]
                        [angle (+ (/ (* pi n) 5) (/ x 300))])
                    (make-posn (* radius (sin angle)) (* radius (cos angle)))))))

(display-shapes
 (list
  (lift-strict make-solid-polygon (lift-strict star time) mouse-pos "yellow")
  (lift-strict make-polygon (lift-strict star time) mouse-pos "gray")))

lift-strictの使いどころが今ひとつ分からない。

もうちょっと遊んでみる

マウスをクリックしたところへ、青い円が飛んでいく:

#lang frtime
(require
 frtime/animation)

(define phase (wave 100))

(define clicked-time
  (hold (left-clicks . ==> . (lambda (_) (snapshot (phase) phase)))
        (snapshot (phase) phase)))

(define target-pos
  (hold (left-clicks . ==> . (lambda (_) (snapshot (mouse-pos) mouse-pos)))
        (make-posn 10 10)))

(define source-pos
  (hold (left-clicks . ==> . (lambda (_) (snapshot (circle-pos) circle-pos)))
        (make-posn 10 10)))

(define distance
  (let ([ax (posn-x target-pos)]
        [ay (posn-y target-pos)]
        [bx (posn-x source-pos)]
        [by (posn-y source-pos)])
    (sqrt (+ (sqr (- ax bx)) (sqr (- ay by))))))

(define circle-t
  (let ([t (- phase clicked-time)])
    (if (< t distance) (/ t distance) 1)))

(define circle-pos
  (if (= distance 0)
      target-pos
      (posn+ (posn* source-pos (- 1 circle-t))
             (posn* target-pos circle-t))))

(display-shapes
 (list
  (make-circle circle-pos 10 "blue")
  (make-ring target-pos 15 "green")))

おそらくGCのためだが、ときどき動きが固まる。うーん…

デイヴィドソン

『真理と述定』では、デイヴィドソンの「真理論」という議論・論争についての考え方が披瀝されている。デイヴィドソンは真理を定義したい、あるいは定義的な分析を提供したいとは考えていない。

デイヴィドソンにとっては、真理は、すでに明確な概念なのだ。だから、定義する必要はない。デイヴィドソンは、すでに僕たちが明確に理解している真理の概念の帰結に関心がある。

たぶん、普通の「整合説」「対応説」「合意説」は、真理値を持つ信念・文・発話のクラスの線引き問題に関心を持っている。いわく、道徳的言明は真理値を持つ何らかの事実の記述ではなく、感情の表出なのである、といった。

しかし、デイヴィドソンにとっては、評価的な文であれ、その文を僕たちが平叙文として発話している以上、それは真理値を持つ。


『真理と述定』自体は、おもに真理論についてのかなり丁寧な論述で、あまり広いテーマへの展開をみせていない。それでもやはり、少なくとも僕にとっては、デイヴィドソン哲学の全体像の解説といえるものだった。

例えば、非法則一元論について。

デイヴィドソンは、心的事実なるものが存在する、ということをまったく疑問視していない。心の哲学の他の物理主義的な各説は、何かしら「心というものが本当にあるのだろうか?」という懐疑から出発しているようなところがあるけれども、デイヴィドソンの議論にはそういうところはない。

これはデイヴィドソンの真理論から帰結する態度だと思う。デイヴィドソンは心的事実の存在をまったく疑っていないが、その理由は「たしかにあると感じられる」といった類のものではなくて、たんに、我々は心的事実(信念や感情)についての平叙文を述べている、したがって心的事実は存在しなくてはならない、というものだろう。

デイヴィドソンが心的事実の存在を認めるのは、それを僕たちが認知しているからというものではないため、それをどのように認知しているか、例えばサールがこだわるような心の「存在論的主観性」のようなものにはこだわらない。

だから、非法則一元論は、なんというか… 唐突な始まり方をして、唐突な終わり方をする。「心的事実は存在する。存在するものは物理的事実のみのである。矛盾はない。以上」。

ちょっと遊んでみる

RacketというSchemeの処理系・開発環境があり、それをインストールすると、FrTimeという描画環境と統合されたReactive Programigライブラリとそのデモがはじめからついてくる。

僕は、UbuntuWindowsにインストールしている。Windowsのほうは何の支障もなく簡単にインストールできた。Ubuntuのほうは、ソースからコンパイルしたので、なんかX11関連(?)のライブラリが要求されたが、Synapticでそのライブラリを見つけて解決。

で、デモのmouse.rktなどを参照しつつ、FrTimeで少し遊んでみる。

マウスポインタへの追従

まず、非常に単純なコード。これで、画面に青い円が表示される:

#lang frtime
(require frtime/animation)

(define circle-pos (make-posn 10 10))
(define circle-radius 10)
(define circle-color "blue")

(display-shapes
 (list
  (make-circle circle-pos circle-radius circle-color)))

円をマウスポインタに追従させるには、circle-posをmouse-posで定義する:

#lang frtime
(require frtime/animation)

(define circle-pos mouse-pos)
(define circle-radius 10)
(define circle-color "blue")

(display-shapes
 (list
  (make-circle circle-pos circle-radius circle-color)))

このmouse-posにdelay-byを適用すると、円(circle-pos)がマウスポインタ(mouse-pos)の動きに少し遅れるようになる:

#lang frtime
(require frtime/animation)

(define circle-pos (delay-by mouse-pos 100))
(define circle-radius 10)
(define circle-color "blue")

(display-shapes
 (list
  (make-circle circle-pos circle-radius circle-color)))

時間の表示

まず、次のコードで、画面に「100」と表示される:

#lang frtime
(require frtime/animation)

(define number 100)

(display-shapes
 (list
  (make-graph-string (make-posn 20 20)
                     (format "~a" number)
                     "black")))

この表示を現在のエポック秒に切り替えてみる:

#lang frtime
(require frtime/animation)

(define number seconds)

(display-shapes
 (list
  (make-graph-string (make-posn 20 20)
                     (format "~a" number)
                     "black")))

これで、刻々と変化するエポック秒が表示される。数値演算を行うこともできる:

#lang frtime
(require frtime/animation)

(define number (/ seconds 10.0))

(display-shapes
 (list
  (make-graph-string (make-posn 20 20)
                     (format "~a" number)
                     "black")))

プログラムの開始時間をとるためには、snapshot関数を使う:

#lang frtime
(require frtime/animation)

(define start-time (snapshot (seconds) seconds))
(define number start-time)

(display-shapes
 (list
  (make-graph-string (make-posn 20 20)
                     (format "~a" number)
                     "black")))

で、─ここが面白い─プログラムの開始からの経過秒をとるためには、seconds - start-timeをとれば良い:

#lang frtime
(require frtime/animation)

(define start-time (snapshot (seconds) seconds))
(define number (- seconds start-time))

(display-shapes
 (list
  (make-graph-string (make-posn 20 20)
                     (format "~a" number)
                     "black")))

マウスクリックへの反応

今までのマウスポインタ位置(mouse-pos)やエポック秒(seconds)は、どちらもbehaviorだった:

> (behavior? mouse-pos)
#t
> (behavior? seconds)
#t

behaviorというのは刻々と変化する値を意味する*1。刻々と変化する値だから、常に何らかの値を持っている。

しかし、FrTimeでは(またたぶん大部分のRP環境では)、マウスクリックはbehaviorとは異なるもの、eventで表現される。これはある瞬間にだけある値を発信(?)するもので、常に何らかの値を示しているわけではない。

とりあえず、動くコード:

#lang racket
(require frtime frtime/animation)

(define value (switch left-clicks "not-clicked"))

(display-shapes
 (list
  (make-graph-string (make-posn 20 20)
                     (format "~a" value)
                     "black")))

left-clicksがevent。画面上でクリックすると、「not-clicked」という表示が変わる。もうちょっと手の込んだことをしよう:

#lang racket
(require frtime frtime/animation)

(define clicked-pos
  (left-clicks . ==> . (lambda (e) (format "(~a, ~a)"
                                           (send e get-x)
                                           (send e get-y)))))

(define message (switch clicked-pos "not-clicked"))

(display-shapes
 (list
  (make-graph-string (make-posn 20 20)
                     message
                     "black")))

これで、クリックした場所(x, y)が表示されるようになる。

eventの取扱い

このbehaviorとeventは抽象的にきちんと定義しようとすると面倒そう。

Yampaだと、behaviorの概念は、現在時刻(?)から値を返す関数とされている。たぶんこれでも不正確で、behaviorはプロセスが置かれている現在の環境すべてから値を返す関数だと考えるのが、もっともらしいように思える。eventは、Yampaでは、空であることもあるコンテナのbehaviorだとされているが、これはしっくりくる。

個人的には、eventはbehaviorの一種だというYampaの取扱いが統一的で良さそうに思うけど、とりあえずFrTimeではそうなっていない。behaviorに使える関数は、必ずしもeventに使えるわけではない。

また、これはbehaviorとeventを厳格に区別することの帰結ではないけれども、eventから何かを表示させようとすると、それを何らかの形でbehaviorに変換しなくてはならない。eventは少なくとも概念上は本当に一瞬のシグナルを出すだけだから、かりにそれを表示したとしても、人間には見えないよね。

eventをbehaviorに変換する関数には、hold、switch、accum-b、collect-bがある。

*1:「刻々と変化する値」というのは、さらっと書いたが、よく考えると意味の分からない表現だ。後述。

『倫理学の地図』

倫理学の教科書*1。全体にクセがなく*2、読みやすい。論点も網羅性もかなり高いように思う。

*1:

倫理学の地図

倫理学の地図

*2:「地図」というアナロジーにこだわりすぎのように感じた以外は。

ドゥウォーキン『裁判の正義』

ロナルド・ドゥウォーキン『裁判の正義』*1を読み終わった。二点、疑問がある …ただ、どちらもその内容をはっきり特定しつつ考えたわけではないので、かなり曖昧:

類比

正確な場所を見つけられないが、どこかで「原理なき類比は盲目である」という言葉を引き、類比による推論は、結局、原理への訴えかけを必要とする、という議論を展開していたように思う。たしかに、合理的な人々が欺瞞なくある類比が成り立つかどうかで鋭く意見を対立させているならば、その類比が成り立つ、成り立たないという水掛け論だけを繰り替えしていても意味はなく、原理への訴えかけが必要だろう。

でも、その類比を支えている原理が明確ではなく、ほとんど、あるいは実質上まったく意識されていないときにも類比は可能だし、広範な公共的同意を得られることもある。むしろ、法や道徳の判断においては、そのような類比についての同意が可能であるからこそ、原理についての共通理解を得られるのではないだろうか?

これこれは不正であるという複数の事例があって、それらが不正であることにはすべての人が同意していても、それらが同じ原理によって不正であると意見が一致している保証はない。すべて同じ原理によって不正であるという人々がいる一方で、Aグループはこれこれの原理によって不正であり、Bグループはまた別のこれこれの原理によって不正である、と主張する人々がいるかもしれない。

原理の特定の前に、不正である事例のグループ分けが必要なのであって、その場合には「合理的な類比」という人間の能力に訴えざるを得ないのではないだろうか。これもまた過度な単純化だとは思うが、ともあれ、ドゥウォーキンは類比の能力をスポイルしすぎなのではないかと思う。

道徳的内在主義/外在主義

この本を読んでいて、ふと気づいたが、ドゥウォーキンは公共的に正当化された道徳になぜ従わなければならないのか、あるいは人は道徳になぜ従うのかについて、いっさい説明を行っていないようだ。

『法の帝国』の記述によれば、ドゥウォーキンは一種の道徳的実在論者であるのは間違いない。しかし、その「道徳」は社会が実際に行ってきた、また行っている道徳慣習の絶え間ない公共的な再解釈の上になりたっているものであって、遠くはなれた時代・場所、例えば古代ローマの道徳慣習についてさえ、専門家が「内側から」解釈を行えるもののように思える。では、僕たちは古代ローマの道徳に従う必要はないのに、現代日本、あるいは人に応じて英国や米国の「道徳」に従わなければならないのは何故なのか?

『法の帝国』においても、『裁判の正義』においても、ドゥウォーキンは、この点についていっさい説明を行っていないように思える。しかし、それにも関わらず、ドゥウォーキンはどこかしら道徳的内在主義を前提してしまっているようにも見える。もっとも、むしろ、「道徳や正義論は『道徳的にあろうとする』人に対してだけ意味があり、それで充分だ」という立場が正しく、ドゥウォーキンは正しくもそういった立場に立っているのかもしれない。

しかし、それにしても、『法の帝国』における道徳の性格付けは、魅力に欠きすぎではなかろうか。この辺、僕自身の立場は固まっていない。ただ、最近は、リチャード・ノーマン『道徳の哲学者たち』の立場、他者との適切な関係は自分にとっての幸福の一部である、という見解を、まさにドゥウォーキンの議論によって補強してみるのが、魅力的なのではないかと思う。

つまり、たいていの人は共生的な関係を自分の幸福の一部として受け入れている(この辺がノーマン)。ここで「共生的な関係」な関係とは:

  1. 相手との関係で、自分はある行動をとるだろうという予測と、ある行動をとるべきだという義務と、ある行動をとってもよいという権利・許容の理解を持っており
  2. 相手も、そのようなその人自身の行動の予測・義務・権利についてその人なりの理解を持っており
  3. かつ、自分は相手の理解について、相手は自分の理解についても理解しており
  4. これらの理解はそれなりに安定的である

というものだ。こういった共生的な関係を維持するためには、たいていの場合、「クラスメート」「友人」「夫婦」「親子」といった出来合いのモデルについての広く共有された理解からはじめるのが手っ取り早く、たぶん必須でさえあるだろう。だから、自分の幸福のために、そのような出来合いのモデルのもとで共生的な関係を築き、その構成的解釈に従事することが(この辺がドゥウォーキン)、僕達に動機付けられる。

うーん…

*1:

裁判の正義

裁判の正義

デイヴィドソン『真理と述定』

ドナルド・デイヴィドソン『真理と述定』*1

書籍の帯には「デイヴィドソンの真理論の応用」と書かれているけど、7章中で3章までは、少なくとも僕にとっては今までで一番分かりやすいデイヴィドソン哲学の全体像の解説だった(それでも、難しくて、十分に理解できたとは言えないんだけど)。残りの4章からで「述定の問題」を中心的に扱っているけど、これもデイヴィドソンの真理論の「応用」というよりも、それについての別の側面からの解説といった方がよりしっくりくると思う。

この本で理解した限り、デイヴィドソンの真理論は以下のようなものになっている:

  1. ある人のある発話の意味を解釈するためには、その発話の真理条件を理解しなくてはならない*2
  2. ある人のある発話のの真理条件を理解するためには、その人の言語を理解しなくてはならない
  3. その人の言語を理解するためには、その人の諸信念をかなり多く理解しなくてはならない
  4. その人の諸信念をかなり多く理解するためには、その人の言語を理解しなくてはならない
  5. 3と4は循環する。そこで、解釈者(僕たち)は、被解釈者(相手)の諸信念のほとんどが解釈者の諸信念と一致するという仮定を立てる必要があり、その仮定が偽であった場合、解釈に失敗する
  6. 実際に、解釈者(僕たち)は被解釈者(相手)の発話の意味を解釈できている。ということは、解釈者は被解釈者の諸信念はほとんど一致している
  7. 解釈者と被解釈者の諸信念がほとんど一致しているということは、それらを生み出した共通の源泉、つまり客観世界が実在する

ここでのポイントは、1の真理条件の理解の必要性ということから、その真理条件という概念それ自体が客観世界との対応という概念を含んでいるという論法でもって客観世界の実在性という結論に到達しているのではなくて、解釈者と被解釈者の信念の一致という事実によってその結論に到達している、という理路だ。

ただ、この単純化した構図には、僕が思うにちょっとした問題がある。それは、解釈者と被解釈者の信念を一致させるものは別に「客観世界」でなくても構わないのでは? ということだ。魔法的なテレパシーでもって無意識に情報交換をし、それによって諸信念が一致していてもべつに構わないのでは?

この点については、デイヴィドソンがこの本の84項あたりで述べている、解釈者は被解釈者との信念の不一致の可能性について、あらゆる不一致をたんに同程度にありそうなものとして扱うのではなく、被解釈者の状況・環境(眼鏡を外しているとか、霧がかかっているとか)といったことによって、ありそうな不一致、説明のつきそうな不一致を選り分ける、ということが説明になるかもしれない。「そういった作業を可能にしているものが、客観世界なのである」ということか?

*1:

真理と述定 (現代哲学への招待―Great Works)

真理と述定 (現代哲学への招待―Great Works)

*2:少なくとも、その発話に密接に関連する叙述文の真理条件を理解しなくてはならない。