summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChloe Brown <chloe.brown.00@outlook.com>2022-07-13 17:39:50 +0100
committerChloe Brown <chloe.brown.00@outlook.com>2022-07-13 17:39:50 +0100
commit725e40acb1f79af4c12886f65b7d5226daff5707 (patch)
tree23582d709ee3640d0ea8f073de83aa49d4776b86
parent7fb8f4a222c9047e5db85f98be4a72f9f2a7f444 (diff)
Prove renaming is fully congruent.less-fin
-rw-r--r--src/Data/Type/Properties.agda30
1 files changed, 30 insertions, 0 deletions
diff --git a/src/Data/Type/Properties.agda b/src/Data/Type/Properties.agda
index 8e862ed..e9d26ea 100644
--- a/src/Data/Type/Properties.agda
+++ b/src/Data/Type/Properties.agda
@@ -499,3 +499,33 @@ rename-congˡ A [ρs₁]≗[ρs₂] =
Wf.All.wfRec (On.wellFounded size <-wellFounded) _
Rename.IH Rename.rename-helper
A (Rename.do-congˡ [ρs₁]≗[ρs₂])
+
+rename-congʳ : ∀ ρs → A ≈ B → rename ρs A ≈ rename ρs B
+rename-congʳ ρs (var α) = var _
+rename-congʳ ρs unit = unit
+rename-congʳ ρs (bin A≈C B≈D) =
+ bin (rename-congʳ ρs A≈C) (rename-congʳ ρs B≈D)
+rename-congʳ ρs (all {α} {A} {β} {B} A≈B) = all (λ {γ} ∉₁ ∉₂ → begin
+ rename ((α′ , γ) ∷ []) (rename ((α , α′) ∷ ρs) A)
+ ≈⟨ rename-∘ ((α , α′) ∷ ρs) _ A ⟩
+ rename ((α , α′) ∷ ρs ++ (α′ , γ) ∷ []) A
+ ≈˘⟨ rename-∘ ((α , α′) ∷ []) _ A ⟩
+ rename (ρs ++ (α′ , γ) ∷ []) (rename ((α , α′) ∷ []) A)
+ ≈⟨ rename-congʳ ((ρs ++ (α′ , γ) ∷ [])) (A≈B α′∉∀α∙A α′∉∀β∙B) ⟩
+ rename (ρs ++ (α′ , γ) ∷ []) (rename ((β , α′) ∷ []) B)
+ ≈⟨ rename-∘ (((β , α′) ∷ [])) _ B ⟩
+ rename ((β , α′) ∷ ρs ++ (α′ , γ) ∷ []) B
+ ≡⟨ cong
+ ((λ δ → rename ((β , δ) ∷ ρs ++ (δ , γ) ∷ []) B) ∘ mkFresh ∘ (_++ _))
+ (free-≈ (all A≈B)) ⟩
+ rename ((β , β′) ∷ ρs ++ (β′ , γ) ∷ []) B
+ ≈˘⟨ rename-∘ ((β , β′) ∷ ρs) _ B ⟩
+ rename ((β′ , γ) ∷ []) (rename ((β , β′) ∷ ρs) B)
+ ∎)
+ where
+ αs = free (all α A) ++ map Subst.from ρs ++ map Subst.to ρs
+ α′ = mkFresh αs
+ β′ = mkFresh (free (all β B) ++ map Subst.from ρs ++ map Subst.to ρs)
+ α′∉∀α∙A = isFresh .distinct αs ∘ ∈-++⁺ˡ
+ α′∉∀β∙B = P.subst (α′ ∉_) (free-≈ (all A≈B)) α′∉∀α∙A
+ open ≈-Reasoning