Designing Constraint Maintainers
for User Interaction
2005.6.6
東京大学 情報理工学系研究科
電子情報学専攻 修士1年
高橋 慧
1
発表の流れ
s
Maintainerの復習
Biased Selector
Maintainerの合成
ここまでのまとめ
2
Maintainerの実例
HTMLエディタ
グラフィカルビューとソースコード
タグに関する制約(開きタグ、閉じタグ…)
maintainerの動作
ビューのtable中でenterを押したとき、ソースコードに挿入
するのは<tr>か<br />か
ソースで”<t”と入力したとき、補完するのは<td>か
<table>か
お節介にならないように、制約も満たすように。
ユーザーの意志を尊重 → least change
動作の予測ができるように→ left most / predictable
⇒ビュー / ソースの変化に対し、最適な変化を選択
st
3
復習 : maintainer
制約R:x~yを常に満たしたい
yが変化したら、制約Rを満たすようxを変化
→maintainer xy
maintainerの定義
-EST : [(xy)Ry]
-SKIP : [xRy → (xy)=x]
(他にもいくつか同値な定義がある)
maintainerの望ましい動作
xの候補が複数→今のxからの変化を最小に
最小な候補が複数→left most (predictable)
sty
4
MaintainerをSelectorとして見ると…
maintainerはRyに対するselectorと見れる
Ryという集合から最適(最小)な要素を選択
xによって変化する (selector自体がxの関数)
x§ と表すと、maintainer xy の動作は
x’ = x§(Ry)と書ける
→”Biased Selector”と呼ぶ
Biased Selectorを考えるメリット
Biased Selector自体はR(制約)に依存しない
“よい”maintainerの構成手続きが与えられる
styl
5
Biased Selectorの定義
定義
A) Selectorの条件を満たす
1. x§S ∈ S
2. x§(S∪T) = x§{x§S, x§T}
B) if x ∈ S : x§S = x
Well-Orderedな集合には必ずx§が存在
例えば以下のように構成できる
if x∈S : x§S = x
else
: x§S = init(S)
style
6
Biased Selectorとmaintainer
biased selector ⇒ maintainer:[成立]
-EST : [(xy)Ry]
(a.1 : x§S ∈ S) で S=Ryとすればよい
-SKIP : [xRy → (xy)=x]
(b: if x ∈ S : x§S = x) そのもの
maintainer ⇒ biased selector:[不成立]
(a.2:x§(S∪T) = x§{x§S, x§T})が問題
least changeに関連
styled
7
“良い”Biased Selectorを構成
maintainerとしての良い性質を持つ
least change, left most (predictable)
x§Sを構成 (Sはwell-ordered)
“xとの近さ”を定義する (編集距離など)
S中でxに最も近い距離を持つ集合をCx(S)とおく
x§S =init(Cx(S))とする
(initは元々のwell-orderを構成したmin)
このx§は、Biased Selectorになっている
styled b
8
x§がBiased Selectorになっている証明
復習
Cx(S):Sのうち、xからの距離が最小の要素の集合
init(S):Sの最小値(みたいなもの)
a.1 : x§S ∈ S
x§の定義: x§S = init(Cx(S))
⇒ {init(A) ⊆ A, Cx(S) ⊆ S} より x§S ∈ S
a.2 : x§(S∪T) = x§{x§S, x§T}
x§の定義: x§(S∪T) = init(Cx(S∪T))
init(Cx(S∪T)) ∈ Cx{x§S,x§T}
Cx(S∪T) ⊆ Cx(S) ∪ Cx(T)
init(Cx(S∪T)) ∈ {init(Cx(S)), init(Cx(T))} = Cx{x§S,x§T}
init(Cx(S)) ⊆ Cx(S), init(Cx(T)) ⊆ Cx(T)
{x§S,x§T} ⊆ Cx(S∪T)
Cx(A) ⊆ AよりCx{x§S,x§T} ⊆ Cx(S∪T)
Cx{x§S,x§T} ⊆ Cx(S∪T)
⇒ {initの性質: A⊆B ∧ init(B)∈A ⇒ init(A)=init(B)}より
init(Cx(S∪T)) = init(Cx(x§S∪x§T)), x§(S∪T) = x§{x§S, x§T}
b : if x ∈ S : x§S = x
styled by
(x∈S) ⇒ (Cx(S) = {x}) ⇒ (init(Cx(S)) = x) ⇒ (x§S = x)
9
maintainerの推移的合成
制約R:x~y S:y~zを合成 → T:x~z
x T z は xR (yS z) として構成できる?
一般にはyを隠すとx~zが構成できない
例えばx:ある実数 y:実数集合 z:ある実数で、
xがyの項数、zがyの正の項数とする。
maintainer : x~zは、yを考えないと構成できない
y=f(x)の関係があるとき(#Ry=1)はOK (証明略)
複雑な制約を分解してmaintainerを構成できる
styled by K
10
maintainerの統合
R:x~y, S:x~y → T=R∪S:x~y
TをRとSから合成
T=x§{xRy, xSy}とすればよい
証明
xTy
= x§((R∪S)y)
…x§の定義
= x§(Ry∪Sy)
…自明ではないが省略
= x§{x§(Ry), x§(Sy)} … Selectorの定義
= x§{xRy, xSy)}
…x§の定義
x§がR,Sに依存しないのがポイント
styled by Ke
11
3,4章のまとめ
Maintainerの構成
複数の候補から一つを選ぶ→順序の定義が必要
Well-order : 大小関係が一意に定まる順序
Selector :”最小値”の必要十分条件
Biased Selector : xを基準にしたselector
Maintainerの統合・合成
T=R;S : Rが関数で表せれば合成できる
T=R∪S : 常に合成できる
maintainerの実例に続きます。
styled by Kei
12
© Copyright 2026 ExpyDoc