overriding-update

By julien

October 13, 2008

Contents

theory AxOverrAndUpd imports Main begin

we define a locale containing our symbols, the constant empty set and the first three axioms

locale ax123 = fixes over :: ′a ⇒ ′a ⇒ ′a (infixl ▷ 101 ) fixes min :: ′a ⇒ ′a ⇒ ′a (infixl ⊖ 102 ) fixes e :: ′a assumes idemp: f ▷ f = f assumes empty: f ⊖ f = e assumes swap: f ⊖ g ▷ g = g ▷ f

Then we define three different locales containing a different set of axioms. We use it to find proofs of some laws without using all the axioms.

locale ax1234 = ax123 +

assumes dbmin: f ⊖ (g ⊖ h) = f ⊖ g ▷ f ⊖ (f ⊖ h)

locale ax12345 = ax1234 + assumes distr: (f ▷ g) ⊖ h = (f ⊖ h) ▷ (g ⊖ h)

locale ax1235 = ax123 + assumes distr: (f ▷ g) ⊖ h = (f ⊖ h) ▷ (g ⊖ h)

lemma (in ax12345 ) eUf : shows e ▷ f = f by (metis empty swap idemp)

lemma (in ax12345 ) fUe: shows f ▷ e = f by (metis distr eUf empty idemp swap)

lemma (in ax12345 ) fMe: shows f ⊖ e = f by (metis eUf fUe swap)

lemma (in ax12345 ) overlap1 :

shows over (min f g) f = f by (metis dbmin distr eUf empty fMe fUe swap)

lemma (in ax12345 ) combrem: shows f ⊖ g ⊖ h = f ⊖ (g ▷ h)

by (metis dbmin distr eUf empty fMe fUe overlap1 swap)

lemma (in ax12345 ) partition1 :

shows over (min f (min f g)) (min f g) = f by (metis overlap1 swap)

lemma (in ax12345 ) eMf : shows e ⊖ f = e by (metis fUe overlap1 )

lemma (in ax12345 ) weakswap: shows over f (min g f ) = over f g

by (metis dbmin empty fMe overlap1 swap) lemma (in ax12345 ) fMgMg: shows (min (min f g) g) = min f g

by (metis combrem idemp)

lemma (in ax12345 ) partition2 :

shows over (min f g) (min f (min f g)) = f by (metis overlap1 weakswap)

lemma (in ax12345 ) fMgMf : shows f ⊖ g ⊖ f = e

by (metis distr empty fUe overlap1 )

lemma (in ax12345 ) overlap2 :

shows over f (min f g) = f by (metis fMgMf fUe weakswap)

lemma (in ax12345 ) lem1 :

shows min f (over f g) = e by (metis combrem empty fMgMf )

lemma (in ax12345 ) fUgUf :

shows over (over f g) f = over f g by (metis distr eUf empty idemp swap)

lemma (in ax12345 ) weaksym: shows min (min f g) h = min (min f h) g

by (metis combrem distr eUf fMgMf fUgUf weakswap)

lemma (in ax12345 ) lem2 : shows over f (min g (min g f )) = f

by (metis empty fUe weakswap weaksym)

lemma (in ax12345 ) lem3 :

shows min f (min g f ) = f

by (metis dbmin empty fMe overlap1 )

lemma (in ax12345 ) lem4 :

shows min (over (over f g) h) f = over (min g f ) (min h f )

proof − from distr[where h=f ] have (f ▷ g ▷ h) ⊖ f = (f ▷ g) ⊖ f ▷ h ⊖ f by (metis distr eMf fMe fUe)

also from distr[where h=f ] have … = f ⊖ f ▷ g⊖ f ▷ h ⊖ f by (metis distr eMf eUf empty fMe fMgMf fUe)

also from empty[where f =f ] have … = e ▷ g ⊖ f ▷ h ⊖ f by simp also from eUf [where f =g ⊖ f ] have … = g ⊖ f ▷ h ⊖ f by simp finally show ?thesis by simp qed

lemma (in ax12345 ) assoc:

shows over (over f g) h = over f (over g h)

by (metis combrem distr eUf empty lem3 lem4 overlap1 swap weakswap) lemma (in ax12345 ) weaksym3 :

shows f ⊖ g ▷ f ⊖ h = f ⊖ h ▷ f ⊖ g

proof (neg-clausify) assume 0 : (f ::′a::type) ⊖ (g::′a::type) ▷ f ⊖ (h::′a::type) ≠ f ⊖ h ▷ f ⊖ g have 1 : ⋀(X1 ::′a::type) (X2 ::′a::type) X3 ::′a::type. X1 ⊖ (X2 ▷ X3 ) = X1 ⊖ X2 ⊖ (X3 ⊖ X2 ) by (metis combrem weakswap) have 2 : ⋀(X1 ::′a::type) (X2 ::′a::type) X3 ::′a::type. X1 ⊖ X2 ⊖ X3 = X1 ⊖ X2 ⊖ (X3 ⊖ X2 ) by (metis 1 combrem) have 3 : ⋀(X1 ::′a::type) (X2 ::′a::type) X3 ::′a::type. X1 ▷ X2 ⊖ X1 ⊖ X3 = X1 ▷ X2 ⊖ X3 by (metis weakswap weaksym) have 4 : ⋀(X1 ::′a::type) X2 ::′a::type. (e::′a::type) ▷ X2 ⊖ X1 = (X1 ▷ X2 ) ⊖ X1 by (metis distr empty) have 5 : ⋀(X1 ::′a::type) (X2 ::′a::type) X3 ::′a::type.

X1 ▷ X3 ⊖ (X2 ⊖ X1 ) = (X1 ▷ X3 ) ⊖ (X2 ⊖ X1 ) by (metis distr lem3 ) have 6 : ⋀(X1 ::′a::type) X2 ::′a::type. X2 ⊖ X1 = (X1 ▷ X2 ) ⊖ X1 by (metis 4 eUf ) have 7 : ⋀(X1 ::′a::type) X2 ::′a::type. (X2 ▷ X1 ) ⊖ (X1 ⊖ X2 ) = X2 ⊖ (X1 ⊖ X2 ) by (metis 6 swap) have 8 : ⋀(X1 ::′a::type) X2 ::′a::type. (X2 ▷ X1 ) ⊖ (X1 ⊖ X2 ) = X2 by (metis 7 lem3 ) have 9 : ⋀(X1 ::′a::type) X2 ::′a::type. X1 ⊖ (X1 ⊖ (X1 ⊖ X2 )) = X1 ⊖ X2 by (metis 8 overlap1 ) have 10 : ⋀(X1 ::′a::type) (X2 ::′a::type) X3 ::′a::type.

X1 ⊖ X2 ▷ X1 ⊖ X3 = X1 ⊖ (X2 ⊖ (X1 ⊖ X3 )) by (metis dbmin 9 ) have 11 : ⋀(X1 ::′a::type) (X2 ::′a::type) X3 ::′a::type.

X1 ▷ X2 ⊖ X1 ⊖ X3 = X1 ▷ X2 ⊖ (X3 ⊖ X1 ) by (metis 3 2 ) have 12 : ⋀(X1 ::′a::type) (X2 ::′a::type) X3 ::′a::type. X1 ▷ X2 ⊖ X3 = X1 ▷ X2 ⊖ (X3 ⊖ X1 ) by (metis 11 3 ) have 13 : ⋀(X1 ::′a::type) (X2 ::′a::type) X3 ::′a::type. (X1 ▷ X2 ) ⊖ (X3 ⊖ X1 ) = X1 ▷ X2 ⊖ X3 by (metis 12 5 ) have 14 : ⋀(X1 ::′a::type) (X2 ::′a::type) X3 ::′a::type.

X1 ⊖ (X3 ⊖ (X1 ⊖ X2 )) = X1 ⊖ X2 ▷ X1 ⊖ X3 by (metis 13 overlap1 ) have 15 : (f ::′a::type) ⊖ ((g::′a::type) ⊖ (f ⊖ (h::′a::type))) ≠ f ⊖ h ▷ f ⊖ g by (metis 0 10 ) have 16 : (f ::′a::type) ⊖ ((g::′a::type) ⊖ (f ⊖ (h::′a::type))) ≠ f ⊖ (h ⊖ (f ⊖ g)) by (metis 15 10 ) have 17 : ⋀(X1 ::′a::type) (X2 ::′a::type) X3 ::′a::type.

X1 ⊖ (X2 ⊖ (X1 ⊖ X3 )) = X1 ⊖ (X3 ⊖ (X1 ⊖ X2 )) by (metis 14 10 ) show False by (metis 16 17 ) qed

lemma (in ax12345 ) drem:

shows f ⊖ (g ⊖ h) = f ⊖ (f ⊖ h) ▷ f ⊖ g

by (metis dbmin weaksym3 )

lemma (in ax12345 ) lem6 :

shows min (over f g) (min g f ) = f by (metis distr eUf empty lem3 swap)

lemma (in ax12345 ) lem7 :

shows min (over f g) (min h f ) = over f (min g h)

proof (neg-clausify) assume 0 : ((f ::′a::type) ▷ (g::′a::type)) ⊖ ((h::′a::type) ⊖ f ) ≠ f ▷ g ⊖ h have 1 : ⋀(X1 ::′a::type) (X2 ::′a::type) X3 ::′a::type. X1 ⊖ (X2 ▷ X3 ) = X1 ⊖ X2 ⊖ (X3 ⊖ X2 ) by (metis combrem weakswap) have 2 : ⋀(X1 ::′a::type) (X2 ::′a::type) X3 ::′a::type. X1 ⊖ X2 ⊖ X3 = X1 ⊖ X2 ⊖ (X3 ⊖ X2 ) by (metis 1 combrem) have 3 : ⋀(X1 ::′a::type) (X2 ::′a::type) X3 ::′a::type. X1 ▷ X2 ⊖ X1 ⊖ X3 = X1 ▷ X2 ⊖ X3 by (metis weakswap weaksym) have 4 : ⋀(X1 ::′a::type) (X2 ::′a::type) X3 ::′a::type.

X1 ▷ X3 ⊖ (X2 ⊖ X1 ) = (X1 ▷ X3 ) ⊖ (X2 ⊖ X1 ) by (metis distr lem3 ) have 5 : ⋀(X1 ::′a::type) (X2 ::′a::type) X3 ::′a::type.

X1 ▷ X2 ⊖ X1 ⊖ X3 = X1 ▷ X2 ⊖ (X3 ⊖ X1 ) by (metis 3 2 ) have 6 : ⋀(X1 ::′a::type) (X2 ::′a::type) X3 ::′a::type. X1 ▷ X2 ⊖ X3 = X1 ▷ X2 ⊖ (X3 ⊖ X1 ) by (metis 5 3 ) have 7 : ⋀(X1 ::′a::type) (X2 ::′a::type) X3 ::′a::type. X1 ▷ X3 ⊖ X2 = (X1 ▷ X3 ) ⊖ (X2 ⊖ X1 ) by (metis 4 6 ) show False by (metis 0 7 ) qed

lemma (in ax12345 )

shows over (min f g) (min g h) = over (min g h) (min f g) by (metis combrem overlap2 swap)

locale ax-restri = ax12345 + fixes dorestri::′a ⇒ ′a⇒ ′a (infixl ↓ 103 ) assumes restri: f ↓ g = f ⊖ (f ⊖ g)

lemma (in ax-restri) idemp2 :

shows f ↓ f = f by (metis lem3 restri)

lemma (in ax-restri)

shows f ↓ g ▷ f = f by (metis overlap1 restri)

lemma (in ax-restri) lem9 : shows f ↓ g ⊖ g = e by (metis empty restri weaksym)

lemma (in ax-restri) shows f ↓ g ↓ (h ⊖ g) = e by (metis drem eUf empty fMe lem2 lem3 lem7 lem9 overlap1 restri)

lemma (in ax-restri) lem11 :

shows f ⊖ h ▷ f ⊖ f ↓ h = f ⊖ h by (metis eUf lem9 restri swap)

lemma (in ax-restri) lem12 :

shows f ⊖ f ↓ h ▷ f ⊖ h = f ⊖ f ↓ h

by(metis distr drem eUf empty fMe overlap1 overlap2 restri swap)

lemma (in ax-restri) lem13 : shows f ⊖ f ↓ h = f ⊖ h by (metis empty fUe lem7 overlap1 restri)

lemma (in ax-restri)

shows dorestri f (dorestri g h) = dorestri (dorestri f g) h

proof − from drem[where f =f and g=g and h=g⊖ h] have f ↓ (g ↓ h) = f ⊖ (f ⊖ (f ⊖ (g ⊖ h)) ▷ f ⊖ g) by (metis drem restri) also from combrem[where f =f ] have … = f ⊖ (f ⊖ (f ⊖ ( g ⊖ h))) ⊖ (f ⊖ g) by simp also from weaksym[where f =f ] have … = f ⊖ (f ⊖ g) ⊖ (f ⊖ (f ⊖ (g ⊖ h))) by simp also from drem[where f =f and g=g] have … = f ⊖ (f ⊖ g) ⊖ (f ⊖ (f ⊖ (f ⊖ h) ▷ f ⊖ g)) by simp also from combrem[where f =f ] have … = f ⊖ (f ⊖g ▷ (f ⊖(f ⊖(f ⊖h))) ⊖ (f ⊖g)) by simp also from lem13 [where f =f ] have … = f ⊖ (f ⊖g ▷ f ⊖h ⊖ (f ⊖g)) by (metis combrem lem13 restri weakswap) also from weaksym[where f =f ] have … = f ⊖ (f ⊖g ▷ f ⊖(f ⊖g)⊖h) by simp also from combrem[where f =f ] have … = f ⊖ (f ⊖g) ⊖ (f ⊖(f ⊖g)⊖h) by simp finally show ?thesis by (metis restri weaksym) qed

lemma (in ax-restri) weaksymRes: shows dorestri (dorestri f g) h = dorestri (dorestri f h) g by(metis combrem restri weakswap weaksym)

lemma (in ax-restri) lem16 :

shows min f (dorestri g h) = over (min f g) (min f h)

proof (neg-clausify) assume 0 : (f ::′a::type) ⊖ (g::′a::type) ↓ (h::′a::type) ≠ f ⊖ g ▷ f ⊖ h have 1 : ⋀(X1 ::′a::type) (X2 ::′a::type) X3 ::′a::type.

X1 ⊖ (X1 ⊖ X2 ) ⊖ (X1 ⊖ (X1 ⊖ X2 ) ⊖ X3 ) =

X1 ⊖ (X1 ⊖ X3 ) ⊖ (X1 ⊖ (X1 ⊖ X3 ) ⊖ X2 ) by (metis weaksymRes restri) have 2 : (f ::′a::type) ⊖ (g::′a::type) ▷ f ⊖ (h::′a::type) ≠ f ⊖ (g ⊖ (g ⊖ h)) by (metis 0 restri) have 3 : ⋀(X1 ::′a::type) (X2 ::′a::type) X3 ::′a::type. X1 ⊖ (X2 ▷ X3 ) = X1 ⊖ X2 ⊖ (X3 ⊖ X2 ) by (metis combrem weakswap) have 4 : ⋀(X1 ::′a::type) (X2 ::′a::type) X3 ::′a::type. X1 ⊖ X2 ⊖ X3 = X1 ⊖ X2 ⊖ (X3 ⊖ X2 ) by (metis 3 combrem) have 5 : ⋀(X1 ::′a::type) (X2 ::′a::type) X3 ::′a::type. X1 ⊖ X3 = X1 ⊖ X3 ⊖ (X2 ⊖ X1 ) by (metis weaksym lem3 ) have 6 : ⋀(X1 ::′a::type) (X2 ::′a::type) X3 ::′a::type.

X1 ⊖ (X3 ⊖ (X1 ⊖ X2 )) = X1 ⊖ X2 ▷ X1 ⊖ X3 by (metis lem7 overlap1 ) have 7 : ⋀(X1 ::′a::type) X2 ::′a::type. (e::′a::type) ▷ X2 ⊖ X1 = (X1 ▷ X2 ) ⊖ X1 by (metis distr empty) have 8 : ⋀(X1 ::′a::type) X2 ::′a::type. X2 ⊖ X1 = (X1 ▷ X2 ) ⊖ X1 by (metis 7 eUf ) have 9 : ⋀(X1 ::′a::type) (X2 ::′a::type) X3 ::′a::type.

X3 ⊖ (X1 ▷ X2 ) = (X1 ▷ X2 ▷ X3 ) ⊖ X1 ⊖ X2 by (metis combrem 8 ) have 10 : ⋀(X1 ::′a::type) (X2 ::′a::type) X3 ::′a::type.

X3 ⊖ X1 ⊖ X2 = (X1 ▷ X2 ▷ X3 ) ⊖ X1 ⊖ X2 by (metis 9 combrem) have 11 : ⋀(X1 ::′a::type) (X2 ::′a::type) X3 ::′a::type. X3 ⊖ X1 ⊖ X2 = (X2 ▷ X3 ) ⊖ X1 ⊖ X2 by (metis 10 assoc 8 ) have 12 : ⋀(X1 ::′a::type) (X2 ::′a::type) X3 ::′a::type.

(X1 ▷ X2 ) ⊖ ((X1 ▷ X2 ) ⊖ X3 ) ⊖ (X2 ⊖ ((X1 ▷ X2 ) ⊖ X3 ) ⊖ X1 ) = (X1 ▷ X2 ) ⊖ ((X1 ▷ X2 ) ⊖ X1 ) ⊖ ((X1 ▷ X2 ) ⊖ ((X1 ▷ X2 ) ⊖ X1 ) ⊖ X3 ) by (metis 1 11 ) have 13 : ⋀(X1 ::′a::type) (X2 ::′a::type) X3 ::′a::type.

X1 ⊖ ((X1 ▷ X2 ) ⊖ X3 ) = (X1 ▷ X2 ) ⊖ ((X1 ▷ X2 ) ⊖ X1 ) ⊖ ((X1 ▷ X2 ) ⊖ ((X1 ▷ X2 ) ⊖ X1 ) ⊖ X3 ) by (metis 12 weaksym 4 lem7 empty fUe) have 14 : ⋀(X1 ::′a::type) (X2 ::′a::type) X3 ::′a::type.

X1 ⊖ ((X1 ▷ X2 ) ⊖ X3 ) = X1 ⊖ (X1 ⊖ X3 ) by (metis 13 8 lem7 empty fUe) have 15 : ⋀(X1 ::′a::type) (X2 ::′a::type) X3 ::′a::type.

X1 ⊖ (X3 ⊖ (X1 ⊖ (X1 ⊖ X2 ))) = X1 ⊖ (X3 ⊖ X2 ) by (metis drem 6 ) have 16 : ⋀(X1 ::′a::type) (X2 ::′a::type) X3 ::′a::type.

X1 ⊖ (X3 ⊖ (X1 ⊖ X2 )) = X1 ⊖ X3 ▷ X1 ⊖ X2 by (metis weaksym3 6 ) have 17 : ⋀(X1 ::′a::type) (X2 ::′a::type) X3 ::′a::type.

X1 ⊖ (X3 ⊖ (X1 ⊖ X2 )) = X1 ⊖ (X2 ⊖ (X1 ⊖ X3 )) by (metis 16 6 ) have 18 : (f ::′a::type) ⊖ ((h::′a::type) ⊖ (f ⊖ (g::′a::type))) ≠ f ⊖ (g ⊖ (g ⊖ h)) by (metis 2 6 ) have 19 : ⋀(X1 ::′a::type) (X2 ::′a::type) X3 ::′a::type.

X1 ⊖ (X2 ⊖ X3 ) = X1 ⊖ (X2 ⊖ (X1 ⊖ (X2 ⊖ X3 ))) by (metis 17 5 ) have 20 : (f ::′a::type) ⊖ ((g::′a::type) ⊖ (f ⊖ (h::′a::type))) ≠ f ⊖ (g ⊖ (g ⊖ h)) by (metis 18 17 ) have 21 : ⋀(X1 ::′a::type) (X2 ::′a::type) X4 ::′a::type.

X1 ⊖ (X2 ⊖ (X1 ⊖ (X2 ⊖ (X2 ⊖ X4 )))) = X1 ⊖ (X2 ⊖ (X2 ⊖ X4 )) by (metis 19 14 ) have 22 : ⋀(X1 ::′a::type) (X2 ::′a::type) X4 ::′a::type.

X1 ⊖ (X2 ⊖ (X1 ⊖ X4 )) = X1 ⊖ (X2 ⊖ (X2 ⊖ X4 )) by (metis 21 15 ) show False by (metis 20 22 ) qed

lemma (in ax-restri)

shows min f (dorestri g h) = min f (dorestri h g) by (metis lem16 weaksym3 )

lemma (in ax-restri) lem18 :

shows (f ▷ g) ↓ h = f ↓ h ▷ g ↓ h

proof − from distr[where f =f ] have min (over f g) (min (over f g) h) = min (over f g) (over (min f h) (min g h)) by simp also from distr[where f =f ] have … = over (min f (over (min f h) (min g

h))) (min g (over (min f h) (min g h))) by simp also from combrem[where f =f ] have … = over (min (min f (min f h)) (min g h)) (min g (over (min f h) (min g h))) by simp also from weaksym[where f =f ] have … = over (min (min f (min g h)) (min f h)) (min g (over (min f h) (min g h))) by simp also from drem[where f =f and g=g] have … = over (min (over (min f (min f h)) (min f g)) (min f h)) (min g (over (min f h) (min g h))) by simp also from distr[where h=f ⊖h] have … = over (over (min (min f (min f h)) (min f h)) (min (min f g) (min f h))) (min g (over (min f h) (min g h))) by simp also from fMgMg[where f =f ] have … = f ⊖(f ⊖h) ▷ f ⊖g⊖(f ⊖h) ▷ g⊖(f ⊖h ▷ g⊖h) by simp also from weaksym[where f =f ] have … = f ⊖(f ⊖h) ▷ f ⊖(f ⊖h)⊖g ▷ g⊖(f ⊖h ▷ g⊖h) by simp also from overlap2 [where g=g] have … = f ⊖(f ⊖h) ▷ g⊖(f ⊖h ▷ g⊖h) by simp also from combrem[where f =g] have … = f ⊖(f ⊖h) ▷ g⊖(f ⊖h)⊖(g⊖h) by simp also from drem[where f =g and g=f ] have … = f ⊖(f ⊖h) ▷ (g⊖(g⊖h) ▷

g⊖f ) ⊖ (g⊖h) by simp also from distr[where h=g⊖h] have … = f ⊖(f ⊖h) ▷ (g⊖(g⊖h)⊖(g⊖h) ▷

g⊖f ⊖(g⊖h)) by simp also from fMgMg[where f =g] have … = f ⊖(f ⊖h) ▷ (g⊖(g⊖h) ▷ g⊖f ⊖(g⊖h)) by simp also from weaksym[where f =g] have … = f ⊖(f ⊖h) ▷ (g⊖(g⊖h) ▷ g⊖(g⊖h)⊖f ) by simp also from overlap2 [where g=f ] have … = f ⊖(f ⊖h) ▷ g⊖(g⊖h) by simp finally show ?thesis by (simp add: restri) qed

lemma (in ax-restri) lem19 :

shows f ↓ (g ▷ h) = f ↓ g ▷ f ↓ h

by (metis combrem drem restri weaksym) lemma (in ax-restri)

shows (f ▷ g) ↓ (f ▷ h) = f ▷ g ↓ h by (metis combrem distr eUf empty lem7 restri weaksym)

lemma (in ax-restri) shows f ↓ (g ⊖ h) = f ↓ g ⊖ h

apply (simp add:restri) by (metis combrem dbmin distr eUf empty fUe lem18 lem3 lem7 restri weaksym)

lemma (in ax-restri) lem22 : shows (f ⊖ g) ↓ h = f ↓ h ⊖ g

by(metis combrem dbmin distr eUf empty fUe lem18 lem3 lem7 restri weakswap weaksym)

lemma (in ax-restri)

shows (f ⊖ h) ↓ (g ⊖ h) = f ↓ g ⊖ h apply (simp add: restri) by (metis dbmin eMf empty fMe fUe lem22 restri)

lemma (in ax-restri) lem24 : shows f ⊖ g ▷ h ↓ g = h ↓ g ▷ f ⊖ g

apply (simp add: restri) by (metis swap restri combrem distr dbmin empty eMf fUe restri)

lemma (in ax-restri) shows x ↓ y ⊖ z ▷ v ⊖ (y ▷ w) = v ⊖ (y ▷ w) ▷ (x ↓ y) ⊖ z

by (metis lem22 combrem weaksym lem24 combrem)

lemma (in ax-restri) shows x ↓ y ⊖ z ▷ v ⊖ (x ▷ w) = v ⊖ (x ▷ w) ▷ x ↓ y ⊖ z

proof − from idemp2 [where f =x] have x↓y⊖z ▷ v⊖(x▷w) = x↓x↓y⊖z ▷ v⊖(x▷w) by simp also from weaksymRes[where f =x] have … = x↓y↓x⊖z ▷ v⊖(x▷w) by simp also from lem22 [where g=z] have … = (x↓y⊖z)↓x ▷ v⊖(x▷w) by simp also from combrem[where f =v] have … = (x↓y⊖z)↓x ▷ v⊖x⊖w by simp also from weaksym[where f =v] have … = (x↓y⊖z)↓x ▷ v⊖w⊖x by simp also from lem24 [where g=x] have … = v⊖w⊖x ▷ (x↓y⊖z)↓x by simp also from weaksym[where f =v] have … = v⊖x⊖w ▷ (x↓y⊖z)↓x by simp also from combrem[where f =v] have … = v⊖(x▷w) ▷ (x↓y⊖z)↓x by simp also from lem22 [where g=z] have … = v⊖(x▷w) ▷ x↓y↓x⊖z by simp also from weaksymRes[where f =x] have … = v⊖(x▷w) ▷ x↓x↓y⊖z by simp also from idemp2 [where f =x] have … = v⊖(x▷w) ▷ x ↓ y⊖z by simp finally show ?thesis by (simp add: restri) qed

end