Library Support
Require
Import
Axioms.
Require
Export
Swaps.
Section
Support.
Variable
AR : AtomT.
Variable
X : Set.
Variable
S : SwapT AR X.
Definition
supports (E : aset AR) (x : X) : Prop :=
forall (a b : atom AR), ~ In a E -> ~ In b E -> swap S (a, b) x = x.
Definition
fresh (a : atom AR) (x : X) : Prop :=
exists E : aset AR, supports E x /\ ~ In a E.
Lemma
swap_non_supports :
forall (F : aset AR) (a b : atom AR) (x : X),
supports F x -> ~ In a F -> ~ In b F -> swap S (a, b) x = x.
Lemma
supports_subset :
forall (E F : aset AR) (x : X),
supports E x -> Subset E F -> supports F x.
Lemma
supports_intersection :
forall (E F : aset AR) (x : X),
supports E x -> supports F x -> supports (intersection E F) x.
Hint
Resolve supports_intersection : nominal.
Lemma
supports_to_fresh :
forall (E : aset AR) (a : atom AR) (x : X),
supports E x -> ~ In a E -> fresh a x.
Lemma
swap_fresh_atoms :
forall (a b : atom AR) (x : X),
fresh a x -> fresh b x -> swap S (a, b) x = x.
End
Support.
Implicit
Arguments supports [AR X].
Implicit
Arguments fresh [AR X].
Hint
Resolve swap_non_supports : nominal.
Hint
Resolve supports_subset : nominal.
Hint
Resolve supports_intersection : nominal.
Hint
Resolve supports_to_fresh : nominal.
Hint
Resolve swap_fresh_atoms : nominal.
Hint
Rewrite swap_fresh_atoms using (auto with nominal; fail) : nominal.
Lemma
supports_atom :
forall (A : AtomT) (a : atom A), supports (mkAtomSwap A) (singleton a) a.
Hint
Resolve supports_atom : nominal.
Lemma
fresh_atom_from_neq :
forall (A : AtomT) (a a' : atom A), a <> a' -> fresh (mkAtomSwap A) a a'.
Hint
Resolve fresh_atom_from_neq : nominal.
Lemma
swap_not_in_set :
forall (A : AtomT) (E : aset A) (a b c : atom A),
~ In a E ->
~ In b E ->
~ In c E ->
~ In (swap (mkAtomSwap A) (a, b) c) E.
Hint
Resolve swap_not_in_set : nominal.
Section
GeneralTheorems.
Variable
AR : AtomT.
Variable
X : Set.
Variable
XS : SwapT AR X.
Lemma
swap_fresh :
forall a cd x, fresh XS a x -> fresh XS (swapa AR cd a) (swap XS cd x). Lemma
unswap_fresh :
forall a cd x, fresh XS (swapa AR cd a) (swap XS cd x) -> fresh XS a x.
End
GeneralTheorems.
Hint
Resolve swap_fresh : nominal.
Hint
Immediate
unswap_fresh : nominal.
Section
FunctionTheorems.
Variables
AR : AtomT.
Variables
X Y : Set.
Variables
XS : SwapT AR X.
Variables
YS : SwapT AR Y.
Lemma
function_supports :
forall (F : aset AR) (f : X -> Y),
(forall a b x, ~ In a F -> ~ In b F ->
swap YS (a, b) (f x) = f (swap XS (a, b) x)) ->
supports (XS ^-> YS) F f.
Lemma
application_supports :
forall (F : aset AR) (f : X -> Y) (x : X),
supports (XS ^-> YS) F f ->
supports XS F x ->
supports YS F (f x).
Lemma
application_fresh :
forall (a : AR) (f : X -> Y) (x : X),
fresh (XS ^-> YS) a f -> fresh XS a x -> fresh YS a (f x).
End
FunctionTheorems.
Section
MajorTheorems.
Variables
AR : AtomT.
Variables
X : Set.
Variables
XS : SwapT AR X.
Theorem
function_constancy_v1 :
forall (F : aset AR) (f : AR -> X),
supports (mkAtomSwap AR ^-> XS) F f ->
forall (a : AR), ~ In a F -> fresh XS a (f a) ->
forall (b : AR), ~ In b F -> f a = f b.
Theorem
function_constancy_v2 :
forall (F : aset AR) (f : AR -> X),
supports (mkAtomSwap AR ^-> XS) F f ->
(exists a : AR, ~ In a F /\ fresh XS a (f a)) ->
forall a b : AR, ~ In a F -> ~ In b F -> f a = f b.
End
MajorTheorems.
Index
This page has been generated by coqdoc