Up to index of Isabelle/HOL/HOL-Complex/CSP/CSP_T/CSP_F
theory CSP_F_law_decompo (*-------------------------------------------*
| CSP-Prover on Isabelle2004 |
| December 2004 |
| June 2005 (modified) |
| |
| CSP-Prover on Isabelle2005 |
| October 2005 (modified) |
| April 2006 (modified) |
| March 2007 (modified) |
| August 2007 (modified) |
| |
| Yoshinao Isobe (AIST JAPAN) |
*-------------------------------------------*)
theory CSP_F_law_decompo
imports CSP_F_domain CSP_T_law_decompo
begin
(*------------------------------------------------*
| |
| laws for monotonicity and congruence |
| |
*------------------------------------------------*)
(*********************************************************
Act_prefix mono
*********************************************************)
(*------------------*
| csp law |
*------------------*)
lemma cspF_Act_prefix_mono:
"[| a = b ; P <=F[M1,M2] Q |] ==> a -> P <=F[M1,M2] b -> Q"
apply (simp add: cspF_cspT_semantics)
apply (simp add: cspT_Act_prefix_mono)
apply (simp add: subsetF_iff)
apply (intro allI impI)
apply (simp add: in_failures)
apply (fast)
done
lemma cspF_Act_prefix_cong:
"[| a = b ; P =F[M1,M2] Q |] ==> a -> P =F[M1,M2] b -> Q"
apply (simp add: cspF_eq_ref_iff)
apply (simp add: cspF_Act_prefix_mono)
done
(*********************************************************
Ext_pre_choice mono
*********************************************************)
(*------------------*
| csp law |
*------------------*)
lemma cspF_Ext_pre_choice_mono:
"[| X = Y ; !! a. a:Y ==> Pf a <=F[M1,M2] Qf a |]
==> ? :X -> Pf <=F[M1,M2] ? :Y -> Qf"
apply (simp add: cspF_cspT_semantics)
apply (simp add: cspT_Ext_pre_choice_mono)
apply (simp add: subsetF_iff)
apply (intro allI impI)
apply (simp add: in_failures)
apply (fast)
done
lemma cspF_Ext_pre_choice_cong:
"[| X = Y ; !! a. a:Y ==> Pf a =F[M1,M2] Qf a |]
==> ? :X -> Pf =F[M1,M2] ? :Y -> Qf"
by (simp add: cspF_eq_ref_iff cspF_Ext_pre_choice_mono)
(*********************************************************
Ext choice mono
*********************************************************)
(*------------------*
| csp law |
*------------------*)
lemma cspF_Ext_choice_mono:
"[| P1 <=F[M1,M2] Q1 ; P2 <=F[M1,M2] Q2 |] ==> P1 [+] P2 <=F[M1,M2] Q1 [+] Q2"
apply (simp add: cspF_cspT_semantics)
apply (simp add: cspT_Ext_choice_mono)
apply (simp add: cspT_semantics)
apply (simp add: subdomT_iff)
apply (simp add: subsetF_iff)
apply (intro allI impI)
apply (simp add: in_failures)
apply (elim conjE disjE)
apply (force)+
done
lemma cspF_Ext_choice_cong:
"[| P1 =F[M1,M2] Q1 ; P2 =F[M1,M2] Q2 |] ==> P1 [+] P2 =F[M1,M2] Q1 [+] Q2"
by (simp add: cspF_eq_ref_iff cspF_Ext_choice_mono)
(*********************************************************
Int choice mono
*********************************************************)
(*------------------*
| csp law |
*------------------*)
lemma cspF_Int_choice_mono:
"[| P1 <=F[M1,M2] Q1 ; P2 <=F[M1,M2] Q2 |] ==> P1 |~| P2 <=F[M1,M2] Q1 |~| Q2"
apply (simp add: cspF_cspT_semantics)
apply (simp add: cspT_Int_choice_mono)
apply (simp add: subsetF_iff)
apply (intro allI impI)
apply (simp add: in_failures)
apply (fast)
done
lemma cspF_Int_choice_cong:
"[| P1 =F[M1,M2] Q1 ; P2 =F[M1,M2] Q2 |] ==> P1 |~| P2 =F[M1,M2] Q1 |~| Q2"
by (simp add: cspF_eq_ref_iff cspF_Int_choice_mono)
(*********************************************************
replicated internal choice
*********************************************************)
(*------------------*
| csp law |
*------------------*)
(* mono *)
lemma cspF_Rep_int_choice_mono_sum:
"[| C1 = C2 ; !! c. c: sumset C1 ==> Pf c <=F[M1,M2] Qf c |]
==> !! :C1 .. Pf <=F[M1,M2] !! :C2 .. Qf"
apply (simp add: cspF_cspT_semantics)
apply (simp add: cspT_Rep_int_choice_mono_sum)
apply (simp add: subsetF_iff)
apply (intro allI impI)
apply (simp add: in_failures)
apply (fast)
done
lemma cspF_Rep_int_choice_mono_nat:
"[| N1 = N2 ; !! n. n:N2 ==> Pf n <=F[M1,M2] Qf n |]
==> !nat :N1 .. Pf <=F[M1,M2] !nat :N2 .. Qf"
apply (simp add: Rep_int_choice_ss_def)
by (rule cspF_Rep_int_choice_mono_sum, auto)
lemma cspF_Rep_int_choice_mono_set:
"[| Xs1 = Xs2 ; !! X. X:Xs2 ==> Pf X <=F[M1,M2] Qf X |]
==> !set :Xs1 .. Pf <=F[M1,M2] !set :Xs2 .. Qf"
apply (simp add: Rep_int_choice_ss_def)
by (rule cspF_Rep_int_choice_mono_sum, auto)
lemma cspF_Rep_int_choice_mono_com:
"[| X1 = X2 ; !! x. x:X2 ==> Pf x <=F[M1,M2] Qf x |]
==> ! :X1 .. Pf <=F[M1,M2] ! :X2 .. Qf"
apply (simp add: Rep_int_choice_com_def)
by (rule cspF_Rep_int_choice_mono_set, auto)
lemma cspF_Rep_int_choice_mono_f:
"[| inj f ; X1 = X2 ; !! x. x:X2 ==> Pf x <=F[M1,M2] Qf x |]
==> !<f> :X1 .. Pf <=F[M1,M2] !<f> :X2 .. Qf"
apply (simp add: Rep_int_choice_f_def)
by (rule cspF_Rep_int_choice_mono_com, auto)
lemmas cspF_Rep_int_choice_mono = cspF_Rep_int_choice_mono_sum
cspF_Rep_int_choice_mono_nat
cspF_Rep_int_choice_mono_set
cspF_Rep_int_choice_mono_com
cspF_Rep_int_choice_mono_f
(* cong *)
lemma cspF_Rep_int_choice_cong_sum:
"[| C1 = C2 ; !! c. c: sumset C1 ==> Pf c =F[M1,M2] Qf c |]
==> !! :C1 .. Pf =F[M1,M2] !! :C2 .. Qf"
by (simp add: cspF_eq_ref_iff cspF_Rep_int_choice_mono)
lemma cspF_Rep_int_choice_cong_nat:
"[| N1 = N2 ; !! n. n:N2 ==> Pf n =F[M1,M2] Qf n |]
==> !nat :N1 .. Pf =F[M1,M2] !nat :N2 .. Qf"
by (simp add: cspF_eq_ref_iff cspF_Rep_int_choice_mono)
lemma cspF_Rep_int_choice_cong_set:
"[| Xs1 = Xs2 ; !! X. X:Xs2 ==> Pf X =F[M1,M2] Qf X |]
==> !set :Xs1 .. Pf =F[M1,M2] !set :Xs2 .. Qf"
by (simp add: cspF_eq_ref_iff cspF_Rep_int_choice_mono)
lemma cspF_Rep_int_choice_cong_com:
"[| X1 = X2 ; !! x. x:X2 ==> Pf x =F[M1,M2] Qf x |]
==> ! :X1 .. Pf =F[M1,M2] ! :X2 .. Qf"
by (simp add: cspF_eq_ref_iff cspF_Rep_int_choice_mono)
lemma cspF_Rep_int_choice_cong_f:
"[| inj f ; X1 = X2 ; !! x. x:X2 ==> Pf x =F[M1,M2] Qf x |]
==> !<f> :X1 .. Pf =F[M1,M2] !<f> :X2 .. Qf"
by (simp add: cspF_eq_ref_iff cspF_Rep_int_choice_mono)
lemmas cspF_Rep_int_choice_cong = cspF_Rep_int_choice_cong_sum
cspF_Rep_int_choice_cong_nat
cspF_Rep_int_choice_cong_set
cspF_Rep_int_choice_cong_com
cspF_Rep_int_choice_cong_f
(*********************************************************
IF mono
*********************************************************)
(*------------------*
| csp law |
*------------------*)
lemma cspF_IF_mono:
"[| b1 = b2 ; P1 <=F[M1,M2] Q1 ; P2 <=F[M1,M2] Q2 |]
==> IF b1 THEN P1 ELSE P2 <=F[M1,M2]
IF b2 THEN Q1 ELSE Q2"
apply (simp add: cspF_cspT_semantics)
apply (simp add: cspT_IF_mono)
apply (simp add: subsetF_iff)
apply (intro allI impI)
apply (simp add: in_failures)
done
lemma cspF_IF_cong:
"[| b1 = b2 ; P1 =F[M1,M2] Q1 ; P2 =F[M1,M2] Q2 |]
==> IF b1 THEN P1 ELSE P2 =F[M1,M2]
IF b2 THEN Q1 ELSE Q2"
by (simp add: cspF_eq_ref_iff cspF_IF_mono)
(*********************************************************
Parallel mono
*********************************************************)
(*------------------*
| csp law |
*------------------*)
lemma cspF_Parallel_mono:
"[| X = Y ; P1 <=F[M1,M2] Q1 ; P2 <=F[M1,M2] Q2 |]
==> P1 |[X]| P2 <=F[M1,M2] Q1 |[Y]| Q2"
apply (simp add: cspF_cspT_semantics)
apply (simp add: cspT_Parallel_mono)
apply (simp add: subsetF_iff)
apply (intro allI impI)
apply (simp add: in_failures)
apply (fast)
done
lemma cspF_Parallel_cong:
"[| X = Y ; P1 =F[M1,M2] Q1 ; P2 =F[M1,M2] Q2 |]
==> P1 |[X]| P2 =F[M1,M2] Q1 |[Y]| Q2"
by (simp add: cspF_eq_ref_iff cspF_Parallel_mono)
(*********************************************************
Hiding mono
*********************************************************)
(*------------------*
| csp law |
*------------------*)
lemma cspF_Hiding_mono:
"[| X = Y ; P <=F[M1,M2] Q |] ==> P -- X <=F[M1,M2] Q -- Y"
apply (simp add: cspF_cspT_semantics)
apply (simp add: cspT_Hiding_mono)
apply (simp add: subsetF_iff)
apply (intro allI impI)
apply (simp add: in_failures)
apply (fast)
done
lemma cspF_Hiding_cong:
"[| X = Y ; P =F[M1,M2] Q |] ==> P -- X =F[M1,M2] Q -- Y"
by (simp add: cspF_eq_ref_iff cspF_Hiding_mono)
(*********************************************************
Renaming mono
*********************************************************)
(*------------------*
| csp law |
*------------------*)
lemma cspF_Renaming_mono:
"[| r1 = r2 ; P <=F[M1,M2] Q |] ==> P [[r1]] <=F[M1,M2] Q [[r2]]"
apply (simp add: cspF_cspT_semantics)
apply (simp add: cspT_Renaming_mono)
apply (simp add: subsetF_iff)
apply (intro allI impI)
apply (simp add: in_failures)
apply (fast)
done
lemma cspF_Renaming_cong:
"[| r1 = r2 ; P =F[M1,M2] Q |] ==> P [[r1]] =F[M1,M2] Q [[r2]]"
by (simp add: cspF_eq_ref_iff cspF_Renaming_mono)
(*********************************************************
Sequential composition mono
*********************************************************)
(*------------------*
| csp law |
*------------------*)
lemma cspF_Seq_compo_mono:
"[| P1 <=F[M1,M2] Q1 ; P2 <=F[M1,M2] Q2 |]
==> P1 ;; P2 <=F[M1,M2] Q1 ;; Q2"
apply (simp add: cspF_cspT_semantics)
apply (simp add: cspT_Seq_compo_mono)
apply (simp add: cspT_semantics)
apply (simp add: subdomT_iff)
apply (simp add: subsetF_iff)
apply (intro allI impI)
apply (simp add: in_failures)
apply (fast)
done
lemma cspF_Seq_compo_cong:
"[| P1 =F[M1,M2] Q1 ; P2 =F[M1,M2] Q2 |] ==> P1 ;; P2 =F[M1,M2] Q1 ;; Q2"
by (simp add: cspF_eq_ref_iff cspF_Seq_compo_mono)
(*********************************************************
Depth_rest mono
*********************************************************)
(*------------------*
| csp law |
*------------------*)
lemma cspF_Depth_rest_mono:
"[| n1 = n2 ; P <=F[M1,M2] Q |] ==> P |. n1 <=F[M1,M2] Q |. n2"
apply (simp add: cspF_cspT_semantics)
apply (simp add: cspT_Depth_rest_mono)
apply (simp add: subsetF_iff)
apply (intro allI impI)
apply (simp add: in_failures)
done
lemma cspF_Depth_rest_cong:
"[| n1 = n2 ; P =F[M1,M2] Q |] ==> P |. n1 =F[M1,M2] Q |. n2"
by (simp add: cspF_eq_ref_iff cspF_Depth_rest_mono)
(*********************************************************
Timeout mono
*********************************************************)
(*------------------*
| csp law |
*------------------*)
lemma cspF_Timeout_mono:
"[| P1 <=F[M1,M2] Q1 ; P2 <=F[M1,M2] Q2 |]
==> P1 [> P2 <=F[M1,M2] Q1 [> Q2"
apply (rule cspF_Ext_choice_mono)
apply (rule cspF_Int_choice_mono)
by (simp_all)
lemma cspF_Timeout_cong:
"[| P1 =F[M1,M2] Q1 ; P2 =F[M1,M2] Q2 |]
==> P1 [> P2 =F[M1,M2] Q1 [> Q2"
by (simp add: cspF_eq_ref_iff cspF_Timeout_mono)
(*------------------------------------------------------*
| alias |
*------------------------------------------------------*)
lemmas cspF_free_mono =
cspF_Ext_choice_mono cspF_Int_choice_mono cspF_Parallel_mono
cspF_Hiding_mono cspF_Renaming_mono cspF_Seq_compo_mono
cspF_Depth_rest_mono
lemmas cspF_mono = cspF_free_mono
cspF_Act_prefix_mono cspF_Ext_pre_choice_mono
cspF_Rep_int_choice_mono cspF_IF_mono
lemmas cspF_free_cong =
cspF_Ext_choice_cong cspF_Int_choice_cong cspF_Parallel_cong
cspF_Hiding_cong cspF_Renaming_cong cspF_Seq_compo_cong
cspF_Depth_rest_cong
lemmas cspF_cong = cspF_free_cong
cspF_Act_prefix_cong cspF_Ext_pre_choice_cong
cspF_Rep_int_choice_cong cspF_IF_cong
lemmas cspF_free_decompo = cspF_free_mono cspF_free_cong
lemmas cspF_decompo = cspF_mono cspF_cong
lemmas cspF_rm_head_mono = cspF_Act_prefix_mono cspF_Ext_pre_choice_mono
lemmas cspF_rm_head_cong = cspF_Act_prefix_cong cspF_Ext_pre_choice_cong
lemmas cspF_rm_head = cspF_rm_head_mono cspF_rm_head_cong
(*-------------------------------------------------------*
| decomposition with ALL and EX |
*-------------------------------------------------------*)
(*** Rep_int_choice ***)
lemma cspF_Rep_int_choice_sum_decompo_ALL_EX_ref:
"ALL c2: sumset C2. EX c1: sumset C1. (Pf c1) <=F[M1,M2] (Qf c2)
==> !! :C1 .. Pf <=F[M1,M2] !! :C2 .. Qf"
apply (simp add: cspF_cspT_semantics)
apply (rule conjI)
apply (rule cspT_Rep_int_choice_decompo_ALL_EX)
apply (force)
apply (rule, simp add: in_failures)
apply (erule bexE)
apply (drule_tac x="c" in bspec, simp)
apply (erule bexE)
apply (rule_tac x="c1" in bexI)
apply (force)
apply (simp)
done
lemma cspF_Rep_int_choice_nat_decompo_ALL_EX_ref:
"ALL n2:N2. EX n1:N1. (Pf n1) <=F[M1,M2] (Qf n2)
==> !nat :N1 .. Pf <=F[M1,M2] !nat :N2 .. Qf"
apply (simp add: Rep_int_choice_ss_def)
apply (rule cspF_Rep_int_choice_sum_decompo_ALL_EX_ref)
apply (auto)
apply (drule_tac x="a" in bspec, simp)
apply (auto)
done
lemma cspF_Rep_int_choice_set_decompo_ALL_EX_ref:
"ALL X2:Xs2. EX X1:Xs1. (Pf X1) <=F[M1,M2] (Qf X2)
==> !set :Xs1 .. Pf <=F[M1,M2] !set :Xs2 .. Qf"
apply (simp add: Rep_int_choice_ss_def)
apply (rule cspF_Rep_int_choice_sum_decompo_ALL_EX_ref)
apply (auto)
apply (drule_tac x="a" in bspec, simp)
apply (auto)
done
lemmas cspF_Rep_int_choice_decompo_ALL_EX_ref =
cspF_Rep_int_choice_sum_decompo_ALL_EX_ref
cspF_Rep_int_choice_nat_decompo_ALL_EX_ref
cspF_Rep_int_choice_set_decompo_ALL_EX_ref
lemma cspF_Rep_int_choice_sum_decompo_ALL_EX_eq:
"[| ALL c1: sumset C1. EX c2: sumset C2. (Pf c1) =F[M1,M2] (Qf c2) ;
ALL c2: sumset C2. EX c1: sumset C1. (Pf c1) =F[M1,M2] (Qf c2) |]
==> !! :C1 .. Pf =F[M1,M2] !! :C2 .. Qf"
apply (simp add: cspF_eq_ref_iff)
apply (rule conjI)
apply (rule cspF_Rep_int_choice_decompo_ALL_EX_ref)
apply (force)
apply (rule cspF_Rep_int_choice_decompo_ALL_EX_ref)
apply (force)
done
lemma cspF_Rep_int_choice_nat_decompo_ALL_EX_eq:
"[| ALL n1:N1. EX n2:N2. (Pf n1) =F[M1,M2] (Qf n2) ;
ALL n2:N2. EX n1:N1. (Pf n1) =F[M1,M2] (Qf n2) |]
==> !nat :N1 .. Pf =F[M1,M2] !nat :N2 .. Qf"
apply (simp add: cspF_eq_ref_iff)
apply (rule conjI)
apply (rule cspF_Rep_int_choice_decompo_ALL_EX_ref)
apply (force)
apply (rule cspF_Rep_int_choice_decompo_ALL_EX_ref)
apply (force)
done
lemma cspF_Rep_int_choice_set_decompo_ALL_EX_eq:
"[| ALL X1:Xs1. EX X2:Xs2. (Pf X1) =F[M1,M2] (Qf X2) ;
ALL X2:Xs2. EX X1:Xs1. (Pf X1) =F[M1,M2] (Qf X2) |]
==> !set :Xs1 .. Pf =F[M1,M2] !set :Xs2 .. Qf"
apply (simp add: cspF_eq_ref_iff)
apply (rule conjI)
apply (rule cspF_Rep_int_choice_decompo_ALL_EX_ref)
apply (force)
apply (rule cspF_Rep_int_choice_decompo_ALL_EX_ref)
apply (force)
done
lemmas cspF_Rep_int_choice_decompo_ALL_EX_eq =
cspF_Rep_int_choice_sum_decompo_ALL_EX_eq
cspF_Rep_int_choice_nat_decompo_ALL_EX_eq
cspF_Rep_int_choice_set_decompo_ALL_EX_eq
lemmas cspF_Rep_int_choice_decompo_ALL_EX
= cspF_Rep_int_choice_decompo_ALL_EX_ref
cspF_Rep_int_choice_decompo_ALL_EX_eq
end
lemma cspF_Act_prefix_mono:
[| a = b; P <=F[M1.0,M2.0] Q |] ==> a -> P <=F[M1.0,M2.0] b -> Q
lemma cspF_Act_prefix_cong:
[| a = b; P =F[M1.0,M2.0] Q |] ==> a -> P =F[M1.0,M2.0] b -> Q
lemma cspF_Ext_pre_choice_mono:
[| X = Y; !!a. a ∈ Y ==> Pf a <=F[M1.0,M2.0] Qf a |] ==> ? :X -> Pf <=F[M1.0,M2.0] ? :Y -> Qf
lemma cspF_Ext_pre_choice_cong:
[| X = Y; !!a. a ∈ Y ==> Pf a =F[M1.0,M2.0] Qf a |] ==> ? :X -> Pf =F[M1.0,M2.0] ? :Y -> Qf
lemma cspF_Ext_choice_mono:
[| P1.0 <=F[M1.0,M2.0] Q1.0; P2.0 <=F[M1.0,M2.0] Q2.0 |] ==> P1.0 [+] P2.0 <=F[M1.0,M2.0] Q1.0 [+] Q2.0
lemma cspF_Ext_choice_cong:
[| P1.0 =F[M1.0,M2.0] Q1.0; P2.0 =F[M1.0,M2.0] Q2.0 |] ==> P1.0 [+] P2.0 =F[M1.0,M2.0] Q1.0 [+] Q2.0
lemma cspF_Int_choice_mono:
[| P1.0 <=F[M1.0,M2.0] Q1.0; P2.0 <=F[M1.0,M2.0] Q2.0 |] ==> P1.0 |~| P2.0 <=F[M1.0,M2.0] Q1.0 |~| Q2.0
lemma cspF_Int_choice_cong:
[| P1.0 =F[M1.0,M2.0] Q1.0; P2.0 =F[M1.0,M2.0] Q2.0 |] ==> P1.0 |~| P2.0 =F[M1.0,M2.0] Q1.0 |~| Q2.0
lemma cspF_Rep_int_choice_mono_sum:
[| C1.0 = C2.0; !!c. c ∈ sumset C1.0 ==> Pf c <=F[M1.0,M2.0] Qf c |] ==> !! :C1.0 .. Pf <=F[M1.0,M2.0] !! :C2.0 .. Qf
lemma cspF_Rep_int_choice_mono_nat:
[| N1.0 = N2.0; !!n. n ∈ N2.0 ==> Pf n <=F[M1.0,M2.0] Qf n |] ==> !nat :N1.0 .. Pf <=F[M1.0,M2.0] !nat :N2.0 .. Qf
lemma cspF_Rep_int_choice_mono_set:
[| Xs1.0 = Xs2.0; !!X. X ∈ Xs2.0 ==> Pf X <=F[M1.0,M2.0] Qf X |] ==> !set :Xs1.0 .. Pf <=F[M1.0,M2.0] !set :Xs2.0 .. Qf
lemma cspF_Rep_int_choice_mono_com:
[| X1.0 = X2.0; !!x. x ∈ X2.0 ==> Pf x <=F[M1.0,M2.0] Qf x |] ==> ! :X1.0 .. Pf <=F[M1.0,M2.0] ! :X2.0 .. Qf
lemma cspF_Rep_int_choice_mono_f:
[| inj f; X1.0 = X2.0; !!x. x ∈ X2.0 ==> Pf x <=F[M1.0,M2.0] Qf x |] ==> !<f> :X1.0 .. Pf <=F[M1.0,M2.0] !<f> :X2.0 .. Qf
lemmas cspF_Rep_int_choice_mono:
[| C1.0 = C2.0; !!c. c ∈ sumset C1.0 ==> Pf c <=F[M1.0,M2.0] Qf c |] ==> !! :C1.0 .. Pf <=F[M1.0,M2.0] !! :C2.0 .. Qf
[| N1.0 = N2.0; !!n. n ∈ N2.0 ==> Pf n <=F[M1.0,M2.0] Qf n |] ==> !nat :N1.0 .. Pf <=F[M1.0,M2.0] !nat :N2.0 .. Qf
[| Xs1.0 = Xs2.0; !!X. X ∈ Xs2.0 ==> Pf X <=F[M1.0,M2.0] Qf X |] ==> !set :Xs1.0 .. Pf <=F[M1.0,M2.0] !set :Xs2.0 .. Qf
[| X1.0 = X2.0; !!x. x ∈ X2.0 ==> Pf x <=F[M1.0,M2.0] Qf x |] ==> ! :X1.0 .. Pf <=F[M1.0,M2.0] ! :X2.0 .. Qf
[| inj f; X1.0 = X2.0; !!x. x ∈ X2.0 ==> Pf x <=F[M1.0,M2.0] Qf x |] ==> !<f> :X1.0 .. Pf <=F[M1.0,M2.0] !<f> :X2.0 .. Qf
lemmas cspF_Rep_int_choice_mono:
[| C1.0 = C2.0; !!c. c ∈ sumset C1.0 ==> Pf c <=F[M1.0,M2.0] Qf c |] ==> !! :C1.0 .. Pf <=F[M1.0,M2.0] !! :C2.0 .. Qf
[| N1.0 = N2.0; !!n. n ∈ N2.0 ==> Pf n <=F[M1.0,M2.0] Qf n |] ==> !nat :N1.0 .. Pf <=F[M1.0,M2.0] !nat :N2.0 .. Qf
[| Xs1.0 = Xs2.0; !!X. X ∈ Xs2.0 ==> Pf X <=F[M1.0,M2.0] Qf X |] ==> !set :Xs1.0 .. Pf <=F[M1.0,M2.0] !set :Xs2.0 .. Qf
[| X1.0 = X2.0; !!x. x ∈ X2.0 ==> Pf x <=F[M1.0,M2.0] Qf x |] ==> ! :X1.0 .. Pf <=F[M1.0,M2.0] ! :X2.0 .. Qf
[| inj f; X1.0 = X2.0; !!x. x ∈ X2.0 ==> Pf x <=F[M1.0,M2.0] Qf x |] ==> !<f> :X1.0 .. Pf <=F[M1.0,M2.0] !<f> :X2.0 .. Qf
lemma cspF_Rep_int_choice_cong_sum:
[| C1.0 = C2.0; !!c. c ∈ sumset C1.0 ==> Pf c =F[M1.0,M2.0] Qf c |] ==> !! :C1.0 .. Pf =F[M1.0,M2.0] !! :C2.0 .. Qf
lemma cspF_Rep_int_choice_cong_nat:
[| N1.0 = N2.0; !!n. n ∈ N2.0 ==> Pf n =F[M1.0,M2.0] Qf n |] ==> !nat :N1.0 .. Pf =F[M1.0,M2.0] !nat :N2.0 .. Qf
lemma cspF_Rep_int_choice_cong_set:
[| Xs1.0 = Xs2.0; !!X. X ∈ Xs2.0 ==> Pf X =F[M1.0,M2.0] Qf X |] ==> !set :Xs1.0 .. Pf =F[M1.0,M2.0] !set :Xs2.0 .. Qf
lemma cspF_Rep_int_choice_cong_com:
[| X1.0 = X2.0; !!x. x ∈ X2.0 ==> Pf x =F[M1.0,M2.0] Qf x |] ==> ! :X1.0 .. Pf =F[M1.0,M2.0] ! :X2.0 .. Qf
lemma cspF_Rep_int_choice_cong_f:
[| inj f; X1.0 = X2.0; !!x. x ∈ X2.0 ==> Pf x =F[M1.0,M2.0] Qf x |] ==> !<f> :X1.0 .. Pf =F[M1.0,M2.0] !<f> :X2.0 .. Qf
lemmas cspF_Rep_int_choice_cong:
[| C1.0 = C2.0; !!c. c ∈ sumset C1.0 ==> Pf c =F[M1.0,M2.0] Qf c |] ==> !! :C1.0 .. Pf =F[M1.0,M2.0] !! :C2.0 .. Qf
[| N1.0 = N2.0; !!n. n ∈ N2.0 ==> Pf n =F[M1.0,M2.0] Qf n |] ==> !nat :N1.0 .. Pf =F[M1.0,M2.0] !nat :N2.0 .. Qf
[| Xs1.0 = Xs2.0; !!X. X ∈ Xs2.0 ==> Pf X =F[M1.0,M2.0] Qf X |] ==> !set :Xs1.0 .. Pf =F[M1.0,M2.0] !set :Xs2.0 .. Qf
[| X1.0 = X2.0; !!x. x ∈ X2.0 ==> Pf x =F[M1.0,M2.0] Qf x |] ==> ! :X1.0 .. Pf =F[M1.0,M2.0] ! :X2.0 .. Qf
[| inj f; X1.0 = X2.0; !!x. x ∈ X2.0 ==> Pf x =F[M1.0,M2.0] Qf x |] ==> !<f> :X1.0 .. Pf =F[M1.0,M2.0] !<f> :X2.0 .. Qf
lemmas cspF_Rep_int_choice_cong:
[| C1.0 = C2.0; !!c. c ∈ sumset C1.0 ==> Pf c =F[M1.0,M2.0] Qf c |] ==> !! :C1.0 .. Pf =F[M1.0,M2.0] !! :C2.0 .. Qf
[| N1.0 = N2.0; !!n. n ∈ N2.0 ==> Pf n =F[M1.0,M2.0] Qf n |] ==> !nat :N1.0 .. Pf =F[M1.0,M2.0] !nat :N2.0 .. Qf
[| Xs1.0 = Xs2.0; !!X. X ∈ Xs2.0 ==> Pf X =F[M1.0,M2.0] Qf X |] ==> !set :Xs1.0 .. Pf =F[M1.0,M2.0] !set :Xs2.0 .. Qf
[| X1.0 = X2.0; !!x. x ∈ X2.0 ==> Pf x =F[M1.0,M2.0] Qf x |] ==> ! :X1.0 .. Pf =F[M1.0,M2.0] ! :X2.0 .. Qf
[| inj f; X1.0 = X2.0; !!x. x ∈ X2.0 ==> Pf x =F[M1.0,M2.0] Qf x |] ==> !<f> :X1.0 .. Pf =F[M1.0,M2.0] !<f> :X2.0 .. Qf
lemma cspF_IF_mono:
[| b1.0 = b2.0; P1.0 <=F[M1.0,M2.0] Q1.0; P2.0 <=F[M1.0,M2.0] Q2.0 |] ==> IF b1.0 THEN P1.0 ELSE P2.0 <=F[M1.0,M2.0] IF b2.0 THEN Q1.0 ELSE Q2.0
lemma cspF_IF_cong:
[| b1.0 = b2.0; P1.0 =F[M1.0,M2.0] Q1.0; P2.0 =F[M1.0,M2.0] Q2.0 |] ==> IF b1.0 THEN P1.0 ELSE P2.0 =F[M1.0,M2.0] IF b2.0 THEN Q1.0 ELSE Q2.0
lemma cspF_Parallel_mono:
[| X = Y; P1.0 <=F[M1.0,M2.0] Q1.0; P2.0 <=F[M1.0,M2.0] Q2.0 |] ==> P1.0 |[X]| P2.0 <=F[M1.0,M2.0] Q1.0 |[Y]| Q2.0
lemma cspF_Parallel_cong:
[| X = Y; P1.0 =F[M1.0,M2.0] Q1.0; P2.0 =F[M1.0,M2.0] Q2.0 |] ==> P1.0 |[X]| P2.0 =F[M1.0,M2.0] Q1.0 |[Y]| Q2.0
lemma cspF_Hiding_mono:
[| X = Y; P <=F[M1.0,M2.0] Q |] ==> P -- X <=F[M1.0,M2.0] Q -- Y
lemma cspF_Hiding_cong:
[| X = Y; P =F[M1.0,M2.0] Q |] ==> P -- X =F[M1.0,M2.0] Q -- Y
lemma cspF_Renaming_mono:
[| r1.0 = r2.0; P <=F[M1.0,M2.0] Q |] ==> P [[r1.0]] <=F[M1.0,M2.0] Q [[r2.0]]
lemma cspF_Renaming_cong:
[| r1.0 = r2.0; P =F[M1.0,M2.0] Q |] ==> P [[r1.0]] =F[M1.0,M2.0] Q [[r2.0]]
lemma cspF_Seq_compo_mono:
[| P1.0 <=F[M1.0,M2.0] Q1.0; P2.0 <=F[M1.0,M2.0] Q2.0 |] ==> P1.0 ;; P2.0 <=F[M1.0,M2.0] Q1.0 ;; Q2.0
lemma cspF_Seq_compo_cong:
[| P1.0 =F[M1.0,M2.0] Q1.0; P2.0 =F[M1.0,M2.0] Q2.0 |] ==> P1.0 ;; P2.0 =F[M1.0,M2.0] Q1.0 ;; Q2.0
lemma cspF_Depth_rest_mono:
[| n1.0 = n2.0; P <=F[M1.0,M2.0] Q |] ==> P |. n1.0 <=F[M1.0,M2.0] Q |. n2.0
lemma cspF_Depth_rest_cong:
[| n1.0 = n2.0; P =F[M1.0,M2.0] Q |] ==> P |. n1.0 =F[M1.0,M2.0] Q |. n2.0
lemma cspF_Timeout_mono:
[| P1.0 <=F[M1.0,M2.0] Q1.0; P2.0 <=F[M1.0,M2.0] Q2.0 |] ==> P1.0 [> P2.0 <=F[M1.0,M2.0] Q1.0 [> Q2.0
lemma cspF_Timeout_cong:
[| P1.0 =F[M1.0,M2.0] Q1.0; P2.0 =F[M1.0,M2.0] Q2.0 |] ==> P1.0 [> P2.0 =F[M1.0,M2.0] Q1.0 [> Q2.0
lemmas cspF_free_mono:
[| P1.0 <=F[M1.0,M2.0] Q1.0; P2.0 <=F[M1.0,M2.0] Q2.0 |] ==> P1.0 [+] P2.0 <=F[M1.0,M2.0] Q1.0 [+] Q2.0
[| P1.0 <=F[M1.0,M2.0] Q1.0; P2.0 <=F[M1.0,M2.0] Q2.0 |] ==> P1.0 |~| P2.0 <=F[M1.0,M2.0] Q1.0 |~| Q2.0
[| X = Y; P1.0 <=F[M1.0,M2.0] Q1.0; P2.0 <=F[M1.0,M2.0] Q2.0 |] ==> P1.0 |[X]| P2.0 <=F[M1.0,M2.0] Q1.0 |[Y]| Q2.0
[| X = Y; P <=F[M1.0,M2.0] Q |] ==> P -- X <=F[M1.0,M2.0] Q -- Y
[| r1.0 = r2.0; P <=F[M1.0,M2.0] Q |] ==> P [[r1.0]] <=F[M1.0,M2.0] Q [[r2.0]]
[| P1.0 <=F[M1.0,M2.0] Q1.0; P2.0 <=F[M1.0,M2.0] Q2.0 |] ==> P1.0 ;; P2.0 <=F[M1.0,M2.0] Q1.0 ;; Q2.0
[| n1.0 = n2.0; P <=F[M1.0,M2.0] Q |] ==> P |. n1.0 <=F[M1.0,M2.0] Q |. n2.0
lemmas cspF_free_mono:
[| P1.0 <=F[M1.0,M2.0] Q1.0; P2.0 <=F[M1.0,M2.0] Q2.0 |] ==> P1.0 [+] P2.0 <=F[M1.0,M2.0] Q1.0 [+] Q2.0
[| P1.0 <=F[M1.0,M2.0] Q1.0; P2.0 <=F[M1.0,M2.0] Q2.0 |] ==> P1.0 |~| P2.0 <=F[M1.0,M2.0] Q1.0 |~| Q2.0
[| X = Y; P1.0 <=F[M1.0,M2.0] Q1.0; P2.0 <=F[M1.0,M2.0] Q2.0 |] ==> P1.0 |[X]| P2.0 <=F[M1.0,M2.0] Q1.0 |[Y]| Q2.0
[| X = Y; P <=F[M1.0,M2.0] Q |] ==> P -- X <=F[M1.0,M2.0] Q -- Y
[| r1.0 = r2.0; P <=F[M1.0,M2.0] Q |] ==> P [[r1.0]] <=F[M1.0,M2.0] Q [[r2.0]]
[| P1.0 <=F[M1.0,M2.0] Q1.0; P2.0 <=F[M1.0,M2.0] Q2.0 |] ==> P1.0 ;; P2.0 <=F[M1.0,M2.0] Q1.0 ;; Q2.0
[| n1.0 = n2.0; P <=F[M1.0,M2.0] Q |] ==> P |. n1.0 <=F[M1.0,M2.0] Q |. n2.0
lemmas cspF_mono:
[| P1.0 <=F[M1.0,M2.0] Q1.0; P2.0 <=F[M1.0,M2.0] Q2.0 |] ==> P1.0 [+] P2.0 <=F[M1.0,M2.0] Q1.0 [+] Q2.0
[| P1.0 <=F[M1.0,M2.0] Q1.0; P2.0 <=F[M1.0,M2.0] Q2.0 |] ==> P1.0 |~| P2.0 <=F[M1.0,M2.0] Q1.0 |~| Q2.0
[| X = Y; P1.0 <=F[M1.0,M2.0] Q1.0; P2.0 <=F[M1.0,M2.0] Q2.0 |] ==> P1.0 |[X]| P2.0 <=F[M1.0,M2.0] Q1.0 |[Y]| Q2.0
[| X = Y; P <=F[M1.0,M2.0] Q |] ==> P -- X <=F[M1.0,M2.0] Q -- Y
[| r1.0 = r2.0; P <=F[M1.0,M2.0] Q |] ==> P [[r1.0]] <=F[M1.0,M2.0] Q [[r2.0]]
[| P1.0 <=F[M1.0,M2.0] Q1.0; P2.0 <=F[M1.0,M2.0] Q2.0 |] ==> P1.0 ;; P2.0 <=F[M1.0,M2.0] Q1.0 ;; Q2.0
[| n1.0 = n2.0; P <=F[M1.0,M2.0] Q |] ==> P |. n1.0 <=F[M1.0,M2.0] Q |. n2.0
[| a = b; P <=F[M1.0,M2.0] Q |] ==> a -> P <=F[M1.0,M2.0] b -> Q
[| X = Y; !!a. a ∈ Y ==> Pf a <=F[M1.0,M2.0] Qf a |] ==> ? :X -> Pf <=F[M1.0,M2.0] ? :Y -> Qf
[| C1.0 = C2.0; !!c. c ∈ sumset C1.0 ==> Pf c <=F[M1.0,M2.0] Qf c |] ==> !! :C1.0 .. Pf <=F[M1.0,M2.0] !! :C2.0 .. Qf
[| N1.0 = N2.0; !!n. n ∈ N2.0 ==> Pf n <=F[M1.0,M2.0] Qf n |] ==> !nat :N1.0 .. Pf <=F[M1.0,M2.0] !nat :N2.0 .. Qf
[| Xs1.0 = Xs2.0; !!X. X ∈ Xs2.0 ==> Pf X <=F[M1.0,M2.0] Qf X |] ==> !set :Xs1.0 .. Pf <=F[M1.0,M2.0] !set :Xs2.0 .. Qf
[| X1.0 = X2.0; !!x. x ∈ X2.0 ==> Pf x <=F[M1.0,M2.0] Qf x |] ==> ! :X1.0 .. Pf <=F[M1.0,M2.0] ! :X2.0 .. Qf
[| inj f; X1.0 = X2.0; !!x. x ∈ X2.0 ==> Pf x <=F[M1.0,M2.0] Qf x |] ==> !<f> :X1.0 .. Pf <=F[M1.0,M2.0] !<f> :X2.0 .. Qf
[| b1.0 = b2.0; P1.0 <=F[M1.0,M2.0] Q1.0; P2.0 <=F[M1.0,M2.0] Q2.0 |] ==> IF b1.0 THEN P1.0 ELSE P2.0 <=F[M1.0,M2.0] IF b2.0 THEN Q1.0 ELSE Q2.0
lemmas cspF_mono:
[| P1.0 <=F[M1.0,M2.0] Q1.0; P2.0 <=F[M1.0,M2.0] Q2.0 |] ==> P1.0 [+] P2.0 <=F[M1.0,M2.0] Q1.0 [+] Q2.0
[| P1.0 <=F[M1.0,M2.0] Q1.0; P2.0 <=F[M1.0,M2.0] Q2.0 |] ==> P1.0 |~| P2.0 <=F[M1.0,M2.0] Q1.0 |~| Q2.0
[| X = Y; P1.0 <=F[M1.0,M2.0] Q1.0; P2.0 <=F[M1.0,M2.0] Q2.0 |] ==> P1.0 |[X]| P2.0 <=F[M1.0,M2.0] Q1.0 |[Y]| Q2.0
[| X = Y; P <=F[M1.0,M2.0] Q |] ==> P -- X <=F[M1.0,M2.0] Q -- Y
[| r1.0 = r2.0; P <=F[M1.0,M2.0] Q |] ==> P [[r1.0]] <=F[M1.0,M2.0] Q [[r2.0]]
[| P1.0 <=F[M1.0,M2.0] Q1.0; P2.0 <=F[M1.0,M2.0] Q2.0 |] ==> P1.0 ;; P2.0 <=F[M1.0,M2.0] Q1.0 ;; Q2.0
[| n1.0 = n2.0; P <=F[M1.0,M2.0] Q |] ==> P |. n1.0 <=F[M1.0,M2.0] Q |. n2.0
[| a = b; P <=F[M1.0,M2.0] Q |] ==> a -> P <=F[M1.0,M2.0] b -> Q
[| X = Y; !!a. a ∈ Y ==> Pf a <=F[M1.0,M2.0] Qf a |] ==> ? :X -> Pf <=F[M1.0,M2.0] ? :Y -> Qf
[| C1.0 = C2.0; !!c. c ∈ sumset C1.0 ==> Pf c <=F[M1.0,M2.0] Qf c |] ==> !! :C1.0 .. Pf <=F[M1.0,M2.0] !! :C2.0 .. Qf
[| N1.0 = N2.0; !!n. n ∈ N2.0 ==> Pf n <=F[M1.0,M2.0] Qf n |] ==> !nat :N1.0 .. Pf <=F[M1.0,M2.0] !nat :N2.0 .. Qf
[| Xs1.0 = Xs2.0; !!X. X ∈ Xs2.0 ==> Pf X <=F[M1.0,M2.0] Qf X |] ==> !set :Xs1.0 .. Pf <=F[M1.0,M2.0] !set :Xs2.0 .. Qf
[| X1.0 = X2.0; !!x. x ∈ X2.0 ==> Pf x <=F[M1.0,M2.0] Qf x |] ==> ! :X1.0 .. Pf <=F[M1.0,M2.0] ! :X2.0 .. Qf
[| inj f; X1.0 = X2.0; !!x. x ∈ X2.0 ==> Pf x <=F[M1.0,M2.0] Qf x |] ==> !<f> :X1.0 .. Pf <=F[M1.0,M2.0] !<f> :X2.0 .. Qf
[| b1.0 = b2.0; P1.0 <=F[M1.0,M2.0] Q1.0; P2.0 <=F[M1.0,M2.0] Q2.0 |] ==> IF b1.0 THEN P1.0 ELSE P2.0 <=F[M1.0,M2.0] IF b2.0 THEN Q1.0 ELSE Q2.0
lemmas cspF_free_cong:
[| P1.0 =F[M1.0,M2.0] Q1.0; P2.0 =F[M1.0,M2.0] Q2.0 |] ==> P1.0 [+] P2.0 =F[M1.0,M2.0] Q1.0 [+] Q2.0
[| P1.0 =F[M1.0,M2.0] Q1.0; P2.0 =F[M1.0,M2.0] Q2.0 |] ==> P1.0 |~| P2.0 =F[M1.0,M2.0] Q1.0 |~| Q2.0
[| X = Y; P1.0 =F[M1.0,M2.0] Q1.0; P2.0 =F[M1.0,M2.0] Q2.0 |] ==> P1.0 |[X]| P2.0 =F[M1.0,M2.0] Q1.0 |[Y]| Q2.0
[| X = Y; P =F[M1.0,M2.0] Q |] ==> P -- X =F[M1.0,M2.0] Q -- Y
[| r1.0 = r2.0; P =F[M1.0,M2.0] Q |] ==> P [[r1.0]] =F[M1.0,M2.0] Q [[r2.0]]
[| P1.0 =F[M1.0,M2.0] Q1.0; P2.0 =F[M1.0,M2.0] Q2.0 |] ==> P1.0 ;; P2.0 =F[M1.0,M2.0] Q1.0 ;; Q2.0
[| n1.0 = n2.0; P =F[M1.0,M2.0] Q |] ==> P |. n1.0 =F[M1.0,M2.0] Q |. n2.0
lemmas cspF_free_cong:
[| P1.0 =F[M1.0,M2.0] Q1.0; P2.0 =F[M1.0,M2.0] Q2.0 |] ==> P1.0 [+] P2.0 =F[M1.0,M2.0] Q1.0 [+] Q2.0
[| P1.0 =F[M1.0,M2.0] Q1.0; P2.0 =F[M1.0,M2.0] Q2.0 |] ==> P1.0 |~| P2.0 =F[M1.0,M2.0] Q1.0 |~| Q2.0
[| X = Y; P1.0 =F[M1.0,M2.0] Q1.0; P2.0 =F[M1.0,M2.0] Q2.0 |] ==> P1.0 |[X]| P2.0 =F[M1.0,M2.0] Q1.0 |[Y]| Q2.0
[| X = Y; P =F[M1.0,M2.0] Q |] ==> P -- X =F[M1.0,M2.0] Q -- Y
[| r1.0 = r2.0; P =F[M1.0,M2.0] Q |] ==> P [[r1.0]] =F[M1.0,M2.0] Q [[r2.0]]
[| P1.0 =F[M1.0,M2.0] Q1.0; P2.0 =F[M1.0,M2.0] Q2.0 |] ==> P1.0 ;; P2.0 =F[M1.0,M2.0] Q1.0 ;; Q2.0
[| n1.0 = n2.0; P =F[M1.0,M2.0] Q |] ==> P |. n1.0 =F[M1.0,M2.0] Q |. n2.0
lemmas cspF_cong:
[| P1.0 =F[M1.0,M2.0] Q1.0; P2.0 =F[M1.0,M2.0] Q2.0 |] ==> P1.0 [+] P2.0 =F[M1.0,M2.0] Q1.0 [+] Q2.0
[| P1.0 =F[M1.0,M2.0] Q1.0; P2.0 =F[M1.0,M2.0] Q2.0 |] ==> P1.0 |~| P2.0 =F[M1.0,M2.0] Q1.0 |~| Q2.0
[| X = Y; P1.0 =F[M1.0,M2.0] Q1.0; P2.0 =F[M1.0,M2.0] Q2.0 |] ==> P1.0 |[X]| P2.0 =F[M1.0,M2.0] Q1.0 |[Y]| Q2.0
[| X = Y; P =F[M1.0,M2.0] Q |] ==> P -- X =F[M1.0,M2.0] Q -- Y
[| r1.0 = r2.0; P =F[M1.0,M2.0] Q |] ==> P [[r1.0]] =F[M1.0,M2.0] Q [[r2.0]]
[| P1.0 =F[M1.0,M2.0] Q1.0; P2.0 =F[M1.0,M2.0] Q2.0 |] ==> P1.0 ;; P2.0 =F[M1.0,M2.0] Q1.0 ;; Q2.0
[| n1.0 = n2.0; P =F[M1.0,M2.0] Q |] ==> P |. n1.0 =F[M1.0,M2.0] Q |. n2.0
[| a = b; P =F[M1.0,M2.0] Q |] ==> a -> P =F[M1.0,M2.0] b -> Q
[| X = Y; !!a. a ∈ Y ==> Pf a =F[M1.0,M2.0] Qf a |] ==> ? :X -> Pf =F[M1.0,M2.0] ? :Y -> Qf
[| C1.0 = C2.0; !!c. c ∈ sumset C1.0 ==> Pf c =F[M1.0,M2.0] Qf c |] ==> !! :C1.0 .. Pf =F[M1.0,M2.0] !! :C2.0 .. Qf
[| N1.0 = N2.0; !!n. n ∈ N2.0 ==> Pf n =F[M1.0,M2.0] Qf n |] ==> !nat :N1.0 .. Pf =F[M1.0,M2.0] !nat :N2.0 .. Qf
[| Xs1.0 = Xs2.0; !!X. X ∈ Xs2.0 ==> Pf X =F[M1.0,M2.0] Qf X |] ==> !set :Xs1.0 .. Pf =F[M1.0,M2.0] !set :Xs2.0 .. Qf
[| X1.0 = X2.0; !!x. x ∈ X2.0 ==> Pf x =F[M1.0,M2.0] Qf x |] ==> ! :X1.0 .. Pf =F[M1.0,M2.0] ! :X2.0 .. Qf
[| inj f; X1.0 = X2.0; !!x. x ∈ X2.0 ==> Pf x =F[M1.0,M2.0] Qf x |] ==> !<f> :X1.0 .. Pf =F[M1.0,M2.0] !<f> :X2.0 .. Qf
[| b1.0 = b2.0; P1.0 =F[M1.0,M2.0] Q1.0; P2.0 =F[M1.0,M2.0] Q2.0 |] ==> IF b1.0 THEN P1.0 ELSE P2.0 =F[M1.0,M2.0] IF b2.0 THEN Q1.0 ELSE Q2.0
lemmas cspF_cong:
[| P1.0 =F[M1.0,M2.0] Q1.0; P2.0 =F[M1.0,M2.0] Q2.0 |] ==> P1.0 [+] P2.0 =F[M1.0,M2.0] Q1.0 [+] Q2.0
[| P1.0 =F[M1.0,M2.0] Q1.0; P2.0 =F[M1.0,M2.0] Q2.0 |] ==> P1.0 |~| P2.0 =F[M1.0,M2.0] Q1.0 |~| Q2.0
[| X = Y; P1.0 =F[M1.0,M2.0] Q1.0; P2.0 =F[M1.0,M2.0] Q2.0 |] ==> P1.0 |[X]| P2.0 =F[M1.0,M2.0] Q1.0 |[Y]| Q2.0
[| X = Y; P =F[M1.0,M2.0] Q |] ==> P -- X =F[M1.0,M2.0] Q -- Y
[| r1.0 = r2.0; P =F[M1.0,M2.0] Q |] ==> P [[r1.0]] =F[M1.0,M2.0] Q [[r2.0]]
[| P1.0 =F[M1.0,M2.0] Q1.0; P2.0 =F[M1.0,M2.0] Q2.0 |] ==> P1.0 ;; P2.0 =F[M1.0,M2.0] Q1.0 ;; Q2.0
[| n1.0 = n2.0; P =F[M1.0,M2.0] Q |] ==> P |. n1.0 =F[M1.0,M2.0] Q |. n2.0
[| a = b; P =F[M1.0,M2.0] Q |] ==> a -> P =F[M1.0,M2.0] b -> Q
[| X = Y; !!a. a ∈ Y ==> Pf a =F[M1.0,M2.0] Qf a |] ==> ? :X -> Pf =F[M1.0,M2.0] ? :Y -> Qf
[| C1.0 = C2.0; !!c. c ∈ sumset C1.0 ==> Pf c =F[M1.0,M2.0] Qf c |] ==> !! :C1.0 .. Pf =F[M1.0,M2.0] !! :C2.0 .. Qf
[| N1.0 = N2.0; !!n. n ∈ N2.0 ==> Pf n =F[M1.0,M2.0] Qf n |] ==> !nat :N1.0 .. Pf =F[M1.0,M2.0] !nat :N2.0 .. Qf
[| Xs1.0 = Xs2.0; !!X. X ∈ Xs2.0 ==> Pf X =F[M1.0,M2.0] Qf X |] ==> !set :Xs1.0 .. Pf =F[M1.0,M2.0] !set :Xs2.0 .. Qf
[| X1.0 = X2.0; !!x. x ∈ X2.0 ==> Pf x =F[M1.0,M2.0] Qf x |] ==> ! :X1.0 .. Pf =F[M1.0,M2.0] ! :X2.0 .. Qf
[| inj f; X1.0 = X2.0; !!x. x ∈ X2.0 ==> Pf x =F[M1.0,M2.0] Qf x |] ==> !<f> :X1.0 .. Pf =F[M1.0,M2.0] !<f> :X2.0 .. Qf
[| b1.0 = b2.0; P1.0 =F[M1.0,M2.0] Q1.0; P2.0 =F[M1.0,M2.0] Q2.0 |] ==> IF b1.0 THEN P1.0 ELSE P2.0 =F[M1.0,M2.0] IF b2.0 THEN Q1.0 ELSE Q2.0
lemmas cspF_free_decompo:
[| P1.0 <=F[M1.0,M2.0] Q1.0; P2.0 <=F[M1.0,M2.0] Q2.0 |] ==> P1.0 [+] P2.0 <=F[M1.0,M2.0] Q1.0 [+] Q2.0
[| P1.0 <=F[M1.0,M2.0] Q1.0; P2.0 <=F[M1.0,M2.0] Q2.0 |] ==> P1.0 |~| P2.0 <=F[M1.0,M2.0] Q1.0 |~| Q2.0
[| X = Y; P1.0 <=F[M1.0,M2.0] Q1.0; P2.0 <=F[M1.0,M2.0] Q2.0 |] ==> P1.0 |[X]| P2.0 <=F[M1.0,M2.0] Q1.0 |[Y]| Q2.0
[| X = Y; P <=F[M1.0,M2.0] Q |] ==> P -- X <=F[M1.0,M2.0] Q -- Y
[| r1.0 = r2.0; P <=F[M1.0,M2.0] Q |] ==> P [[r1.0]] <=F[M1.0,M2.0] Q [[r2.0]]
[| P1.0 <=F[M1.0,M2.0] Q1.0; P2.0 <=F[M1.0,M2.0] Q2.0 |] ==> P1.0 ;; P2.0 <=F[M1.0,M2.0] Q1.0 ;; Q2.0
[| n1.0 = n2.0; P <=F[M1.0,M2.0] Q |] ==> P |. n1.0 <=F[M1.0,M2.0] Q |. n2.0
[| P1.0 =F[M1.0,M2.0] Q1.0; P2.0 =F[M1.0,M2.0] Q2.0 |] ==> P1.0 [+] P2.0 =F[M1.0,M2.0] Q1.0 [+] Q2.0
[| P1.0 =F[M1.0,M2.0] Q1.0; P2.0 =F[M1.0,M2.0] Q2.0 |] ==> P1.0 |~| P2.0 =F[M1.0,M2.0] Q1.0 |~| Q2.0
[| X = Y; P1.0 =F[M1.0,M2.0] Q1.0; P2.0 =F[M1.0,M2.0] Q2.0 |] ==> P1.0 |[X]| P2.0 =F[M1.0,M2.0] Q1.0 |[Y]| Q2.0
[| X = Y; P =F[M1.0,M2.0] Q |] ==> P -- X =F[M1.0,M2.0] Q -- Y
[| r1.0 = r2.0; P =F[M1.0,M2.0] Q |] ==> P [[r1.0]] =F[M1.0,M2.0] Q [[r2.0]]
[| P1.0 =F[M1.0,M2.0] Q1.0; P2.0 =F[M1.0,M2.0] Q2.0 |] ==> P1.0 ;; P2.0 =F[M1.0,M2.0] Q1.0 ;; Q2.0
[| n1.0 = n2.0; P =F[M1.0,M2.0] Q |] ==> P |. n1.0 =F[M1.0,M2.0] Q |. n2.0
lemmas cspF_free_decompo:
[| P1.0 <=F[M1.0,M2.0] Q1.0; P2.0 <=F[M1.0,M2.0] Q2.0 |] ==> P1.0 [+] P2.0 <=F[M1.0,M2.0] Q1.0 [+] Q2.0
[| P1.0 <=F[M1.0,M2.0] Q1.0; P2.0 <=F[M1.0,M2.0] Q2.0 |] ==> P1.0 |~| P2.0 <=F[M1.0,M2.0] Q1.0 |~| Q2.0
[| X = Y; P1.0 <=F[M1.0,M2.0] Q1.0; P2.0 <=F[M1.0,M2.0] Q2.0 |] ==> P1.0 |[X]| P2.0 <=F[M1.0,M2.0] Q1.0 |[Y]| Q2.0
[| X = Y; P <=F[M1.0,M2.0] Q |] ==> P -- X <=F[M1.0,M2.0] Q -- Y
[| r1.0 = r2.0; P <=F[M1.0,M2.0] Q |] ==> P [[r1.0]] <=F[M1.0,M2.0] Q [[r2.0]]
[| P1.0 <=F[M1.0,M2.0] Q1.0; P2.0 <=F[M1.0,M2.0] Q2.0 |] ==> P1.0 ;; P2.0 <=F[M1.0,M2.0] Q1.0 ;; Q2.0
[| n1.0 = n2.0; P <=F[M1.0,M2.0] Q |] ==> P |. n1.0 <=F[M1.0,M2.0] Q |. n2.0
[| P1.0 =F[M1.0,M2.0] Q1.0; P2.0 =F[M1.0,M2.0] Q2.0 |] ==> P1.0 [+] P2.0 =F[M1.0,M2.0] Q1.0 [+] Q2.0
[| P1.0 =F[M1.0,M2.0] Q1.0; P2.0 =F[M1.0,M2.0] Q2.0 |] ==> P1.0 |~| P2.0 =F[M1.0,M2.0] Q1.0 |~| Q2.0
[| X = Y; P1.0 =F[M1.0,M2.0] Q1.0; P2.0 =F[M1.0,M2.0] Q2.0 |] ==> P1.0 |[X]| P2.0 =F[M1.0,M2.0] Q1.0 |[Y]| Q2.0
[| X = Y; P =F[M1.0,M2.0] Q |] ==> P -- X =F[M1.0,M2.0] Q -- Y
[| r1.0 = r2.0; P =F[M1.0,M2.0] Q |] ==> P [[r1.0]] =F[M1.0,M2.0] Q [[r2.0]]
[| P1.0 =F[M1.0,M2.0] Q1.0; P2.0 =F[M1.0,M2.0] Q2.0 |] ==> P1.0 ;; P2.0 =F[M1.0,M2.0] Q1.0 ;; Q2.0
[| n1.0 = n2.0; P =F[M1.0,M2.0] Q |] ==> P |. n1.0 =F[M1.0,M2.0] Q |. n2.0
lemmas cspF_decompo:
[| P1.0 <=F[M1.0,M2.0] Q1.0; P2.0 <=F[M1.0,M2.0] Q2.0 |] ==> P1.0 [+] P2.0 <=F[M1.0,M2.0] Q1.0 [+] Q2.0
[| P1.0 <=F[M1.0,M2.0] Q1.0; P2.0 <=F[M1.0,M2.0] Q2.0 |] ==> P1.0 |~| P2.0 <=F[M1.0,M2.0] Q1.0 |~| Q2.0
[| X = Y; P1.0 <=F[M1.0,M2.0] Q1.0; P2.0 <=F[M1.0,M2.0] Q2.0 |] ==> P1.0 |[X]| P2.0 <=F[M1.0,M2.0] Q1.0 |[Y]| Q2.0
[| X = Y; P <=F[M1.0,M2.0] Q |] ==> P -- X <=F[M1.0,M2.0] Q -- Y
[| r1.0 = r2.0; P <=F[M1.0,M2.0] Q |] ==> P [[r1.0]] <=F[M1.0,M2.0] Q [[r2.0]]
[| P1.0 <=F[M1.0,M2.0] Q1.0; P2.0 <=F[M1.0,M2.0] Q2.0 |] ==> P1.0 ;; P2.0 <=F[M1.0,M2.0] Q1.0 ;; Q2.0
[| n1.0 = n2.0; P <=F[M1.0,M2.0] Q |] ==> P |. n1.0 <=F[M1.0,M2.0] Q |. n2.0
[| a = b; P <=F[M1.0,M2.0] Q |] ==> a -> P <=F[M1.0,M2.0] b -> Q
[| X = Y; !!a. a ∈ Y ==> Pf a <=F[M1.0,M2.0] Qf a |] ==> ? :X -> Pf <=F[M1.0,M2.0] ? :Y -> Qf
[| C1.0 = C2.0; !!c. c ∈ sumset C1.0 ==> Pf c <=F[M1.0,M2.0] Qf c |] ==> !! :C1.0 .. Pf <=F[M1.0,M2.0] !! :C2.0 .. Qf
[| N1.0 = N2.0; !!n. n ∈ N2.0 ==> Pf n <=F[M1.0,M2.0] Qf n |] ==> !nat :N1.0 .. Pf <=F[M1.0,M2.0] !nat :N2.0 .. Qf
[| Xs1.0 = Xs2.0; !!X. X ∈ Xs2.0 ==> Pf X <=F[M1.0,M2.0] Qf X |] ==> !set :Xs1.0 .. Pf <=F[M1.0,M2.0] !set :Xs2.0 .. Qf
[| X1.0 = X2.0; !!x. x ∈ X2.0 ==> Pf x <=F[M1.0,M2.0] Qf x |] ==> ! :X1.0 .. Pf <=F[M1.0,M2.0] ! :X2.0 .. Qf
[| inj f; X1.0 = X2.0; !!x. x ∈ X2.0 ==> Pf x <=F[M1.0,M2.0] Qf x |] ==> !<f> :X1.0 .. Pf <=F[M1.0,M2.0] !<f> :X2.0 .. Qf
[| b1.0 = b2.0; P1.0 <=F[M1.0,M2.0] Q1.0; P2.0 <=F[M1.0,M2.0] Q2.0 |] ==> IF b1.0 THEN P1.0 ELSE P2.0 <=F[M1.0,M2.0] IF b2.0 THEN Q1.0 ELSE Q2.0
[| P1.0 =F[M1.0,M2.0] Q1.0; P2.0 =F[M1.0,M2.0] Q2.0 |] ==> P1.0 [+] P2.0 =F[M1.0,M2.0] Q1.0 [+] Q2.0
[| P1.0 =F[M1.0,M2.0] Q1.0; P2.0 =F[M1.0,M2.0] Q2.0 |] ==> P1.0 |~| P2.0 =F[M1.0,M2.0] Q1.0 |~| Q2.0
[| X = Y; P1.0 =F[M1.0,M2.0] Q1.0; P2.0 =F[M1.0,M2.0] Q2.0 |] ==> P1.0 |[X]| P2.0 =F[M1.0,M2.0] Q1.0 |[Y]| Q2.0
[| X = Y; P =F[M1.0,M2.0] Q |] ==> P -- X =F[M1.0,M2.0] Q -- Y
[| r1.0 = r2.0; P =F[M1.0,M2.0] Q |] ==> P [[r1.0]] =F[M1.0,M2.0] Q [[r2.0]]
[| P1.0 =F[M1.0,M2.0] Q1.0; P2.0 =F[M1.0,M2.0] Q2.0 |] ==> P1.0 ;; P2.0 =F[M1.0,M2.0] Q1.0 ;; Q2.0
[| n1.0 = n2.0; P =F[M1.0,M2.0] Q |] ==> P |. n1.0 =F[M1.0,M2.0] Q |. n2.0
[| a = b; P =F[M1.0,M2.0] Q |] ==> a -> P =F[M1.0,M2.0] b -> Q
[| X = Y; !!a. a ∈ Y ==> Pf a =F[M1.0,M2.0] Qf a |] ==> ? :X -> Pf =F[M1.0,M2.0] ? :Y -> Qf
[| C1.0 = C2.0; !!c. c ∈ sumset C1.0 ==> Pf c =F[M1.0,M2.0] Qf c |] ==> !! :C1.0 .. Pf =F[M1.0,M2.0] !! :C2.0 .. Qf
[| N1.0 = N2.0; !!n. n ∈ N2.0 ==> Pf n =F[M1.0,M2.0] Qf n |] ==> !nat :N1.0 .. Pf =F[M1.0,M2.0] !nat :N2.0 .. Qf
[| Xs1.0 = Xs2.0; !!X. X ∈ Xs2.0 ==> Pf X =F[M1.0,M2.0] Qf X |] ==> !set :Xs1.0 .. Pf =F[M1.0,M2.0] !set :Xs2.0 .. Qf
[| X1.0 = X2.0; !!x. x ∈ X2.0 ==> Pf x =F[M1.0,M2.0] Qf x |] ==> ! :X1.0 .. Pf =F[M1.0,M2.0] ! :X2.0 .. Qf
[| inj f; X1.0 = X2.0; !!x. x ∈ X2.0 ==> Pf x =F[M1.0,M2.0] Qf x |] ==> !<f> :X1.0 .. Pf =F[M1.0,M2.0] !<f> :X2.0 .. Qf
[| b1.0 = b2.0; P1.0 =F[M1.0,M2.0] Q1.0; P2.0 =F[M1.0,M2.0] Q2.0 |] ==> IF b1.0 THEN P1.0 ELSE P2.0 =F[M1.0,M2.0] IF b2.0 THEN Q1.0 ELSE Q2.0
lemmas cspF_decompo:
[| P1.0 <=F[M1.0,M2.0] Q1.0; P2.0 <=F[M1.0,M2.0] Q2.0 |] ==> P1.0 [+] P2.0 <=F[M1.0,M2.0] Q1.0 [+] Q2.0
[| P1.0 <=F[M1.0,M2.0] Q1.0; P2.0 <=F[M1.0,M2.0] Q2.0 |] ==> P1.0 |~| P2.0 <=F[M1.0,M2.0] Q1.0 |~| Q2.0
[| X = Y; P1.0 <=F[M1.0,M2.0] Q1.0; P2.0 <=F[M1.0,M2.0] Q2.0 |] ==> P1.0 |[X]| P2.0 <=F[M1.0,M2.0] Q1.0 |[Y]| Q2.0
[| X = Y; P <=F[M1.0,M2.0] Q |] ==> P -- X <=F[M1.0,M2.0] Q -- Y
[| r1.0 = r2.0; P <=F[M1.0,M2.0] Q |] ==> P [[r1.0]] <=F[M1.0,M2.0] Q [[r2.0]]
[| P1.0 <=F[M1.0,M2.0] Q1.0; P2.0 <=F[M1.0,M2.0] Q2.0 |] ==> P1.0 ;; P2.0 <=F[M1.0,M2.0] Q1.0 ;; Q2.0
[| n1.0 = n2.0; P <=F[M1.0,M2.0] Q |] ==> P |. n1.0 <=F[M1.0,M2.0] Q |. n2.0
[| a = b; P <=F[M1.0,M2.0] Q |] ==> a -> P <=F[M1.0,M2.0] b -> Q
[| X = Y; !!a. a ∈ Y ==> Pf a <=F[M1.0,M2.0] Qf a |] ==> ? :X -> Pf <=F[M1.0,M2.0] ? :Y -> Qf
[| C1.0 = C2.0; !!c. c ∈ sumset C1.0 ==> Pf c <=F[M1.0,M2.0] Qf c |] ==> !! :C1.0 .. Pf <=F[M1.0,M2.0] !! :C2.0 .. Qf
[| N1.0 = N2.0; !!n. n ∈ N2.0 ==> Pf n <=F[M1.0,M2.0] Qf n |] ==> !nat :N1.0 .. Pf <=F[M1.0,M2.0] !nat :N2.0 .. Qf
[| Xs1.0 = Xs2.0; !!X. X ∈ Xs2.0 ==> Pf X <=F[M1.0,M2.0] Qf X |] ==> !set :Xs1.0 .. Pf <=F[M1.0,M2.0] !set :Xs2.0 .. Qf
[| X1.0 = X2.0; !!x. x ∈ X2.0 ==> Pf x <=F[M1.0,M2.0] Qf x |] ==> ! :X1.0 .. Pf <=F[M1.0,M2.0] ! :X2.0 .. Qf
[| inj f; X1.0 = X2.0; !!x. x ∈ X2.0 ==> Pf x <=F[M1.0,M2.0] Qf x |] ==> !<f> :X1.0 .. Pf <=F[M1.0,M2.0] !<f> :X2.0 .. Qf
[| b1.0 = b2.0; P1.0 <=F[M1.0,M2.0] Q1.0; P2.0 <=F[M1.0,M2.0] Q2.0 |] ==> IF b1.0 THEN P1.0 ELSE P2.0 <=F[M1.0,M2.0] IF b2.0 THEN Q1.0 ELSE Q2.0
[| P1.0 =F[M1.0,M2.0] Q1.0; P2.0 =F[M1.0,M2.0] Q2.0 |] ==> P1.0 [+] P2.0 =F[M1.0,M2.0] Q1.0 [+] Q2.0
[| P1.0 =F[M1.0,M2.0] Q1.0; P2.0 =F[M1.0,M2.0] Q2.0 |] ==> P1.0 |~| P2.0 =F[M1.0,M2.0] Q1.0 |~| Q2.0
[| X = Y; P1.0 =F[M1.0,M2.0] Q1.0; P2.0 =F[M1.0,M2.0] Q2.0 |] ==> P1.0 |[X]| P2.0 =F[M1.0,M2.0] Q1.0 |[Y]| Q2.0
[| X = Y; P =F[M1.0,M2.0] Q |] ==> P -- X =F[M1.0,M2.0] Q -- Y
[| r1.0 = r2.0; P =F[M1.0,M2.0] Q |] ==> P [[r1.0]] =F[M1.0,M2.0] Q [[r2.0]]
[| P1.0 =F[M1.0,M2.0] Q1.0; P2.0 =F[M1.0,M2.0] Q2.0 |] ==> P1.0 ;; P2.0 =F[M1.0,M2.0] Q1.0 ;; Q2.0
[| n1.0 = n2.0; P =F[M1.0,M2.0] Q |] ==> P |. n1.0 =F[M1.0,M2.0] Q |. n2.0
[| a = b; P =F[M1.0,M2.0] Q |] ==> a -> P =F[M1.0,M2.0] b -> Q
[| X = Y; !!a. a ∈ Y ==> Pf a =F[M1.0,M2.0] Qf a |] ==> ? :X -> Pf =F[M1.0,M2.0] ? :Y -> Qf
[| C1.0 = C2.0; !!c. c ∈ sumset C1.0 ==> Pf c =F[M1.0,M2.0] Qf c |] ==> !! :C1.0 .. Pf =F[M1.0,M2.0] !! :C2.0 .. Qf
[| N1.0 = N2.0; !!n. n ∈ N2.0 ==> Pf n =F[M1.0,M2.0] Qf n |] ==> !nat :N1.0 .. Pf =F[M1.0,M2.0] !nat :N2.0 .. Qf
[| Xs1.0 = Xs2.0; !!X. X ∈ Xs2.0 ==> Pf X =F[M1.0,M2.0] Qf X |] ==> !set :Xs1.0 .. Pf =F[M1.0,M2.0] !set :Xs2.0 .. Qf
[| X1.0 = X2.0; !!x. x ∈ X2.0 ==> Pf x =F[M1.0,M2.0] Qf x |] ==> ! :X1.0 .. Pf =F[M1.0,M2.0] ! :X2.0 .. Qf
[| inj f; X1.0 = X2.0; !!x. x ∈ X2.0 ==> Pf x =F[M1.0,M2.0] Qf x |] ==> !<f> :X1.0 .. Pf =F[M1.0,M2.0] !<f> :X2.0 .. Qf
[| b1.0 = b2.0; P1.0 =F[M1.0,M2.0] Q1.0; P2.0 =F[M1.0,M2.0] Q2.0 |] ==> IF b1.0 THEN P1.0 ELSE P2.0 =F[M1.0,M2.0] IF b2.0 THEN Q1.0 ELSE Q2.0
lemmas cspF_rm_head_mono:
[| a = b; P <=F[M1.0,M2.0] Q |] ==> a -> P <=F[M1.0,M2.0] b -> Q
[| X = Y; !!a. a ∈ Y ==> Pf a <=F[M1.0,M2.0] Qf a |] ==> ? :X -> Pf <=F[M1.0,M2.0] ? :Y -> Qf
lemmas cspF_rm_head_mono:
[| a = b; P <=F[M1.0,M2.0] Q |] ==> a -> P <=F[M1.0,M2.0] b -> Q
[| X = Y; !!a. a ∈ Y ==> Pf a <=F[M1.0,M2.0] Qf a |] ==> ? :X -> Pf <=F[M1.0,M2.0] ? :Y -> Qf
lemmas cspF_rm_head_cong:
[| a = b; P =F[M1.0,M2.0] Q |] ==> a -> P =F[M1.0,M2.0] b -> Q
[| X = Y; !!a. a ∈ Y ==> Pf a =F[M1.0,M2.0] Qf a |] ==> ? :X -> Pf =F[M1.0,M2.0] ? :Y -> Qf
lemmas cspF_rm_head_cong:
[| a = b; P =F[M1.0,M2.0] Q |] ==> a -> P =F[M1.0,M2.0] b -> Q
[| X = Y; !!a. a ∈ Y ==> Pf a =F[M1.0,M2.0] Qf a |] ==> ? :X -> Pf =F[M1.0,M2.0] ? :Y -> Qf
lemmas cspF_rm_head:
[| a = b; P <=F[M1.0,M2.0] Q |] ==> a -> P <=F[M1.0,M2.0] b -> Q
[| X = Y; !!a. a ∈ Y ==> Pf a <=F[M1.0,M2.0] Qf a |] ==> ? :X -> Pf <=F[M1.0,M2.0] ? :Y -> Qf
[| a = b; P =F[M1.0,M2.0] Q |] ==> a -> P =F[M1.0,M2.0] b -> Q
[| X = Y; !!a. a ∈ Y ==> Pf a =F[M1.0,M2.0] Qf a |] ==> ? :X -> Pf =F[M1.0,M2.0] ? :Y -> Qf
lemmas cspF_rm_head:
[| a = b; P <=F[M1.0,M2.0] Q |] ==> a -> P <=F[M1.0,M2.0] b -> Q
[| X = Y; !!a. a ∈ Y ==> Pf a <=F[M1.0,M2.0] Qf a |] ==> ? :X -> Pf <=F[M1.0,M2.0] ? :Y -> Qf
[| a = b; P =F[M1.0,M2.0] Q |] ==> a -> P =F[M1.0,M2.0] b -> Q
[| X = Y; !!a. a ∈ Y ==> Pf a =F[M1.0,M2.0] Qf a |] ==> ? :X -> Pf =F[M1.0,M2.0] ? :Y -> Qf
lemma cspF_Rep_int_choice_sum_decompo_ALL_EX_ref:
∀c2∈sumset C2.0. ∃c1∈sumset C1.0. Pf c1 <=F[M1.0,M2.0] Qf c2 ==> !! :C1.0 .. Pf <=F[M1.0,M2.0] !! :C2.0 .. Qf
lemma cspF_Rep_int_choice_nat_decompo_ALL_EX_ref:
∀n2∈N2.0. ∃n1∈N1.0. Pf n1 <=F[M1.0,M2.0] Qf n2 ==> !nat :N1.0 .. Pf <=F[M1.0,M2.0] !nat :N2.0 .. Qf
lemma cspF_Rep_int_choice_set_decompo_ALL_EX_ref:
∀X2∈Xs2.0. ∃X1∈Xs1.0. Pf X1 <=F[M1.0,M2.0] Qf X2 ==> !set :Xs1.0 .. Pf <=F[M1.0,M2.0] !set :Xs2.0 .. Qf
lemmas cspF_Rep_int_choice_decompo_ALL_EX_ref:
∀c2∈sumset C2.0. ∃c1∈sumset C1.0. Pf c1 <=F[M1.0,M2.0] Qf c2 ==> !! :C1.0 .. Pf <=F[M1.0,M2.0] !! :C2.0 .. Qf
∀n2∈N2.0. ∃n1∈N1.0. Pf n1 <=F[M1.0,M2.0] Qf n2 ==> !nat :N1.0 .. Pf <=F[M1.0,M2.0] !nat :N2.0 .. Qf
∀X2∈Xs2.0. ∃X1∈Xs1.0. Pf X1 <=F[M1.0,M2.0] Qf X2 ==> !set :Xs1.0 .. Pf <=F[M1.0,M2.0] !set :Xs2.0 .. Qf
lemmas cspF_Rep_int_choice_decompo_ALL_EX_ref:
∀c2∈sumset C2.0. ∃c1∈sumset C1.0. Pf c1 <=F[M1.0,M2.0] Qf c2 ==> !! :C1.0 .. Pf <=F[M1.0,M2.0] !! :C2.0 .. Qf
∀n2∈N2.0. ∃n1∈N1.0. Pf n1 <=F[M1.0,M2.0] Qf n2 ==> !nat :N1.0 .. Pf <=F[M1.0,M2.0] !nat :N2.0 .. Qf
∀X2∈Xs2.0. ∃X1∈Xs1.0. Pf X1 <=F[M1.0,M2.0] Qf X2 ==> !set :Xs1.0 .. Pf <=F[M1.0,M2.0] !set :Xs2.0 .. Qf
lemma cspF_Rep_int_choice_sum_decompo_ALL_EX_eq:
[| ∀c1∈sumset C1.0. ∃c2∈sumset C2.0. Pf c1 =F[M1.0,M2.0] Qf c2; ∀c2∈sumset C2.0. ∃c1∈sumset C1.0. Pf c1 =F[M1.0,M2.0] Qf c2 |] ==> !! :C1.0 .. Pf =F[M1.0,M2.0] !! :C2.0 .. Qf
lemma cspF_Rep_int_choice_nat_decompo_ALL_EX_eq:
[| ∀n1∈N1.0. ∃n2∈N2.0. Pf n1 =F[M1.0,M2.0] Qf n2; ∀n2∈N2.0. ∃n1∈N1.0. Pf n1 =F[M1.0,M2.0] Qf n2 |] ==> !nat :N1.0 .. Pf =F[M1.0,M2.0] !nat :N2.0 .. Qf
lemma cspF_Rep_int_choice_set_decompo_ALL_EX_eq:
[| ∀X1∈Xs1.0. ∃X2∈Xs2.0. Pf X1 =F[M1.0,M2.0] Qf X2; ∀X2∈Xs2.0. ∃X1∈Xs1.0. Pf X1 =F[M1.0,M2.0] Qf X2 |] ==> !set :Xs1.0 .. Pf =F[M1.0,M2.0] !set :Xs2.0 .. Qf
lemmas cspF_Rep_int_choice_decompo_ALL_EX_eq:
[| ∀c1∈sumset C1.0. ∃c2∈sumset C2.0. Pf c1 =F[M1.0,M2.0] Qf c2; ∀c2∈sumset C2.0. ∃c1∈sumset C1.0. Pf c1 =F[M1.0,M2.0] Qf c2 |] ==> !! :C1.0 .. Pf =F[M1.0,M2.0] !! :C2.0 .. Qf
[| ∀n1∈N1.0. ∃n2∈N2.0. Pf n1 =F[M1.0,M2.0] Qf n2; ∀n2∈N2.0. ∃n1∈N1.0. Pf n1 =F[M1.0,M2.0] Qf n2 |] ==> !nat :N1.0 .. Pf =F[M1.0,M2.0] !nat :N2.0 .. Qf
[| ∀X1∈Xs1.0. ∃X2∈Xs2.0. Pf X1 =F[M1.0,M2.0] Qf X2; ∀X2∈Xs2.0. ∃X1∈Xs1.0. Pf X1 =F[M1.0,M2.0] Qf X2 |] ==> !set :Xs1.0 .. Pf =F[M1.0,M2.0] !set :Xs2.0 .. Qf
lemmas cspF_Rep_int_choice_decompo_ALL_EX_eq:
[| ∀c1∈sumset C1.0. ∃c2∈sumset C2.0. Pf c1 =F[M1.0,M2.0] Qf c2; ∀c2∈sumset C2.0. ∃c1∈sumset C1.0. Pf c1 =F[M1.0,M2.0] Qf c2 |] ==> !! :C1.0 .. Pf =F[M1.0,M2.0] !! :C2.0 .. Qf
[| ∀n1∈N1.0. ∃n2∈N2.0. Pf n1 =F[M1.0,M2.0] Qf n2; ∀n2∈N2.0. ∃n1∈N1.0. Pf n1 =F[M1.0,M2.0] Qf n2 |] ==> !nat :N1.0 .. Pf =F[M1.0,M2.0] !nat :N2.0 .. Qf
[| ∀X1∈Xs1.0. ∃X2∈Xs2.0. Pf X1 =F[M1.0,M2.0] Qf X2; ∀X2∈Xs2.0. ∃X1∈Xs1.0. Pf X1 =F[M1.0,M2.0] Qf X2 |] ==> !set :Xs1.0 .. Pf =F[M1.0,M2.0] !set :Xs2.0 .. Qf
lemmas cspF_Rep_int_choice_decompo_ALL_EX:
∀c2∈sumset C2.0. ∃c1∈sumset C1.0. Pf c1 <=F[M1.0,M2.0] Qf c2 ==> !! :C1.0 .. Pf <=F[M1.0,M2.0] !! :C2.0 .. Qf
∀n2∈N2.0. ∃n1∈N1.0. Pf n1 <=F[M1.0,M2.0] Qf n2 ==> !nat :N1.0 .. Pf <=F[M1.0,M2.0] !nat :N2.0 .. Qf
∀X2∈Xs2.0. ∃X1∈Xs1.0. Pf X1 <=F[M1.0,M2.0] Qf X2 ==> !set :Xs1.0 .. Pf <=F[M1.0,M2.0] !set :Xs2.0 .. Qf
[| ∀c1∈sumset C1.0. ∃c2∈sumset C2.0. Pf c1 =F[M1.0,M2.0] Qf c2; ∀c2∈sumset C2.0. ∃c1∈sumset C1.0. Pf c1 =F[M1.0,M2.0] Qf c2 |] ==> !! :C1.0 .. Pf =F[M1.0,M2.0] !! :C2.0 .. Qf
[| ∀n1∈N1.0. ∃n2∈N2.0. Pf n1 =F[M1.0,M2.0] Qf n2; ∀n2∈N2.0. ∃n1∈N1.0. Pf n1 =F[M1.0,M2.0] Qf n2 |] ==> !nat :N1.0 .. Pf =F[M1.0,M2.0] !nat :N2.0 .. Qf
[| ∀X1∈Xs1.0. ∃X2∈Xs2.0. Pf X1 =F[M1.0,M2.0] Qf X2; ∀X2∈Xs2.0. ∃X1∈Xs1.0. Pf X1 =F[M1.0,M2.0] Qf X2 |] ==> !set :Xs1.0 .. Pf =F[M1.0,M2.0] !set :Xs2.0 .. Qf
lemmas cspF_Rep_int_choice_decompo_ALL_EX:
∀c2∈sumset C2.0. ∃c1∈sumset C1.0. Pf c1 <=F[M1.0,M2.0] Qf c2 ==> !! :C1.0 .. Pf <=F[M1.0,M2.0] !! :C2.0 .. Qf
∀n2∈N2.0. ∃n1∈N1.0. Pf n1 <=F[M1.0,M2.0] Qf n2 ==> !nat :N1.0 .. Pf <=F[M1.0,M2.0] !nat :N2.0 .. Qf
∀X2∈Xs2.0. ∃X1∈Xs1.0. Pf X1 <=F[M1.0,M2.0] Qf X2 ==> !set :Xs1.0 .. Pf <=F[M1.0,M2.0] !set :Xs2.0 .. Qf
[| ∀c1∈sumset C1.0. ∃c2∈sumset C2.0. Pf c1 =F[M1.0,M2.0] Qf c2; ∀c2∈sumset C2.0. ∃c1∈sumset C1.0. Pf c1 =F[M1.0,M2.0] Qf c2 |] ==> !! :C1.0 .. Pf =F[M1.0,M2.0] !! :C2.0 .. Qf
[| ∀n1∈N1.0. ∃n2∈N2.0. Pf n1 =F[M1.0,M2.0] Qf n2; ∀n2∈N2.0. ∃n1∈N1.0. Pf n1 =F[M1.0,M2.0] Qf n2 |] ==> !nat :N1.0 .. Pf =F[M1.0,M2.0] !nat :N2.0 .. Qf
[| ∀X1∈Xs1.0. ∃X2∈Xs2.0. Pf X1 =F[M1.0,M2.0] Qf X2; ∀X2∈Xs2.0. ∃X1∈Xs1.0. Pf X1 =F[M1.0,M2.0] Qf X2 |] ==> !set :Xs1.0 .. Pf =F[M1.0,M2.0] !set :Xs2.0 .. Qf