why3doc index index


(* From simulation, define a notion of subgame. *)
module SubGameDef

  use import ho_set.Set
  use import game.Game
  use import game_simulation.SimDef

  predicate direct_subgame (g1 g2:game 'a) =
    g1.progress = g2.progress /\
    forall x. subset (g1.transition x) (g2.transition x)
  predicate subgame (g1 g2:game 'a) =
    g1.progress = g2.progress /\ simulate g1 (=) g2

end

module SubGame "W:non_conservative_extension:N" (* => SubGameProof *)

  use import game.Game
  use import ho_rel.Rel
  use export SubGameDef

  axiom trivial_subgame_subgame : forall g1 g2:game 'a.
    direct_subgame g1 g2 -> subgame g1 g2

  axiom subgame_other : forall g1 g2:game 'a.
    subgame g1 g2 <-> g1.progress = g2.progress /\ forall p q.
      have_uniform_winning_strat g1 p q -> have_uniform_winning_strat g2 p q

  axiom subgame_preorder : preorder (subgame:erel (game 'a))

end

module SubGameProof

  use import SubGameDef
  use import fn.Fun
  use import fn.Image
  use import ho_set.Set
  use import ho_rel.RelSet
  use import ho_rel.Prod
  use import order.Chain
  use import order.Product
  use import order.ProductChain
  use import game.Game
  use import game.BasicStrats
  use import game_simulation.Sim

  lemma L0 : forall s:set 'a. related (=) s = s
    by sext (related (=) s) s

  lemma L1 : forall g1 g2:game 'a. direct_subgame g1 g2 ->
    subgame g1 g2 by step_simulate g1 (=) g2
    by (forall x y s. g1.transition x s /\ x = y ->
      have_winning_strat g2 y (related (=) s)
      by g2.transition y (related (=) s))
    /\ forall ch:set 'a,f. rel_mapping ch f (=) ->
      image f ch = ch by sext (image f ch) ch

  clone SubGame with
    goal trivial_subgame_subgame,
    goal subgame_other,
    goal subgame_preorder

end


Generated by why3doc 0.90+git