Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/Isabelle/Archive-of-Formal-Proofs/thys/SIFPL/   (Sammlung formaler Beweise Version 2026-5©)  Datei vom 29.4.2026 mit Größe 5 kB image not shown  

Quelle  PBIJ.thy

  Sprache: Isabelle
 

(*File: PBIJ.thy*)
(*Authors: Lennart Beringer and Martin Hofmann, LMU Munich 2008*)
theory PBIJ imports OBJ begin

subsectionPartial bijections

textPartial bijections between locations will be used in the next
  to define indistinguishability of objects and heaps. We define
  bijections as sets of pairs which satisfy the obvious
 .


type_synonym PBij = "(Location × Location) set"
definition Pbij :: "PBij set"
where "Pbij = { β . l1 l2 l3 l4. (l1,l2):β (l3,l4):β
                              ((l1 = l3) = (l2 = l4))}"

textDomain and codomain are defined as expected.

definition Pbij_Dom::"PBij ==> (Location set)"
where "Pbij_Dom β = {l . ll .(l,ll):β}"

definition Pbij_Rng::"PBij ==> (Location set)"
where "Pbij_Rng β = {ll . l .(l,ll):β}"

textWe also define the inverse operation, the composition, and a
  deciding when one bijection extends another.


definition Pbij_inverse::"PBij ==> PBij"
where "Pbij_inverse β = {(l,ll) . (ll,l):β}"
(*<*)
lemma Pbij_inverseI:"(l1,l2):β ==> (l2,l1):Pbij_inverse β"
by (simp add: Pbij_inverse_def)
lemma Pbij_inverseD:"(l1,l2):Pbij_inverse β ==> (l2,l1):β"
by (simp add: Pbij_inverse_def) 
(*>*)

definition Pbij_compose::"PBij ==> PBij ==> PBij"
where "Pbij_compose β γ = {(l,ll) . l1 . (l,l1):β (l1,ll):γ}"
(*<*)
lemma Pbij_composeI: "[(l1, l2) β; (l2, l3) γ] ==> (l1, l3) Pbij_compose β γ"
by (simp add: Pbij_compose_def, rule_tac x=l2 in exI, simp)
lemma Pbij_composeD: "(l1, l3) Pbij_compose β γ ==> l2 . (l1, l2) β (l2, l3) γ"
by (simp add: Pbij_compose_def)
(*>*)

definition Pbij_extends ::"PBij ==> PBij ==> bool"
where "Pbij_extends γ β = (β γ)"

textThese definitions satisfy the following properties.

lemma Pbij_insert:
  "[β Pbij;l Pbij_Rng β; ll Pbij_Dom β]
  ==> insert (ll, l) β Pbij"
(*<*)
apply (simp add: Pbij_def)
apply clarsimp
apply rule
  apply clarsimp apply (simp add: Pbij_Dom_def Pbij_Rng_def) apply fast
  apply clarsimp apply (simp add: Pbij_Dom_def Pbij_Rng_def) apply fast
done
(*>*)

lemma Pbij_injective:
  "β:Pbij ==> ( l l1 l2 . (l1,l):β (l2,l):β l1=l2)"
(*<*)
by (simp add: Pbij_def)
(*>*)

lemma Pbij_inverse_DomRng[rule_format]:
  "γ = Pbij_inverse β ==>
   (Pbij_Dom β = Pbij_Rng γ Pbij_Dom γ = Pbij_Rng β)"
(*<*)
by (simp add: Pbij_inverse_def Pbij_Dom_def Pbij_Rng_def) 
(*>*)

lemma Pbij_inverse_Dom: "Pbij_Dom β = Pbij_Rng (Pbij_inverse β)"
(*<*)
by (simp add: Pbij_inverse_def Pbij_Dom_def Pbij_Rng_def) 
(*>*)

lemma Pbij_inverse_Rng: "Pbij_Dom (Pbij_inverse β) = Pbij_Rng β"
(*<*)
by (simp add: Pbij_inverse_def Pbij_Dom_def Pbij_Rng_def) 
(*>*)

lemma Pbij_inverse_Pbij: "β:Pbij ==> (Pbij_inverse β) : Pbij"
(*<*)
by (simp add: Pbij_def Pbij_inverse_def)
(*>*)

lemma Pbij_inverse_Inverse[rule_format]:
  "γ = Pbij_inverse β ==> ( l ll . ((l,ll):β) = ((ll,l):γ))"
(*<*)
by (simp add: Pbij_inverse_def)
(*>*)

lemma Pbij_compose_Dom:
  "Pbij_Dom (Pbij_compose β γ) Pbij_Dom β"
(*<*)
by (simp add: Pbij_compose_def Pbij_Dom_def, fast)
(*>*)

lemma Pbij_compose_Rng:
  "Pbij_Rng (Pbij_compose β γ) Pbij_Rng γ"
(*<*)
by (simp add: Pbij_compose_def Pbij_Rng_def, fast)
(*>*)

lemma Pbij_compose_Pbij: 
  "[β : Pbij; γ : Pbij] ==> Pbij_compose β γ : Pbij"
(*<*)
by (simp add: Pbij_compose_def Pbij_def, clarsimp)
(*>*)

lemma Pbij_extends_inverse: 
 "Pbij_extends γ (Pbij_inverse β) = Pbij_extends (Pbij_inverse γ) β"
(*<*)
by (simp add: Pbij_extends_def Pbij_inverse_def, fast)
(*>*)

lemma Pbij_extends_reflexive:"Pbij_extends β β"
(*<*)
by (simp add: Pbij_extends_def)
(*>*)

lemma Pbij_extends_transitive:
"[Pbij_extends β γ; Pbij_extends γ δ] ==> Pbij_extends β δ"
(*<*)
by (simp add: Pbij_extends_def)
(*>*)

(*<*)
lemma Pbij_inverse_extends_twice_Aux:
"[ δ = Pbij_inverse ε; Pbij_extends ε γ; γ = Pbij_inverse β]
 ==> Pbij_extends δ β"
by (simp add: Pbij_extends_def Pbij_inverse_def, fastforce) 
(*>*)

lemma Pbij_inverse_extends_twice:
" Pbij_extends (Pbij_inverse (Pbij_inverse β)) β"
(*<*)
by (simp add: Pbij_extends_def Pbij_inverse_def)
(*>*)

textThe identity bijection on a heap associates each element of the
 's domain with itself.


definition mkId::"Heap ==> (Location × Location) set"
where "mkId h = {(l1,l2) . l1 = l2 l1 : Dom h}"

lemma mkId1: "(mkId h):Pbij"
(*<*)
by (simp add: mkId_def Pbij_def)
(*>*)

lemma mkId2: "Pbij_Dom (mkId h) = Dom h"
(*<*)
by (simp add: Dom_def Pbij_Dom_def mkId_def) 
(*>*)

lemma mkId2b: "Pbij_Rng (mkId h) = Dom h"
(*<*)
by (simp add: Dom_def Pbij_Rng_def mkId_def) 
(*>*)

lemma mkId4: "l:Dom h ==> (l,l):(mkId h)"
(*<*)
by (simp add: mkId_def)
(*>*)

lemma mkId4b: "(l,ll):(mkId h) ==> l:Dom h l = ll"
(*<*)
by (simp add: mkId_def, clarsimp)
(*>*)

textEnd of theory PBIJ
end

Messung V0.5 in Prozent
C=88 H=98 G=93

¤ Dauer der Verarbeitung: 0.3 Sekunden  ¤

*© 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.