# HG changeset patch # User urbanc # Date 1141837200 -3600 # Node ID 47b05ebe106b3338b0cf5915cb9ea2059e8e3cd3 # Parent 5caacd449ea49749a0b6c98f97e71de37fa06db0 deleted some proofs "on comment" diff -r 5caacd449ea4 -r 47b05ebe106b src/HOL/Nominal/Examples/SN.thy --- a/src/HOL/Nominal/Examples/SN.thy Wed Mar 08 17:55:51 2006 +0100 +++ b/src/HOL/Nominal/Examples/SN.thy Wed Mar 08 18:00:00 2006 +0100 @@ -77,7 +77,7 @@ and a1: "\t s1 s2 x. s1\\<^isub>\s2 \ (\z. P z s1 s2) \ P x (App s1 t) (App s2 t)" and a2: "\t s1 s2 x. s1\\<^isub>\s2 \ (\z. P z s1 s2) \ P x (App t s1) (App t s2)" and a3: "\a s1 s2 x. a\x \ s1\\<^isub>\s2 \ (\z. P z s1 s2) \ P x (Lam [a].s1) (Lam [a].s2)" - and a4: "\a t1 s1 x. a\(s1,x) \ P x (App (Lam [a].t1) s1) (t1[a::=s1])" + and a4: "\a t1 s1 x. a\x \ P x (App (Lam [a].t1) s1) (t1[a::=s1])" shows "P x t s" proof - from a have "\(pi::name prm) x. P x (pi\t) (pi\s)" @@ -112,7 +112,7 @@ have f: "\c::name. c\(pi\a,pi\s1,pi\s2,x)" by (rule at_exists_fresh[OF at_name_inst], simp add: fs_name1) then obtain c::"name" - where f1: "c\(pi\a)" and f2: "c\(pi\s2,x)" and f3: "c\(pi\s1)" and f4: "c\(pi\s2)" + where f1: "c\(pi\a)" and f2: "c\x" and f3: "c\(pi\s1)" and f4: "c\(pi\s2)" by (force simp add: fresh_prod fresh_atm) have x: "P x (App (Lam [c].(([(c,pi\a)]@pi)\s1)) (pi\s2)) ((([(c,pi\a)]@pi)\s1)[c::=(pi\s2)])" using a4 f2 by (blast intro!: eqvt_beta) @@ -857,7 +857,6 @@ (*A*) apply(simp add: fresh_list_cons fresh_prod) done - lemma all_RED: assumes a: "\\t:\" and b: "\a \. (a,\)\set(\) \ (a\set(domain \)\\\RED \)" @@ -879,6 +878,27 @@ thus "(Lam [a].t)[<\>] \ RED \" using fresh \_inst by simp qed (force dest!: t1_elim t2_elim)+ + +lemma all_RED: + assumes a: "\\t:\" + and b: "\a \. (a,\)\set(\) \ (a\set(domain \)\\\RED \)" + shows "t[<\>]\RED \" +using a b +proof(nominal_induct t avoiding: \ \ \ rule: lam.induct) + case (Lam a t) --"lambda case" + have ih: "\\ \ \. \\ \ t:\; \c \. (c,\)\set \ \ c\set (domain \) \ \\RED \\ + \ t[<\>]\RED \" + and \_cond: "\c \. (c,\)\set \ \ c\set (domain \) \ \\RED \" + and fresh: "a\\" "a\\" + and "\ \ Lam [a].t:\" by fact + hence "\\1 \2. \=\1\\2 \ ((a,\1)#\)\t:\2" using t3_elim fresh by simp + then obtain \1 \2 where \_inst: "\=\1\\2" and typing: "((a,\1)#\)\t:\2" by blast + from ih have "\s\RED \1. t[<\>][a::=s] \ RED \2" using fresh typing \_cond + by (force dest: fresh_context simp add: psubst_subst) + hence "(Lam [a].(t[<\>])) \ RED (\1 \ \2)" by (simp only: abs_RED) + thus "(Lam [a].t)[<\>] \ RED \" using fresh \_inst by simp +qed (force dest!: t1_elim t2_elim)+ + (* identity substitution generated from a context \ *) consts "id" :: "(name\ty) list \ (name\lam) list"