Skip to content

Commit 7a8d3f6

Browse files
authored
Merge pull request #37 from pmbittner/FST-assoc
Prove FST associativity and distant idempotence
2 parents 7d75889 + c3088c3 commit 7a8d3f6

4 files changed

Lines changed: 547 additions & 214 deletions

File tree

src/Framework/Composition/FeatureAlgebra.agda

Lines changed: 48 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,10 @@ record FeatureAlgebra {c} (I : Set c) (sum : Op₂ I) (𝟘 : I) : Set (suc c) w
2020
field
2121
monoid : IsMonoid _≡_ _⊕_ 𝟘
2222

23-
-- Only the rightmost occurence of an introduction is effective in a sum,
23+
-- Only the leftmost occurence of an introduction is effective in a sum,
2424
-- because it has been introduced first.
2525
-- This is, duplicates of i have no effect.
26-
distant-idempotence : (i₁ i₂ : I) i ⊕ i ⊕ i ≡ i₁ ⊕ i₂
26+
distant-idempotence : (i₁ i₂ : I) i ⊕ i ⊕ i ≡ i₁ ⊕ i₂
2727

2828
open IsMonoid monoid
2929

@@ -33,36 +33,36 @@ record FeatureAlgebra {c} (I : Set c) (sum : Op₂ I) (𝟘 : I) : Set (suc c) w
3333
i ⊕ i
3434
≡⟨ Eq.cong (i ⊕_) (proj₁ identity i) ⟨
3535
i ⊕ 𝟘 ⊕ i
36-
≡⟨ distant-idempotence 𝟘 i
37-
𝟘i
38-
≡⟨ proj identity i ⟩
36+
≡⟨ distant-idempotence i 𝟘
37+
i𝟘
38+
≡⟨ proj identity i ⟩
3939
i
4040
4141

4242
-- introduction inclusion
4343
infix 6 _≤_
4444
_≤_ : Rel I c
45-
i₂ ≤ i₁ = i ⊕ i ≡ i₁
45+
i₂ ≤ i₁ = i ⊕ i ≡ i₁
4646

4747
≤-refl : Reflexive _≤_
4848
≤-refl {i} = direct-idempotence i
4949

5050
≤-trans : Transitive _≤_
5151
≤-trans {i} {j} {k} i≤j j≤k =
5252
begin
53-
ik
54-
≡⟨ Eq.cong (i ⊕_) j≤k ⟨
55-
i(jk)
56-
≡⟨ Eq.cong (λ x i ⊕ x ⊕ k) i≤j ⟨
57-
i ⊕ ((ij)k)
58-
≡⟨ assoc i (ij) k ⟨
59-
(i ⊕ (ij))k
60-
≡⟨ Eq.cong (_⊕ k) (assoc i i j) ⟨
61-
((ii)j)k
62-
≡⟨ Eq.cong (_⊕ k) (Eq.cong (_⊕ j) (direct-idempotence i)) ⟩
63-
(ij)k
64-
≡⟨ Eq.cong (_⊕ k) i≤j ⟩
65-
jk
53+
ki
54+
≡⟨ Eq.cong (_⊕ i) j≤k ⟨
55+
(kj)i
56+
≡⟨ Eq.cong (λ x (k ⊕ x)i) i≤j ⟨
57+
(k ⊕ (ji))i
58+
≡⟨ assoc k (ji) i ⟩
59+
k ⊕ ((ji)i)
60+
≡⟨ Eq.cong (k ⊕_) (assoc j i i) ⟩
61+
k(j(ii))
62+
≡⟨ Eq.cong (k ⊕_) (Eq.cong (j ⊕_) (direct-idempotence i)) ⟩
63+
k(ji)
64+
≡⟨ Eq.cong (k ⊕_) i≤j ⟩
65+
kj
6666
≡⟨ j≤k ⟩
6767
k
6868
@@ -75,23 +75,30 @@ record FeatureAlgebra {c} (I : Set c) (sum : Op₂ I) (𝟘 : I) : Set (suc c) w
7575
}
7676

7777
least-element : i 𝟘 ≤ i
78-
least-element = proj identity
78+
least-element = proj identity
7979

8080
least-element-unique : i i ≤ 𝟘 i ≡ 𝟘
81-
least-element-unique i i≤𝟘 rewrite (proj identity i) = i≤𝟘
81+
least-element-unique i i≤𝟘 rewrite (proj identity i) = i≤𝟘
8282

8383
upper-bound-l : i₂ i₁ i₂ ≤ i₂ ⊕ i₁
8484
upper-bound-l i₂ i₁ =
8585
begin
86-
i₂ ⊕ (i₂ ⊕ i₁)
87-
≡⟨ Eq.sym (assoc i₂ i₂ i₁)
88-
(i₂ ⊕ i₂) ⊕ i
89-
≡⟨ Eq.cong (_⊕ i₁) (direct-idempotence i₂)
86+
(i₂ ⊕ i₁) ⊕ i
87+
≡⟨ assoc i₂ i₁ i₂
88+
i₂ ⊕ (i₁ ⊕ i₂)
89+
≡⟨ distant-idempotence i₂ i₁
9090
i₂ ⊕ i₁
9191
9292

9393
upper-bound-r : i₂ i₁ i₁ ≤ i₂ ⊕ i₁
94-
upper-bound-r i₂ i₁ = distant-idempotence i₂ i₁
94+
upper-bound-r i₂ i₁ =
95+
begin
96+
(i₂ ⊕ i₁) ⊕ i₁
97+
≡⟨ assoc i₂ i₁ i₁ ⟩
98+
i₂ ⊕ (i₁ ⊕ i₁)
99+
≡⟨ Eq.cong (i₂ ⊕_) (direct-idempotence i₁) ⟩
100+
i₂ ⊕ i₁
101+
95102

96103
least-upper-bound : i i₂ i₁
97104
i₁ ≤ i
@@ -100,12 +107,12 @@ record FeatureAlgebra {c} (I : Set c) (sum : Op₂ I) (𝟘 : I) : Set (suc c) w
100107
i₁ ⊕ i₂ ≤ i
101108
least-upper-bound i i₂ i₁ i₁≤i i₂≤i =
102109
begin
103-
(i₁i₂) ⊕ i
104-
≡⟨ assoc i₁ i₂ i ⟩
105-
i₁(i₂ ⊕ i)
106-
≡⟨ Eq.cong (i₁ ⊕_) i₂≤i ⟩
107-
i ⊕ i
108-
≡⟨ i≤i ⟩
110+
i(i₁ ⊕ i₂)
111+
≡⟨ assoc i i₁ i₂
112+
(ii₁) ⊕ i
113+
≡⟨ Eq.cong (_⊕ i₂) i₁≤i ⟩
114+
i ⊕ i
115+
≡⟨ i≤i ⟩
109116
i
110117
111118

@@ -133,17 +140,15 @@ record FeatureAlgebra {c} (I : Set c) (sum : Op₂ I) (𝟘 : I) : Set (suc c) w
133140
quasi-smaller : i₂ i₁ i₂ ⊕ i₁ ≤ i₁ ⊕ i₂
134141
quasi-smaller i₂ i₁ =
135142
begin
136-
(i₂ ⊕ i₁) ⊕ i₁ ⊕ i₂
137-
≡⟨⟩
138-
(i₂ ⊕ i₁) ⊕ (i₁ ⊕ i₂)
139-
≡⟨ assoc (i₂ ⊕ i₁) i₁ i₂ ⟨
140-
((i₂ ⊕ i₁) ⊕ i₁) ⊕ i₂
141-
≡⟨ Eq.cong (_⊕ i₂) (assoc i₂ i₁ i₁) ⟩
142-
(i₂ ⊕ (i₁ ⊕ i₁)) ⊕ i₂
143-
≡⟨ Eq.cong (_⊕ i₂) (Eq.cong (i₂ ⊕_) (direct-idempotence i₁)) ⟩
144-
(i₂ ⊕ i₁) ⊕ i₂
145-
≡⟨ assoc i₂ i₁ i₂ ⟩
146-
i₂ ⊕ i₁ ⊕ i₂
143+
(i₁ ⊕ i₂) ⊕ (i₂ ⊕ i₁)
144+
≡⟨ assoc (i₁ ⊕ i₂) i₂ i₁ ⟨
145+
((i₁ ⊕ i₂) ⊕ i₂) ⊕ i₁
146+
≡⟨ Eq.cong (_⊕ i₁) (assoc i₁ i₂ i₂) ⟩
147+
(i₁ ⊕ (i₂ ⊕ i₂)) ⊕ i₁
148+
≡⟨ Eq.cong (_⊕ i₁) (Eq.cong (i₁ ⊕_) (direct-idempotence i₂)) ⟩
149+
(i₁ ⊕ i₂) ⊕ i₁
150+
≡⟨ assoc i₁ i₂ i₁ ⟩
151+
i₁ ⊕ (i₂ ⊕ i₁)
147152
≡⟨ distant-idempotence i₁ i₂ ⟩
148153
i₁ ⊕ i₂
149154

0 commit comments

Comments
 (0)