summaryrefslogtreecommitdiff
path: root/src/Data/Term.idr
diff options
context:
space:
mode:
authorGreg Brown <greg.brown01@ed.ac.uk>2023-07-25 17:45:27 +0100
committerGreg Brown <greg.brown01@ed.ac.uk>2023-07-25 17:45:27 +0100
commit9c73520c5fe209cfd3d212b5891dfb8b677fb9d4 (patch)
tree12310896d1af5710ad2d54b1a305b7571485d425 /src/Data/Term.idr
parentc305e99c3f0866d2aa4fb0431b06fc398663bd94 (diff)
Prove mgu has a unique factor.
Diffstat (limited to 'src/Data/Term.idr')
-rw-r--r--src/Data/Term.idr26
1 files changed, 26 insertions, 0 deletions
diff --git a/src/Data/Term.idr b/src/Data/Term.idr
index 385b864..973ff3d 100644
--- a/src/Data/Term.idr
+++ b/src/Data/Term.idr
@@ -93,6 +93,32 @@ subComp :
f . pure r .=. f . r
subComp f r i = Refl
+export
+compCong2 :
+ {0 f1, f2 : Fin k -> Term sig n} ->
+ {0 g1, g2 : Fin j -> Term sig k} ->
+ f1 .=. f2 ->
+ g1 .=. g2 ->
+ f1 . g1 .=. f2 . g2
+compCong2 prf1 prf2 i = Calc $
+ |~ f1 <$> g1 i
+ ~~ f1 <$> g2 i ...(cong (f1 <$>) $ prf2 i)
+ ~~ f2 <$> g2 i ...(subExtensional prf1 (g2 i))
+
+compCongL :
+ {0 f1, f2 : Fin k -> Term sig n} ->
+ f1 .=. f2 ->
+ (0 g : Fin j -> Term sig k) ->
+ f1 . g .=. f2 . g
+compCongL prf g = compCong2 prf (\_ => Refl)
+
+compCongR :
+ (0 f : Fin k -> Term sig n) ->
+ {0 g1, g2 : Fin j -> Term sig k} ->
+ g1 .=. g2 ->
+ f . g1 .=. f . g2
+compCongR f prf = compCong2 (\_ => Refl) prf
+
-- Injectivity -----------------------------------------------------------------
export