@@ -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