SlideShare a Scribd company logo
TPP2023 2023/10/31
スポーツ選手の移籍トレード先決定アルゴリズムの
Coq/SSReflectによる検証
井上 健太
自己紹介
名前:井上 健太
所属:(とあるIT企業の一般社員)
有給休暇で個人参加のため、非公開
趣味:Coqで日常の疑問を証明すること
元千葉大学 山本研究室
移籍トレードとは?
チームT1 チームT2
移籍トレードとは?
チームT1 チームT2
m1 m2
移籍トレードとは?
チームT1 チームT2
m1 m2
移籍トレードとは?
チームT1 チームT2
m1
m2
移籍トレードとは?
チームT1 チームT2
m1 m2
移籍トレードとは?
チームT1 チームT2
m2,2
チームT3
⋯
チームT4
m2,1 m3,1
m4,2
m4,1 m4,3
多人数・多チームの場合は?
m2,1
多チーム移籍トレードの例
チームT1
チームT2
チームT3
プロ野球現役ドラフト
⋯ チームT4
チームT5
チームT6
多チーム移籍トレードの例
チームT1
チームT2
チームT3
⋯ チームT4
プロ野球現役ドラフト
チームT5
・各チームはトレードに出す選手を
2人以上選出 m2,2
m2,1
m3,1 m3,2
m4,2
m4,1 m4,3
m5,1 m5,2
m1,1 m1,2
m5,3
チームT6
m6,1 m6,2
多チーム移籍トレードの例
チームT1
チームT2
チームT3
プロ野球現役ドラフト
・各チームはトレードに出す選手を
2人以上選出 m2,2
m2,1
m3,1 m3,2
m1,1 m1,2
・各チームは欲しい選手を一人指名
(自チームの選手以外)
⋯ チームT4
チームT5
m4,2
m4,1 m4,3
m5,1 m5,2 m5,3
チームT6
m6,1 m6,2
多チーム移籍トレードの例
チームT1
チームT2
チームT3
プロ野球現役ドラフト
・各チームはトレードに出す選手を
2人以上選出 m2,2
m2,1
m3,1 m3,2
m1,1 m1,2
・各チームは欲しい選手を一人指名
(自チームの選手以外)
⋯ チームT4
チームT5
m4,2
m4,1 m4,3
m5,1 m5,2 m5,3
チームT6
m6,1 m6,2
・最も指名の多いチームが選手を獲得
多チーム移籍トレードの例
チームT1
チームT2
チームT3
プロ野球現役ドラフト
・各チームはトレードに出す選手を
2人以上選出 m2,2
m2,1
m3,1 m3,2
m1,1 m1,2
・各チームは欲しい選手を一人指名
(自チームの選手以外)
⋯ チームT4
チームT5
m4,2
m4,1 m4,3
m5,1 m5,2 m5,3
チームT6
m6,1 m6,2
・最も指名の多いチームが選手を獲得
・今指名された選手のチームが
まだ指名されてないチームの選手を獲得
多チーム移籍トレードの例
チームT1
チームT2
チームT3
m2,2
プロ野球現役ドラフト
・各チームはトレードに出す選手を
2人以上選出 m2,1
m3,1 m3,2
m1,1 m1,2
・各チームは欲しい選手を一人指名
(自チームの選手以外)
⋯ チームT4
チームT5
m4,2
m4,1 m4,3
m5,1 m5,2 m5,3
チームT6
m6,1 m6,2
・最も指名の多いチームが選手を獲得
・今指名された選手のチームが
まだ指名されてないチームの選手を獲得
多チーム移籍トレードの例
チームT1
チームT2
チームT3
m2,2
プロ野球現役ドラフト
・各チームはトレードに出す選手を
2人以上選出 m2,1
m3,1 m3,2
m1,1 m1,2
・各チームは欲しい選手を一人指名
(自チームの選手以外)
⋯ チームT4
チームT5
m4,2
m4,1 m4,3
m5,1 m5,2 m5,3
チームT6
m6,1 m6,2
・最も指名の多いチームが選手を獲得
・今指名された選手のチームが
まだ指名されてないチームの選手を獲得
多チーム移籍トレードの例
チームT1
チームT2
チームT3
m2,2
プロ野球現役ドラフト
・各チームはトレードに出す選手を
2人以上選出 m2,1
m3,1 m3,2
m1,1 m1,2
・各チームは欲しい選手を一人指名
(自チームの選手以外)
⋯ チームT4
チームT5
m4,2
m4,1 m4,3
m5,1 m5,2 m5,3
チームT6
m6,1 m6,2
・最も指名の多いチームが選手を獲得
・今指名された選手のチームが
まだ指名されてないチームの選手を獲得
・今指名された選手のチームがすでに指名済み
の場合、未指名のチームで上の手順を繰り返す
多チーム移籍トレードの例
チームT1
チームT2
チームT3
m2,2
プロ野球現役ドラフト
・各チームはトレードに出す選手を
2人以上選出 m2,1
m3,1 m3,2
m1,1 m1,2
・各チームは欲しい選手を一人指名
(自チームの選手以外)
⋯ チームT4
チームT5
m4,2
m4,1 m4,3
m5,1 m5,2 m5,3
チームT6
m6,1 m6,2
・最も指名の多いチームが選手を獲得
・今指名された選手のチームが
まだ指名されてないチームの選手を獲得
・今指名された選手のチームがすでに指名済み
の場合、未指名のチームで上の手順を繰り返す
・残り2チームになったら、未指名のチームを指名する
多チーム移籍トレードの例
チームT1
チームT2
チームT3
m2,2
プロ野球現役ドラフト
・各チームはトレードに出す選手を
2人以上選出 m2,1
m3,1 m3,2
m1,1 m1,2
・各チームは欲しい選手を一人指名
(自チームの選手以外)
⋯ チームT4
チームT5
m4,2
m4,1 m4,3
m5,1 m5,2 m5,3
チームT6
m6,1 m6,2
・最も指名の多いチームが選手を獲得
・今指名された選手のチームが
まだ指名されてないチームの選手を獲得
・今指名された選手のチームがすでに指名済み
の場合、未指名のチームで上の手順を繰り返す
・残り2チームになったら、未指名のチームを指名する
多チーム移籍トレードの例
プロ野球現役ドラフトの特徴
・任意のチームに対し、必ず1人以上の他チームの選手とトレードされる
多チーム移籍トレードの例
プロ野球現役ドラフトの特徴
・任意のチームに対し、必ず1人以上の他チームの選手とトレードされる
問題点
多チーム移籍トレードの例
プロ野球現役ドラフトの特徴
・任意のチームに対し、必ず1人以上の他チームの選手とトレードされる
問題点
・他チームの全選手より自チームの選手の方が良くてもトレードしないといけない
多チーム移籍トレードの例
プロ野球現役ドラフトの特徴
・任意のチームに対し、必ず1人以上の他チームの選手とトレードされる
問題点
・他チームの全選手より自チームの選手の方が良くてもトレードしないといけない
・欲しかった選手が他チームに取られてしまった場合に途中で辞退もできない
多チーム移籍トレードの例
プロ野球現役ドラフトの特徴
・任意のチームに対し、必ず1人以上の他チームの選手とトレードされる
問題点
・他チームの全選手より自チームの選手の方が良くてもトレードしないといけない
トレードによって損をする可能性がある
・欲しかった選手が他チームに取られてしまった場合に途中で辞退もできない
全てのチームが損をしないトレード
全てのチームが損をしないトレード
チームが損をしないとは?
全てのチームが損をしないトレード
チームが損をしないとは?
T :チームの有限集合
M :選手の有限集合
全てのチームが損をしないトレード
チームが損をしないとは?
T :チームの有限集合
M :選手の有限集合
各チーム の損得関係を
上の順序関係 で表すことにする
t ∈ T
2M
⪯t
全てのチームが損をしないトレード
チームが損をしないとは?
T :チームの有限集合
M :選手の有限集合
各チーム の損得関係を
上の順序関係 で表すことにする
t ∈ T
2M
⪯t
が成立するべき性質
⪯t を考える
全てのチームが損をしないトレード
チームが損をしないとは?
T :チームの有限集合
M :選手の有限集合
各チーム の損得関係を
上の順序関係 で表すことにする
t ∈ T
2M
⪯t
が成立するべき性質
⪯t
全てのチームが損をしないトレード
チームが損をしないとは?
T :チームの有限集合
M :選手の有限集合
各チーム の損得関係を
上の順序関係 で表すことにする
t ∈ T
2M
⪯t
が成立するべき性質
⪯t
・任意の , に対し、
X ⊂ M y ∈ M X ⪯t X ∪ {y}
全てのチームが損をしないトレード
チームが損をしないとは?
T :チームの有限集合
M :選手の有限集合
各チーム の損得関係を
上の順序関係 で表すことにする
t ∈ T
2M
⪯t
が成立するべき性質
⪯t
・任意の , に対し、
X ⊂ M y ∈ M X ⪯t X ∪ {y}
・任意の , , に対し、
X ⊂ M x ∈ X y ∈ M
ならば
x ≤t y X ⪯t X∖{x} ∪ {y}
:チーム が獲得したい選手の優先順位を表す
上の順序関係
≤t t
M
全てのチームが損をしないトレード
チームが損をしないとは?
T :チームの有限集合
M :選手の有限集合
各チーム の損得関係を
上の順序関係 で表すことにする
t ∈ T
2M
⪯t
が成立するべき性質
⪯t
・任意の , に対し、
X ⊂ M y ∈ M X ⪯t X ∪ {y}
・任意の , , に対し、
X ⊂ M x ∈ X y ∈ M
ならば
x ≤t y X ⪯t X∖{x} ∪ {y}
:チーム が獲得したい選手の優先順位を表す
上の順序関係
≤t t
M
X ⪯t Y :=
{x1, …, xn}, {y1, …, ym}: を で降順にソートした列
X, Y ≤t
かつ任意の に対し、
n ≤ m i ≤ n xi ≤t yi
反射推移閉包 ( が全順序の場合)
≤t
全てのチームが損をしないトレード
チームが損をしないとは?
T :チームの有限集合
M :選手の有限集合
X ⪯t Y :=
{x1, …, xn}, {y1, …, ym}: を で降順にソートした列
X, Y ≤t
かつ任意の に対し、
n ≤ m i ≤ n xi ≤t yi
≤: T → M → M → 2
:各チームの獲得したい選手の全順序
チーム において、選手構成 が構成 に対して損をしないとは
t X Y
を満たすこと
X ⪯̸ t Y
( は反対称律を満たす)
⪯t
全てのチームが損をしないトレード
トレードとは
T :チームの有限集合
M :選手の有限集合
≤: T → M → M → 2
:各チームの獲得したい選手の全順序
全てのチームが損をしないトレード
トレードとは
T :チームの有限集合
M :選手の有限集合
b : M → T :各選手の所属チーム
≤: T → M → M → 2
:各チームの獲得したい選手の全順序
全てのチームが損をしないトレード
トレードとは
T :チームの有限集合
M :選手の有限集合
b : M → T :各選手の所属チーム
≤: T → M → M → 2
:各チームの獲得したい選手の全順序
: チーム に所属する選手全体
b−1
t t ∈ T
全てのチームが損をしないトレード
トレードとは
T :チームの有限集合
M :選手の有限集合
b : M → T :各選手の所属チーム
≤: T → M → M → 2
:各チームの獲得したい選手の全順序
f : (T → M → M → 2) → (M → T) → M → T :トレード
全てのチームが損をしないトレード
T :チームの有限集合
M :選手の有限集合
f : (T → M → M → 2) → (M → T) → M → T :トレード
任意の に対し、
≤: T → M → M → 2
任意の に対し、 が全順序ならば
t ∈ T ≤t
任意の , に対し、
b : M → T t ∈ T
(f≤ b)−1
t ⪯̸ t b−1
t
win-winトレード
T :チームの有限集合
M :選手の有限集合
b : M → T :各選手の所属チーム
≤: T → M → M → 2 :各チームの獲得したい選手の全順序
チームt1
チームt2
チームt3
⋯ チームt4
チームt5
チームt6
win-winトレード
チームt1
チームt2
チームt3
⋯ チームt4
チームt5
チームt6
T :チームの有限集合
M :選手の有限集合
b : M → T :各選手の所属チーム
≤: T → M → M → 2 :各チームの獲得したい選手の全順序
とする
M0 := M
win-winトレード
チームt1
チームt2
チームt3
⋯ チームt4
チームt5
チームt6
T :チームの有限集合
M :選手の有限集合
b : M → T :各選手の所属チーム
≤: T → M → M → 2 :各チームの獲得したい選手の全順序
とする
M0 := M
・ ならば終了
Mi = ∅
win-winトレード
チームt1
チームt2
チームt3
⋯ チームt4
チームt5
チームt6
T :チームの有限集合
M :選手の有限集合
b : M → T :各選手の所属チーム
≤: T → M → M → 2 :各チームの獲得したい選手の全順序
各 から を指す
有向グラフを作る
t ∈ T mt := max
≤t
Mi
とする
M0 := M
・ ならば終了
Mi = ∅
win-winトレード
チームt1
チームt2
チームt3
⋯ チームt4
チームt5
チームt6
T :チームの有限集合
M :選手の有限集合
b : M → T :各選手の所属チーム
≤: T → M → M → 2 :各チームの獲得したい選手の全順序
各 から を指す
有向グラフを作る
t ∈ T mt := max
≤t
Mi
とする
M0 := M
・ ならば終了
Mi = ∅
閉路を一つ選んでn角トレード
win-winトレード
チームt1
チームt2
チームt3
⋯ チームt4
チームt5
チームt6
T :チームの有限集合
M :選手の有限集合
b : M → T :各選手の所属チーム
≤: T → M → M → 2 :各チームの獲得したい選手の全順序
各 から を指す
有向グラフを作る
t ∈ T mt := max
≤t
Mi
とする
M0 := M
・ ならば終了
Mi = ∅
閉路を一つ選んでn角トレード
win-winトレード
チームt1
チームt2
チームt3
⋯ チームt4
チームt5
チームt6
T :チームの有限集合
M :選手の有限集合
b : M → T :各選手の所属チーム
≤: T → M → M → 2 :各チームの獲得したい選手の全順序
各 から を指す
有向グラフを作る
t ∈ T mt := max
≤t
Mi
とする
M0 := M
・ ならば終了
Mi = ∅
閉路を一つ選んでn角トレード
からトレードした選手を
除いたものを とする
Mi
Mi+1
win-winトレード
T :チームの有限集合
M :選手の有限集合
f : (T → M → M → 2) → (M → T) → M → T :win-winトレード
win-winトレード
T :チームの有限集合
M :選手の有限集合
全てのチームが
f : (T → M → M → 2) → (M → T) → M → T :win-winトレード
任意の に対し、
≤: T → M → M → 2
任意の に対し、 が全順序ならば
t ∈ T ≤t
任意の , に対し、
b : M → T t ∈ T
(f≤ b)−1
t ⪯̸ t b−1
t
損をしない
win-winトレード
T :チームの有限集合
M :選手の有限集合
任意の に対し、
≤: T → M → M → 2
任意の に対し、 が全順序ならば
t ∈ T ≤t
b−1
t ⪯t (f≤ b)−1
t
f : (T → M → M → 2) → (M → T) → M → T :win-winトレード
得をする
全てのチームが損をしない
任意の , に対し、
b : M → T t ∈ T
(f≤ b)−1
t ⪯̸ t b−1
t
win-winトレード
T :チームの有限集合
M :選手の有限集合
任意の に対し、
≤: T → M → M → 2
任意の に対し、 が全順序ならば
t ∈ T ≤t
任意の , に対し、
b : M → T t ∈ T b−1
t ⪯t (f≤ b)−1
t
f : (T → M → M → 2) → (M → T) → M → T :win-winトレード
全てのチームが得をする
win-winトレード
T :チームの有限集合
M :選手の有限集合
任意の に対し、
≤: T → M → M → 2
任意の に対し、 が全順序ならば
t ∈ T ≤t
に対し、
t ∈ T b−1
t ⪯t (f≤ b)−1
t
f : (T → M → M → 2) → (M → T) → M → T :win-winトレード
全てのチームが得をする
任意の ,
b : M → T
win-winトレード
T :チームの有限集合
M :選手の有限集合
任意の に対し、
≤: T → M → M → 2
任意の に対し、 が全順序ならば
t ∈ T ≤t
b−1
t ⪯t (f≤ b)−1
t
f : (T → M → M → 2) → (M → T) → M → T :win-winトレード
全てのチームが得をする
b ⪯ c := ∀t ∈ T, b−1
t ⪯t c−1
t
⪯: (M → T) → (M → T) → 2 を
で定義する
任意のb : M → T に対し、
t ∈ T
,
win-winトレード
T :チームの有限集合
M :選手の有限集合
任意の に対し、
≤: T → M → M → 2
任意の に対し、 が全順序ならば
t ∈ T ≤t
b ⪯ f≤ b
f : (T → M → M → 2) → (M → T) → M → T :win-winトレード
全てのチームが得をする
b ⪯ c := ∀t ∈ T, b−1
t ⪯t c−1
t
⪯: (M → T) → (M → T) → 2 を
で定義する
任意のb : M → T に対し、
win-winトレード
T :チームの有限集合
M :選手の有限集合
任意の に対し、
≤: T → M → M → 2
任意の に対し、 が全順序ならば
t ∈ T ≤t
f : (T → M → M → 2) → (M → T) → M → T :win-winトレード
全てのチームが得をする
任意のb : M → T に対し、
任意の に対し、 は の極大値になる?
b : M → T f≤ b ⪯
b ⪯ f≤ b
Coqにおける実装
T :チームの有限集合
M :選手の有限集合
Coqにおける実装
T :チームの有限集合
M :選手の有限集合
Variable (Team:finType).
Variable (Member:finType).
Coqにおける実装
T :チームの有限集合
M :選手の有限集合
f : (T → M → M → 2) → (M → T) → M → T :win-winトレード
Variable (Team:finType).
Variable (Member:finType).
Coqにおける実装
T :チームの有限集合
M :選手の有限集合
f : (T → M → M → 2) → (M → T) → M → T :win-winトレード
Variable (Team:finType).
Variable (Member:finType).
Coqにおける実装
T :チームの有限集合
M :選手の有限集合
f : (T → M → M → 2) → (M → T) → M → T :win-winトレード
Variable (Team:finType).
Variable (Member:finType).
seq (Member * Team)
書き換えが多いため
Coqにおける実装
T :チームの有限集合
M :選手の有限集合
f : (T → M → M → 2) → (M → T) → M → T :win-winトレード
Variable (Team:finType).
Variable (Member:finType).
Coqにおける実装
T :チームの有限集合
M :選手の有限集合
f : (T → M → M → 2) → (M → T) → M → T :win-winトレード
Variable (Team:finType).
Variable (Member:finType).
全順序で しか計算しない
max
Coqにおける実装
T :チームの有限集合
M :選手の有限集合
f : (T → M → M → 2) → (M → T) → M → T :win-winトレード
Variable (Team:finType).
Variable (Member:finType).
全順序で しか計算しない
max
seq Member
ソートされた列
Coqにおける実装
T :チームの有限集合
M :選手の有限集合
f : (T → M → M → 2) → (M → T) → M → T :win-winトレード
Variable (Team:finType).
Variable (Member:finType).
Coqにおける実装
T :チームの有限集合
M :選手の有限集合
f : (T → M → M → 2) → (M → T) → M → T :win-winトレード
Variable (Team:finType).
Variable (Member:finType).
seq (Team * seq Member)
減少性を示す引数
Coqにおける実装
T :チームの有限集合
M :選手の有限集合
f : (T → M → M → 2) → (M → T) → M → T :win-winトレード
Variable (Team:finType).
Variable (Member:finType).
wwtrade: seq (Team * seq Member) ->
seq (Member * Team) -> seq (Member * Team).
Coqにおける実装
T :チームの有限集合
M :選手の有限集合
f : (T → M → M → 2) → (M → T) → M → T :win-winトレード
Variable (Team:finType).
Variable (Member:finType).
wwtrade: seq (Team * seq Member) ->
seq (Member * Team) -> seq (Member * Team).
wwtrade_rec.
wwtrade1_rec.
チームt1
チームt2
チームt3
⋯ チームt4
チームt5
チームt6
T :チームの有限集合
M :選手の有限集合
b : M → T :各選手の所属チーム
≤: T → M → M → 2 :各チームの獲得したい選手の全順序
各 から を指す
有向グラフを作る
t ∈ T mt := max
≤t
Mi
とする
M0 := M
・ ならば終了
Mi = ∅
閉路を一つ選んでn角トレード
からトレードした選手を
除いたものを とする
Mi
Mi+1
Coqにおける実装
チームt1
チームt2
チームt3
⋯ チームt4
チームt5
チームt6
T :チームの有限集合
M :選手の有限集合
b : M → T :各選手の所属チーム
≤: T → M → M → 2 :各チームの獲得したい選手の全順序
各 から を指す
有向グラフを作る
t ∈ T mt := max
≤t
Mi
とする
M0 := M
・ ならば終了
Mi = ∅
閉路を一つ選んでn角トレード
からトレードした選手を
除いたものを とする
Mi
Mi+1
Coqにおける実装
チームt1
チームt2
チームt3
⋯ チームt4
チームt5
チームt6
T :チームの有限集合
M :選手の有限集合
b : M → T :各選手の所属チーム
≤: T → M → M → 2 :各チームの獲得したい選手の全順序
各 から を指す
有向グラフを作る
t ∈ T mt := max
≤t
Mi
とする
M0 := M
・ ならば終了
Mi = ∅
閉路を一つ選んでn角トレード
からトレードした選手を
除いたものを とする
Mi
Mi+1
Coqにおける実装
チームt1
チームt2
チームt3
⋯ チームt4
チームt5
チームt6
T :チームの有限集合
M :選手の有限集合
b : M → T :各選手の所属チーム
≤: T → M → M → 2 :各チームの獲得したい選手の全順序
各 から を指す
有向グラフを作る
t ∈ T mt := max
≤t
Mi
とする
M0 := M
・ ならば終了
Mi = ∅
閉路を一つ選んでn角トレード
からトレードした選手を
除いたものを とする
Mi
Mi+1
Coqにおける実装
チームt1
チームt2
チームt3
⋯ チームt4
チームt5
チームt6
T :チームの有限集合
M :選手の有限集合
b : M → T :各選手の所属チーム
≤: T → M → M → 2 :各チームの獲得したい選手の全順序
各 から を指す
有向グラフを作る
t ∈ T mt := max
≤t
Mi
とする
M0 := M
・ ならば終了
Mi = ∅
閉路を一つ選んでn角トレード
からトレードした選手を
除いたものを とする
Mi
Mi+1
Coqにおける実装
チームt1
チームt2
チームt3
⋯ チームt4
チームt5
チームt6
T :チームの有限集合
M :選手の有限集合
b : M → T :各選手の所属チーム
≤: T → M → M → 2 :各チームの獲得したい選手の全順序
各 から を指す
有向グラフを作る
t ∈ T mt := max
≤t
Mi
とする
M0 := M
・ ならば終了
Mi = ∅
閉路を一つ選んでn角トレード
からトレードした選手を
除いたものを とする
Mi
Mi+1
Coqにおける実装
Coqにおける実装
Function wwtrade1_rec (ws:seq (Team * seq Member))
(rs os: seq (Member * Team))
(ts:seq Team) (t:Team)
{measure (fun s => sum_(i <- s) size i.2) ws} :
option (option Team) *
(seq (Team * seq Member) * seq (Member * Team) * seq (Member * Team)) :=
let: (osmt,ws') := oremove (pred1 t o fst) ws in
if osmt is Some smt
then if smt.2 is m :: sm
then let: (oomt,os') := oremove (pred1 m o fst) os in
if oomt is Some omt
then if omt.2 in t :: ts
then mkret omt.2 t ((t,sm) :: ws') ((m,t) :: rs) os'
else mkres t m sm omt
(wwtrade1_rec ws' rs os (t :: ts) omt.2)
(wwtrade1_rec ((t,sm) :: ws') rs os ts t)
else wwtrade1_rec ((t,sm) :: ws') rs os ts t
else (None,(ws,rs,os))
else (None,(ws,rs,os)).
mkret : (ommitted) ->
option (option Team) *
seq (Team * seq Member) * seq (Member * Team) * seq (member * Team).
mkres : (ommitted) ->
option (option Team) *
seq (Team * seq Member) * seq (Member * Team) * seq (member * Team).
Coqにおける実装
Function wwtrade1_rec (ws:seq (Team * seq Member))
(rs os: seq (Member * Team))
(ts:seq Team) (t:Team)
{measure (fun s => sum_(i <- s) size i.2) ws} :
option (option Team) *
(seq (Team * seq Member) * seq (Member * Team) * seq (Member * Team)) :=
let: (osmt,ws') := oremove (pred1 t o fst) ws in
if osmt is Some smt
then if smt.2 is m :: sm
then let: (oomt,os') := oremove (pred1 m o fst) os in
if oomt is Some omt
then if omt.2 in t :: ts
then mkret omt.2 t ((t,sm) :: ws') ((m,t) :: rs) os'
else mkres t m sm omt
(wwtrade1_rec ws' rs os (t :: ts) omt.2)
(wwtrade1_rec ((t,sm) :: ws') rs os ts t)
else wwtrade1_rec ((t,sm) :: ws') rs os ts t
else (None,(ws,rs,os))
else (None,(ws,rs,os)).
mkret : (ommitted) ->
option (option Team) *
seq (Team * seq Member) * seq (Member * Team) * seq (member * Team).
mkres : (ommitted) ->
option (option Team) *
seq (Team * seq Member) * seq (Member * Team) * seq (member * Team).
Coqにおける実装
Function wwtrade1_rec (ws:seq (Team * seq Member))
(rs os: seq (Member * Team))
(ts:seq Team) (t:Team)
{measure (fun s => sum_(i <- s) size i.2) ws} :
option (option Team) *
(seq (Team * seq Member) * seq (Member * Team) * seq (Member * Team)) :=
let: (osmt,ws') := oremove (pred1 t o fst) ws in
if osmt is Some smt
then if smt.2 is m :: sm
then let: (oomt,os') := oremove (pred1 m o fst) os in
if oomt is Some omt
then if omt.2 in t :: ts
then mkret omt.2 t ((t,sm) :: ws') ((m,t) :: rs) os'
else mkres t m sm omt
(wwtrade1_rec ws' rs os (t :: ts) omt.2)
(wwtrade1_rec ((t,sm) :: ws') rs os ts t)
else wwtrade1_rec ((t,sm) :: ws') rs os ts t
else (None,(ws,rs,os))
else (None,(ws,rs,os)).
mkret : (ommitted) ->
option (option Team) *
seq (Team * seq Member) * seq (Member * Team) * seq (member * Team).
mkres : (ommitted) ->
option (option Team) *
seq (Team * seq Member) * seq (Member * Team) * seq (member * Team).
Coqにおける実装
Function wwtrade1_rec (ws:seq (Team * seq Member))
(rs os: seq (Member * Team))
(ts:seq Team) (t:Team)
{measure (fun s => sum_(i <- s) size i.2) ws} :
option (option Team) *
(seq (Team * seq Member) * seq (Member * Team) * seq (Member * Team)) :=
let: (osmt,ws') := oremove (pred1 t o fst) ws in
if osmt is Some smt
then if smt.2 is m :: sm
then let: (oomt,os') := oremove (pred1 m o fst) os in
if oomt is Some omt
then if omt.2 in t :: ts
then mkret omt.2 t ((t,sm) :: ws') ((m,t) :: rs) os'
else mkres t m sm omt
(wwtrade1_rec ws' rs os (t :: ts) omt.2)
(wwtrade1_rec ((t,sm) :: ws') rs os ts t)
else wwtrade1_rec ((t,sm) :: ws') rs os ts t
else (None,(ws,rs,os))
else (None,(ws,rs,os)).
mkret : (ommitted) ->
option (option Team) *
seq (Team * seq Member) * seq (Member * Team) * seq (member * Team).
mkres : (ommitted) ->
option (option Team) *
seq (Team * seq Member) * seq (Member * Team) * seq (member * Team).
Coqにおける実装
Function wwtrade_rec (ws:seq (Team * seq Member))
(rs os:seq (Member * Team))
{measure (fun ws => size ws + sum_(i <- ws) size i.2) ws} :
seq (Member * Team) :=
if ws is tsm :: _
then let result := wwtrade1_rec ws rs os [::] tsm.1 in
if result.1 is Some _
then wwtrade_rec result.2.1.1 result.2.1.2 result.2.2
else wwtrade_rec (filter (predC (pred1 tsm.1 o fst)) result.2.1.1)
result.2.1.2 result.2.2
else rs ++ os.
Definition wwtrade (ws:seq (Team * seq Member)) (os:seq (Member * Team))
: seq (Member * Team) := wwtrade_rec ws [::] os.
Coqにおける実装
Function wwtrade_rec (ws:seq (Team * seq Member))
(rs os:seq (Member * Team))
{measure (fun ws => size ws + sum_(i <- ws) size i.2) ws} :
seq (Member * Team) :=
if ws is tsm :: _
then let result := wwtrade1_rec ws rs os [::] tsm.1 in
if result.1 is Some _
then wwtrade_rec result.2.1.1 result.2.1.2 result.2.2
else wwtrade_rec (filter (predC (pred1 tsm.1 o fst)) result.2.1.1)
result.2.1.2 result.2.2
else rs ++ os.
Definition wwtrade (ws:seq (Team * seq Member)) (os:seq (Member * Team))
: seq (Member * Team) := wwtrade_rec ws [::] os.
Coqにおける実装
Function wwtrade_rec (ws:seq (Team * seq Member))
(rs os:seq (Member * Team))
{measure (fun ws => size ws + sum_(i <- ws) size i.2) ws} :
seq (Member * Team) :=
if ws is tsm :: _
then let result := wwtrade1_rec ws rs os [::] tsm.1 in
if result.1 is Some _
then wwtrade_rec result.2.1.1 result.2.1.2 result.2.2
else wwtrade_rec (filter (predC (pred1 tsm.1 o fst)) result.2.1.1)
result.2.1.2 result.2.2
else rs ++ os.
Definition wwtrade (ws:seq (Team * seq Member)) (os:seq (Member * Team))
: seq (Member * Team) := wwtrade_rec ws [::] os.
Lemma wwtrade1_rec_None ws rs os ts t:
let result := wwtrade1_rec ws rs os ts t in
result.1 = None ->
oapp (fun s => s.2 = [::]) true (oremove (pred1 t o fst) result.2.1.1).1.
性質
Definition wwtrade (ws:seq (Team * seq Member)) (os:seq (Member * Team))
: seq (Member * Team) := wwtrade_rec ws [::] os.
性質
Definition wwtrade (ws:seq (Team * seq Member)) (os:seq (Member * Team))
: seq (Member * Team) := wwtrade_rec ws [::] os.
Definition wwtrade_eq_member ws os:
perm_eq (map fst os) (map fst (wwtrade ws os)) := wwtrade_rec_eq_member _ _ _.
Definition wwtrade_eq_team ws os:
perm_eq (map snd os) (map snd (wwtrade ws os)) := wwtrade_rec_eq_team _ _ _.
性質
Definition wwtrade (ws:seq (Team * seq Member)) (os:seq (Member * Team))
: seq (Member * Team) := wwtrade_rec ws [::] os.
Definition wwtrade_eq_member ws os:
perm_eq (map fst os) (map fst (wwtrade ws os)) := wwtrade_rec_eq_member _ _ _.
Definition wwtrade_eq_team ws os:
perm_eq (map snd os) (map snd (wwtrade ws os)) := wwtrade_rec_eq_team _ _ _.
Lemma wwtrade1_rec_eq_team ws rs os ts t:
let result := wwtrade1_rec ws rs os ts t in
if result.1 is Some (Some t0)
then perm_eq (t :: map snd rs ++ map snd os)
(t0 :: map snd result.2.1.2 ++ map snd result.2.2)
else perm_eq (map snd rs ++ map snd os)
(map snd result.2.1.2 ++ map snd result.2.2).
おまけ
T : eqType
s t : seq T
========================
perm_eq s t -> P s t
おまけ
T : eqType
s t : seq T
========================
perm_eq s t -> P s t
Lemma perm_ind (P:seq T -> seq T -> Prop) :
P [::] [::] ->
(forall u s t, P s u -> P u t -> P s t) ->
(forall a s t, P s t -> P (a :: s) (a :: t)) ->
(forall a b s, P [:: a, b & s] [:: b, a & s]) ->
forall s t, perm_eq s t -> P s t.
おまけ
T : eqType
s t : seq T
========================
perm_eq s t -> P s t
Lemma perm_ind (P:seq T -> seq T -> Prop) :
P [::] [::] ->
(forall u s t, P s u -> P u t -> P s t) ->
(forall a s t, P s t -> P (a :: s) (a :: t)) ->
(forall a b s, P [:: a, b & s] [:: b, a & s]) ->
forall s t, perm_eq s t -> P s t.
おまけ
T : eqType
s t : seq T
========================
perm_eq s t -> P s t
Lemma perm_ind (P:seq T -> seq T -> Prop) :
P [::] [::] ->
(forall u s t, P s u -> P u t -> P s t) ->
(forall a s t, P s t -> P (a :: s) (a :: t)) ->
(forall a b s, P [:: a, b & s] [:: b, a & s]) ->
forall s t, perm_eq s t -> P s t.
おまけ
T : eqType
s t : seq T
========================
perm_eq s t -> P s t
Lemma perm_ind (P:seq T -> seq T -> Prop) :
P [::] [::] ->
(forall u s t, P s u -> P u t -> P s t) ->
(forall a s t, P s t -> P (a :: s) (a :: t)) ->
(forall a b s, P [:: a, b & s] [:: b, a & s]) ->
forall s t, perm_eq s t -> P s t.
おまけ
T : eqType
s t : seq T
========================
perm_eq s t -> P s t
Lemma perm_ind (P:seq T -> seq T -> Prop) :
P [::] [::] ->
(forall u s t, P s u -> P u t -> P s t) ->
(forall a s t, P s t -> P (a :: s) (a :: t)) ->
(forall a b s, P [:: a, b & s] [:: b, a & s]) ->
forall s t, perm_eq s t -> P s t.
おまけ
T : eqType
s t : seq T
========================
perm_eq s t -> P s t
Lemma perm_ind (P:seq T -> seq T -> Prop) :
P [::] [::] ->
(forall u s t, P s u -> P u t -> P s t) ->
(forall a s t, P s t -> P (a :: s) (a :: t)) ->
(forall a b s, P [:: a, b & s] [:: b, a & s]) ->
forall s t, perm_eq s t -> P s t.
おまけ
T : eqType
s t : seq T
========================
perm_eq s t -> P s t
Lemma perm_ind (P:seq T -> seq T -> Prop) :
P [::] [::] ->
(forall u s t, P s u -> P u t -> P s t) ->
(forall a s t, P s t -> P (a :: s) (a :: t)) ->
(forall a b s, P [:: a, b & s] [:: b, a & s]) ->
forall s t, perm_eq s t -> P s t.
置換は互換の積で書ける
おまけ
T : eqType
s t : seq T
========================
perm_eq s t -> P s t
Lemma perm_ind (P:seq T -> seq T -> Prop) :
P [::] [::] ->
(forall u s t, P s u -> P u t -> P s t) ->
(forall a s t, P s t -> P (a :: s) (a :: t)) ->
(forall a b s, P [:: a, b & s] [:: b, a & s]) ->
forall s t, perm_eq s t -> P s t.
置換は互換の積で書ける
結論がnilとconsの形
おまけ
T : eqType
s t : seq T
========================
perm_eq s t -> P s t
Lemma perm_ind (P:seq T -> seq T -> Prop) :
P [::] [::] ->
(forall u s t, P s u -> P u t -> P s t) ->
(forall a s t, P s t -> P (a :: s) (a :: t)) ->
(forall a b s, P [:: a, b & s] [:: b, a & s]) ->
forall s t, perm_eq s t -> P s t.
置換は互換の積で書ける
結論がnilとconsの形
おまけ
T : eqType
s t : seq T
===============================
perm_eq s t -> P s t -> Q s t
Lemma perm_ind (P:seq T -> seq T -> Prop) :
P [::] [::] ->
(forall u s t, P s u -> P u t -> P s t) ->
(forall a s t, P s t -> P (a :: s) (a :: t)) ->
(forall a b s, P [:: a, b & s] [:: b, a & s]) ->
forall s t, perm_eq s t -> P s t.
おまけ
T : eqType
s t : seq T
===============================
perm_eq s t -> P s t -> Q s t
Lemma perm_ind (P:seq T -> seq T -> Prop) :
P [::] [::] ->
(forall u s t, P s u -> P u t -> P s t) ->
(forall a s t, P s t -> P (a :: s) (a :: t)) ->
(forall a b s, P [:: a, b & s] [:: b, a & s]) ->
forall s t, perm_eq s t -> P s t.
おまけ
T : eqType
s t : seq T
===============================
perm_eq s t -> P s t -> Q s t
Lemma perm_ind (P:seq T -> seq T -> Prop) :
P [::] [::] ->
(forall u s t, P s u -> P u t -> P s t) ->
(forall a s t, P s t -> P (a :: s) (a :: t)) ->
(forall a b s, P [:: a, b & s] [:: b, a & s]) ->
forall s t, perm_eq s t -> P s t.
T : eqType
u s t : seq T
===============================
(P s u -> Q s u) -> (P u t -> Q u t) -> P s t -> Q s t
おまけ
T : eqType
s t : seq T
===============================
perm_eq s t -> P s t -> Q s t
Lemma perm_ind (P:seq T -> seq T -> Prop) :
P [::] [::] ->
(forall u s t, P s u -> P u t -> P s t) ->
(forall a s t, P s t -> P (a :: s) (a :: t)) ->
(forall a b s, P [:: a, b & s] [:: b, a & s]) ->
forall s t, perm_eq s t -> P s t.
T : eqType
u s t : seq T
===============================
(P s u -> Q s u) -> (P u t -> Q u t) -> P s t -> Q s t
おまけ
T : eqType
s t : seq T
===============================
perm_eq s t -> P s t -> Q s t
Lemma perm_imply_ind (P Q:seq T -> seq T -> Prop) :
(forall s t, perm_eq s t -> forall u, P s u -> P t u) ->
(forall s t, perm_eq s t -> forall u, P u s -> P u t) ->
(forall a s t, P (a :: s) (a :: t) -> P s t) ->
(P [::] [::] -> Q [::] [::]) ->
(forall u s t, Q s u -> Q u t -> Q s t) ->
(forall a s t, P (a :: s) (a :: t) -> Q s t -> Q (a :: s) (a :: t)) ->
(forall a b s,
P [:: a, b & s] [:: b, a & s] -> Q [:: a, b & s] [:: b, a & s]) ->
forall s t, perm_eq s t -> P s t -> Q s t.
Lemma perm_imply_ind (P Q:seq T -> seq T -> Prop) :
(forall s t, perm_eq s t -> forall u, P s u -> P t u) ->
(forall s t, perm_eq s t -> forall u, P u s -> P u t) ->
(forall a s t, P (a :: s) (a :: t) -> P s t) ->
(P [::] [::] -> Q [::] [::]) ->
(forall u s t, Q s u -> Q u t -> Q s t) ->
(forall a s t, P (a :: s) (a :: t) -> Q s t -> Q (a :: s) (a :: t)) ->
(forall a b s,
P [:: a, b & s] [:: b, a & s] -> Q [:: a, b & s] [:: b, a & s]) ->
forall s t, perm_eq s t -> P s t -> Q s t.
おまけ
T : eqType
s t : seq T
===============================
perm_eq s t -> P s t -> Q s t
性質
Definition betterMember (t:Team) (ws:seq (Team * seq Member)) s1 s2 :=
seqfindrel (oapp snd [::] (oremove (pred1 t o fst) ws).1)
(map fst (filter (pred1 t o snd) s1))
(map fst (filter (pred1 t o snd) s2)).
Definition seqfindrel (X:eqType) (s0 s1 s2:seq X) :=
seqrel (fun x => (findrel s0)^~ x)
(psort s0 (filter (mem s0) s1))
(psort s0 (filter (mem s0) s2)) &&
subperm (filter (predC (mem s0)) s1) (filter (predC (mem s0)) s2).
Definition subperm (X:eqType) (s1 s2:seq X) :=
all [pred x | count_mem x s1 <= count_mem x s2] s1.
Fixpoint seqrel (X:Type) (R:rel X) (s1 s2:seq X) :=
match s1,s2 with
| [::],_ => true
| _ :: _,[::] => false
| x1 :: s1',x2 :: s2' => R x1 x2 && seqrel R s1' s2'
end.
性質
Definition betterMember (t:Team) (ws:seq (Team * seq Member)) s1 s2 :=
seqfindrel (oapp snd [::] (oremove (pred1 t o fst) ws).1)
(map fst (filter (pred1 t o snd) s1))
(map fst (filter (pred1 t o snd) s2)).
Definition seqfindrel (X:eqType) (s0 s1 s2:seq X) :=
seqrel (fun x => (findrel s0)^~ x)
(psort s0 (filter (mem s0) s1))
(psort s0 (filter (mem s0) s2)) &&
subperm (filter (predC (mem s0)) s1) (filter (predC (mem s0)) s2).
Definition subperm (X:eqType) (s1 s2:seq X) :=
all [pred x | count_mem x s1 <= count_mem x s2] s1.
Fixpoint seqrel (X:Type) (R:rel X) (s1 s2:seq X) :=
match s1,s2 with
| [::],_ => true
| _ :: _,[::] => false
| x1 :: s1',x2 :: s2' => R x1 x2 && seqrel R s1' s2'
end.
比較不能な要素の場合
・任意の , に対し、
X ⊂ M y ∈ M X ⪯t X ∪ {y}
・任意の , , に対し、
X ⊂ M x ∈ X y ∈ M
ならば
x ≤t y X ⪯t X∖{x} ∪ {y}
性質
Definition betterMember (t:Team) (ws:seq (Team * seq Member)) s1 s2 :=
seqfindrel (oapp snd [::] (oremove (pred1 t o fst) ws).1)
(map fst (filter (pred1 t o snd) s1))
(map fst (filter (pred1 t o snd) s2)).
Definition betterTeams
(ws:seq (Team * seq Member)) : rel (seq (Member * Team)) :=
fun x y => [forall t, betterMember t ws x y].
性質
Definition betterMember (t:Team) (ws:seq (Team * seq Member)) s1 s2 :=
seqfindrel (oapp snd [::] (oremove (pred1 t o fst) ws).1)
(map fst (filter (pred1 t o snd) s1))
(map fst (filter (pred1 t o snd) s2)).
Definition betterTeams
(ws:seq (Team * seq Member)) : rel (seq (Member * Team)) :=
fun x y => [forall t, betterMember t ws x y].
Proposition wwtarde_betterTeams ws os:
betterTeams ws os (wwtrade ws os).
まとめ
スポーツ選手の移籍トレードアルゴリズムに関して形式化
全てのチームがwin-winになること、
さらにそれが極大値であることの証明はfuture work
任意の点以上の極大値の一意性( 合流性)は言える?
⇔
終わりに
日常の疑問をCoqで形式化シリーズ
・株取引/株価決定アルゴリズム
・婚活パーティマッチング
・MonadはApplicativeを継承すべきか?
https://qiita.com/nekonibox
…etc
終わりに
日常の疑問をCoqで形式化シリーズ
・株取引/株価決定アルゴリズム
・婚活パーティマッチング
・MonadはApplicativeを継承すべきか?
https://qiita.com/nekonibox
…etc
Coqで定職に就きたい
coq歴12年

More Related Content

Recently uploaded

アジャイルの30年(Tree Decades of Agileというブログ記事に関する要約)
アジャイルの30年(Tree Decades of Agileというブログ記事に関する要約)アジャイルの30年(Tree Decades of Agileというブログ記事に関する要約)
アジャイルの30年(Tree Decades of Agileというブログ記事に関する要約)
You&I
 
20240603_SD輪読&座談会#57_kitazaki_______.pdf
20240603_SD輪読&座談会#57_kitazaki_______.pdf20240603_SD輪読&座談会#57_kitazaki_______.pdf
20240603_SD輪読&座談会#57_kitazaki_______.pdf
Ayachika Kitazaki
 
FIWARE Orion Context Broker コンテキスト情報管理 (Orion 4.0.0対応)
FIWARE Orion Context Broker コンテキスト情報管理 (Orion 4.0.0対応)FIWARE Orion Context Broker コンテキスト情報管理 (Orion 4.0.0対応)
FIWARE Orion Context Broker コンテキスト情報管理 (Orion 4.0.0対応)
fisuda
 
NIST Cybersecurity Framework 2.0の変更点整理をしよう
NIST Cybersecurity Framework 2.0の変更点整理をしようNIST Cybersecurity Framework 2.0の変更点整理をしよう
NIST Cybersecurity Framework 2.0の変更点整理をしよう
You&I
 
Grokking Simplicity探訪
Grokking Simplicity探訪Grokking Simplicity探訪
Grokking Simplicity探訪
Yoshitaka Kawashima
 
受発注バスターズ説明資料  株式会社batton Saleshub掲載用.pdf
受発注バスターズ説明資料  株式会社batton Saleshub掲載用.pdf受発注バスターズ説明資料  株式会社batton Saleshub掲載用.pdf
受発注バスターズ説明資料  株式会社batton Saleshub掲載用.pdf
ooishi1
 

Recently uploaded (6)

アジャイルの30年(Tree Decades of Agileというブログ記事に関する要約)
アジャイルの30年(Tree Decades of Agileというブログ記事に関する要約)アジャイルの30年(Tree Decades of Agileというブログ記事に関する要約)
アジャイルの30年(Tree Decades of Agileというブログ記事に関する要約)
 
20240603_SD輪読&座談会#57_kitazaki_______.pdf
20240603_SD輪読&座談会#57_kitazaki_______.pdf20240603_SD輪読&座談会#57_kitazaki_______.pdf
20240603_SD輪読&座談会#57_kitazaki_______.pdf
 
FIWARE Orion Context Broker コンテキスト情報管理 (Orion 4.0.0対応)
FIWARE Orion Context Broker コンテキスト情報管理 (Orion 4.0.0対応)FIWARE Orion Context Broker コンテキスト情報管理 (Orion 4.0.0対応)
FIWARE Orion Context Broker コンテキスト情報管理 (Orion 4.0.0対応)
 
NIST Cybersecurity Framework 2.0の変更点整理をしよう
NIST Cybersecurity Framework 2.0の変更点整理をしようNIST Cybersecurity Framework 2.0の変更点整理をしよう
NIST Cybersecurity Framework 2.0の変更点整理をしよう
 
Grokking Simplicity探訪
Grokking Simplicity探訪Grokking Simplicity探訪
Grokking Simplicity探訪
 
受発注バスターズ説明資料  株式会社batton Saleshub掲載用.pdf
受発注バスターズ説明資料  株式会社batton Saleshub掲載用.pdf受発注バスターズ説明資料  株式会社batton Saleshub掲載用.pdf
受発注バスターズ説明資料  株式会社batton Saleshub掲載用.pdf
 

Featured

Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)
contently
 
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024
Albert Qian
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie Insights
Kurio // The Social Media Age(ncy)
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024
Search Engine Journal
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary
SpeakerHub
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd
Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next
Tessa Mero
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Lily Ray
 
How to have difficult conversations
How to have difficult conversations How to have difficult conversations
How to have difficult conversations
Rajiv Jayarajah, MAppComm, ACC
 
Introduction to Data Science
Introduction to Data ScienceIntroduction to Data Science
Introduction to Data Science
Christy Abraham Joy
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best Practices
Vit Horky
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project management
MindGenius
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
RachelPearson36
 
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Applitools
 
12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at Work12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at Work
GetSmarter
 
More than Just Lines on a Map: Best Practices for U.S Bike Routes
More than Just Lines on a Map: Best Practices for U.S Bike RoutesMore than Just Lines on a Map: Best Practices for U.S Bike Routes
More than Just Lines on a Map: Best Practices for U.S Bike Routes
Project for Public Spaces & National Center for Biking and Walking
 
Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...
Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...
Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...
DevGAMM Conference
 
Barbie - Brand Strategy Presentation
Barbie - Brand Strategy PresentationBarbie - Brand Strategy Presentation
Barbie - Brand Strategy Presentation
Erica Santiago
 
Good Stuff Happens in 1:1 Meetings: Why you need them and how to do them well
Good Stuff Happens in 1:1 Meetings: Why you need them and how to do them wellGood Stuff Happens in 1:1 Meetings: Why you need them and how to do them well
Good Stuff Happens in 1:1 Meetings: Why you need them and how to do them well
Saba Software
 

Featured (20)

Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)
 
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie Insights
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search Intent
 
How to have difficult conversations
How to have difficult conversations How to have difficult conversations
How to have difficult conversations
 
Introduction to Data Science
Introduction to Data ScienceIntroduction to Data Science
Introduction to Data Science
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best Practices
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project management
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
 
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
 
12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at Work12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at Work
 
ChatGPT webinar slides
ChatGPT webinar slidesChatGPT webinar slides
ChatGPT webinar slides
 
More than Just Lines on a Map: Best Practices for U.S Bike Routes
More than Just Lines on a Map: Best Practices for U.S Bike RoutesMore than Just Lines on a Map: Best Practices for U.S Bike Routes
More than Just Lines on a Map: Best Practices for U.S Bike Routes
 
Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...
Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...
Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...
 
Barbie - Brand Strategy Presentation
Barbie - Brand Strategy PresentationBarbie - Brand Strategy Presentation
Barbie - Brand Strategy Presentation
 
Good Stuff Happens in 1:1 Meetings: Why you need them and how to do them well
Good Stuff Happens in 1:1 Meetings: Why you need them and how to do them wellGood Stuff Happens in 1:1 Meetings: Why you need them and how to do them well
Good Stuff Happens in 1:1 Meetings: Why you need them and how to do them well
 

移籍トレード.pdf