{-# OPTIONS --without-K --rewriting #-} module Pi.Coxeter.NonParametrized.ReductionRel+ where open import lib.Base open import lib.types.Nat using (_+_) open import lib.PathGroupoid open import Pi.Common.Misc open import Pi.Common.Arithmetic open import Pi.Common.ListN open import Pi.Coxeter.NonParametrized.ReductionRel data _≅+_ : Listℕ -> Listℕ -> Type₀ where trans≅+ : {m1 m2 m3 : Listℕ} -> (m1 ≅ m2) -> (m2 ≅* m3) -> m1 ≅+ m3 ext+ : {l l' : Listℕ} -> l ≅ l' -> l ≅+ l' ext+ p = trans≅+ p idp ext* : {l l' : Listℕ} -> l ≅+ l' -> l ≅* l' ext* (trans≅+ x x₁) = trans (ext x) x₁ cancel+ : {n : ℕ} -> (l r : Listℕ) -> (l ++ n ∷ n ∷ r) ≅+ (l ++ r) cancel+ {n} l r = trans≅+ (cancel≅ l r (l ++ n ∷ n ∷ r) (l ++ r) idp idp) idp swap+ : {n : ℕ} -> {k : ℕ} -> (pk : S k < n) -> (l r : Listℕ) -> (l ++ n ∷ k ∷ r) ≅+ (l ++ k ∷ n ∷ r) swap+ {k} {n} pk l r = trans≅+ (swap≅ pk l r (l ++ k ∷ _ ∷ r) (l ++ _ ∷ k ∷ r) idp idp) idp long+ : {n : ℕ} -> (k : ℕ) -> (l r : Listℕ) -> (l ++ (n ↓ (2 + k)) ++ (1 + k + n) ∷ r) ≅+ (l ++ (k + n) ∷ (n ↓ (2 + k)) ++ r) long+ k l r = ext+ (long≅ k l r _ _ idp idp) braid+ : {n : ℕ} -> (l r : Listℕ) -> (l ++ S n ∷ n ∷ S n ∷ r) ≅+ (l ++ n ∷ S n ∷ n ∷ r) braid+ {n} l r = long+ {n} 0 l r trans+ : {m1 m2 m3 : Listℕ} -> (m1 ≅+ m2) -> (m2 ≅+ m3) -> m1 ≅+ m3 trans+ (trans≅+ x p) q = trans≅+ x (trans p (ext* q)) trans+* : {m1 m2 m3 : Listℕ} -> (m1 ≅+ m2) -> (m2 ≅* m3) -> m1 ≅+ m3 trans+* (trans≅+ x p) q = trans≅+ x (trans p q) trans*+ : {m1 m2 m3 : Listℕ} -> (m1 ≅* m2) -> (m2 ≅+ m3) -> m1 ≅+ m3 trans*+ idp q = q trans*+ (trans≅ x p) q = trans≅+ x (ext* (trans*+ p q)) +l++ : (l : Listℕ) -> {m1 m2 : Listℕ} -> (m1 ≅+ m2) -> ((l ++ m1) ≅+ (l ++ m2)) +l++ l (trans≅+ x p) = trans≅+ (l++≅ _ _ l x) ((l++ l p)) ++r+ : {m1 m2 : Listℕ} -> (r : Listℕ) -> (m1 ≅+ m2) -> ((m1 ++ r) ≅+ (m2 ++ r)) ++r+ r (trans≅+ x p) = trans≅+ (++r≅ _ _ r x) (++r r p)