Definition: Spread
Spread(Pos;a.Mv[a]) ==  corec(G.a:Pos × (Mv[a] ⟶ G))

Lemma: Spread_wf
[Pos:Type]. ∀[Mv:Pos ⟶ Type].  (Spread(Pos;a.Mv[a]) ∈ Type)

Lemma: spread-ext
[Pos:Type]. ∀[Mv:Pos ⟶ Type].  Spread(Pos;a.Mv[a]) ≡ a:Pos × (Mv[a] ⟶ Spread(Pos;a.Mv[a]))

Definition: MoveChoice
MoveChoice(Pos;a.Mv[a]) ==  a:Pos ⟶ (Mv[a]?)

Lemma: MoveChoice_wf
[Pos:Type]. ∀[Mv:Pos ⟶ Type].  (MoveChoice(Pos;a.Mv[a]) ∈ Type)

Definition: Play
Play(Pos;a.Mv[a]) ==  ℕ ⟶ MoveChoice(Pos;a.Mv[a])

Lemma: Play_wf
[Pos:Type]. ∀[Mv:Pos ⟶ Type].  (Play(Pos;a.Mv[a]) ∈ Type)

Definition: subgame
subgame(g;p;n)
==r if (n =z 0)
    then inl g
    else let a,f 
         in case of inl(m) => subgame(f m;λi.(p (i 1));n 1) inr(z) => inr 
    fi 

Lemma: subgame_wf
[Pos:Type]. ∀[Mv:Pos ⟶ Type]. ∀[n:ℕ]. ∀[g:Spread(Pos;a.Mv[a])]. ∀[p:ℕn ⟶ MoveChoice(Pos;a.Mv[a])].
  (subgame(g;p;n) ∈ Spread(Pos;a.Mv[a])?)

Definition: sub-spread
s' ≤ ==  ∃n:ℕ. ∃p:ℕn ⟶ MoveChoice(Pos;a.Mv[a]). (subgame(s;p;n) (inl s') ∈ (Spread(Pos;a.Mv[a])?))

Lemma: sub-spread_wf
[Pos:Type]. ∀[Mv:Pos ⟶ Type]. ∀[s',s:Spread(Pos;a.Mv[a])].  (s' ≤ s ∈ ℙ)

Lemma: sub-spread-transitive
[Pos:Type]. ∀[Mv:Pos ⟶ Type].  Trans(Spread(Pos;a.Mv[a]);s',s.s' ≤ s)

Definition: resigned
resigned(x) ==  ↑isr(x)

Lemma: resigned_wf
[Pos:Type]. ∀[Mv:Pos ⟶ Type]. ∀[sg:Spread(Pos;a.Mv[a])?].  (resigned(sg) ∈ ℙ)

Definition: shift-play
shift-play(p) ==  λi.(p (i 1))

Lemma: shift-play_wf
[Pos:Type]. ∀[Mv:Pos ⟶ Type]. ∀[n:ℕ]. ∀[p:ℕn ⟶ MoveChoice(Pos;a.Mv[a])].
  (shift-play(p) ∈ ℕ1 ⟶ MoveChoice(Pos;a.Mv[a]))

Definition: WfdSpread
WfdSpread(Pos;a.Mv[a]) ==  {g:Spread(Pos;a.Mv[a])| ∀p:ℕ ⟶ MoveChoice(Pos;a.Mv[a]). (↓∃n:ℕresigned(subgame(g;p;n)))} 

Lemma: WfdSpread_wf
[Pos:Type]. ∀[Mv:Pos ⟶ Type].  (WfdSpread(Pos;a.Mv[a]) ∈ Type)

Lemma: WfdSpread-ext
[Pos:Type]
  ∀[Mv:Pos ⟶ Type]. WfdSpread(Pos;a.Mv[a]) ≡ a:Pos × (Mv[a] ⟶ WfdSpread(Pos;a.Mv[a])) 
  supposing ∀a,b:Pos.  Dec(a b ∈ Pos)

Definition: mkW
mkW(a;f) ==  <a, f>

Lemma: mkW_wf
[Pos:Type]. ∀[Mv:Pos ⟶ Type]. ∀[a:Pos]. ∀[f:Mv[a] ⟶ WfdSpread(Pos;a.Mv[a])].  (mkW(a;f) ∈ WfdSpread(Pos;a.Mv[a]))

Definition: W_sel
W_sel(w;n;s) ==  subgame(w;s;n)

Lemma: W_sel_wf
[Pos:Type]
  ∀[Mv:Pos ⟶ Type]. ∀[n:ℕ]. ∀[w:WfdSpread(Pos;a.Mv[a])]. ∀[s:ℕn ⟶ MoveChoice(Pos;a.Mv[a])].
    (W_sel(w;n;s) ∈ WfdSpread(Pos;a.Mv[a])?) 
  supposing ∀x,y:Pos.  Dec(x y ∈ Pos)

Lemma: WfdSpread-induction
[Pos:Type]
  ((∀a,b:Pos.  Dec(a b ∈ Pos))
   (∀[Mv:Pos ⟶ Type]. ∀[P:WfdSpread(Pos;a.Mv[a]) ⟶ ℙ].
        ((∀a:Pos. ∀f:Mv[a] ⟶ WfdSpread(Pos;a.Mv[a]).  ((∀m:Mv[a]. P[f m])  P[mkW(a;f)]))
         (∀w:WfdSpread(Pos;a.Mv[a]). P[w]))))

Definition: Spread-family
Spread-family(P;Pos;f;n,p,q.Mv[n;
                               p;
                               q]) ==
  corec-family(λS,p. (a:Pos × (q:P
                              ⟶ Mv[f a;
                                    p;
                                    q]
                              ⟶ (S q))))

Lemma: Spread-family_wf
[P,Pos:Type]. ∀[f:Pos ⟶ ℤ]. ∀[Mv:p:ℤ ⟶ P ⟶ P ⟶ Type].  (Spread-family(P;Pos;f;n,p,q.Mv[n;p;q]) ∈ P ⟶ Type)

Lemma: Spread-family-ext
[P,Pos:Type]. ∀[f:Pos ⟶ ℤ]. ∀[Mv:ℤ ⟶ P ⟶ P ⟶ Type].
  Spread-family(P;Pos;f;n,p,q.Mv[n;p;q])
  ≡ λp.(a:Pos × (q:P ⟶ Mv[f a;p;q] ⟶ (Spread-family(P;Pos;f;n,p,q.Mv[n;p;q]) q)))



Home Index