summaryrefslogtreecommitdiff
path: root/src/Core/Thinning.idr
diff options
context:
space:
mode:
authorChloe Brown <chloe.brown.00@outlook.com>2023-04-02 09:41:38 +0100
committerChloe Brown <chloe.brown.00@outlook.com>2023-04-02 09:41:38 +0100
commit4f112495da9b05a83b56d572dbd188183901d8b4 (patch)
treec8daaea23a0ee306611c9a63fe9ca1ef6156245e /src/Core/Thinning.idr
parentef4dd592eea7e241583ea8c39a08092e11ef8b98 (diff)
Prove thinning Views are unique.
Diffstat (limited to 'src/Core/Thinning.idr')
-rw-r--r--src/Core/Thinning.idr32
1 files changed, 29 insertions, 3 deletions
diff --git a/src/Core/Thinning.idr b/src/Core/Thinning.idr
index 7ef2562..0b1de68 100644
--- a/src/Core/Thinning.idr
+++ b/src/Core/Thinning.idr
@@ -60,7 +60,35 @@ view (IsThinner (IsBase n)) = Drop IsId n
view (IsThinner (IsDrop thinner n)) = Drop (IsThinner thinner) n
view (IsThinner (IsKeep thinner n)) = Keep (IsThinner thinner) n
--- Operations ------------------------------------------------------------------
+-- Unique
+
+viewInverse : {0 thin : sx `Thins` sy} -> View thin -> sx `Thins` sy
+viewInverse (Id sy) = id sy
+viewInverse (Drop thin n) = drop thin n
+viewInverse (Keep thin n) = keep thin n
+
+viewInversePrf1 : (view : View thin) -> viewInverse view = thin
+viewInversePrf1 (Id _) = Refl
+viewInversePrf1 (Drop _ _) = Refl
+viewInversePrf1 (Keep _ _) = Refl
+
+viewInversePrf2 : (v : View thin) -> view (viewInverse v) = (rewrite viewInversePrf1 v in v)
+viewInversePrf2 (Id sy) = Refl
+viewInversePrf2 (Drop IsId n) = Refl
+viewInversePrf2 (Drop (IsThinner thinner) n) = Refl
+viewInversePrf2 (Keep {prf} IsId n) impossible
+viewInversePrf2 (Keep {prf = ItIsThinner} (IsThinner thinner) n) = Refl
+
+export
+viewUnique : (view1, view2 : View thin) -> view1 = view2
+viewUnique view1 view2 =
+ rewrite sym $ viewInversePrf2 view1 in
+ rewrite sym $ viewInversePrf2 view2 in
+ rewrite viewInversePrf1 view1 in
+ rewrite viewInversePrf1 view2 in
+ Refl
+
+-- Composition -----------------------------------------------------------------
comp : Thinner sy sz -> Thinner sx sy -> Thinner sx sz
comp (IsBase n) thinner1 = IsDrop thinner1 n
@@ -75,8 +103,6 @@ IsId . thin1 = thin1
(IsThinner thinner2) . IsId = IsThinner thinner2
(IsThinner thinner2) . (IsThinner thinner1) = IsThinner (comp thinner2 thinner1)
--- Composition Properties ------------------------------------------------------
-
-- Identities
export