module PDiff.Equality where
open import SOAS.Common
open import SOAS.Context
open import SOAS.Variable
open import SOAS.Families.Core
open import SOAS.Families.Build
open import SOAS.ContextMaps.Inductive
open import PDiff.Signature
open import PDiff.Syntax
open import SOAS.Metatheory.SecondOrder.Metasubstitution PD:Syn
open import SOAS.Metatheory.SecondOrder.Equality PD:Syn
private
variable
Ξ± Ξ² Ξ³ Ο : *T
Ξ Ξ Ξ : Ctx
infix 1 _βΉ_β’_ββ_
data _βΉ_β’_ββ_ : β π Ξ {Ξ±} β (π β· PD) Ξ± Ξ β (π β· PD) Ξ± Ξ β Set where
πUβα΄Έ : β
* βΜ£ βΉ β
β’ π β π ββ π
βA : β
* β β
* β β
* βΜ£ βΉ β
β’ (π β π) β π ββ π β (π β π )
βC : β
* β β
* βΜ£ βΉ β
β’ π β π ββ π β π
πUβα΄Έ : β
* βΜ£ βΉ β
β’ π β π ββ π
βA : β
* β β
* β β
* βΜ£ βΉ β
β’ (π β π) β π ββ π β (π β π )
βDβα΄Έ : β
* β β
* β β
* βΜ£ βΉ β
β’ π β (π β π ) ββ (π β π) β (π β π )
πXβα΄Έ : β
* βΜ£ βΉ β
β’ π β π ββ π
βNβα΄Έ : β
* βΜ£ βΉ β
β’ (β π) β π ββ π
βC : β
* β β
* βΜ£ βΉ β
β’ π β π ββ π β π
ββ : β
* βΜ£ βΉ β * β β’ ββ (xβ β π) ββ π
ββ : β
* βΜ£ βΉ β * β β’ ββ (π β xβ) ββ π
βC : β
* Β· * β© * βΜ£ βΉ β * β * β β’ ββ ββ πβ¨ xβ β xβ β© ββ ββ ββ πβ¨ xβ β xβ β©
βChβ : β
* Β· * β© * β β
* β© * β β
* β© * βΜ£ βΉ β * β
β’ ββ πβ¨ (πβ¨ xβ β©) β (π β¨ xβ β©) β© ββ ((β πβ¨ xβ β (π β¨ xβ β©) β© β£ πβ¨ xβ β©) β (ββ πβ¨ xβ β©))
β ((β πβ¨ (πβ¨ xβ β©) β xβ β© β£ π β¨ xβ β©) β (ββ π β¨ xβ β©))
open EqLogic _βΉ_β’_ββ_
open β-Reasoning
πUβα΄Ώ : β
* βΜ£ βΉ β
β’ π β π β π
πUβα΄Ώ = tr (ax βC withγ π β π γ) (ax πUβα΄Έ withγ π γ)
πUβα΄Ώ : β
* βΜ£ βΉ β
β’ π β π β π
πUβα΄Ώ = tr (ax βC withγ π β π γ) (ax πUβα΄Έ withγ π γ)
βDβα΄Ώ : β
* β β
* β β
* βΜ£ βΉ β
β’ (π β π) β π β (π β π ) β (π β π )
βDβα΄Ώ = begin
(π β π) β π ββ¨ ax βC withγ π β π β π γ β©
π β (π β π) ββ¨ ax βDβα΄Έ withγ π β π β π γ β©
(π β π) β (π β π) ββ¨ congβ[ ax βC withγ π β π γ ][ ax βC withγ π β π γ ]inside βα΅ β βα΅ β©
(π β π ) β (π β π ) β
πXβα΄Ώ : β
* βΜ£ βΉ β
β’ π β π β π
πXβα΄Ώ = tr (ax βC withγ π β π γ) (ax πXβα΄Έ withγ π γ)
βNβα΄Ώ : β
* βΜ£ βΉ β
β’ π β (β π) β π
βNβα΄Ώ = tr (ax βC withγ π β (β π) γ) (ax βNβα΄Έ withγ π γ)
βid : β
β βΉ β * β β’ ββ xβ β π
βid = begin
ββ xβ ββ¨ cong[ thm πUβα΄Ώ withγ xβ γ ]inside ββ βα΅ β©β
ββ (xβ β π) ββ¨ ax ββ withγ π γ β©
π β
βπ : β
β βΉ β * β β’ ββ π β π
βπ = begin
ββ π ββ¨ cong[ ax πXβα΄Έ withγ xβ γ ]inside ββ βα΅ β©β
ββ (π β xβ) ββ¨ ax ββ withγ π γ β©
π β
βChβ : β
* β© * β β
* β© * βΜ£ βΉ β * β
β’ ββ πβ¨ (πβ¨ xβ β©) β© β (β πβ¨ xβ β© β£ πβ¨ xβ β©) β (ββ πβ¨ xβ β©)
βChβ = begin
ββ (πβ¨ (πβ¨ xβ β©) β©)
ββ¨ ax βChβ withγ πβ¨ xβ β© β πβ¨ xβ β© β π γ β©
(β πβ¨ xβ β© β£ (πβ¨ xβ β©)) β (ββ (πβ¨ xβ β©))
β ((β πβ¨ (πβ¨ xβ β©) β© β£ π) β (ββ π))
ββ¨ cong[ thm βπ ]inside (β πβ¨ xβ β© β£ (πβ¨ xβ β©)) β (ββ (πβ¨ xβ β©)) β
((β πβ¨ (πβ¨ xβ β©) β© β£ π) β βαΆ) β©
(β πβ¨ xβ β© β£ (πβ¨ xβ β©)) β (ββ (πβ¨ xβ β©))
β (β πβ¨ (πβ¨ xβ β©) β© β£ π) β π
ββ¨ cong[ thm πXβα΄Ώ withγ (β πβ¨ (πβ¨ xβ β©) β© β£ π) γ ]inside (β πβ¨ xβ β© β£ (πβ¨ xβ β©)) β (ββ (πβ¨ xβ β©)) β βαΆ β©
(β πβ¨ xβ β© β£ (πβ¨ xβ β©)) β (ββ (πβ¨ xβ β©))
β π
ββ¨ thm πUβα΄Ώ withγ (β πβ¨ xβ β© β£ (πβ¨ xβ β©)) β (ββ (πβ¨ xβ β©)) γ β©
(β πβ¨ xβ β© β£ πβ¨ xβ β©) β (ββ πβ¨ xβ β©)
β