Anforderungen  |   Konzepte  |   Entwurf  |   Entwicklung  |   Qualitätssicherung  |   Lebenszyklus  |   Steuerung
 
 
 
 

Benutzer

Quelle  Nominal2_FCB.thy

  Sprache: Isabelle
 

theory Nominal2_FCB
imports Nominal2_Abs
begin


text 
 A tactic which solves all trivial cases in function
 definitions, and leaves the others unchanged.
 


ML 
  all_trivials : (Proof.context -> Proof.method) context_parser =
 .succeed (fn ctxt =>
 let
 val tac = TRYALL (SOLVED' (full_simp_tac ctxt))
 in
 Method.SIMPLE_METHOD' (K tac)
 end)
 


method_setup all_trivials = all_trivials solves trivial goals


lemma Abs_lst1_fcb:
  fixes x y :: "'a :: at"
    and S T :: "'b :: fs"
  assumes e: "[[atom x]]lst. T = [[atom y]]lst. S"
  and f1: "[x y; atom y T; atom x (y x) T] ==> atom x f x T"
  and f2: "[x y; atom y T; atom x (y x) T] ==> atom y f x T"
  and p: "[S = (x y) T; x y; atom y T; atom x S]
    ==> (x y) (f x T) = f y S"
  shows "f x T = f y S"
  using e
  apply(case_tac "atom x S")
  apply(simp add: Abs1_eq_iff')
  apply(elim conjE disjE)
  apply(simp)
  apply(rule trans)
  apply(rule_tac p="(x y)" in supp_perm_eq[symmetric])
  apply(rule fresh_star_supp_conv)
  apply(simp add: flip_def supp_swap fresh_star_def f1 f2)
  apply(simp add: flip_commute p)
  apply(simp add: Abs1_eq_iff)
  done

lemma Abs_lst_fcb:
  fixes xs ys :: "'a :: fs"
    and S T :: "'b :: fs"
  assumes e: "(Abs_lst (ba xs) T) = (Abs_lst (ba ys) S)"
    and f1: "x. x set (ba xs) ==> x f xs T"
    and f2: "x. [supp T - set (ba xs) = supp S - set (ba ys); x set (ba ys)] ==> x f xs T"
    and eqv: "p. [p T = S; p ba xs = ba ys; supp p set (ba xs) set (ba ys)]
      ==> p (f xs T) = f ys S"
  shows "f xs T = f ys S"
  using e apply -
  apply(subst (asm) Abs_eq_iff2)
  apply(simp add: alphas)
  apply(elim exE conjE)
  apply(rule trans)
  apply(rule_tac p="p" in supp_perm_eq[symmetric])
  apply(rule fresh_star_supp_conv)
  apply(drule fresh_star_perm_set_conv)
  apply(rule finite_Diff)
  apply(rule finite_supp)
  apply(subgoal_tac "(set (ba xs) set (ba ys)) * f xs T")
  apply(metis Un_absorb2 fresh_star_Un)
  apply(subst fresh_star_Un)
  apply(rule conjI)
  apply(simp add: fresh_star_def f1)
  apply(simp add: fresh_star_def f2)
  apply(simp add: eqv)
  done

lemma Abs_set_fcb:
  fixes xs ys :: "'a :: fs"
    and S T :: "'b :: fs"
  assumes e: "(Abs_set (ba xs) T) = (Abs_set (ba ys) S)"
    and f1: "x. x ba xs ==> x f xs T"
    and f2: "x. [supp T - ba xs = supp S - ba ys; x ba ys] ==> x f xs T"
    and eqv: "p. [p T = S; p ba xs = ba ys; supp p ba xs ba ys] ==> p (f xs T) = f ys S"
  shows "f xs T = f ys S"
  using e apply -
  apply(subst (asm) Abs_eq_iff2)
  apply(simp add: alphas)
  apply(elim exE conjE)
  apply(rule trans)
  apply(rule_tac p="p" in supp_perm_eq[symmetric])
  apply(rule fresh_star_supp_conv)
  apply(drule fresh_star_perm_set_conv)
  apply(rule finite_Diff)
  apply(rule finite_supp)
  apply(subgoal_tac "(ba xs ba ys) * f xs T")
  apply(metis Un_absorb2 fresh_star_Un)
  apply(subst fresh_star_Un)
  apply(rule conjI)
  apply(simp add: fresh_star_def f1)
  apply(simp add: fresh_star_def f2)
  apply(simp add: eqv)
  done

lemma Abs_res_fcb:
  fixes xs ys :: "('a :: at_base) set"
    and S T :: "'b :: fs"
  assumes e: "(Abs_res (atom ` xs) T) = (Abs_res (atom ` ys) S)"
    and f1: "x. x atom ` xs ==> x supp T ==> x f xs T"
    and f2: "x. [supp T - atom ` xs = supp S - atom ` ys; x atom ` ys; x supp S] ==> x f xs T"
    and eqv: "p. [p T = S; supp p atom ` xs supp T atom ` ys supp S;
      p (atom ` xs supp T) = atom ` ys supp S] ==> p (f xs T) = f ys S"
  shows "f xs T = f ys S"
  using e apply -
  apply(subst (asm) Abs_eq_res_set)
  apply(subst (asm) Abs_eq_iff2)
  apply(simp add: alphas)
  apply(elim exE conjE)
  apply(rule trans)
  apply(rule_tac p="p" in supp_perm_eq[symmetric])
  apply(rule fresh_star_supp_conv)
  apply(drule fresh_star_perm_set_conv)
  apply(rule finite_Diff)
  apply(rule finite_supp)
  apply(subgoal_tac "(atom ` xs supp T atom ` ys supp S) * f xs T")
  apply(metis Un_absorb2 fresh_star_Un)
  apply(subst fresh_star_Un)
  apply(rule conjI)
  apply(simp add: fresh_star_def f1)
  apply(subgoal_tac "supp T - atom ` xs = supp S - atom ` ys")
  apply(simp add: fresh_star_def f2)
  apply(blast)
  apply(simp add: eqv)
  done



lemma Abs_set_fcb2:
  fixes as bs :: "atom set"
    and x y :: "'b :: fs"
    and c::"'c::fs"
  assumes eq: "[as]set. x = [bs]set. y"
  and fin: "finite as" "finite bs"
  and fcb1: "as * f as x c"
  and fresh1: "as * c"
  and fresh2: "bs * c"
  and perm1: "p. supp p * c ==> p (f as x c) = f (p as) (p x) c"
  and perm2: "p. supp p * c ==> p (f bs y c) = f (p bs) (p y) c"
  shows "f as x c = f bs y c"
proof -
  have "supp (as, x, c) supports (f as x c)"
    unfolding  supports_def fresh_def[symmetric]
    by (simp add: fresh_Pair perm1 fresh_star_def supp_swap swap_fresh_fresh)
  then have fin1: "finite (supp (f as x c))"
    using fin by (auto intro: supports_finite simp add: finite_supp supp_of_finite_sets supp_Pair)
  have "supp (bs, y, c) supports (f bs y c)"
    unfolding  supports_def fresh_def[symmetric]
    by (simp add: fresh_Pair perm2 fresh_star_def supp_swap swap_fresh_fresh)
  then have fin2: "finite (supp (f bs y c))"
    using fin by (auto intro: supports_finite simp add: finite_supp supp_of_finite_sets supp_Pair)
  obtain q::"perm" where
    fr1: "(q as) * (x, c, f as x c, f bs y c)" and
    fr2: "supp q * ([as]set. x)" and
    inc: "supp q as (q as)"
    using at_set_avoiding3[where xs="as" and c="(x, c, f as x c, f bs y c)" and x="[as]set. x"]
      fin1 fin2 fin
    by (auto simp add: supp_Pair finite_supp Abs_fresh_star dest: fresh_star_supp_conv)
  have "[q as]set. (q x) = q ([as]set. x)" by simp
  also have " = [as]set. x"
    by (simp only: fr2 perm_supp_eq)
  finally have "[q as]set. (q x) = [bs]set. y" using eq by simp
  then obtain r::perm where
    qq1: "q x = r y" and
    qq2: "q as = r bs" and
    qq3: "supp r (q as) bs"
    apply(drule_tac sym)
    apply(simp only: Abs_eq_iff2 alphas)
    apply(erule exE)
    apply(erule conjE)+
    apply(drule_tac x="p" in meta_spec)
    apply(simp add: set_eqvt)
    apply(blast)
    done
  have "as * f as x c" by (rule fcb1)
  then have "q (as * f as x c)"
    by (simp add: permute_bool_def)
  then have "(q as) * f (q as) (q x) c"
    apply(simp only: fresh_star_eqvt set_eqvt)
    apply(subst (asm) perm1)
    using inc fresh1 fr1
    apply(auto simp add: fresh_star_def fresh_Pair)
    done
  then have "(r bs) * f (r bs) (r y) c" using qq1 qq2 by simp
  then have "r (bs * f bs y c)"
    apply(simp only: fresh_star_eqvt set_eqvt)
    apply(subst (asm) perm2[symmetric])
    using qq3 fresh2 fr1
    apply(auto simp add: set_eqvt fresh_star_def fresh_Pair)
    done
  then have fcb2: "bs * f bs y c" by (simp add: permute_bool_def)
  have "f as x c = q (f as x c)"
    apply(rule perm_supp_eq[symmetric])
    using inc fcb1 fr1 by (auto simp add: fresh_star_def)
  also have " = f (q as) (q x) c"
    apply(rule perm1)
    using inc fresh1 fr1 by (auto simp add: fresh_star_def)
  also have " = f (r bs) (r y) c" using qq1 qq2 by simp
  also have " = r (f bs y c)"
    apply(rule perm2[symmetric])
    using qq3 fresh2 fr1 by (auto simp add: fresh_star_def)
  also have "... = f bs y c"
    apply(rule perm_supp_eq)
    using qq3 fr1 fcb2 by (auto simp add: fresh_star_def)
  finally show ?thesis by simp
qed


lemma Abs_res_fcb2:
  fixes as bs :: "atom set"
    and x y :: "'b :: fs"
    and c::"'c::fs"
  assumes eq: "[as]res. x = [bs]res. y"
  and fin: "finite as" "finite bs"
  and fcb1: "(as supp x) * f (as supp x) x c"
  and fresh1: "as * c"
  and fresh2: "bs * c"
  and perm1: "p. supp p * c ==> p (f (as supp x) x c) = f (p (as supp x)) (p x) c"
  and perm2: "p. supp p * c ==> p (f (bs supp y) y c) = f (p (bs supp y)) (p y) c"
  shows "f (as supp x) x c = f (bs supp y) y c"
proof -
  have "supp (as, x, c) supports (f (as supp x) x c)"
    unfolding  supports_def fresh_def[symmetric]
    by (simp add: fresh_Pair perm1 fresh_star_def supp_swap swap_fresh_fresh inter_eqvt supp_eqvt)
  then have fin1: "finite (supp (f (as supp x) x c))"
    using fin by (auto intro: supports_finite simp add: finite_supp supp_of_finite_sets supp_Pair)
  have "supp (bs, y, c) supports (f (bs supp y) y c)"
    unfolding  supports_def fresh_def[symmetric]
    by (simp add: fresh_Pair perm2 fresh_star_def supp_swap swap_fresh_fresh inter_eqvt supp_eqvt)
  then have fin2: "finite (supp (f (bs supp y) y c))"
    using fin by (auto intro: supports_finite simp add: finite_supp supp_of_finite_sets supp_Pair)
  obtain q::"perm" where
    fr1: "(q (as supp x)) * (x, c, f (as supp x) x c, f (bs supp y) y c)" and
    fr2: "supp q * ([as supp x]set. x)" and
    inc: "supp q (as supp x) (q (as supp x))"
    using at_set_avoiding3[where xs="as supp x" and c="(x, c, f (as supp x) x c, f (bs supp y) y c)"
      and x="[as supp x]set. x"]
      fin1 fin2 fin
    apply (auto simp add: supp_Pair finite_supp Abs_fresh_star dest: fresh_star_supp_conv)
    done
  have "[q (as supp x)]set. (q x) = q ([as supp x]set. x)" by simp
  also have " = [as supp x]set. x"
    by (simp only: fr2 perm_supp_eq)
  finally have "[q (as supp x)]set. (q x) = [bs supp y]set. y" using eq
    by(simp add: Abs_eq_res_set)
  then obtain r::perm where
    qq1: "q x = r y" and
    qq2: "(q as supp (q x)) = r (bs supp y)" and
    qq3: "supp r (bs supp y) q (as supp x)"
    apply(drule_tac sym)
    apply(simp only: Abs_eq_iff2 alphas)
    apply(erule exE)
    apply(erule conjE)+
    apply(drule_tac x="p" in meta_spec)
    apply(simp add: set_eqvt inter_eqvt supp_eqvt)
    done
  have "(as supp x) * f (as supp x) x c" by (rule fcb1)
  then have "q ((as supp x) * f (as supp x) x c)"
    by (simp add: permute_bool_def)
  then have "(q (as supp x)) * f (q (as supp x)) (q x) c"
    apply(simp only: fresh_star_eqvt set_eqvt)
    apply(subst (asm) perm1)
    using inc fresh1 fr1
    apply(auto simp add: fresh_star_def fresh_Pair)
    done
  then have "(r (bs supp y)) * f (r (bs supp y)) (r y) c" using qq1 qq2
    apply(perm_simp)
    apply simp
    done
  then have "r ((bs supp y) * f (bs supp y) y c)"
    apply(simp only: fresh_star_eqvt set_eqvt)
    apply(subst (asm) perm2[symmetric])
    using qq3 fresh2 fr1
    apply(auto simp add: set_eqvt fresh_star_def fresh_Pair)
    done
  then have fcb2: "(bs supp y) * f (bs supp y) y c" by (simp add: permute_bool_def)
  have "f (as supp x) x c = q (f (as supp x) x c)"
    apply(rule perm_supp_eq[symmetric])
    using inc fcb1 fr1
    apply (auto simp add: fresh_star_def)
    done
  also have " = f (q (as supp x)) (q x) c"
    apply(rule perm1)
    using inc fresh1 fr1 by (auto simp add: fresh_star_def)
  also have " = f (r (bs supp y)) (r y) c" using qq1 qq2
    apply(perm_simp)
    apply simp
    done
  also have " = r (f (bs supp y) y c)"
    apply(rule perm2[symmetric])
    using qq3 fresh2 fr1 by (auto simp add: fresh_star_def)
  also have "... = f (bs supp y) y c"
    apply(rule perm_supp_eq)
    using qq3 fr1 fcb2 by (auto simp add: fresh_star_def)
  finally show ?thesis by simp
qed

lemma Abs_lst_fcb2:
  fixes as bs :: "atom list"
    and x y :: "'b :: fs"
    and c::"'c::fs"
  assumes eq: "[as]lst. x = [bs]lst. y"
  and fcb1: "(set as) * f as x c"
  and fresh1: "set as * c"
  and fresh2: "set bs * c"
  and perm1: "p. supp p * c ==> p (f as x c) = f (p as) (p x) c"
  and perm2: "p. supp p * c ==> p (f bs y c) = f (p bs) (p y) c"
  shows "f as x c = f bs y c"
proof -
  have "supp (as, x, c) supports (f as x c)"
    unfolding  supports_def fresh_def[symmetric]
    by (simp add: fresh_Pair perm1 fresh_star_def supp_swap swap_fresh_fresh)
  then have fin1: "finite (supp (f as x c))"
    by (auto intro: supports_finite simp add: finite_supp)
  have "supp (bs, y, c) supports (f bs y c)"
    unfolding  supports_def fresh_def[symmetric]
    by (simp add: fresh_Pair perm2 fresh_star_def supp_swap swap_fresh_fresh)
  then have fin2: "finite (supp (f bs y c))"
    by (auto intro: supports_finite simp add: finite_supp)
  obtain q::"perm" where
    fr1: "(q (set as)) * (x, c, f as x c, f bs y c)" and
    fr2: "supp q * Abs_lst as x" and
    inc: "supp q (set as) q (set as)"
    using at_set_avoiding3[where xs="set as" and c="(x, c, f as x c, f bs y c)" and x="[as]lst. x"]
      fin1 fin2
    by (auto simp add: supp_Pair finite_supp Abs_fresh_star dest: fresh_star_supp_conv)
  have "Abs_lst (q as) (q x) = q Abs_lst as x" by simp
  also have " = Abs_lst as x"
    by (simp only: fr2 perm_supp_eq)
  finally have "Abs_lst (q as) (q x) = Abs_lst bs y" using eq by simp
  then obtain r::perm where
    qq1: "q x = r y" and
    qq2: "q as = r bs" and
    qq3: "supp r (q (set as)) set bs"
    apply(drule_tac sym)
    apply(simp only: Abs_eq_iff2 alphas)
    apply(erule exE)
    apply(erule conjE)+
    apply(drule_tac x="p" in meta_spec)
    apply(simp add: set_eqvt)
    apply(blast)
    done
  have "(set as) * f as x c" by (rule fcb1)
  then have "q ((set as) * f as x c)"
    by (simp add: permute_bool_def)
  then have "set (q as) * f (q as) (q x) c"
    apply(simp only: fresh_star_eqvt set_eqvt)
    apply(subst (asm) perm1)
    using inc fresh1 fr1
    apply(auto simp add: fresh_star_def fresh_Pair)
    done
  then have "set (r bs) * f (r bs) (r y) c" using qq1 qq2 by simp
  then have "r ((set bs) * f bs y c)"
    apply(simp only: fresh_star_eqvt set_eqvt)
    apply(subst (asm) perm2[symmetric])
    using qq3 fresh2 fr1
    apply(auto simp add: set_eqvt fresh_star_def fresh_Pair)
    done
  then have fcb2: "(set bs) * f bs y c" by (simp add: permute_bool_def)
  have "f as x c = q (f as x c)"
    apply(rule perm_supp_eq[symmetric])
    using inc fcb1 fr1 by (auto simp add: fresh_star_def)
  also have " = f (q as) (q x) c"
    apply(rule perm1)
    using inc fresh1 fr1 by (auto simp add: fresh_star_def)
  also have " = f (r bs) (r y) c" using qq1 qq2 by simp
  also have " = r (f bs y c)"
    apply(rule perm2[symmetric])
    using qq3 fresh2 fr1 by (auto simp add: fresh_star_def)
  also have "... = f bs y c"
    apply(rule perm_supp_eq)
    using qq3 fr1 fcb2 by (auto simp add: fresh_star_def)
  finally show ?thesis by simp
qed

lemma Abs_lst1_fcb2:
  fixes a b :: "atom"
    and x y :: "'b :: fs"
    and c::"'c :: fs"
  assumes e: "[[a]]lst. x = [[b]]lst. y"
  and fcb1: "a f a x c"
  and fresh: "{a, b} * c"
  and perm1: "p. supp p * c ==> p (f a x c) = f (p a) (p x) c"
  and perm2: "p. supp p * c ==> p (f b y c) = f (p b) (p y) c"
  shows "f a x c = f b y c"
using e
apply(drule_tac Abs_lst_fcb2[where c="c" and f="λ(as::atom list) . f (hd as)"])
apply(simp_all)
using fcb1 fresh perm1 perm2
apply(simp_all add: fresh_star_def)
done

lemma Abs_lst1_fcb2':
  fixes a b :: "'a::at_base"
    and x y :: "'b :: fs"
    and c::"'c :: fs"
  assumes e: "[[atom a]]lst. x = [[atom b]]lst. y"
  and fcb1: "atom a f a x c"
  and fresh: "{atom a, atom b} * c"
  and perm1: "p. supp p * c ==> p (f a x c) = f (p a) (p x) c"
  and perm2: "p. supp p * c ==> p (f b y c) = f (p b) (p y) c"
  shows "f a x c = f b y c"
using e
apply(drule_tac Abs_lst1_fcb2[where c="c" and f="λa . f ((inv atom) a)"])
using  fcb1 fresh perm1 perm2
apply(simp_all add: fresh_star_def inv_f_f inj_on_def atom_eqvt)
done

end

Messung V0.5 in Prozent
C=98 H=99 G=98

¤ Dauer der Verarbeitung: 0.15 Sekunden  (vorverarbeitet am  2026-06-10) ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

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.






                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Software

     Produkte
     Quellcodebibliothek

Aktivitäten

     Artikel über Sicherheit
     Anleitung zur Aktivierung von SSL

Muße

     Gedichte
     Musik
     Bilder

Jenseits des Üblichen ....

Besucherstatistik

Besucherstatistik

Monitoring

Montastic status badge