From 4fd838975aea0982a9e2617bea4c6e66e6b826b2 Mon Sep 17 00:00:00 2001 From: stefan-aws Date: Thu, 26 Jan 2023 20:09:20 +0000 Subject: [PATCH 01/33] standard definitions --- src/Option.dfy | 79 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 79 insertions(+) create mode 100644 src/Option.dfy diff --git a/src/Option.dfy b/src/Option.dfy new file mode 100644 index 00000000..e883f29f --- /dev/null +++ b/src/Option.dfy @@ -0,0 +1,79 @@ +// RUN: %dafny /compile:0 "%s" + +/******************************************************************************* +* Copyright by the contributors to the Dafny Project +* SPDX-License-Identifier: MIT +*******************************************************************************/ + +module {:options "-functionSyntax:4"} Option { + + datatype Option<+T> = None | Some(value: T) + + function Some(v: T): Option { + Option.Some(v) + } + + function Bind(o: Option, f: S -> Option): Option { + match o + case None => None + case Some(v) => f(v) + } + + predicate IsNone(o: Option) { + o.None? + } + + predicate IsSome(o: Option) { + o.Some? + } + + function Get(o: Option): (v: T) + requires o.Some? + ensures o.value == v + { + o.value + } + + function Join(oo: Option>): Option { + match oo + case None => None + case Some(o) => o + } + + function Map(f: S -> T, o: Option): (o2: Option) + { + match o + case None => None + case Some(v) => Some(f(v)) + } + + function Equal(eq: (T, T) -> bool): (Option, Option) -> bool { + (o1: Option, o2: Option) => + match (o1, o2) + case (Some(v1), Some(v2)) => eq(v1, v2) + case (None, None) => true + case _ => false + } + + function Compare(cmp: (T, T) -> int): (Option, Option) -> int { + (o1: Option, o2: Option) => + match (o1, o2) + case (Some(v1), Some(v2)) => cmp(v1, v2) + case (None, None) => 0 + case (None, Some(_)) => -1 + case (Some(_), None) => 1 + } + + function ToSeq(o: Option): seq { + match o + case None => [] + case Some(v) => [v] + } + + function ToSet(o: Option): set { + match o + case None => {} + case Some(v) => {v} + } + +} From 4ddb4520ffd66b92a51065083671c57257bfffd0 Mon Sep 17 00:00:00 2001 From: stefan-aws Date: Thu, 26 Jan 2023 20:33:07 +0000 Subject: [PATCH 02/33] initial --- src/Writer.dfy | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 src/Writer.dfy diff --git a/src/Writer.dfy b/src/Writer.dfy new file mode 100644 index 00000000..e69de29b From 3851270f6b0470f2640f34320101bdc3de6d6225 Mon Sep 17 00:00:00 2001 From: stefan-aws Date: Thu, 26 Jan 2023 21:07:59 +0000 Subject: [PATCH 03/33] skeleton --- src/Either.dfy | 59 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 src/Either.dfy diff --git a/src/Either.dfy b/src/Either.dfy new file mode 100644 index 00000000..4a8f2035 --- /dev/null +++ b/src/Either.dfy @@ -0,0 +1,59 @@ +// RUN: %dafny /compile:0 "%s" + +/******************************************************************************* +* Copyright by the contributors to the Dafny Project +* SPDX-License-Identifier: MIT +*******************************************************************************/ + +module {:options "-functionSyntax:4"} Either { + + datatype Either<+S,+T> = Left(left: S) | Right(right: T) + + predicate IsLeft(e: Either) { + e.Left? + } + + predicate IsRight(e: Either) { + e.Right? + } + + function MapLeft(f: S1 -> S2): Either -> Either { + (e: Either) => + match e + case Left(v) => Either.Left(f(v)) + case Right(v) => Either.Right(v) + } + + function MapRight(f: T1 -> T2): Either -> Either { + (e: Either) => + match e + case Left(v) => Either.Left(v) + case Right(v) => Either.Right(f(v)) + } + + function Map(f: S1 -> S2, g: T1 -> T2): Either -> Either { + (e: Either) => + match e + case Left(v) => Either.Left(f(v)) + case Right(v) => Either.Right(g(v)) + } + + function Fold(f: S -> U, g: T -> U): Either -> U { + (e: Either) => + match e + case Left(v) => f(v) + case Right(v) => g(v) + } + + function Equal(eql: (S, S) -> bool, eqr: (T, T) -> bool): (Either, Either) -> bool { + (e1: Either, e2: Either) => + match (e1, e2) + case (Left(v1), Left(v2)) => eql(v1, v2) + case (Right(v1), Right(v2)) => eqr(v1, v2) + case _ => false + } + + + +} + From 937a778e69dd1e20bb82ba8ad4d2da3ea42b01cf Mon Sep 17 00:00:00 2001 From: stefan-aws Date: Fri, 27 Jan 2023 11:41:11 +0000 Subject: [PATCH 04/33] more functions --- src/Either.dfy | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/src/Either.dfy b/src/Either.dfy index 4a8f2035..d22c3890 100644 --- a/src/Either.dfy +++ b/src/Either.dfy @@ -5,8 +5,12 @@ * SPDX-License-Identifier: MIT *******************************************************************************/ +include "Wrappers.dfy" + module {:options "-functionSyntax:4"} Either { + import opened Wrappers + datatype Either<+S,+T> = Left(left: S) | Right(right: T) predicate IsLeft(e: Either) { @@ -17,6 +21,18 @@ module {:options "-functionSyntax:4"} Either { e.Right? } + function FindLeft(e: Either): Option { + match e + case Left(v) => Some(v) + case Right(v) => None + } + + function FindRight(e: Either): Option { + match e + case Left(v) => None + case Right(v) => Some(v) + } + function MapLeft(f: S1 -> S2): Either -> Either { (e: Either) => match e @@ -53,6 +69,15 @@ module {:options "-functionSyntax:4"} Either { case _ => false } + function Compare(cmpl: (S, S) -> int, cmpr: (T, T) -> int): (Either, Either) -> int { + (e1: Either, e2: Either) => + match (e1, e2) + case (Left(v1), Left(v2)) => cmpl(v1, v2) + case (Right(v1), Right(v2)) => cmpr(v1, v2) + case (Left(_), Right(_)) => -1 + case (Right(_), Left(_)) => 1 + } + } From 5cc5af33dd240cf276884264632b163f4332e8aa Mon Sep 17 00:00:00 2001 From: stefan-aws Date: Fri, 27 Jan 2023 14:49:29 +0000 Subject: [PATCH 05/33] skeleton --- src/Result.dfy | 125 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 125 insertions(+) create mode 100644 src/Result.dfy diff --git a/src/Result.dfy b/src/Result.dfy new file mode 100644 index 00000000..c8fd34a0 --- /dev/null +++ b/src/Result.dfy @@ -0,0 +1,125 @@ +include "Wrappers.dfy" + +module {:options "-functionSyntax:4"} Result { + + import opened Wrappers + + datatype Result<+S,+E> = | Success(value: S) | Failure(error: E) + + function Success(v: S): Result { + Result.Success(v) + } + + function Failure(e: E): Result { + Result.Failure(e) + } + + predicate IsSuccess(r: Result) { + r.Success? + } + + predicate IsFailure(r: Result) { + r.Failure? + } + + function GetValue(r: Result): S + requires r.Success? + { + r.value + } + + function GetValueDefault(r: Result, default: S): S { + match r + case Success(v) => v + case Failure(_) => default + } + + function GetError(r: Result): E + requires r.Failure? + { + r.error + } + + function Bind(r: Result, f: S1 -> Result): Result { + match r + case Success(v) => f(v) + case Failure(e) => Result.Failure(e) + } + + function Join(rr: Result,E>): Result { + match rr + case Success(v) => v + case Failure(e) => Result.Failure(e) + } + + function Map(f: S1 -> S2): Result -> Result { + (r: Result) => + match r + case Success(v) => Result.Success(f(v)) + case Failure(e) => Result.Failure(e) + } + + function MapError(f: E1 -> E2): Result -> Result { + (r: Result) => + match r + case Success(v) => Result.Success(v) + case Failure(e) => Result.Failure(f(e)) + } + + function ToOption(r: Result): Option { + match r + case Success(v) => Some(v) + case Failure(_) => None() + } + + function Fold(f: S -> T, g: E -> T): Result -> T { + (r: Result) => + match r + case Success(v) => f(v) + case Failure(e) => g(e) + } + + function ToSeq(r: Result): seq { + match r + case Success(v) => [v] + case Failure(_) => [] + } + + function ToSet(r: Result): set { + match r + case Success(v) => {v} + case Failure(_) => {} + } + + function Composition(f: S1 -> Result, g: S2 -> Result): S1 -> Result { + x => Bind(f(x), g) + } + + lemma LemmaUnitalityJoin(r: Result) + ensures Join(Map(Success)(r)) == r == Join(Success,E>(r)) + { + } + + lemma LemmaAssociativityJoin(rrr: Result,E>,E>) + ensures Join(Map(Join)(rrr) ) == Join(Join,E>(rrr)) + { + } + + lemma LemmaLeftUnitalityBind(v: S1, f: S1 -> Result) + ensures Bind(Success(v), f) == f(v) + { + } + + lemma LemmaRightUnitalityBind(r: Result) + ensures Bind(r, Success) == r + { + } + + lemma LemmaAssociativityBind(r: Result, f: S1 -> Result, g: S2 -> Result) + ensures Bind(Bind(r, f), g) == Bind(r, Composition(f, g)) + { + } + +} + + From 1760fb01db883df5162da82ba2cfa7f18f01e9d4 Mon Sep 17 00:00:00 2001 From: stefan-aws Date: Fri, 27 Jan 2023 15:21:08 +0000 Subject: [PATCH 06/33] types, compare, equal --- src/Result.dfy | 97 +++++++++++++++++++++++++++++--------------------- 1 file changed, 57 insertions(+), 40 deletions(-) diff --git a/src/Result.dfy b/src/Result.dfy index c8fd34a0..e53b463e 100644 --- a/src/Result.dfy +++ b/src/Result.dfy @@ -4,118 +4,135 @@ module {:options "-functionSyntax:4"} Result { import opened Wrappers - datatype Result<+S,+E> = | Success(value: S) | Failure(error: E) + datatype Result<+T,+E> = | Success(value: T) | Failure(error: E) - function Success(v: S): Result { + function Success(v: T): Result { Result.Success(v) } - function Failure(e: E): Result { + function Failure(e: E): Result { Result.Failure(e) - } + } - predicate IsSuccess(r: Result) { + predicate IsSuccess(r: Result) { r.Success? } - predicate IsFailure(r: Result) { + predicate IsFailure(r: Result) { r.Failure? } - function GetValue(r: Result): S + function GetValue(r: Result): T requires r.Success? { r.value } - function GetValueDefault(r: Result, default: S): S { + function GetValueDefault(r: Result, default: T): T { match r case Success(v) => v case Failure(_) => default } - function GetError(r: Result): E + function GetError(r: Result): E requires r.Failure? { r.error } - function Bind(r: Result, f: S1 -> Result): Result { + function Bind(r: Result, f: T1 -> Result): Result { match r case Success(v) => f(v) - case Failure(e) => Result.Failure(e) + case Failure(e) => Result.Failure(e) } - function Join(rr: Result,E>): Result { + function Join(rr: Result,E>): Result { match rr case Success(v) => v - case Failure(e) => Result.Failure(e) + case Failure(e) => Result.Failure(e) } - function Map(f: S1 -> S2): Result -> Result { - (r: Result) => + function Map(f: T1 -> T2): Result -> Result { + (r: Result) => match r - case Success(v) => Result.Success(f(v)) - case Failure(e) => Result.Failure(e) + case Success(v) => Result.Success(f(v)) + case Failure(e) => Result.Failure(e) } - function MapError(f: E1 -> E2): Result -> Result { - (r: Result) => + function MapError(f: E1 -> E2): Result -> Result { + (r: Result) => match r - case Success(v) => Result.Success(v) - case Failure(e) => Result.Failure(f(e)) + case Success(v) => Result.Success(v) + case Failure(e) => Result.Failure(f(e)) } - function ToOption(r: Result): Option { - match r - case Success(v) => Some(v) - case Failure(_) => None() - } - - function Fold(f: S -> T, g: E -> T): Result -> T { - (r: Result) => + function Fold(f: T -> U, g: E -> U): Result -> U { + (r: Result) => match r case Success(v) => f(v) case Failure(e) => g(e) } - function ToSeq(r: Result): seq { + function Composition(f: T1 -> Result, g: T2 -> Result): T1 -> Result { + x => Bind(f(x), g) + } + + function Equal(eqs: (T, T) -> bool, eqf: (E, E) -> bool): (Result, Result) -> bool { + (r1: Result, r2: Result) => + match (r1, r2) + case (Success(v1), Success(v2)) => eqs(v1, v2) + case (Failure(e1), Failure(e2)) => eqf(e1, e2) + case _ => false + } + + function Compare(cmps: (T, T) -> int, cmpf: (E, E) -> int): (Result, Result) -> int { + (r1: Result, r2: Result) => + match (r1, r2) + case (Success(v1), Success(v2)) => cmps(v1, v2) + case (Failure(e1), Failure(e2)) => cmpf(e1, e2) + case (Success(_), Failure(_)) => -1 + case (Failure(_), Success(_)) => 1 + } + + function ToSeq(r: Result): seq { match r case Success(v) => [v] case Failure(_) => [] } - function ToSet(r: Result): set { + function ToSet(r: Result): set { match r case Success(v) => {v} case Failure(_) => {} } - function Composition(f: S1 -> Result, g: S2 -> Result): S1 -> Result { - x => Bind(f(x), g) + function ToOption(r: Result): Option { + match r + case Success(v) => Some(v) + case Failure(_) => None() } - lemma LemmaUnitalityJoin(r: Result) - ensures Join(Map(Success)(r)) == r == Join(Success,E>(r)) + lemma LemmaUnitalityJoin(r: Result) + ensures Join(Map(Success)(r)) == r == Join(Success,E>(r)) { } - lemma LemmaAssociativityJoin(rrr: Result,E>,E>) - ensures Join(Map(Join)(rrr) ) == Join(Join,E>(rrr)) + lemma LemmaAssociativityJoin(rrr: Result,E>,E>) + ensures Join(Map(Join)(rrr)) == Join(Join,E>(rrr)) { } - lemma LemmaLeftUnitalityBind(v: S1, f: S1 -> Result) + lemma LemmaLeftUnitalityBind(v: T1, f: T1 -> Result) ensures Bind(Success(v), f) == f(v) { } - lemma LemmaRightUnitalityBind(r: Result) + lemma LemmaRightUnitalityBind(r: Result) ensures Bind(r, Success) == r { } - lemma LemmaAssociativityBind(r: Result, f: S1 -> Result, g: S2 -> Result) + lemma LemmaAssociativityBind(r: Result, f: T1 -> Result, g: T2 -> Result) ensures Bind(Bind(r, f), g) == Bind(r, Composition(f, g)) { } From b9e94f2ded381816d06a14960fbc2c5f771a6501 Mon Sep 17 00:00:00 2001 From: stefan-aws Date: Fri, 27 Jan 2023 17:03:12 +0000 Subject: [PATCH 07/33] lemmas, more functions --- src/Option.dfy | 75 ++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 66 insertions(+), 9 deletions(-) diff --git a/src/Option.dfy b/src/Option.dfy index e883f29f..c1ef610d 100644 --- a/src/Option.dfy +++ b/src/Option.dfy @@ -4,9 +4,12 @@ * Copyright by the contributors to the Dafny Project * SPDX-License-Identifier: MIT *******************************************************************************/ +include "Wrappers.dfy" module {:options "-functionSyntax:4"} Option { + import opened Wrappers + datatype Option<+T> = None | Some(value: T) function Some(v: T): Option { @@ -15,7 +18,7 @@ module {:options "-functionSyntax:4"} Option { function Bind(o: Option, f: S -> Option): Option { match o - case None => None + case None => Option.None case Some(v) => f(v) } @@ -27,24 +30,37 @@ module {:options "-functionSyntax:4"} Option { o.Some? } - function Get(o: Option): (v: T) + function GetValue(o: Option): T requires o.Some? - ensures o.value == v { o.value } - + + function GetValueDefault(o: Option, default: T): T { + match o + case None => default + case Some(v) => v + } + function Join(oo: Option>): Option { match oo - case None => None + case None => Option.None case Some(o) => o } - function Map(f: S -> T, o: Option): (o2: Option) + function Map(f: S -> T): Option -> Option { - match o - case None => None - case Some(v) => Some(f(v)) + (o: Option) => + match o + case None => Option.None + case Some(v) => Some(f(v)) + } + + function Fold(u: U, f: T -> U): Option -> U { + (o: Option) => + match o + case None => u + case Some(v) => f(v) } function Equal(eq: (T, T) -> bool): (Option, Option) -> bool { @@ -64,6 +80,17 @@ module {:options "-functionSyntax:4"} Option { case (Some(_), None) => 1 } + function Composition(f: S -> Option, g: T-> Option): S -> Option { + x => Bind(f(x), g) + } + + function ToResult(e: E): Option -> Result { + (o: Option) => + match o + case Some(v) => Success(v) + case None => Failure(e) + } + function ToSeq(o: Option): seq { match o case None => [] @@ -76,4 +103,34 @@ module {:options "-functionSyntax:4"} Option { case Some(v) => {v} } + lemma LemmaUnitalityJoin(o: Option) + ensures Join(Map(Some)(o)) == o == Join(Some>(o)) + { + } + + lemma LemmaAssociativityJoin(ooo: Option>>) + ensures Join(Map(Join)(ooo)) == Join(Join>(ooo)) + { + } + + lemma LemmaLeftUnitalityBind(v: S, f: S -> Option) + ensures Bind(Some(v), f) == f(v) + { + } + + lemma LemmaRightUnitalityBind(o: Option) + ensures Bind(o, Some) == o + { + } + + lemma LemmaAssociativityBind(o: Option, f: S -> Option, g: T -> Option) + ensures Bind(Bind(o, f), g) == Bind(o, Composition(f, g)) + { + } + + + + + + } From 5629f430d60cd32e71cdacfc914c4449662b2057 Mon Sep 17 00:00:00 2001 From: stefan-aws Date: Fri, 27 Jan 2023 17:09:35 +0000 Subject: [PATCH 08/33] notation --- src/Result.dfy | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/Result.dfy b/src/Result.dfy index e53b463e..032c3e64 100644 --- a/src/Result.dfy +++ b/src/Result.dfy @@ -40,10 +40,10 @@ module {:options "-functionSyntax:4"} Result { r.error } - function Bind(r: Result, f: T1 -> Result): Result { + function Bind(r: Result, f: S -> Result): Result { match r case Success(v) => f(v) - case Failure(e) => Result.Failure(e) + case Failure(e) => Result.Failure(e) } function Join(rr: Result,E>): Result { @@ -52,11 +52,11 @@ module {:options "-functionSyntax:4"} Result { case Failure(e) => Result.Failure(e) } - function Map(f: T1 -> T2): Result -> Result { - (r: Result) => + function Map(f: S -> T): Result -> Result { + (r: Result) => match r - case Success(v) => Result.Success(f(v)) - case Failure(e) => Result.Failure(e) + case Success(v) => Result.Success(f(v)) + case Failure(e) => Result.Failure(e) } function MapError(f: E1 -> E2): Result -> Result { @@ -73,7 +73,7 @@ module {:options "-functionSyntax:4"} Result { case Failure(e) => g(e) } - function Composition(f: T1 -> Result, g: T2 -> Result): T1 -> Result { + function Composition(f: S -> Result, g: T -> Result): S -> Result { x => Bind(f(x), g) } @@ -132,7 +132,7 @@ module {:options "-functionSyntax:4"} Result { { } - lemma LemmaAssociativityBind(r: Result, f: T1 -> Result, g: T2 -> Result) + lemma LemmaAssociativityBind(r: Result, f: S -> Result, g: T -> Result) ensures Bind(Bind(r, f), g) == Bind(r, Composition(f, g)) { } From 7e4a628683efe3da8f901ec26732d95c3f0071fd Mon Sep 17 00:00:00 2001 From: stefan-aws Date: Fri, 27 Jan 2023 17:59:19 +0000 Subject: [PATCH 09/33] skeleton --- src/Writer.dfy | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/src/Writer.dfy b/src/Writer.dfy index e69de29b..d9c10d14 100644 --- a/src/Writer.dfy +++ b/src/Writer.dfy @@ -0,0 +1,34 @@ +module {:options "-functionSyntax:4"} Writer { + + datatype Writer = Result(value: T, log: string) + + function GetValue(w: Writer): T { + w.value + } + + function GetLog(w: Writer): string { + w.log + } + + function Return(v: T): Writer { + Result(v, "") + } + + function Join(ww: Writer>): Writer { + Result((ww.value).value, (ww.value).log + ww.log) + } + + function Map(f: S -> T): Writer -> Writer { + (w: Writer) => Writer.Result(f(w.value), w.log) + } + + function Bind(w: Writer, f: S -> Writer): Writer { + Writer.Result(f(w.value).value, w.log + f(w.value).log) + } + + lemma LemmaUnitalityJoin(w: Writer) + ensures Join(Map(Return)(w)) == w == Join(Return>(w)) + { + } + +} From e5692e1f39d14ad5a281c2fd887e632514e3fb70 Mon Sep 17 00:00:00 2001 From: stefan-aws Date: Mon, 30 Jan 2023 14:37:54 +0000 Subject: [PATCH 10/33] notation --- src/Result.dfy | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Result.dfy b/src/Result.dfy index 032c3e64..8adbb4a3 100644 --- a/src/Result.dfy +++ b/src/Result.dfy @@ -122,7 +122,7 @@ module {:options "-functionSyntax:4"} Result { { } - lemma LemmaLeftUnitalityBind(v: T1, f: T1 -> Result) + lemma LemmaLeftUnitalityBind(v: S, f: S -> Result) ensures Bind(Success(v), f) == f(v) { } From 909c9714c67595ddc682269a9a9b75628b95f9eb Mon Sep 17 00:00:00 2001 From: stefan-aws Date: Mon, 30 Jan 2023 14:45:13 +0000 Subject: [PATCH 11/33] notation --- src/Either.dfy | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/src/Either.dfy b/src/Either.dfy index d22c3890..90c8521f 100644 --- a/src/Either.dfy +++ b/src/Either.dfy @@ -13,6 +13,14 @@ module {:options "-functionSyntax:4"} Either { datatype Either<+S,+T> = Left(left: S) | Right(right: T) + function Left(v: S): Either { + Either.Left(v) + } + + function Right(v: T): Either { + Either.Right(v) + } + predicate IsLeft(e: Either) { e.Left? } @@ -33,18 +41,18 @@ module {:options "-functionSyntax:4"} Either { case Right(v) => Some(v) } - function MapLeft(f: S1 -> S2): Either -> Either { - (e: Either) => + function MapLeft(f: S -> T): Either -> Either { + (e: Either) => match e - case Left(v) => Either.Left(f(v)) - case Right(v) => Either.Right(v) + case Left(v) => Either.Left(f(v)) + case Right(v) => Either.Right(v) } - function MapRight(f: T1 -> T2): Either -> Either { - (e: Either) => + function MapRight(f: T -> U): Either -> Either { + (e: Either) => match e - case Left(v) => Either.Left(v) - case Right(v) => Either.Right(f(v)) + case Left(v) => Either.Left(v) + case Right(v) => Either.Right(f(v)) } function Map(f: S1 -> S2, g: T1 -> T2): Either -> Either { From de840250811aead0797c26b8a727a9e3005b8154 Mon Sep 17 00:00:00 2001 From: stefan-aws Date: Mon, 30 Jan 2023 15:02:48 +0000 Subject: [PATCH 12/33] monad laws --- src/Writer.dfy | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/src/Writer.dfy b/src/Writer.dfy index d9c10d14..44695ce7 100644 --- a/src/Writer.dfy +++ b/src/Writer.dfy @@ -26,9 +26,33 @@ module {:options "-functionSyntax:4"} Writer { Writer.Result(f(w.value).value, w.log + f(w.value).log) } + function Composition(f: S -> Writer, g: T -> Writer): S -> Writer { + x => Bind(f(x), g) + } + lemma LemmaUnitalityJoin(w: Writer) ensures Join(Map(Return)(w)) == w == Join(Return>(w)) { } + lemma LemmaAssociativityJoin(www: Writer>>) + ensures Join(Map(Join)(www)) == Join(Join>(www)) + { + } + + lemma LemmaLeftUnitalityBind(v: S, f: S -> Writer) + ensures Bind(Return(v), f) == f(v) + { + } + + lemma LemmaRightUnitalityBind(w: Writer) + ensures Bind(w, Return) == w + { + } + + lemma LemmaAssociativityBind(w: Writer, f: S -> Writer, g: T -> Writer) + ensures Bind(Bind(w, f), g) == Bind(w, Composition(f, g)) + { + } + } From 5caa9811103ee8cd5410995564aeaa1d033bc5e4 Mon Sep 17 00:00:00 2001 From: stefan-aws Date: Mon, 30 Jan 2023 16:34:21 +0000 Subject: [PATCH 13/33] skeleton --- src/Reader.dfy | 64 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 src/Reader.dfy diff --git a/src/Reader.dfy b/src/Reader.dfy new file mode 100644 index 00000000..993d28f2 --- /dev/null +++ b/src/Reader.dfy @@ -0,0 +1,64 @@ +include "Wrappers.dfy" + +module {:options "-functionSyntax:4"} Reader { + + datatype Reader<-X,+T> = Reader(f: X -> T) + + function Return(t: T): Reader { + Reader(x => t) + } + + function Map(f: S -> T): Reader -> Reader { + (r: Reader) => + Reader(x => f((r.f)(x))) + } + + function Join(rr: Reader>): Reader { + Reader(x => (rr.f(x)).f(x)) + } + + function Bind(r: Reader, f: S -> Reader): Reader { + Reader(x => (f((r.f)(x)).f)(x)) + } + + function Composition(f: S -> Reader, g: T -> Reader): S -> Reader { + s => Bind(f(s), g) + } + + ghost function Equal(eq: (T, T) -> bool): (Reader, Reader) -> bool + { + (r1: Reader, r2: Reader) => forall x: X :: eq(r1.f(x), r2.f(x)) + } + + lemma LemmaUnitalityJoin(r: Reader) + requires forall f: X -> T, g: X -> T :: (forall x: X :: f(x) == g(x)) ==> f == g + ensures Join(Map(Return)(r)) == r == Join(Return>(r)) + { + } + + lemma LemmaAssociativityJoin(rrr: Reader>>) + requires forall f: X -> T, g: X -> T :: (forall x: X :: f(x) == g(x)) ==> f == g + ensures Join(Map(Join)(rrr)) == Join(Join>(rrr)) + { + } + + lemma LemmaLeftUnitalityBind(s: S, f: S -> Reader) + requires forall f: X -> T, g: X -> T :: (forall x: X :: f(x) == g(x)) ==> f == g + ensures Bind(Return(s), f) == f(s) + { + assert (Bind(Return(s), f)).f == (f(s).f); + } + + lemma LemmaRightUnitalityBind(r: Reader) + requires forall f: X -> T, g: X -> T :: (forall x: X :: f(x) == g(x)) ==> f == g + ensures Bind(r, Return) == r + { + } + + lemma LemmaAssociativityBind(r: Reader, f: S -> Reader, g: T -> Reader) + requires forall f: X -> U, g: X -> U :: (forall x: X :: f(x) == g(x)) ==> f == g + ensures Bind(Bind(r, f), g) == Bind(r, Composition(f, g)) + { + } + +} From d551c5a3f37aefb9796ad006c652fe9a9503a058 Mon Sep 17 00:00:00 2001 From: stefan-aws Date: Mon, 30 Jan 2023 18:25:08 +0000 Subject: [PATCH 14/33] Skeleton --- src/Coreader.dfy | 62 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 src/Coreader.dfy diff --git a/src/Coreader.dfy b/src/Coreader.dfy new file mode 100644 index 00000000..6ea29357 --- /dev/null +++ b/src/Coreader.dfy @@ -0,0 +1,62 @@ +include "Wrappers.dfy" + +module {:options "-functionSyntax:4"} Coreader { + + datatype Coreader<+X,+T> = Coreader(left: X, right: T) + + function Extract(r: Coreader): T { + r.right + } + + function Duplicate(r: Coreader): Coreader> { + Coreader(r.left, r) + } + + function Extend(f: Coreader -> T, r: Coreader): Coreader { + Coreader(r.left, f(r)) + } + + function Map(f: S -> T): Coreader -> Coreader { + (r: Coreader) => + Coreader(r.left, f(r.right)) + } + + function Composition(f: Coreader -> T, g: Coreader -> U): Coreader -> U { + r => g(Extend(f, r)) + } + + lemma LemmaUnitalityExtract(r: Coreader) + ensures Map(Extract)(Duplicate(r)) == r == Extract>(Duplicate(r)) + { + } + + lemma LemmaAssociativityDuplicate(r: Coreader) + ensures Map(Duplicate)(Duplicate(r)) == Duplicate>(Duplicate(r)) + { + } + + lemma LemmaLeftUnitalityExtend(r: Coreader) + ensures Extend(Extract, r) == r + { + } + + lemma LemmaRightUnitalityExtend(f: Coreader -> T, r: Coreader) + ensures Extract(Extend(f, r)) == f(r) + { + } + + lemma LemmaAssociativityExtend(r: Coreader, f: Coreader -> T, g: Coreader -> U) + ensures Extend(g, Extend(f, r)) == Extend(Composition(f, g), r) + { + } + + lemma LemmaAssociativityComposition(f: Coreader -> T, g: Coreader -> U, h: Coreader -> V) + ensures forall r: Coreader :: Composition(Composition(f, g),h)(r) == Composition(f, Composition(g,h))(r) + { + } + + lemma LemmaIdentityExtract(f: Coreader -> T) + ensures forall r: Coreader :: Composition(f, Extract)(r) == f(r) == Composition(Extract, f)(r) + { + } +} \ No newline at end of file From 29248478f4f194282ba5f7de5e8931a3722b4e8c Mon Sep 17 00:00:00 2001 From: stefan-aws Date: Mon, 30 Jan 2023 18:34:41 +0000 Subject: [PATCH 15/33] more lemmas, quantifier fix --- src/Reader.dfy | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/src/Reader.dfy b/src/Reader.dfy index 993d28f2..4c6ca588 100644 --- a/src/Reader.dfy +++ b/src/Reader.dfy @@ -31,34 +31,37 @@ module {:options "-functionSyntax:4"} Reader { } lemma LemmaUnitalityJoin(r: Reader) - requires forall f: X -> T, g: X -> T :: (forall x: X :: f(x) == g(x)) ==> f == g - ensures Join(Map(Return)(r)) == r == Join(Return>(r)) + ensures forall x: X :: Join(Map(Return)(r)).f(x) == r.f(x) == Join(Return>(r)).f(x) { } lemma LemmaAssociativityJoin(rrr: Reader>>) - requires forall f: X -> T, g: X -> T :: (forall x: X :: f(x) == g(x)) ==> f == g - ensures Join(Map(Join)(rrr)) == Join(Join>(rrr)) + ensures forall x: X :: Join(Map(Join)(rrr)).f(x) == Join(Join>(rrr)).f(x) { } lemma LemmaLeftUnitalityBind(s: S, f: S -> Reader) - requires forall f: X -> T, g: X -> T :: (forall x: X :: f(x) == g(x)) ==> f == g - ensures Bind(Return(s), f) == f(s) + ensures forall x: X :: Bind(Return(s), f).f(x) == f(s).f(x) { - assert (Bind(Return(s), f)).f == (f(s).f); } lemma LemmaRightUnitalityBind(r: Reader) - requires forall f: X -> T, g: X -> T :: (forall x: X :: f(x) == g(x)) ==> f == g - ensures Bind(r, Return) == r + ensures forall x: X :: Bind(r, Return).f(x) == r.f(x) { } lemma LemmaAssociativityBind(r: Reader, f: S -> Reader, g: T -> Reader) - requires forall f: X -> U, g: X -> U :: (forall x: X :: f(x) == g(x)) ==> f == g - ensures Bind(Bind(r, f), g) == Bind(r, Composition(f, g)) + ensures forall x: X :: Bind(Bind(r, f), g).f(x) == Bind(r, Composition(f, g)).f(x) { } + lemma LemmaAssociativityComposition(f: S -> Reader, g: T -> Reader, h: U -> Reader) + ensures forall s: S, x: X :: Composition(Composition(f, g),h)(s).f(x) == Composition(f, Composition(g,h))(s).f(x) + { + } + + lemma LemmaIdentityReturn(f: S -> Reader) + ensures forall s: S, x: X :: Composition(f, Return)(s).f(x) == f(s).f(x) == Composition(Return, f)(s).f(x) + { + } } From 5886e98d9fc1828f4e4c514aecc49d768c7e01ac Mon Sep 17 00:00:00 2001 From: stefan-aws Date: Mon, 30 Jan 2023 18:43:35 +0000 Subject: [PATCH 16/33] more lemmas, notation --- src/Writer.dfy | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/Writer.dfy b/src/Writer.dfy index 44695ce7..a5fab3ab 100644 --- a/src/Writer.dfy +++ b/src/Writer.dfy @@ -27,7 +27,7 @@ module {:options "-functionSyntax:4"} Writer { } function Composition(f: S -> Writer, g: T -> Writer): S -> Writer { - x => Bind(f(x), g) + s => Bind(f(s), g) } lemma LemmaUnitalityJoin(w: Writer) @@ -55,4 +55,13 @@ module {:options "-functionSyntax:4"} Writer { { } + lemma LemmaAssociativityComposition(f: S -> Writer, g: T -> Writer, h: U -> Writer) + ensures forall s: S :: Composition(Composition(f, g), h)(s) == Composition(f, Composition(g, h))(s) + { + } + + lemma LemmaIdentityExtract(f: S -> Writer) + ensures forall s: S :: Composition(f, Return)(s) == f(s) == Composition(Return, f)(s) + { + } } From 8f94e143cf94229fad1ad8630b89dfecf58462c1 Mon Sep 17 00:00:00 2001 From: stefan-aws Date: Mon, 30 Jan 2023 18:51:49 +0000 Subject: [PATCH 17/33] additional lemmas, notation --- src/Result.dfy | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/src/Result.dfy b/src/Result.dfy index 8adbb4a3..c3e64d67 100644 --- a/src/Result.dfy +++ b/src/Result.dfy @@ -6,7 +6,7 @@ module {:options "-functionSyntax:4"} Result { datatype Result<+T,+E> = | Success(value: T) | Failure(error: E) - function Success(v: T): Result { + function Return(v: T): Result { Result.Success(v) } @@ -74,7 +74,7 @@ module {:options "-functionSyntax:4"} Result { } function Composition(f: S -> Result, g: T -> Result): S -> Result { - x => Bind(f(x), g) + s => Bind(f(s), g) } function Equal(eqs: (T, T) -> bool, eqf: (E, E) -> bool): (Result, Result) -> bool { @@ -113,7 +113,7 @@ module {:options "-functionSyntax:4"} Result { } lemma LemmaUnitalityJoin(r: Result) - ensures Join(Map(Success)(r)) == r == Join(Success,E>(r)) + ensures Join(Map(Return)(r)) == r == Join(Return,E>(r)) { } @@ -123,12 +123,12 @@ module {:options "-functionSyntax:4"} Result { } lemma LemmaLeftUnitalityBind(v: S, f: S -> Result) - ensures Bind(Success(v), f) == f(v) + ensures Bind(Return(v), f) == f(v) { } lemma LemmaRightUnitalityBind(r: Result) - ensures Bind(r, Success) == r + ensures Bind(r, Return) == r { } @@ -137,6 +137,16 @@ module {:options "-functionSyntax:4"} Result { { } + lemma LemmaAssociativityComposition(f: S -> Result, g: T -> Result, h: U -> Result) + ensures forall s: S :: Composition(Composition(f, g), h)(s) == Composition(f, Composition(g, h))(s) + { + } + + lemma LemmaIdentityExtract(f: S -> Result) + ensures forall s: S :: Composition(f, Return)(s) == f(s) == Composition(Return, f)(s) + { + } + } From 8056018f95739dd818d11892309ac41e426947c1 Mon Sep 17 00:00:00 2001 From: stefan-aws Date: Mon, 30 Jan 2023 19:06:02 +0000 Subject: [PATCH 18/33] more lemmas, notation --- src/Option.dfy | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/src/Option.dfy b/src/Option.dfy index c1ef610d..a4b8d961 100644 --- a/src/Option.dfy +++ b/src/Option.dfy @@ -12,7 +12,7 @@ module {:options "-functionSyntax:4"} Option { datatype Option<+T> = None | Some(value: T) - function Some(v: T): Option { + function Return(v: T): Option { Option.Some(v) } @@ -53,7 +53,7 @@ module {:options "-functionSyntax:4"} Option { (o: Option) => match o case None => Option.None - case Some(v) => Some(f(v)) + case Some(v) => Option.Some(f(v)) } function Fold(u: U, f: T -> U): Option -> U { @@ -81,7 +81,7 @@ module {:options "-functionSyntax:4"} Option { } function Composition(f: S -> Option, g: T-> Option): S -> Option { - x => Bind(f(x), g) + s => Bind(f(s), g) } function ToResult(e: E): Option -> Result { @@ -104,7 +104,7 @@ module {:options "-functionSyntax:4"} Option { } lemma LemmaUnitalityJoin(o: Option) - ensures Join(Map(Some)(o)) == o == Join(Some>(o)) + ensures Join(Map(Return)(o)) == o == Join(Return>(o)) { } @@ -114,12 +114,12 @@ module {:options "-functionSyntax:4"} Option { } lemma LemmaLeftUnitalityBind(v: S, f: S -> Option) - ensures Bind(Some(v), f) == f(v) + ensures Bind(Return(v), f) == f(v) { } lemma LemmaRightUnitalityBind(o: Option) - ensures Bind(o, Some) == o + ensures Bind(o, Return) == o { } @@ -128,6 +128,16 @@ module {:options "-functionSyntax:4"} Option { { } + lemma LemmaAssociativityComposition(f: S -> Option, g: T -> Option, h: U -> Option) + ensures forall s: S :: Composition(Composition(f, g),h)(s) == Composition(f, Composition(g,h))(s) + { + } + + lemma LemmaIdentityReturn(f: S -> Option) + ensures forall s: S :: Composition(f, Return)(s) == f(s) == Composition(Return, f)(s) + { + } + From 66e5b82639a73b858c02d06b7f6ca74ea908e297 Mon Sep 17 00:00:00 2001 From: stefan-aws Date: Thu, 2 Feb 2023 19:03:52 +0000 Subject: [PATCH 19/33] combine --- .DS_Store | Bin 0 -> 8196 bytes src/Either.dfy | 32 +- src/Functions.dfy | 4 + src/Option.dfy | 83 +++-- src/Reader.dfy | 41 ++- src/Result.dfy | 108 ++++-- src/Wrappers.dfy | 584 ++++++++++++++++++++++++++++---- src/Wrappers.dll | Bin 0 -> 154624 bytes src/Wrappers.runtimeconfig.json | 10 + src/Writer.dfy | 58 +++- 10 files changed, 777 insertions(+), 143 deletions(-) create mode 100644 .DS_Store create mode 100644 src/Wrappers.dll create mode 100644 src/Wrappers.runtimeconfig.json diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..f8de3e84e630e08a3d1d98381967a686ffef9ec3 GIT binary patch literal 8196 zcmeHMTWl0n7(U;$z|54&DYQ^_gse0HqzkqM3bZOqFJM9BvMntITz7W{m@u6wJF{Dm z5Ua!&!AoL{PvRx|D2efsXo8_{M4vR3z>6lB_@WQSs81&NpEC_%cCl&*-b7?AE%pN#C%ksOy&x-&$V4@4s)x}hK(o%&CP z<_u{m<2*(nM&Nb?MEF!OpA}glKX&W=-Ld_krR55gs_I#@=csek8ud`-s5h1gazV-O z$`ua?t>5#Ue5IVr@3XD3EU)kO+#qMWRxxz2O^Zwp4%)8ijdgh?*Yrc*jBHRfRm<|l zr%tWjur`%!-PG20I+Z-NsjVfIT(`FU^l43PXnL%3Z}ylo;(BN03J|>oSnZ4zots*Y zBCt*zf5!9H5%BS>+iFQKFKVf=hNEy3ZA>WXo>d0 zg6EV*TtCa}3OT1xa&m#S#c?wB^OippSSJEe8uqb3PIWPIvUW@GPveiS@{*X=G z3A6ecQ-*e7Zo`sg%bQ!)cWmzI+qq}5_Mv&aPG6u86F_cYAGWRH{+wU1T+?=s42;=k zaCES2`*z;3`rX`!rPU#;P1Y`4)VMfd7}8+Mp<+5z%G<|Fc5sq6scJaJQX{D!G-+}> zJyVQgs{C{6hemHQlEwki(p|JDHzS7?#-n<_Pis(lP8z24HG2Os+F6bJvZhsEYYaHK zyya-zl;gDP8;!xT#8%@wWM!xRgfUd`Mn-6fKCK`ntJ6l8@vIp6>6{ z!MDZ024s(PZORihZWLh-_)T|H1X<4 zeR8uV0-Uo@Pb9i~sHX|8{&%8&!oFgc*kv|JME!;R%6?}zpb|Y3NMd{0QO-B!$ee*sCoo8itrH-U0=XBUc?!^Ok{l>Z{SV5h4XlqX!}7# z+fVV?3>t2qPD5OrqG35xbREwCO zB7o|iOive0>~1eyao0}L^Bg@Q3A=GALl?@z>p02qI!^NDABI#;lBw`XM{- = Left(left: S) | Right(right: T) + /********************************************************** + * + * Get and set + * + ***********************************************************/ + function Left(v: S): Either { Either.Left(v) } @@ -29,6 +35,12 @@ module {:options "-functionSyntax:4"} Either { e.Right? } + /********************************************************** + * + * Conversion to other datatypes + * + ***********************************************************/ + function FindLeft(e: Either): Option { match e case Left(v) => Some(v) @@ -41,6 +53,12 @@ module {:options "-functionSyntax:4"} Either { case Right(v) => Some(v) } + /********************************************************** + * + * Map + * + ***********************************************************/ + function MapLeft(f: S -> T): Either -> Either { (e: Either) => match e @@ -62,6 +80,12 @@ module {:options "-functionSyntax:4"} Either { case Right(v) => Either.Right(g(v)) } + /********************************************************** + * + * Fold + * + ***********************************************************/ + function Fold(f: S -> U, g: T -> U): Either -> U { (e: Either) => match e @@ -69,6 +93,12 @@ module {:options "-functionSyntax:4"} Either { case Right(v) => g(v) } + /********************************************************** + * + * Comparison + * + ***********************************************************/ + function Equal(eql: (S, S) -> bool, eqr: (T, T) -> bool): (Either, Either) -> bool { (e1: Either, e2: Either) => match (e1, e2) @@ -86,7 +116,5 @@ module {:options "-functionSyntax:4"} Either { case (Right(_), Left(_)) => 1 } - - } diff --git a/src/Functions.dfy b/src/Functions.dfy index 85757547..17eb2aa5 100644 --- a/src/Functions.dfy +++ b/src/Functions.dfy @@ -21,4 +21,8 @@ module {:options "-functionSyntax:4"} Functions { forall x1, x2 :: f(x1) == f(x2) ==> x1 == x2 } + function Composition(f: X -> Y, g: Y -> Z): X -> Z { + x => g(f(x)) + } + } diff --git a/src/Option.dfy b/src/Option.dfy index a4b8d961..2d725ab0 100644 --- a/src/Option.dfy +++ b/src/Option.dfy @@ -10,6 +10,12 @@ module {:options "-functionSyntax:4"} Option { import opened Wrappers + /********************************************************** + * + * Monadic structure in terms of Return, Bind, Join, Map, Composition + * + ***********************************************************/ + datatype Option<+T> = None | Some(value: T) function Return(v: T): Option { @@ -22,19 +28,29 @@ module {:options "-functionSyntax:4"} Option { case Some(v) => f(v) } - predicate IsNone(o: Option) { - o.None? + function Join(oo: Option>): Option { + match oo + case None => Option.None + case Some(o) => o } - predicate IsSome(o: Option) { - o.Some? + function Map(f: S -> T): Option -> Option + { + (o: Option) => + match o + case None => Option.None + case Some(v) => Option.Some(f(v)) } - function GetValue(o: Option): T - requires o.Some? - { - o.value + function Composition(f: S -> Option, g: T-> Option): S -> Option { + s => Bind(f(s), g) } + + /********************************************************** + * + * Get and Fold + * + ***********************************************************/ function GetValueDefault(o: Option, default: T): T { match o @@ -42,18 +58,10 @@ module {:options "-functionSyntax:4"} Option { case Some(v) => v } - function Join(oo: Option>): Option { - match oo - case None => Option.None - case Some(o) => o - } - - function Map(f: S -> T): Option -> Option + function GetValue(o: Option): T + requires o.Some? { - (o: Option) => - match o - case None => Option.None - case Some(v) => Option.Some(f(v)) + o.value } function Fold(u: U, f: T -> U): Option -> U { @@ -63,6 +71,12 @@ module {:options "-functionSyntax:4"} Option { case Some(v) => f(v) } + /********************************************************** + * + * Comparison + * + ***********************************************************/ + function Equal(eq: (T, T) -> bool): (Option, Option) -> bool { (o1: Option, o2: Option) => match (o1, o2) @@ -80,9 +94,11 @@ module {:options "-functionSyntax:4"} Option { case (Some(_), None) => 1 } - function Composition(f: S -> Option, g: T-> Option): S -> Option { - s => Bind(f(s), g) - } + /********************************************************** + * + * Conversion to other datatypes + * + ***********************************************************/ function ToResult(e: E): Option -> Result { (o: Option) => @@ -103,6 +119,12 @@ module {:options "-functionSyntax:4"} Option { case Some(v) => {v} } + /********************************************************** + * + * Monad laws in terms of Join and Map + * + ***********************************************************/ + lemma LemmaUnitalityJoin(o: Option) ensures Join(Map(Return)(o)) == o == Join(Return>(o)) { @@ -113,6 +135,12 @@ module {:options "-functionSyntax:4"} Option { { } + /********************************************************** + * + * Monad laws in terms of Bind and Return + * + ***********************************************************/ + lemma LemmaLeftUnitalityBind(v: S, f: S -> Option) ensures Bind(Return(v), f) == f(v) { @@ -128,6 +156,12 @@ module {:options "-functionSyntax:4"} Option { { } + /********************************************************** + * + * Monad laws in terms of (Kleisli) Composition and Return + * + ***********************************************************/ + lemma LemmaAssociativityComposition(f: S -> Option, g: T -> Option, h: U -> Option) ensures forall s: S :: Composition(Composition(f, g),h)(s) == Composition(f, Composition(g,h))(s) { @@ -138,9 +172,4 @@ module {:options "-functionSyntax:4"} Option { { } - - - - - } diff --git a/src/Reader.dfy b/src/Reader.dfy index 4c6ca588..a3a927f2 100644 --- a/src/Reader.dfy +++ b/src/Reader.dfy @@ -2,34 +2,53 @@ include "Wrappers.dfy" module {:options "-functionSyntax:4"} Reader { + /********************************************************** + * + * Monadic structure in terms of Return, Bind, Join, Map, Composition + * + ***********************************************************/ + datatype Reader<-X,+T> = Reader(f: X -> T) function Return(t: T): Reader { Reader(x => t) } - function Map(f: S -> T): Reader -> Reader { - (r: Reader) => - Reader(x => f((r.f)(x))) + function Bind(r: Reader, f: S -> Reader): Reader { + Reader(x => (f((r.f)(x)).f)(x)) } function Join(rr: Reader>): Reader { Reader(x => (rr.f(x)).f(x)) } - function Bind(r: Reader, f: S -> Reader): Reader { - Reader(x => (f((r.f)(x)).f)(x)) + function Map(f: S -> T): Reader -> Reader { + (r: Reader) => + Reader(x => f((r.f)(x))) } function Composition(f: S -> Reader, g: T -> Reader): S -> Reader { s => Bind(f(s), g) } + + /********************************************************** + * + * Comparison + * + ***********************************************************/ + ghost function Equal(eq: (T, T) -> bool): (Reader, Reader) -> bool { (r1: Reader, r2: Reader) => forall x: X :: eq(r1.f(x), r2.f(x)) } + /********************************************************** + * + * Monad laws in terms of Join and Map + * + ***********************************************************/ + lemma LemmaUnitalityJoin(r: Reader) ensures forall x: X :: Join(Map(Return)(r)).f(x) == r.f(x) == Join(Return>(r)).f(x) { @@ -40,6 +59,12 @@ module {:options "-functionSyntax:4"} Reader { { } + /********************************************************** + * + * Monad laws in terms of Bind and Return + * + ***********************************************************/ + lemma LemmaLeftUnitalityBind(s: S, f: S -> Reader) ensures forall x: X :: Bind(Return(s), f).f(x) == f(s).f(x) { @@ -55,6 +80,12 @@ module {:options "-functionSyntax:4"} Reader { { } + /********************************************************** + * + * Monad laws in terms of (Kleisli) Composition and Return + * + ***********************************************************/ + lemma LemmaAssociativityComposition(f: S -> Reader, g: T -> Reader, h: U -> Reader) ensures forall s: S, x: X :: Composition(Composition(f, g),h)(s).f(x) == Composition(f, Composition(g,h))(s).f(x) { diff --git a/src/Result.dfy b/src/Result.dfy index c3e64d67..6183153e 100644 --- a/src/Result.dfy +++ b/src/Result.dfy @@ -4,12 +4,58 @@ module {:options "-functionSyntax:4"} Result { import opened Wrappers + /********************************************************** + * + * Monadic structure in terms of Return, Bind, Join, Map, Composition + * + ***********************************************************/ + datatype Result<+T,+E> = | Success(value: T) | Failure(error: E) function Return(v: T): Result { Result.Success(v) } + function Bind(r: Result, f: S -> Result): Result { + match r + case Success(v) => f(v) + case Failure(e) => Result.Failure(e) + } + + function Join(rr: Result,E>): Result { + match rr + case Success(v) => v + case Failure(e) => Result.Failure(e) + } + + function Map(f: S -> T): Result -> Result { + (r: Result) => + match r + case Success(v) => Result.Success(f(v)) + case Failure(e) => Result.Failure(e) + } + + function MapError(f: E1 -> E2): Result -> Result { + (r: Result) => + match r + case Success(v) => Result.Success(v) + case Failure(e) => Result.Failure(f(e)) + } + + function Composition(f: S -> Result, g: T -> Result): S -> Result { + s => Bind(f(s), g) + } + + /********************************************************** + * + * Get and set + * + ***********************************************************/ + + function Success(v: T): Result { + Result.Success(v) + } + function Failure(e: E): Result { Result.Failure(e) } @@ -40,31 +86,11 @@ module {:options "-functionSyntax:4"} Result { r.error } - function Bind(r: Result, f: S -> Result): Result { - match r - case Success(v) => f(v) - case Failure(e) => Result.Failure(e) - } - - function Join(rr: Result,E>): Result { - match rr - case Success(v) => v - case Failure(e) => Result.Failure(e) - } - - function Map(f: S -> T): Result -> Result { - (r: Result) => - match r - case Success(v) => Result.Success(f(v)) - case Failure(e) => Result.Failure(e) - } - - function MapError(f: E1 -> E2): Result -> Result { - (r: Result) => - match r - case Success(v) => Result.Success(v) - case Failure(e) => Result.Failure(f(e)) - } + /********************************************************** + * + * Fold + * + ***********************************************************/ function Fold(f: T -> U, g: E -> U): Result -> U { (r: Result) => @@ -73,9 +99,11 @@ module {:options "-functionSyntax:4"} Result { case Failure(e) => g(e) } - function Composition(f: S -> Result, g: T -> Result): S -> Result { - s => Bind(f(s), g) - } + /********************************************************** + * + * Comparison + * + ***********************************************************/ function Equal(eqs: (T, T) -> bool, eqf: (E, E) -> bool): (Result, Result) -> bool { (r1: Result, r2: Result) => @@ -94,6 +122,12 @@ module {:options "-functionSyntax:4"} Result { case (Failure(_), Success(_)) => 1 } + /********************************************************** + * + * Conversion to other datatypes + * + ***********************************************************/ + function ToSeq(r: Result): seq { match r case Success(v) => [v] @@ -112,6 +146,12 @@ module {:options "-functionSyntax:4"} Result { case Failure(_) => None() } + /********************************************************** + * + * Monad laws in terms of Join and Map + * + ***********************************************************/ + lemma LemmaUnitalityJoin(r: Result) ensures Join(Map(Return)(r)) == r == Join(Return,E>(r)) { @@ -122,6 +162,12 @@ module {:options "-functionSyntax:4"} Result { { } + /********************************************************** + * + * Monad laws in terms of Bind and Return + * + ***********************************************************/ + lemma LemmaLeftUnitalityBind(v: S, f: S -> Result) ensures Bind(Return(v), f) == f(v) { @@ -137,6 +183,12 @@ module {:options "-functionSyntax:4"} Result { { } + /********************************************************** + * + * Monad laws in terms of (Kleisli) Composition and Return + * + ***********************************************************/ + lemma LemmaAssociativityComposition(f: S -> Result, g: T -> Result, h: U -> Result) ensures forall s: S :: Composition(Composition(f, g), h)(s) == Composition(f, Composition(g, h))(s) { diff --git a/src/Wrappers.dfy b/src/Wrappers.dfy index 22fc4bf5..6f82e4c2 100644 --- a/src/Wrappers.dfy +++ b/src/Wrappers.dfy @@ -5,95 +5,541 @@ * SPDX-License-Identifier: MIT *******************************************************************************/ -module {:options "-functionSyntax:4"} Wrappers { - - datatype Option<+T> = None | Some(value: T) { - function ToResult(): Result { - match this - case Some(v) => Success(v) - case None() => Failure("Option is None") - } - - function UnwrapOr(default: T): T { - match this - case Some(v) => v - case None() => default - } +include "functions.dfy" - predicate IsFailure() { - None? - } +abstract module {:options "-functionSyntax:4"} Functor { - function PropagateFailure(): Option - requires None? - { - None - } + import opened Functions - function Extract(): T - requires Some? - { - value - } + /********************************************************** + * + * Assumed structure + * + ***********************************************************/ + + /* Functor structure */ + type W(!new) + + function Map(f: S -> T): W -> W + + function Equal(eq: (T, T) -> bool): (eq': (W, W) -> bool) + requires + && forall x: T :: eq(x, x) + && forall x, y, z: T :: eq(x, y) && eq(y, z) ==> eq(x, z) + && forall x, y: T :: eq(x, y) ==> eq(y, x) + ensures + && forall w: W :: eq'(w, w) + && forall u, v, w: W :: eq'(u, v) && eq'(v, w) ==> eq'(u, w) + && forall v, w: W :: eq'(u, v) ==> eq'(v, w) + + /* Functoriality of Map */ + lemma LemmaMapFunction(eq: (T, T) -> bool, f: S -> T, g: S -> T) + requires forall x: S :: eq(f(x), g(x)) + ensures forall w: W :: Equal(eq)(Map(f)(w), Map(g)(w)) + + lemma LemmaMapFunctorial(f: S -> T, g: T -> U, w: W) + ensures Map(Composition(f, g))(w) == Composition(Map(f), Map(g))(w) + + lemma LemmaMapIdentity(id: T -> T) + requires forall x: T :: id(x) == x + ensures forall w: W :: Map(id)(w) == w + +} + +abstract module {:options "-functionSyntax:4"} Monad refines Functor { + + /********************************************************** + * + * Assumed structure + * + ***********************************************************/ + + /* Monad structure */ + type W + + function Return(x: T): W + + function Join(ww: W>): W + + /* Naturality of Return and Join */ + lemma LemmaReturnNaturality(eq: (W, W) -> bool, f: S -> T, x: S) + ensures eq(Map(f)(Return(x)), Return(f(x))) + + lemma LemmaJoinNaturality(eq: (W, W) -> bool, f: S -> T, ww: W>) + ensures eq(Join(Map(Map(f))(ww)), Map(f)(Join(ww))) + + /* Monad laws */ + lemma LemmaUnitalityJoin(eq: (W, W) -> bool, w: W) + ensures eq(Join(Map(Return)(w)), w) && eq(w, Join(Return(w))) + + lemma LemmaAssociativityJoin(eq: (W, W) -> bool, www: W>>) + ensures eq(Join(Map(Join)(www)), Join(Join(www))) + + /********************************************************** + * + * Derived structure + * + ***********************************************************/ + + /* Derived functions */ + function Bind(w: W, f: S -> W): W { + Join(Map(f)(w)) } - datatype Result<+T, +R> = | Success(value: T) | Failure(error: R) { - function ToOption(): Option - { - match this - case Success(s) => Some(s) - case Failure(e) => None() - } + function KleisliComp(f: S -> W, g: T -> W): S -> W { + x => Join(Map(g)(f(x))) + } - function UnwrapOr(default: T): T - { - match this - case Success(s) => s - case Failure(e) => default - } + /* Derived lemmas */ + lemma LemmaLeftUnitalityBind(eq: (W, W) -> bool, x: S, f: S -> W) + ensures eq(Bind(Return(x), f), f(x)) + { + assert Equal(eq)(Map(f)(Return(x)), Return(f(x))) by { LemmaReturnNaturality>(Equal(eq), f, x); } + assert eq(Join(Map(Return)(f(x))), f(x)) && eq(f(x), Join(Return(f(x)))) by { LemmaUnitalityJoin(eq, f(x)); } - predicate IsFailure() { - Failure? - } + // assert Equal(eq)(Map(f)(Return(x)), Return(f(x))) by { LemmaReturnNaturality(eq, f, x); } - function PropagateFailure(): Result - requires Failure? - { - Failure(this.error) + + // calc { + + // Equal(eq)(Bind(Return(x), f), f(x)); + // <==> // Definition of Bind + // Equal(eq)(Join(Map(f)(Return(x))), f(x)); + // <==> { LemmaReturnNaturality(eq, f, x); assert Equal(eq)(Map(f)(Return(x)), Return(f(x))); } + // Equal(eq)(Join(Return(f(x))), f(x)); + // <== { LemmaUnitalityJoin(eq, f(x)); } + // f(x); + // } + + } + + lemma LemmaRightUnitalityBind(w: W) + ensures Bind(w, Return) == w + { + calc { + Bind(w, Return); + == // Definition of Bind + Join(Map(Return)(w)); + == { LemmaUnitalityJoin(w); } + w; } + } - function MapFailure(reWrap: R -> NewR): Result - { - match this - case Success(s) => Success(s) - case Failure(e) => Failure(reWrap(e)) + lemma LemmaAssociativityBind(w: W, f: S -> W, g: T -> W) + ensures Bind(Bind(w, f), g) == Bind(w, KleisliComp(f, g)) + { + calc { + Bind(Bind(w, f), g); + == // Definition of Bind + Join(Map(g)(Join(Map(f)(w)))); + == { LemmaJoinNaturality(g, Map(f)(w)); } + Join(Join(Map(Map(g))(Map(f)(w)))); + == { LemmaMapFunctorial(f, Map(g), w); } + Join(Join(Map(x => Map(g)(f(x)))(w))); + == { LemmaAssociativityJoin(Map(x => Map(g)(f(x)))(w)); } + Join(Map(Join)(Map(x => Map(g)(f(x)))(w))); + == // Definition of Composition + Join(Composition(Map(x => Map(g)(f(x))), Map(Join))(w)); + == {LemmaMapFunctorial(x => Map(g)(f(x)), Join, w);} + Join(Map(Composition(x => Map(g)(f(x)), Join))(w)); + == { LemmaMapFunction((x, y) => x == y, Composition(x => Map(g)(f(x)), Join), x => Join(Map(g)(f(x)))); } + Join(Map(x => Join(Map(g)(f(x))))(w)); + == // Definition of Bind, KleisliComp + Bind(w, KleisliComp(f, g)); } + } - function Extract(): T - requires Success? - { - value + lemma LemmaAssociativityComposition(f: S -> W, g: T -> W, h: U -> W, x: S) + ensures KleisliComp(KleisliComp(f, g), h)(x) == KleisliComp(f, KleisliComp(g, h))(x) + { + calc { + KleisliComp(KleisliComp(f, g), h)(x); + == // Definition of KleisliComp + Join(Map(h)(Join(Map(g)(f(x))))); + == { LemmaJoinNaturality(h, Map(g)(f(x))); } + Join(Join(Map(Map(h))(Map(g)(f(x))))); + == // Definition of Composition + Join(Join(Composition(Map(g), Map(Map(h)))(f(x)))); + == { LemmaMapFunctorial(g, Map(h), f(x)); } + Join(Join(Map(Composition(g, Map(h)))(f(x)))); + == { LemmaAssociativityJoin(Map(Composition(g, Map(h)))(f(x))); } + Join(Map(Join)(Map(Composition(g, Map(h)))(f(x))) ); + == { LemmaMapFunctorial(Composition(g, Map(h)), Join, f(x)); } + Join(Map(Composition(Composition(g, Map(h)), Join))(f(x))); + == { LemmaMapFunction((x, y) => x == y, Composition(Composition(g, Map(h)), Join), y => Join(Map(h)(g(y)))); } + Join(Map(y => Join(Map(h)(g(y))))(f(x))); + == // Definition of KleisliComp + KleisliComp(f, KleisliComp(g, h))(x); } } - datatype Outcome = Pass | Fail(error: E) + lemma LemmaIdentityReturn(f: S -> W, x: S) + ensures KleisliComp(f, Return)(x) == f(x) == KleisliComp(Return, f)(x) { - predicate IsFailure() { - Fail? + calc { + KleisliComp(f, Return)(x); + == // Definition of Composition + Join(Map(Return)(f(x))); + == { LemmaUnitalityJoin(f(x)); } + f(x); } - // Note: PropagateFailure returns a Result, not an Outcome. - function PropagateFailure(): Result - requires Fail? - { - Failure(this.error) + calc { + f(x); + == { LemmaUnitalityJoin(f(x)); } + Join(Return(f(x))); + == { LemmaReturnNaturality(f, x); } + Join(Map(f)(Return(x))); + == // Definition of Composition + KleisliComp(Return, f)(x); } - // Note: no Extract method } +} + +abstract module {:options "-functionSyntax:4"} Result refines Monad { + + /********************************************************** + * + * Monad + * + ***********************************************************/ + + type E + + function eqe(e1: E, e2: E): bool + + /* Monad structure */ + + datatype W = Success(value: T) | Failure(error: E) + + function Map(f: S -> T): W -> W { + (w: W) => + match w + case Success(v) => W.Success(f(v)) + case Failure(e) => W.Failure(e) + } + + function Equal(eq: (T, T) -> bool): (W, W) -> bool { + (w1: W, w2: W) => + match (w1, w2) + case (Success(v1), Success(v2)) => eq(v1, v2) + case (Failure(e1), Failure(e2)) => eqe(e1, e2) + case _ => false + } + + function Return(x: T): W { + Success(x) + } + + function Join(ww: W>): W { + match ww + case Success(v) => v + case Failure(e) => W.Failure(e) + } + + /* Functoriality of Map */ + lemma LemmaMapFunction(eq: (T, T) -> bool, f: S -> T, g: S -> T) {} + + lemma LemmaMapFunctorial(f: S -> T, g: T -> U, w: W) {} + + lemma LemmaMapIdentity(id: T -> T) {} + + /* Naturality of Return and Join */ + lemma LemmaReturnNaturality(f: S -> T, x: S) {} + + lemma LemmaJoinNaturality(f: S -> T, ww: W>) {} + + /* Monad laws */ + lemma LemmaUnitalityJoin(w: W) {} - // A helper function to ensure a requirement is true at runtime - // :- Need(5 == |mySet|, "The set MUST have 5 elements.") - function Need(condition: bool, error: E): (result: Outcome) + lemma LemmaAssociativityJoin(www: W>>) {} + + /********************************************************** + * + * Wrapper + * + ***********************************************************/ + + /* Get and Set */ + function Failure(e: E): W { + W.Failure(e) + } + + predicate IsSuccess(w: W) { + w.Success? + } + + predicate IsFailure(w: W) { + w.Failure? + } + + function GetValue(w: W): T + requires w.Success? + { + w.value + } + + function GetValueDefault(w: W, default: T): T { + match w + case Success(v) => v + case Failure(_) => default + } + + function GetError(w: W): E + requires w.Failure? { - if condition then Pass else Fail(error) + w.error } + + /* Fold */ + function Fold(f: T -> U, g: E -> U): W -> U { + (w: W) => + match w + case Success(v) => f(v) + case Failure(e) => g(e) + } + + /* Conversion to other types */ + function ToSeq(w: W): seq { + match w + case Success(v) => [v] + case Failure(_) => [] + } + + function ToSet(w: W): set { + match w + case Success(v) => {v} + case Failure(_) => {} + } + + // function ToOption(w: W): Option { + // match w + // case Success(v) => Some(v) + // case Failure(_) => None() + // } + } + +module {:options "-functionSyntax:4"} Option refines Monad { + + /********************************************************** + * + * Monad + * + ***********************************************************/ + + /* Monad structure */ + datatype W = None | Some(value: T) + + function Map(f: S -> T): W -> W + { + (w: W) => + match w + case None => W.None + case Some(v) => W.Some(f(v)) + } + + function Equal(eq: (T, T) -> bool): (W, W) -> bool { + (w1: W, w2: W) => + match (w1, w2) + case (Some(v1), Some(v2)) => eq(v1, v2) + case (None, None) => true + case _ => false + } + + function Return(x: T): W { + Some(x) + } + + function Join(ww: W>): W { + match ww + case None => None + case Some(w) => w + } + + /* Functoriality of Map */ + lemma LemmaMapFunction(eq: (T, T) -> bool, f: S -> T, g: S -> T) {} + + lemma LemmaMapFunctorial(f: S -> T, g: T -> U, w: W) {} + + lemma LemmaMapIdentity(id: T -> T) {} + + /* Naturality of Return and Join */ + lemma LemmaReturnNaturality(f: S -> T, x: S) {} + + lemma LemmaJoinNaturality(f: S -> T, ww: W>) {} + + /* Monad laws */ + lemma LemmaUnitalityJoin(w: W) {} + + lemma LemmaAssociativityJoin(www: W>>) {} + + /********************************************************** + * + * Wrapper + * + ***********************************************************/ + + /* Get and Fold */ + function GetValueDefault(w: W, default: T): T { + match w + case None => default + case Some(v) => v + } + + function GetValue(w: W): T + requires w.Some? + { + w.value + } + + function Fold(u: U, f: T -> U): W -> U { + (w: W) => + match w + case None => u + case Some(v) => f(v) + } + + /* Conversion to other types */ + // function ToResult(e: E): Option -> Result { + // (o: Option) => + // match o + // case Some(v) => Success(v) + // case None => Failure(e) + // } + + function ToSeq(w: W): seq { + match w + case None => [] + case Some(v) => [v] + } + + function ToSet(w: W): set { + match w + case None => {} + case Some(v) => {v} + } + + /* Comparison */ + function Compare(cmp: (T, T) -> int): (W, W) -> int { + (w1: W, w2: W) => + match (w1, w2) + case (Some(v1), Some(v2)) => cmp(v1, v2) + case (None, None) => 0 + case (None, Some(_)) => -1 + case (Some(_), None) => 1 + } + +} + +module {:options "-functionSyntax:4"} Writer refines Monad { + + /********************************************************** + * + * Monad + * + ***********************************************************/ + + /* Monad structure */ + datatype W = Result(value: T, log: string) + + function Map(f: S -> T): W -> W { + (w: W) => W.Result(f(w.value), w.log) + } + + function Equal(eq: (T, T) -> bool): (W, W) -> bool { + (w1: W, w2: W) => eq(w1.value, w2.value) && w1.log == w2.log + } + + function Return(x: T): W { + Result(x, "") + } + + function Join(ww: W>): W { + Result((ww.value).value, (ww.value).log + ww.log) + } + + /* Functoriality of Map */ + lemma LemmaMapFunction(eq: (T, T) -> bool, f: S -> T, g: S -> T) {} + + lemma LemmaMapFunctorial(f: S -> T, g: T -> U, w: W) {} + + lemma LemmaMapIdentity(id: T -> T) {} + + /* Naturality of Return and Join */ + lemma LemmaReturnNaturality(f: S -> T, x: S) {} + + lemma LemmaJoinNaturality(f: S -> T, ww: W>) {} + + /* Monad laws */ + lemma LemmaUnitalityJoin(w: W) {} + + lemma LemmaAssociativityJoin(www: W>>) {} + + /********************************************************** + * + * Wrapper + * + ***********************************************************/ + + /* Get and Set */ + function GetValue(w: W): T { + w.value + } + + function GetLog(w: W): string { + w.log + } + + function Result(v: T, s: string): W { + W.Result(v, s) + } +} + +abstract module {:options "-functionSyntax:4"} Reader refines Monad { + + /********************************************************** + * + * Monad + * + ***********************************************************/ + + type A(!new) + + datatype W = Reader(f: A -> T) + + function Map(f: S -> T): W -> W { + (w: W) => Reader(a => f((w.f)(a))) + } + + ghost function Equal(eq: (T, T) -> bool): (W, W) -> bool { + (w1: W, w2: W) => + forall a: A :: eq(w1.f(a), w2.f(a)) + } + + function Return(x: T): W { + Reader(a => x) + } + + function Join(ww: W>): W{ + Reader(a => (ww.f(a)).f(a)) + } + + /* Functoriality of Map */ + lemma LemmaMapFunction(eq: (T, T) -> bool, f: S -> T, g: S -> T) {} + + lemma LemmaMapFunctorial(f: S -> T, g: T -> U, w: W) {} + + lemma LemmaMapIdentity(id: T -> T) {} + + /* Naturality of Return and Join */ + lemma LemmaReturnNaturality(f: S -> T, x: S) {} + + lemma LemmaJoinNaturality(f: S -> T, ww: W>) {} + + /* Monad laws */ + lemma LemmaUnitalityJoin(w: W) {} + + lemma LemmaAssociativityJoin(www: W>>) {} + +} + diff --git a/src/Wrappers.dll b/src/Wrappers.dll new file mode 100644 index 0000000000000000000000000000000000000000..b1ab301ce43e9872b7d6147b1050af89b1f01a9b GIT binary patch literal 154624 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

(?85JyiZNe17%)cgXsFDR6$% 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 v!Ns|9+4eIfA<0hejeo>`n%@hcVZmp+T-^SO = Result(value: T, log: string) - - function GetValue(w: Writer): T { - w.value - } + /********************************************************** + * + * Monadic structure in terms of Return, Bind, Join, Map, Composition + * + ***********************************************************/ - function GetLog(w: Writer): string { - w.log - } + datatype Writer = Result(value: T, log: string) function Return(v: T): Writer { Result(v, "") } + function Bind(w: Writer, f: S -> Writer): Writer { + Writer.Result(f(w.value).value, w.log + f(w.value).log) + } + function Join(ww: Writer>): Writer { Result((ww.value).value, (ww.value).log + ww.log) } @@ -22,14 +24,34 @@ module {:options "-functionSyntax:4"} Writer { (w: Writer) => Writer.Result(f(w.value), w.log) } - function Bind(w: Writer, f: S -> Writer): Writer { - Writer.Result(f(w.value).value, w.log + f(w.value).log) - } - function Composition(f: S -> Writer, g: T -> Writer): S -> Writer { s => Bind(f(s), g) } + /********************************************************** + * + * Get and set + * + ***********************************************************/ + + function GetValue(w: Writer): T { + w.value + } + + function GetLog(w: Writer): string { + w.log + } + + function Result(v: T, s: string): Writer { + Writer.Result(v, s) + } + + /********************************************************** + * + * Monad laws in terms of Join and Map + * + ***********************************************************/ + lemma LemmaUnitalityJoin(w: Writer) ensures Join(Map(Return)(w)) == w == Join(Return>(w)) { @@ -40,6 +62,12 @@ module {:options "-functionSyntax:4"} Writer { { } + /********************************************************** + * + * Monad laws in terms of Bind and Return + * + ***********************************************************/ + lemma LemmaLeftUnitalityBind(v: S, f: S -> Writer) ensures Bind(Return(v), f) == f(v) { @@ -55,6 +83,12 @@ module {:options "-functionSyntax:4"} Writer { { } + /********************************************************** + * + * Monad laws in terms of (Kleisli) Composition and Return + * + ***********************************************************/ + lemma LemmaAssociativityComposition(f: S -> Writer, g: T -> Writer, h: U -> Writer) ensures forall s: S :: Composition(Composition(f, g), h)(s) == Composition(f, Composition(g, h))(s) { From 7c3f145168fc7abce4c07b7893c90eb2096c99d8 Mon Sep 17 00:00:00 2001 From: stefan-aws Date: Thu, 2 Feb 2023 20:09:55 +0000 Subject: [PATCH 20/33] equality --- src/Relations.dfy | 6 ++ src/Wrappers.dfy | 185 +++++++++++++++++++++++----------------------- 2 files changed, 99 insertions(+), 92 deletions(-) diff --git a/src/Relations.dfy b/src/Relations.dfy index ac25532f..9135426f 100644 --- a/src/Relations.dfy +++ b/src/Relations.dfy @@ -45,6 +45,12 @@ module {:options "-functionSyntax:4"} Relations { && Connected(R) } + ghost predicate EquivalenceRelation(R: (T, T) -> bool) { + && Reflexive(R) + && AntiSymmetric(R) + && Transitive(R) + } + ghost predicate SortedBy(a: seq, lessThan: (T, T) -> bool) { forall i, j | 0 <= i < j < |a| :: lessThan(a[i], a[j]) } diff --git a/src/Wrappers.dfy b/src/Wrappers.dfy index 6f82e4c2..31c94795 100644 --- a/src/Wrappers.dfy +++ b/src/Wrappers.dfy @@ -5,11 +5,13 @@ * SPDX-License-Identifier: MIT *******************************************************************************/ -include "functions.dfy" +include "Functions.dfy" +include "Relations.dfy" abstract module {:options "-functionSyntax:4"} Functor { import opened Functions + import opened Relations /********************************************************** * @@ -18,31 +20,28 @@ abstract module {:options "-functionSyntax:4"} Functor { ***********************************************************/ /* Functor structure */ - type W(!new) + type W(!new) function Map(f: S -> T): W -> W - function Equal(eq: (T, T) -> bool): (eq': (W, W) -> bool) - requires - && forall x: T :: eq(x, x) - && forall x, y, z: T :: eq(x, y) && eq(y, z) ==> eq(x, z) - && forall x, y: T :: eq(x, y) ==> eq(y, x) - ensures - && forall w: W :: eq'(w, w) - && forall u, v, w: W :: eq'(u, v) && eq'(v, w) ==> eq'(u, w) - && forall v, w: W :: eq'(u, v) ==> eq'(v, w) + ghost function Equal(eq: (T, T) -> bool): (eq': (W, W) -> bool) + requires EquivalenceRelation(eq) + ensures EquivalenceRelation(eq') /* Functoriality of Map */ lemma LemmaMapFunction(eq: (T, T) -> bool, f: S -> T, g: S -> T) + requires EquivalenceRelation(eq) requires forall x: S :: eq(f(x), g(x)) ensures forall w: W :: Equal(eq)(Map(f)(w), Map(g)(w)) - lemma LemmaMapFunctorial(f: S -> T, g: T -> U, w: W) - ensures Map(Composition(f, g))(w) == Composition(Map(f), Map(g))(w) + lemma LemmaMapFunctorial(eq: (U, U) -> bool, f: S -> T, g: T -> U, w: W) + requires EquivalenceRelation(eq) + ensures Equal(eq)(Map(Composition(f, g))(w), Composition(Map(f), Map(g))(w)) - lemma LemmaMapIdentity(id: T -> T) - requires forall x: T :: id(x) == x - ensures forall w: W :: Map(id)(w) == w + lemma LemmaMapIdentity(eq: (T, T) -> bool, id: T -> T) + requires EquivalenceRelation(eq) + requires forall x: T :: eq(id(x), x) + ensures forall w: W :: Equal(eq)(Map(id)(w), w) } @@ -55,25 +54,29 @@ abstract module {:options "-functionSyntax:4"} Monad refines Functor { ***********************************************************/ /* Monad structure */ - type W + type W(!new) function Return(x: T): W function Join(ww: W>): W /* Naturality of Return and Join */ - lemma LemmaReturnNaturality(eq: (W, W) -> bool, f: S -> T, x: S) - ensures eq(Map(f)(Return(x)), Return(f(x))) + lemma LemmaReturnNaturality(eq: (T, T) -> bool, f: S -> T, x: S) + requires EquivalenceRelation(eq) + ensures Equal(eq)(Map(f)(Return(x)), Return(f(x))) - lemma LemmaJoinNaturality(eq: (W, W) -> bool, f: S -> T, ww: W>) - ensures eq(Join(Map(Map(f))(ww)), Map(f)(Join(ww))) + lemma LemmaJoinNaturality(eq: (T, T) -> bool, f: S -> T, ww: W>) + requires EquivalenceRelation(eq) + ensures Equal(eq)(Join(Map(Map(f))(ww)), Map(f)(Join(ww))) /* Monad laws */ - lemma LemmaUnitalityJoin(eq: (W, W) -> bool, w: W) - ensures eq(Join(Map(Return)(w)), w) && eq(w, Join(Return(w))) + lemma LemmaUnitalityJoin(eq: (T, T) -> bool, w: W) + requires EquivalenceRelation(eq) + ensures Equal(eq)(Join(Map(Return)(w)), w) && Equal(eq)(w, Join(Return(w))) - lemma LemmaAssociativityJoin(eq: (W, W) -> bool, www: W>>) - ensures eq(Join(Map(Join)(www)), Join(Join(www))) + lemma LemmaAssociativityJoin(eq: (T, T) -> bool, www: W>>) + requires EquivalenceRelation(eq) + ensures Equal(eq)(Join(Map(Join)(www)), Join(Join(www))) /********************************************************** * @@ -91,43 +94,24 @@ abstract module {:options "-functionSyntax:4"} Monad refines Functor { } /* Derived lemmas */ - lemma LemmaLeftUnitalityBind(eq: (W, W) -> bool, x: S, f: S -> W) - ensures eq(Bind(Return(x), f), f(x)) - { - assert Equal(eq)(Map(f)(Return(x)), Return(f(x))) by { LemmaReturnNaturality>(Equal(eq), f, x); } - assert eq(Join(Map(Return)(f(x))), f(x)) && eq(f(x), Join(Return(f(x)))) by { LemmaUnitalityJoin(eq, f(x)); } - - // assert Equal(eq)(Map(f)(Return(x)), Return(f(x))) by { LemmaReturnNaturality(eq, f, x); } - - - // calc { - - // Equal(eq)(Bind(Return(x), f), f(x)); - // <==> // Definition of Bind - // Equal(eq)(Join(Map(f)(Return(x))), f(x)); - // <==> { LemmaReturnNaturality(eq, f, x); assert Equal(eq)(Map(f)(Return(x)), Return(f(x))); } - // Equal(eq)(Join(Return(f(x))), f(x)); - // <== { LemmaUnitalityJoin(eq, f(x)); } - // f(x); - // } - - } - - lemma LemmaRightUnitalityBind(w: W) + lemma LemmaLeftUnitalityBind(eq: (T, T) -> bool, x: S, f: S -> W) + requires EquivalenceRelation(eq) + ensures Equal(eq)(Bind(Return(x), f), f(x)) +/* { + LemmaReturnNaturality(Equal(eq), f, x); + LemmaUnitalityJoin(eq, f(x)); + } */ + + lemma LemmaRightUnitalityBind(eq: (T, T) -> bool, w: W) + requires EquivalenceRelation(eq) ensures Bind(w, Return) == w - { - calc { - Bind(w, Return); - == // Definition of Bind - Join(Map(Return)(w)); - == { LemmaUnitalityJoin(w); } - w; - } - } +/* { + LemmaUnitalityJoin(eq, w); + } */ lemma LemmaAssociativityBind(w: W, f: S -> W, g: T -> W) ensures Bind(Bind(w, f), g) == Bind(w, KleisliComp(f, g)) - { +/* { calc { Bind(Bind(w, f), g); == // Definition of Bind @@ -147,11 +131,11 @@ abstract module {:options "-functionSyntax:4"} Monad refines Functor { == // Definition of Bind, KleisliComp Bind(w, KleisliComp(f, g)); } - } + } */ lemma LemmaAssociativityComposition(f: S -> W, g: T -> W, h: U -> W, x: S) ensures KleisliComp(KleisliComp(f, g), h)(x) == KleisliComp(f, KleisliComp(g, h))(x) - { +/* { calc { KleisliComp(KleisliComp(f, g), h)(x); == // Definition of KleisliComp @@ -171,11 +155,12 @@ abstract module {:options "-functionSyntax:4"} Monad refines Functor { == // Definition of KleisliComp KleisliComp(f, KleisliComp(g, h))(x); } - } + } */ - lemma LemmaIdentityReturn(f: S -> W, x: S) - ensures KleisliComp(f, Return)(x) == f(x) == KleisliComp(Return, f)(x) - { + lemma LemmaIdentityReturn(eq: (T, T) -> bool, f: S -> W, x: S) + requires EquivalenceRelation(eq) + ensures Equal(eq)(KleisliComp(f, Return)(x), f(x)) && Equal(eq)(f(x), KleisliComp(Return, f)(x)) +/* { calc { KleisliComp(f, Return)(x); == // Definition of Composition @@ -192,7 +177,7 @@ abstract module {:options "-functionSyntax:4"} Monad refines Functor { == // Definition of Composition KleisliComp(Return, f)(x); } - } + } */ } abstract module {:options "-functionSyntax:4"} Result refines Monad { @@ -207,6 +192,9 @@ abstract module {:options "-functionSyntax:4"} Result refines Monad { function eqe(e1: E, e2: E): bool + lemma {:axiom} LemmaEquivRel() + ensures EquivalenceRelation(eqe) + /* Monad structure */ datatype W = Success(value: T) | Failure(error: E) @@ -218,7 +206,10 @@ abstract module {:options "-functionSyntax:4"} Result refines Monad { case Failure(e) => W.Failure(e) } - function Equal(eq: (T, T) -> bool): (W, W) -> bool { + + + ghost function Equal(eq: (T, T) -> bool): (W, W) -> bool + { (w1: W, w2: W) => match (w1, w2) case (Success(v1), Success(v2)) => eq(v1, v2) @@ -226,6 +217,16 @@ abstract module {:options "-functionSyntax:4"} Result refines Monad { case _ => false } + lemma LemmaEquivRelLift(eq: (T, T) -> bool) + requires EquivalenceRelation(eq) + ensures EquivalenceRelation(Equal(eq)) + { + assert Reflexive(Equal(eq)) by { + + } + } + + function Return(x: T): W { Success(x) } @@ -239,19 +240,19 @@ abstract module {:options "-functionSyntax:4"} Result refines Monad { /* Functoriality of Map */ lemma LemmaMapFunction(eq: (T, T) -> bool, f: S -> T, g: S -> T) {} - lemma LemmaMapFunctorial(f: S -> T, g: T -> U, w: W) {} + lemma LemmaMapFunctorial(eq: (U, U) -> bool, f: S -> T, g: T -> U, w: W) {} - lemma LemmaMapIdentity(id: T -> T) {} + lemma LemmaMapIdentity(eq: (T, T) -> bool, id: T -> T) {} /* Naturality of Return and Join */ - lemma LemmaReturnNaturality(f: S -> T, x: S) {} + lemma LemmaReturnNaturality(eq: (T, T) -> bool, f: S -> T, x: S) {} - lemma LemmaJoinNaturality(f: S -> T, ww: W>) {} + lemma LemmaJoinNaturality(eq: (T, T) -> bool, f: S -> T, ww: W>) {} /* Monad laws */ - lemma LemmaUnitalityJoin(w: W) {} + lemma LemmaUnitalityJoin(eq: (T, T) -> bool, w: W) {} - lemma LemmaAssociativityJoin(www: W>>) {} + lemma LemmaAssociativityJoin(eq: (T, T) -> bool, www: W>>) {} /********************************************************** * @@ -338,7 +339,7 @@ module {:options "-functionSyntax:4"} Option refines Monad { case Some(v) => W.Some(f(v)) } - function Equal(eq: (T, T) -> bool): (W, W) -> bool { + ghost function Equal(eq: (T, T) -> bool): (W, W) -> bool { (w1: W, w2: W) => match (w1, w2) case (Some(v1), Some(v2)) => eq(v1, v2) @@ -359,19 +360,19 @@ module {:options "-functionSyntax:4"} Option refines Monad { /* Functoriality of Map */ lemma LemmaMapFunction(eq: (T, T) -> bool, f: S -> T, g: S -> T) {} - lemma LemmaMapFunctorial(f: S -> T, g: T -> U, w: W) {} + lemma LemmaMapFunctorial(eq: (U, U) -> bool, f: S -> T, g: T -> U, w: W) {} - lemma LemmaMapIdentity(id: T -> T) {} + lemma LemmaMapIdentity(eq: (T, T) -> bool, id: T -> T) {} /* Naturality of Return and Join */ - lemma LemmaReturnNaturality(f: S -> T, x: S) {} + lemma LemmaReturnNaturality(eq: (T, T) -> bool, f: S -> T, x: S) {} - lemma LemmaJoinNaturality(f: S -> T, ww: W>) {} + lemma LemmaJoinNaturality(eq: (T, T) -> bool, f: S -> T, ww: W>) {} /* Monad laws */ - lemma LemmaUnitalityJoin(w: W) {} + lemma LemmaUnitalityJoin(eq: (T, T) -> bool, w: W) {} - lemma LemmaAssociativityJoin(www: W>>) {} + lemma LemmaAssociativityJoin(eq: (T, T) -> bool, www: W>>) {} /********************************************************** * @@ -446,7 +447,7 @@ module {:options "-functionSyntax:4"} Writer refines Monad { (w: W) => W.Result(f(w.value), w.log) } - function Equal(eq: (T, T) -> bool): (W, W) -> bool { + ghost function Equal(eq: (T, T) -> bool): (W, W) -> bool { (w1: W, w2: W) => eq(w1.value, w2.value) && w1.log == w2.log } @@ -461,19 +462,19 @@ module {:options "-functionSyntax:4"} Writer refines Monad { /* Functoriality of Map */ lemma LemmaMapFunction(eq: (T, T) -> bool, f: S -> T, g: S -> T) {} - lemma LemmaMapFunctorial(f: S -> T, g: T -> U, w: W) {} + lemma LemmaMapFunctorial(eq: (U, U) -> bool, f: S -> T, g: T -> U, w: W) {} - lemma LemmaMapIdentity(id: T -> T) {} + lemma LemmaMapIdentity(eq: (T, T) -> bool, id: T -> T) {} /* Naturality of Return and Join */ - lemma LemmaReturnNaturality(f: S -> T, x: S) {} + lemma LemmaReturnNaturality(eq: (T, T) -> bool, f: S -> T, x: S) {} - lemma LemmaJoinNaturality(f: S -> T, ww: W>) {} + lemma LemmaJoinNaturality(eq: (T, T) -> bool, f: S -> T, ww: W>) {} /* Monad laws */ - lemma LemmaUnitalityJoin(w: W) {} + lemma LemmaUnitalityJoin(eq: (T, T) -> bool, w: W) {} - lemma LemmaAssociativityJoin(www: W>>) {} + lemma LemmaAssociativityJoin(eq: (T, T) -> bool, www: W>>) {} /********************************************************** * @@ -527,19 +528,19 @@ abstract module {:options "-functionSyntax:4"} Reader refines Monad { /* Functoriality of Map */ lemma LemmaMapFunction(eq: (T, T) -> bool, f: S -> T, g: S -> T) {} - lemma LemmaMapFunctorial(f: S -> T, g: T -> U, w: W) {} + lemma LemmaMapFunctorial(eq: (U, U) -> bool, f: S -> T, g: T -> U, w: W) {} - lemma LemmaMapIdentity(id: T -> T) {} + lemma LemmaMapIdentity(eq: (T, T) -> bool, id: T -> T) {} /* Naturality of Return and Join */ - lemma LemmaReturnNaturality(f: S -> T, x: S) {} + lemma LemmaReturnNaturality(eq: (T, T) -> bool, f: S -> T, x: S) {} - lemma LemmaJoinNaturality(f: S -> T, ww: W>) {} + lemma LemmaJoinNaturality(eq: (T, T) -> bool, f: S -> T, ww: W>) {} /* Monad laws */ - lemma LemmaUnitalityJoin(w: W) {} + lemma LemmaUnitalityJoin(eq: (T, T) -> bool, w: W) {} - lemma LemmaAssociativityJoin(www: W>>) {} + lemma LemmaAssociativityJoin(eq: (T, T) -> bool, www: W>>) {} } From 073683fd1fcae4ad0f5a37252fe2ca6ea0003814 Mon Sep 17 00:00:00 2001 From: stefan-aws Date: Thu, 2 Feb 2023 21:22:09 +0000 Subject: [PATCH 21/33] proof --- src/Wrappers.dfy | 188 +++++++++++++++++++++++++---------------------- 1 file changed, 99 insertions(+), 89 deletions(-) diff --git a/src/Wrappers.dfy b/src/Wrappers.dfy index 31c94795..c06dc9d8 100644 --- a/src/Wrappers.dfy +++ b/src/Wrappers.dfy @@ -15,18 +15,21 @@ abstract module {:options "-functionSyntax:4"} Functor { /********************************************************** * - * Assumed structure + * Functor structure * ***********************************************************/ /* Functor structure */ - type W(!new) + type W - function Map(f: S -> T): W -> W + function Map(f: S -> T): W -> W - ghost function Equal(eq: (T, T) -> bool): (eq': (W, W) -> bool) + ghost function Equal(eq: (T, T) -> bool): (W, W) -> bool requires EquivalenceRelation(eq) - ensures EquivalenceRelation(eq') + + lemma LemmaEquivRelLift(eq: (T, T) -> bool) + requires EquivalenceRelation(eq) + ensures EquivalenceRelation(Equal(eq)) /* Functoriality of Map */ lemma LemmaMapFunction(eq: (T, T) -> bool, f: S -> T, g: S -> T) @@ -34,11 +37,11 @@ abstract module {:options "-functionSyntax:4"} Functor { requires forall x: S :: eq(f(x), g(x)) ensures forall w: W :: Equal(eq)(Map(f)(w), Map(g)(w)) - lemma LemmaMapFunctorial(eq: (U, U) -> bool, f: S -> T, g: T -> U, w: W) + lemma LemmaMapFunctorial(eq: (U, U) -> bool, f: S -> T, g: T -> U, w: W) requires EquivalenceRelation(eq) ensures Equal(eq)(Map(Composition(f, g))(w), Composition(Map(f), Map(g))(w)) - lemma LemmaMapIdentity(eq: (T, T) -> bool, id: T -> T) + lemma LemmaMapIdentity(eq: (T, T) -> bool, id: T -> T) requires EquivalenceRelation(eq) requires forall x: T :: eq(id(x), x) ensures forall w: W :: Equal(eq)(Map(id)(w), w) @@ -49,32 +52,32 @@ abstract module {:options "-functionSyntax:4"} Monad refines Functor { /********************************************************** * - * Assumed structure + * Additional monad structure * ***********************************************************/ - /* Monad structure */ - type W(!new) + /* Monad basics */ + type W(!new) function Return(x: T): W - function Join(ww: W>): W + function Join(ww: W>): W /* Naturality of Return and Join */ lemma LemmaReturnNaturality(eq: (T, T) -> bool, f: S -> T, x: S) requires EquivalenceRelation(eq) ensures Equal(eq)(Map(f)(Return(x)), Return(f(x))) - lemma LemmaJoinNaturality(eq: (T, T) -> bool, f: S -> T, ww: W>) + lemma LemmaJoinNaturality(eq: (T, T) -> bool, f: S -> T, ww: W>) requires EquivalenceRelation(eq) ensures Equal(eq)(Join(Map(Map(f))(ww)), Map(f)(Join(ww))) /* Monad laws */ - lemma LemmaUnitalityJoin(eq: (T, T) -> bool, w: W) + lemma LemmaUnitalityJoin(eq: (T, T) -> bool, w: W) requires EquivalenceRelation(eq) ensures Equal(eq)(Join(Map(Return)(w)), w) && Equal(eq)(w, Join(Return(w))) - lemma LemmaAssociativityJoin(eq: (T, T) -> bool, www: W>>) + lemma LemmaAssociativityJoin(eq: (T, T) -> bool, www: W>>) requires EquivalenceRelation(eq) ensures Equal(eq)(Join(Map(Join)(www)), Join(Join(www))) @@ -85,16 +88,16 @@ abstract module {:options "-functionSyntax:4"} Monad refines Functor { ***********************************************************/ /* Derived functions */ - function Bind(w: W, f: S -> W): W { + function Bind(w: W, f: S -> W): W { Join(Map(f)(w)) } - function KleisliComp(f: S -> W, g: T -> W): S -> W { + function KleisliComp(f: S -> W, g: T -> W): S -> W { x => Join(Map(g)(f(x))) } /* Derived lemmas */ - lemma LemmaLeftUnitalityBind(eq: (T, T) -> bool, x: S, f: S -> W) + lemma LemmaLeftUnitalityBind(eq: (T, T) -> bool, x: S, f: S -> W) requires EquivalenceRelation(eq) ensures Equal(eq)(Bind(Return(x), f), f(x)) /* { @@ -102,14 +105,14 @@ abstract module {:options "-functionSyntax:4"} Monad refines Functor { LemmaUnitalityJoin(eq, f(x)); } */ - lemma LemmaRightUnitalityBind(eq: (T, T) -> bool, w: W) + lemma LemmaRightUnitalityBind(eq: (T, T) -> bool, w: W) requires EquivalenceRelation(eq) ensures Bind(w, Return) == w /* { LemmaUnitalityJoin(eq, w); } */ - lemma LemmaAssociativityBind(w: W, f: S -> W, g: T -> W) + lemma LemmaAssociativityBind(w: W, f: S -> W, g: T -> W) ensures Bind(Bind(w, f), g) == Bind(w, KleisliComp(f, g)) /* { calc { @@ -133,7 +136,7 @@ abstract module {:options "-functionSyntax:4"} Monad refines Functor { } } */ - lemma LemmaAssociativityComposition(f: S -> W, g: T -> W, h: U -> W, x: S) + lemma LemmaAssociativityComposition(f: S -> W, g: T -> W, h: U -> W, x: S) ensures KleisliComp(KleisliComp(f, g), h)(x) == KleisliComp(f, KleisliComp(g, h))(x) /* { calc { @@ -157,7 +160,7 @@ abstract module {:options "-functionSyntax:4"} Monad refines Functor { } } */ - lemma LemmaIdentityReturn(eq: (T, T) -> bool, f: S -> W, x: S) + lemma LemmaIdentityReturn(eq: (T, T) -> bool, f: S -> W, x: S) requires EquivalenceRelation(eq) ensures Equal(eq)(KleisliComp(f, Return)(x), f(x)) && Equal(eq)(f(x), KleisliComp(Return, f)(x)) /* { @@ -184,11 +187,11 @@ abstract module {:options "-functionSyntax:4"} Result refines Monad { /********************************************************** * - * Monad + * Proves monad refinement * ***********************************************************/ - type E + type E(!new) function eqe(e1: E, e2: E): bool @@ -197,41 +200,32 @@ abstract module {:options "-functionSyntax:4"} Result refines Monad { /* Monad structure */ - datatype W = Success(value: T) | Failure(error: E) + datatype W = Success(value: T) | Failure(error: E) - function Map(f: S -> T): W -> W { + function Map(f: S -> T): W -> W { (w: W) => match w case Success(v) => W.Success(f(v)) case Failure(e) => W.Failure(e) } - - - ghost function Equal(eq: (T, T) -> bool): (W, W) -> bool - { + ghost function Equal(eq: (T, T) -> bool): (W, W) -> bool + { (w1: W, w2: W) => match (w1, w2) - case (Success(v1), Success(v2)) => eq(v1, v2) + case (Success(v1), Success(v2)) => eq(v1, v2) case (Failure(e1), Failure(e2)) => eqe(e1, e2) case _ => false } lemma LemmaEquivRelLift(eq: (T, T) -> bool) - requires EquivalenceRelation(eq) ensures EquivalenceRelation(Equal(eq)) - { - assert Reflexive(Equal(eq)) by { - - } - } - function Return(x: T): W { Success(x) } - function Join(ww: W>): W { + function Join(ww: W>): W { match ww case Success(v) => v case Failure(e) => W.Failure(e) @@ -240,19 +234,25 @@ abstract module {:options "-functionSyntax:4"} Result refines Monad { /* Functoriality of Map */ lemma LemmaMapFunction(eq: (T, T) -> bool, f: S -> T, g: S -> T) {} - lemma LemmaMapFunctorial(eq: (U, U) -> bool, f: S -> T, g: T -> U, w: W) {} + lemma LemmaMapFunctorial(eq: (U, U) -> bool, f: S -> T, g: T -> U, w: W) {} - lemma LemmaMapIdentity(eq: (T, T) -> bool, id: T -> T) {} + lemma LemmaMapIdentity(eq: (T, T) -> bool, id: T -> T) { + forall w: W ensures Equal(eq)(Map(id)(w), w) { + match w + case Success(v) => + case Failure(e) => LemmaEquivRel(); + } + } /* Naturality of Return and Join */ lemma LemmaReturnNaturality(eq: (T, T) -> bool, f: S -> T, x: S) {} - lemma LemmaJoinNaturality(eq: (T, T) -> bool, f: S -> T, ww: W>) {} + lemma LemmaJoinNaturality(eq: (T, T) -> bool, f: S -> T, ww: W>) {} /* Monad laws */ - lemma LemmaUnitalityJoin(eq: (T, T) -> bool, w: W) {} + lemma LemmaUnitalityJoin(eq: (T, T) -> bool, w: W) {} - lemma LemmaAssociativityJoin(eq: (T, T) -> bool, www: W>>) {} + lemma LemmaAssociativityJoin(eq: (T, T) -> bool, www: W>>) {} /********************************************************** * @@ -265,34 +265,34 @@ abstract module {:options "-functionSyntax:4"} Result refines Monad { W.Failure(e) } - predicate IsSuccess(w: W) { + predicate IsSuccess(w: W) { w.Success? } - predicate IsFailure(w: W) { + predicate IsFailure(w: W) { w.Failure? } - function GetValue(w: W): T + function GetValue(w: W): T requires w.Success? { w.value } - function GetValueDefault(w: W, default: T): T { + function GetValueDefault(w: W, default: T): T { match w case Success(v) => v case Failure(_) => default } - function GetError(w: W): E + function GetError(w: W): E requires w.Failure? { w.error } /* Fold */ - function Fold(f: T -> U, g: E -> U): W -> U { + function Fold(f: T -> U, g: E -> U): W -> U { (w: W) => match w case Success(v) => f(v) @@ -300,13 +300,13 @@ abstract module {:options "-functionSyntax:4"} Result refines Monad { } /* Conversion to other types */ - function ToSeq(w: W): seq { + function ToSeq(w: W): seq { match w case Success(v) => [v] case Failure(_) => [] } - function ToSet(w: W): set { + function ToSet(w: W): set { match w case Success(v) => {v} case Failure(_) => {} @@ -324,14 +324,14 @@ module {:options "-functionSyntax:4"} Option refines Monad { /********************************************************** * - * Monad + * Proves monad refinement * ***********************************************************/ /* Monad structure */ - datatype W = None | Some(value: T) + datatype W = None | Some(value: T) - function Map(f: S -> T): W -> W + function Map(f: S -> T): W -> W { (w: W) => match w @@ -339,7 +339,7 @@ module {:options "-functionSyntax:4"} Option refines Monad { case Some(v) => W.Some(f(v)) } - ghost function Equal(eq: (T, T) -> bool): (W, W) -> bool { + ghost function Equal(eq: (T, T) -> bool): (W, W) -> bool { (w1: W, w2: W) => match (w1, w2) case (Some(v1), Some(v2)) => eq(v1, v2) @@ -347,11 +347,14 @@ module {:options "-functionSyntax:4"} Option refines Monad { case _ => false } + lemma LemmaEquivRelLift(eq: (T, T) -> bool) + ensures EquivalenceRelation(Equal(eq)) + function Return(x: T): W { Some(x) } - function Join(ww: W>): W { + function Join(ww: W>): W { match ww case None => None case Some(w) => w @@ -360,19 +363,19 @@ module {:options "-functionSyntax:4"} Option refines Monad { /* Functoriality of Map */ lemma LemmaMapFunction(eq: (T, T) -> bool, f: S -> T, g: S -> T) {} - lemma LemmaMapFunctorial(eq: (U, U) -> bool, f: S -> T, g: T -> U, w: W) {} + lemma LemmaMapFunctorial(eq: (U, U) -> bool, f: S -> T, g: T -> U, w: W) {} - lemma LemmaMapIdentity(eq: (T, T) -> bool, id: T -> T) {} + lemma LemmaMapIdentity(eq: (T, T) -> bool, id: T -> T) {} /* Naturality of Return and Join */ lemma LemmaReturnNaturality(eq: (T, T) -> bool, f: S -> T, x: S) {} - lemma LemmaJoinNaturality(eq: (T, T) -> bool, f: S -> T, ww: W>) {} + lemma LemmaJoinNaturality(eq: (T, T) -> bool, f: S -> T, ww: W>) {} /* Monad laws */ - lemma LemmaUnitalityJoin(eq: (T, T) -> bool, w: W) {} + lemma LemmaUnitalityJoin(eq: (T, T) -> bool, w: W) {} - lemma LemmaAssociativityJoin(eq: (T, T) -> bool, www: W>>) {} + lemma LemmaAssociativityJoin(eq: (T, T) -> bool, www: W>>) {} /********************************************************** * @@ -381,19 +384,19 @@ module {:options "-functionSyntax:4"} Option refines Monad { ***********************************************************/ /* Get and Fold */ - function GetValueDefault(w: W, default: T): T { + function GetValueDefault(w: W, default: T): T { match w case None => default case Some(v) => v } - function GetValue(w: W): T + function GetValue(w: W): T requires w.Some? { w.value } - function Fold(u: U, f: T -> U): W -> U { + function Fold(u: U, f: T -> U): W -> U { (w: W) => match w case None => u @@ -408,20 +411,20 @@ module {:options "-functionSyntax:4"} Option refines Monad { // case None => Failure(e) // } - function ToSeq(w: W): seq { + function ToSeq(w: W): seq { match w case None => [] case Some(v) => [v] } - function ToSet(w: W): set { + function ToSet(w: W): set { match w case None => {} case Some(v) => {v} } /* Comparison */ - function Compare(cmp: (T, T) -> int): (W, W) -> int { + function Compare(cmp: (T, T) -> int): (W, W) -> int { (w1: W, w2: W) => match (w1, w2) case (Some(v1), Some(v2)) => cmp(v1, v2) @@ -436,45 +439,48 @@ module {:options "-functionSyntax:4"} Writer refines Monad { /********************************************************** * - * Monad + * Proves monad refinement * ***********************************************************/ /* Monad structure */ - datatype W = Result(value: T, log: string) + datatype W = Result(value: T, log: string) - function Map(f: S -> T): W -> W { + function Map(f: S -> T): W -> W { (w: W) => W.Result(f(w.value), w.log) } - ghost function Equal(eq: (T, T) -> bool): (W, W) -> bool { + ghost function Equal(eq: (T, T) -> bool): (W, W) -> bool { (w1: W, w2: W) => eq(w1.value, w2.value) && w1.log == w2.log } + lemma LemmaEquivRelLift(eq: (T, T) -> bool) + ensures EquivalenceRelation(Equal(eq)) + function Return(x: T): W { Result(x, "") } - function Join(ww: W>): W { + function Join(ww: W>): W { Result((ww.value).value, (ww.value).log + ww.log) } /* Functoriality of Map */ lemma LemmaMapFunction(eq: (T, T) -> bool, f: S -> T, g: S -> T) {} - lemma LemmaMapFunctorial(eq: (U, U) -> bool, f: S -> T, g: T -> U, w: W) {} + lemma LemmaMapFunctorial(eq: (U, U) -> bool, f: S -> T, g: T -> U, w: W) {} - lemma LemmaMapIdentity(eq: (T, T) -> bool, id: T -> T) {} + lemma LemmaMapIdentity(eq: (T, T) -> bool, id: T -> T) {} /* Naturality of Return and Join */ lemma LemmaReturnNaturality(eq: (T, T) -> bool, f: S -> T, x: S) {} - lemma LemmaJoinNaturality(eq: (T, T) -> bool, f: S -> T, ww: W>) {} + lemma LemmaJoinNaturality(eq: (T, T) -> bool, f: S -> T, ww: W>) {} /* Monad laws */ - lemma LemmaUnitalityJoin(eq: (T, T) -> bool, w: W) {} + lemma LemmaUnitalityJoin(eq: (T, T) -> bool, w: W) {} - lemma LemmaAssociativityJoin(eq: (T, T) -> bool, www: W>>) {} + lemma LemmaAssociativityJoin(eq: (T, T) -> bool, www: W>>) {} /********************************************************** * @@ -483,11 +489,11 @@ module {:options "-functionSyntax:4"} Writer refines Monad { ***********************************************************/ /* Get and Set */ - function GetValue(w: W): T { + function GetValue(w: W): T { w.value } - function GetLog(w: W): string { + function GetLog(w: W): string { w.log } @@ -506,41 +512,45 @@ abstract module {:options "-functionSyntax:4"} Reader refines Monad { type A(!new) - datatype W = Reader(f: A -> T) + datatype W = Reader(f: A -> T) - function Map(f: S -> T): W -> W { + function Map(f: S -> T): W -> W { (w: W) => Reader(a => f((w.f)(a))) } - - ghost function Equal(eq: (T, T) -> bool): (W, W) -> bool { + + ghost function Equal(eq: (T, T) -> bool): (W, W) -> bool + { (w1: W, w2: W) => forall a: A :: eq(w1.f(a), w2.f(a)) } + lemma LemmaEquivRelLift(eq: (T, T) -> bool) + ensures EquivalenceRelation(Equal(eq)) + function Return(x: T): W { Reader(a => x) } - function Join(ww: W>): W{ + function Join(ww: W>): W{ Reader(a => (ww.f(a)).f(a)) } /* Functoriality of Map */ lemma LemmaMapFunction(eq: (T, T) -> bool, f: S -> T, g: S -> T) {} - lemma LemmaMapFunctorial(eq: (U, U) -> bool, f: S -> T, g: T -> U, w: W) {} + lemma LemmaMapFunctorial(eq: (U, U) -> bool, f: S -> T, g: T -> U, w: W) {} - lemma LemmaMapIdentity(eq: (T, T) -> bool, id: T -> T) {} + lemma LemmaMapIdentity(eq: (T, T) -> bool, id: T -> T) {} /* Naturality of Return and Join */ lemma LemmaReturnNaturality(eq: (T, T) -> bool, f: S -> T, x: S) {} - lemma LemmaJoinNaturality(eq: (T, T) -> bool, f: S -> T, ww: W>) {} + lemma LemmaJoinNaturality(eq: (T, T) -> bool, f: S -> T, ww: W>) {} /* Monad laws */ - lemma LemmaUnitalityJoin(eq: (T, T) -> bool, w: W) {} + lemma LemmaUnitalityJoin(eq: (T, T) -> bool, w: W) {} - lemma LemmaAssociativityJoin(eq: (T, T) -> bool, www: W>>) {} + lemma LemmaAssociativityJoin(eq: (T, T) -> bool, www: W>>) {} } From d8b0a2547af0b56d66294935a9538ac065da29f2 Mon Sep 17 00:00:00 2001 From: stefan-aws Date: Fri, 3 Feb 2023 16:37:34 +0000 Subject: [PATCH 22/33] structure --- .DS_Store | Bin 8196 -> 8196 bytes src/Comonad.dfy | 166 ++++++++ src/Coreader.dfy | 62 --- src/Cowrappers.dfy | 52 +++ src/Cowrappers.dll | Bin 0 -> 140800 bytes src/Cowrappers.runtimeconfig.json | 10 + src/Either.dfy | 120 ------ src/Functor.dfy | 42 ++ src/Functor.dll | Bin 0 -> 136704 bytes src/Functor.runtimeconfig.json | 10 + src/Monad.dfy | 435 +++++++++++++++++++ src/Monad.dll | Bin 0 -> 235008 bytes src/Monad.runtimeconfig.json | 10 + src/Reader.dfy | 98 ----- src/Relations.dfy | 6 +- src/Result.dfy | 204 --------- src/Wrappers.dfy | 684 +++++++++++------------------- src/Wrappers.dll | Bin 154624 -> 202240 bytes src/Writer.dfy | 101 ----- 19 files changed, 984 insertions(+), 1016 deletions(-) create mode 100644 src/Comonad.dfy delete mode 100644 src/Coreader.dfy create mode 100644 src/Cowrappers.dfy create mode 100644 src/Cowrappers.dll create mode 100644 src/Cowrappers.runtimeconfig.json delete mode 100644 src/Either.dfy create mode 100644 src/Functor.dfy create mode 100644 src/Functor.dll create mode 100644 src/Functor.runtimeconfig.json create mode 100644 src/Monad.dfy create mode 100644 src/Monad.dll create mode 100644 src/Monad.runtimeconfig.json delete mode 100644 src/Reader.dfy delete mode 100644 src/Result.dfy delete mode 100644 src/Writer.dfy diff --git a/.DS_Store b/.DS_Store index f8de3e84e630e08a3d1d98381967a686ffef9ec3..6e68ebe8ddfe7bde42ab96595c4798ff8db1ae63 100644 GIT binary patch delta 67 zcmV-J0KET%K!iY$VFS2gaItZg2a$jcvj+$o2m!d0A`o#47<+p$GcYV5H8MGqpAZ`X Zij%t#9|4QA+Yl@Vvj!OV1hf7W2Ltqw6|DdO delta 68 zcmV-K0K5N$K!iY$VFS5haItZg2a$jcvj+$o2m!g1A`o#58GCyzH#00CF*!0alb#S8 a0gIEm5FY`Iv)T|W2eStl_5`#16bAza@fF_y diff --git a/src/Comonad.dfy b/src/Comonad.dfy new file mode 100644 index 00000000..50967947 --- /dev/null +++ b/src/Comonad.dfy @@ -0,0 +1,166 @@ +include "Functor.dfy" +include "Cowrappers.dfy" + +abstract module {:options "-functionSyntax:4"} Comonad refines Functor { + /* Structure */ + type W(!new) + + function Extract(w: W): T + + function Duplicate(w: W): W> + + /* Naturality of Extract and Duplicate */ + lemma LemmaExtractNaturality(eq: (T, T) -> bool, f: S -> T, w: W) + requires EquivalenceRelation(eq) + ensures eq(f(Extract(w)), Extract(Map(f)(w))) + + lemma LemmaDuplicateNaturality(eq: (T, T) -> bool, f: S -> T, w: W) + requires EquivalenceRelation(eq) + ensures EquivalenceRelation(Equal(eq)) + ensures Equal(Equal(eq))(Duplicate(Map(f)(w)), Map(Map(f))(Duplicate(w))) + + /* Comonad laws */ + lemma LemmaCoUnitalityExtract(eq: (T, T) -> bool, w: W) + requires EquivalenceRelation(eq) + ensures && Equal(eq)(Map(Extract)(Duplicate(w)), w) + && Equal(eq)(w, Extract(Duplicate(w))) + + lemma LemmaCoAssociativityDuplicate(eq: (T, T) -> bool, w: W) + requires && EquivalenceRelation(eq) + && EquivalenceRelation(Equal(eq)) + && EquivalenceRelation(Equal(Equal(eq))) + ensures Equal(Equal(Equal(eq)))(Map(Duplicate)(Duplicate(w)), Duplicate(Duplicate(w))) +} + +abstract module {:options "-functionSyntax:4"} CoreaderRightComonad refines Comonad { + import Coreader + + type X(!new) + + function eql(x: X, y: X): bool + + lemma LemmaEquiv() + ensures EquivalenceRelation(eql) + + /* Functor structure */ + type W(!new) = Coreader.Coreader + + function Map(f: S -> T): W -> W { + Coreader.MapRight(f) + } + + ghost function Equal(eq: (T, T) -> bool): (W, W) -> bool { + Coreader.Equal(eql, eq) + } + + /* Properties of Equal */ + lemma LemmaEquivRelLift(eq: (T, T) -> bool) { + LemmaEquiv(); + } + + /* Properties of Map */ + lemma LemmaMapFunction(eq: (T, T) -> bool, f: S -> T, g: S -> T) { + LemmaEquiv(); + } + + lemma LemmaMapFunctorial(eq: (U, U) -> bool, f: S -> T, g: T -> U, w: W) { + LemmaEquiv(); + } + + lemma LemmaMapIdentity(eq: (T, T) -> bool, id: T -> T) { + LemmaEquiv(); + } + + /* Comonad structure */ + function Extract(w: W): T { + Coreader.ExtractRight(w) + } + + function Duplicate(w: W): W> { + Coreader.DuplicateLeft(w) + } + + /* Naturality of Extract and Duplicate */ + lemma LemmaExtractNaturality(eq: (T, T) -> bool, f: S -> T, w: W) { + } + + lemma LemmaDuplicateNaturality(eq: (T, T) -> bool, f: S -> T, w: W) { + LemmaEquiv(); + } + + /* Comonad laws */ + lemma LemmaCoUnitalityExtract(eq: (T, T) -> bool, w: W) { + LemmaEquiv(); + } + + lemma LemmaCoAssociativityDuplicate(eq: (T, T) -> bool, w: W) { + LemmaEquiv(); + } +} + +abstract module {:options "-functionSyntax:4"} CoreaderLeftComonad refines Comonad { + import Coreader + + type X(!new) + + function eqr(x: X, y: X): bool + + lemma LemmaEquiv() + ensures EquivalenceRelation(eqr) + + /* Functor structure */ + type W(!new) = Coreader.Coreader + + function Map(f: S -> T): W -> W { + Coreader.MapLeft(f) + } + + ghost function Equal(eq: (T, T) -> bool): (W, W) -> bool { + Coreader.Equal(eq, eqr) + } + + /* Properties of Equal */ + lemma LemmaEquivRelLift(eq: (T, T) -> bool) { + LemmaEquiv(); + } + + /* Properties of Map */ + lemma LemmaMapFunction(eq: (T, T) -> bool, f: S -> T, g: S -> T) { + LemmaEquiv(); + } + + lemma LemmaMapFunctorial(eq: (U, U) -> bool, f: S -> T, g: T -> U, w: W) { + LemmaEquiv(); + } + + lemma LemmaMapIdentity(eq: (T, T) -> bool, id: T -> T) { + LemmaEquiv(); + } + + /* Comonad structure */ + function Extract(w: W): T { + Coreader.ExtractLeft(w) + } + + function Duplicate(w: W): W> { + Coreader.DuplicateRight(w) + } + + /* Naturality of Extract and Duplicate */ + lemma LemmaExtractNaturality(eq: (T, T) -> bool, f: S -> T, w: W) { + } + + lemma LemmaDuplicateNaturality(eq: (T, T) -> bool, f: S -> T, w: W) { + LemmaEquiv(); + } + + /* Comonad laws */ + lemma LemmaCoUnitalityExtract(eq: (T, T) -> bool, w: W) { + LemmaEquiv(); + } + + lemma LemmaCoAssociativityDuplicate(eq: (T, T) -> bool, w: W) { + LemmaEquiv(); + } + +} \ No newline at end of file diff --git a/src/Coreader.dfy b/src/Coreader.dfy deleted file mode 100644 index 6ea29357..00000000 --- a/src/Coreader.dfy +++ /dev/null @@ -1,62 +0,0 @@ -include "Wrappers.dfy" - -module {:options "-functionSyntax:4"} Coreader { - - datatype Coreader<+X,+T> = Coreader(left: X, right: T) - - function Extract(r: Coreader): T { - r.right - } - - function Duplicate(r: Coreader): Coreader> { - Coreader(r.left, r) - } - - function Extend(f: Coreader -> T, r: Coreader): Coreader { - Coreader(r.left, f(r)) - } - - function Map(f: S -> T): Coreader -> Coreader { - (r: Coreader) => - Coreader(r.left, f(r.right)) - } - - function Composition(f: Coreader -> T, g: Coreader -> U): Coreader -> U { - r => g(Extend(f, r)) - } - - lemma LemmaUnitalityExtract(r: Coreader) - ensures Map(Extract)(Duplicate(r)) == r == Extract>(Duplicate(r)) - { - } - - lemma LemmaAssociativityDuplicate(r: Coreader) - ensures Map(Duplicate)(Duplicate(r)) == Duplicate>(Duplicate(r)) - { - } - - lemma LemmaLeftUnitalityExtend(r: Coreader) - ensures Extend(Extract, r) == r - { - } - - lemma LemmaRightUnitalityExtend(f: Coreader -> T, r: Coreader) - ensures Extract(Extend(f, r)) == f(r) - { - } - - lemma LemmaAssociativityExtend(r: Coreader, f: Coreader -> T, g: Coreader -> U) - ensures Extend(g, Extend(f, r)) == Extend(Composition(f, g), r) - { - } - - lemma LemmaAssociativityComposition(f: Coreader -> T, g: Coreader -> U, h: Coreader -> V) - ensures forall r: Coreader :: Composition(Composition(f, g),h)(r) == Composition(f, Composition(g,h))(r) - { - } - - lemma LemmaIdentityExtract(f: Coreader -> T) - ensures forall r: Coreader :: Composition(f, Extract)(r) == f(r) == Composition(Extract, f)(r) - { - } -} \ No newline at end of file diff --git a/src/Cowrappers.dfy b/src/Cowrappers.dfy new file mode 100644 index 00000000..effcfd66 --- /dev/null +++ b/src/Cowrappers.dfy @@ -0,0 +1,52 @@ +module {:options "-functionSyntax:4"} Coreader { + + datatype Coreader<+S,+T> = Coreader(left: S, right: T) + + function ExtractRight(r: Coreader): T { + r.right + } + + function ExtractLeft(r: Coreader): S { + r.left + } + + function DuplicateLeft(r: Coreader): Coreader> { + Coreader(r.left, r) + } + + function DuplicateRight(r: Coreader): Coreader,T> { + Coreader(r, r.right) + } + + function ExtendRight(f: Coreader -> T2, r: Coreader): Coreader { + Coreader(r.left, f(r)) + } + + function ExtendLeft(f: Coreader -> S2, r: Coreader): Coreader { + Coreader(f(r), r.right) + } + + function MapRight(f: T1 -> T2): Coreader -> Coreader { + (r: Coreader) => + Coreader(r.left, f(r.right)) + } + + function MapLeft(f: S1 -> S2): Coreader -> Coreader { + (r: Coreader) => + Coreader(f(r.left), r.right) + } + + function KleisliCompositionRight(f: Coreader -> T2, g: Coreader -> T3): Coreader -> T3 { + r => g(ExtendRight(f, r)) + } + + function KleisliCompositionLeft(f: Coreader -> S2, g: Coreader -> S3): Coreader -> S3 { + r => g(ExtendLeft(f, r)) + } + + ghost function Equal(eql: (S, S) -> bool, eqr: (T, T) -> bool): (Coreader, Coreader) -> bool { + (r1: Coreader, r2: Coreader) => + eql(r1.left, r2.left) && eqr(r1.right, r2.right) + } + +} \ No newline at end of file diff --git a/src/Cowrappers.dll b/src/Cowrappers.dll new file mode 100644 index 0000000000000000000000000000000000000000..0edc23f5dea7207bff5b4088963d669d9ba84302 GIT binary patch literal 140800 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 = Left(left: S) | Right(right: T) - - /********************************************************** - * - * Get and set - * - ***********************************************************/ - - function Left(v: S): Either { - Either.Left(v) - } - - function Right(v: T): Either { - Either.Right(v) - } - - predicate IsLeft(e: Either) { - e.Left? - } - - predicate IsRight(e: Either) { - e.Right? - } - - /********************************************************** - * - * Conversion to other datatypes - * - ***********************************************************/ - - function FindLeft(e: Either): Option { - match e - case Left(v) => Some(v) - case Right(v) => None - } - - function FindRight(e: Either): Option { - match e - case Left(v) => None - case Right(v) => Some(v) - } - - /********************************************************** - * - * Map - * - ***********************************************************/ - - function MapLeft(f: S -> T): Either -> Either { - (e: Either) => - match e - case Left(v) => Either.Left(f(v)) - case Right(v) => Either.Right(v) - } - - function MapRight(f: T -> U): Either -> Either { - (e: Either) => - match e - case Left(v) => Either.Left(v) - case Right(v) => Either.Right(f(v)) - } - - function Map(f: S1 -> S2, g: T1 -> T2): Either -> Either { - (e: Either) => - match e - case Left(v) => Either.Left(f(v)) - case Right(v) => Either.Right(g(v)) - } - - /********************************************************** - * - * Fold - * - ***********************************************************/ - - function Fold(f: S -> U, g: T -> U): Either -> U { - (e: Either) => - match e - case Left(v) => f(v) - case Right(v) => g(v) - } - - /********************************************************** - * - * Comparison - * - ***********************************************************/ - - function Equal(eql: (S, S) -> bool, eqr: (T, T) -> bool): (Either, Either) -> bool { - (e1: Either, e2: Either) => - match (e1, e2) - case (Left(v1), Left(v2)) => eql(v1, v2) - case (Right(v1), Right(v2)) => eqr(v1, v2) - case _ => false - } - - function Compare(cmpl: (S, S) -> int, cmpr: (T, T) -> int): (Either, Either) -> int { - (e1: Either, e2: Either) => - match (e1, e2) - case (Left(v1), Left(v2)) => cmpl(v1, v2) - case (Right(v1), Right(v2)) => cmpr(v1, v2) - case (Left(_), Right(_)) => -1 - case (Right(_), Left(_)) => 1 - } - -} - diff --git a/src/Functor.dfy b/src/Functor.dfy new file mode 100644 index 00000000..5268b35c --- /dev/null +++ b/src/Functor.dfy @@ -0,0 +1,42 @@ +// RUN: %dafny /compile:0 "%s" + +/******************************************************************************* +* Copyright by the contributors to the Dafny Project +* SPDX-License-Identifier: MIT +*******************************************************************************/ + +include "Functions.dfy" +include "Relations.dfy" + +abstract module {:options "-functionSyntax:4"} Functor { + import opened Functions + import opened Relations + + /* Structure */ + type W(!new) + + function Map(f: S -> T): W -> W + + ghost function Equal(eq: (T, T) -> bool): (W, W) -> bool + requires EquivalenceRelation(eq) + + /* Properties of Equal */ + lemma LemmaEquivRelLift(eq: (T, T) -> bool) + requires EquivalenceRelation(eq) + ensures EquivalenceRelation(Equal(eq)) + + /* Properties of Map */ + lemma LemmaMapFunction(eq: (T, T) -> bool, f: S -> T, g: S -> T) + requires EquivalenceRelation(eq) + requires forall x: S :: eq(f(x), g(x)) + ensures forall w: W :: Equal(eq)(Map(f)(w), Map(g)(w)) + + lemma LemmaMapFunctorial(eq: (U, U) -> bool, f: S -> T, g: T -> U, w: W) + requires EquivalenceRelation(eq) + ensures Equal(eq)(Map(Composition(f, g))(w), Composition(Map(f), Map(g))(w)) + + lemma LemmaMapIdentity(eq: (T, T) -> bool, id: T -> T) + requires EquivalenceRelation(eq) + requires forall x: T :: eq(id(x), x) + ensures forall w: W :: Equal(eq)(Map(id)(w), w) +} \ No newline at end of file diff --git a/src/Functor.dll b/src/Functor.dll new file mode 100644 index 0000000000000000000000000000000000000000..496dff1f9bc549b1a8a91b4df8c4ee9b71095ef3 GIT binary patch literal 136704 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 literal 0 HcmV?d00001 diff --git a/src/Functor.runtimeconfig.json b/src/Functor.runtimeconfig.json new file mode 100644 index 00000000..c9fdac56 --- /dev/null +++ b/src/Functor.runtimeconfig.json @@ -0,0 +1,10 @@ +{ + "runtimeOptions": { + "tfm": "net6.0", + "framework": { + "name": "Microsoft.NETCore.App", + "version": "6.0.0", + "rollForward": "LatestMinor" + } + } +} diff --git a/src/Monad.dfy b/src/Monad.dfy new file mode 100644 index 00000000..9653275b --- /dev/null +++ b/src/Monad.dfy @@ -0,0 +1,435 @@ +// RUN: %dafny /compile:0 "%s" + +/******************************************************************************* +* Copyright by the contributors to the Dafny Project +* SPDX-License-Identifier: MIT +*******************************************************************************/ + +include "Functor.dfy" +include "Wrappers.dfy" + +abstract module {:options "-functionSyntax:4"} Monad refines Functor { + /* Structure */ + type W(!new) + + function Return(x: T): W + + function Join(ww: W>): W + + /* Naturality of Return and Join */ + lemma LemmaReturnNaturality(eq: (T, T) -> bool, f: S -> T, x: S) + requires EquivalenceRelation(eq) + ensures Equal(eq)(Map(f)(Return(x)), Return(f(x))) + + lemma LemmaJoinNaturality(eq: (T, T) -> bool, f: S -> T, ww: W>) + requires EquivalenceRelation(eq) + ensures Equal(eq)(Join(Map(Map(f))(ww)), Map(f)(Join(ww))) + + /* Monad laws */ + lemma LemmaUnitalityJoin(eq: (T, T) -> bool, w: W) + requires EquivalenceRelation(eq) + ensures Equal(eq)(Join(Map(Return)(w)), w) && Equal(eq)(w, Join(Return(w))) + + lemma LemmaAssociativityJoin(eq: (T, T) -> bool, www: W>>) + requires EquivalenceRelation(eq) + ensures Equal(eq)(Join(Map(Join)(www)), Join(Join(www))) +} + + +abstract module {:options "-functionSyntax:4"} ResultMonad refines Monad { + import Result + + type E(!new) + + function eqe(x: E, y: E): bool + + lemma LemmaEquiv() + ensures EquivalenceRelation(eqe) + + /* Functor structure */ + type W(!new) = Result.Result + + function Map(f: S -> T): W -> W { + Result.Map(f) + } + + ghost function Equal(eq: (T, T) -> bool): (W, W) -> bool { + Result.Equal(eq, eqe) + } + + /* Properties of Equal */ + lemma LemmaEquivRelLift(eq: (T, T) -> bool) { + LemmaEquiv(); + } + + /* Properties of Map */ + lemma LemmaMapFunction(eq: (T, T) -> bool, f: S -> T, g: S -> T) { + LemmaEquiv(); + } + + lemma LemmaMapFunctorial(eq: (U, U) -> bool, f: S -> T, g: T -> U, w: W) { + LemmaEquiv(); + } + + lemma LemmaMapIdentity(eq: (T, T) -> bool, id: T -> T) { + LemmaEquiv(); + } + + /* Monad structure */ + function Return(x: T): W { + Result.Return(x) + } + + function Join(ww: W>): W { + Result.Join(ww) + } + + /* Naturality of Return and Join */ + lemma LemmaReturnNaturality(eq: (T, T) -> bool, f: S -> T, x: S) { + } + + lemma LemmaJoinNaturality(eq: (T, T) -> bool, f: S -> T, ww: W>) { + LemmaEquiv(); + } + + /* Monad laws */ + lemma LemmaUnitalityJoin(eq: (T, T) -> bool, w: W) { + LemmaEquiv(); + } + + lemma LemmaAssociativityJoin(eq: (T, T) -> bool, www: W>>) { + LemmaEquiv(); + } +} + + +module {:options "-functionSyntax:4"} WriterMonad refines Monad { + import Writer + + /* Functor structure */ + type W(!new) = Writer.Writer + + function Map(f: S -> T): W -> W { + Writer.Map(f) + } + + ghost function Equal(eq: (T, T) -> bool): (W, W) -> bool { + Writer.Equal(eq) + } + + /* Properties of Equal */ + lemma LemmaEquivRelLift(eq: (T, T) -> bool) { + } + + /* Properties of Map */ + lemma LemmaMapFunction(eq: (T, T) -> bool, f: S -> T, g: S -> T) { + } + + lemma LemmaMapFunctorial(eq: (U, U) -> bool, f: S -> T, g: T -> U, w: W) { + } + + lemma LemmaMapIdentity(eq: (T, T) -> bool, id: T -> T) { + } + + /* Monad structure */ + function Return(x: T): W { + Writer.Return(x) + } + + function Join(ww: W>): W { + Writer.Join(ww) + } + + /* Naturality of Return and Join */ + lemma LemmaReturnNaturality(eq: (T, T) -> bool, f: S -> T, x: S) { + } + + lemma LemmaJoinNaturality(eq: (T, T) -> bool, f: S -> T, ww: W>) { + } + + /* Monad laws */ + lemma LemmaUnitalityJoin(eq: (T, T) -> bool, w: W) { + } + + lemma LemmaAssociativityJoin(eq: (T, T) -> bool, www: W>>) { + } +} + + +module {:options "-functionSyntax:4"} OptionMonad refines Monad { + import Option + + /* Functor structure */ + type W(!new) = Option.Option + + function Map(f: S -> T): W -> W { + Option.Map(f) + } + + ghost function Equal(eq: (T, T) -> bool): (W, W) -> bool { + Option.Equal(eq) + } + + /* Properties of Equal */ + lemma LemmaEquivRelLift(eq: (T, T) -> bool) { + } + + /* Properties of Map */ + lemma LemmaMapFunction(eq: (T, T) -> bool, f: S -> T, g: S -> T) { + } + + lemma LemmaMapFunctorial(eq: (U, U) -> bool, f: S -> T, g: T -> U, w: W) { + } + + lemma LemmaMapIdentity(eq: (T, T) -> bool, id: T -> T) { + } + + /* Monad structure */ + function Return(x: T): W { + Option.Return(x) + } + + function Join(ww: W>): W { + Option.Join(ww) + } + + /* Naturality of Return and Join */ + lemma LemmaReturnNaturality(eq: (T, T) -> bool, f: S -> T, x: S) { + } + + lemma LemmaJoinNaturality(eq: (T, T) -> bool, f: S -> T, ww: W>) { + } + + /* Monad laws */ + lemma LemmaUnitalityJoin(eq: (T, T) -> bool, w: W) { + } + + lemma LemmaAssociativityJoin(eq: (T, T) -> bool, www: W>>) { + } +} + + +abstract module {:options "-functionSyntax:4"} EitherRightMonad refines Monad { + import Either + + type X(!new) + + function eql(x: X, y: X): bool + + lemma LemmaEquiv() + ensures EquivalenceRelation(eql) + + /* Functor structure */ + type W(!new) = Either.Either + + function Map(f: S -> T): W -> W { + Either.MapRight(f) + } + + ghost function Equal(eq: (T, T) -> bool): (W, W) -> bool { + Either.Equal(eql, eq) + } + + /* Properties of Equal */ + lemma LemmaEquivRelLift(eq: (T, T) -> bool) { + LemmaEquiv(); + } + + /* Properties of Map */ + lemma LemmaMapFunction(eq: (T, T) -> bool, f: S -> T, g: S -> T) { + LemmaEquiv(); + } + + lemma LemmaMapFunctorial(eq: (U, U) -> bool, f: S -> T, g: T -> U, w: W) { + LemmaEquiv(); + } + + lemma LemmaMapIdentity(eq: (T, T) -> bool, id: T -> T) { + LemmaEquiv(); + } + + /* Monad structure */ + function Return(x: T): W { + Either.ReturnRight(x) + } + + function Join(ww: W>): W { + Either.JoinRight(ww) + } + + /* Naturality of Return and Join */ + lemma LemmaReturnNaturality(eq: (T, T) -> bool, f: S -> T, x: S) { + } + + lemma LemmaJoinNaturality(eq: (T, T) -> bool, f: S -> T, ww: W>) { + LemmaEquiv(); + } + + /* Monad laws */ + lemma LemmaUnitalityJoin(eq: (T, T) -> bool, w: W) { + LemmaEquiv(); + } + + lemma LemmaAssociativityJoin(eq: (T, T) -> bool, www: W>>) { + LemmaEquiv(); + } +} + + +abstract module {:options "-functionSyntax:4"} EitherLeftMonad refines Monad { + import Either + + type X(!new) + + function eqr(x: X, y: X): bool + + lemma LemmaEquiv() + ensures EquivalenceRelation(eqr) + + /* Functor structure */ + type W(!new) = Either.Either + + function Map(f: S -> T): W -> W { + Either.MapLeft(f) + } + + ghost function Equal(eq: (T, T) -> bool): (W, W) -> bool { + Either.Equal(eq, eqr) + } + + /* Properties of Equal */ + lemma LemmaEquivRelLift(eq: (T, T) -> bool) { + LemmaEquiv(); + } + + /* Properties of Map */ + lemma LemmaMapFunction(eq: (T, T) -> bool, f: S -> T, g: S -> T) { + LemmaEquiv(); + } + + lemma LemmaMapFunctorial(eq: (U, U) -> bool, f: S -> T, g: T -> U, w: W) { + LemmaEquiv(); + } + + lemma LemmaMapIdentity(eq: (T, T) -> bool, id: T -> T) { + LemmaEquiv(); + } + + /* Monad structure */ + function Return(x: T): W { + Either.ReturnLeft(x) + } + + function Join(ww: W>): W { + Either.JoinLeft(ww) + } + + /* Naturality of Return and Join */ + lemma LemmaReturnNaturality(eq: (T, T) -> bool, f: S -> T, x: S) { + } + + lemma LemmaJoinNaturality(eq: (T, T) -> bool, f: S -> T, ww: W>) { + LemmaEquiv(); + } + + /* Monad laws */ + lemma LemmaUnitalityJoin(eq: (T, T) -> bool, w: W) { + LemmaEquiv(); + } + + lemma LemmaAssociativityJoin(eq: (T, T) -> bool, www: W>>) { + LemmaEquiv(); + } +} + + +abstract module {:options "-functionSyntax:4"} ReaderMonad refines Monad { + import Reader + + type X(!new) + + /* Functor structure */ + type W(!new) = Reader.Reader + + function Map(f: S -> T): W -> W { + Reader.Map(f) + } + + ghost function Equal(eq: (T, T) -> bool): (W, W) -> bool { + Reader.Equal(eq) + } + + /* Properties of Equal */ + lemma LemmaEquivRelLift(eq: (T, T) -> bool) { + forall w: W ensures Equal(eq)(w, w) { + forall x: X ensures eq(w.f(x), w.f(x)) { + assert eq(w.f(x), w.f(x)); + } + } + assert Reflexive(Equal(eq)); + + forall v, w: W ensures Equal(eq)(v, w) <==> Equal(eq)(w, v) { + calc { + Equal(eq)(v, w); + <==> + forall x: X :: eq(v.f(x), w.f(x)); + <==> { assert Symmetric(eq); } + forall x: X :: eq(v.f(x), w.f(x)); + <==> + Equal(eq)(w, v); + } + } + assert Symmetric(Equal(eq)); + + forall v, w, u: W ensures Equal(eq)(v, w) && Equal(eq)(w, u) ==> Equal(eq)(v, u) { + if Equal(eq)(v, w) && Equal(eq)(w, u) { + forall x: X ensures eq(v.f(x), u.f(x)) { + calc { + eq(v.f(x), w.f(x)) && eq(w.f(x), u.f(x)); + ==> { assert Transitive(eq); } + eq(v.f(x), u.f(x)); + } + } + } + } + assert Transitive(Equal(eq)); + } + + /* Properties of Map */ + lemma LemmaMapFunction(eq: (T, T) -> bool, f: S -> T, g: S -> T) { + } + + lemma LemmaMapFunctorial(eq: (U, U) -> bool, f: S -> T, g: T -> U, w: W) { + } + + lemma LemmaMapIdentity(eq: (T, T) -> bool, id: T -> T) { + } + + /* Monad structure */ + function Return(x: T): W { + Reader.Return(x) + } + + function Join(ww: W>): W { + Reader.Join(ww) + } + + /* Naturality of Return and Join */ + lemma LemmaReturnNaturality(eq: (T, T) -> bool, f: S -> T, x: S) { + } + + lemma LemmaJoinNaturality(eq: (T, T) -> bool, f: S -> T, ww: W>) { + } + + /* Monad laws */ + lemma LemmaUnitalityJoin(eq: (T, T) -> bool, w: W) { + } + + lemma LemmaAssociativityJoin(eq: (T, T) -> bool, www: W>>) { + } +} + + + + + diff --git a/src/Monad.dll b/src/Monad.dll new file mode 100644 index 0000000000000000000000000000000000000000..7b67735044f16d7b5c7220d3bded46aaef1198a7 GIT binary patch literal 235008 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 Xg`dQa9}VPAf$mkv`{bWrJPG`N9F`wr literal 0 HcmV?d00001 diff --git a/src/Monad.runtimeconfig.json b/src/Monad.runtimeconfig.json new file mode 100644 index 00000000..c9fdac56 --- /dev/null +++ b/src/Monad.runtimeconfig.json @@ -0,0 +1,10 @@ +{ + "runtimeOptions": { + "tfm": "net6.0", + "framework": { + "name": "Microsoft.NETCore.App", + "version": "6.0.0", + "rollForward": "LatestMinor" + } + } +} diff --git a/src/Reader.dfy b/src/Reader.dfy deleted file mode 100644 index a3a927f2..00000000 --- a/src/Reader.dfy +++ /dev/null @@ -1,98 +0,0 @@ -include "Wrappers.dfy" - -module {:options "-functionSyntax:4"} Reader { - - /********************************************************** - * - * Monadic structure in terms of Return, Bind, Join, Map, Composition - * - ***********************************************************/ - - datatype Reader<-X,+T> = Reader(f: X -> T) - - function Return(t: T): Reader { - Reader(x => t) - } - - function Bind(r: Reader, f: S -> Reader): Reader { - Reader(x => (f((r.f)(x)).f)(x)) - } - - function Join(rr: Reader>): Reader { - Reader(x => (rr.f(x)).f(x)) - } - - function Map(f: S -> T): Reader -> Reader { - (r: Reader) => - Reader(x => f((r.f)(x))) - } - - function Composition(f: S -> Reader, g: T -> Reader): S -> Reader { - s => Bind(f(s), g) - } - - - /********************************************************** - * - * Comparison - * - ***********************************************************/ - - ghost function Equal(eq: (T, T) -> bool): (Reader, Reader) -> bool - { - (r1: Reader, r2: Reader) => forall x: X :: eq(r1.f(x), r2.f(x)) - } - - /********************************************************** - * - * Monad laws in terms of Join and Map - * - ***********************************************************/ - - lemma LemmaUnitalityJoin(r: Reader) - ensures forall x: X :: Join(Map(Return)(r)).f(x) == r.f(x) == Join(Return>(r)).f(x) - { - } - - lemma LemmaAssociativityJoin(rrr: Reader>>) - ensures forall x: X :: Join(Map(Join)(rrr)).f(x) == Join(Join>(rrr)).f(x) - { - } - - /********************************************************** - * - * Monad laws in terms of Bind and Return - * - ***********************************************************/ - - lemma LemmaLeftUnitalityBind(s: S, f: S -> Reader) - ensures forall x: X :: Bind(Return(s), f).f(x) == f(s).f(x) - { - } - - lemma LemmaRightUnitalityBind(r: Reader) - ensures forall x: X :: Bind(r, Return).f(x) == r.f(x) - { - } - - lemma LemmaAssociativityBind(r: Reader, f: S -> Reader, g: T -> Reader) - ensures forall x: X :: Bind(Bind(r, f), g).f(x) == Bind(r, Composition(f, g)).f(x) - { - } - - /********************************************************** - * - * Monad laws in terms of (Kleisli) Composition and Return - * - ***********************************************************/ - - lemma LemmaAssociativityComposition(f: S -> Reader, g: T -> Reader, h: U -> Reader) - ensures forall s: S, x: X :: Composition(Composition(f, g),h)(s).f(x) == Composition(f, Composition(g,h))(s).f(x) - { - } - - lemma LemmaIdentityReturn(f: S -> Reader) - ensures forall s: S, x: X :: Composition(f, Return)(s).f(x) == f(s).f(x) == Composition(Return, f)(s).f(x) - { - } -} diff --git a/src/Relations.dfy b/src/Relations.dfy index 9135426f..93029480 100644 --- a/src/Relations.dfy +++ b/src/Relations.dfy @@ -19,6 +19,10 @@ module {:options "-functionSyntax:4"} Relations { forall x, y :: R(x, y) && R(y, x) ==> x == y } + ghost predicate Symmetric(R: (T, T) -> bool) { + forall x, y :: R(x, y) <==> R(y, x) + } + ghost predicate Connected(R: (T, T) -> bool) { forall x, y :: x != y ==> R(x, y) || R(y, x) } @@ -47,7 +51,7 @@ module {:options "-functionSyntax:4"} Relations { ghost predicate EquivalenceRelation(R: (T, T) -> bool) { && Reflexive(R) - && AntiSymmetric(R) + && Symmetric(R) && Transitive(R) } diff --git a/src/Result.dfy b/src/Result.dfy deleted file mode 100644 index 6183153e..00000000 --- a/src/Result.dfy +++ /dev/null @@ -1,204 +0,0 @@ -include "Wrappers.dfy" - -module {:options "-functionSyntax:4"} Result { - - import opened Wrappers - - /********************************************************** - * - * Monadic structure in terms of Return, Bind, Join, Map, Composition - * - ***********************************************************/ - - datatype Result<+T,+E> = | Success(value: T) | Failure(error: E) - - function Return(v: T): Result { - Result.Success(v) - } - - function Bind(r: Result, f: S -> Result): Result { - match r - case Success(v) => f(v) - case Failure(e) => Result.Failure(e) - } - - function Join(rr: Result,E>): Result { - match rr - case Success(v) => v - case Failure(e) => Result.Failure(e) - } - - function Map(f: S -> T): Result -> Result { - (r: Result) => - match r - case Success(v) => Result.Success(f(v)) - case Failure(e) => Result.Failure(e) - } - - function MapError(f: E1 -> E2): Result -> Result { - (r: Result) => - match r - case Success(v) => Result.Success(v) - case Failure(e) => Result.Failure(f(e)) - } - - function Composition(f: S -> Result, g: T -> Result): S -> Result { - s => Bind(f(s), g) - } - - /********************************************************** - * - * Get and set - * - ***********************************************************/ - - function Success(v: T): Result { - Result.Success(v) - } - - function Failure(e: E): Result { - Result.Failure(e) - } - - predicate IsSuccess(r: Result) { - r.Success? - } - - predicate IsFailure(r: Result) { - r.Failure? - } - - function GetValue(r: Result): T - requires r.Success? - { - r.value - } - - function GetValueDefault(r: Result, default: T): T { - match r - case Success(v) => v - case Failure(_) => default - } - - function GetError(r: Result): E - requires r.Failure? - { - r.error - } - - /********************************************************** - * - * Fold - * - ***********************************************************/ - - function Fold(f: T -> U, g: E -> U): Result -> U { - (r: Result) => - match r - case Success(v) => f(v) - case Failure(e) => g(e) - } - - /********************************************************** - * - * Comparison - * - ***********************************************************/ - - function Equal(eqs: (T, T) -> bool, eqf: (E, E) -> bool): (Result, Result) -> bool { - (r1: Result, r2: Result) => - match (r1, r2) - case (Success(v1), Success(v2)) => eqs(v1, v2) - case (Failure(e1), Failure(e2)) => eqf(e1, e2) - case _ => false - } - - function Compare(cmps: (T, T) -> int, cmpf: (E, E) -> int): (Result, Result) -> int { - (r1: Result, r2: Result) => - match (r1, r2) - case (Success(v1), Success(v2)) => cmps(v1, v2) - case (Failure(e1), Failure(e2)) => cmpf(e1, e2) - case (Success(_), Failure(_)) => -1 - case (Failure(_), Success(_)) => 1 - } - - /********************************************************** - * - * Conversion to other datatypes - * - ***********************************************************/ - - function ToSeq(r: Result): seq { - match r - case Success(v) => [v] - case Failure(_) => [] - } - - function ToSet(r: Result): set { - match r - case Success(v) => {v} - case Failure(_) => {} - } - - function ToOption(r: Result): Option { - match r - case Success(v) => Some(v) - case Failure(_) => None() - } - - /********************************************************** - * - * Monad laws in terms of Join and Map - * - ***********************************************************/ - - lemma LemmaUnitalityJoin(r: Result) - ensures Join(Map(Return)(r)) == r == Join(Return,E>(r)) - { - } - - lemma LemmaAssociativityJoin(rrr: Result,E>,E>) - ensures Join(Map(Join)(rrr)) == Join(Join,E>(rrr)) - { - } - - /********************************************************** - * - * Monad laws in terms of Bind and Return - * - ***********************************************************/ - - lemma LemmaLeftUnitalityBind(v: S, f: S -> Result) - ensures Bind(Return(v), f) == f(v) - { - } - - lemma LemmaRightUnitalityBind(r: Result) - ensures Bind(r, Return) == r - { - } - - lemma LemmaAssociativityBind(r: Result, f: S -> Result, g: T -> Result) - ensures Bind(Bind(r, f), g) == Bind(r, Composition(f, g)) - { - } - - /********************************************************** - * - * Monad laws in terms of (Kleisli) Composition and Return - * - ***********************************************************/ - - lemma LemmaAssociativityComposition(f: S -> Result, g: T -> Result, h: U -> Result) - ensures forall s: S :: Composition(Composition(f, g), h)(s) == Composition(f, Composition(g, h))(s) - { - } - - lemma LemmaIdentityExtract(f: S -> Result) - ensures forall s: S :: Composition(f, Return)(s) == f(s) == Composition(Return, f)(s) - { - } - -} - - diff --git a/src/Wrappers.dfy b/src/Wrappers.dfy index c06dc9d8..5cf5730f 100644 --- a/src/Wrappers.dfy +++ b/src/Wrappers.dfy @@ -5,552 +5,376 @@ * SPDX-License-Identifier: MIT *******************************************************************************/ -include "Functions.dfy" -include "Relations.dfy" +module {:options "-functionSyntax:4"} Result { + datatype Result = | Success(value: T) | Failure(error: E) -abstract module {:options "-functionSyntax:4"} Functor { - - import opened Functions - import opened Relations - - /********************************************************** - * - * Functor structure - * - ***********************************************************/ - - /* Functor structure */ - type W - - function Map(f: S -> T): W -> W - - ghost function Equal(eq: (T, T) -> bool): (W, W) -> bool - requires EquivalenceRelation(eq) - - lemma LemmaEquivRelLift(eq: (T, T) -> bool) - requires EquivalenceRelation(eq) - ensures EquivalenceRelation(Equal(eq)) - - /* Functoriality of Map */ - lemma LemmaMapFunction(eq: (T, T) -> bool, f: S -> T, g: S -> T) - requires EquivalenceRelation(eq) - requires forall x: S :: eq(f(x), g(x)) - ensures forall w: W :: Equal(eq)(Map(f)(w), Map(g)(w)) - - lemma LemmaMapFunctorial(eq: (U, U) -> bool, f: S -> T, g: T -> U, w: W) - requires EquivalenceRelation(eq) - ensures Equal(eq)(Map(Composition(f, g))(w), Composition(Map(f), Map(g))(w)) - - lemma LemmaMapIdentity(eq: (T, T) -> bool, id: T -> T) - requires EquivalenceRelation(eq) - requires forall x: T :: eq(id(x), x) - ensures forall w: W :: Equal(eq)(Map(id)(w), w) - -} - -abstract module {:options "-functionSyntax:4"} Monad refines Functor { - - /********************************************************** - * - * Additional monad structure - * - ***********************************************************/ - - /* Monad basics */ - type W(!new) - - function Return(x: T): W - - function Join(ww: W>): W - - /* Naturality of Return and Join */ - lemma LemmaReturnNaturality(eq: (T, T) -> bool, f: S -> T, x: S) - requires EquivalenceRelation(eq) - ensures Equal(eq)(Map(f)(Return(x)), Return(f(x))) - - lemma LemmaJoinNaturality(eq: (T, T) -> bool, f: S -> T, ww: W>) - requires EquivalenceRelation(eq) - ensures Equal(eq)(Join(Map(Map(f))(ww)), Map(f)(Join(ww))) - - /* Monad laws */ - lemma LemmaUnitalityJoin(eq: (T, T) -> bool, w: W) - requires EquivalenceRelation(eq) - ensures Equal(eq)(Join(Map(Return)(w)), w) && Equal(eq)(w, Join(Return(w))) - - lemma LemmaAssociativityJoin(eq: (T, T) -> bool, www: W>>) - requires EquivalenceRelation(eq) - ensures Equal(eq)(Join(Map(Join)(www)), Join(Join(www))) - - /********************************************************** - * - * Derived structure - * - ***********************************************************/ - - /* Derived functions */ - function Bind(w: W, f: S -> W): W { - Join(Map(f)(w)) - } - - function KleisliComp(f: S -> W, g: T -> W): S -> W { - x => Join(Map(g)(f(x))) - } - - /* Derived lemmas */ - lemma LemmaLeftUnitalityBind(eq: (T, T) -> bool, x: S, f: S -> W) - requires EquivalenceRelation(eq) - ensures Equal(eq)(Bind(Return(x), f), f(x)) -/* { - LemmaReturnNaturality(Equal(eq), f, x); - LemmaUnitalityJoin(eq, f(x)); - } */ - - lemma LemmaRightUnitalityBind(eq: (T, T) -> bool, w: W) - requires EquivalenceRelation(eq) - ensures Bind(w, Return) == w -/* { - LemmaUnitalityJoin(eq, w); - } */ - - lemma LemmaAssociativityBind(w: W, f: S -> W, g: T -> W) - ensures Bind(Bind(w, f), g) == Bind(w, KleisliComp(f, g)) -/* { - calc { - Bind(Bind(w, f), g); - == // Definition of Bind - Join(Map(g)(Join(Map(f)(w)))); - == { LemmaJoinNaturality(g, Map(f)(w)); } - Join(Join(Map(Map(g))(Map(f)(w)))); - == { LemmaMapFunctorial(f, Map(g), w); } - Join(Join(Map(x => Map(g)(f(x)))(w))); - == { LemmaAssociativityJoin(Map(x => Map(g)(f(x)))(w)); } - Join(Map(Join)(Map(x => Map(g)(f(x)))(w))); - == // Definition of Composition - Join(Composition(Map(x => Map(g)(f(x))), Map(Join))(w)); - == {LemmaMapFunctorial(x => Map(g)(f(x)), Join, w);} - Join(Map(Composition(x => Map(g)(f(x)), Join))(w)); - == { LemmaMapFunction((x, y) => x == y, Composition(x => Map(g)(f(x)), Join), x => Join(Map(g)(f(x)))); } - Join(Map(x => Join(Map(g)(f(x))))(w)); - == // Definition of Bind, KleisliComp - Bind(w, KleisliComp(f, g)); - } - } */ - - lemma LemmaAssociativityComposition(f: S -> W, g: T -> W, h: U -> W, x: S) - ensures KleisliComp(KleisliComp(f, g), h)(x) == KleisliComp(f, KleisliComp(g, h))(x) -/* { - calc { - KleisliComp(KleisliComp(f, g), h)(x); - == // Definition of KleisliComp - Join(Map(h)(Join(Map(g)(f(x))))); - == { LemmaJoinNaturality(h, Map(g)(f(x))); } - Join(Join(Map(Map(h))(Map(g)(f(x))))); - == // Definition of Composition - Join(Join(Composition(Map(g), Map(Map(h)))(f(x)))); - == { LemmaMapFunctorial(g, Map(h), f(x)); } - Join(Join(Map(Composition(g, Map(h)))(f(x)))); - == { LemmaAssociativityJoin(Map(Composition(g, Map(h)))(f(x))); } - Join(Map(Join)(Map(Composition(g, Map(h)))(f(x))) ); - == { LemmaMapFunctorial(Composition(g, Map(h)), Join, f(x)); } - Join(Map(Composition(Composition(g, Map(h)), Join))(f(x))); - == { LemmaMapFunction((x, y) => x == y, Composition(Composition(g, Map(h)), Join), y => Join(Map(h)(g(y)))); } - Join(Map(y => Join(Map(h)(g(y))))(f(x))); - == // Definition of KleisliComp - KleisliComp(f, KleisliComp(g, h))(x); - } - } */ - - lemma LemmaIdentityReturn(eq: (T, T) -> bool, f: S -> W, x: S) - requires EquivalenceRelation(eq) - ensures Equal(eq)(KleisliComp(f, Return)(x), f(x)) && Equal(eq)(f(x), KleisliComp(Return, f)(x)) -/* { - calc { - KleisliComp(f, Return)(x); - == // Definition of Composition - Join(Map(Return)(f(x))); - == { LemmaUnitalityJoin(f(x)); } - f(x); - } - calc { - f(x); - == { LemmaUnitalityJoin(f(x)); } - Join(Return(f(x))); - == { LemmaReturnNaturality(f, x); } - Join(Map(f)(Return(x))); - == // Definition of Composition - KleisliComp(Return, f)(x); - } - } */ -} - -abstract module {:options "-functionSyntax:4"} Result refines Monad { - - /********************************************************** - * - * Proves monad refinement - * - ***********************************************************/ - - type E(!new) - - function eqe(e1: E, e2: E): bool - - lemma {:axiom} LemmaEquivRel() - ensures EquivalenceRelation(eqe) - - /* Monad structure */ - - datatype W = Success(value: T) | Failure(error: E) - - function Map(f: S -> T): W -> W { - (w: W) => - match w - case Success(v) => W.Success(f(v)) - case Failure(e) => W.Failure(e) + function Return(v: T): Result { + Result.Success(v) } - ghost function Equal(eq: (T, T) -> bool): (W, W) -> bool - { - (w1: W, w2: W) => - match (w1, w2) - case (Success(v1), Success(v2)) => eq(v1, v2) - case (Failure(e1), Failure(e2)) => eqe(e1, e2) - case _ => false + function Bind(r: Result, f: S -> Result): Result { + match r + case Success(v) => f(v) + case Failure(e) => Result.Failure(e) } - lemma LemmaEquivRelLift(eq: (T, T) -> bool) - ensures EquivalenceRelation(Equal(eq)) - - function Return(x: T): W { - Success(x) - } - - function Join(ww: W>): W { - match ww + function Join(rr: Result,E>): Result { + match rr case Success(v) => v - case Failure(e) => W.Failure(e) + case Failure(e) => Result.Failure(e) } - /* Functoriality of Map */ - lemma LemmaMapFunction(eq: (T, T) -> bool, f: S -> T, g: S -> T) {} - - lemma LemmaMapFunctorial(eq: (U, U) -> bool, f: S -> T, g: T -> U, w: W) {} - - lemma LemmaMapIdentity(eq: (T, T) -> bool, id: T -> T) { - forall w: W ensures Equal(eq)(Map(id)(w), w) { - match w - case Success(v) => - case Failure(e) => LemmaEquivRel(); - } + function Map(f: S -> T): Result -> Result { + (r: Result) => + match r + case Success(v) => Result.Success(f(v)) + case Failure(e) => Result.Failure(e) } - /* Naturality of Return and Join */ - lemma LemmaReturnNaturality(eq: (T, T) -> bool, f: S -> T, x: S) {} - - lemma LemmaJoinNaturality(eq: (T, T) -> bool, f: S -> T, ww: W>) {} - - /* Monad laws */ - lemma LemmaUnitalityJoin(eq: (T, T) -> bool, w: W) {} + function MapError(f: E1 -> E2): Result -> Result { + (r: Result) => + match r + case Success(v) => Result.Success(v) + case Failure(e) => Result.Failure(f(e)) + } - lemma LemmaAssociativityJoin(eq: (T, T) -> bool, www: W>>) {} + function KleisliComposition(f: S -> Result, g: T -> Result): S -> Result { + s => Bind(f(s), g) + } - /********************************************************** - * - * Wrapper - * - ***********************************************************/ + function Success(v: T): Result { + Result.Success(v) + } - /* Get and Set */ - function Failure(e: E): W { - W.Failure(e) + function Failure(e: E): Result { + Result.Failure(e) } - predicate IsSuccess(w: W) { - w.Success? + predicate IsSuccess(r: Result) { + r.Success? } - predicate IsFailure(w: W) { - w.Failure? + predicate IsFailure(r: Result) { + r.Failure? } - function GetValue(w: W): T - requires w.Success? + function GetValue(r: Result): T + requires r.Success? { - w.value + r.value } - function GetValueDefault(w: W, default: T): T { - match w + function GetValueDefault(r: Result, default: T): T { + match r case Success(v) => v case Failure(_) => default } - function GetError(w: W): E - requires w.Failure? + function GetError(r: Result): E + requires r.Failure? { - w.error + r.error } - /* Fold */ - function Fold(f: T -> U, g: E -> U): W -> U { - (w: W) => - match w + function Fold(f: T -> U, g: E -> U): Result -> U { + (r: Result) => + match r case Success(v) => f(v) case Failure(e) => g(e) } - /* Conversion to other types */ - function ToSeq(w: W): seq { - match w + function Equal(eqt: (T, T) -> bool, eqe: (E, E) -> bool): (Result, Result) -> bool { + (r1: Result, r2: Result) => + match (r1, r2) + case (Success(v1), Success(v2)) => eqt(v1, v2) + case (Failure(e1), Failure(e2)) => eqe(e1, e2) + case _ => false + } + + function Compare(cmps: (T, T) -> int, cmpf: (E, E) -> int): (Result, Result) -> int { + (r1: Result, r2: Result) => + match (r1, r2) + case (Success(v1), Success(v2)) => cmps(v1, v2) + case (Failure(e1), Failure(e2)) => cmpf(e1, e2) + case (Success(_), Failure(_)) => -1 + case (Failure(_), Success(_)) => 1 + } + + function ToSeq(r: Result): seq { + match r case Success(v) => [v] case Failure(_) => [] } - function ToSet(w: W): set { - match w + function ToSet(r: Result): set { + match r case Success(v) => {v} case Failure(_) => {} } - - // function ToOption(w: W): Option { - // match w - // case Success(v) => Some(v) - // case Failure(_) => None() - // } - } -module {:options "-functionSyntax:4"} Option refines Monad { +module {:options "-functionSyntax:4"} Writer { + datatype Writer = Result(value: T, log: string) - /********************************************************** - * - * Proves monad refinement - * - ***********************************************************/ - - /* Monad structure */ - datatype W = None | Some(value: T) + function Return(v: T): Writer { + Result(v, "") + } - function Map(f: S -> T): W -> W - { - (w: W) => - match w - case None => W.None - case Some(v) => W.Some(f(v)) + function Bind(w: Writer, f: S -> Writer): Writer { + Writer.Result(f(w.value).value, w.log + f(w.value).log) } - ghost function Equal(eq: (T, T) -> bool): (W, W) -> bool { - (w1: W, w2: W) => - match (w1, w2) - case (Some(v1), Some(v2)) => eq(v1, v2) - case (None, None) => true - case _ => false + function Join(ww: Writer>): Writer { + Result((ww.value).value, (ww.value).log + ww.log) } - lemma LemmaEquivRelLift(eq: (T, T) -> bool) - ensures EquivalenceRelation(Equal(eq)) + function Map(f: S -> T): Writer -> Writer { + (w: Writer) => Writer.Result(f(w.value), w.log) + } - function Return(x: T): W { - Some(x) + function KleisliComposition(f: S -> Writer, g: T -> Writer): S -> Writer { + s => Bind(f(s), g) } - function Join(ww: W>): W { - match ww - case None => None - case Some(w) => w + function GetValue(w: Writer): T { + w.value } - /* Functoriality of Map */ - lemma LemmaMapFunction(eq: (T, T) -> bool, f: S -> T, g: S -> T) {} + function GetLog(w: Writer): string { + w.log + } - lemma LemmaMapFunctorial(eq: (U, U) -> bool, f: S -> T, g: T -> U, w: W) {} + function Result(v: T, s: string): Writer { + Writer.Result(v, s) + } - lemma LemmaMapIdentity(eq: (T, T) -> bool, id: T -> T) {} + ghost function Equal(eq: (T, T) -> bool): (Writer, Writer) -> bool { + (w1: Writer, w2: Writer) => + && eq(w1.value, w2.value) + && w1.log == w2.log + } +} - /* Naturality of Return and Join */ - lemma LemmaReturnNaturality(eq: (T, T) -> bool, f: S -> T, x: S) {} +module {:options "-functionSyntax:4"} Option { + import Result - lemma LemmaJoinNaturality(eq: (T, T) -> bool, f: S -> T, ww: W>) {} + datatype Option<+T> = None | Some(value: T) - /* Monad laws */ - lemma LemmaUnitalityJoin(eq: (T, T) -> bool, w: W) {} + function Return(v: T): Option { + Option.Some(v) + } - lemma LemmaAssociativityJoin(eq: (T, T) -> bool, www: W>>) {} + function Bind(o: Option, f: S -> Option): Option { + match o + case None => Option.None + case Some(v) => f(v) + } - /********************************************************** - * - * Wrapper - * - ***********************************************************/ + function Join(oo: Option>): Option { + match oo + case None => Option.None + case Some(o) => o + } + + function Map(f: S -> T): Option -> Option + { + (o: Option) => + match o + case None => Option.None + case Some(v) => Option.Some(f(v)) + } - /* Get and Fold */ - function GetValueDefault(w: W, default: T): T { - match w + function KleisliComposition(f: S -> Option, g: T-> Option): S -> Option { + s => Bind(f(s), g) + } + + function GetValueDefault(o: Option, default: T): T { + match o case None => default case Some(v) => v } - function GetValue(w: W): T - requires w.Some? + function GetValue(o: Option): T + requires o.Some? { - w.value + o.value } - function Fold(u: U, f: T -> U): W -> U { - (w: W) => - match w + function Fold(u: U, f: T -> U): Option -> U { + (o: Option) => + match o case None => u case Some(v) => f(v) } - /* Conversion to other types */ - // function ToResult(e: E): Option -> Result { - // (o: Option) => - // match o - // case Some(v) => Success(v) - // case None => Failure(e) - // } - - function ToSeq(w: W): seq { - match w - case None => [] - case Some(v) => [v] - } - - function ToSet(w: W): set { - match w - case None => {} - case Some(v) => {v} + function Equal(eq: (T, T) -> bool): (Option, Option) -> bool { + (o1: Option, o2: Option) => + match (o1, o2) + case (Some(v1), Some(v2)) => eq(v1, v2) + case (None, None) => true + case _ => false } - - /* Comparison */ - function Compare(cmp: (T, T) -> int): (W, W) -> int { - (w1: W, w2: W) => - match (w1, w2) + + function Compare(cmp: (T, T) -> int): (Option, Option) -> int { + (o1: Option, o2: Option) => + match (o1, o2) case (Some(v1), Some(v2)) => cmp(v1, v2) case (None, None) => 0 case (None, Some(_)) => -1 case (Some(_), None) => 1 } -} - -module {:options "-functionSyntax:4"} Writer refines Monad { - - /********************************************************** - * - * Proves monad refinement - * - ***********************************************************/ - - /* Monad structure */ - datatype W = Result(value: T, log: string) - - function Map(f: S -> T): W -> W { - (w: W) => W.Result(f(w.value), w.log) + function ToResult(e: E): Option -> Result.Result { + (o: Option) => + match o + case Some(v) => Result.Success(v) + case None => Result.Failure(e) } - ghost function Equal(eq: (T, T) -> bool): (W, W) -> bool { - (w1: W, w2: W) => eq(w1.value, w2.value) && w1.log == w2.log + function ToOption(r: Result.Result): Option { + match r + case Success(v) => Some(v) + case Failure(_) => None() } - lemma LemmaEquivRelLift(eq: (T, T) -> bool) - ensures EquivalenceRelation(Equal(eq)) - - function Return(x: T): W { - Result(x, "") + function ToSeq(o: Option): seq { + match o + case None => [] + case Some(v) => [v] } - function Join(ww: W>): W { - Result((ww.value).value, (ww.value).log + ww.log) + function ToSet(o: Option): set { + match o + case None => {} + case Some(v) => {v} } +} - /* Functoriality of Map */ - lemma LemmaMapFunction(eq: (T, T) -> bool, f: S -> T, g: S -> T) {} - - lemma LemmaMapFunctorial(eq: (U, U) -> bool, f: S -> T, g: T -> U, w: W) {} - - lemma LemmaMapIdentity(eq: (T, T) -> bool, id: T -> T) {} - /* Naturality of Return and Join */ - lemma LemmaReturnNaturality(eq: (T, T) -> bool, f: S -> T, x: S) {} +module {:options "-functionSyntax:4"} Either { + import Option - lemma LemmaJoinNaturality(eq: (T, T) -> bool, f: S -> T, ww: W>) {} + datatype Either<+S,+T> = Left(left: S) | Right(right: T) - /* Monad laws */ - lemma LemmaUnitalityJoin(eq: (T, T) -> bool, w: W) {} + function ReturnLeft(v: S): Either { + Either.Left(v) + } - lemma LemmaAssociativityJoin(eq: (T, T) -> bool, www: W>>) {} + function ReturnRight(v: T): Either { + Either.Right(v) + } - /********************************************************** - * - * Wrapper - * - ***********************************************************/ + predicate IsLeft(e: Either) { + e.Left? + } - /* Get and Set */ - function GetValue(w: W): T { - w.value + predicate IsRight(e: Either) { + e.Right? } - function GetLog(w: W): string { - w.log + function FindLeft(e: Either): Option.Option { + match e + case Left(v) => Option.Some(v) + case Right(v) => Option.None } - function Result(v: T, s: string): W { - W.Result(v, s) + function FindRight(e: Either): Option.Option { + match e + case Left(v) => Option.None + case Right(v) => Option.Some(v) } -} -abstract module {:options "-functionSyntax:4"} Reader refines Monad { + function JoinRight(ee: Either>): Either { + match ee + case Left(v) => Either.Left(v) + case Right(v) => v + } - /********************************************************** - * - * Monad - * - ***********************************************************/ + function JoinLeft(ee: Either,T>): Either { + match ee + case Left(v) => v + case Right(v) => Either.Right(v) + } - type A(!new) + function MapLeft(f: S -> T): Either -> Either { + (e: Either) => + match e + case Left(v) => Either.Left(f(v)) + case Right(v) => Either.Right(v) + } - datatype W = Reader(f: A -> T) + function MapRight(f: T -> U): Either -> Either { + (e: Either) => + match e + case Left(v) => Either.Left(v) + case Right(v) => Either.Right(f(v)) + } - function Map(f: S -> T): W -> W { - (w: W) => Reader(a => f((w.f)(a))) + function Map(f: S1 -> S2, g: T1 -> T2): Either -> Either { + (e: Either) => + match e + case Left(v) => Either.Left(f(v)) + case Right(v) => Either.Right(g(v)) } - - ghost function Equal(eq: (T, T) -> bool): (W, W) -> bool - { - (w1: W, w2: W) => - forall a: A :: eq(w1.f(a), w2.f(a)) + + function Fold(f: S -> U, g: T -> U): Either -> U { + (e: Either) => + match e + case Left(v) => f(v) + case Right(v) => g(v) } - lemma LemmaEquivRelLift(eq: (T, T) -> bool) - ensures EquivalenceRelation(Equal(eq)) - - function Return(x: T): W { - Reader(a => x) + function Equal(eql: (S, S) -> bool, eqr: (T, T) -> bool): (Either, Either) -> bool { + (e1: Either, e2: Either) => + match (e1, e2) + case (Left(v1), Left(v2)) => eql(v1, v2) + case (Right(v1), Right(v2)) => eqr(v1, v2) + case _ => false } - function Join(ww: W>): W{ - Reader(a => (ww.f(a)).f(a)) + function Compare(cmpl: (S, S) -> int, cmpr: (T, T) -> int): (Either, Either) -> int { + (e1: Either, e2: Either) => + match (e1, e2) + case (Left(v1), Left(v2)) => cmpl(v1, v2) + case (Right(v1), Right(v2)) => cmpr(v1, v2) + case (Left(_), Right(_)) => -1 + case (Right(_), Left(_)) => 1 } +} - /* Functoriality of Map */ - lemma LemmaMapFunction(eq: (T, T) -> bool, f: S -> T, g: S -> T) {} +module {:options "-functionSyntax:4"} Reader { + datatype Reader<-X,+T> = Reader(f: X -> T) - lemma LemmaMapFunctorial(eq: (U, U) -> bool, f: S -> T, g: T -> U, w: W) {} + function Return(t: T): Reader { + Reader(x => t) + } - lemma LemmaMapIdentity(eq: (T, T) -> bool, id: T -> T) {} + function Bind(r: Reader, f: S -> Reader): Reader { + Reader(x => (f((r.f)(x)).f)(x)) + } - /* Naturality of Return and Join */ - lemma LemmaReturnNaturality(eq: (T, T) -> bool, f: S -> T, x: S) {} + function Join(rr: Reader>): Reader { + Reader(x => (rr.f(x)).f(x)) + } - lemma LemmaJoinNaturality(eq: (T, T) -> bool, f: S -> T, ww: W>) {} + function Map(f: S -> T): Reader -> Reader { + (r: Reader) => + Reader(x => f((r.f)(x))) + } - /* Monad laws */ - lemma LemmaUnitalityJoin(eq: (T, T) -> bool, w: W) {} + function MapContra(f: X -> Y): Reader -> Reader { + (r: Reader) => + Reader(x => r.f(f(x))) + } - lemma LemmaAssociativityJoin(eq: (T, T) -> bool, www: W>>) {} + function KleisliComposition(f: S -> Reader, g: T -> Reader): S -> Reader { + s => Bind(f(s), g) + } + ghost function Equal(eq: (T, T) -> bool): (Reader, Reader) -> bool + { + (r1: Reader, r2: Reader) => + forall x: X :: eq(r1.f(x), r2.f(x)) + } } diff --git a/src/Wrappers.dll b/src/Wrappers.dll index b1ab301ce43e9872b7d6147b1050af89b1f01a9b..89c77582bd820adfdba3901940ab59719d8a465b 100644 GIT binary patch literal 202240 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

Zzxov@$%ZoOslf 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%0AgZUOpaWma%4DTCS(8_g6mS?d<@Do)K{(2 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

(?85JyiZNe17%)cgXsFDR6$% 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 v!Ns|9+4eIfA<0hejeo>`n%@hcVZmp+T-^SO = Result(value: T, log: string) - - function Return(v: T): Writer { - Result(v, "") - } - - function Bind(w: Writer, f: S -> Writer): Writer { - Writer.Result(f(w.value).value, w.log + f(w.value).log) - } - - function Join(ww: Writer>): Writer { - Result((ww.value).value, (ww.value).log + ww.log) - } - - function Map(f: S -> T): Writer -> Writer { - (w: Writer) => Writer.Result(f(w.value), w.log) - } - - function Composition(f: S -> Writer, g: T -> Writer): S -> Writer { - s => Bind(f(s), g) - } - - /********************************************************** - * - * Get and set - * - ***********************************************************/ - - function GetValue(w: Writer): T { - w.value - } - - function GetLog(w: Writer): string { - w.log - } - - function Result(v: T, s: string): Writer { - Writer.Result(v, s) - } - - /********************************************************** - * - * Monad laws in terms of Join and Map - * - ***********************************************************/ - - lemma LemmaUnitalityJoin(w: Writer) - ensures Join(Map(Return)(w)) == w == Join(Return>(w)) - { - } - - lemma LemmaAssociativityJoin(www: Writer>>) - ensures Join(Map(Join)(www)) == Join(Join>(www)) - { - } - - /********************************************************** - * - * Monad laws in terms of Bind and Return - * - ***********************************************************/ - - lemma LemmaLeftUnitalityBind(v: S, f: S -> Writer) - ensures Bind(Return(v), f) == f(v) - { - } - - lemma LemmaRightUnitalityBind(w: Writer) - ensures Bind(w, Return) == w - { - } - - lemma LemmaAssociativityBind(w: Writer, f: S -> Writer, g: T -> Writer) - ensures Bind(Bind(w, f), g) == Bind(w, Composition(f, g)) - { - } - - /********************************************************** - * - * Monad laws in terms of (Kleisli) Composition and Return - * - ***********************************************************/ - - lemma LemmaAssociativityComposition(f: S -> Writer, g: T -> Writer, h: U -> Writer) - ensures forall s: S :: Composition(Composition(f, g), h)(s) == Composition(f, Composition(g, h))(s) - { - } - - lemma LemmaIdentityExtract(f: S -> Writer) - ensures forall s: S :: Composition(f, Return)(s) == f(s) == Composition(Return, f)(s) - { - } -} From a393e7cb29d4bb89c30e827f549ad45880336de8 Mon Sep 17 00:00:00 2001 From: stefan-aws Date: Fri, 3 Feb 2023 17:02:19 +0000 Subject: [PATCH 23/33] delete files --- src/Cowrappers.dll | Bin 140800 -> 0 bytes src/Cowrappers.runtimeconfig.json | 10 ---------- src/Functor.dll | Bin 136704 -> 0 bytes src/Functor.runtimeconfig.json | 10 ---------- src/Monad.dll | Bin 235008 -> 0 bytes src/Monad.runtimeconfig.json | 10 ---------- src/Wrappers.dll | Bin 202240 -> 0 bytes src/Wrappers.runtimeconfig.json | 10 ---------- 8 files changed, 40 deletions(-) delete mode 100644 src/Cowrappers.dll delete mode 100644 src/Cowrappers.runtimeconfig.json delete mode 100644 src/Functor.dll delete mode 100644 src/Functor.runtimeconfig.json delete mode 100644 src/Monad.dll delete mode 100644 src/Monad.runtimeconfig.json delete mode 100644 src/Wrappers.dll delete mode 100644 src/Wrappers.runtimeconfig.json diff --git a/src/Cowrappers.dll b/src/Cowrappers.dll deleted file mode 100644 index 0edc23f5dea7207bff5b4088963d669d9ba84302..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 140800 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 diff --git a/src/Functor.runtimeconfig.json b/src/Functor.runtimeconfig.json deleted file mode 100644 index c9fdac56..00000000 --- a/src/Functor.runtimeconfig.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "runtimeOptions": { - "tfm": "net6.0", - "framework": { - "name": "Microsoft.NETCore.App", - "version": "6.0.0", - "rollForward": "LatestMinor" - } - } -} diff --git a/src/Monad.dll b/src/Monad.dll deleted file mode 100644 index 7b67735044f16d7b5c7220d3bded46aaef1198a7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 235008 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 Xg`dQa9}VPAf$mkv`{bWrJPG`N9F`wr diff --git a/src/Monad.runtimeconfig.json b/src/Monad.runtimeconfig.json deleted file mode 100644 index c9fdac56..00000000 --- a/src/Monad.runtimeconfig.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "runtimeOptions": { - "tfm": "net6.0", - "framework": { - "name": "Microsoft.NETCore.App", - "version": "6.0.0", - "rollForward": "LatestMinor" - } - } -} diff --git a/src/Wrappers.dll b/src/Wrappers.dll deleted file mode 100644 index 89c77582bd820adfdba3901940ab59719d8a465b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 202240 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

Zzxov@$%ZoOslf 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%0AgZUOpaWma%4DTCS(8_g6mS?d<@Do)K{(2 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 lWA5_irWN_`2Y~}u;r^HYQ}4t5!BXiQ Date: Fri, 3 Feb 2023 17:31:45 +0000 Subject: [PATCH 24/33] notation --- src/Comonad.dfy | 74 +++++++------- src/Cowrappers.dfy | 7 ++ src/Cowrappers.dll | Bin 0 -> 140800 bytes src/Cowrappers.runtimeconfig.json | 10 ++ src/Functor.dfy | 12 +-- src/Monad.dfy | 154 +++++++++++++++--------------- 6 files changed, 140 insertions(+), 117 deletions(-) create mode 100644 src/Cowrappers.dll create mode 100644 src/Cowrappers.runtimeconfig.json diff --git a/src/Comonad.dfy b/src/Comonad.dfy index 50967947..13f56d16 100644 --- a/src/Comonad.dfy +++ b/src/Comonad.dfy @@ -1,31 +1,38 @@ +// RUN: %dafny /compile:0 "%s" + +/******************************************************************************* +* Copyright by the contributors to the Dafny Project +* SPDX-License-Identifier: MIT +*******************************************************************************/ + include "Functor.dfy" include "Cowrappers.dfy" abstract module {:options "-functionSyntax:4"} Comonad refines Functor { /* Structure */ - type W(!new) + type F(!new) - function Extract(w: W): T + function Extract(w: F): T - function Duplicate(w: W): W> + function Duplicate(w: F): F> - /* Naturality of Extract and Duplicate */ - lemma LemmaExtractNaturality(eq: (T, T) -> bool, f: S -> T, w: W) + /* Naturality */ + lemma LemmaExtractNaturality(eq: (T, T) -> bool, f: S -> T, w: F) requires EquivalenceRelation(eq) ensures eq(f(Extract(w)), Extract(Map(f)(w))) - lemma LemmaDuplicateNaturality(eq: (T, T) -> bool, f: S -> T, w: W) + lemma LemmaDuplicateNaturality(eq: (T, T) -> bool, f: S -> T, w: F) requires EquivalenceRelation(eq) ensures EquivalenceRelation(Equal(eq)) ensures Equal(Equal(eq))(Duplicate(Map(f)(w)), Map(Map(f))(Duplicate(w))) - /* Comonad laws */ - lemma LemmaCoUnitalityExtract(eq: (T, T) -> bool, w: W) + /* Counitality and Coassociativity */ + lemma LemmaCoUnitalityExtract(eq: (T, T) -> bool, w: F) requires EquivalenceRelation(eq) ensures && Equal(eq)(Map(Extract)(Duplicate(w)), w) && Equal(eq)(w, Extract(Duplicate(w))) - lemma LemmaCoAssociativityDuplicate(eq: (T, T) -> bool, w: W) + lemma LemmaCoAssociativityDuplicate(eq: (T, T) -> bool, w: F) requires && EquivalenceRelation(eq) && EquivalenceRelation(Equal(eq)) && EquivalenceRelation(Equal(Equal(eq))) @@ -43,13 +50,13 @@ abstract module {:options "-functionSyntax:4"} CoreaderRightComonad refines Como ensures EquivalenceRelation(eql) /* Functor structure */ - type W(!new) = Coreader.Coreader + type F(!new) = Coreader.Coreader - function Map(f: S -> T): W -> W { + function Map(f: S -> T): F -> F { Coreader.MapRight(f) } - ghost function Equal(eq: (T, T) -> bool): (W, W) -> bool { + ghost function Equal(eq: (T, T) -> bool): (F, F) -> bool { Coreader.Equal(eql, eq) } @@ -63,7 +70,7 @@ abstract module {:options "-functionSyntax:4"} CoreaderRightComonad refines Como LemmaEquiv(); } - lemma LemmaMapFunctorial(eq: (U, U) -> bool, f: S -> T, g: T -> U, w: W) { + lemma LemmaMapFunctorial(eq: (U, U) -> bool, f: S -> T, g: T -> U, w: F) { LemmaEquiv(); } @@ -72,28 +79,28 @@ abstract module {:options "-functionSyntax:4"} CoreaderRightComonad refines Como } /* Comonad structure */ - function Extract(w: W): T { + function Extract(w: F): T { Coreader.ExtractRight(w) } - function Duplicate(w: W): W> { + function Duplicate(w: F): F> { Coreader.DuplicateLeft(w) } - /* Naturality of Extract and Duplicate */ - lemma LemmaExtractNaturality(eq: (T, T) -> bool, f: S -> T, w: W) { + /* Naturality */ + lemma LemmaExtractNaturality(eq: (T, T) -> bool, f: S -> T, w: F) { } - lemma LemmaDuplicateNaturality(eq: (T, T) -> bool, f: S -> T, w: W) { + lemma LemmaDuplicateNaturality(eq: (T, T) -> bool, f: S -> T, w: F) { LemmaEquiv(); } - /* Comonad laws */ - lemma LemmaCoUnitalityExtract(eq: (T, T) -> bool, w: W) { + /* Counitality and Coassociativity */ + lemma LemmaCoUnitalityExtract(eq: (T, T) -> bool, w: F) { LemmaEquiv(); } - lemma LemmaCoAssociativityDuplicate(eq: (T, T) -> bool, w: W) { + lemma LemmaCoAssociativityDuplicate(eq: (T, T) -> bool, w: F) { LemmaEquiv(); } } @@ -109,13 +116,13 @@ abstract module {:options "-functionSyntax:4"} CoreaderLeftComonad refines Comon ensures EquivalenceRelation(eqr) /* Functor structure */ - type W(!new) = Coreader.Coreader + type F(!new) = Coreader.Coreader - function Map(f: S -> T): W -> W { + function Map(f: S -> T): F -> F { Coreader.MapLeft(f) } - ghost function Equal(eq: (T, T) -> bool): (W, W) -> bool { + ghost function Equal(eq: (T, T) -> bool): (F, F) -> bool { Coreader.Equal(eq, eqr) } @@ -129,7 +136,7 @@ abstract module {:options "-functionSyntax:4"} CoreaderLeftComonad refines Comon LemmaEquiv(); } - lemma LemmaMapFunctorial(eq: (U, U) -> bool, f: S -> T, g: T -> U, w: W) { + lemma LemmaMapFunctorial(eq: (U, U) -> bool, f: S -> T, g: T -> U, w: F) { LemmaEquiv(); } @@ -138,29 +145,28 @@ abstract module {:options "-functionSyntax:4"} CoreaderLeftComonad refines Comon } /* Comonad structure */ - function Extract(w: W): T { + function Extract(w: F): T { Coreader.ExtractLeft(w) } - function Duplicate(w: W): W> { + function Duplicate(w: F): F> { Coreader.DuplicateRight(w) } - /* Naturality of Extract and Duplicate */ - lemma LemmaExtractNaturality(eq: (T, T) -> bool, f: S -> T, w: W) { + /* Naturality */ + lemma LemmaExtractNaturality(eq: (T, T) -> bool, f: S -> T, w: F) { } - lemma LemmaDuplicateNaturality(eq: (T, T) -> bool, f: S -> T, w: W) { + lemma LemmaDuplicateNaturality(eq: (T, T) -> bool, f: S -> T, w: F) { LemmaEquiv(); } - /* Comonad laws */ - lemma LemmaCoUnitalityExtract(eq: (T, T) -> bool, w: W) { + /* Counitality and Coassociativity */ + lemma LemmaCoUnitalityExtract(eq: (T, T) -> bool, w: F) { LemmaEquiv(); } - lemma LemmaCoAssociativityDuplicate(eq: (T, T) -> bool, w: W) { + lemma LemmaCoAssociativityDuplicate(eq: (T, T) -> bool, w: F) { LemmaEquiv(); } - } \ No newline at end of file diff --git a/src/Cowrappers.dfy b/src/Cowrappers.dfy index effcfd66..c94051ab 100644 --- a/src/Cowrappers.dfy +++ b/src/Cowrappers.dfy @@ -1,3 +1,10 @@ +// RUN: %dafny /compile:0 "%s" + +/******************************************************************************* +* Copyright by the contributors to the Dafny Project +* SPDX-License-Identifier: MIT +*******************************************************************************/ + module {:options "-functionSyntax:4"} Coreader { datatype Coreader<+S,+T> = Coreader(left: S, right: T) diff --git a/src/Cowrappers.dll b/src/Cowrappers.dll new file mode 100644 index 0000000000000000000000000000000000000000..970ba2fb69389b2eaff0e080cecb31c1da4b4f00 GIT binary patch literal 140800 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̔yTe@eif$#7q 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 I|DFW?7x51(H2?qr literal 0 HcmV?d00001 diff --git a/src/Cowrappers.runtimeconfig.json b/src/Cowrappers.runtimeconfig.json new file mode 100644 index 00000000..c9fdac56 --- /dev/null +++ b/src/Cowrappers.runtimeconfig.json @@ -0,0 +1,10 @@ +{ + "runtimeOptions": { + "tfm": "net6.0", + "framework": { + "name": "Microsoft.NETCore.App", + "version": "6.0.0", + "rollForward": "LatestMinor" + } + } +} diff --git a/src/Functor.dfy b/src/Functor.dfy index 5268b35c..16244a74 100644 --- a/src/Functor.dfy +++ b/src/Functor.dfy @@ -13,11 +13,11 @@ abstract module {:options "-functionSyntax:4"} Functor { import opened Relations /* Structure */ - type W(!new) + type F(!new) - function Map(f: S -> T): W -> W + function Map(f: S -> T): F -> F - ghost function Equal(eq: (T, T) -> bool): (W, W) -> bool + ghost function Equal(eq: (T, T) -> bool): (F, F) -> bool requires EquivalenceRelation(eq) /* Properties of Equal */ @@ -29,14 +29,14 @@ abstract module {:options "-functionSyntax:4"} Functor { lemma LemmaMapFunction(eq: (T, T) -> bool, f: S -> T, g: S -> T) requires EquivalenceRelation(eq) requires forall x: S :: eq(f(x), g(x)) - ensures forall w: W :: Equal(eq)(Map(f)(w), Map(g)(w)) + ensures forall w: F :: Equal(eq)(Map(f)(w), Map(g)(w)) - lemma LemmaMapFunctorial(eq: (U, U) -> bool, f: S -> T, g: T -> U, w: W) + lemma LemmaMapFunctorial(eq: (U, U) -> bool, f: S -> T, g: T -> U, w: F) requires EquivalenceRelation(eq) ensures Equal(eq)(Map(Composition(f, g))(w), Composition(Map(f), Map(g))(w)) lemma LemmaMapIdentity(eq: (T, T) -> bool, id: T -> T) requires EquivalenceRelation(eq) requires forall x: T :: eq(id(x), x) - ensures forall w: W :: Equal(eq)(Map(id)(w), w) + ensures forall w: F :: Equal(eq)(Map(id)(w), w) } \ No newline at end of file diff --git a/src/Monad.dfy b/src/Monad.dfy index 9653275b..bde877fa 100644 --- a/src/Monad.dfy +++ b/src/Monad.dfy @@ -10,27 +10,27 @@ include "Wrappers.dfy" abstract module {:options "-functionSyntax:4"} Monad refines Functor { /* Structure */ - type W(!new) + type F(!new) - function Return(x: T): W + function Return(x: T): F - function Join(ww: W>): W + function Join(ww: F>): F - /* Naturality of Return and Join */ + /* Naturality */ lemma LemmaReturnNaturality(eq: (T, T) -> bool, f: S -> T, x: S) requires EquivalenceRelation(eq) ensures Equal(eq)(Map(f)(Return(x)), Return(f(x))) - lemma LemmaJoinNaturality(eq: (T, T) -> bool, f: S -> T, ww: W>) + lemma LemmaJoinNaturality(eq: (T, T) -> bool, f: S -> T, ww: F>) requires EquivalenceRelation(eq) ensures Equal(eq)(Join(Map(Map(f))(ww)), Map(f)(Join(ww))) - /* Monad laws */ - lemma LemmaUnitalityJoin(eq: (T, T) -> bool, w: W) + /* Unitality and Associativity */ + lemma LemmaUnitalityJoin(eq: (T, T) -> bool, w: F) requires EquivalenceRelation(eq) ensures Equal(eq)(Join(Map(Return)(w)), w) && Equal(eq)(w, Join(Return(w))) - lemma LemmaAssociativityJoin(eq: (T, T) -> bool, www: W>>) + lemma LemmaAssociativityJoin(eq: (T, T) -> bool, www: F>>) requires EquivalenceRelation(eq) ensures Equal(eq)(Join(Map(Join)(www)), Join(Join(www))) } @@ -47,13 +47,13 @@ abstract module {:options "-functionSyntax:4"} ResultMonad refines Monad { ensures EquivalenceRelation(eqe) /* Functor structure */ - type W(!new) = Result.Result + type F(!new) = Result.Result - function Map(f: S -> T): W -> W { + function Map(f: S -> T): F -> F { Result.Map(f) } - ghost function Equal(eq: (T, T) -> bool): (W, W) -> bool { + ghost function Equal(eq: (T, T) -> bool): (F, F) -> bool { Result.Equal(eq, eqe) } @@ -67,7 +67,7 @@ abstract module {:options "-functionSyntax:4"} ResultMonad refines Monad { LemmaEquiv(); } - lemma LemmaMapFunctorial(eq: (U, U) -> bool, f: S -> T, g: T -> U, w: W) { + lemma LemmaMapFunctorial(eq: (U, U) -> bool, f: S -> T, g: T -> U, w: F) { LemmaEquiv(); } @@ -76,28 +76,28 @@ abstract module {:options "-functionSyntax:4"} ResultMonad refines Monad { } /* Monad structure */ - function Return(x: T): W { + function Return(x: T): F { Result.Return(x) } - function Join(ww: W>): W { + function Join(ww: F>): F { Result.Join(ww) } - /* Naturality of Return and Join */ + /* Naturality */ lemma LemmaReturnNaturality(eq: (T, T) -> bool, f: S -> T, x: S) { } - lemma LemmaJoinNaturality(eq: (T, T) -> bool, f: S -> T, ww: W>) { + lemma LemmaJoinNaturality(eq: (T, T) -> bool, f: S -> T, ww: F>) { LemmaEquiv(); } - /* Monad laws */ - lemma LemmaUnitalityJoin(eq: (T, T) -> bool, w: W) { + /* Unitality and Associativity */ + lemma LemmaUnitalityJoin(eq: (T, T) -> bool, w: F) { LemmaEquiv(); } - lemma LemmaAssociativityJoin(eq: (T, T) -> bool, www: W>>) { + lemma LemmaAssociativityJoin(eq: (T, T) -> bool, www: F>>) { LemmaEquiv(); } } @@ -107,13 +107,13 @@ module {:options "-functionSyntax:4"} WriterMonad refines Monad { import Writer /* Functor structure */ - type W(!new) = Writer.Writer + type F(!new) = Writer.Writer - function Map(f: S -> T): W -> W { + function Map(f: S -> T): F -> F { Writer.Map(f) } - ghost function Equal(eq: (T, T) -> bool): (W, W) -> bool { + ghost function Equal(eq: (T, T) -> bool): (F, F) -> bool { Writer.Equal(eq) } @@ -125,33 +125,33 @@ module {:options "-functionSyntax:4"} WriterMonad refines Monad { lemma LemmaMapFunction(eq: (T, T) -> bool, f: S -> T, g: S -> T) { } - lemma LemmaMapFunctorial(eq: (U, U) -> bool, f: S -> T, g: T -> U, w: W) { + lemma LemmaMapFunctorial(eq: (U, U) -> bool, f: S -> T, g: T -> U, w: F) { } lemma LemmaMapIdentity(eq: (T, T) -> bool, id: T -> T) { } /* Monad structure */ - function Return(x: T): W { + function Return(x: T): F { Writer.Return(x) } - function Join(ww: W>): W { + function Join(ww: F>): F { Writer.Join(ww) } - /* Naturality of Return and Join */ + /* Naturality */ lemma LemmaReturnNaturality(eq: (T, T) -> bool, f: S -> T, x: S) { } - lemma LemmaJoinNaturality(eq: (T, T) -> bool, f: S -> T, ww: W>) { + lemma LemmaJoinNaturality(eq: (T, T) -> bool, f: S -> T, ww: F>) { } - /* Monad laws */ - lemma LemmaUnitalityJoin(eq: (T, T) -> bool, w: W) { + /* Unitality and Associativity */ + lemma LemmaUnitalityJoin(eq: (T, T) -> bool, w: F) { } - lemma LemmaAssociativityJoin(eq: (T, T) -> bool, www: W>>) { + lemma LemmaAssociativityJoin(eq: (T, T) -> bool, www: F>>) { } } @@ -160,13 +160,13 @@ module {:options "-functionSyntax:4"} OptionMonad refines Monad { import Option /* Functor structure */ - type W(!new) = Option.Option + type F(!new) = Option.Option - function Map(f: S -> T): W -> W { + function Map(f: S -> T): F -> F { Option.Map(f) } - ghost function Equal(eq: (T, T) -> bool): (W, W) -> bool { + ghost function Equal(eq: (T, T) -> bool): (F, F) -> bool { Option.Equal(eq) } @@ -178,33 +178,33 @@ module {:options "-functionSyntax:4"} OptionMonad refines Monad { lemma LemmaMapFunction(eq: (T, T) -> bool, f: S -> T, g: S -> T) { } - lemma LemmaMapFunctorial(eq: (U, U) -> bool, f: S -> T, g: T -> U, w: W) { + lemma LemmaMapFunctorial(eq: (U, U) -> bool, f: S -> T, g: T -> U, w: F) { } lemma LemmaMapIdentity(eq: (T, T) -> bool, id: T -> T) { } /* Monad structure */ - function Return(x: T): W { + function Return(x: T): F { Option.Return(x) } - function Join(ww: W>): W { + function Join(ww: F>): F { Option.Join(ww) } - /* Naturality of Return and Join */ + /* Naturality */ lemma LemmaReturnNaturality(eq: (T, T) -> bool, f: S -> T, x: S) { } - lemma LemmaJoinNaturality(eq: (T, T) -> bool, f: S -> T, ww: W>) { + lemma LemmaJoinNaturality(eq: (T, T) -> bool, f: S -> T, ww: F>) { } - /* Monad laws */ - lemma LemmaUnitalityJoin(eq: (T, T) -> bool, w: W) { + /* Unitality and Associativity */ + lemma LemmaUnitalityJoin(eq: (T, T) -> bool, w: F) { } - lemma LemmaAssociativityJoin(eq: (T, T) -> bool, www: W>>) { + lemma LemmaAssociativityJoin(eq: (T, T) -> bool, www: F>>) { } } @@ -220,13 +220,13 @@ abstract module {:options "-functionSyntax:4"} EitherRightMonad refines Monad { ensures EquivalenceRelation(eql) /* Functor structure */ - type W(!new) = Either.Either + type F(!new) = Either.Either - function Map(f: S -> T): W -> W { + function Map(f: S -> T): F -> F { Either.MapRight(f) } - ghost function Equal(eq: (T, T) -> bool): (W, W) -> bool { + ghost function Equal(eq: (T, T) -> bool): (F, F) -> bool { Either.Equal(eql, eq) } @@ -240,7 +240,7 @@ abstract module {:options "-functionSyntax:4"} EitherRightMonad refines Monad { LemmaEquiv(); } - lemma LemmaMapFunctorial(eq: (U, U) -> bool, f: S -> T, g: T -> U, w: W) { + lemma LemmaMapFunctorial(eq: (U, U) -> bool, f: S -> T, g: T -> U, w: F) { LemmaEquiv(); } @@ -249,28 +249,28 @@ abstract module {:options "-functionSyntax:4"} EitherRightMonad refines Monad { } /* Monad structure */ - function Return(x: T): W { + function Return(x: T): F { Either.ReturnRight(x) } - function Join(ww: W>): W { + function Join(ww: F>): F { Either.JoinRight(ww) } - /* Naturality of Return and Join */ + /* Naturality */ lemma LemmaReturnNaturality(eq: (T, T) -> bool, f: S -> T, x: S) { } - lemma LemmaJoinNaturality(eq: (T, T) -> bool, f: S -> T, ww: W>) { + lemma LemmaJoinNaturality(eq: (T, T) -> bool, f: S -> T, ww: F>) { LemmaEquiv(); } - /* Monad laws */ - lemma LemmaUnitalityJoin(eq: (T, T) -> bool, w: W) { + /* Unitality and Associativity */ + lemma LemmaUnitalityJoin(eq: (T, T) -> bool, w: F) { LemmaEquiv(); } - lemma LemmaAssociativityJoin(eq: (T, T) -> bool, www: W>>) { + lemma LemmaAssociativityJoin(eq: (T, T) -> bool, www: F>>) { LemmaEquiv(); } } @@ -287,13 +287,13 @@ abstract module {:options "-functionSyntax:4"} EitherLeftMonad refines Monad { ensures EquivalenceRelation(eqr) /* Functor structure */ - type W(!new) = Either.Either + type F(!new) = Either.Either - function Map(f: S -> T): W -> W { + function Map(f: S -> T): F -> F { Either.MapLeft(f) } - ghost function Equal(eq: (T, T) -> bool): (W, W) -> bool { + ghost function Equal(eq: (T, T) -> bool): (F, F) -> bool { Either.Equal(eq, eqr) } @@ -307,7 +307,7 @@ abstract module {:options "-functionSyntax:4"} EitherLeftMonad refines Monad { LemmaEquiv(); } - lemma LemmaMapFunctorial(eq: (U, U) -> bool, f: S -> T, g: T -> U, w: W) { + lemma LemmaMapFunctorial(eq: (U, U) -> bool, f: S -> T, g: T -> U, w: F) { LemmaEquiv(); } @@ -316,28 +316,28 @@ abstract module {:options "-functionSyntax:4"} EitherLeftMonad refines Monad { } /* Monad structure */ - function Return(x: T): W { + function Return(x: T): F { Either.ReturnLeft(x) } - function Join(ww: W>): W { + function Join(ww: F>): F { Either.JoinLeft(ww) } - /* Naturality of Return and Join */ + /* Naturality */ lemma LemmaReturnNaturality(eq: (T, T) -> bool, f: S -> T, x: S) { } - lemma LemmaJoinNaturality(eq: (T, T) -> bool, f: S -> T, ww: W>) { + lemma LemmaJoinNaturality(eq: (T, T) -> bool, f: S -> T, ww: F>) { LemmaEquiv(); } - /* Monad laws */ - lemma LemmaUnitalityJoin(eq: (T, T) -> bool, w: W) { + /* Unitality and Associativity */ + lemma LemmaUnitalityJoin(eq: (T, T) -> bool, w: F) { LemmaEquiv(); } - lemma LemmaAssociativityJoin(eq: (T, T) -> bool, www: W>>) { + lemma LemmaAssociativityJoin(eq: (T, T) -> bool, www: F>>) { LemmaEquiv(); } } @@ -349,26 +349,26 @@ abstract module {:options "-functionSyntax:4"} ReaderMonad refines Monad { type X(!new) /* Functor structure */ - type W(!new) = Reader.Reader + type F(!new) = Reader.Reader - function Map(f: S -> T): W -> W { + function Map(f: S -> T): F -> F { Reader.Map(f) } - ghost function Equal(eq: (T, T) -> bool): (W, W) -> bool { + ghost function Equal(eq: (T, T) -> bool): (F, F) -> bool { Reader.Equal(eq) } /* Properties of Equal */ lemma LemmaEquivRelLift(eq: (T, T) -> bool) { - forall w: W ensures Equal(eq)(w, w) { + forall w: F ensures Equal(eq)(w, w) { forall x: X ensures eq(w.f(x), w.f(x)) { assert eq(w.f(x), w.f(x)); } } assert Reflexive(Equal(eq)); - forall v, w: W ensures Equal(eq)(v, w) <==> Equal(eq)(w, v) { + forall v, w: F ensures Equal(eq)(v, w) <==> Equal(eq)(w, v) { calc { Equal(eq)(v, w); <==> @@ -381,7 +381,7 @@ abstract module {:options "-functionSyntax:4"} ReaderMonad refines Monad { } assert Symmetric(Equal(eq)); - forall v, w, u: W ensures Equal(eq)(v, w) && Equal(eq)(w, u) ==> Equal(eq)(v, u) { + forall v, w, u: F ensures Equal(eq)(v, w) && Equal(eq)(w, u) ==> Equal(eq)(v, u) { if Equal(eq)(v, w) && Equal(eq)(w, u) { forall x: X ensures eq(v.f(x), u.f(x)) { calc { @@ -399,33 +399,33 @@ abstract module {:options "-functionSyntax:4"} ReaderMonad refines Monad { lemma LemmaMapFunction(eq: (T, T) -> bool, f: S -> T, g: S -> T) { } - lemma LemmaMapFunctorial(eq: (U, U) -> bool, f: S -> T, g: T -> U, w: W) { + lemma LemmaMapFunctorial(eq: (U, U) -> bool, f: S -> T, g: T -> U, w: F) { } lemma LemmaMapIdentity(eq: (T, T) -> bool, id: T -> T) { } /* Monad structure */ - function Return(x: T): W { + function Return(x: T): F { Reader.Return(x) } - function Join(ww: W>): W { + function Join(ww: F>): F { Reader.Join(ww) } - /* Naturality of Return and Join */ + /* Naturality */ lemma LemmaReturnNaturality(eq: (T, T) -> bool, f: S -> T, x: S) { } - lemma LemmaJoinNaturality(eq: (T, T) -> bool, f: S -> T, ww: W>) { + lemma LemmaJoinNaturality(eq: (T, T) -> bool, f: S -> T, ww: F>) { } - /* Monad laws */ - lemma LemmaUnitalityJoin(eq: (T, T) -> bool, w: W) { + /* Unitality and Associativity */ + lemma LemmaUnitalityJoin(eq: (T, T) -> bool, w: F) { } - lemma LemmaAssociativityJoin(eq: (T, T) -> bool, www: W>>) { + lemma LemmaAssociativityJoin(eq: (T, T) -> bool, www: F>>) { } } From e734bd83ad548ffa340abd30d1b0e52578a1871c Mon Sep 17 00:00:00 2001 From: stefan-aws Date: Fri, 3 Feb 2023 18:42:05 +0000 Subject: [PATCH 25/33] doc --- examples/Wrappers.dfy | 6 +- src/Wrappers.dfy | 211 ++++++++++++++++++++++++++---------------- 2 files changed, 135 insertions(+), 82 deletions(-) diff --git a/examples/Wrappers.dfy b/examples/Wrappers.dfy index f9f5b111..2447a81f 100644 --- a/examples/Wrappers.dfy +++ b/examples/Wrappers.dfy @@ -9,7 +9,9 @@ include "../src/Wrappers.dfy" module Demo { - import opened Wrappers + import opened Option + import opened Result + import opened Outcome // ------ Demo for Option ---------------------------- // We use Option when we don't need to pass around a reason for the failure, @@ -60,7 +62,7 @@ module Demo { // Sometimes we want to go from Option to Result: method FindName(m: MyMap) returns (res: Result) { // Will return a default error message in case of None: - res := m.Get("name").ToResult(); + res := OfOption(m.Get("name")); // We can also match on the option to write a custom error: match m.Get("name") case Some(n) => res := Success(n); diff --git a/src/Wrappers.dfy b/src/Wrappers.dfy index 5cf5730f..939e82f8 100644 --- a/src/Wrappers.dfy +++ b/src/Wrappers.dfy @@ -6,8 +6,73 @@ *******************************************************************************/ module {:options "-functionSyntax:4"} Result { - datatype Result = | Success(value: T) | Failure(error: E) + import Option + datatype Result = | Success(value: T) | Failure(error: E) { + + predicate IsSuccess() { + Success? + } + + predicate IsFailure() { + Failure? + } + + function GetValue(): T + requires Success? + { + value + } + + function GetValueDefault(default: T): T { + match this + case Success(v) => v + case Failure(_) => default + } + + function PropagateFailure(): Result + requires Failure? + { + Failure(error) + } + + function GetError(): E + requires Failure? + { + error + } + + function Extract(): T + requires Success? + { + value + } + + function ToOption(): Option.Option { + match this + case Success(v) => Option.Some(v) + case Failure(_) => Option.None + } + + function ToSeq(): seq { + match this + case Success(v) => [v] + case Failure(_) => [] + } + + function ToSet(): set { + match this + case Success(v) => {v} + case Failure(_) => {} + } + } + + function OfOption(o: Option.Option): Result { + match o + case Some(v) => Success(v) + case None => Failure("Option is None") + } + function Return(v: T): Result { Result.Success(v) } @@ -18,7 +83,7 @@ module {:options "-functionSyntax:4"} Result { case Failure(e) => Result.Failure(e) } - function Join(rr: Result,E>): Result { + function Join(rr: Result,E>): Result { match rr case Success(v) => v case Failure(e) => Result.Failure(e) @@ -50,32 +115,6 @@ module {:options "-functionSyntax:4"} Result { Result.Failure(e) } - predicate IsSuccess(r: Result) { - r.Success? - } - - predicate IsFailure(r: Result) { - r.Failure? - } - - function GetValue(r: Result): T - requires r.Success? - { - r.value - } - - function GetValueDefault(r: Result, default: T): T { - match r - case Success(v) => v - case Failure(_) => default - } - - function GetError(r: Result): E - requires r.Failure? - { - r.error - } - function Fold(f: T -> U, g: E -> U): Result -> U { (r: Result) => match r @@ -99,18 +138,6 @@ module {:options "-functionSyntax:4"} Result { case (Success(_), Failure(_)) => -1 case (Failure(_), Success(_)) => 1 } - - function ToSeq(r: Result): seq { - match r - case Success(v) => [v] - case Failure(_) => [] - } - - function ToSet(r: Result): set { - match r - case Success(v) => {v} - case Failure(_) => {} - } } module {:options "-functionSyntax:4"} Writer { @@ -156,9 +183,47 @@ module {:options "-functionSyntax:4"} Writer { } module {:options "-functionSyntax:4"} Option { - import Result - - datatype Option<+T> = None | Some(value: T) + datatype Option<+T(==)> = None | Some(value: T) { + function GetValueDefault(default: T): T { + match this + case None => default + case Some(v) => v + } + + function GetValue(): T + requires Some? + { + value + } + + predicate IsFailure() { + None? + } + + function Extract(): T + requires Some? + { + value + } + + function PropagateFailure(): Option + requires None? + { + None + } + + function ToSeq(): seq { + match this + case None => [] + case Some(v) => [v] + } + + function ToSet(): set { + match this + case None => {} + case Some(v) => {v} + } + } function Return(v: T): Option { Option.Some(v) @@ -187,18 +252,6 @@ module {:options "-functionSyntax:4"} Option { function KleisliComposition(f: S -> Option, g: T-> Option): S -> Option { s => Bind(f(s), g) } - - function GetValueDefault(o: Option, default: T): T { - match o - case None => default - case Some(v) => v - } - - function GetValue(o: Option): T - requires o.Some? - { - o.value - } function Fold(u: U, f: T -> U): Option -> U { (o: Option) => @@ -223,31 +276,6 @@ module {:options "-functionSyntax:4"} Option { case (None, Some(_)) => -1 case (Some(_), None) => 1 } - - function ToResult(e: E): Option -> Result.Result { - (o: Option) => - match o - case Some(v) => Result.Success(v) - case None => Result.Failure(e) - } - - function ToOption(r: Result.Result): Option { - match r - case Success(v) => Some(v) - case Failure(_) => None() - } - - function ToSeq(o: Option): seq { - match o - case None => [] - case Some(v) => [v] - } - - function ToSet(o: Option): set { - match o - case None => {} - case Some(v) => {v} - } } @@ -378,3 +406,26 @@ module {:options "-functionSyntax:4"} Reader { } } +module {:options "-functionSyntax:4"} Outcome { + import Result + + datatype Outcome = Pass | Fail(error: E) { + predicate IsFailure() { + Fail? + } + // Note: PropagateFailure returns a Result, not an Outcome. + function PropagateFailure(): Result.Result + requires Fail? + { + Result.Failure(this.error) + } + // Note: no Extract method + } + + // A helper function to ensure a requirement is true at runtime + // :- Need(5 == |mySet|, "The set MUST have 5 elements.") + function Need(condition: bool, error: E): (result: Outcome) + { + if condition then Pass else Fail(error) + } +} \ No newline at end of file From fbe9872cd43851d3ca06d6f58e36edec3b2dc9ab Mon Sep 17 00:00:00 2001 From: stefan-aws Date: Fri, 3 Feb 2023 18:45:07 +0000 Subject: [PATCH 26/33] remove dll --- src/Cowrappers.dll | Bin 140800 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 src/Cowrappers.dll diff --git a/src/Cowrappers.dll b/src/Cowrappers.dll deleted file mode 100644 index 970ba2fb69389b2eaff0e080cecb31c1da4b4f00..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 140800 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̔yTe@eif$#7q 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 I|DFW?7x51(H2?qr From 6b125b4749380ea5db57d36ea1662a26c3571d42 Mon Sep 17 00:00:00 2001 From: stefan-aws Date: Fri, 3 Feb 2023 18:54:04 +0000 Subject: [PATCH 27/33] remove files --- src/Cowrappers.runtimeconfig.json | 10 -- src/Option.dfy | 175 ------------------------------ 2 files changed, 185 deletions(-) delete mode 100644 src/Cowrappers.runtimeconfig.json delete mode 100644 src/Option.dfy diff --git a/src/Cowrappers.runtimeconfig.json b/src/Cowrappers.runtimeconfig.json deleted file mode 100644 index c9fdac56..00000000 --- a/src/Cowrappers.runtimeconfig.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "runtimeOptions": { - "tfm": "net6.0", - "framework": { - "name": "Microsoft.NETCore.App", - "version": "6.0.0", - "rollForward": "LatestMinor" - } - } -} diff --git a/src/Option.dfy b/src/Option.dfy deleted file mode 100644 index 2d725ab0..00000000 --- a/src/Option.dfy +++ /dev/null @@ -1,175 +0,0 @@ -// RUN: %dafny /compile:0 "%s" - -/******************************************************************************* -* Copyright by the contributors to the Dafny Project -* SPDX-License-Identifier: MIT -*******************************************************************************/ -include "Wrappers.dfy" - -module {:options "-functionSyntax:4"} Option { - - import opened Wrappers - - /********************************************************** - * - * Monadic structure in terms of Return, Bind, Join, Map, Composition - * - ***********************************************************/ - - datatype Option<+T> = None | Some(value: T) - - function Return(v: T): Option { - Option.Some(v) - } - - function Bind(o: Option, f: S -> Option): Option { - match o - case None => Option.None - case Some(v) => f(v) - } - - function Join(oo: Option>): Option { - match oo - case None => Option.None - case Some(o) => o - } - - function Map(f: S -> T): Option -> Option - { - (o: Option) => - match o - case None => Option.None - case Some(v) => Option.Some(f(v)) - } - - function Composition(f: S -> Option, g: T-> Option): S -> Option { - s => Bind(f(s), g) - } - - /********************************************************** - * - * Get and Fold - * - ***********************************************************/ - - function GetValueDefault(o: Option, default: T): T { - match o - case None => default - case Some(v) => v - } - - function GetValue(o: Option): T - requires o.Some? - { - o.value - } - - function Fold(u: U, f: T -> U): Option -> U { - (o: Option) => - match o - case None => u - case Some(v) => f(v) - } - - /********************************************************** - * - * Comparison - * - ***********************************************************/ - - function Equal(eq: (T, T) -> bool): (Option, Option) -> bool { - (o1: Option, o2: Option) => - match (o1, o2) - case (Some(v1), Some(v2)) => eq(v1, v2) - case (None, None) => true - case _ => false - } - - function Compare(cmp: (T, T) -> int): (Option, Option) -> int { - (o1: Option, o2: Option) => - match (o1, o2) - case (Some(v1), Some(v2)) => cmp(v1, v2) - case (None, None) => 0 - case (None, Some(_)) => -1 - case (Some(_), None) => 1 - } - - /********************************************************** - * - * Conversion to other datatypes - * - ***********************************************************/ - - function ToResult(e: E): Option -> Result { - (o: Option) => - match o - case Some(v) => Success(v) - case None => Failure(e) - } - - function ToSeq(o: Option): seq { - match o - case None => [] - case Some(v) => [v] - } - - function ToSet(o: Option): set { - match o - case None => {} - case Some(v) => {v} - } - - /********************************************************** - * - * Monad laws in terms of Join and Map - * - ***********************************************************/ - - lemma LemmaUnitalityJoin(o: Option) - ensures Join(Map(Return)(o)) == o == Join(Return>(o)) - { - } - - lemma LemmaAssociativityJoin(ooo: Option>>) - ensures Join(Map(Join)(ooo)) == Join(Join>(ooo)) - { - } - - /********************************************************** - * - * Monad laws in terms of Bind and Return - * - ***********************************************************/ - - lemma LemmaLeftUnitalityBind(v: S, f: S -> Option) - ensures Bind(Return(v), f) == f(v) - { - } - - lemma LemmaRightUnitalityBind(o: Option) - ensures Bind(o, Return) == o - { - } - - lemma LemmaAssociativityBind(o: Option, f: S -> Option, g: T -> Option) - ensures Bind(Bind(o, f), g) == Bind(o, Composition(f, g)) - { - } - - /********************************************************** - * - * Monad laws in terms of (Kleisli) Composition and Return - * - ***********************************************************/ - - lemma LemmaAssociativityComposition(f: S -> Option, g: T -> Option, h: U -> Option) - ensures forall s: S :: Composition(Composition(f, g),h)(s) == Composition(f, Composition(g,h))(s) - { - } - - lemma LemmaIdentityReturn(f: S -> Option) - ensures forall s: S :: Composition(f, Return)(s) == f(s) == Composition(Return, f)(s) - { - } - -} From 2b02a330cd294c6b5232ab5efaa06566a25b9eff Mon Sep 17 00:00:00 2001 From: stefan-aws Date: Fri, 3 Feb 2023 19:31:07 +0000 Subject: [PATCH 28/33] equality --- src/Monad.dfy | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Monad.dfy b/src/Monad.dfy index bde877fa..5aa66e5e 100644 --- a/src/Monad.dfy +++ b/src/Monad.dfy @@ -39,7 +39,7 @@ abstract module {:options "-functionSyntax:4"} Monad refines Functor { abstract module {:options "-functionSyntax:4"} ResultMonad refines Monad { import Result - type E(!new) + type E(!new,==) function eqe(x: E, y: E): bool @@ -279,7 +279,7 @@ abstract module {:options "-functionSyntax:4"} EitherRightMonad refines Monad { abstract module {:options "-functionSyntax:4"} EitherLeftMonad refines Monad { import Either - type X(!new) + type X(!new,==) function eqr(x: X, y: X): bool From 4c6fe115f556283c9ba296e3cc61cb1a9f8a89f7 Mon Sep 17 00:00:00 2001 From: stefan-aws Date: Mon, 6 Feb 2023 13:46:31 +0000 Subject: [PATCH 29/33] resolve import of modules --- examples/Wrappers.dfy | 9 +- src/Collections/Arrays/BinarySearch.dfy | 2 +- src/Collections/Maps/Imaps.dfy | 2 +- src/Collections/Maps/Maps.dfy | 2 +- src/Collections/Sequences/Seq.dfy | 5 +- src/FileIO/FileIO.dfy | 4 +- src/Unicode/Unicode.dfy | 2 - src/Unicode/UnicodeEncodingForm.dfy | 4 +- src/Unicode/Utf8EncodingScheme.dfy | 2 - src/Wrappers.dfy | 673 ++++++++++++------------ 10 files changed, 352 insertions(+), 353 deletions(-) diff --git a/examples/Wrappers.dfy b/examples/Wrappers.dfy index 2447a81f..f40a5716 100644 --- a/examples/Wrappers.dfy +++ b/examples/Wrappers.dfy @@ -9,9 +9,10 @@ include "../src/Wrappers.dfy" module Demo { - import opened Option - import opened Result - import opened Outcome + import opened Wrappers + import opened Wrappers.Option + import opened Wrappers.Result + import opened Wrappers.Outcome // ------ Demo for Option ---------------------------- // We use Option when we don't need to pass around a reason for the failure, @@ -62,7 +63,7 @@ module Demo { // Sometimes we want to go from Option to Result: method FindName(m: MyMap) returns (res: Result) { // Will return a default error message in case of None: - res := OfOption(m.Get("name")); + res := ToResult(m.Get("name")); // We can also match on the option to write a custom error: match m.Get("name") case Some(n) => res := Success(n); diff --git a/src/Collections/Arrays/BinarySearch.dfy b/src/Collections/Arrays/BinarySearch.dfy index d8bfeb4f..03f6d450 100644 --- a/src/Collections/Arrays/BinarySearch.dfy +++ b/src/Collections/Arrays/BinarySearch.dfy @@ -9,7 +9,7 @@ include "../../Wrappers.dfy" include "../../Relations.dfy" module BinarySearch { - import opened Wrappers + import opened Wrappers.Option import opened Relations method BinarySearch(a: array, key: T, less: (T, T) -> bool) returns (r: Option) diff --git a/src/Collections/Maps/Imaps.dfy b/src/Collections/Maps/Imaps.dfy index b5da6de7..e1c4829d 100644 --- a/src/Collections/Maps/Imaps.dfy +++ b/src/Collections/Maps/Imaps.dfy @@ -12,7 +12,7 @@ include "../../Wrappers.dfy" module {:options "-functionSyntax:4"} Imaps { - import opened Wrappers + import opened Wrappers.Option function Get(m: imap, x: X): Option { diff --git a/src/Collections/Maps/Maps.dfy b/src/Collections/Maps/Maps.dfy index f666d8c4..8eb2d803 100644 --- a/src/Collections/Maps/Maps.dfy +++ b/src/Collections/Maps/Maps.dfy @@ -12,7 +12,7 @@ include "../../Wrappers.dfy" module {:options "-functionSyntax:4"} Maps { - import opened Wrappers + import opened Wrappers.Option function Get(m: map, x: X): Option { diff --git a/src/Collections/Sequences/Seq.dfy b/src/Collections/Sequences/Seq.dfy index a035d6f8..4ded65ff 100644 --- a/src/Collections/Sequences/Seq.dfy +++ b/src/Collections/Sequences/Seq.dfy @@ -18,7 +18,8 @@ include "../../Math.dfy" module {:options "-functionSyntax:4"} Seq { - import opened Wrappers + import opened Wrappers.Option + import opened Wrappers.Result import Math /********************************************************** @@ -586,7 +587,7 @@ module {:options "-functionSyntax:4"} Seq { } /* applies a transformation function that returns a result on the sequence */ - function {:opaque} MapWithResult(f: (T ~> Result), s: seq): (result: Result, E>) + function {:opaque} MapWithResult(f: (T ~> Result), s: seq): (result: Result, E>) requires forall i :: 0 <= i < |s| ==> f.requires(s[i]) ensures result.Success? ==> && |result.value| == |s| diff --git a/src/FileIO/FileIO.dfy b/src/FileIO/FileIO.dfy index 48ea0950..928502fd 100644 --- a/src/FileIO/FileIO.dfy +++ b/src/FileIO/FileIO.dfy @@ -18,9 +18,9 @@ include "../Wrappers.dfy" * File path symbols including . and .. are allowed. */ module {:options "-functionSyntax:4"} FileIO { - import opened Wrappers + import opened Wrappers.Result - export provides ReadBytesFromFile, WriteBytesToFile, Wrappers + export provides ReadBytesFromFile, WriteBytesToFile, Result /* * Public API diff --git a/src/Unicode/Unicode.dfy b/src/Unicode/Unicode.dfy index 316e61e0..56204168 100644 --- a/src/Unicode/Unicode.dfy +++ b/src/Unicode/Unicode.dfy @@ -10,8 +10,6 @@ include "../Collections/Sequences/Seq.dfy" // This module implements basic functionality of Unicode 14.0. module {:options "-functionSyntax:4"} Unicode { - import opened Wrappers - import Seq /** diff --git a/src/Unicode/UnicodeEncodingForm.dfy b/src/Unicode/UnicodeEncodingForm.dfy index 1cd3c366..70e77d88 100644 --- a/src/Unicode/UnicodeEncodingForm.dfy +++ b/src/Unicode/UnicodeEncodingForm.dfy @@ -26,7 +26,7 @@ include "Unicode.dfy" * code unit subsequences to scalar values. */ abstract module {:options "-functionSyntax:4"} UnicodeEncodingForm { - import opened Wrappers + import opened Wrappers.Option import Functions import Seq @@ -48,7 +48,7 @@ abstract module {:options "-functionSyntax:4"} UnicodeEncodingForm { * A code unit is the minimal bit combination that can represent a unit of encoded text for processing or * interchange. (Section 3.9 D77.) */ - type CodeUnit + type CodeUnit(==) /** * A well-formed Unicode code unit sequence that maps to a single Unicode scalar value. diff --git a/src/Unicode/Utf8EncodingScheme.dfy b/src/Unicode/Utf8EncodingScheme.dfy index 210e1082..f7a3d813 100644 --- a/src/Unicode/Utf8EncodingScheme.dfy +++ b/src/Unicode/Utf8EncodingScheme.dfy @@ -29,8 +29,6 @@ include "Utf8EncodingForm.dfy" * but that runs into . */ module {:options "-functionSyntax:4"} Utf8EncodingScheme { - import opened Wrappers - import BoundedInts import Seq import Unicode diff --git a/src/Wrappers.dfy b/src/Wrappers.dfy index 939e82f8..17a2adc8 100644 --- a/src/Wrappers.dfy +++ b/src/Wrappers.dfy @@ -4,428 +4,429 @@ * Copyright by the contributors to the Dafny Project * SPDX-License-Identifier: MIT *******************************************************************************/ +module {:options "-functionSyntax:4"} Wrappers { + module {:options "-functionSyntax:4"} Result { + import opened Option -module {:options "-functionSyntax:4"} Result { - import Option + datatype Result = | Success(value: T) | Failure(error: E) { + predicate IsSuccess() { + Success? + } - datatype Result = | Success(value: T) | Failure(error: E) { + predicate IsFailure() { + Failure? + } - predicate IsSuccess() { - Success? - } + function GetValue(): T + requires Success? + { + value + } - predicate IsFailure() { - Failure? - } + function GetValueDefault(default: T): T { + match this + case Success(v) => v + case Failure(_) => default + } - function GetValue(): T - requires Success? - { - value - } + function PropagateFailure(): Result + requires Failure? + { + Failure(error) + } - function GetValueDefault(default: T): T { - match this - case Success(v) => v - case Failure(_) => default - } + function GetError(): E + requires Failure? + { + error + } - function PropagateFailure(): Result - requires Failure? - { - Failure(error) - } + function Extract(): T + requires Success? + { + value + } - function GetError(): E - requires Failure? - { - error - } + function ToOption(): Option { + match this + case Success(v) => Some(v) + case Failure(_) => None + } - function Extract(): T - requires Success? - { - value + function ToSeq(): seq { + match this + case Success(v) => [v] + case Failure(_) => [] + } + + function ToSet(): set { + match this + case Success(v) => {v} + case Failure(_) => {} + } + } + + function Return(v: T): Result { + Result.Success(v) } - function ToOption(): Option.Option { - match this - case Success(v) => Option.Some(v) - case Failure(_) => Option.None + function Bind(r: Result, f: S -> Result): Result { + match r + case Success(v) => f(v) + case Failure(e) => Result.Failure(e) } - function ToSeq(): seq { - match this - case Success(v) => [v] - case Failure(_) => [] + function Join(rr: Result,E>): Result { + match rr + case Success(v) => v + case Failure(e) => Result.Failure(e) } - function ToSet(): set { - match this - case Success(v) => {v} - case Failure(_) => {} + function Map(f: S -> T): Result -> Result { + (r: Result) => + match r + case Success(v) => Result.Success(f(v)) + case Failure(e) => Result.Failure(e) } - } - function OfOption(o: Option.Option): Result { - match o - case Some(v) => Success(v) - case None => Failure("Option is None") - } - - function Return(v: T): Result { - Result.Success(v) - } + function MapError(f: E1 -> E2): Result -> Result { + (r: Result) => + match r + case Success(v) => Result.Success(v) + case Failure(e) => Result.Failure(f(e)) + } - function Bind(r: Result, f: S -> Result): Result { - match r - case Success(v) => f(v) - case Failure(e) => Result.Failure(e) - } + function KleisliComposition(f: S -> Result, g: T -> Result): S -> Result { + s => Bind(f(s), g) + } - function Join(rr: Result,E>): Result { - match rr - case Success(v) => v - case Failure(e) => Result.Failure(e) - } + function Success(v: T): Result { + Result.Success(v) + } - function Map(f: S -> T): Result -> Result { - (r: Result) => - match r - case Success(v) => Result.Success(f(v)) - case Failure(e) => Result.Failure(e) - } + function Failure(e: E): Result { + Result.Failure(e) + } - function MapError(f: E1 -> E2): Result -> Result { - (r: Result) => - match r - case Success(v) => Result.Success(v) - case Failure(e) => Result.Failure(f(e)) - } + function Fold(f: T -> U, g: E -> U): Result -> U { + (r: Result) => + match r + case Success(v) => f(v) + case Failure(e) => g(e) + } - function KleisliComposition(f: S -> Result, g: T -> Result): S -> Result { - s => Bind(f(s), g) - } + function Equal(eqt: (T, T) -> bool, eqe: (E, E) -> bool): (Result, Result) -> bool { + (r1: Result, r2: Result) => + match (r1, r2) + case (Success(v1), Success(v2)) => eqt(v1, v2) + case (Failure(e1), Failure(e2)) => eqe(e1, e2) + case _ => false + } - function Success(v: T): Result { - Result.Success(v) + function Compare(cmps: (T, T) -> int, cmpf: (E, E) -> int): (Result, Result) -> int { + (r1: Result, r2: Result) => + match (r1, r2) + case (Success(v1), Success(v2)) => cmps(v1, v2) + case (Failure(e1), Failure(e2)) => cmpf(e1, e2) + case (Success(_), Failure(_)) => -1 + case (Failure(_), Success(_)) => 1 + } } - function Failure(e: E): Result { - Result.Failure(e) - } + module {:options "-functionSyntax:4"} Writer { + datatype Writer = Result(value: T, log: string) { + function GetValue(w: Writer): T { + w.value + } - function Fold(f: T -> U, g: E -> U): Result -> U { - (r: Result) => - match r - case Success(v) => f(v) - case Failure(e) => g(e) - } + function GetLog(w: Writer): string { + w.log + } + } - function Equal(eqt: (T, T) -> bool, eqe: (E, E) -> bool): (Result, Result) -> bool { - (r1: Result, r2: Result) => - match (r1, r2) - case (Success(v1), Success(v2)) => eqt(v1, v2) - case (Failure(e1), Failure(e2)) => eqe(e1, e2) - case _ => false - } + function Return(v: T): Writer { + Result(v, "") + } - function Compare(cmps: (T, T) -> int, cmpf: (E, E) -> int): (Result, Result) -> int { - (r1: Result, r2: Result) => - match (r1, r2) - case (Success(v1), Success(v2)) => cmps(v1, v2) - case (Failure(e1), Failure(e2)) => cmpf(e1, e2) - case (Success(_), Failure(_)) => -1 - case (Failure(_), Success(_)) => 1 - } -} + function Bind(w: Writer, f: S -> Writer): Writer { + Writer.Result(f(w.value).value, w.log + f(w.value).log) + } -module {:options "-functionSyntax:4"} Writer { - datatype Writer = Result(value: T, log: string) + function Join(ww: Writer>): Writer { + Result((ww.value).value, (ww.value).log + ww.log) + } - function Return(v: T): Writer { - Result(v, "") - } + function Map(f: S -> T): Writer -> Writer { + (w: Writer) => Writer.Result(f(w.value), w.log) + } - function Bind(w: Writer, f: S -> Writer): Writer { - Writer.Result(f(w.value).value, w.log + f(w.value).log) - } + function KleisliComposition(f: S -> Writer, g: T -> Writer): S -> Writer { + s => Bind(f(s), g) + } - function Join(ww: Writer>): Writer { - Result((ww.value).value, (ww.value).log + ww.log) - } + function Result(v: T, s: string): Writer { + Writer.Result(v, s) + } - function Map(f: S -> T): Writer -> Writer { - (w: Writer) => Writer.Result(f(w.value), w.log) + ghost function Equal(eq: (T, T) -> bool): (Writer, Writer) -> bool { + (w1: Writer, w2: Writer) => + && eq(w1.value, w2.value) + && w1.log == w2.log + } } - function KleisliComposition(f: S -> Writer, g: T -> Writer): S -> Writer { - s => Bind(f(s), g) - } + module {:options "-functionSyntax:4"} Option { + datatype Option<+T(==)> = None | Some(value: T) { + function GetValueDefault(default: T): T { + match this + case None => default + case Some(v) => v + } - function GetValue(w: Writer): T { - w.value - } + function GetValue(): T + requires Some? + { + value + } - function GetLog(w: Writer): string { - w.log - } + predicate IsFailure() { + None? + } - function Result(v: T, s: string): Writer { - Writer.Result(v, s) - } + function Extract(): T + requires Some? + { + value + } - ghost function Equal(eq: (T, T) -> bool): (Writer, Writer) -> bool { - (w1: Writer, w2: Writer) => - && eq(w1.value, w2.value) - && w1.log == w2.log - } -} + function PropagateFailure(): Option + requires None? + { + None + } + + function ToSeq(): seq { + match this + case None => [] + case Some(v) => [v] + } -module {:options "-functionSyntax:4"} Option { - datatype Option<+T(==)> = None | Some(value: T) { - function GetValueDefault(default: T): T { - match this - case None => default - case Some(v) => v + function ToSet(): set { + match this + case None => {} + case Some(v) => {v} + } } - function GetValue(): T - requires Some? - { - value + function Return(v: T): Option { + Option.Some(v) } - predicate IsFailure() { - None? + function Bind(o: Option, f: S -> Option): Option { + match o + case None => Option.None + case Some(v) => f(v) } - function Extract(): T - requires Some? - { - value + function Join(oo: Option>): Option { + match oo + case None => Option.None + case Some(o) => o } - function PropagateFailure(): Option - requires None? + function Map(f: S -> T): Option -> Option { - None + (o: Option) => + match o + case None => Option.None + case Some(v) => Option.Some(f(v)) } - function ToSeq(): seq { - match this - case None => [] - case Some(v) => [v] + function KleisliComposition(f: S -> Option, g: T-> Option): S -> Option { + s => Bind(f(s), g) } - function ToSet(): set { - match this - case None => {} - case Some(v) => {v} + function Fold(u: U, f: T -> U): Option -> U { + (o: Option) => + match o + case None => u + case Some(v) => f(v) } - } - - function Return(v: T): Option { - Option.Some(v) - } - function Bind(o: Option, f: S -> Option): Option { - match o - case None => Option.None - case Some(v) => f(v) - } - - function Join(oo: Option>): Option { - match oo - case None => Option.None - case Some(o) => o - } - - function Map(f: S -> T): Option -> Option - { - (o: Option) => - match o - case None => Option.None - case Some(v) => Option.Some(f(v)) - } - - function KleisliComposition(f: S -> Option, g: T-> Option): S -> Option { - s => Bind(f(s), g) - } - - function Fold(u: U, f: T -> U): Option -> U { - (o: Option) => - match o - case None => u - case Some(v) => f(v) - } - - function Equal(eq: (T, T) -> bool): (Option, Option) -> bool { - (o1: Option, o2: Option) => - match (o1, o2) - case (Some(v1), Some(v2)) => eq(v1, v2) - case (None, None) => true - case _ => false - } - - function Compare(cmp: (T, T) -> int): (Option, Option) -> int { - (o1: Option, o2: Option) => - match (o1, o2) - case (Some(v1), Some(v2)) => cmp(v1, v2) - case (None, None) => 0 - case (None, Some(_)) => -1 - case (Some(_), None) => 1 + function Equal(eq: (T, T) -> bool): (Option, Option) -> bool { + (o1: Option, o2: Option) => + match (o1, o2) + case (Some(v1), Some(v2)) => eq(v1, v2) + case (None, None) => true + case _ => false + } + + function Compare(cmp: (T, T) -> int): (Option, Option) -> int { + (o1: Option, o2: Option) => + match (o1, o2) + case (Some(v1), Some(v2)) => cmp(v1, v2) + case (None, None) => 0 + case (None, Some(_)) => -1 + case (Some(_), None) => 1 + } } -} + module {:options "-functionSyntax:4"} Either { + import Option -module {:options "-functionSyntax:4"} Either { - import Option + datatype Either<+S,+T> = Left(left: S) | Right(right: T) { + predicate IsLeft() { + Left? + } - datatype Either<+S,+T> = Left(left: S) | Right(right: T) + predicate IsRight() { + Right? + } + } - function ReturnLeft(v: S): Either { - Either.Left(v) - } + function FindLeft(e: Either): Option.Option { + match e + case Left(v) => Option.Some(v) + case Right(v) => Option.None + } - function ReturnRight(v: T): Either { - Either.Right(v) - } + function FindRight(e: Either): Option.Option { + match e + case Left(v) => Option.None + case Right(v) => Option.Some(v) + } - predicate IsLeft(e: Either) { - e.Left? - } + function ReturnLeft(v: S): Either { + Either.Left(v) + } - predicate IsRight(e: Either) { - e.Right? - } + function ReturnRight(v: T): Either { + Either.Right(v) + } - function FindLeft(e: Either): Option.Option { - match e - case Left(v) => Option.Some(v) - case Right(v) => Option.None - } - function FindRight(e: Either): Option.Option { - match e - case Left(v) => Option.None - case Right(v) => Option.Some(v) - } - function JoinRight(ee: Either>): Either { - match ee - case Left(v) => Either.Left(v) - case Right(v) => v - } + function JoinRight(ee: Either>): Either { + match ee + case Left(v) => Either.Left(v) + case Right(v) => v + } - function JoinLeft(ee: Either,T>): Either { - match ee - case Left(v) => v - case Right(v) => Either.Right(v) - } + function JoinLeft(ee: Either,T>): Either { + match ee + case Left(v) => v + case Right(v) => Either.Right(v) + } - function MapLeft(f: S -> T): Either -> Either { - (e: Either) => - match e - case Left(v) => Either.Left(f(v)) - case Right(v) => Either.Right(v) - } + function MapLeft(f: S -> T): Either -> Either { + (e: Either) => + match e + case Left(v) => Either.Left(f(v)) + case Right(v) => Either.Right(v) + } - function MapRight(f: T -> U): Either -> Either { - (e: Either) => - match e - case Left(v) => Either.Left(v) - case Right(v) => Either.Right(f(v)) - } + function MapRight(f: T -> U): Either -> Either { + (e: Either) => + match e + case Left(v) => Either.Left(v) + case Right(v) => Either.Right(f(v)) + } - function Map(f: S1 -> S2, g: T1 -> T2): Either -> Either { - (e: Either) => - match e - case Left(v) => Either.Left(f(v)) - case Right(v) => Either.Right(g(v)) - } + function Map(f: S1 -> S2, g: T1 -> T2): Either -> Either { + (e: Either) => + match e + case Left(v) => Either.Left(f(v)) + case Right(v) => Either.Right(g(v)) + } - function Fold(f: S -> U, g: T -> U): Either -> U { - (e: Either) => - match e - case Left(v) => f(v) - case Right(v) => g(v) - } + function Fold(f: S -> U, g: T -> U): Either -> U { + (e: Either) => + match e + case Left(v) => f(v) + case Right(v) => g(v) + } - function Equal(eql: (S, S) -> bool, eqr: (T, T) -> bool): (Either, Either) -> bool { - (e1: Either, e2: Either) => - match (e1, e2) - case (Left(v1), Left(v2)) => eql(v1, v2) - case (Right(v1), Right(v2)) => eqr(v1, v2) - case _ => false - } + function Equal(eql: (S, S) -> bool, eqr: (T, T) -> bool): (Either, Either) -> bool { + (e1: Either, e2: Either) => + match (e1, e2) + case (Left(v1), Left(v2)) => eql(v1, v2) + case (Right(v1), Right(v2)) => eqr(v1, v2) + case _ => false + } - function Compare(cmpl: (S, S) -> int, cmpr: (T, T) -> int): (Either, Either) -> int { - (e1: Either, e2: Either) => - match (e1, e2) - case (Left(v1), Left(v2)) => cmpl(v1, v2) - case (Right(v1), Right(v2)) => cmpr(v1, v2) - case (Left(_), Right(_)) => -1 - case (Right(_), Left(_)) => 1 + function Compare(cmpl: (S, S) -> int, cmpr: (T, T) -> int): (Either, Either) -> int { + (e1: Either, e2: Either) => + match (e1, e2) + case (Left(v1), Left(v2)) => cmpl(v1, v2) + case (Right(v1), Right(v2)) => cmpr(v1, v2) + case (Left(_), Right(_)) => -1 + case (Right(_), Left(_)) => 1 + } } -} -module {:options "-functionSyntax:4"} Reader { - datatype Reader<-X,+T> = Reader(f: X -> T) + module {:options "-functionSyntax:4"} Reader { + datatype Reader<-X,+T> = Reader(f: X -> T) - function Return(t: T): Reader { - Reader(x => t) - } + function Return(t: T): Reader { + Reader(x => t) + } - function Bind(r: Reader, f: S -> Reader): Reader { - Reader(x => (f((r.f)(x)).f)(x)) - } + function Bind(r: Reader, f: S -> Reader): Reader { + Reader(x => (f((r.f)(x)).f)(x)) + } - function Join(rr: Reader>): Reader { - Reader(x => (rr.f(x)).f(x)) - } + function Join(rr: Reader>): Reader { + Reader(x => (rr.f(x)).f(x)) + } - function Map(f: S -> T): Reader -> Reader { - (r: Reader) => - Reader(x => f((r.f)(x))) - } + function Map(f: S -> T): Reader -> Reader { + (r: Reader) => + Reader(x => f((r.f)(x))) + } - function MapContra(f: X -> Y): Reader -> Reader { - (r: Reader) => - Reader(x => r.f(f(x))) - } + function MapContra(f: X -> Y): Reader -> Reader { + (r: Reader) => + Reader(x => r.f(f(x))) + } - function KleisliComposition(f: S -> Reader, g: T -> Reader): S -> Reader { - s => Bind(f(s), g) - } + function KleisliComposition(f: S -> Reader, g: T -> Reader): S -> Reader { + s => Bind(f(s), g) + } - ghost function Equal(eq: (T, T) -> bool): (Reader, Reader) -> bool - { - (r1: Reader, r2: Reader) => - forall x: X :: eq(r1.f(x), r2.f(x)) + ghost function Equal(eq: (T, T) -> bool): (Reader, Reader) -> bool + { + (r1: Reader, r2: Reader) => + forall x: X :: eq(r1.f(x), r2.f(x)) + } } -} - -module {:options "-functionSyntax:4"} Outcome { - import Result - datatype Outcome = Pass | Fail(error: E) { - predicate IsFailure() { - Fail? + module {:options "-functionSyntax:4"} Outcome { + import Result + + datatype Outcome = Pass | Fail(error: E) { + predicate IsFailure() { + Fail? + } + // Note: PropagateFailure returns a Result, not an Outcome. + function PropagateFailure(): Result.Result + requires Fail? + { + Result.Failure(this.error) + } + // Note: no Extract method } - // Note: PropagateFailure returns a Result, not an Outcome. - function PropagateFailure(): Result.Result - requires Fail? + + // A helper function to ensure a requirement is true at runtime + // :- Need(5 == |mySet|, "The set MUST have 5 elements.") + function Need(condition: bool, error: E): (result: Outcome) { - Result.Failure(this.error) - } - // Note: no Extract method + if condition then Pass else Fail(error) } + } - // A helper function to ensure a requirement is true at runtime - // :- Need(5 == |mySet|, "The set MUST have 5 elements.") - function Need(condition: bool, error: E): (result: Outcome) - { - if condition then Pass else Fail(error) + function ToResult(o: Option.Option): Result.Result { + match o + case Some(v) => Result.Success(v) + case None => Result.Failure("Option is None") } -} \ No newline at end of file +} \ No newline at end of file From 00f53cf151dc775aa2bff4a31b98804f0c029f0b Mon Sep 17 00:00:00 2001 From: stefan-aws Date: Mon, 6 Feb 2023 13:50:01 +0000 Subject: [PATCH 30/33] cowrappers module --- src/Cowrappers.dfy | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/Cowrappers.dfy b/src/Cowrappers.dfy index c94051ab..f95c3302 100644 --- a/src/Cowrappers.dfy +++ b/src/Cowrappers.dfy @@ -5,7 +5,8 @@ * SPDX-License-Identifier: MIT *******************************************************************************/ -module {:options "-functionSyntax:4"} Coreader { +module {:options "-functionSyntax:4"} Cowrappers { + module {:options "-functionSyntax:4"} Coreader { datatype Coreader<+S,+T> = Coreader(left: S, right: T) @@ -56,4 +57,5 @@ module {:options "-functionSyntax:4"} Coreader { eql(r1.left, r2.left) && eqr(r1.right, r2.right) } + } } \ No newline at end of file From 566bbae2d6fef39d2d3427eef646a5570c5534fb Mon Sep 17 00:00:00 2001 From: stefan-aws Date: Mon, 6 Feb 2023 14:01:25 +0000 Subject: [PATCH 31/33] resolve import --- src/Comonad.dfy | 4 ++-- src/Monad.dfy | 12 ++++++------ 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/Comonad.dfy b/src/Comonad.dfy index 13f56d16..93bb4ac7 100644 --- a/src/Comonad.dfy +++ b/src/Comonad.dfy @@ -40,7 +40,7 @@ abstract module {:options "-functionSyntax:4"} Comonad refines Functor { } abstract module {:options "-functionSyntax:4"} CoreaderRightComonad refines Comonad { - import Coreader + import Cowrappers.Coreader type X(!new) @@ -106,7 +106,7 @@ abstract module {:options "-functionSyntax:4"} CoreaderRightComonad refines Como } abstract module {:options "-functionSyntax:4"} CoreaderLeftComonad refines Comonad { - import Coreader + import Cowrappers.Coreader type X(!new) diff --git a/src/Monad.dfy b/src/Monad.dfy index 5aa66e5e..723dc999 100644 --- a/src/Monad.dfy +++ b/src/Monad.dfy @@ -37,7 +37,7 @@ abstract module {:options "-functionSyntax:4"} Monad refines Functor { abstract module {:options "-functionSyntax:4"} ResultMonad refines Monad { - import Result + import Wrappers.Result type E(!new,==) @@ -104,7 +104,7 @@ abstract module {:options "-functionSyntax:4"} ResultMonad refines Monad { module {:options "-functionSyntax:4"} WriterMonad refines Monad { - import Writer + import Wrappers.Writer /* Functor structure */ type F(!new) = Writer.Writer @@ -157,7 +157,7 @@ module {:options "-functionSyntax:4"} WriterMonad refines Monad { module {:options "-functionSyntax:4"} OptionMonad refines Monad { - import Option + import Wrappers.Option /* Functor structure */ type F(!new) = Option.Option @@ -210,7 +210,7 @@ module {:options "-functionSyntax:4"} OptionMonad refines Monad { abstract module {:options "-functionSyntax:4"} EitherRightMonad refines Monad { - import Either + import Wrappers.Either type X(!new) @@ -277,7 +277,7 @@ abstract module {:options "-functionSyntax:4"} EitherRightMonad refines Monad { abstract module {:options "-functionSyntax:4"} EitherLeftMonad refines Monad { - import Either + import Wrappers.Either type X(!new,==) @@ -344,7 +344,7 @@ abstract module {:options "-functionSyntax:4"} EitherLeftMonad refines Monad { abstract module {:options "-functionSyntax:4"} ReaderMonad refines Monad { - import Reader + import Wrappers.Reader type X(!new) From 5ab539936d1c9c49ad094b00c3e83a471350b5ad Mon Sep 17 00:00:00 2001 From: stefan-aws Date: Mon, 6 Feb 2023 14:26:19 +0000 Subject: [PATCH 32/33] newline, open module --- src/Collections/Sequences/Seq.dfy | 3 ++- src/Wrappers.dfy | 14 +++++++------- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/src/Collections/Sequences/Seq.dfy b/src/Collections/Sequences/Seq.dfy index c9600399..09b17bee 100644 --- a/src/Collections/Sequences/Seq.dfy +++ b/src/Collections/Sequences/Seq.dfy @@ -21,7 +21,8 @@ include "../../Relations.dfy" module {:options "-functionSyntax:4"} Seq { import opened Wrappers.Option - import opened Wrappers.Result import opened MergeSort + import opened Wrappers.Result + import opened MergeSort import opened Relations import Math diff --git a/src/Wrappers.dfy b/src/Wrappers.dfy index 17a2adc8..1b8a098e 100644 --- a/src/Wrappers.dfy +++ b/src/Wrappers.dfy @@ -272,7 +272,7 @@ module {:options "-functionSyntax:4"} Wrappers { } module {:options "-functionSyntax:4"} Either { - import Option + import opened Option datatype Either<+S,+T> = Left(left: S) | Right(right: T) { predicate IsLeft() { @@ -284,16 +284,16 @@ module {:options "-functionSyntax:4"} Wrappers { } } - function FindLeft(e: Either): Option.Option { + function FindLeft(e: Either): Option { match e - case Left(v) => Option.Some(v) - case Right(v) => Option.None + case Left(v) => Some(v) + case Right(v) => None } - function FindRight(e: Either): Option.Option { + function FindRight(e: Either): Option { match e - case Left(v) => Option.None - case Right(v) => Option.Some(v) + case Left(v) => None + case Right(v) => Some(v) } function ReturnLeft(v: S): Either { From 29b1d900f737bb46109b772d329cce163fd39aff Mon Sep 17 00:00:00 2001 From: stefan-aws Date: Mon, 6 Feb 2023 15:25:26 +0000 Subject: [PATCH 33/33] move functions into datatype --- src/Wrappers.dll | Bin 0 -> 204288 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 src/Wrappers.dll diff --git a/src/Wrappers.dll b/src/Wrappers.dll new file mode 100644 index 0000000000000000000000000000000000000000..d6f54e803af97da87bd0ba8e6ff58e75fd7fe714 GIT binary patch literal 204288 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�N7AS;^jD>i?&Hj_N}ou?{Z+a7yF*_j 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 Ni1q*f`M)QD{{@nFVFCaE literal 0 HcmV?d00001