11// Polymorphic lists
22
3- require open Stdlib .Set Stdlib .Prop Stdlib .Eq Stdlib .Nat ;
3+ require open Stdlib .Set Stdlib .Prop Stdlib .FOL Stdlib . Eq Stdlib .Nat ;
44
55(a :Set ) inductive 𝕃:TYPE ≔
66| □ : 𝕃 a // \Box
@@ -19,13 +19,13 @@ rule τ (list $a) ↪ 𝕃 $a;
1919symbol length {a } : 𝕃 a → ℕ;
2020
2121rule length □ ↪ 0
22- with length (_ ⸬ $l ) ↪ suc (length $l );
22+ with length (_ ⸬ $l ) ↪ s (length $l );
2323
2424// Concatenation of two lists
2525
2626symbol ⋅ {a } : 𝕃 a → 𝕃 a → 𝕃 a ;
2727
28- notation ⋅ infix right 5 ; // \cdot
28+ notation ⋅ infix right 15 ; // \cdot
2929
3030assert a (x y z :𝕃 a ) ⊢ x ⋅ y ⋅ z ≡ x ⋅ (y ⋅ z );
3131assert a x l m ⊢ x ⸬ l ⋅ m ≡ x ⸬ (l ⋅ m );
4040 // case l = □
4141 reflexivity ;
4242 // case l = x ⸬ l '
43- assume x l ' h ;
44- simplify ;
45- rewrite h ;
46- reflexivity ;
43+ assume x l ' h ; simplify ; rewrite h ; reflexivity ;
4744end ;
4845
4946rule $m ⋅ □ ↪ $m ;
5451 assume a ;
5552 induction ;
5653 // case l = □
57- assume m ;
5854 reflexivity ;
5955 // case l = x ⸬l '
60- assume x l ' h m ;
61- simplify ;
62- rewrite h ;
63- reflexivity ;
56+ assume x l ' h m ; simplify ; rewrite h ; reflexivity ;
6457end ;
6558
6659rule length ($l ⋅ $m ) ↪ length $l + length $m ;
7063 assume a ;
7164 induction ;
7265 // case l = □
73- assume m n ;
7466 reflexivity ;
7567 // case l = x ⸬l '
76- assume x l ' h m n ;
77- simplify ;
78- rewrite h ;
79- reflexivity ;
68+ assume x l ' h m n ; simplify ; rewrite h ; reflexivity ;
8069end ;
8170
8271rule ($l ⋅ $m ) ⋅ $n ↪ $l ⋅ ($m ⋅ $n );
9382 assume a ;
9483 induction ;
9584 // case l = □
96- simplify ;
97- assume x ;
98- reflexivity ;
85+ simplify ; reflexivity ;
9986 // case l = ⸬
100- assume x l ' hl ' m ;
101- simplify ;
102- rewrite hl ';
103- reflexivity ;
87+ assume x l h m ; simplify ; rewrite h ; reflexivity ;
10488end ;
10589
10690rule rev ($l ⋅ $m ) ↪ rev $m ⋅ rev $l ;
@@ -112,10 +96,7 @@ begin
11296 // case l = □
11397 reflexivity ;
11498 // case l = ⸬
115- assume x l ' hl ';
116- simplify ;
117- rewrite hl ';
118- reflexivity ;
99+ assume x l h ; simplify ; rewrite h ; reflexivity ;
119100end ;
120101
121102rule rev (rev $l ) ↪ $l ;
@@ -125,13 +106,9 @@ begin
125106 assume a ;
126107 induction ;
127108 // case l = □
128- simplify ;
129- reflexivity ;
109+ simplify ; reflexivity ;
130110 // case l = ⸬
131- assume x l ' hl ';
132- simplify ;
133- rewrite hl ';
134- reflexivity ;
111+ assume x l h ; simplify ; rewrite h ; reflexivity ;
135112end ;
136113
137114rule length (rev $l ) ↪ length $l ;
0 commit comments