Up to index of Isabelle/HOL/HOL-Complex/CSP/CSP_T
theory CSP_T_law_decompo (*-------------------------------------------*
| CSP-Prover on Isabelle2004 |
| December 2004 |
| June 2005 (modified) |
| September 2005 (modified) |
| |
| CSP-Prover on Isabelle2005 |
| October 2005 (modified) |
| December 2005 (modified) |
| April 2006 (modified) |
| |
| Yoshinao Isobe (AIST JAPAN) |
*-------------------------------------------*)
theory CSP_T_law_decompo = CSP_T_traces:
(*------------------------------------------------*
| |
| laws for monotonicity and congruence |
| |
*------------------------------------------------*)
(*********************************************************
Act_prefix mono
*********************************************************)
(*------------------*
| csp law |
*------------------*)
lemma cspT_Act_prefix_mono:
"[| a = b ; P <=T Q |] ==> a -> P <=T b -> Q"
apply (simp add: cspT_semantics)
apply (simp add: subdomT_iff)
apply (intro allI impI)
apply (simp add: in_traces)
apply (fast)
done
lemma cspT_Act_prefix_cong:
"[| a = b ; P =T Q |] ==> a -> P =T b -> Q"
apply (simp add: cspT_eq_ref_iff)
apply (simp add: cspT_Act_prefix_mono)
done
(*********************************************************
Ext_pre_choice mono
*********************************************************)
(*------------------*
| csp law |
*------------------*)
lemma cspT_Ext_pre_choice_mono:
"[| X = Y ; !! a. a:Y ==> Pf a <=T Qf a |] ==> ? :X -> Pf <=T ? :Y -> Qf"
apply (simp add: cspT_semantics)
apply (simp add: subdomT_iff)
apply (intro allI impI)
apply (simp add: in_traces)
apply (fast)
done
lemma cspT_Ext_pre_choice_cong:
"[| X = Y ; !! a. a:Y ==> Pf a =T Qf a |] ==> ? :X -> Pf =T ? :Y -> Qf"
by (simp add: cspT_eq_ref_iff cspT_Ext_pre_choice_mono)
(*********************************************************
Ext choice mono
*********************************************************)
(*------------------*
| csp law |
*------------------*)
lemma cspT_Ext_choice_mono:
"[| P1 <=T Q1 ; P2 <=T Q2 |] ==> P1 [+] P2 <=T Q1 [+] Q2"
apply (simp add: cspT_semantics)
apply (simp add: subdomT_iff)
apply (intro allI impI)
apply (simp add: in_traces)
apply (fast)
done
lemma cspT_Ext_choice_cong:
"[| P1 =T Q1 ; P2 =T Q2 |] ==> P1 [+] P2 =T Q1 [+] Q2"
by (simp add: cspT_eq_ref_iff cspT_Ext_choice_mono)
(*********************************************************
Int choice mono
*********************************************************)
(*------------------*
| csp law |
*------------------*)
lemma cspT_Int_choice_mono:
"[| P1 <=T Q1 ; P2 <=T Q2 |] ==> P1 |~| P2 <=T Q1 |~| Q2"
apply (simp add: cspT_semantics)
apply (simp add: subdomT_iff)
apply (intro allI impI)
apply (simp add: in_traces)
apply (fast)
done
lemma cspT_Int_choice_cong:
"[| P1 =T Q1 ; P2 =T Q2 |] ==> P1 |~| P2 =T Q1 |~| Q2"
by (simp add: cspT_eq_ref_iff cspT_Int_choice_mono)
(*********************************************************
replicated internal choice
*********************************************************)
(*------------------*
| csp law |
*------------------*)
lemma cspT_Rep_int_choice_mono0:
"[| C1 = C2 ; !! c. c:C2 ==> Pf c <=T Qf c |]
==> !! :C1 .. Pf <=T !! :C2 .. Qf"
apply (simp add: cspT_semantics)
apply (simp add: subdomT_iff)
apply (intro allI impI)
apply (simp add: in_traces)
apply (fast)
done
lemma cspT_Rep_int_choice_cong0:
"[| C1 = C2 ; !! c. c:C2 ==> Pf c =T Qf c |]
==> !! :C1 .. Pf =T !! :C2 .. Qf"
by (simp add: cspT_eq_ref_iff cspT_Rep_int_choice_mono0)
(*** fun ***)
lemma cspT_Rep_int_choice_mono_fun:
"[| inj f ; X = Y ; !! a. a:Y ==> Pf a <=T Qf a |]
==> !!<f> :X .. Pf <=T !!<f> :Y .. Qf"
apply (simp add: Rep_int_choice_fun_def)
apply (rule cspT_Rep_int_choice_mono0)
apply (auto)
done
lemma cspT_Rep_int_choice_cong_fun:
"[| inj f ; X = Y ; !! a. a:Y ==> Pf a =T Qf a |]
==> !!<f> :X .. Pf =T !!<f> :Y .. Qf"
by (simp add: cspT_eq_ref_iff cspT_Rep_int_choice_mono_fun)
(*** set ***)
lemma cspT_Rep_int_choice_mono_set:
"[| Xs = Ys ; !! X. X:Ys ==> Pf X <=T Qf X |]
==> !set :Xs .. Pf <=T !set :Ys .. Qf"
by (simp add: cspT_Rep_int_choice_mono_fun)
lemma cspT_Rep_int_choice_cong_set:
"[| Xs = Ys ; !! X. X:Ys ==> Pf X =T Qf X |]
==> !set :Xs .. Pf =T !set :Ys .. Qf"
by (simp add: cspT_Rep_int_choice_cong_fun)
(*** nat ***)
lemma cspT_Rep_int_choice_mono_nat:
"[| N1 = N2 ; !! n. n:N2 ==> Pf n <=T Qf n |]
==> !nat :N1 .. Pf <=T !nat :N2 .. Qf"
by (simp add: cspT_Rep_int_choice_mono_fun)
lemma cspT_Rep_int_choice_cong_nat:
"[| N1 = N2 ; !! n. n:N2 ==> Pf n =T Qf n |]
==> !nat :N1 .. Pf =T !nat :N2 .. Qf"
by (simp add: cspT_Rep_int_choice_cong_fun)
(*** com ***)
lemma cspT_Rep_int_choice_mono_com:
"[| X = Y ; !! a. a:Y ==> Pf a <=T Qf a |]
==> ! :X .. Pf <=T ! :Y .. Qf"
apply (simp add: Rep_int_choice_com_def)
apply (rule cspT_Rep_int_choice_mono_set)
by (auto)
lemma cspT_Rep_int_choice_cong_com:
"[| X = Y ; !! a. a:Y ==> Pf a =T Qf a |]
==> ! :X .. Pf =T ! :Y .. Qf"
apply (simp add: Rep_int_choice_com_def)
apply (rule cspT_Rep_int_choice_cong_set)
by (auto)
(*** f ***)
lemma cspT_Rep_int_choice_mono_f:
"[| inj f ; X = Y ; !! a. a:Y ==> Pf a <=T Qf a |]
==> !<f> :X .. Pf <=T !<f> :Y .. Qf"
apply (simp add: Rep_int_choice_f_def)
apply (rule cspT_Rep_int_choice_mono_com)
apply (auto)
done
lemma cspT_Rep_int_choice_cong_f:
"[| inj f ; X = Y ; !! a. a:Y ==> Pf a =T Qf a |]
==> !<f> :X .. Pf =T !<f> :Y .. Qf"
apply (simp add: Rep_int_choice_f_def)
apply (rule cspT_Rep_int_choice_cong_com)
apply (auto)
done
lemmas cspT_Rep_int_choice_mono = cspT_Rep_int_choice_mono0
cspT_Rep_int_choice_mono_com
cspT_Rep_int_choice_mono_set
cspT_Rep_int_choice_mono_nat
cspT_Rep_int_choice_mono_f
lemmas cspT_Rep_int_choice_cong = cspT_Rep_int_choice_cong0
cspT_Rep_int_choice_cong_com
cspT_Rep_int_choice_cong_set
cspT_Rep_int_choice_cong_nat
cspT_Rep_int_choice_cong_f
(*********************************************************
IF mono
*********************************************************)
(*------------------*
| csp law |
*------------------*)
lemma cspT_IF_mono:
"[| b1 = b2 ; P1 <=T Q1 ; P2 <=T Q2 |]
==> IF b1 THEN P1 ELSE P2 <=T
IF b2 THEN Q1 ELSE Q2"
apply (simp add: cspT_semantics)
apply (simp add: subdomT_iff)
apply (intro allI impI)
apply (simp add: in_traces)
done
lemma cspT_IF_cong:
"[| b1 = b2 ; P1 =T Q1 ; P2 =T Q2 |]
==> IF b1 THEN P1 ELSE P2 =T
IF b2 THEN Q1 ELSE Q2"
by (simp add: cspT_eq_ref_iff cspT_IF_mono)
(*********************************************************
Parallel mono
*********************************************************)
(*------------------*
| csp law |
*------------------*)
lemma cspT_Parallel_mono:
"[| X = Y ; P1 <=T Q1 ; P2 <=T Q2 |]
==> P1 |[X]| P2 <=T Q1 |[Y]| Q2"
apply (simp add: cspT_semantics)
apply (simp add: subdomT_iff)
apply (intro allI impI)
apply (simp add: in_traces)
apply (fast)
done
lemma cspT_Parallel_cong:
"[| X = Y ; P1 =T Q1 ; P2 =T Q2 |]
==> P1 |[X]| P2 =T Q1 |[Y]| Q2"
by (simp add: cspT_eq_ref_iff cspT_Parallel_mono)
(*********************************************************
Hiding mono
*********************************************************)
(*------------------*
| csp law |
*------------------*)
lemma cspT_Hiding_mono:
"[| X = Y ; P <=T Q |] ==> P -- X <=T Q -- Y"
apply (simp add: cspT_semantics)
apply (simp add: subdomT_iff)
apply (intro allI impI)
apply (simp add: in_traces)
apply (fast)
done
lemma cspT_Hiding_cong:
"[| X = Y ; P =T Q |] ==> P -- X =T Q -- Y"
by (simp add: cspT_eq_ref_iff cspT_Hiding_mono)
(*********************************************************
Renaming mono
*********************************************************)
(*------------------*
| csp law |
*------------------*)
lemma cspT_Renaming_mono:
"[| r1 = r2 ; P <=T Q |] ==> P [[r1]] <=T Q [[r2]]"
apply (simp add: cspT_semantics)
apply (simp add: subdomT_iff)
apply (intro allI impI)
apply (simp add: in_traces)
apply (fast)
done
lemma cspT_Renaming_cong:
"[| r1 = r2 ; P =T Q |] ==> P [[r1]] =T Q [[r2]]"
by (simp add: cspT_eq_ref_iff cspT_Renaming_mono)
(*********************************************************
Sequential composition mono
*********************************************************)
(*------------------*
| csp law |
*------------------*)
lemma cspT_Seq_compo_mono:
"[| P1 <=T Q1 ; P2 <=T Q2 |]
==> P1 ;; P2 <=T Q1 ;; Q2"
apply (simp add: cspT_semantics)
apply (simp add: subdomT_iff)
apply (intro allI impI)
apply (simp add: in_traces)
apply (fast)
done
lemma cspT_Seq_compo_cong:
"[| P1 =T Q1 ; P2 =T Q2 |] ==> P1 ;; P2 =T Q1 ;; Q2"
by (simp add: cspT_eq_ref_iff cspT_Seq_compo_mono)
(*********************************************************
Depth_rest mono
*********************************************************)
(*------------------*
| csp law |
*------------------*)
lemma cspT_Depth_rest_mono:
"[| n1 = n2 ; P <=T Q |] ==> P |. n1 <=T Q |. n2"
apply (simp add: cspT_semantics)
apply (simp add: subdomT_iff)
apply (intro allI impI)
apply (simp add: in_traces)
done
lemma cspT_Depth_rest_cong:
"[| n1 = n2 ; P =T Q |] ==> P |. n1 =T Q |. n2"
by (simp add: cspT_eq_ref_iff cspT_Depth_rest_mono)
(*********************************************************
Timeout mono
*********************************************************)
(*------------------*
| csp law |
*------------------*)
lemma cspT_Timeout_mono:
"[| P1 <=T Q1 ; P2 <=T Q2 |]
==> P1 [> P2 <=T Q1 [> Q2"
apply (rule cspT_Ext_choice_mono)
apply (rule cspT_Int_choice_mono)
by (simp_all)
lemma cspT_Timeout_cong:
"[| P1 =T Q1 ; P2 =T Q2 |]
==> P1 [> P2 =T Q1 [> Q2"
by (simp add: cspT_eq_ref_iff cspT_Timeout_mono)
(*------------------------------------------------------*
| alias |
*------------------------------------------------------*)
lemmas cspT_free_mono =
cspT_Ext_choice_mono cspT_Int_choice_mono cspT_Parallel_mono
cspT_Hiding_mono cspT_Renaming_mono cspT_Seq_compo_mono
cspT_Depth_rest_mono
lemmas cspT_mono = cspT_free_mono
cspT_Act_prefix_mono cspT_Ext_pre_choice_mono
cspT_Rep_int_choice_mono cspT_IF_mono
lemmas cspT_free_cong =
cspT_Ext_choice_cong cspT_Int_choice_cong cspT_Parallel_cong
cspT_Hiding_cong cspT_Renaming_cong cspT_Seq_compo_cong
cspT_Depth_rest_cong
lemmas cspT_cong = cspT_free_cong
cspT_Act_prefix_cong cspT_Ext_pre_choice_cong
cspT_Rep_int_choice_cong cspT_IF_cong
lemmas cspT_free_decompo = cspT_free_mono cspT_free_cong
lemmas cspT_decompo = cspT_mono cspT_cong
lemmas cspT_rm_head_mono = cspT_Act_prefix_mono cspT_Ext_pre_choice_mono
lemmas cspT_rm_head_cong = cspT_Act_prefix_cong cspT_Ext_pre_choice_cong
lemmas cspT_rm_head = cspT_rm_head_mono cspT_rm_head_cong
(*-------------------------------------------------------*
| decomposition with ALL and EX |
*-------------------------------------------------------*)
(*** Rep_int_choice ***)
lemma cspT_Rep_int_choice_decompo_ALL_EX_ref:
"ALL c2:C2. EX c1:C1. Pf c1 <=T Qf c2
==> !! :C1 .. Pf <=T !! :C2 .. Qf"
apply (simp add: cspT_semantics)
apply (rule, simp add: in_traces)
apply (erule disjE)
apply (simp)
apply (elim bexE)
apply (drule_tac x="c" in bspec, simp)
apply (erule bexE)
apply (rule disjI2)
apply (rule_tac x="c1" in bexI)
apply (erule subdomTE)
apply (simp_all)
done
lemma cspT_Rep_int_choice_decompo_ALL_EX_eq:
"[| ALL c1:C1. EX c2:C2. Pf c1 =T Qf c2 ;
ALL c2:C2. EX c1:C1. Pf c1 =T Qf c2 |]
==> !! :C1 .. Pf =T !! :C2 .. Qf"
apply (simp add: cspT_eq_ref_iff)
apply (rule conjI)
apply (rule cspT_Rep_int_choice_decompo_ALL_EX_ref)
apply (force)
apply (rule cspT_Rep_int_choice_decompo_ALL_EX_ref)
apply (force)
done
lemmas cspT_Rep_int_choice_decompo_ALL_EX
= cspT_Rep_int_choice_decompo_ALL_EX_ref
cspT_Rep_int_choice_decompo_ALL_EX_eq
end
lemma cspT_Act_prefix_mono:
[| a = b; P <=T Q |] ==> a -> P <=T b -> Q
lemma cspT_Act_prefix_cong:
[| a = b; P =T Q |] ==> a -> P =T b -> Q
lemma cspT_Ext_pre_choice_mono:
[| X = Y; !!a. a ∈ Y ==> Pf a <=T Qf a |] ==> ? :X -> Pf <=T ? :Y -> Qf
lemma cspT_Ext_pre_choice_cong:
[| X = Y; !!a. a ∈ Y ==> Pf a =T Qf a |] ==> ? :X -> Pf =T ? :Y -> Qf
lemma cspT_Ext_choice_mono:
[| P1.0 <=T Q1.0; P2.0 <=T Q2.0 |] ==> P1.0 [+] P2.0 <=T Q1.0 [+] Q2.0
lemma cspT_Ext_choice_cong:
[| P1.0 =T Q1.0; P2.0 =T Q2.0 |] ==> P1.0 [+] P2.0 =T Q1.0 [+] Q2.0
lemma cspT_Int_choice_mono:
[| P1.0 <=T Q1.0; P2.0 <=T Q2.0 |] ==> P1.0 |~| P2.0 <=T Q1.0 |~| Q2.0
lemma cspT_Int_choice_cong:
[| P1.0 =T Q1.0; P2.0 =T Q2.0 |] ==> P1.0 |~| P2.0 =T Q1.0 |~| Q2.0
lemma cspT_Rep_int_choice_mono0:
[| C1.0 = C2.0; !!c. c ∈ C2.0 ==> Pf c <=T Qf c |] ==> !! :C1.0 .. Pf <=T !! :C2.0 .. Qf
lemma cspT_Rep_int_choice_cong0:
[| C1.0 = C2.0; !!c. c ∈ C2.0 ==> Pf c =T Qf c |] ==> !! :C1.0 .. Pf =T !! :C2.0 .. Qf
lemma cspT_Rep_int_choice_mono_fun:
[| inj f; X = Y; !!a. a ∈ Y ==> Pf a <=T Qf a |] ==> !!<f> :X .. Pf <=T !!<f> :Y .. Qf
lemma cspT_Rep_int_choice_cong_fun:
[| inj f; X = Y; !!a. a ∈ Y ==> Pf a =T Qf a |] ==> !!<f> :X .. Pf =T !!<f> :Y .. Qf
lemma cspT_Rep_int_choice_mono_set:
[| Xs = Ys; !!X. X ∈ Ys ==> Pf X <=T Qf X |] ==> !set :Xs .. Pf <=T !set :Ys .. Qf
lemma cspT_Rep_int_choice_cong_set:
[| Xs = Ys; !!X. X ∈ Ys ==> Pf X =T Qf X |] ==> !set :Xs .. Pf =T !set :Ys .. Qf
lemma cspT_Rep_int_choice_mono_nat:
[| N1.0 = N2.0; !!n. n ∈ N2.0 ==> Pf n <=T Qf n |] ==> !nat :N1.0 .. Pf <=T !nat :N2.0 .. Qf
lemma cspT_Rep_int_choice_cong_nat:
[| N1.0 = N2.0; !!n. n ∈ N2.0 ==> Pf n =T Qf n |] ==> !nat :N1.0 .. Pf =T !nat :N2.0 .. Qf
lemma cspT_Rep_int_choice_mono_com:
[| X = Y; !!a. a ∈ Y ==> Pf a <=T Qf a |] ==> ! :X .. Pf <=T ! :Y .. Qf
lemma cspT_Rep_int_choice_cong_com:
[| X = Y; !!a. a ∈ Y ==> Pf a =T Qf a |] ==> ! :X .. Pf =T ! :Y .. Qf
lemma cspT_Rep_int_choice_mono_f:
[| inj f; X = Y; !!a. a ∈ Y ==> Pf a <=T Qf a |] ==> !<f> :X .. Pf <=T !<f> :Y .. Qf
lemma cspT_Rep_int_choice_cong_f:
[| inj f; X = Y; !!a. a ∈ Y ==> Pf a =T Qf a |] ==> !<f> :X .. Pf =T !<f> :Y .. Qf
lemmas cspT_Rep_int_choice_mono:
[| C1.0 = C2.0; !!c. c ∈ C2.0 ==> Pf c <=T Qf c |] ==> !! :C1.0 .. Pf <=T !! :C2.0 .. Qf
[| X = Y; !!a. a ∈ Y ==> Pf a <=T Qf a |] ==> ! :X .. Pf <=T ! :Y .. Qf
[| Xs = Ys; !!X. X ∈ Ys ==> Pf X <=T Qf X |] ==> !set :Xs .. Pf <=T !set :Ys .. Qf
[| N1.0 = N2.0; !!n. n ∈ N2.0 ==> Pf n <=T Qf n |] ==> !nat :N1.0 .. Pf <=T !nat :N2.0 .. Qf
[| inj f; X = Y; !!a. a ∈ Y ==> Pf a <=T Qf a |] ==> !<f> :X .. Pf <=T !<f> :Y .. Qf
lemmas cspT_Rep_int_choice_mono:
[| C1.0 = C2.0; !!c. c ∈ C2.0 ==> Pf c <=T Qf c |] ==> !! :C1.0 .. Pf <=T !! :C2.0 .. Qf
[| X = Y; !!a. a ∈ Y ==> Pf a <=T Qf a |] ==> ! :X .. Pf <=T ! :Y .. Qf
[| Xs = Ys; !!X. X ∈ Ys ==> Pf X <=T Qf X |] ==> !set :Xs .. Pf <=T !set :Ys .. Qf
[| N1.0 = N2.0; !!n. n ∈ N2.0 ==> Pf n <=T Qf n |] ==> !nat :N1.0 .. Pf <=T !nat :N2.0 .. Qf
[| inj f; X = Y; !!a. a ∈ Y ==> Pf a <=T Qf a |] ==> !<f> :X .. Pf <=T !<f> :Y .. Qf
lemmas cspT_Rep_int_choice_cong:
[| C1.0 = C2.0; !!c. c ∈ C2.0 ==> Pf c =T Qf c |] ==> !! :C1.0 .. Pf =T !! :C2.0 .. Qf
[| X = Y; !!a. a ∈ Y ==> Pf a =T Qf a |] ==> ! :X .. Pf =T ! :Y .. Qf
[| Xs = Ys; !!X. X ∈ Ys ==> Pf X =T Qf X |] ==> !set :Xs .. Pf =T !set :Ys .. Qf
[| N1.0 = N2.0; !!n. n ∈ N2.0 ==> Pf n =T Qf n |] ==> !nat :N1.0 .. Pf =T !nat :N2.0 .. Qf
[| inj f; X = Y; !!a. a ∈ Y ==> Pf a =T Qf a |] ==> !<f> :X .. Pf =T !<f> :Y .. Qf
lemmas cspT_Rep_int_choice_cong:
[| C1.0 = C2.0; !!c. c ∈ C2.0 ==> Pf c =T Qf c |] ==> !! :C1.0 .. Pf =T !! :C2.0 .. Qf
[| X = Y; !!a. a ∈ Y ==> Pf a =T Qf a |] ==> ! :X .. Pf =T ! :Y .. Qf
[| Xs = Ys; !!X. X ∈ Ys ==> Pf X =T Qf X |] ==> !set :Xs .. Pf =T !set :Ys .. Qf
[| N1.0 = N2.0; !!n. n ∈ N2.0 ==> Pf n =T Qf n |] ==> !nat :N1.0 .. Pf =T !nat :N2.0 .. Qf
[| inj f; X = Y; !!a. a ∈ Y ==> Pf a =T Qf a |] ==> !<f> :X .. Pf =T !<f> :Y .. Qf
lemma cspT_IF_mono:
[| b1.0 = b2.0; P1.0 <=T Q1.0; P2.0 <=T Q2.0 |] ==> IF b1.0 THEN P1.0 ELSE P2.0 <=T IF b2.0 THEN Q1.0 ELSE Q2.0
lemma cspT_IF_cong:
[| b1.0 = b2.0; P1.0 =T Q1.0; P2.0 =T Q2.0 |] ==> IF b1.0 THEN P1.0 ELSE P2.0 =T IF b2.0 THEN Q1.0 ELSE Q2.0
lemma cspT_Parallel_mono:
[| X = Y; P1.0 <=T Q1.0; P2.0 <=T Q2.0 |] ==> P1.0 |[X]| P2.0 <=T Q1.0 |[Y]| Q2.0
lemma cspT_Parallel_cong:
[| X = Y; P1.0 =T Q1.0; P2.0 =T Q2.0 |] ==> P1.0 |[X]| P2.0 =T Q1.0 |[Y]| Q2.0
lemma cspT_Hiding_mono:
[| X = Y; P <=T Q |] ==> P -- X <=T Q -- Y
lemma cspT_Hiding_cong:
[| X = Y; P =T Q |] ==> P -- X =T Q -- Y
lemma cspT_Renaming_mono:
[| r1.0 = r2.0; P <=T Q |] ==> P [[r1.0]] <=T Q [[r2.0]]
lemma cspT_Renaming_cong:
[| r1.0 = r2.0; P =T Q |] ==> P [[r1.0]] =T Q [[r2.0]]
lemma cspT_Seq_compo_mono:
[| P1.0 <=T Q1.0; P2.0 <=T Q2.0 |] ==> P1.0 ;; P2.0 <=T Q1.0 ;; Q2.0
lemma cspT_Seq_compo_cong:
[| P1.0 =T Q1.0; P2.0 =T Q2.0 |] ==> P1.0 ;; P2.0 =T Q1.0 ;; Q2.0
lemma cspT_Depth_rest_mono:
[| n1.0 = n2.0; P <=T Q |] ==> P |. n1.0 <=T Q |. n2.0
lemma cspT_Depth_rest_cong:
[| n1.0 = n2.0; P =T Q |] ==> P |. n1.0 =T Q |. n2.0
lemma cspT_Timeout_mono:
[| P1.0 <=T Q1.0; P2.0 <=T Q2.0 |] ==> P1.0 [> P2.0 <=T Q1.0 [> Q2.0
lemma cspT_Timeout_cong:
[| P1.0 =T Q1.0; P2.0 =T Q2.0 |] ==> P1.0 [> P2.0 =T Q1.0 [> Q2.0
lemmas cspT_free_mono:
[| P1.0 <=T Q1.0; P2.0 <=T Q2.0 |] ==> P1.0 [+] P2.0 <=T Q1.0 [+] Q2.0
[| P1.0 <=T Q1.0; P2.0 <=T Q2.0 |] ==> P1.0 |~| P2.0 <=T Q1.0 |~| Q2.0
[| X = Y; P1.0 <=T Q1.0; P2.0 <=T Q2.0 |] ==> P1.0 |[X]| P2.0 <=T Q1.0 |[Y]| Q2.0
[| X = Y; P <=T Q |] ==> P -- X <=T Q -- Y
[| r1.0 = r2.0; P <=T Q |] ==> P [[r1.0]] <=T Q [[r2.0]]
[| P1.0 <=T Q1.0; P2.0 <=T Q2.0 |] ==> P1.0 ;; P2.0 <=T Q1.0 ;; Q2.0
[| n1.0 = n2.0; P <=T Q |] ==> P |. n1.0 <=T Q |. n2.0
lemmas cspT_free_mono:
[| P1.0 <=T Q1.0; P2.0 <=T Q2.0 |] ==> P1.0 [+] P2.0 <=T Q1.0 [+] Q2.0
[| P1.0 <=T Q1.0; P2.0 <=T Q2.0 |] ==> P1.0 |~| P2.0 <=T Q1.0 |~| Q2.0
[| X = Y; P1.0 <=T Q1.0; P2.0 <=T Q2.0 |] ==> P1.0 |[X]| P2.0 <=T Q1.0 |[Y]| Q2.0
[| X = Y; P <=T Q |] ==> P -- X <=T Q -- Y
[| r1.0 = r2.0; P <=T Q |] ==> P [[r1.0]] <=T Q [[r2.0]]
[| P1.0 <=T Q1.0; P2.0 <=T Q2.0 |] ==> P1.0 ;; P2.0 <=T Q1.0 ;; Q2.0
[| n1.0 = n2.0; P <=T Q |] ==> P |. n1.0 <=T Q |. n2.0
lemmas cspT_mono:
[| P1.0 <=T Q1.0; P2.0 <=T Q2.0 |] ==> P1.0 [+] P2.0 <=T Q1.0 [+] Q2.0
[| P1.0 <=T Q1.0; P2.0 <=T Q2.0 |] ==> P1.0 |~| P2.0 <=T Q1.0 |~| Q2.0
[| X = Y; P1.0 <=T Q1.0; P2.0 <=T Q2.0 |] ==> P1.0 |[X]| P2.0 <=T Q1.0 |[Y]| Q2.0
[| X = Y; P <=T Q |] ==> P -- X <=T Q -- Y
[| r1.0 = r2.0; P <=T Q |] ==> P [[r1.0]] <=T Q [[r2.0]]
[| P1.0 <=T Q1.0; P2.0 <=T Q2.0 |] ==> P1.0 ;; P2.0 <=T Q1.0 ;; Q2.0
[| n1.0 = n2.0; P <=T Q |] ==> P |. n1.0 <=T Q |. n2.0
[| a = b; P <=T Q |] ==> a -> P <=T b -> Q
[| X = Y; !!a. a ∈ Y ==> Pf a <=T Qf a |] ==> ? :X -> Pf <=T ? :Y -> Qf
[| C1.0 = C2.0; !!c. c ∈ C2.0 ==> Pf c <=T Qf c |] ==> !! :C1.0 .. Pf <=T !! :C2.0 .. Qf
[| X = Y; !!a. a ∈ Y ==> Pf a <=T Qf a |] ==> ! :X .. Pf <=T ! :Y .. Qf
[| Xs = Ys; !!X. X ∈ Ys ==> Pf X <=T Qf X |] ==> !set :Xs .. Pf <=T !set :Ys .. Qf
[| N1.0 = N2.0; !!n. n ∈ N2.0 ==> Pf n <=T Qf n |] ==> !nat :N1.0 .. Pf <=T !nat :N2.0 .. Qf
[| inj f; X = Y; !!a. a ∈ Y ==> Pf a <=T Qf a |] ==> !<f> :X .. Pf <=T !<f> :Y .. Qf
[| b1.0 = b2.0; P1.0 <=T Q1.0; P2.0 <=T Q2.0 |] ==> IF b1.0 THEN P1.0 ELSE P2.0 <=T IF b2.0 THEN Q1.0 ELSE Q2.0
lemmas cspT_mono:
[| P1.0 <=T Q1.0; P2.0 <=T Q2.0 |] ==> P1.0 [+] P2.0 <=T Q1.0 [+] Q2.0
[| P1.0 <=T Q1.0; P2.0 <=T Q2.0 |] ==> P1.0 |~| P2.0 <=T Q1.0 |~| Q2.0
[| X = Y; P1.0 <=T Q1.0; P2.0 <=T Q2.0 |] ==> P1.0 |[X]| P2.0 <=T Q1.0 |[Y]| Q2.0
[| X = Y; P <=T Q |] ==> P -- X <=T Q -- Y
[| r1.0 = r2.0; P <=T Q |] ==> P [[r1.0]] <=T Q [[r2.0]]
[| P1.0 <=T Q1.0; P2.0 <=T Q2.0 |] ==> P1.0 ;; P2.0 <=T Q1.0 ;; Q2.0
[| n1.0 = n2.0; P <=T Q |] ==> P |. n1.0 <=T Q |. n2.0
[| a = b; P <=T Q |] ==> a -> P <=T b -> Q
[| X = Y; !!a. a ∈ Y ==> Pf a <=T Qf a |] ==> ? :X -> Pf <=T ? :Y -> Qf
[| C1.0 = C2.0; !!c. c ∈ C2.0 ==> Pf c <=T Qf c |] ==> !! :C1.0 .. Pf <=T !! :C2.0 .. Qf
[| X = Y; !!a. a ∈ Y ==> Pf a <=T Qf a |] ==> ! :X .. Pf <=T ! :Y .. Qf
[| Xs = Ys; !!X. X ∈ Ys ==> Pf X <=T Qf X |] ==> !set :Xs .. Pf <=T !set :Ys .. Qf
[| N1.0 = N2.0; !!n. n ∈ N2.0 ==> Pf n <=T Qf n |] ==> !nat :N1.0 .. Pf <=T !nat :N2.0 .. Qf
[| inj f; X = Y; !!a. a ∈ Y ==> Pf a <=T Qf a |] ==> !<f> :X .. Pf <=T !<f> :Y .. Qf
[| b1.0 = b2.0; P1.0 <=T Q1.0; P2.0 <=T Q2.0 |] ==> IF b1.0 THEN P1.0 ELSE P2.0 <=T IF b2.0 THEN Q1.0 ELSE Q2.0
lemmas cspT_free_cong:
[| P1.0 =T Q1.0; P2.0 =T Q2.0 |] ==> P1.0 [+] P2.0 =T Q1.0 [+] Q2.0
[| P1.0 =T Q1.0; P2.0 =T Q2.0 |] ==> P1.0 |~| P2.0 =T Q1.0 |~| Q2.0
[| X = Y; P1.0 =T Q1.0; P2.0 =T Q2.0 |] ==> P1.0 |[X]| P2.0 =T Q1.0 |[Y]| Q2.0
[| X = Y; P =T Q |] ==> P -- X =T Q -- Y
[| r1.0 = r2.0; P =T Q |] ==> P [[r1.0]] =T Q [[r2.0]]
[| P1.0 =T Q1.0; P2.0 =T Q2.0 |] ==> P1.0 ;; P2.0 =T Q1.0 ;; Q2.0
[| n1.0 = n2.0; P =T Q |] ==> P |. n1.0 =T Q |. n2.0
lemmas cspT_free_cong:
[| P1.0 =T Q1.0; P2.0 =T Q2.0 |] ==> P1.0 [+] P2.0 =T Q1.0 [+] Q2.0
[| P1.0 =T Q1.0; P2.0 =T Q2.0 |] ==> P1.0 |~| P2.0 =T Q1.0 |~| Q2.0
[| X = Y; P1.0 =T Q1.0; P2.0 =T Q2.0 |] ==> P1.0 |[X]| P2.0 =T Q1.0 |[Y]| Q2.0
[| X = Y; P =T Q |] ==> P -- X =T Q -- Y
[| r1.0 = r2.0; P =T Q |] ==> P [[r1.0]] =T Q [[r2.0]]
[| P1.0 =T Q1.0; P2.0 =T Q2.0 |] ==> P1.0 ;; P2.0 =T Q1.0 ;; Q2.0
[| n1.0 = n2.0; P =T Q |] ==> P |. n1.0 =T Q |. n2.0
lemmas cspT_cong:
[| P1.0 =T Q1.0; P2.0 =T Q2.0 |] ==> P1.0 [+] P2.0 =T Q1.0 [+] Q2.0
[| P1.0 =T Q1.0; P2.0 =T Q2.0 |] ==> P1.0 |~| P2.0 =T Q1.0 |~| Q2.0
[| X = Y; P1.0 =T Q1.0; P2.0 =T Q2.0 |] ==> P1.0 |[X]| P2.0 =T Q1.0 |[Y]| Q2.0
[| X = Y; P =T Q |] ==> P -- X =T Q -- Y
[| r1.0 = r2.0; P =T Q |] ==> P [[r1.0]] =T Q [[r2.0]]
[| P1.0 =T Q1.0; P2.0 =T Q2.0 |] ==> P1.0 ;; P2.0 =T Q1.0 ;; Q2.0
[| n1.0 = n2.0; P =T Q |] ==> P |. n1.0 =T Q |. n2.0
[| a = b; P =T Q |] ==> a -> P =T b -> Q
[| X = Y; !!a. a ∈ Y ==> Pf a =T Qf a |] ==> ? :X -> Pf =T ? :Y -> Qf
[| C1.0 = C2.0; !!c. c ∈ C2.0 ==> Pf c =T Qf c |] ==> !! :C1.0 .. Pf =T !! :C2.0 .. Qf
[| X = Y; !!a. a ∈ Y ==> Pf a =T Qf a |] ==> ! :X .. Pf =T ! :Y .. Qf
[| Xs = Ys; !!X. X ∈ Ys ==> Pf X =T Qf X |] ==> !set :Xs .. Pf =T !set :Ys .. Qf
[| N1.0 = N2.0; !!n. n ∈ N2.0 ==> Pf n =T Qf n |] ==> !nat :N1.0 .. Pf =T !nat :N2.0 .. Qf
[| inj f; X = Y; !!a. a ∈ Y ==> Pf a =T Qf a |] ==> !<f> :X .. Pf =T !<f> :Y .. Qf
[| b1.0 = b2.0; P1.0 =T Q1.0; P2.0 =T Q2.0 |] ==> IF b1.0 THEN P1.0 ELSE P2.0 =T IF b2.0 THEN Q1.0 ELSE Q2.0
lemmas cspT_cong:
[| P1.0 =T Q1.0; P2.0 =T Q2.0 |] ==> P1.0 [+] P2.0 =T Q1.0 [+] Q2.0
[| P1.0 =T Q1.0; P2.0 =T Q2.0 |] ==> P1.0 |~| P2.0 =T Q1.0 |~| Q2.0
[| X = Y; P1.0 =T Q1.0; P2.0 =T Q2.0 |] ==> P1.0 |[X]| P2.0 =T Q1.0 |[Y]| Q2.0
[| X = Y; P =T Q |] ==> P -- X =T Q -- Y
[| r1.0 = r2.0; P =T Q |] ==> P [[r1.0]] =T Q [[r2.0]]
[| P1.0 =T Q1.0; P2.0 =T Q2.0 |] ==> P1.0 ;; P2.0 =T Q1.0 ;; Q2.0
[| n1.0 = n2.0; P =T Q |] ==> P |. n1.0 =T Q |. n2.0
[| a = b; P =T Q |] ==> a -> P =T b -> Q
[| X = Y; !!a. a ∈ Y ==> Pf a =T Qf a |] ==> ? :X -> Pf =T ? :Y -> Qf
[| C1.0 = C2.0; !!c. c ∈ C2.0 ==> Pf c =T Qf c |] ==> !! :C1.0 .. Pf =T !! :C2.0 .. Qf
[| X = Y; !!a. a ∈ Y ==> Pf a =T Qf a |] ==> ! :X .. Pf =T ! :Y .. Qf
[| Xs = Ys; !!X. X ∈ Ys ==> Pf X =T Qf X |] ==> !set :Xs .. Pf =T !set :Ys .. Qf
[| N1.0 = N2.0; !!n. n ∈ N2.0 ==> Pf n =T Qf n |] ==> !nat :N1.0 .. Pf =T !nat :N2.0 .. Qf
[| inj f; X = Y; !!a. a ∈ Y ==> Pf a =T Qf a |] ==> !<f> :X .. Pf =T !<f> :Y .. Qf
[| b1.0 = b2.0; P1.0 =T Q1.0; P2.0 =T Q2.0 |] ==> IF b1.0 THEN P1.0 ELSE P2.0 =T IF b2.0 THEN Q1.0 ELSE Q2.0
lemmas cspT_free_decompo:
[| P1.0 <=T Q1.0; P2.0 <=T Q2.0 |] ==> P1.0 [+] P2.0 <=T Q1.0 [+] Q2.0
[| P1.0 <=T Q1.0; P2.0 <=T Q2.0 |] ==> P1.0 |~| P2.0 <=T Q1.0 |~| Q2.0
[| X = Y; P1.0 <=T Q1.0; P2.0 <=T Q2.0 |] ==> P1.0 |[X]| P2.0 <=T Q1.0 |[Y]| Q2.0
[| X = Y; P <=T Q |] ==> P -- X <=T Q -- Y
[| r1.0 = r2.0; P <=T Q |] ==> P [[r1.0]] <=T Q [[r2.0]]
[| P1.0 <=T Q1.0; P2.0 <=T Q2.0 |] ==> P1.0 ;; P2.0 <=T Q1.0 ;; Q2.0
[| n1.0 = n2.0; P <=T Q |] ==> P |. n1.0 <=T Q |. n2.0
[| P1.0 =T Q1.0; P2.0 =T Q2.0 |] ==> P1.0 [+] P2.0 =T Q1.0 [+] Q2.0
[| P1.0 =T Q1.0; P2.0 =T Q2.0 |] ==> P1.0 |~| P2.0 =T Q1.0 |~| Q2.0
[| X = Y; P1.0 =T Q1.0; P2.0 =T Q2.0 |] ==> P1.0 |[X]| P2.0 =T Q1.0 |[Y]| Q2.0
[| X = Y; P =T Q |] ==> P -- X =T Q -- Y
[| r1.0 = r2.0; P =T Q |] ==> P [[r1.0]] =T Q [[r2.0]]
[| P1.0 =T Q1.0; P2.0 =T Q2.0 |] ==> P1.0 ;; P2.0 =T Q1.0 ;; Q2.0
[| n1.0 = n2.0; P =T Q |] ==> P |. n1.0 =T Q |. n2.0
lemmas cspT_free_decompo:
[| P1.0 <=T Q1.0; P2.0 <=T Q2.0 |] ==> P1.0 [+] P2.0 <=T Q1.0 [+] Q2.0
[| P1.0 <=T Q1.0; P2.0 <=T Q2.0 |] ==> P1.0 |~| P2.0 <=T Q1.0 |~| Q2.0
[| X = Y; P1.0 <=T Q1.0; P2.0 <=T Q2.0 |] ==> P1.0 |[X]| P2.0 <=T Q1.0 |[Y]| Q2.0
[| X = Y; P <=T Q |] ==> P -- X <=T Q -- Y
[| r1.0 = r2.0; P <=T Q |] ==> P [[r1.0]] <=T Q [[r2.0]]
[| P1.0 <=T Q1.0; P2.0 <=T Q2.0 |] ==> P1.0 ;; P2.0 <=T Q1.0 ;; Q2.0
[| n1.0 = n2.0; P <=T Q |] ==> P |. n1.0 <=T Q |. n2.0
[| P1.0 =T Q1.0; P2.0 =T Q2.0 |] ==> P1.0 [+] P2.0 =T Q1.0 [+] Q2.0
[| P1.0 =T Q1.0; P2.0 =T Q2.0 |] ==> P1.0 |~| P2.0 =T Q1.0 |~| Q2.0
[| X = Y; P1.0 =T Q1.0; P2.0 =T Q2.0 |] ==> P1.0 |[X]| P2.0 =T Q1.0 |[Y]| Q2.0
[| X = Y; P =T Q |] ==> P -- X =T Q -- Y
[| r1.0 = r2.0; P =T Q |] ==> P [[r1.0]] =T Q [[r2.0]]
[| P1.0 =T Q1.0; P2.0 =T Q2.0 |] ==> P1.0 ;; P2.0 =T Q1.0 ;; Q2.0
[| n1.0 = n2.0; P =T Q |] ==> P |. n1.0 =T Q |. n2.0
lemmas cspT_decompo:
[| P1.0 <=T Q1.0; P2.0 <=T Q2.0 |] ==> P1.0 [+] P2.0 <=T Q1.0 [+] Q2.0
[| P1.0 <=T Q1.0; P2.0 <=T Q2.0 |] ==> P1.0 |~| P2.0 <=T Q1.0 |~| Q2.0
[| X = Y; P1.0 <=T Q1.0; P2.0 <=T Q2.0 |] ==> P1.0 |[X]| P2.0 <=T Q1.0 |[Y]| Q2.0
[| X = Y; P <=T Q |] ==> P -- X <=T Q -- Y
[| r1.0 = r2.0; P <=T Q |] ==> P [[r1.0]] <=T Q [[r2.0]]
[| P1.0 <=T Q1.0; P2.0 <=T Q2.0 |] ==> P1.0 ;; P2.0 <=T Q1.0 ;; Q2.0
[| n1.0 = n2.0; P <=T Q |] ==> P |. n1.0 <=T Q |. n2.0
[| a = b; P <=T Q |] ==> a -> P <=T b -> Q
[| X = Y; !!a. a ∈ Y ==> Pf a <=T Qf a |] ==> ? :X -> Pf <=T ? :Y -> Qf
[| C1.0 = C2.0; !!c. c ∈ C2.0 ==> Pf c <=T Qf c |] ==> !! :C1.0 .. Pf <=T !! :C2.0 .. Qf
[| X = Y; !!a. a ∈ Y ==> Pf a <=T Qf a |] ==> ! :X .. Pf <=T ! :Y .. Qf
[| Xs = Ys; !!X. X ∈ Ys ==> Pf X <=T Qf X |] ==> !set :Xs .. Pf <=T !set :Ys .. Qf
[| N1.0 = N2.0; !!n. n ∈ N2.0 ==> Pf n <=T Qf n |] ==> !nat :N1.0 .. Pf <=T !nat :N2.0 .. Qf
[| inj f; X = Y; !!a. a ∈ Y ==> Pf a <=T Qf a |] ==> !<f> :X .. Pf <=T !<f> :Y .. Qf
[| b1.0 = b2.0; P1.0 <=T Q1.0; P2.0 <=T Q2.0 |] ==> IF b1.0 THEN P1.0 ELSE P2.0 <=T IF b2.0 THEN Q1.0 ELSE Q2.0
[| P1.0 =T Q1.0; P2.0 =T Q2.0 |] ==> P1.0 [+] P2.0 =T Q1.0 [+] Q2.0
[| P1.0 =T Q1.0; P2.0 =T Q2.0 |] ==> P1.0 |~| P2.0 =T Q1.0 |~| Q2.0
[| X = Y; P1.0 =T Q1.0; P2.0 =T Q2.0 |] ==> P1.0 |[X]| P2.0 =T Q1.0 |[Y]| Q2.0
[| X = Y; P =T Q |] ==> P -- X =T Q -- Y
[| r1.0 = r2.0; P =T Q |] ==> P [[r1.0]] =T Q [[r2.0]]
[| P1.0 =T Q1.0; P2.0 =T Q2.0 |] ==> P1.0 ;; P2.0 =T Q1.0 ;; Q2.0
[| n1.0 = n2.0; P =T Q |] ==> P |. n1.0 =T Q |. n2.0
[| a = b; P =T Q |] ==> a -> P =T b -> Q
[| X = Y; !!a. a ∈ Y ==> Pf a =T Qf a |] ==> ? :X -> Pf =T ? :Y -> Qf
[| C1.0 = C2.0; !!c. c ∈ C2.0 ==> Pf c =T Qf c |] ==> !! :C1.0 .. Pf =T !! :C2.0 .. Qf
[| X = Y; !!a. a ∈ Y ==> Pf a =T Qf a |] ==> ! :X .. Pf =T ! :Y .. Qf
[| Xs = Ys; !!X. X ∈ Ys ==> Pf X =T Qf X |] ==> !set :Xs .. Pf =T !set :Ys .. Qf
[| N1.0 = N2.0; !!n. n ∈ N2.0 ==> Pf n =T Qf n |] ==> !nat :N1.0 .. Pf =T !nat :N2.0 .. Qf
[| inj f; X = Y; !!a. a ∈ Y ==> Pf a =T Qf a |] ==> !<f> :X .. Pf =T !<f> :Y .. Qf
[| b1.0 = b2.0; P1.0 =T Q1.0; P2.0 =T Q2.0 |] ==> IF b1.0 THEN P1.0 ELSE P2.0 =T IF b2.0 THEN Q1.0 ELSE Q2.0
lemmas cspT_decompo:
[| P1.0 <=T Q1.0; P2.0 <=T Q2.0 |] ==> P1.0 [+] P2.0 <=T Q1.0 [+] Q2.0
[| P1.0 <=T Q1.0; P2.0 <=T Q2.0 |] ==> P1.0 |~| P2.0 <=T Q1.0 |~| Q2.0
[| X = Y; P1.0 <=T Q1.0; P2.0 <=T Q2.0 |] ==> P1.0 |[X]| P2.0 <=T Q1.0 |[Y]| Q2.0
[| X = Y; P <=T Q |] ==> P -- X <=T Q -- Y
[| r1.0 = r2.0; P <=T Q |] ==> P [[r1.0]] <=T Q [[r2.0]]
[| P1.0 <=T Q1.0; P2.0 <=T Q2.0 |] ==> P1.0 ;; P2.0 <=T Q1.0 ;; Q2.0
[| n1.0 = n2.0; P <=T Q |] ==> P |. n1.0 <=T Q |. n2.0
[| a = b; P <=T Q |] ==> a -> P <=T b -> Q
[| X = Y; !!a. a ∈ Y ==> Pf a <=T Qf a |] ==> ? :X -> Pf <=T ? :Y -> Qf
[| C1.0 = C2.0; !!c. c ∈ C2.0 ==> Pf c <=T Qf c |] ==> !! :C1.0 .. Pf <=T !! :C2.0 .. Qf
[| X = Y; !!a. a ∈ Y ==> Pf a <=T Qf a |] ==> ! :X .. Pf <=T ! :Y .. Qf
[| Xs = Ys; !!X. X ∈ Ys ==> Pf X <=T Qf X |] ==> !set :Xs .. Pf <=T !set :Ys .. Qf
[| N1.0 = N2.0; !!n. n ∈ N2.0 ==> Pf n <=T Qf n |] ==> !nat :N1.0 .. Pf <=T !nat :N2.0 .. Qf
[| inj f; X = Y; !!a. a ∈ Y ==> Pf a <=T Qf a |] ==> !<f> :X .. Pf <=T !<f> :Y .. Qf
[| b1.0 = b2.0; P1.0 <=T Q1.0; P2.0 <=T Q2.0 |] ==> IF b1.0 THEN P1.0 ELSE P2.0 <=T IF b2.0 THEN Q1.0 ELSE Q2.0
[| P1.0 =T Q1.0; P2.0 =T Q2.0 |] ==> P1.0 [+] P2.0 =T Q1.0 [+] Q2.0
[| P1.0 =T Q1.0; P2.0 =T Q2.0 |] ==> P1.0 |~| P2.0 =T Q1.0 |~| Q2.0
[| X = Y; P1.0 =T Q1.0; P2.0 =T Q2.0 |] ==> P1.0 |[X]| P2.0 =T Q1.0 |[Y]| Q2.0
[| X = Y; P =T Q |] ==> P -- X =T Q -- Y
[| r1.0 = r2.0; P =T Q |] ==> P [[r1.0]] =T Q [[r2.0]]
[| P1.0 =T Q1.0; P2.0 =T Q2.0 |] ==> P1.0 ;; P2.0 =T Q1.0 ;; Q2.0
[| n1.0 = n2.0; P =T Q |] ==> P |. n1.0 =T Q |. n2.0
[| a = b; P =T Q |] ==> a -> P =T b -> Q
[| X = Y; !!a. a ∈ Y ==> Pf a =T Qf a |] ==> ? :X -> Pf =T ? :Y -> Qf
[| C1.0 = C2.0; !!c. c ∈ C2.0 ==> Pf c =T Qf c |] ==> !! :C1.0 .. Pf =T !! :C2.0 .. Qf
[| X = Y; !!a. a ∈ Y ==> Pf a =T Qf a |] ==> ! :X .. Pf =T ! :Y .. Qf
[| Xs = Ys; !!X. X ∈ Ys ==> Pf X =T Qf X |] ==> !set :Xs .. Pf =T !set :Ys .. Qf
[| N1.0 = N2.0; !!n. n ∈ N2.0 ==> Pf n =T Qf n |] ==> !nat :N1.0 .. Pf =T !nat :N2.0 .. Qf
[| inj f; X = Y; !!a. a ∈ Y ==> Pf a =T Qf a |] ==> !<f> :X .. Pf =T !<f> :Y .. Qf
[| b1.0 = b2.0; P1.0 =T Q1.0; P2.0 =T Q2.0 |] ==> IF b1.0 THEN P1.0 ELSE P2.0 =T IF b2.0 THEN Q1.0 ELSE Q2.0
lemmas cspT_rm_head_mono:
[| a = b; P <=T Q |] ==> a -> P <=T b -> Q
[| X = Y; !!a. a ∈ Y ==> Pf a <=T Qf a |] ==> ? :X -> Pf <=T ? :Y -> Qf
lemmas cspT_rm_head_mono:
[| a = b; P <=T Q |] ==> a -> P <=T b -> Q
[| X = Y; !!a. a ∈ Y ==> Pf a <=T Qf a |] ==> ? :X -> Pf <=T ? :Y -> Qf
lemmas cspT_rm_head_cong:
[| a = b; P =T Q |] ==> a -> P =T b -> Q
[| X = Y; !!a. a ∈ Y ==> Pf a =T Qf a |] ==> ? :X -> Pf =T ? :Y -> Qf
lemmas cspT_rm_head_cong:
[| a = b; P =T Q |] ==> a -> P =T b -> Q
[| X = Y; !!a. a ∈ Y ==> Pf a =T Qf a |] ==> ? :X -> Pf =T ? :Y -> Qf
lemmas cspT_rm_head:
[| a = b; P <=T Q |] ==> a -> P <=T b -> Q
[| X = Y; !!a. a ∈ Y ==> Pf a <=T Qf a |] ==> ? :X -> Pf <=T ? :Y -> Qf
[| a = b; P =T Q |] ==> a -> P =T b -> Q
[| X = Y; !!a. a ∈ Y ==> Pf a =T Qf a |] ==> ? :X -> Pf =T ? :Y -> Qf
lemmas cspT_rm_head:
[| a = b; P <=T Q |] ==> a -> P <=T b -> Q
[| X = Y; !!a. a ∈ Y ==> Pf a <=T Qf a |] ==> ? :X -> Pf <=T ? :Y -> Qf
[| a = b; P =T Q |] ==> a -> P =T b -> Q
[| X = Y; !!a. a ∈ Y ==> Pf a =T Qf a |] ==> ? :X -> Pf =T ? :Y -> Qf
lemma cspT_Rep_int_choice_decompo_ALL_EX_ref:
∀c2∈C2.0. ∃c1∈C1.0. Pf c1 <=T Qf c2 ==> !! :C1.0 .. Pf <=T !! :C2.0 .. Qf
lemma cspT_Rep_int_choice_decompo_ALL_EX_eq:
[| ∀c1∈C1.0. ∃c2∈C2.0. Pf c1 =T Qf c2; ∀c2∈C2.0. ∃c1∈C1.0. Pf c1 =T Qf c2 |] ==> !! :C1.0 .. Pf =T !! :C2.0 .. Qf
lemmas cspT_Rep_int_choice_decompo_ALL_EX:
∀c2∈C2.0. ∃c1∈C1.0. Pf c1 <=T Qf c2 ==> !! :C1.0 .. Pf <=T !! :C2.0 .. Qf
[| ∀c1∈C1.0. ∃c2∈C2.0. Pf c1 =T Qf c2; ∀c2∈C2.0. ∃c1∈C1.0. Pf c1 =T Qf c2 |] ==> !! :C1.0 .. Pf =T !! :C2.0 .. Qf
lemmas cspT_Rep_int_choice_decompo_ALL_EX:
∀c2∈C2.0. ∃c1∈C1.0. Pf c1 <=T Qf c2 ==> !! :C1.0 .. Pf <=T !! :C2.0 .. Qf
[| ∀c1∈C1.0. ∃c2∈C2.0. Pf c1 =T Qf c2; ∀c2∈C2.0. ∃c1∈C1.0. Pf c1 =T Qf c2 |] ==> !! :C1.0 .. Pf =T !! :C2.0 .. Qf