Skip to content

Commit add47fb

Browse files
committed
Eliminate redundant exclude/include distinctions in FST
1 parent 3975639 commit add47fb

1 file changed

Lines changed: 18 additions & 81 deletions

File tree

src/Lang/FST.agda

Lines changed: 18 additions & 81 deletions
Original file line numberDiff line numberDiff line change
@@ -528,68 +528,31 @@ module Impose (AtomSet : 𝔸) where
528528
xs ⊕ ((y ∷ ys) ⊙ z)
529529
530530

531-
⊙-⊕-distrib-excludes : {i : Size} (xs : List (FSTA (↑ i))) (y : A) (cs₁ cs₂ : List (FSTA i))
532-
(y -< cs₁ ⊕ cs₂ >-) ∉ xs
533-
xs ⊙ (y -< cs₁ ⊕ cs₂ >-) ≡ (xs ⊙ (y -< cs₁ >-)) ⊙ (y -< cs₂ >-)
534-
⊙-⊕-distrib-excludes [] y cs₁ cs₂ y∉xs with (y -< cs₁ >-) == (y -< cs₂ >-)
535-
⊙-⊕-distrib-excludes [] y cs₁ cs₂ y∉xs | yes refl = refl
536-
⊙-⊕-distrib-excludes [] y cs₁ cs₂ y∉xs | no y≉y = ⊥-elim (y≉y refl)
537-
⊙-⊕-distrib-excludes (a ∷ xs) y cs₁ cs₂ (y≉a ∷ y∉xs) with (y -< cs₁ ⊕ cs₂ >-) == a
538-
⊙-⊕-distrib-excludes (a ∷ xs) y cs₁ cs₂ (y≉a ∷ y∉xs) | yes y≈a = ⊥-elim (y≉a y≈a)
539-
⊙-⊕-distrib-excludes (a ∷ xs) y cs₁ cs₂ (y≉a ∷ y∉xs) | no _ =
540-
a ∷ (xs ⊙ (y -< cs₁ ⊕ cs₂ >-))
541-
≡⟨ Eq.cong₂ _∷_ refl (⊙-⊕-distrib-excludes xs y cs₁ cs₂ y∉xs) ⟩
542-
a ∷ (xs ⊙ (y -< cs₁ >-) ⊙ (y -< cs₂ >-))
543-
≡⟨ compute-⊙-excludes a (xs ⊙ y -< cs₁ >-) (y -< cs₂ >-) (≉-ignores-children refl ≈-refl y≉a) ⟨
544-
(a ∷ (xs ⊙ (y -< cs₁ >-))) ⊙ (y -< cs₂ >-)
545-
≡⟨ Eq.cong₂ _⊙_ (compute-⊙-excludes a xs (y -< cs₁ >-) (≉-ignores-children refl ≈-refl y≉a)) refl ⟨
546-
(a ∷ xs) ⊙ (y -< cs₁ >-) ⊙ (y -< cs₂ >-)
547-
548-
549531
⊕-assoc : {i : Size} (xs ys zs : List (FSTA i))
550532
AllWellFormed xs
551533
AllWellFormed ys
552534
AllWellFormed zs
553535
xs ⊕ (ys ⊕ zs) ≡ (xs ⊕ ys) ⊕ zs
554536

555-
⊙-⊕-distrib-includes : {i : Size} (xs : List (FSTA (↑ i))) (y : A) (cs₁ cs₂ : List (FSTA i))
556-
AllWellFormed xs
557-
AllWellFormed cs₁
558-
AllWellFormed cs₂
559-
Once (y -< cs₁ ⊕ cs₂ >- ≈_) xs
560-
xs ⊙ (y -< cs₁ ⊕ cs₂ >-) ≡ (xs ⊙ (y -< cs₁ >-)) ⊙ (y -< cs₂ >-)
561-
⊙-⊕-distrib-includes (x ∷ xs) y cs₁ cs₂ xs-wf cs₁-wf cs₂-wf (here y≈x y∉xs) with (y -< cs₁ ⊕ cs₂ >-) == x
562-
⊙-⊕-distrib-includes (.y -< cs >- ∷ xs) y cs₁ cs₂ (_ , cs-wf ∷ _) cs₁-wf cs₂-wf (here y≈x y∉xs) | yes refl =
563-
y -< cs ⊕ (cs₁ ⊕ cs₂) >- ∷ xs
564-
≡⟨ Eq.cong₂ _∷_ (Eq.cong₂ _-<_>- refl (⊕-assoc cs cs₁ cs₂ cs-wf cs₁-wf cs₂-wf)) refl ⟩
565-
y -< (cs ⊕ cs₁) ⊕ cs₂ >- ∷ xs
566-
≡⟨ compute-⊙-includes y (cs ⊕ cs₁) cs₂ xs ⟨
567-
(y -< cs ⊕ cs₁ >- ∷ xs) ⊙ (y -< cs₂ >-)
568-
≡⟨ Eq.cong₂ _⊙_ (compute-⊙-includes y cs cs₁ xs) refl ⟨
569-
((y -< cs >- ∷ xs) ⊙ (y -< cs₁ >-)) ⊙ (y -< cs₂ >-)
570-
571-
⊙-⊕-distrib-includes (x -< cs >- ∷ xs) y cs₁ cs₂ xs-wf cs₁-wf cs₂-wf (here y≈x y∉xs) | no y≉x = ⊥-elim (y≉x y≈x)
572-
⊙-⊕-distrib-includes (x ∷ xs) y cs₁ cs₂ xs-wf cs₁-wf cs₂-wf (there y≉x y∈x) with (y -< cs₁ ⊕ cs₂ >-) == x
573-
⊙-⊕-distrib-includes (x ∷ xs) y cs₁ cs₂ xs-wf cs₁-wf cs₂-wf (there y≉x y∈x) | yes y≈x = ⊥-elim (y≉x y≈x)
574-
⊙-⊕-distrib-includes (x ∷ xs) y cs₁ cs₂ (_ ∷ xs-unique , _ ∷ xs-wf) cs₁-wf cs₂-wf (there y≉x y∈x) | no _ =
575-
x ∷ (xs ⊙ (y -< cs₁ ⊕ cs₂ >-))
576-
≡⟨ Eq.cong₂ _∷_ refl (⊙-⊕-distrib-includes xs y cs₁ cs₂ (xs-unique , xs-wf) cs₁-wf cs₂-wf y∈x) ⟩
577-
x ∷ (xs ⊙ (y -< cs₁ >-) ⊙ (y -< cs₂ >-))
578-
≡⟨ compute-⊙-excludes x (xs ⊙ y -< cs₁ >-) (y -< cs₂ >-) (≉-ignores-children refl ≈-refl y≉x) ⟨
579-
(x ∷ (xs ⊙ (y -< cs₁ >-))) ⊙ (y -< cs₂ >-)
580-
≡⟨ Eq.cong₂ _⊙_ (compute-⊙-excludes x xs (y -< cs₁ >-) (≉-ignores-children refl ≈-refl y≉x)) refl ⟨
581-
(x ∷ xs) ⊙ (y -< cs₁ >-) ⊙ (y -< cs₂ >-)
582-
583-
584537
⊙-⊕-distrib : {i : Size} (xs : List (FSTA (↑ i))) (y : A) (cs₁ cs₂ : List (FSTA i))
585538
AllWellFormed xs
586539
AllWellFormed cs₁
587540
AllWellFormed cs₂
588541
xs ⊙ (y -< cs₁ ⊕ cs₂ >-) ≡ (xs ⊙ (y -< cs₁ >-)) ⊙ (y -< cs₂ >-)
589-
⊙-⊕-distrib xs y cs₁ cs₂ (xs-unique , xs-wf) cs₁-wf cs₂-wf =
590-
Sum.[ ⊙-⊕-distrib-excludes xs y cs₁ cs₂
591-
, ⊙-⊕-distrib-includes xs y cs₁ cs₂ (xs-unique , xs-wf) cs₁-wf cs₂-wf
592-
]′ (contains? xs (y -< cs₁ ⊕ cs₂ >-) xs-unique)
542+
⊙-⊕-distrib [] y cs₁ cs₂ xs-wf cs₁-wf cs₂-wf with y ≟ y
543+
⊙-⊕-distrib [] y cs₁ cs₂ xs-wf cs₁-wf cs₂-wf | yes refl = refl
544+
⊙-⊕-distrib [] y cs₁ cs₂ xs-wf cs₁-wf cs₂-wf | no y≢y = ⊥-elim (y≢y refl)
545+
⊙-⊕-distrib (x ∷ xs) y cs₁ cs₂ xs-wf cs₁-wf cs₂-wf with (y -< cs₁ ⊕ cs₂ >-) == x
546+
⊙-⊕-distrib (x ∷ xs) y cs₁ cs₂ xs-wf cs₁-wf cs₂-wf | no y≉x with (y -< cs₁ >-) == x
547+
⊙-⊕-distrib (x ∷ xs) y cs₁ cs₂ xs-wf cs₁-wf cs₂-wf | no y≉x | no _ with (y -< cs₂ >-) == x
548+
⊙-⊕-distrib (x ∷ xs) y cs₁ cs₂ (_ ∷ xs-unique , _ ∷ xs-wf) cs₁-wf cs₂-wf | no y≉x | no _ | no _ = Eq.cong (x ∷_) (⊙-⊕-distrib xs y cs₁ cs₂ (xs-unique , xs-wf) cs₁-wf cs₂-wf)
549+
⊙-⊕-distrib (.y -< cs >- ∷ xs) y cs₁ cs₂ xs-wf cs₁-wf cs₂-wf | no y≉x | no _ | yes refl = ⊥-elim (y≉x refl)
550+
⊙-⊕-distrib (.y -< cs >- ∷ xs) y cs₁ cs₂ xs-wf cs₁-wf cs₂-wf | no y≉x | yes refl = ⊥-elim (y≉x refl)
551+
⊙-⊕-distrib (.y -< cs >- ∷ xs) y cs₁ cs₂ xs-wf cs₁-wf cs₂-wf | yes refl with (y -< cs₁ >-) == (y -< cs >-)
552+
⊙-⊕-distrib (.y -< cs >- ∷ xs) y cs₁ cs₂ xs-wf cs₁-wf cs₂-wf | yes refl | no y≉y = ⊥-elim (y≉y refl)
553+
⊙-⊕-distrib (.y -< cs >- ∷ xs) y cs₁ cs₂ xs-wf cs₁-wf cs₂-wf | yes refl | yes refl with (y -< cs₂ >-) == (y -< cs >-)
554+
⊙-⊕-distrib (.y -< cs >- ∷ xs) y cs₁ cs₂ xs-wf cs₁-wf cs₂-wf | yes refl | yes refl | no y≉y = ⊥-elim (y≉y refl)
555+
⊙-⊕-distrib (.y -< cs >- ∷ xs) y cs₁ cs₂ (_ ∷ _ , cs-wf ∷ _) cs₁-wf cs₂-wf | yes refl | yes refl | yes refl = Eq.cong (λ p y -< p >- ∷ xs) (⊕-assoc cs cs₁ cs₂ cs-wf cs₁-wf cs₂-wf)
593556

594557
⊕-⊙-assoc-excludes : {i : Size} (xs ys : List (FSTA i)) (z : (FSTA i))
595558
z ∉ ys
@@ -715,42 +678,16 @@ module Impose (AtomSet : 𝔸) where
715678
716679
⊙-⊕-distrib-idem (.z -< _ >- ∷ xs) z cs₁ cs₂ xs-unique cs₁-wf cs₂-wf (here refl) | no z≢z = ⊥-elim (z≢z refl)
717680

718-
⊙-distant-idempotence-excludes : {i : Size} (xs ys : List (FSTA i)) (z : FSTA i)
719-
AllWellFormed xs
720-
AllWellFormed ys
721-
WellFormed z
722-
Any (z ≡_) xs
723-
z ∉ ys
724-
xs ⊕ (ys ⊙ z) ≡ xs ⊕ ys
725-
⊙-distant-idempotence-excludes xs [] z (xs-unique , _) ys-wf z-wf z∈xs [] = ⊙-idem xs z xs-unique z-wf z∈xs
726-
⊙-distant-idempotence-excludes xs (y ∷ ys) z xs-wf ys-wf z-wf z∈xs (z≉y ∷ z∉ys) with z == y
727-
⊙-distant-idempotence-excludes xs (y ∷ ys) z xs-wf ys-wf z-wf z∈xs (z≉y ∷ z∉ys) | yes z≈y = ⊥-elim (z≉y z≈y)
728-
⊙-distant-idempotence-excludes xs (y ∷ ys) z xs-wf (_ ∷ ys-unique , y-wf ∷ ys-wf) z-wf z∈xs (z≉y ∷ z∉ys) | no _ = ⊙-distant-idempotence-excludes (xs ⊙ y) ys z (⊙-wf xs-wf y-wf) (ys-unique , ys-wf) z-wf (∈-⊙ˡ-exact z xs y z≉y z∈xs) z∉ys
729-
730-
⊙-distant-idempotence-includes : {i : Size} (xs ys : List (FSTA i)) (z : FSTA i)
731-
AllWellFormed xs
732-
AllWellFormed ys
733-
WellFormed z
734-
Any (z ≡_) xs
735-
Once (z ≈_) ys
736-
xs ⊕ (ys ⊙ z) ≡ xs ⊕ ys
737-
⊙-distant-idempotence-includes xs (y ∷ ys) z xs-wf ys-wf z-wf z∈xs (here z≈y z∉ys) with z == y
738-
⊙-distant-idempotence-includes xs (y ∷ ys) z xs-wf ys-wf z-wf z∈xs (here z≈y z∉ys) | no z≉y = ⊥-elim (z≉y z≈y)
739-
⊙-distant-idempotence-includes xs ((.z -< cs₁ >-) ∷ ys) (z -< cs₂ >-) (xs-unique , _) (_ , cs₁-wf ∷ _) cs₂-wf z∈xs (here z≈y z∉ys) | yes refl = Eq.cong (λ x foldl _⊙_ x ys) (⊙-⊕-distrib-idem xs z cs₁ cs₂ xs-unique cs₁-wf cs₂-wf z∈xs)
740-
⊙-distant-idempotence-includes xs (y ∷ ys) z xs-wf ys-wf z-wf z∈xs (there z≉y z∈ys) with z == y
741-
⊙-distant-idempotence-includes xs (y ∷ ys) z xs-wf ys-wf z-wf z∈xs (there z≉y z∈ys) | yes z≈y = ⊥-elim (z≉y z≈y)
742-
⊙-distant-idempotence-includes xs (y ∷ ys) z xs-wf (_ ∷ ys-unique , y-wf ∷ ys-wf) z-wf z∈xs (there z≉y z∈ys) | no z≉y = ⊙-distant-idempotence-includes (xs ⊙ y) ys z (⊙-wf xs-wf y-wf) (ys-unique , ys-wf) z-wf (∈-⊙ˡ-exact z xs y z≉y z∈xs) z∈ys
743-
744681
⊙-distant-idempotence : {i : Size} (xs ys : List (FSTA i)) (z : FSTA i)
745682
AllWellFormed xs
746683
AllWellFormed ys
747684
WellFormed z
748685
Any (z ≡_) xs
749686
xs ⊕ (ys ⊙ z) ≡ xs ⊕ ys
750-
⊙-distant-idempotence xs ys z xs-wf (ys-unique , ys-wf) z-wf z∈xs =
751-
Sum.[ ⊙-distant-idempotence-excludes xs ys z xs-wf (ys-unique , ys-wf) z-wf z∈xs
752-
, ⊙-distant-idempotence-includes xs ys z xs-wf (ys-unique , ys-wf) z-wf z∈xs
753-
]′ (contains? ys z ys-unique)
687+
⊙-distant-idempotence xs [] z (xs-unique , _) ys-wf z-wf z∈xs = ⊙-idem xs z xs-unique z-wf z∈xs
688+
⊙-distant-idempotence xs (y ∷ ys) z xs-wf ys-wf z-wf z∈xs with z == y
689+
⊙-distant-idempotence xs (y ∷ ys) z xs-wf (_ ∷ ys-unique , y-wf ∷ ys-wf) z-wf z∈xs | no z≉y = ⊙-distant-idempotence (xs ⊙ y) ys z (⊙-wf xs-wf y-wf) (ys-unique , ys-wf) z-wf (∈-⊙ˡ-exact z xs y z≉y z∈xs)
690+
⊙-distant-idempotence xs (.z -< cs₁ >- ∷ ys) (z -< cs₂ >-) (xs-unique , _) (_ , y-wf ∷ _) z-wf z∈xs | yes refl = Eq.cong (_⊕ ys) (⊙-⊕-distrib-idem xs z cs₁ cs₂ xs-unique y-wf z-wf z∈xs)
754691

755692
⊕-++-idem : {i : Size} (xs₁ xs₂ ys : List (FSTA i))
756693
AllWellFormed (xs₁ ++ xs₂)

0 commit comments

Comments
 (0)