Skip to content

Commit 403af75

Browse files
committed
cumsum lemmas
1 parent fdce496 commit 403af75

File tree

2 files changed

+82
-2
lines changed

2 files changed

+82
-2
lines changed

src/kdrag/theories/real/seq.py

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,88 @@ def test():
100100
),
101101
)
102102

103+
104+
# TODO: cumsum_comm = cumsum(lambda x, cumsum(lammbda y, a[x,y]) ) ???
105+
@kd.Theorem(
106+
"forall (a : RSeq) (x : Real) (n : Int), (cumsum (smul x a)) n = (smul x (cumsum a)) n"
107+
)
108+
def cumsul_smul(l):
109+
a, x, n = l.fixes()
110+
l.induct(n)
111+
112+
# n < 0
113+
# TODO: These induction cases look disgusting with too many lambdas.
114+
l.fix()
115+
l.simp()
116+
l.intros()
117+
l.unfold(cumsum, smul)
118+
l.simp()
119+
l.auto(by=[smul.defn, cumsum.defn])
120+
121+
# n == 0
122+
l.auto(by=[smul.defn, cumsum.defn])
123+
124+
# n > 0
125+
l.fix()
126+
l.simp()
127+
l.unfold(cumsum, smul)
128+
l.simp()
129+
l.unfold(cumsum, smul)
130+
l.simp()
131+
l.auto(by=[smul.defn, cumsum.defn])
132+
133+
134+
@kd.Theorem(
135+
"forall (a b : RSeq) (m : Int), (forall (n : Int), n >= 0 -> a n <= b n) -> m >= 0 -> (cumsum a) m <= (cumsum b) m"
136+
)
137+
def cumsul_mono(l):
138+
a, b, m = l.fixes()
139+
l.intros()
140+
l.induct(m)
141+
_n = l.fix()
142+
l.auto()
143+
144+
# n == 0
145+
l.auto(by=[cumsum.defn])
146+
147+
# n > 0
148+
_n = l.fix()
149+
l.intros()
150+
l.simp()
151+
l.intros()
152+
l.unfold(cumsum)
153+
l.auto(by=[cumsum.defn])
154+
155+
156+
@kd.Theorem(
157+
"forall (a b : RSeq) (n : Int), (cumsum (a + b)) n = (cumsum a) n + (cumsum b) n"
158+
)
159+
def cumsul_add(l):
160+
a, x, n = l.fixes()
161+
l.induct(n)
162+
163+
# n < 0
164+
# TODO: These induction cases look disgusting with too many lambdas.
165+
l.fix()
166+
l.simp()
167+
l.intros()
168+
l.unfold(cumsum, add)
169+
l.simp()
170+
l.auto(by=[add.defn, cumsum.defn])
171+
172+
# n == 0
173+
l.auto(by=[add.defn, cumsum.defn])
174+
175+
# n > 0
176+
l.fix()
177+
l.simp()
178+
l.unfold(cumsum, add)
179+
l.simp()
180+
l.unfold(cumsum, add)
181+
l.simp()
182+
l.auto(by=[add.defn, cumsum.defn])
183+
184+
103185
max = smt.Function("max", RSeq, RSeq)
104186
max = kd.define(
105187
"max",

src/kdrag/theories/real/seq_extra.py

Lines changed: 0 additions & 2 deletions
This file was deleted.

0 commit comments

Comments
 (0)