Library model_structure
A structure that validity will be defined on:
- a pre-order wle of worlds K
- a monotone "exploding node" predicate X on worlds and
formulas, stratified at two levels (the boolean flag), one
intuitionistic, the other classical
- a meta-level reset to go down from the classical to the intuitionistic level when the distinguished atomic formula Bot is being exploded on.
Module Type Kripke_structure.
Parameter Inline K : Set.
Parameter wle : K -> K -> Set.
Axiom wle_refl : forall w, wle w w.
Axiom wle_trans : forall w w' w'', wle w w' -> wle w' w'' -> wle w w''.
Parameter X : K -> bool -> formula -> Set.
Axiom X_mon : forall w annot A, X w annot A ->
forall w', wle w w' -> X w' annot A.
Axiom X_mon2 : forall w annot A, X w annot A ->
forall annot', leb annot annot' -> X w annot' A.
Axiom X_reset : forall w annot, X w true Bot -> X w annot Bot.
Notation "w <= w'" := (wle w w').
End Kripke_structure.
Module Kripke_structure_monad (ks : Kripke_structure).
Export ks.
Kont is the dependently typed continuations "monad" that will
be used to define "weak forcing" given a more primitive relation
F of "strong forcing"
forcing at classical level:
if annot then
(forall w1, w <= w1 ->
(forall w2, w1 <= w2 -> F w2 annot A -> X w2 annot Bot) -> X w1 annot Bot)
(forall w1, w <= w1 ->
(forall w2, w1 <= w2 -> F w2 annot A -> X w2 annot Bot) -> X w1 annot Bot)
forcing at intuitionistic level:
else
(forall C,
forall w1, w <= w1 ->
(forall w2, w1 <= w2 -> F w2 annot A -> X w2 annot C) -> X w1 annot C).
Hint Unfold Kont.
(forall C,
forall w1, w <= w1 ->
(forall w2, w1 <= w2 -> F w2 annot A -> X w2 annot C) -> X w1 annot C).
Hint Unfold Kont.
Monotonicity property for wle of Kont (that does not depend on
the one of its parameter F)
Lemma Kont_mon {F} :
forall w annot A, Kont F w annot A -> forall w', w <= w' -> Kont F w' annot A.
End Kripke_structure_monad.
forall w annot A, Kont F w annot A -> forall w', w <= w' -> Kont F w' annot A.
End Kripke_structure_monad.
A module type that prescribes what is expected of sforces, which
is concretelly defined later vo CBV/CBN, so that generic
properties (also proved later) can be stated.
Module Type sforces_instance (ks : Kripke_structure).
Export ks.
Module ks_monad := Kripke_structure_monad ks.
Export ks_monad.
Parameter sforces : K->bool->formula->Type.
Parameter sforces_mon : forall A w annot, sforces w annot A ->
forall w', w <= w' -> sforces w' annot A.
Parameter sforces_mon2 : forall A w, sforces w false A -> sforces w true A.
Parameter Kont_sforces_mon2 : forall w annot A,
Kont sforces w annot A ->
forall annot', leb annot annot' -> Kont sforces w annot' A.
End sforces_instance.
This page has been generated by coqdoc