-
Notifications
You must be signed in to change notification settings - Fork 476
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Translation relation and decision procedure for the Float-Delay (#6482)
* WIP * WIP * WIP * WIP * WIP * WIP - Most of the nFD->FD proof is done but I am now wondering if the application rules need the force in them... * Some progress on the FD->pureFD proof... Not completely sure it is going in a good direction... * Made the parameters to istranslation implicit, since they are encoded in the relation anyway * WIP * WIP * WIP - with crazy variable binding issues * Add 'forall DecEq' to 'Relation' * Roman's additions. * Workign Float-Delay translation relation and decision procedure. * Missed a definition * Now uses Purity, althought that is 'stub code' at the moment. * Now with added Purity... * Remove 'Terminating' from 'translation?' --------- Co-authored-by: effectfully <[email protected]>
- Loading branch information
1 parent
84bcd15
commit 9802721
Showing
6 changed files
with
619 additions
and
179 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,25 @@ | ||
--- | ||
title: VerifiedCompilation.Purity | ||
layout: page | ||
--- | ||
|
||
# Definitions of Purity for Terms | ||
``` | ||
module VerifiedCompilation.Purity where | ||
``` | ||
## Imports | ||
|
||
``` | ||
open import Untyped using (_⊢; case; builtin; _·_; force; `; ƛ; delay; con; constr; error) | ||
open import Relation.Nullary using (Dec; yes; no; ¬_) | ||
``` | ||
## Untyped Purity | ||
``` | ||
data UPure (X : Set) : (X ⊢) → Set where | ||
FIXME : (t : X ⊢) → UPure X t | ||
isUPure? : {X : Set} → (t : X ⊢) → Dec (UPure X t) | ||
isUPure? t = yes (FIXME t) | ||
``` |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
157 changes: 157 additions & 0 deletions
157
plutus-metatheory/src/VerifiedCompilation/UFloatDelay.lagda.md
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,157 @@ | ||
--- | ||
title: VerifiedCompilation.UFloatDelay | ||
layout: page | ||
--- | ||
|
||
# Float-Delay Translation Phase | ||
``` | ||
module VerifiedCompilation.UFloatDelay where | ||
``` | ||
## Imports | ||
|
||
``` | ||
open import VerifiedCompilation.Equality using (DecEq; _≟_;decPointwise) | ||
open import VerifiedCompilation.UntypedViews using (Pred; isCase?; isApp?; isLambda?; isForce?; isBuiltin?; isConstr?; isDelay?; isTerm?; isVar?; allTerms?; iscase; isapp; islambda; isforce; isbuiltin; isconstr; isterm; allterms; isdelay; isvar) | ||
open import VerifiedCompilation.UntypedTranslation using (Translation; translation?; Relation; convert; reflexive) | ||
open import Relation.Nullary.Product using (_×-dec_) | ||
open import Untyped using (_⊢; case; builtin; _·_; force; `; ƛ; delay; con; constr; error) | ||
import Relation.Binary.PropositionalEquality as Eq | ||
open Eq using (_≡_; refl; _≢_) | ||
open import Data.Empty using (⊥) | ||
open import Function using (case_of_) | ||
open import Agda.Builtin.Maybe using (Maybe; just; nothing) | ||
open import Data.List using (map; all) | ||
open import Relation.Nullary using (Dec; yes; no; ¬_) | ||
import Relation.Binary as Binary using (Decidable) | ||
open import Data.Product using (_,_) | ||
open import Data.Nat using (ℕ) | ||
open import Data.List using (List) | ||
open import Builtin using (Builtin) | ||
open import RawU using (TmCon) | ||
open import VerifiedCompilation.Purity using (UPure; isUPure?) | ||
open import Data.List.Relation.Unary.All using (All; all?) | ||
variable | ||
X : Set | ||
x x' y y' : X ⊢ | ||
``` | ||
## Translation Relation | ||
|
||
This translation "floats" delays in applied terms into the abstraction, without inlining the whole term. | ||
This is separate from inlining because the added `delay` may make it seem like a substantial increase in code | ||
size, and so dissuade the inliner from executing. However, it may be that the laziness inside the resulting term | ||
is more computationally efficient. | ||
|
||
This translation will only preserve semantics if the instances of the bound variable are under a `force` and if the applied term is "Pure". | ||
|
||
This requires a function to check all the bound variables are under `force`. The `AllForced` type | ||
is defined in terms of the de Brujin index of the bound variable, since this will be incremented under | ||
further lambdas. | ||
``` | ||
data AllForced (X : Set){{ _ : DecEq X}} : X → (X ⊢) → Set where | ||
var : (v : X) → {v' : X} → v' ≢ v → AllForced X v (` v') | ||
forced : (v : X) → AllForced X v (force (` v)) | ||
force : (v : X) → AllForced X v x' → AllForced X v (force x') | ||
delay : (v : X) → AllForced X v x' → AllForced X v (delay x') | ||
ƛ : (v : X) → {t : (Maybe X) ⊢} | ||
→ AllForced (Maybe X) (just v) t | ||
→ AllForced X v (ƛ t) | ||
app : (v : X) | ||
→ AllForced X v x | ||
→ AllForced X v y | ||
→ AllForced X v (x · y) | ||
error : {v : X} → AllForced X v error | ||
builtin : {v : X} → {b : Builtin} → AllForced X v (builtin b) | ||
con : {v : X} → {c : TmCon} → AllForced X v (con c) | ||
case : (v : X) → {t : X ⊢} {ts : List (X ⊢)} | ||
→ AllForced X v t | ||
→ All (AllForced X v) ts | ||
→ AllForced X v (case t ts) | ||
constr : (v : X) → {i : ℕ} {xs : List (X ⊢)} | ||
→ All (AllForced X v) xs | ||
→ AllForced X v (constr i xs) | ||
{-# TERMINATING #-} | ||
isAllForced? : {{ _ : DecEq X}} → (v : X) → (t : X ⊢) → Dec (AllForced X v t) | ||
isAllForced? v t with isForce? isTerm? t | ||
... | yes (isforce (isterm t)) with isVar? t | ||
... | no ¬var with isAllForced? v t | ||
... | yes allForced = yes (force v allForced) | ||
... | no ¬allForced = no λ { (forced .v) → ¬var (isvar v) ; (force .v p) → ¬allForced p } | ||
isAllForced? v t | yes (isforce (isterm _)) | yes (isvar v₁) with v₁ ≟ v | ||
... | yes refl = yes (forced v) | ||
... | no v₁≢v = yes (force v (var v v₁≢v)) | ||
isAllForced? v (` x) | no ¬force with x ≟ v | ||
... | yes refl = no λ { (var .v x≢v) → x≢v refl} | ||
... | no x≢v = yes (var v x≢v) | ||
isAllForced? {X} v (ƛ t) | no ¬force with isAllForced? {Maybe X} (just v) t | ||
... | yes p = yes (ƛ v p) | ||
... | no ¬p = no λ { (ƛ .v p) → ¬p p} | ||
isAllForced? v (t₁ · t₂) | no ¬force with (isAllForced? v t₁) ×-dec (isAllForced? v t₂) | ||
... | yes (pt₁ , pt₂) = yes (app v pt₁ pt₂) | ||
... | no ¬p = no λ { (app .v x₁ x₂) → ¬p (x₁ , x₂)} | ||
isAllForced? v (force t) | no ¬force = no λ { (forced .v) → ¬force (isforce (isterm t)) ; (force .v x) → ¬force (isforce (isterm t)) } | ||
isAllForced? v (delay t) | no ¬force with isAllForced? v t | ||
... | yes p = yes (delay v p) | ||
... | no ¬p = no λ { (delay .v pp) → ¬p pp} | ||
isAllForced? v (con x) | no ¬force = yes con | ||
isAllForced? v (constr i xs) | no ¬force with all? (isAllForced? v) xs | ||
... | yes p = yes (constr v p) | ||
... | no ¬p = no λ { (constr .v p) → ¬p p } | ||
isAllForced? v (case t ts) | no ¬force with (isAllForced? v t) ×-dec (all? (isAllForced? v) ts) | ||
... | yes (p₁ , p₂) = yes (case v p₁ p₂) | ||
... | no ¬p = no λ { (case .v p₁ p₂) → ¬p ((p₁ , p₂)) } | ||
isAllForced? v (builtin b) | no ¬force = yes builtin | ||
isAllForced? v error | no ¬force = yes error | ||
``` | ||
The `delay` needs to be added to all bound variables. | ||
``` | ||
{-# TERMINATING #-} | ||
subs-delay : {X : Set}{{de : DecEq X}} → (v : Maybe X) → (Maybe X ⊢) → (Maybe X ⊢) | ||
subs-delay v (` x) with v ≟ x | ||
... | yes refl = (delay (` x)) | ||
... | no _ = (` x) | ||
subs-delay v (ƛ t) = ƛ (subs-delay (just v) t) -- The de Brujin index has to be incremented | ||
subs-delay v (t · t₁) = (subs-delay v t) · (subs-delay v t₁) | ||
subs-delay v (force t) = force (subs-delay v t) -- This doesn't immediately apply Force-Delay | ||
subs-delay v (delay t) = delay (subs-delay v t) | ||
subs-delay v (con x) = con x | ||
subs-delay v (constr i xs) = constr i (map (subs-delay v) xs) | ||
subs-delay v (case t ts) = case (subs-delay v t) (map (subs-delay v) ts) | ||
subs-delay v (builtin b) = builtin b | ||
subs-delay v error = error | ||
``` | ||
The translation relation is then fairly striaghtforward. | ||
|
||
``` | ||
data FlD {X : Set} {{de : DecEq X}} : (X ⊢) → (X ⊢) → Set₁ where | ||
floatdelay : {y y' : X ⊢} {x x' : (Maybe X) ⊢} | ||
→ Translation FlD (subs-delay nothing x) x' | ||
→ Translation FlD y y' | ||
→ UPure X y' | ||
→ FlD (ƛ x · (delay y)) (ƛ x' · y') | ||
FloatDelay : {X : Set} {{_ : DecEq X}} → (ast : X ⊢) → (ast' : X ⊢) → Set₁ | ||
FloatDelay = Translation FlD | ||
``` | ||
## Decision Procedure | ||
``` | ||
isFloatDelay? : {X : Set} {{de : DecEq X}} → Binary.Decidable (FloatDelay {X}) | ||
{-# TERMINATING #-} | ||
isFlD? : {X : Set} {{de : DecEq X}} → Binary.Decidable (FlD {X}) | ||
isFlD? ast ast' with (isApp? (isLambda? isTerm?) (isDelay? isTerm?)) ast | ||
... | no ¬match = no λ { (floatdelay x x₁ x₂) → ¬match ((isapp (islambda (isterm _)) (isdelay (isterm _)))) } | ||
... | yes (isapp (islambda (isterm t₁)) (isdelay (isterm t₂))) with (isApp? (isLambda? isTerm?) isTerm?) ast' | ||
... | no ¬match = no λ { (floatdelay x x₁ x₂) → ¬match ((isapp (islambda (isterm _)) (isterm _))) } | ||
... | yes (isapp (islambda (isterm t₁')) (isterm t₂')) with (isFloatDelay? (subs-delay nothing t₁) t₁') ×-dec (isFloatDelay? t₂ t₂') ×-dec (isUPure? t₂') | ||
... | no ¬p = no λ { (floatdelay x₁ x₂ x₃) → ¬p ((x₁ , x₂ , x₃))} | ||
... | yes (p₁ , p₂ , pure) = yes (floatdelay p₁ p₂ pure) | ||
isFloatDelay? = translation? isFlD? | ||
``` |
Oops, something went wrong.
9802721
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Possible performance regression was detected for benchmark 'Plutus Benchmarks'.
Benchmark result of this commit is worse than the previous benchmark result exceeding threshold
1.05
.validation-auction_1-1
259.6
μs186
μs1.40
validation-auction_1-2
915.9
μs647
μs1.42
validation-auction_1-3
902
μs638.8
μs1.41
validation-auction_1-4
335.1
μs264.2
μs1.27
validation-escrow-redeem_1-1
495.1
μs381
μs1.30
validation-future-pay-out-4
1154
μs905.7
μs1.27
validation-future-settle-early-1
355
μs251.3
μs1.41
validation-future-settle-early-2
771.8
μs562.6
μs1.37
validation-game-sm-success_2-1
556.1
μs435.2
μs1.28
validation-multisig-sm-1
564.5
μs505.6
μs1.12
validation-multisig-sm-3
560.5
μs401.5
μs1.40
validation-multisig-sm-4
561.4
μs396.1
μs1.42
validation-multisig-sm-5
791.3
μs585
μs1.35
validation-multisig-sm-7
537.5
μs390.1
μs1.38
validation-token-account-1
274.3
μs194
μs1.41
validation-token-account-2
484.6
μs342.3
μs1.42
validation-uniswap-1
593.1
μs466.8
μs1.27
validation-uniswap-2
317.6
μs259.5
μs1.22
validation-decode-currency-1
325.8
μs231.2
μs1.41
validation-decode-escrow-redeem_1-1
445.6
μs313.4
μs1.42
validation-decode-escrow-redeem_1-2
359.6
μs312.9
μs1.15
validation-decode-game-sm-success_2-1
738.4
μs680.1
μs1.09
validation-decode-game-sm-success_2-2
230.4
μs162.3
μs1.42
validation-decode-game-sm-success_2-3
726
μs512.9
μs1.42
validation-decode-game-sm-success_2-4
230
μs162.3
μs1.42
validation-decode-game-sm-success_2-5
725.4
μs513.9
μs1.41
validation-decode-game-sm-success_2-6
230.2
μs213.5
μs1.08
validation-decode-multisig-sm-1
805.5
μs735.7
μs1.09
validation-decode-multisig-sm-3
748.7
μs575.9
μs1.30
validation-decode-multisig-sm-4
808.6
μs767.8
μs1.05
validation-decode-multisig-sm-7
807.2
μs687
μs1.17
validation-decode-multisig-sm-8
806.7
μs569.1
μs1.42
validation-decode-ping-pong_2-1
679.7
μs479.2
μs1.42
validation-decode-prism-1
226.1
μs202.3
μs1.12
validation-decode-stablecoin_1-2
230.4
μs188.6
μs1.22
validation-decode-stablecoin_1-3
1187
μs845.1
μs1.40
validation-decode-stablecoin_1-4
230.7
μs200.4
μs1.15
nofib-clausify/formula1
4344
μs4109
μs1.06
nofib-queens4x4/bm
9710
μs8739
μs1.11
nofib-queens4x4/bjbt1
9238
μs6458
μs1.43
nofib-queens4x4/bjbt2
8667
μs6096
μs1.42
nofib-queens4x4/fc
19530
μs13730
μs1.42
nofib-queens5x5/bt
104000
μs73210
μs1.42
marlowe-semantics/0000020002010200020101020201000100010001020101020201010000020102
454.9
μs322.8
μs1.41
marlowe-semantics/0001000101000000010101000001000001010101010100000001000001010000
631.4
μs447.7
μs1.41
marlowe-semantics/0003040402030103010203030303000200000104030002040304020400000102
1475
μs1043
μs1.41
marlowe-semantics/004025fd712d6c325ffa12c16d157064192992faf62e0b991d7310a2f91666b8
1159
μs898.4
μs1.29
marlowe-semantics/331e4a1bb30f28d7073c54f9a13c10ae19e2e396c299a0ce101ee6bf4b2020db
664.4
μs468.6
μs1.42
marlowe-semantics/33c3efd79d9234a78262b52bc6bbf8124cb321a467dedb278328215167eca455
892.1
μs634.1
μs1.41
marlowe-semantics/383683bfcecdab0f4df507f59631c702bd11a81ca3841f47f37633e8aacbb5de
1085
μs772.7
μs1.40
marlowe-semantics/3bb75b2e53eb13f718eacd3263ab4535f9137fabffc9de499a0de7cabb335479
424
μs302.8
μs1.40
marlowe-semantics/3db496e6cd39a8b888a89d0de07dace4397878958cab3b9d9353978b08c36d8a
1181
μs841
μs1.40
marlowe-semantics/44a9e339fa25948b48637fe7e10dcfc6d1256319a7b5ce4202cb54dfef8e37e7
423.2
μs302.1
μs1.40
marlowe-semantics/4c3efd13b6c69112a8a888372d56c86e60c232125976f29b1c3e21d9f537845c
1458
μs1040
μs1.40
marlowe-semantics/4d7adf91bfc93cebe95a7e054ec17cfbb912b32bd8aecb48a228b50e02b055c8
992
μs707.8
μs1.40
marlowe-semantics/4f9e8d361b85e62db2350dd3ae77463540e7af0d28e1eb68faeecc45f4655f57
567.5
μs404.5
μs1.40
marlowe-semantics/52df7c8dfaa5f801cd837faa65f2fd333665fff00a555ce8c55e36ddc003007a
519.6
μs369.6
μs1.41
marlowe-semantics/53ed4db7ab33d6f907eec91a861d1188269be5ae1892d07ee71161bfb55a7cb7
523.6
μs374
μs1.40
marlowe-semantics/55dfe42688ad683b638df1fa7700219f00f53b335a85a2825502ab1e0687197e
426.5
μs303.1
μs1.41
marlowe-semantics/56333d4e413dbf1a665463bf68067f63c118f38f7539b7ba7167d577c0c8b8ce
1108
μs786.9
μs1.41
marlowe-semantics/57728d8b19b0e06412786f3dfed9e1894cd0ad1d2bc2bd497ec0ecb68f989d2b
425.8
μs302.2
μs1.41
marlowe-semantics/5abae75af26f45658beccbe48f7c88e74efdfc0b8409ba1e98f95fa5b6caf999
696.4
μs495.1
μs1.41
marlowe-semantics/5d0a88250f13c49c20e146819357a808911c878a0e0a7d6f7fe1d4a619e06112
1487
μs1054
μs1.41
marlowe-semantics/5e274e0f593511543d41570a4b03646c1d7539062b5728182e073e5760561a66
1446
μs1022
μs1.41
marlowe-semantics/5e2c68ac9f62580d626636679679b97109109df7ac1a8ce86d3e43dfb5e4f6bc
736.5
μs523.1
μs1.41
marlowe-semantics/5f130d19918807b60eab4c03119d67878fb6c6712c28c54f5a25792049294acc
432.2
μs306.2
μs1.41
marlowe-semantics/5f3d46c57a56cef6764f96c9de9677ac6e494dd7a4e368d1c8dd9c1f7a4309a5
700
μs616.8
μs1.13
marlowe-semantics/67ba5a9a0245ee3aff4f34852b9889b8c810fccd3dce2a23910bddd35c503b71
7882
μs6299
μs1.25
marlowe-semantics/6d88f7294dd2b5ce02c3dc609bc7715bd508009738401d264bf9b3eb7c6f49c1
694.5
μs491.9
μs1.41
marlowe-semantics/8c7fdc3da6822b5112074380003524f50fb3a1ce6db4e501df1086773c6c0201
1651
μs1166
μs1.42
marlowe-semantics/8d9ae67656a2911ab15a8e5301c960c69aa2517055197aff6b60a87ff718d66c
511
μs362.2
μs1.41
marlowe-semantics/96e1a2fa3ceb9a402f2a5841a0b645f87b4e8e75beb636692478ec39f74ee221
431.3
μs305.7
μs1.41
marlowe-semantics/9fabc4fc3440cdb776b28c9bb1dd49c9a5b1605fe1490aa3f4f64a3fa8881b25
1488
μs1053
μs1.41
marlowe-semantics/a85173a832db3ea944fafc406dfe3fa3235254897d6d1d0e21bc380147687bd5
523.1
μs372.5
μs1.40
marlowe-semantics/a9a853b6d083551f4ed2995551af287880ef42aee239a2d9bc5314d127cce592
728.5
μs521.1
μs1.40
marlowe-semantics/acb9c83c2b78dabef8674319ad69ba54912cd9997bdf2d8b2998c6bfeef3b122
931.6
μs664
μs1.40
marlowe-semantics/acce04815e8fd51be93322888250060da173eccf3df3a605bd6bc6a456cde871
402.1
μs285.7
μs1.41
marlowe-semantics/ad6db94ed69b7161c7604568f44358e1cc11e81fea90e41afebd669e51bb60c8
833.7
μs596.9
μs1.40
marlowe-semantics/b21a4df3b0266ad3481a26d3e3d848aad2fcde89510b29cccce81971e38e0835
1924
μs1358
μs1.42
marlowe-semantics/b50170cea48ee84b80558c02b15c6df52faf884e504d2c410ad63ba46d8ca35c
1085
μs768.1
μs1.41
marlowe-semantics/bb5345bfbbc460af84e784b900ec270df1948bb1d1e29eacecd022eeb168b315
1308
μs923.4
μs1.42
marlowe-semantics/c4bb185380df6e9b66fc1ee0564f09a8d1253a51a0c0c7890f2214df9ac19274
1058
μs745.5
μs1.42
marlowe-semantics/c9efcb705ee057791f7c18a1de79c49f6e40ba143ce0579f1602fd780cabf153
1172
μs824.1
μs1.42
marlowe-semantics/ccab11ce1a8774135d0e3c9e635631b68af9e276b5dabc66ff669d5650d0be1c
1420
μs1022
μs1.39
marlowe-semantics/cdb9d5c233b288a5a9dcfbd8d5c1831a0bb46eec7a26fa31b80ae69d44805efc
1258
μs889.3
μs1.41
marlowe-semantics/ced1ea04649e093a501e43f8568ac3e6b37cd3eccec8cac9c70a4857b88a5eb8
1198
μs842.5
μs1.42
marlowe-semantics/cf542b7df466b228ca2197c2aaa89238a8122f3330fe5b77b3222f570395d9f5
707.7
μs497.8
μs1.42
marlowe-semantics/d1ab832dfab25688f8845bec9387e46ee3f00ba5822197ade7dd540489ec5e95
48700
μs36500
μs1.33
marlowe-semantics/d1c03759810747b7cab38c4296593b38567e11195d161b5bb0a2b58f89b2c65a
1463
μs1031
μs1.42
marlowe-semantics/d64607eb8a1448595081547ea8780886fcbd9e06036460eea3705c88ea867e33
425.9
μs301.3
μs1.41
marlowe-role-payout/0c9d3634aeae7038f839a1262d1a8bc724dc77af9426459417a56ec73240f0e0
253
μs192.9
μs1.31
marlowe-role-payout/0d0f01050a0a0a0b0b050d0404090e0d0506000d0a041003040e0f100e0a0408
250.9
μs176
μs1.43
marlowe-role-payout/0e00171d0f1e1f14070d0a00091f07101808021d081e1b120219081312081e15
246.2
μs172.6
μs1.43
marlowe-role-payout/0e72f62b0f922e31a2340baccc768104025400cf7fdd7dae62fbba5fc770936d
273.5
μs191.9
μs1.43
marlowe-role-payout/0e97c9d9417354d9460f2eb35018d3904b7b035af16ab299258adab93be0911a
263.9
μs185.5
μs1.42
marlowe-role-payout/0f010d040810040b10020e040f0e030b0a0d100f0c080c0c05000d04100c100f
281.6
μs198.5
μs1.42
marlowe-role-payout/1138a04a83edc0579053f9ffa9394b41df38230121fbecebee8c039776a88c0c
243
μs170.9
μs1.42
marlowe-role-payout/3565ee025317e065e8555eef288080276716366769aad89e03389f5ec4ce26d7
191.8
μs181
μs1.06
marlowe-role-payout/3569299fc986f5354d02e627a9eaa48ab46d5af52722307a0af72bae87e256dc
238.8
μs168.6
μs1.42
marlowe-role-payout/36866914aa07cf62ef36cf2cd64c7f240e3371e27bb9fff5464301678e809c40
239.1
μs168.1
μs1.42
marlowe-role-payout/371c10d2526fc0f09dbe9ed59e44dcd949270b27dc42035addd7ff9f7e0d05e7
290.4
μs204.5
μs1.42
marlowe-role-payout/3897ef714bba3e6821495b706c75f8d64264c3fdaa58a3826c808b5a768c303d
249.7
μs176
μs1.42
marlowe-role-payout/4121d88f14387d33ac5e1329618068e3848445cdd66b29e5ba382be2e02a174a
285.1
μs200.4
μs1.42
marlowe-role-payout/4299c7fcf093a5dbfe114c188e32ca199b571a7c25cb7f766bf49f12dab308be
264.8
μs186.2
μs1.42
marlowe-role-payout/452e17d16222a427707fa83f63ffb79f606cc25c755a18b1e3274c964ed5ec99
294.6
μs206.7
μs1.43
marlowe-role-payout/47364cfaf2c00f7d633283dce6cf84e4fd4e8228c0a0aa50e7c55f35c3ecaa1c
241.9
μs229.5
μs1.05
marlowe-role-payout/49b8275d0cb817be40865694ab05e3cfe5fc35fb43b78e7de68c1f3519b536bd
248.5
μs176.6
μs1.41
marlowe-role-payout/4dd7755b6ca1f0c9747c1fc0ee4da799f6f1c07108e980bd9f820911ad711ff2
322.7
μs226.9
μs1.42
marlowe-role-payout/4fbcfdb577a56b842d6f6938187a783f71d9da7519353e3da3ef0c564e1eb344
295
μs208.6
μs1.41
marlowe-role-payout/5a0725d49c733130eda8bc6ed5234f7f6ff8c9dd2d201e8806125e5fbcc081f9
254.9
μs179.4
μs1.42
marlowe-role-payout/5a2aae344e569a2c644dd9fa8c7b1f129850937eb562b7748c275f9e40bed596
240.6
μs170.3
μs1.41
marlowe-role-payout/5ade103e9530dd0d572fe1b053ea65ad925c6ebbe321e873ace8b804363fa82c
336
μs237.3
μs1.42
marlowe-role-payout/5d4c62a0671c65a14f6a15093e3efc4f1816d95a5a58fd92486bedaae8d9526b
281.2
μs199.2
μs1.41
marlowe-role-payout/5efe992e306e31cc857c64a62436ad2f9325acc5b4a74a8cebccdfd853ce63d2
239.7
μs175.8
μs1.36
marlowe-role-payout/6d66bddb4269bdf77392d3894da5341cf019d39787522af4f83f01285991e93c
244.7
μs172.1
μs1.42
marlowe-role-payout/73f044f34a30f26639c58bafe952047f74c7bf1eafebab5aadf5b73cfb9024ed
241.6
μs170.4
μs1.42
marlowe-role-payout/7b1dd76edc27f00eb382bf996378155baf74d6a7c6f3d5ec837c39d29784aade
245
μs172.6
μs1.42
marlowe-role-payout/803eae94d62e2afc0e835c204af8362170301bc329e2d849d5f5a47dddf479ec
272.5
μs191.8
μs1.42
marlowe-role-payout/87167fc5469adac97c1be749326fa79a6b7862ce68aa4abcb438e3c034bd0899
285
μs200.4
μs1.42
marlowe-role-payout/8c0fa5d9d6724c5c72c67e055d4bfc36a385ded7c3c81c08cdbd8705829af6e6
284.7
μs201.5
μs1.41
marlowe-role-payout/962c2c658b19904372984a56409707401e64e9b03c1986647134cfd329ec5139
259.9
μs184.5
μs1.41
marlowe-role-payout/996804e90f2c75fe68886fc8511304b8ab9b36785f8858f5cb098e91c159dde9
250.3
μs176.7
μs1.42
marlowe-role-payout/a004a989c005d59043f996500e110fa756ad1b85800b889d5815a0106388e1d7
259.8
μs183.3
μs1.42
marlowe-role-payout/a0fba5740174b5cd24036c8b008cb1efde73f1edae097b9325c6117a0ff40d3b
266.8
μs189.5
μs1.41
marlowe-role-payout/a1b25347409c3993feca1a60b6fcaf93d1d4bbaae19ab06fdf50cedc26cee68d
232.5
μs164.6
μs1.41
marlowe-role-payout/a27524cfad019df45e4e8316f927346d4cc39da6bdd294fb2c33c3f58e6a8994
240.8
μs169.3
μs1.42
marlowe-role-payout/a6664a2d2a82f370a34a36a45234f6b33120a39372331678a3b3690312560ce9
296.6
μs209.4
μs1.42
marlowe-role-payout/a6f064b83b31032ea7f25921364727224707268e472a569f584cc6b1d8c017e8
244.4
μs172
μs1.42
marlowe-role-payout/a7cb09f417c3f089619fe25b7624392026382b458486129efcff18f8912bf302
240.5
μs169.7
μs1.42
marlowe-role-payout/a92b4072cb8601fa697e1150c08463b14ffced54eb963df08d322216e27373cb
244.5
μs173
μs1.41
marlowe-role-payout/af2e072b5adfaa7211e0b341e1f7319c4f4e7364a4247c9247132a927e914753
287.9
μs203.1
μs1.42
marlowe-role-payout/b43564af5f13cc5208b92b1ad6d45369446f378d3891e5cb3e353b30d4f3fb10
244.6
μs172.6
μs1.42
marlowe-role-payout/b6243a5b4c353ce4852aa41705111d57867d2783eeef76f6d59beb2360da6e90
323.7
μs228.6
μs1.42
marlowe-role-payout/b869f3928200061abb1c3060425b9354b0e08cbf4400b340b8707c14b34317cd
352.2
μs249.4
μs1.41
marlowe-role-payout/bcdbc576d63b0454100ad06893812edafc2e7e4934fec1b44e2d06eb34f36eb8
245.2
μs172.8
μs1.42
marlowe-role-payout/bd460b7549b70c52e37b312a4242041eac18fe4a266f018bcea0c78a9085a271
278.1
μs195.9
μs1.42
marlowe-role-payout/bd79f4a84db23b7c4cd219d498bd581e085cbc3437957e74a8862281a700700b
279.7
μs233.8
μs1.20
This comment was automatically generated by workflow using github-action-benchmark.
CC: @IntersectMBO/plutus-core