(*<*)[]\^><>v]\^supv) = (x1 ↔ c1" using assms flip_subst_vby auto theoryIVSubst imports Syntax begin (*>*)
chapter \<>Variable
text ‹[[atom z1]]lst. c1 = [ato z2]]lst. c2"
java.lang.StringIndexOutOfBoundsException: Index 25 out of bounds for length 25
‹ (c1[z1::=[x]v) = c1'[z1'::=[x']v"
has_subst_v = fs +
fixes subst_v :: "'a::fs ==> x ==> v ==> 'a::fs" (‹ c1[z1::=[x]\^sub>v" using assms fresh by simp
assumes fresh_subst_v_if: "y ♯ a ∧ y ♯sharp> v ∧ (y ♯ a ∨ y = atom x))"
and forget_subst_v[simp]: "atom x ♯ a ==> subst_v a x v = a"
and subst_v_id[simp]: "subst_v a x (V_var x) = a"
and eqvt[simp,eqvt]: "(p::perm) ∙ (subst_v a x v) = (subst_v (p ∙ a) (p ∙x) (p ∙
and flip_subst_v[simp]: "atom x ♯ c ==> ((x ↔ z) ∙ ".. ==c1[z1v" ussubst_v_si fresh_prod4 ass by auto
java.lang.NullPointerException
subst_v_flfinally show ?thes by auto
fixes z1::x z2::x and x1::x and x2:::x
assumes "[[atom z1]]lst. c1 = [[atom z2]]lst. c2"
and<>Values
java.lang.NullPointerException
-
v]z1) ∙
moreover have "(c2[z2::=[x1]x ==> v" where
ultimately show ?thesis using Abs1_eq_iff_all(3)[of z1 c1 z"subst_vv (V_lit l) x v = V_lit l"
(ei bseq_iff_freeh(3) flip_commute)
subst_v_flip_eq_two:
fixes z1::x and z2::x and x1::x and x2::x
assumes "[[atom z1]]lst. c1 = [[atom z2]]lst. c2"
shows "(c1[z1::=b]V_constyid c v') x v = tyid c (su v' x v)"
java.lang.StringIndexOutOfBoundsException: Index 7 out of bounds for length 7
obtain x::x where *:"atom x ♯ (auto ip: ev_e ubt_v_rp_ef,metis v.stn_xas)
hence "(c1[z1::=[x]x ==> v" (‹ [1000,50,50] 1000)
java.lang.NullPointerException: Cannot invoke "String.equals(Object)" because "brackoff" is null
thus ?thesis using subst_v_simple_commute * fresh_prod4 by metis
subst_v_flip_eq_three:
assumes "[[atom z1]]lst. c1 = [[atom z1']]lst. c1'" and "atom x ♯ c1" and "atom x' ♯: v.induct) (auto simp: fresh_Pair)
java.lang.NullPointerException
-
have "atom x' ♯ c1[z1::=[x]v]v" using assms fresh_subst_v_if by simp
hence "(x ↔ x') ∙ (c1[z1::=[x]v]v) = c1[z1::=[x]v]v[x::=[x']su[simp]:
also have "... = c1[z1::=[x']<> v"
also have "... = c1'[z1'::=[x']v" uigsubst_v_lip_eqne[oz1 1 z'c'x'] g assms byaut
finally show ?thesis by auto
asssapyinutvrl:.nduc
‹ = subst_vv"
subst_vv :: "v \<show
"subst_vv (V_lit l) x v = V_lit l"
"subst_vv (V_var y) x v = (if x = y then v else V_var y)"
"subst_vv (V_cons tyid c v') x v = V_cons tyid c (subst_vv v' x v)"
"subst_vv (V_consp tyid c b v') x v = V_consp tyid c b (subst_vv v' x v)"
"subst_vv (V_pair v1 v2) x v = V_pair (subst_vv v1 x v ) (subst_vv v2 x v )"
by(auto simp: eqvt_def subst_vv_graph_aux_def, metis v.strong_exhaust)
(eqvt) by lexicographic_order
subst_vv_abbrev :: "v ==> x ==> v ==> v" (‹
where
"v[x::=']\<^>v≡
ubst_vv_if [simps_vv_if [simp]:
"j ♯
using supp_l_empty apply (induct t rule: v.induct,auto simp add: subst_vv.simps fresh_def, auto)
by (simp add: supp_at_base |met
java.lang.NullPointerException
by (induct tm rule: v.induct) simp_all
[simp]:
"atom j ♯ c ==> (↔ c) = c[z::=[x]v"
y(induct t levidc) (at smp:feh_Pair
suf xxan: :x
atom j <>< j ==>vvv = tm[j::=u]vv[i::=t]vv"
by (induct tm rule: v.induct) auto
subst_vv_var_flip[simp]:
fixes v::v
assumes "atom y ♯ v"
shows "(y ↔ x) ∙
using assms apply(induct v rule:v.induct)
apply auto
using l.fresh l.perm_simps l.strong_exhaust supp_l_empty permute_pure permute_list.simps fresh_def flip_fresh_fresh apply fastforce
using permute_pure apply blast+
done
v :: has_sui subst_e: "e \<>
"subst_v = subst_vv"
proof
fix j::atom and i::x and x::v and t::v
show "(j ♯ l v') ) x v = ( (A ( v' x v) )"
using fresh_subst_vv_if[of j t i x] subst_v_v_def by metis
fix a::x and tm::v and x::v
showshow a a \sharp tm \<>
using forget_subst_vv subst_v_v_def by simp
fix a::x and tm::v
show "subst_v tm a (V_var a) = tm" using subst_vv_id subst_v_v_def by simp
fix p::perm and x1::x and v::v and t1::v
show "p ∙ subst_v t1 x1 v = subst_v (p ∙ t1) (p ∙ x1) (p ∙ v)"
using subst_v_v_def by simp
fix x::x and c::v and z::x
show "atom x ♯ ( (AE_appP fb v' ) xv = ( (AE_a f b (sbst_ v' x )) )"
using subst_v_v_def by simp
fix x::x and c::v and z::x
show "atom x ♯ c ==> c[z::=[x]v]v2 x v)) )")"
using subst_v_v_def by simp
‹Expressions›
subst_ev :: "e ==> x ==> v ==> e" where
"subst_ev ( (AE_val v') ) x v = ( (AE_val (subst_vv v' x v)) )"
"subst_ev ( (AE_app f v') ) x v = ( (AE_app f (subst_vv v' x v )) )"
"subst_ev ( (AE_appP f b v') ) x v = ( (AE_appP f b (subst_vv v' x v )) )"
"subst_ev ( (AE_op opp v1 v2) ) x v = ( (AE_op opp (subst_vv v1 x v ) (subst_vv v2 x v )) )"
"subst_ev [#1 v']e x v = [#1 (subst_vv v' x v )]e"
"subst_ev [#2 v']e x v = [#2 (subst_vv v' x v )]e"
"subst_ev ( (AE_mvar u)) x v = AE_mvar u"
"subst_ev [| v' |]e xv = [1 (substvv ' x v )]\^sup>e""
"subst_ev ( AE_concat v1 v2) x v = AE_concat (subst_vv v1 x v ) (subst_vv v2 x v )"
"subst_ev ( AE_split v1 v2) x v = AE_split (subst_vv v1 x v ) (subst_vv v2 x v )"
by(simp add: eqvt_def subst_ev_graph_aux_def,auto)(meson e.strong_exhaust)
(eqvt) by lexicographic_order
java.lang.NullPointerException
where
"e[x::=v']ev≡su ( (AEu))x v A u"
size_subst_ev [simp]: "size ( subst_ev A i x) = size A"
apply (nominal_induct A avoiding: i x rule: e.strong_induct)
by auto
forget_subst_ev [simp]: "atom a ♯ A ==> subst_ev A a x = A"
apply (nominal_induct A avoiding: a x rule: e.strong_induct)
by (auto simp: fresh_at_base)
subst_ev_id [simp]: "subst_ev A a (V_var a) = A"
by (nominal_induct A avoiding: a rule: e.strong_induct) (auto simp: fresh_at_base)
fresh_subst_ev_if [simp]:
"j ♯ (subst_ev A i x ) = ((atom i ♯ A ∧ j ♯ A) ∨ (j ♯ x ∧ (j ♯ A ∨ j = atom i)))"
apply (induct A rule: e.induct)
unfolding subst_ev.simps fresh_subst_vv_if apply auto+
using pure_fresh fresh_opp_all apply metis+
done
subst_ev_commute [simp]:
"atom j ♯ A ==> (A[i::=t]ev)[j::=u]ev = A[i::=t[j::=u]vv]ev"
by (nominal_induct A avoiding: i j t u rule: e.strong_induct) (auto simp: fresh_at_base)
subst_ev_var_flip[simp]:
fixes e::e and y::x and x::x
assumes "atom y ♯ e"
shows "(y ↔ x) ∙ e = e [x::=V_var y]ev"
using assms apply(nominal_induct e rule:e.strong_induct)
apply (simp add: subst_v_v_def)
apply (metis (mono_tags, lifting)
apply (metis (mono_tags, lifting) b.eq_iff b.perm_simps e.fresh e.perm_simps flip_b_id subst_ev.simps subst_vv_var_flip)
apply (rule_tac y=x in opp.strong_exhaust)
using subst_vv_var_flip flip_def by (simp add: flip_def permute_pure)+
using subst_vv_var_flip flip_def by (simp add: flip_def permute_pure)+
subst_ev_flip:
fixes e::e and ea::e and c::x
assumes "atom c ♯
java.lang.NullPointerException
-
have "e[x::=v']==>Rightarrow> e" (‹
also have "... = ((c ↔ x) ∙ e)[c::=v']ev" using subst_ev_var_flip assms by simp
also have "... = ((c ↔ xa) ∙ ea)[c::=v']ev" using assms flip_commute by metis
also have "... = ea[xa::=v']ev" using subst_ev_var_flip assms by simp
finally show ?thesis by auto
subst_ev_var[simp]:
"(AE_val (V_var x))[x::=[z]v]ev = AE_val (V_var z)"
by auto
e :: has_subst_v
"subst_v = subst_ev"
proof
fix j::atom and i::x and x::v and t::e
show "(j ♯ subst_v t i x) = ((atom i ♯ t ∧ j ♯ t) ∨ (j ♯ x ∧ (j ♯
using fresh_subst_ev_if[of j t i x] subst_v_e_def by metis
fix a::x and tm::e and x::v
show "atom a ♯ tm ==> subst_v tm a x = tm"
using forget_subst_ev subst_v_e_def by simp
fix a::x and tm::e
show "subst_v tm a (V_var a) = tm" using subst_ev_id subst_v_e_def by simp
fix p::perm and x1::x and v::v and t1::e
show "p ∙ subst_v t1 x1 v = subst_v (p ∙ t1) (p ∙
using subst_ev_commute subst_v_e_def by simp
fix x::x and c::e and z::x
java.lang.NullPointerException
using subst_v_e_def by simp
fix x::x and c::e and z::x
java.lang.NullPointerException
using subst_v_e_def by simp
subst_ev_commute_full:
fixes e::e and w::v and v::v
assumes "atom z ♯ v" and "atom x ♯ w" and "x ≠ z"
java.lang.NullPointerException
using assms by(nominal_induct e rule: e.strong_induct,simp+)
subst_ev_v_flip1[simp]:
fixes e::e
assumes "atom z1 ♯ (z,e)" and "atom z1' ♯ (z,e)"
shows"(z1 ↔ z1') ∙ e[z::=v]enominal_in A avoi: a a :strong_induct) (auto : f)
using assms proof(nominal_induct e rule:e.strong_induct)
(simp add: flip_def fresh_Pair swap_fresh_fresh)+
‹
subst_cev :: "ce ==> x ==>A \andj\<>
"subst_cev ( (CE_val v') ) x v = ( (CE_val (subst_vv v' x v )) )"
"subst_cev ( (CE_op opp v1 v2) ) x v = ( (CE_op opp (subst_cev v1 x v ) (subst_cev v2 x v )) )"
"subst_cev ( (CE_fst v')) x v = CE_fst (subst_cev v' x v )"
"subst_cev ( (CE_snd v')) x v = CE_snd (subst_cev v' x v )"
"subst_cev ( (CE_len v')) x v = CE_len (subst_cev v' x v )"
"subst_cev ( CE_concat v1 v2) x v = CE_concat (subst_cev v1 x v ) (subst_cev v2 x v )"
apply (simp add: eqvt_def subst_cev_graph_aux_def,auto)
by (meson ce.strong_exhaust)
(eqvt) by lexicographic_order
subst_cev_abbrev :: "ce ==> x ==> v ==> ce" (‹_[_::=_]cev› [1000,50,50] 500)
where
"e[x::=v']cev≡ subst_cev e x v'"
size_subst_cev [simp]: "size ( subst_cev A i x ) = size A"
by (nominal_induct A avoiding: i x rule: ce.strong_induct,auto)
forget_subst_cev [simp]: "atom a ♯ A ==> subst_cev A a x = A"
by (nominal_induct A avoiding: a x rule: ce.strong_induct, auto simp: fresh_at_base)
subst_cev_id [simp]: "subst_cev A a (V_var a) = A"
by (nominal_induct A avoiding: a rule: ce.strong_induct) (auto simp: fresh_at_base)
fresh_subst_cev_if [simp]:
"j ♯ (subst_cev A i x ) = ((atom i ♯ A ∧ j ♯ A) ∨ (j ♯ x ∧ (j ♯ A ∨ j = atom i)))"
(nominal_induct A avoiding: i x rule: ce.strong_induct)
case (CE_op opp v1 v2)
then show ?case using fresh_subst_vv_if subst_ev.simps e.supp pure_fresh opp.fresh
fresh_e_opp
using fresh_opp_all by auto
(auto)+
subst_cev_commute [simp]:
"atom j ♯ A ==> (subst_cev (subst_cev A i t ) j u) = subst_cev A i (subst_vv t j u )"
by (nominal_induct A avoiding: i j t u rule: ce.strong_induct) (auto simp: fresh_at_base)
subst_cev_var_flip[simp]:
fixes e::ce and y::x and x::x
assumes "atom y ♯ e"
shows "(y ↔ x) ∙ e = e [x::=V_var y]cev"
using assms proof(nominal_induct e rule:ce.strong_induct)
case (CEnduct A rule: e.nduct)
then show ?case using subst_vv_var_flip by auto
case (CE_op opp v1 v2)
hence yf: "aty ♯ blast
have " (y ↔ x) ∙ (CE_op opp v1 v2 ) = CE_op ((y ↔ x) ∙ opp) ( (y ↔ x) ∙ v1 ) ( (y ↔x) ∙ v2)"
opp.perm_simps ce.p.perm_simps permute_pure ce.fres opp.st by pr
java.lang.NullPointerException
by (simp add: CE_op.hyps(1) CE_op.hyps(2))
finally show ?case using subst_cev.simps opp.perm_simps opp.strong_exhaust
(me (full_types))
( (auto simp add: permute_pure subst_vv_var_flip)+)
subst_cev_flip:
fixes e::ce and ea::ce and c::x
assumes "atom c ♯ (e, ea)" and "atom c ♯ (x, xa, e, ea)" and "(x ↔ c) ∙nom A rule: e.stro) (a sim fresh_atbas
java.lang.NullPointerException
-
have "e[x::=v']:andy:: x::x
also have "... = ((c ↔ x) ∙
java.lang.NullPointerException
also have "... = ea[xa::=v']cev" using subst_ev_var_flip assms by simp
finally show ?thesis by auto
subst_cev_var[simp]:
fixes z::x and x::x
shows "[[x]v]
by auto
ce :: has_subst_v
"subst_v = subst_cev"
proof
fix j::atom and i::x and x::v anapply (metis mono_t, lifting) b.eq bperm_simps e.fresh e. flip_b_id substev. substvv_var_)
show "(j ♯ subst_v t i x) = ((atom i ♯ t ∧ j ♯ t) ∨ (j ♯s)
using fresh_subst_cev_if[of j t i x] subst_v_ce_def by metis
fix a::x and tm::ce and x::v
show "atom a ♯ tm ==> subst_v tm a x = tm"
using forget_subst_cev subst_v_ce_def by simp
fix a::x and tm::ce
show "subst_v tm a (V_var a) = tm" using subst_cev_id subst_v_ce_def by simp
fix p::perm and x1::x and v::v and t1::ce
show "p ∙ subst_v t1 x1 v = subst_v (p ∙ t1) (p ∙ x1) (p ∙ v)"
using subst_cev_commute subst_v_ce_def by simp
fix x::x and c::ce and z::x
show "atom x ♯ c ==> ((x ↔ for x
using subst_v_ce_def by simp
fix x::x and c::ce and z::x
show "atom x ♯ c ==> c [z::=V_var x]\<^ using
using subst_v_ce_def by simp
subst_cev_commute_full:
fixes e::ce and w::v and v::v
assumes "atom z ♯ v" and "atom x ♯ w" and "x ≠ z"
java.lang.NullPointerException
using assms by(nominal_induct e rule: ce.strong_induct,simp+)
subst_cev_v_flip1[simp]:
fixes e::ce::ce
assumes "atom z1 ♯ (z,e)" and "atom z1' ♯ (z,e)"
java.lang.NullPointerException
using assms apply(nominal_induct e rule:ce.strong_induct)
by (simp add: flip_def fresh_Pair swap_fresh_fresh)+
‹Constraints›
subst_cv :: "c ==> x ==> v ==>
"subst_cv (C_true) x v = C_true"
"subst_cv (C_false) x v = C_false"
"subst_cv (C_conj c1 c2) x v = C_conj (subst_cv c1 x v ) (subst_cv c2 x v )"
"subst_cv (C_disj c1 c2) x v = C_disj (subst_cv c1 x v ) (subst_cv c2 x v )"
"subst_cv (C_imp c1 c2) x v = C_imp (subst_cv c1 x v ) (subst_cv c2 x v )"
"subst_cv (e1 == e2) x v = ((subst_cev e1 x v ) == (subst_cev e2 x v ))"
"subst_cv (C_not c) x v = C_not (subst_cv c x v )"
apply (simp add: eqvt_def subst_cv_graph_aux_def,auto)
using c.strong_exhaust by metis
(eqvt) by lexicographic_order
subst_cv_abbrev :: "c ==> x ==> v ==> c" (‹
where
"c[x::=v']cv≡ subst_cv c x v'"
size_subst_cv [simp]: "size ( subst_cv A i x ) = size A"
by (nominal_induct A avoiding: i x rule: c.strong_induct,auto)
forget_subst_cv [simp]: "atom a ♯ A ==> subst_cv A a x = A"
by (nominal_induct A avoiding: a x rule: c.strong_induct, auto simp: fresh_at_base)
subst_cv_id [simp]: "subst_cv A a (V_var a) = A"
by (nominal_induct A avoiding: a rule: c.strong_induct) (auto simp: fresh_at_base)
fresh_subst_cv_if [simp]:
"j ♯ (subst_cv A i x ) ⟷ (atom i ♯ A ∧ j ♯ A) ∨ (j ♯ x ∧ (j ♯ A ∨ j = atom i))"
by (nominal_induct A avoiding: i x rule: c.strong_induct, (auto simp add: pure_fresh)+)
subst_cv_commute [simp]:
java.lang.NullPointerException
by (nominal_induct A avoiding: i j t u rule: c.strong_induct) (auto simp: fresh_at_base)
let_s_size [simp]: "size s ≤ size (AS_let x e s)"
apply (nominal_induct s avoiding: e x rule: s_branch_s_branch_list.strong_induct(1))
apply auto
done
subst_cv_var_flip[simp]:
fixes c::c
assumes "atom y ♯ c"
shows "(y ↔ x) ∙ c = c[x::=V_var y]cv"
by(nominal_induct c rule:c.,(simp add flipsubst_v_ce_def)+)
c :: has_subst_v
"subst_v = subst_cv"
proof
fix j::atom and i::x and x::v and t::c
show "(j ♯ subst_v t i x) = ((atom i ♯ t ∧ j ♯ t) ∨ (j ♯ x ∧ (j ♯ t ∨ j = atom i)))"
using fresh_subst_cv_if[of j t i x] subst_v_c_def by metis
fix a::x and tm::c and x::v
showsubst_ev_var[imp:
using forget_subst_cv subst_v_c_def by simp
fix a::x and tm::c
show "subst_v tm a (V_var a) = tm" using subst_cv_id subst_v_c_def by simp
p:perand x1::x a v::v and t1::::c
show "p ∙ subst_v t1 x1 v = subst_v (p ∙ t1) (p ∙ x1) (p ∙
using subst_cv_commute subst_v_c_def by simp
fix x::x and c::c and z::x
show "atom x ♯
using subst_cv_var_flip subst_v_c_def by simp
and c::c and ::
java.lang.NullPointerException
using subst_cv_var_flip subst_v_c_def by simp
subst_cv_var_flip1[simp]:
fixes c::c
assumes "atom y ♯ c"
shows "(x ↔ y) ∙ c = c[x::=V_var y]c<sharp> t \< j
using subst_cv_var_flip flip_commute
by (metis assms)
subst_cv_v_flip3[simp]:
fixes c::c
assumes "atom z1 ♯ c" and "atom z1' ♯ c"
shows"(z1 ↔ z1') ∙ c[z::=[z1]v]cv = c[z::=[z1']v]cv"
-
consider "z1' = z" | "z1 = z" | "atom z1 ♯ z ∧ atom z1' ♯ z" by force
then show ?thesis proof(cases)
case 1
then show ?thesis using 1 assms by auto
next
case 2
then show ?thesis using 2 assms by auto
next
case 3
then show ?thesis using assms by auto
qed
subst_cv_v_flip[simp]:
fixes c::c
assumes "atom x ♯ c"
shows "((x ↔ z) ∙ c)[x::=v]cv = c [z::=v]cv"
using assms subst_v_c_def by auto
subst_cv_commute_full:
fixes c::c
assumes "atom z ♯ v" and "atom x ♯ w" and "x≠z"
shows "(c[z::=w]cv)[x::=v]cv = (c[x::=v]c[of j t i x sub bym
using assms proof(nominal_induct c rule: c.strong_induct)
ase ( (C_eq e1e1 e2
then show ?case using subst_cev_commute_full by simp
(force+)
subst_cv_eq[simp]:
assumes "atom z1 ♯ e1"
shows "(CE_val (V_var z1) == e1 )[z1::=[x]= tm"
-
have "?A = (((CE_val (V_var z1))[z1::=[x]v]cev) == e1)" using subst_cv.simps assms by simp
thus ?thesis by simp
‹
‹
x is fresh in v but this causes problems with proofs.›
subst_gv :: "Γ \ "su tm a (Vvar a) tm" us s by s
"subst_gv GNil x v = GNil"
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
goal_cases)
case 1
then show ?case by(simp add: eqvt_def subst_gv_graph_aux_def )
case (3 P x)
then show ?case by (metis neq_GNil_conv prod_cases3)
(fast+)
(eqvt) by lexicographic_order
subst_gv_abbrev :: "Γ ==> x ==>
where
java.lang.NullPointerException
size_subst_gv [simp]: "size ( G i x ) \<>
by (induct G,auto)
forget_subst_gv [simp]: "atom a ♯ G ==> subst_gv G a x = G"
apply (induct G ,auto)
using fresh_GCons fresh_PairD(1) not_self_fresh apply blast
apply (simp add: fresh_GCons)+
done
fresh_subst_gv: "atom a ♯ G ==>
(induct G)
case GNil
then show ?case by auto
case (GCons xbc G)
java.lang.NullPointerException
show ?case proof(cases "x=x'")
case True
have "atom a ♯ G" using GCons fresh_GCons by bla simp
thus ?thesis using subst_gv.simps(2)[of x' b' c' G] GCons xbc True
next
case False
then show ?thesis using subst_gv.simps(2)[
qed
subst_gv_flip:
fixes x::x anx and xxa::x and z::x and c::c and b::b and Γ
assumes "atom xa ♯ ((x, b, c[z::=[x]"atom z \sharp" and "atomx <>w
java.lang.NullPointerException
-
have "(x ↔ xa) ∙ ((x, b, c[z::=[x]v]cv) #\Γ Γ) = (( (x ↔ xa) ∙ x, b, (x ↔ xa) ∙c[z::=[x]v]cv) #\Γ ((x ↔e r: e.,si+)
using subst Cons_eqvt flip_fresh using G_cons_flip by si
java.lang.NullPointerException
also have "... = ((xa, b, c[z::=V_var xa]ze)"
also have "... = ((xa, b, c[z::=V_var xa]cv) #\Γ Γ)" using assms flip_fresh_fresh by blast
finally show ?thesis by simp
‹Types›
subst_tv :: "τ ==> x ==> v ==> τ rule:estrong_induct)
"atom z ♯ (x,v) ==> subst_tv { z : b | c }
apply (simp add: eqvt_def subst_tv_graph_aux_def )
apply auto
subgoal for P a aa b
apply(rule_tac y=a and c="(aa,b)" in τ.strong_exhaust)
by (auto simp: eqvt_at_def fresh_star_def fresh_Pair fresh_at_base)
apply (auto simp: eqvt_at_def fresh_star_def fresh_Pair fresh_at_base)
-
fix z :: x and c :: c and za :: x and xa :: x and va :: v and ca :: c and cb :: x
assume a1: "atom za ♯ va" and a2: "atom
assume a4: "atom cb ♯
assume a10:"cb ≠ xa"
note assms = a10 a9 a8 a7 a6 a5 a4 a3 a2 a1
have "c[z::=V_var cb]cv = ca[za::=V_var cb]cv" using assms by auto
hence "c[z::=V_var cb]v' x' x v )) )) )
moreover have "c[z::=V_var cb]cv[xa::=va]cv = c[xa::=va]cv[z::=V_var cb]cv" using subst_cv_commute_full[of z va xa "V_var cb" ] assms fresh_def v.supp by fastforce
moreover have "ca[za::=V_var cb]"subst_cev ( (CE_op opp v1 v2) ) x v = ( (CE_op opp (sub v1 x v ) subst_ v2x v )) )"
using subst_cv_commute_full[of za va xa "V_var cb" ] assms fresh_def v.supp by fastforce
ultimately show "c[xa::=va]cv[z::=V_var cb]cv = ca[xa::=va]) x =CE_ (su v x v )"
(eqvt) by lexicographic_order
java.lang.NullPointerException
where
"t[x::=v]\τv≡ subst_tv t x v"
size_subst_tv [simp]: "size ( subst_tv A i x ) = size A"
((nominal_in A avoi: i x r: \<tau.
case (T_refined_type x' b' c')
then show ?case by auto
forget_subst_tv [simp]: "atom a ♯ A ==> subst_tv A a x = A"
apply (nominal_induct A avoiding: a x rule: τ.strong_induct)
apply(auto simp: fresh_at_base)
one
subst_tv_id [simp]: "subst_tv A a (V_var a) = A"
by (nominal_induct A avoiding: a rule: τasimp:fresh_at_base)
fresh_subst_tv_if [simp]:
"j ♯ (subst_tv A i x ) ⟷ (atom i ♯st)
apply (nominal_induct A avoiding: i x rule: τ.strong_induct)
using fresh_def supp_b_empty x_fresh_b by auto
subst_tv_commute [simp]:
atom y \sharp τt]<au>sub🚫
by (nominal_induct τ avoiding: x y t v rule: τ.strong_induct) (auto simp: fresh_at_base)
subst_tv_var_flip [simp]:
fixes x::x and xa::x and τ::τ
assumes "atom xa ♯ τ"
shows "(x ↔ xa) ∙ τ = τ[x::=V_var xa]\τv"
-
obtain z::x and b and c where zbc: "atom z ♯ (x,xa, V_var xa) ∧ τ = { z : b | c }"
using obtain_fresh_z by (metis prod.inject subst_tv.cases)
hence "atom xa ∉ supp c - { atom z }" using τ.supp[of z b c] fresh_def supp_b_empty assms
by auto
moreover have "xa ≠ z" using zbc fresh_prod3 by force
ultimately have xaf: "atom xa ♯ c" using fresh_def by auto
have "(x ↔ xa) ∙ τ = { z : b | (x ↔ xa) ∙ c }"
by (metis τ.perm_simps empty_iff flip_at_base_simps(3) flip_fresh_fresh fresh_PairD(1) fresh_PairD(2) fresh_def not_self_fresh supp_b_empty v.fresh(2) zbc)
also have "... = { z : b | c[x::=V_var xa]cv}" using subst_cv_v_flip xaf
by (metis permute_flip_cancel permute_flip_cancel2 subst_cv_var_flip)
finally show ?thesis using subst_tv.simps zbc
using fresh_PairD(1) not_self_fresh by force
τ :: has_subst_v
"subst_v = subst_tv"
proof
fix j::atom and i::x and x::v and t::τ
show "(j ♯ subst_v t i x) = ((atom i ♯ t ∧ j ♯ t) ∨ (j ♯ x ∧ (j ♯ t ∨ j = atom i)))"
proof(nominal_induct t avoiding: i x rule:τ.strong_induct)
case (T_refinedabbreviation
hence " j ♯{x\Rightarrow v <Rightarrow ],] 500)
also have "... = (atom i ♯{ z : b | c }∧ j ♯{ z : b | c }∨ j ♯ x ∧ (j ♯{ z : b | c }∨ j = atom i))"
unfolding τ.fresh using subst_v_c_def fresh_subst_v_if
using T_refined_type.hyps(1) T_refined_type.hyps(2) x_fresh_b by auto
finally s
qed
fix a::x and tm::τ and x::v
show "atom a ♯ tm ==> subst_v tm a x = tm"
apply(nominal_induct tm avoiding: a x rule:τ.strong_induct)
subst forget_subst_v sub.simps subsτ
fix a::x and tm::τ
show "subst_v tm a (V_var a) = tm"
apply(nominal_induct tm avoiding: a rule:τ.strong_induct)
using subst_v_c_def forget_subst_v subst_tv.simps subst_v_τ_def fresh_Pair by simp
and v::v and t1::τ
java.lang.NullPointerException: Cannot invoke "String.equals(Object)" because "brackoff" is null
apply(nominal_induct tm avoiding: a x rule:τ)(aut simp:
using subst_v_c_def forget_subst_v subst_tv.simps subst_v_τ_def fresh_Pair by simp
fix x::x and c::τ and z::x
java.lang.NullPointerException
apply(nominal_induct c avoiding: z x rule:τ.strong_induct)
using subst_v_c_def flip_subst_v subst_tv.simps subst_v_τ_def fresh_Pair by auto
fix x::x and c::τ and z::x
show "atom x ♯ c ==> c[z::=[x]v]v[x::=v]v = c[z::=v]v"
apply(nominal_induct c avoiding: x v z rule:τ.strong_induct)
using subst_v_c_def subst_tv.simps subst_v_τ_def fresh_Pair j ♯
by (metis flip_commute subst_tv_commute subst_tv_var_flip subst_v_τ_def subst_vv.simps(2))
subst_tv_commute_full:
fixes c::τ
assumes "atom z ♯ v" and "atom x ♯ w" and "x≠z"
shows "(c[z::=w]\τv)[x::=v]\τv = (c[x::=v]\τv)[z::=w]\τv"
using assms proof(nominal_induct c avoiding: x v z w rule: τ.strong_induct)
case (T_refined_type x1a x2a x3a)
then show ?case using subst_cv_commute_full by simp
‹Extract constraint from a type. e.strong_
alpha-equivalent types give different answers ›
c_of :: "τ ==> x ==>show ?case usingsub.simps e.supp pure_fresh opp.fresh
java.lang.NullPointerException
(goal_cases)
case 1
then show ?case using eqvt_def c_of_graph_aux_def by force
case (2 x y)
then show ?case using eqvt_def c_of_graph_aux_def by force
case (3 P x)
then obtain x1::τ
obtain z' and b' and c' where "x1 = { subst_cev_commute [simp]:
then show ?case using 3 * by auto
case (4 z1 x1 b1 c1 z2 x2 b2 c2)
then show ?case using subst_v_flip_eq_two τ.eq_iff by (metis prod.inject type_eq_subst_eq)
(eqvt) by lexicographic_order
c_of_eq:
"c_of {> x = c"
(nominal_induct "{ x : b | c }" avoiding: x rule: τ.strong_induct)
case (T_refined_type x' c')
moreover hence "c_of { x' : b | c' } x = c'[x'::=V_var x]cv" using c_of.simps by auto
moreover have "{ x' : b | c' } = {e::ce and y::x and x::x
moreover have "c'[x'::=V_var x]cassumes "atom y ♯
by (metis subst_cv_id)
ultimately show ?case by auto
java.lang.StringIndexOutOfBoundsException: Index 10 out of bounds for length 3
obtain_fresh_z_c_ofe
t:::"'b:fs"
obtains z where "atom z ♯ t ∧ τ = { z : b_of τ | c_of τ z }"
-
obtain z and c where "atom z ♯ yf: "atom y \sharpv ∧ by bl
moreover hence "c = c_of τ z" using c_of.simps using c_of_eq by metis
ultimately show ?thesis
using that by auto
c_of_fresh:
fixes x::x
assumes "atom x ♯ (t,z)"
shows "atom x ♯ c_of t z"
-
z' and c' where z"t = {| c' \<>
hence *:"c_of t z = c'[z'::=V_var z]cv" using c_of.simps fresh_Pair by metis
have "(atom x ♯ c' ∨ atom x ∈ set [atom z']) ∧ atom x ♯ b_of t" using τ.fresh assms z fresh_Pair by metis
hence "atom x ♯ c'" using fresh_Pair z fresh_at_base(2) by fastforce
moreover have "atom x ♯ V_var z" using assms fresh_Pair v.fresh by metis opp.perm_simps ce.permpermute_pure ce.fre op.strong_exhaust by presburger
ultimately show ?thesis using assms fresh_subst_v_if[of "atom x" c' z' "V_var z"] subst_v_c_def * by metis
c_of_switch:
z::x
assumes "atom z ♯ t"
shows "(c_of t z)[z::=V_var x]simpsopp.perm_simps opp.strong_exhaust
-
obtain z' and c' where z:"t = { z' : b_of t | c' }∧ atom z' ♯ (x,z)"
hence "(atom z ♯( (auto simp add: permu subst_vv_var_fl)+)
moreover have " atom z ∉ set [atom z']" using z fresh_Pair by force
ultimately have **:"atom z ♯
java.lang.NullPointerException
also have "... = c'[z'::=V_var x]and c::x
finally show ?thesis using c_of.simps[of z' x "b_of t" c'] fresh_Pair z by metis
type_eq_subst_eq1: "atom c ♯> (x, , e, ea)" and " "(x \leftrightarrow ) <>
fixes v::v and c1::c
assumes "{ z1 : b1 | c1 } = ({ z2 : b2 | c2 })" and "atom z1 ♯ c2"
shows "c1[z1::=v]cv = c2[z2::=v]cv" and "b1=b2" and " c1 = (z1 ↔ z2) ∙ c2"
-
show "c1[z1::=v]cv = c2[z2::=v]']\^sub>🚫
show "b1=b2" using τ.eq_iff assms by blast
have "z1 = z2 ∧ c1 = c2 ∨ z1
using τ.eq_iff Abs1_eq_iff[of z1 c1 z2 c2] assms by blast
thus "c1 = (z1 \ ↔<bullet
type_eq_subst_eq2:
fixes v::v and c1::c
assumes "{also hav"... = (c 🚫
shows "c1[z1::=v]cv = c2[z2::=v]cv" and "b1=b2" and "[[atom z1]]lst. c1 = [[atom z2]]lst. c2"
-
show "c1[z1::=v]cv = c2[z2::=v]cv" using type_eq_subst_eq assms by blast
show "b1=b2" using τ.eq_iff assms by blast
show "[[atom z1]]lst. c1 = [[atom z2]]lst. c2"
using τ.eq_iff assms by auto
type_eq_subst_eq3:
fixes v::v and c1::c
assumes "{ z1 : b1 | c1 } = ({ z2 : b2 | c2 })" and "atom z1 ♯ c2"
java.lang.NullPointerException
using type_eq_subst_eq1 assms subst_v_c_def
by (metis subst_cv_var_flip)+
type_eq_flip:
assumes "atom x ♯ c"
shows "{ z : b | c } = { x : b | (x ↔ z ) ∙qe
using τ.
by (metis (no_types, lifting) flip_fresh_fresh)
c_of_true:
"c_of { z' : B_bool | TRUE } x = C_true"
(nominal_induct "{ z' : B_bool | TRUE }" avoiding: x rule:τ.strong_induct)
case (T_refined_type x1a x3a)
hence "{ z' : B_bool | TRUE } fix z::x and x::x
then show ?case using subst_cv.simps c_of.simps T_refined_type
type_eq_subst_eq3
by (metis type_e)
type_eq_subst:
assumes "atom x ♯ c"
shows "{ z : b | c } = { x : b | c[z::=[x]instantiation ce :: has_subst_v
using τ.eq_iff Abs1_eq_iff assms
using subst_cv_var_flip type_eq_flip by auto
type_e_subst_fresh:
fixes x::x and z::x
assumes "atom z ♯ (x,v)" and "atom x ♯ e"
shows "{
using assms subst_tv.simps subst_cv.simps forget_subst_cev by simp
fixes x::x and z::x
assumes "atom z ♯ (x,v)" and "atom x ♯s> subst_v t i x) = ((atom i \sharp t <and ♯or j = atom i)))"
shows "{ z : b | CE_val (V_var z) == CE_val v' }[x::=v]\τv = { z : b | CE_val (V_var z) == CE_val v' }"
using assms subst_tv.simps subst_cv.simps by simp
subst_tbase_eq:
"b_of τ = b_of τ[x::=v]\τv"
-
obtain z and b and c where zbc: "τ = { z:b|c}∧ atom z ♯ (x,v)" using τ.exhaust
by (metis prod.inje subst_tv.c
hence "b_of { z:b|c} = b_of { z:b|c}[x::=v]\τv" using subst_tv.simps by simp
thus ?thesis using zbc by blast
subst_tv_if:
assumes "atom z1 ♯subst_v tm a = tm"
shows "{ z1 : b | CE_val (v'[x::=v]vv) == CE_val (V_lit l) IMP (c'[x::=v]cv)[z'::=[z1]v]simp { z1 : b | CE_val v' == CE_val (V_lit l) IMP
using subst_cv_commute_full[of z' v x
by simp
substubst_tv_tid:
assumes "atom za ♯ (x,v)"
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
using assms subst_tv.simps subst_cv.simps by presburger
b_of_subst:
"b_of (τ[x::=v]show "p ∙subst_v (p \<>
-
obtain z b c where *:"τ = { z : b | c }∧ atom z ♯ (x,v)" using obtain_fresh_z by metis
thus ?thesis using subst_tv.simps * by auto
subst_tv_flip:
assumes "τ]v τ ""atom x ♯"atom x' ♯
shows "((x' ↔ x) ∙ τ')[x'::=v]\τv = τ"
-
have "(x' ↔ x) ∙ v = v ∧ (x' ↔ x) ∙ τ = τ" using assms flip_fresh_fresh by auto
thus ?thesis using subst_tv.eqvt[of "(x' ↔
subst_cv_true:
"{ z : B_id tid | TRUE } = { z : B_id tid | TRUE }[x::=v]sharp>c ==>∙v"
-
obtain za::x where "atom za ♯ (x,v)" using obtain_fresh by auto
hence "{ z : B_id tid | TRUE } = { za: B_id tid | TRUE }" using τ.eq_iff Abs1_eq_iff by fastforce
moreover have "{ za : B_id tid | TRUE } = { za : B_id tid | TRUE }[x::=v]\τv"
using subst_cv.simps subst_tv.simps by (simp add: ‹
show ?thesis by ar
t_eq_supp:
assumes "({"atatom \sharp c ==>:=V_var x]\<^<sub
shows "supp c - { atom z } = supp c1 - { atom z1 }"
-
have "supp c - { atom z } ∪ supp b = supp c1 - { atom z1 } ∪ supp b1" using τ.supp assms
by (metis list.set(1) list.simps(15) sup_bot.right_neutral supp_b_empty)
moreover have "supp b = supp b1" using assms τ.eq_iff by simp
moreover have "atom z1 ∉ supp b1 ∧ atom z ∉ supp b" using supp_b_empty by simp
using subst_v_ce_def by simp
by (metis τ.eq_iff τ.supp
fresh_t_eq:
fixes x::x
assumes "({ z : b | c }
s "atom x ♯
-
have "supp c - { atom z } ∪ supp b = supp cc - { atom zz } ∪fixes e::ce and w::v and v::v
by (metis list.set(1) list.simps(15) sup_bot.right_neutral supp_b_empty)
moreover have "atom x ∉ "atom z ♯> w" and "x ≠
ultimately have "atom x ∉ supp cc - { atom zz } ∪ supp b" by force
hence "atom x ∉ supp cc" using assms by simp
java.lang.NullPointerException
‹Mutable Variable Context›
subst_dv :: "Δ ==> x ==> v ==> Δ" where
"subst_dv DNil x v = DNil"
"subst_dv ((u,t) #\Δ Δ) x v = ((u,t[x::=v]using assms by(nominal_induct e rule: cc.strong_induc,simp+)
apply (simp add: eqvt_def subst_dv_graph_aux_def,auto )
using delete_aux.elims by (metis Δ
(eqvt) by lexicographic_order
subst_dv_abbrev :: "Δ subst_cev_v_f[simp]:
where
"Δ:ce
fresh_subst_dv:
fixes x::x
assumes "atom xa ♯"
shows "atom xa ♯Δ[x::=v]\<|
using assms proof(induct Δ rule:Δ_induct)
DNil
bst_v_flip_eq_two:
"(cz1::=b]\^sv) = (c2[z2::=b]subst_cvbst_cv (C_d 1 c2c2) xx v _ (subs_vc x v ) (subst_cv c2 x v )"
then show ?case usingsubx v = C_imp (subst_ c1 v c1x v (ubstc c2v )"java.lang.StringIndexOutOfBoundsException: Index 77 out of bounds for length 77
thus ?esi sn suubtv_simple_commte fehod4 metis
fr "( ↔(subsb c x )"
fixes j::atom and i::x and x::v and t::Δ
"
shows "(j ♯slso ". = c1[1::=['\^ssup>>v]\<^ applyValues›
assms proo(induct t rule: Δ
Niljava.lang.StringIndexOutOfBoundsException: Index 11 out of bounds for length 11
then show ?case using subst_gv.si by(auto s:evt_def sb_vv_g
case (DCons u' t' DD')
then show ?case unfolding subst_dv.simps using fresh_DCons fresh_su
java.lang.NullPointerException
‹
java.lang.NullPointerException
"case_sum (λ(ase_su<.Inl
bst_svv : "s \\ x ==> v ==>
and subst_branchv 🚫v"
ubst_branchlv :"nch \Rightarrow> x ==> br
(A_val v') ) x v = (A
"atom y ♯ proof
"atom y ♯ subst_v by ( (nominal_induct A avooiding: a x rrule: ng_indut, aut imp: f)
java.lang.NullPointerException
"subst_sv (AS_assign y v') x v = AS_assign y (subst_vv v' x v )"
(AS_if v' s1 s2)) ) x v = (AS_if_if (subbstvv v' x v ) (subst_ss xx v ) (subst_svs2 x v ) ))"
"atom u ♯ subst_sv (AS_var u τ (subst_tv τx v ) (subst_vv v' x v ) (ust_sv s x v ) "
)x = A_hle (s(us_v s1 x ) (sub)"
"subst_sv (AS_seq s1 s2) x v = AS_seq(us_vs x v) (subt_sv s2 x v "
(AS_assert c s) x v AS_(sust_cv c x v) (sst_sv sx v)"
ection \openExpressions›
t_branchlv (AS_final c) v=A_finanal (subst_branhv c "
bst_branchlv (AS_c
apply (auto,sx v = ( (Eo op s_vv1 x v ) (sutvv xv ) )"
java.lang.NullPointerException
apply (case_tac "Ex1Inl (s,,xava)))")
lemma sizsimp]: ize ( subst_v A ix = size AA"
simp: feha_base)
apply simp
apply(cases rule: subst_sv_subst_branchv_subst_branchlv_graph.cases)
apply(assumption)
apply(rule_tac x="Sum_Type.projl x" in exI,clarify,rule the1_equality,blast,simp (no_asm) only: sum.sel)+
lemma ubst_e [simp]: "subst_ev A a (V_var a) a) = A"
apply(simp)+
done
{
java.lang.StringIndexOutOfBoundsException: Index 21 out of bounds for length 21
then show ?case proof(cases x')
case (Inl a) thus P
java.lang.StringIndexOutOfBoundsException: Index 35 out of bounds for length 20
e(e aa bbcc
trong_exhaust ng_ehau fesh_sta_net by ts
java.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 9
next
case (Inr b) thus P
proof(cases b)
case (Inl a) thus P proof(cases a)
case (fields aa bb cc)
en show ?thesis u usi Inr InInl l 1 s_brancbanch_lis.stongg_ehas fresh_s_ins byy metis
qed
case (fields aa bb cc)
?hsis usin n Inr2 s "((y \\leftrightarrow> x) ∙v"
qed
qed
qed
next
case (2 y s ya xa va sa c)
thus ?case using eqvt_triple eqvt_at_proj by blast
next
case 3 y 2 yax asa s2 )
thus ?case u
next
=ub_v
j::atm and i::x and x x::v and
using fresh_Pair u_fresh_xvby auto
ultimatelyfix :x and t:ead x:v
next
x1 1 x1a xa va s1a c)
thus sho subst_ m a (a (V_vara) =tsing sub_v_id us___def b
}how p ∙ t1) (p ∙ "ubst_v = ubs
qvt by eioric_oder
java.lang.StringIndexOutOfBoundsException: Index 3 out of bounds for length 3
where
^ub>v \equiv stsv s xs x v"
subst_branchv_abbrev :: "> z1) ∙
where
>ssubst_branchv s x v"
\<>Expressions
B and and C avoig ulesac__branch_list.stron_indu f a::xx adt::c and ::
"sub ( (CE_len v' v')) v = CE_len (subst_cev v' x v )"
by (nominal_induct A and B and C avoiding: a x rule: s_branch_sux_
subst_sv_id [simp]: "subst_sv A a (V_var a) = A" and "subst_branchv B a (V_var a
C aviding: rule: s_branchs_branch_list.strog_iut)
case (A
then shohow ?casse
by (metis (no_types, "[:='\^sub>ev≡
case (AS_match v branch_s)
t_None_eq sbt_ev_id subts.simps sbst_sv.ps subst_ttv_id v.fresh ust_vv_id sh "subst_v t a(V_V_ar a) = sing subst_cvv_id subst_v_c_def by simp
by metis
(auto)q
fresh_subst_sv_if_rl:
shows
"( freshre
"(atom x ♯<>subst_v
apply(nominal_induct s and cs and css avoiding: v x rule: s_branch_s_branch_list.strong_induct)
using pu
java.lang.StringIndexOutOfBoundsException: Index 27 out of bounds for length 27
shows "j ♯
"j ♯
(subst_branchlv css x v ) ==>
" (y \<leftrightarrow :x an c::c and z::x
branch list x s )
java.lang.NullPointerException
s tosimpdd: pere_psub)+
es atom ♯cv =
-
y e s) x v = (AS_let y e s')" forget_subst_by simp
hence "j ♯ (AS_let y e s')" using AS_let by argo
show ?thesis Tru by blast
next
case False
java.lang.NullPointerException
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
then show ?thesis using AS_let fresh_None fresh_subst_ev_if list.discI list.set_cases srnhsbrn
fix a:x and tm::ce
case (AS_let2 y τ s1 s2)
thus ?case proof(1::x and v::v and :c
case True
using subst_cev_commute subst_v_ce_ef by s bysimp
show atom x ♯c ==> z) ∙
then show ?thesis using True by blast
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
have "subst_> y) ∙
then show ?thesis using AS_let2
sh_subst_tv_ifsub st_tvtv_iif listst.discI s.set_cases s_branchbranchit.freresh(etiassms)
<> z1') \ e[z::=v]esub> f c::
uto)+
fresh_subst_sv_if[simp]:
x::xnd v::v
shows "j \ (C_false) x v= C_false"
" "ubst e = 2 x = ((subst_ e1 x v )= (substcev e2x
ng rssubstsv_if_lr freh_sub by metis+
A::sadt::v an x and i
atom j\<harp thenr [simp]: "atom a ♯
"atom j ♯
atom j \>Lo> (subst_branchlv (subst_branchlv C i t) j u ) = subst_branchlv C i (subst_vv t ju )
apply(nominal_induct A and B and C avoiding: i j t u rule: s_branch_s_branch_list.strong_induct)
(auto simp: fresh_at_base)
assumes " case 3
shows "{size [simp]: "size e ?th?thesis using assms auto
using τ
by (metis Nominal2_Base.swa
subst_sv_flip:
fixes s::s and sa::s and v'::v
assumes "atom c \<sharp( (v',x, xa, s, sa)" "atom x ♯ v'" and "(x \leftrightarrow c) ∙ c) ∙
java.lang.NullPointerException
have "atom x ♯
"a "atmc sharp> (s[x::=v'<^sub>v, sa[xa::=v']v)" using assms using fresh_subst_sv_if assms by( blast+ ,force)
hence "s[x::=v']subst_v t i x) = ((atom i ♯ j ♯ x ∧ ( \\sh> t ∨ j = atom i)))"
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
ve "... = ((xa \< c∙a by p
also have "... = ((xa ↔ c) ∙ sa)[ ((xa ↔ xa) ::= ((xa ↔ v') ]v" using assms
by (mets flii_tsimps(1 flip_feh_freshfresh_PairD()
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
also ave "... = sax:=']\^>sssmsms breshfresh resh_Pair)
finally show ?thesis by simp
if_type_eq:
java.lang.StringIndexOutOfBoundsException: Index 3 out of bounds for length 3
assumesshows "((x \<leftrightarrow =v]\^sub>c>v"
java.lang.NullPointerException
shows "({
-
have "atom z1' ♯v]c\<>v
moreover hence "(CE_val v == CE_val (V_lit ll) IMP ca[za::=[z1']\< showsv = c[z::=[z1']using assms subst_v_c_def by by auto
proof -
have " consid "z1' = z" | "z1 = z "tom z1 ♯ subst_cv_commute:
by auto
also have "... = ((CE_val v == CE_val (V_lit ll)) IMP ((z1' ↔
using ‹uto
by (metis (mono_tags) ‹subt_cflip[sp]:
also have "... = ((CE_val v == CE_val (V_lit ll)) IMP (ca[z\ s "c[z::=w]\^sub>c🚫
using assms by fastforce
finally show ?thesis by auto
qed
ultimately show ?thesis
using \ "atom z ♯ w" and "x≠z"
java.lang.NullPointerException
subst_sv_var_flip:
fixes x::x and s::s and z::x
java.lang.NullPointerException
java.lang.NullPointerException
"atom x ♯
apply(nominal_induct s and cs and css avoiding: z x rule: s_branch_s_branch_list.strong_induct)
using ext ‹
apply (auto ) (* This unpacks subst, perm *)
ubst_tv_var_flip
subst_v___java.lang.StringIndexOutOfBoundsException: Index 65 out of bounds for length 65 defer
gsub<Gamma>subst_gv g x v" defer 1 using x_fresh_u apply blast defer 1 using x_fresh_u Ab apply (simp add: subst_v_c_def) using x_fresh_u Abs1_eq_iff'(3) flip_fresh_fresh by (simp add: flip_fresh_fresh)
instantiationapply (inuct Gz1 \<> begin
definition "subst_v
instance fix j: vnd show java.lang.StringIndexOutOfBoundsException: Index 6 out of bounds for length 6 using
fix a::x and tm
<> =tm usingst_sv
fix a::x and tm:s
howt_v V_var bst_sv_idyp
p::perm and x1::x and v::v and t1::s showbullet subst_v t1 x1 v = _p\>
subst_v_s_def
fix x:x:sdx show"atom ed using subst_sv_var_flip subst_v_s_def by simp
show "atom>c ==>v]java.lang.NullPointerException
subst_v_s_def simp qedbyo:t_def) end
sectionz andand aandvca b:
nominal_function subst_ft_v :: "fun_typ ==> v ==> atom z <sharp> (x,v) \ <Longrightarrow> subst_ft_v ( AF_fun_typ z b c t (s::s)) x v = AF_fun_typ z b c[x::=v]>\<>\ apply(simp add: eqvt_def subst_ft_v_graph_aux_def ) ) apply(simp add:fun_typ.strong_exhaust ) apply(auto) apply(rule_tac y=a and c="(moreoverccccjava.lang.NullPointerException apply (auto
proof(goal_casesjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 case xaca hence"c[ (etis lp_comue sbt__vr_flip) hence "lemma imp"subst_tv bt_v A i x ) = siz A showcase) using _fip fip_mut by me xt hence "t[byominal_induct:e<>trong_inductosimpbase hence java.lang.NullPointerException then show ?case using subst_tv_commute_full 2 by (metis atom_eq_iff fresh_atom fresh_atom_at_base v.fresh() ed then s ?case by byby(simpadd:evt_t_def subsst_gvv_gragrapph_aux_def )
nominal_termination (eqvt) by lexicographic_order
nominal_function subst_ftq_v :: "fun_typ_q x ==> fun_typ_q "atom bv ♯_idc <tau> avoiding: y t | "andnd::τshowaseisNil_convprod_cases3ases3 apply(simpdeqvt_defubst_ftq_v_graph_aux_def apply(simp add:fun_typ_q.strong_exhaust ) apply( -
apply_ac=aa fun_typ_qust applyusingzyetisprod.ses proofbreviation case (1 bva<> z" using zbc fresh_prod3 by force subst_ft_vsimps ms by (simp add: flip_fresh__fresh) qed nominal_termination (eqvt) by lexicograpr
lemma size_subst_ft[simp]: "size (subst_ft_v A x v) = size A" by(nominal_induct A avoiding: x v ru[x::=V_var xa]\<^bcv }"using subst_cv_v_flip where
lemmausing_rDself_freshshorce by
lemma subst_ft_id
inal_inducting typrong_induct
instantiation fun_typ :as_subst_vv begin
definition "subst_v = subst_ft_v"
instanceproof
fix j:lemma size_subst_gv] "size ( subst_g G i x ≤ show "(j ♯ apply(inal_inducttding xuleduct apply(simp only: subst_v_fun_typ_def subst_ft_v.simps ) usingtypesh_subst_v_if by auto
fix a::andjava.lang.StringIndexOutOfBoundsException: Index 29 out of bounds for length 0
grightarrowrrowsubst_v
(nominal_induct:rulerong_induct
se_x1a java.lang.StringIndexOutOfBoundsException: Index 41 out of bounds for length 41 applynductuto qed
fix a: ndmn_typ
showbst_vt_v )" proof(n fix x::x and c::::\tau>and z::x case (AF_fun_typ x1a x2a x3a x4a x5a)
java.lang.NullPointerException
fix p::perm and x1::x and v::v an fix::x ad c:\tau and z::x " <ubst_v =t_v >)bullet(p\bullet" proof .strong_induct) 2a45 thenshow ?foldingst_v_fun_typ_defhusingsubst_v bst_ft_vimpsget_subst_svv_>defby fastforce qedubst_tv_commute_full
: _d:x show java.lang.NullPointerException case (T_efined_type x1x2a x3aa)) by (a
java.lang.StringIndexOutOfBoundsException: Index 34 out of bounds for length 34 show "atom x'andc c,singses3 apply( apply auto bysimp _st_v_s_defst_v__tau subst_v_fun_typ_def qed end
instantiation: as_subst_v begin
definition "subst_v = subst_ftq_v"
instanceef fix j::atomcaseatom< GConsbyblast show"(j ♯ plyninal_induct t at avoi: i x rule:fun_yp_.rong_induct,auto) apply(auto simp add: subst_vfu_t_de us_vsubs_vv\tau>_def subst_v_fun_typ_q_dif ) bymetis (notpes) fesh_ubstv_ibstvfun_typ_def)+
i ad t::fun_typ__q and x::v show "atom \ ase apply(nominal_induct t avoiding: i x rule:fun_typ_q.strong_induct then ? using.()[of' Gnsxbcbymp
t_v_s_def>_def ubst_v_fun_typ_q_deffsubst_v_if
fix:q showi moreoverflbrace x' : b | c' }
simpddn_typ_defv_s_defst_v_τfixesx:: and:xandz: c:: andd><>
fixanddndp_q show"p ∙ subst_v t1 x1 v = subst_v (p ∙tom x \<sharpsharpsup>v]\^>cma)"nd < Gammand \Gamma"atom x \<sharp > (z, c)" applyngyp_qinduct by(auto simp addproof
fix moreoverc_of z" usiei show " apply(nominal_inductlemmaf_fresh
sumes sharp (t,z)"
fix x::x and c::fun_typ_q an ::x show "atom x ♯ z' : b_of 'rbrace∧ atom z' ♯
(al_inductdingfun_typ_q
(todbst_v_fun_typ_defdefv_s_def<tau_def subst_v_fun_typ_q_def fresh_subst_v_if by (metist_v_fun_typ_def___celbst_ft_vubst_v_simple_commutevrm_simpsmps qed
lemmaa subst_v_fst_eq: " ` setD (Δ[x::=v]\Δv) = fst ` setD Δ"
by(induct Δn subst C ons_eqvt flip_freshres sing G_con_lip by smp
subst_gv_member_iff:
fixes x'::x
assumes "(x',b',c') <in >"
shows "(x',b',c'[x::=v]x]v" using subst_v_simple_commute subst_v_c_def assms c_oimps z *by mets
-
have "avassu\>z1 : b : b1 | c1 }b | c2 } zz1 ♯
then show ?thesis using assms proof(induct Γshows "c1[z1[z1:=v]\c=2" and "c1 = (z ↔ c2"
GNil
then show ?case by auto
next
case (GCons x1 b1 c1 Γ')
eroof(cases "(x'b,' x,1,c1)")
java.lang.NullPointerException
then show ?thesis using True by auto
next Types\close
case False
have "x1≠.eq_iff Abs1_eq_iff[of z1 c1 z2 2 asss by bla> v \Rightarrowτ
hence "(x', b', c') ∈ cc🚫 z1 : b1 | c1 } z2 : 2}
moreover have "atom x ∉mdm Γ feshGCns
ultimately have "(x', b', c'[x::=v]Pa aa show "c1[z1:v]<sb>c\subv" using type_eqsuseq assmss bllast
' c[:=]\>toSet ((x1, b1, c1[x::=v]v) #Gamma> (Γ'[x::=v]v))" by auto
then show ?thesis using subst_gv.simps ‹fresh_at_basees_at_bas)
qed
qed
resh_subst_gv_if:
fixes j::atom and i::x and x::v and
assumes "j ♯ t ∧ j ♯ x"
shows "(j ♯ subst_gv t i x)"
using assms proof(induct t rule: Γ_induct)
case GNil
then show ?case using subst_gv.simps fresh_GNil by auto
case (GCons x' b' c' Γ')
then show ?case unfolding subst_gv.simps using fresh_GCons fresh_subst_cv_if by auto
‹a6: "cb ≠" a "atom cb ♯"z≠
set_GConsD: "y ∈c(Tefined_tytyexa 3
o
assumes c"
java.lang.NullPointerException
using subst_gv.simps append_g.simps assms by auto
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.