------------------------------------------------------------------------
-- A modality with simultaneous support for affine and linear types
------------------------------------------------------------------------

-- It might make sense to replace some of the proofs with automated
-- proofs.

module Graded.Modality.Instances.Linear-or-affine where

import Tools.Algebra
open import Tools.Empty
open import Tools.Function
open import Tools.Level
open import Tools.Nat using (1+; Sequence)
open import Tools.Product
open import Tools.PropositionalEquality as PE
import Tools.Reasoning.PartialOrder
import Tools.Reasoning.PropositionalEquality
open import Tools.Relation
open import Tools.Sum using (_⊎_; inj₁; injβ‚‚)

import Graded.Modality
open import Graded.FullReduction.Assumptions
import Graded.Modality.Properties.Addition as Addition
import Graded.Modality.Properties.Greatest-lower-bound as GLB
import Graded.Modality.Properties.Meet as Meet
import Graded.Modality.Properties.Multiplication as Multiplication
import Graded.Modality.Properties.Natrec as Natrec
import Graded.Modality.Properties.PartialOrder as PartialOrder
import Graded.Modality.Properties.Star as Star
import Graded.Modality.Properties.Subtraction as Subtraction
open import Graded.Modality.Variant lzero
open import Definition.Typed.Restrictions
open import Graded.Usage.Restrictions

open import Definition.Untyped using (BMΞ£; 𝕀; 𝕨)

private variable
  variant : Modality-variant
  trs     : Type-restrictions _
  urs     : Usage-restrictions _

------------------------------------------------------------------------
-- The type

-- Zero, one, at most one, or unlimited.

data Linear-or-affine : Set where
  𝟘 πŸ™ β‰€πŸ™ ≀ω : Linear-or-affine

open Graded.Modality Linear-or-affine
open Tools.Algebra   Linear-or-affine

private variable
  n n₁ nβ‚‚ p q r s s₁ sβ‚‚ z z₁ zβ‚‚ : Linear-or-affine

------------------------------------------------------------------------
-- Basic operations

-- Meet.

infixr 43 _∧_

_∧_ : Linear-or-affine β†’ Linear-or-affine β†’ Linear-or-affine
𝟘  ∧ 𝟘  = 𝟘
πŸ™  ∧ πŸ™  = πŸ™
≀ω ∧ _  = ≀ω
_  ∧ ≀ω = ≀ω
_  ∧ _  = β‰€πŸ™

-- Addition.

infixr 40 _+_

_+_ : Linear-or-affine β†’ Linear-or-affine β†’ Linear-or-affine
𝟘 + q = q
p + 𝟘 = p
_ + _ = ≀ω

-- Multiplication.

infixr 45 _Β·_

_Β·_ : Linear-or-affine β†’ Linear-or-affine β†’ Linear-or-affine
𝟘  · _  = 𝟘
_  · 𝟘  = 𝟘
πŸ™  Β· q  = q
p  Β· πŸ™  = p
β‰€πŸ™ Β· β‰€πŸ™ = β‰€πŸ™
_  Β· _  = ≀ω

-- A decision procedure for equality.

infix 10 _β‰Ÿ_

_β‰Ÿ_ : Decidable (_≑_ {A = Linear-or-affine})
𝟘  β‰Ÿ 𝟘  = yes refl
𝟘  β‰Ÿ πŸ™  = no (Ξ» ())
𝟘  β‰Ÿ β‰€πŸ™ = no (Ξ» ())
𝟘  β‰Ÿ ≀ω = no (Ξ» ())
πŸ™  β‰Ÿ 𝟘  = no (Ξ» ())
πŸ™  β‰Ÿ πŸ™  = yes refl
πŸ™  β‰Ÿ β‰€πŸ™ = no (Ξ» ())
πŸ™  β‰Ÿ ≀ω = no (Ξ» ())
β‰€πŸ™ β‰Ÿ 𝟘  = no (Ξ» ())
β‰€πŸ™ β‰Ÿ πŸ™  = no (Ξ» ())
β‰€πŸ™ β‰Ÿ β‰€πŸ™ = yes refl
β‰€πŸ™ β‰Ÿ ≀ω = no (Ξ» ())
≀ω β‰Ÿ 𝟘  = no (Ξ» ())
≀ω β‰Ÿ πŸ™  = no (Ξ» ())
≀ω β‰Ÿ β‰€πŸ™ = no (Ξ» ())
≀ω β‰Ÿ ≀ω = yes refl

------------------------------------------------------------------------
-- Some properties

-- The inferred ordering relation.

infix 10 _≀_

_≀_ : Linear-or-affine β†’ Linear-or-affine β†’ Set
p ≀ q = p ≑ p ∧ q

-- The quantity ≀ω is smaller than all others.

≀ω≀ : βˆ€ p β†’ ≀ω ≀ p
≀ω≀ _ = refl

-- 𝟘 is maximal.

𝟘-maximal : 𝟘 ≀ p β†’ p ≑ 𝟘
𝟘-maximal {p = 𝟘}  refl = refl
𝟘-maximal {p = πŸ™}  ()
𝟘-maximal {p = β‰€πŸ™} ()
𝟘-maximal {p = ≀ω} ()

-- πŸ™ is maximal.

πŸ™-maximal : πŸ™ ≀ p β†’ p ≑ πŸ™
πŸ™-maximal {p = πŸ™}  refl = refl
πŸ™-maximal {p = 𝟘}  ()
πŸ™-maximal {p = β‰€πŸ™} ()
πŸ™-maximal {p = ≀ω} ()

opaque

  -- Non-zero values are bounded by πŸ™.

  β‰’πŸ˜β†’β‰€πŸ™ : p β‰’ 𝟘 β†’ p ≀ πŸ™
  β‰’πŸ˜β†’β‰€πŸ™ {(𝟘)} πŸ˜β‰’πŸ˜ = βŠ₯-elim (πŸ˜β‰’πŸ˜ refl)
  β‰’πŸ˜β†’β‰€πŸ™ {(πŸ™)} _ = refl
  β‰’πŸ˜β†’β‰€πŸ™ {(β‰€πŸ™)} _ = refl
  β‰’πŸ˜β†’β‰€πŸ™ {(≀ω)} _ = refl

-- The value ≀ω is a left zero for _+_.

+-zeroΛ‘ : LeftZero ≀ω _+_
+-zeroˑ 𝟘  = refl
+-zeroΛ‘ πŸ™  = refl
+-zeroΛ‘ β‰€πŸ™ = refl
+-zeroΛ‘ ≀ω = refl

-- The value ≀ω is a right zero for _+_.

+-zeroΚ³ : RightZero ≀ω _+_
+-zeroʳ 𝟘  = refl
+-zeroΚ³ πŸ™  = refl
+-zeroΚ³ β‰€πŸ™ = refl
+-zeroΚ³ ≀ω = refl

-- The value ≀ω is a zero for _+_.

+-zero : Zero ≀ω _+_
+-zero = +-zeroΛ‘ , +-zeroΚ³

-- The sum of two non-zero values is ≀ω.

β‰’πŸ˜+β‰’πŸ˜ : p β‰’ 𝟘 β†’ q β‰’ 𝟘 β†’ p + q ≑ ≀ω
β‰’πŸ˜+β‰’πŸ˜ {p = 𝟘}           πŸ˜β‰’πŸ˜ _   = βŠ₯-elim (πŸ˜β‰’πŸ˜ refl)
β‰’πŸ˜+β‰’πŸ˜ {p = πŸ™}  {q = 𝟘}  _   πŸ˜β‰’πŸ˜ = βŠ₯-elim (πŸ˜β‰’πŸ˜ refl)
β‰’πŸ˜+β‰’πŸ˜ {p = πŸ™}  {q = πŸ™}  _   _   = refl
β‰’πŸ˜+β‰’πŸ˜ {p = πŸ™}  {q = β‰€πŸ™} _   _   = refl
β‰’πŸ˜+β‰’πŸ˜ {p = πŸ™}  {q = ≀ω} _   _   = refl
β‰’πŸ˜+β‰’πŸ˜ {p = β‰€πŸ™} {q = 𝟘}  _   πŸ˜β‰’πŸ˜ = βŠ₯-elim (πŸ˜β‰’πŸ˜ refl)
β‰’πŸ˜+β‰’πŸ˜ {p = β‰€πŸ™} {q = πŸ™}  _   _   = refl
β‰’πŸ˜+β‰’πŸ˜ {p = β‰€πŸ™} {q = β‰€πŸ™} _   _   = refl
β‰’πŸ˜+β‰’πŸ˜ {p = β‰€πŸ™} {q = ≀ω} _   _   = refl
β‰’πŸ˜+β‰’πŸ˜ {p = ≀ω} {q = 𝟘}  _   πŸ˜β‰’πŸ˜ = βŠ₯-elim (πŸ˜β‰’πŸ˜ refl)
β‰’πŸ˜+β‰’πŸ˜ {p = ≀ω} {q = πŸ™}  _   _   = refl
β‰’πŸ˜+β‰’πŸ˜ {p = ≀ω} {q = β‰€πŸ™} _   _   = refl
β‰’πŸ˜+β‰’πŸ˜ {p = ≀ω} {q = ≀ω} _   _   = refl

opaque

  -- The sum of ≀ω and p is ≀ω

  ≀ω+ : βˆ€ p β†’ ≀ω + p ≑ ≀ω
  ≀ω+ 𝟘 = refl
  ≀ω+ πŸ™ = refl
  ≀ω+ β‰€πŸ™ = refl
  ≀ω+ ≀ω = refl

-- If pΒ +Β q is πŸ™, then either p is πŸ™ and q is 𝟘, or q is πŸ™ and p is 𝟘.

+β‰‘πŸ™ : p + q ≑ πŸ™ β†’ p ≑ πŸ™ Γ— q ≑ 𝟘 ⊎ p ≑ 𝟘 Γ— q ≑ πŸ™
+β‰‘πŸ™ {p = 𝟘}  {q = πŸ™}  refl = injβ‚‚ (refl , refl)
+β‰‘πŸ™ {p = πŸ™}  {q = 𝟘}  refl = inj₁ (refl , refl)
+β‰‘πŸ™ {p = 𝟘}  {q = β‰€πŸ™} ()
+β‰‘πŸ™ {p = 𝟘}  {q = ≀ω} ()
+β‰‘πŸ™ {p = 𝟘}  {q = 𝟘}  ()
+β‰‘πŸ™ {p = πŸ™}  {q = πŸ™}  ()
+β‰‘πŸ™ {p = πŸ™}  {q = β‰€πŸ™} ()
+β‰‘πŸ™ {p = πŸ™}  {q = ≀ω} ()
+β‰‘πŸ™ {p = β‰€πŸ™} {q = 𝟘}  ()
+β‰‘πŸ™ {p = β‰€πŸ™} {q = πŸ™}  ()
+β‰‘πŸ™ {p = β‰€πŸ™} {q = β‰€πŸ™} ()
+β‰‘πŸ™ {p = β‰€πŸ™} {q = ≀ω} ()
+β‰‘πŸ™ {p = ≀ω} {q = 𝟘}  ()
+β‰‘πŸ™ {p = ≀ω} {q = πŸ™}  ()
+β‰‘πŸ™ {p = ≀ω} {q = β‰€πŸ™} ()
+β‰‘πŸ™ {p = ≀ω} {q = ≀ω} ()

-- If p ∧ q isΒ πŸ™, then p and q isΒ πŸ™.

βˆ§β‰‘πŸ™ : p ∧ q ≑ πŸ™ β†’ p ≑ πŸ™ Γ— q ≑ πŸ™
βˆ§β‰‘πŸ™ {p = πŸ™}  {q = πŸ™}  _  = refl , refl
βˆ§β‰‘πŸ™ {p = 𝟘}  {q = 𝟘}  ()
βˆ§β‰‘πŸ™ {p = 𝟘}  {q = β‰€πŸ™} ()
βˆ§β‰‘πŸ™ {p = 𝟘}  {q = ≀ω} ()
βˆ§β‰‘πŸ™ {p = 𝟘}  {q = πŸ™}  ()
βˆ§β‰‘πŸ™ {p = πŸ™}  {q = 𝟘}  ()
βˆ§β‰‘πŸ™ {p = πŸ™}  {q = β‰€πŸ™} ()
βˆ§β‰‘πŸ™ {p = πŸ™}  {q = ≀ω} ()
βˆ§β‰‘πŸ™ {p = β‰€πŸ™} {q = 𝟘}  ()
βˆ§β‰‘πŸ™ {p = β‰€πŸ™} {q = πŸ™}  ()
βˆ§β‰‘πŸ™ {p = β‰€πŸ™} {q = β‰€πŸ™} ()
βˆ§β‰‘πŸ™ {p = β‰€πŸ™} {q = ≀ω} ()
βˆ§β‰‘πŸ™ {p = ≀ω}          ()

opaque

  -- πŸ™ ∧ p is not 𝟘

  πŸ™βˆ§pβ‰’πŸ˜ : βˆ€ p β†’ πŸ™ ∧ p β‰’ 𝟘
  πŸ™βˆ§pβ‰’πŸ˜ 𝟘 ()
  πŸ™βˆ§pβ‰’πŸ˜ πŸ™ ()
  πŸ™βˆ§pβ‰’πŸ˜ β‰€πŸ™ ()
  πŸ™βˆ§pβ‰’πŸ˜ ≀ω ()

-- Multiplication is idempotent.

Β·-idempotent : Idempotent _Β·_
·-idempotent 𝟘  = refl
Β·-idempotent πŸ™  = refl
Β·-idempotent β‰€πŸ™ = refl
Β·-idempotent ≀ω = refl

-- Multiplication is commutative.

Β·-comm : Commutative _Β·_
Β·-comm = Ξ» where
  𝟘 𝟘   β†’ refl
  𝟘 πŸ™   β†’ refl
  𝟘 β‰€πŸ™  β†’ refl
  𝟘 ≀ω  β†’ refl
  πŸ™ 𝟘   β†’ refl
  πŸ™ πŸ™   β†’ refl
  πŸ™ β‰€πŸ™  β†’ refl
  πŸ™ ≀ω  β†’ refl
  β‰€πŸ™ 𝟘  β†’ refl
  β‰€πŸ™ πŸ™  β†’ refl
  β‰€πŸ™ β‰€πŸ™ β†’ refl
  β‰€πŸ™ ≀ω β†’ refl
  ≀ω 𝟘  β†’ refl
  ≀ω πŸ™  β†’ refl
  ≀ω β‰€πŸ™ β†’ refl
  ≀ω ≀ω β†’ refl

-- If p is not 𝟘, then ≀ω · p is equal to ≀ω.

β‰€Ο‰Β·β‰’πŸ˜ : p β‰’ 𝟘 β†’ ≀ω Β· p ≑ ≀ω
β‰€Ο‰Β·β‰’πŸ˜ {p = 𝟘}  πŸ˜β‰’πŸ˜ = βŠ₯-elim (πŸ˜β‰’πŸ˜ refl)
β‰€Ο‰Β·β‰’πŸ˜ {p = πŸ™}  _   = refl
β‰€Ο‰Β·β‰’πŸ˜ {p = β‰€πŸ™} _   = refl
β‰€Ο‰Β·β‰’πŸ˜ {p = ≀ω} _   = refl

opaque

  -- If p is not 𝟘, then p · ≀ω is equal to ≀ω.

  β‰’πŸ˜Β·β‰€Ο‰ : p β‰’ 𝟘 β†’ p Β· ≀ω ≑ ≀ω
  β‰’πŸ˜Β·β‰€Ο‰ {p} pβ‰’πŸ˜ = trans (Β·-comm p ≀ω) (β‰€Ο‰Β·β‰’πŸ˜ pβ‰’πŸ˜)

-- The value of ≀ω · p is notΒ πŸ™.

β‰€Ο‰Β·β‰’πŸ™ : βˆ€ p β†’ ≀ω Β· p β‰’ πŸ™
β‰€Ο‰Β·β‰’πŸ™ 𝟘  ()
β‰€Ο‰Β·β‰’πŸ™ πŸ™  ()
β‰€Ο‰Β·β‰’πŸ™ β‰€πŸ™ ()
β‰€Ο‰Β·β‰’πŸ™ ≀ω ()

-- If p is not 𝟘, then πŸ™Β Β·Β p is not 𝟘.

πŸ™Β·β‰’πŸ˜ : p β‰’ 𝟘 β†’ πŸ™ Β· p β‰’ 𝟘
πŸ™Β·β‰’πŸ˜ {p = 𝟘}  πŸ˜β‰’πŸ˜ = πŸ˜β‰’πŸ˜
πŸ™Β·β‰’πŸ˜ {p = πŸ™}  _   = Ξ» ()
πŸ™Β·β‰’πŸ˜ {p = β‰€πŸ™} _   = Ξ» ()
πŸ™Β·β‰’πŸ˜ {p = ≀ω} _   = Ξ» ()

-- If p is not 𝟘, then β‰€πŸ™Β Β·Β p is not 𝟘.

β‰€πŸ™Β·β‰’πŸ˜ : p β‰’ 𝟘 β†’ β‰€πŸ™ Β· p β‰’ 𝟘
β‰€πŸ™Β·β‰’πŸ˜ {p = 𝟘}  πŸ˜β‰’πŸ˜ = πŸ˜β‰’πŸ˜
β‰€πŸ™Β·β‰’πŸ˜ {p = πŸ™}  _   = Ξ» ()
β‰€πŸ™Β·β‰’πŸ˜ {p = β‰€πŸ™} _   = Ξ» ()
β‰€πŸ™Β·β‰’πŸ˜ {p = ≀ω} _   = Ξ» ()

opaque

  -- The grade ≀ω · (pΒ +Β q) is bounded by ≀ω · q.

  ≀ω·+≀≀ω·ʳ : βˆ€ p β†’ ≀ω Β· (p + q) ≀ ≀ω Β· q
  ≀ω·+≀≀ω·ʳ {q = 𝟘}  𝟘  = refl
  ≀ω·+≀≀ω·ʳ {q = πŸ™}  𝟘  = refl
  ≀ω·+≀≀ω·ʳ {q = β‰€πŸ™} 𝟘  = refl
  ≀ω·+≀≀ω·ʳ {q = ≀ω} 𝟘  = refl
  ≀ω·+≀≀ω·ʳ {q = 𝟘}  πŸ™  = refl
  ≀ω·+≀≀ω·ʳ {q = πŸ™}  πŸ™  = refl
  ≀ω·+≀≀ω·ʳ {q = β‰€πŸ™} πŸ™  = refl
  ≀ω·+≀≀ω·ʳ {q = ≀ω} πŸ™  = refl
  ≀ω·+≀≀ω·ʳ {q = 𝟘}  β‰€πŸ™ = refl
  ≀ω·+≀≀ω·ʳ {q = πŸ™}  β‰€πŸ™ = refl
  ≀ω·+≀≀ω·ʳ {q = β‰€πŸ™} β‰€πŸ™ = refl
  ≀ω·+≀≀ω·ʳ {q = ≀ω} β‰€πŸ™ = refl
  ≀ω·+≀≀ω·ʳ {q = 𝟘}  ≀ω = refl
  ≀ω·+≀≀ω·ʳ {q = πŸ™}  ≀ω = refl
  ≀ω·+≀≀ω·ʳ {q = β‰€πŸ™} ≀ω = refl
  ≀ω·+≀≀ω·ʳ {q = ≀ω} ≀ω = refl

opaque

  -- The product of two non-zero values is non-zero

  β‰’πŸ˜Β·β‰’πŸ˜ : p β‰’ 𝟘 β†’ q β‰’ 𝟘 β†’ p Β· q β‰’ 𝟘
  β‰’πŸ˜Β·β‰’πŸ˜ {p = 𝟘}           pβ‰’πŸ˜ _   _  = pβ‰’πŸ˜ refl
  β‰’πŸ˜Β·β‰’πŸ˜ {p = πŸ™}  {q = 𝟘}  _   qβ‰’πŸ˜ _  = qβ‰’πŸ˜ refl
  β‰’πŸ˜Β·β‰’πŸ˜ {p = β‰€πŸ™} {q = 𝟘}  _   qβ‰’πŸ˜ _  = qβ‰’πŸ˜ refl
  β‰’πŸ˜Β·β‰’πŸ˜ {p = ≀ω} {q = 𝟘}  _   qβ‰’πŸ˜ _  = qβ‰’πŸ˜ refl
  β‰’πŸ˜Β·β‰’πŸ˜ {p = πŸ™}  {q = πŸ™}  _   _   ()
  β‰’πŸ˜Β·β‰’πŸ˜ {p = πŸ™}  {q = β‰€πŸ™} _   _   ()
  β‰’πŸ˜Β·β‰’πŸ˜ {p = πŸ™}  {q = ≀ω} _   _   ()
  β‰’πŸ˜Β·β‰’πŸ˜ {p = β‰€πŸ™} {q = πŸ™}  _   _   ()
  β‰’πŸ˜Β·β‰’πŸ˜ {p = β‰€πŸ™} {q = β‰€πŸ™} _   _   ()
  β‰’πŸ˜Β·β‰’πŸ˜ {p = β‰€πŸ™} {q = ≀ω} _   _   ()
  β‰’πŸ˜Β·β‰’πŸ˜ {p = ≀ω} {q = πŸ™}  _   _   ()
  β‰’πŸ˜Β·β‰’πŸ˜ {p = ≀ω} {q = β‰€πŸ™} _   _   ()
  β‰’πŸ˜Β·β‰’πŸ˜ {p = ≀ω} {q = ≀ω} _   _   ()

------------------------------------------------------------------------
-- The modality without the star operation

-- The "linear or affine types" semiring with meet

linear-or-affine-semiring-with-meet : Semiring-with-meet
linear-or-affine-semiring-with-meet  = record
  { _+_          = _+_
  ; _Β·_          = _Β·_
  ; _∧_          = _∧_
  ; 𝟘            = 𝟘
  ; πŸ™            = πŸ™
  ; Ο‰            = ≀ω
  ; Ο‰β‰€πŸ™          = refl
  ; ω·+≀ω·ʳ      = Ξ» {p = p} β†’ ≀ω·+≀≀ω·ʳ p
  ; is-𝟘?        = _β‰Ÿ 𝟘
  ; +-Β·-Semiring = record
    { isSemiringWithoutAnnihilatingZero = record
      { +-isCommutativeMonoid = record
        { isMonoid = record
          { isSemigroup = record
            { isMagma = record
              { isEquivalence = PE.isEquivalence
              ; βˆ™-cong        = congβ‚‚ _+_
              }
            ; assoc = +-assoc
            }
          ; identity =
                (Ξ» _ β†’ refl)
              , comm∧idΛ‘β‡’idΚ³ +-comm (Ξ» _ β†’ refl)
          }
        ; comm = +-comm
        }
      ; *-cong = congβ‚‚ _Β·_
      ; *-assoc = Β·-assoc
      ; *-identity =
              Β·-identityΛ‘
            , comm∧idΛ‘β‡’idΚ³ Β·-comm Β·-identityΛ‘
      ; distrib =
            Β·-distribΛ‘-+
          , comm∧distrΛ‘β‡’distrΚ³ Β·-comm Β·-distribΛ‘-+
      }
    ; zero =
          (Ξ» _ β†’ refl)
        , comm∧zeΛ‘β‡’zeΚ³ Β·-comm (Ξ» _ β†’ refl)
    }
  ; ∧-Semilattice = record
    { isBand = record
      { isSemigroup = record
        { isMagma = record
          { isEquivalence = PE.isEquivalence
          ; βˆ™-cong        = congβ‚‚ _∧_
          }
        ; assoc = ∧-assoc
        }
      ; idem = Ξ» where
          𝟘  β†’ refl
          πŸ™  β†’ refl
          β‰€πŸ™ β†’ refl
          ≀ω β†’ refl
      }
    ; comm = ∧-comm
    }
  ; ·-distrib-∧ =
        ·-distribˑ-∧
      , comm∧distrΛ‘β‡’distrΚ³ Β·-comm Β·-distribΛ‘-∧
  ; +-distrib-∧ =
        +-distribˑ-∧
      , comm∧distrΛ‘β‡’distrΚ³ +-comm +-distribΛ‘-∧
  }
  where
  +-assoc : Associative _+_
  +-assoc = Ξ» where
    𝟘  _  _  β†’ refl
    πŸ™  𝟘  _  β†’ refl
    πŸ™  πŸ™  𝟘  β†’ refl
    πŸ™  πŸ™  πŸ™  β†’ refl
    πŸ™  πŸ™  β‰€πŸ™ β†’ refl
    πŸ™  πŸ™  ≀ω β†’ refl
    πŸ™  β‰€πŸ™ 𝟘  β†’ refl
    πŸ™  β‰€πŸ™ πŸ™  β†’ refl
    πŸ™  β‰€πŸ™ β‰€πŸ™ β†’ refl
    πŸ™  β‰€πŸ™ ≀ω β†’ refl
    πŸ™  ≀ω 𝟘  β†’ refl
    πŸ™  ≀ω πŸ™  β†’ refl
    πŸ™  ≀ω β‰€πŸ™ β†’ refl
    πŸ™  ≀ω ≀ω β†’ refl
    β‰€πŸ™ 𝟘  _  β†’ refl
    β‰€πŸ™ πŸ™  𝟘  β†’ refl
    β‰€πŸ™ πŸ™  πŸ™  β†’ refl
    β‰€πŸ™ πŸ™  β‰€πŸ™ β†’ refl
    β‰€πŸ™ πŸ™  ≀ω β†’ refl
    β‰€πŸ™ β‰€πŸ™ 𝟘  β†’ refl
    β‰€πŸ™ β‰€πŸ™ πŸ™  β†’ refl
    β‰€πŸ™ β‰€πŸ™ β‰€πŸ™ β†’ refl
    β‰€πŸ™ β‰€πŸ™ ≀ω β†’ refl
    β‰€πŸ™ ≀ω 𝟘  β†’ refl
    β‰€πŸ™ ≀ω πŸ™  β†’ refl
    β‰€πŸ™ ≀ω β‰€πŸ™ β†’ refl
    β‰€πŸ™ ≀ω ≀ω β†’ refl
    ≀ω 𝟘  _  β†’ refl
    ≀ω πŸ™  𝟘  β†’ refl
    ≀ω πŸ™  πŸ™  β†’ refl
    ≀ω πŸ™  β‰€πŸ™ β†’ refl
    ≀ω πŸ™  ≀ω β†’ refl
    ≀ω β‰€πŸ™ 𝟘  β†’ refl
    ≀ω β‰€πŸ™ πŸ™  β†’ refl
    ≀ω β‰€πŸ™ β‰€πŸ™ β†’ refl
    ≀ω β‰€πŸ™ ≀ω β†’ refl
    ≀ω ≀ω 𝟘  β†’ refl
    ≀ω ≀ω πŸ™  β†’ refl
    ≀ω ≀ω β‰€πŸ™ β†’ refl
    ≀ω ≀ω ≀ω β†’ refl

  +-comm : Commutative _+_
  +-comm = Ξ» where
    𝟘 𝟘   β†’ refl
    𝟘 πŸ™   β†’ refl
    𝟘 β‰€πŸ™  β†’ refl
    𝟘 ≀ω  β†’ refl
    πŸ™ 𝟘   β†’ refl
    πŸ™ πŸ™   β†’ refl
    πŸ™ β‰€πŸ™  β†’ refl
    πŸ™ ≀ω  β†’ refl
    β‰€πŸ™ 𝟘  β†’ refl
    β‰€πŸ™ πŸ™  β†’ refl
    β‰€πŸ™ β‰€πŸ™ β†’ refl
    β‰€πŸ™ ≀ω β†’ refl
    ≀ω 𝟘  β†’ refl
    ≀ω πŸ™  β†’ refl
    ≀ω β‰€πŸ™ β†’ refl
    ≀ω ≀ω β†’ refl

  Β·-assoc : Associative _Β·_
  Β·-assoc = Ξ» where
    𝟘  _  _  β†’ refl
    πŸ™  𝟘  _  β†’ refl
    πŸ™  πŸ™  𝟘  β†’ refl
    πŸ™  πŸ™  πŸ™  β†’ refl
    πŸ™  πŸ™  β‰€πŸ™ β†’ refl
    πŸ™  πŸ™  ≀ω β†’ refl
    πŸ™  β‰€πŸ™ 𝟘  β†’ refl
    πŸ™  β‰€πŸ™ πŸ™  β†’ refl
    πŸ™  β‰€πŸ™ β‰€πŸ™ β†’ refl
    πŸ™  β‰€πŸ™ ≀ω β†’ refl
    πŸ™  ≀ω 𝟘  β†’ refl
    πŸ™  ≀ω πŸ™  β†’ refl
    πŸ™  ≀ω β‰€πŸ™ β†’ refl
    πŸ™  ≀ω ≀ω β†’ refl
    β‰€πŸ™ 𝟘  _  β†’ refl
    β‰€πŸ™ πŸ™  𝟘  β†’ refl
    β‰€πŸ™ πŸ™  πŸ™  β†’ refl
    β‰€πŸ™ πŸ™  β‰€πŸ™ β†’ refl
    β‰€πŸ™ πŸ™  ≀ω β†’ refl
    β‰€πŸ™ β‰€πŸ™ 𝟘  β†’ refl
    β‰€πŸ™ β‰€πŸ™ πŸ™  β†’ refl
    β‰€πŸ™ β‰€πŸ™ β‰€πŸ™ β†’ refl
    β‰€πŸ™ β‰€πŸ™ ≀ω β†’ refl
    β‰€πŸ™ ≀ω 𝟘  β†’ refl
    β‰€πŸ™ ≀ω πŸ™  β†’ refl
    β‰€πŸ™ ≀ω β‰€πŸ™ β†’ refl
    β‰€πŸ™ ≀ω ≀ω β†’ refl
    ≀ω 𝟘  _  β†’ refl
    ≀ω πŸ™  𝟘  β†’ refl
    ≀ω πŸ™  πŸ™  β†’ refl
    ≀ω πŸ™  β‰€πŸ™ β†’ refl
    ≀ω πŸ™  ≀ω β†’ refl
    ≀ω β‰€πŸ™ 𝟘  β†’ refl
    ≀ω β‰€πŸ™ πŸ™  β†’ refl
    ≀ω β‰€πŸ™ β‰€πŸ™ β†’ refl
    ≀ω β‰€πŸ™ ≀ω β†’ refl
    ≀ω ≀ω 𝟘  β†’ refl
    ≀ω ≀ω πŸ™  β†’ refl
    ≀ω ≀ω β‰€πŸ™ β†’ refl
    ≀ω ≀ω ≀ω β†’ refl

  Β·-identityΛ‘ : LeftIdentity πŸ™ _Β·_
  Β·-identityΛ‘ = Ξ» where
    𝟘  β†’ refl
    πŸ™  β†’ refl
    β‰€πŸ™ β†’ refl
    ≀ω β†’ refl

  Β·-distribΛ‘-+ : _Β·_ DistributesOverΛ‘ _+_
  Β·-distribΛ‘-+ = Ξ» where
    𝟘  _  _  β†’ refl
    πŸ™  𝟘  _  β†’ refl
    πŸ™  πŸ™  𝟘  β†’ refl
    πŸ™  πŸ™  πŸ™  β†’ refl
    πŸ™  πŸ™  β‰€πŸ™ β†’ refl
    πŸ™  πŸ™  ≀ω β†’ refl
    πŸ™  β‰€πŸ™ 𝟘  β†’ refl
    πŸ™  β‰€πŸ™ πŸ™  β†’ refl
    πŸ™  β‰€πŸ™ β‰€πŸ™ β†’ refl
    πŸ™  β‰€πŸ™ ≀ω β†’ refl
    πŸ™  ≀ω 𝟘  β†’ refl
    πŸ™  ≀ω πŸ™  β†’ refl
    πŸ™  ≀ω β‰€πŸ™ β†’ refl
    πŸ™  ≀ω ≀ω β†’ refl
    β‰€πŸ™ 𝟘  _  β†’ refl
    β‰€πŸ™ πŸ™  𝟘  β†’ refl
    β‰€πŸ™ πŸ™  πŸ™  β†’ refl
    β‰€πŸ™ πŸ™  β‰€πŸ™ β†’ refl
    β‰€πŸ™ πŸ™  ≀ω β†’ refl
    β‰€πŸ™ β‰€πŸ™ 𝟘  β†’ refl
    β‰€πŸ™ β‰€πŸ™ πŸ™  β†’ refl
    β‰€πŸ™ β‰€πŸ™ β‰€πŸ™ β†’ refl
    β‰€πŸ™ β‰€πŸ™ ≀ω β†’ refl
    β‰€πŸ™ ≀ω 𝟘  β†’ refl
    β‰€πŸ™ ≀ω πŸ™  β†’ refl
    β‰€πŸ™ ≀ω β‰€πŸ™ β†’ refl
    β‰€πŸ™ ≀ω ≀ω β†’ refl
    ≀ω 𝟘  _  β†’ refl
    ≀ω πŸ™  𝟘  β†’ refl
    ≀ω πŸ™  πŸ™  β†’ refl
    ≀ω πŸ™  β‰€πŸ™ β†’ refl
    ≀ω πŸ™  ≀ω β†’ refl
    ≀ω β‰€πŸ™ 𝟘  β†’ refl
    ≀ω β‰€πŸ™ πŸ™  β†’ refl
    ≀ω β‰€πŸ™ β‰€πŸ™ β†’ refl
    ≀ω β‰€πŸ™ ≀ω β†’ refl
    ≀ω ≀ω 𝟘  β†’ refl
    ≀ω ≀ω πŸ™  β†’ refl
    ≀ω ≀ω β‰€πŸ™ β†’ refl
    ≀ω ≀ω ≀ω β†’ refl

  ∧-assoc : Associative _∧_
  ∧-assoc = λ where
    𝟘  𝟘  𝟘  β†’ refl
    𝟘  𝟘  πŸ™  β†’ refl
    𝟘  𝟘  β‰€πŸ™ β†’ refl
    𝟘  𝟘  ≀ω β†’ refl
    𝟘  πŸ™  𝟘  β†’ refl
    𝟘  πŸ™  πŸ™  β†’ refl
    𝟘  πŸ™  β‰€πŸ™ β†’ refl
    𝟘  πŸ™  ≀ω β†’ refl
    𝟘  β‰€πŸ™ 𝟘  β†’ refl
    𝟘  β‰€πŸ™ πŸ™  β†’ refl
    𝟘  β‰€πŸ™ β‰€πŸ™ β†’ refl
    𝟘  β‰€πŸ™ ≀ω β†’ refl
    𝟘  ≀ω 𝟘  β†’ refl
    𝟘  ≀ω πŸ™  β†’ refl
    𝟘  ≀ω β‰€πŸ™ β†’ refl
    𝟘  ≀ω ≀ω β†’ refl
    πŸ™  𝟘  𝟘  β†’ refl
    πŸ™  𝟘  πŸ™  β†’ refl
    πŸ™  𝟘  β‰€πŸ™ β†’ refl
    πŸ™  𝟘  ≀ω β†’ refl
    πŸ™  πŸ™  𝟘  β†’ refl
    πŸ™  πŸ™  πŸ™  β†’ refl
    πŸ™  πŸ™  β‰€πŸ™ β†’ refl
    πŸ™  πŸ™  ≀ω β†’ refl
    πŸ™  β‰€πŸ™ 𝟘  β†’ refl
    πŸ™  β‰€πŸ™ πŸ™  β†’ refl
    πŸ™  β‰€πŸ™ β‰€πŸ™ β†’ refl
    πŸ™  β‰€πŸ™ ≀ω β†’ refl
    πŸ™  ≀ω 𝟘  β†’ refl
    πŸ™  ≀ω πŸ™  β†’ refl
    πŸ™  ≀ω β‰€πŸ™ β†’ refl
    πŸ™  ≀ω ≀ω β†’ refl
    β‰€πŸ™ 𝟘  𝟘  β†’ refl
    β‰€πŸ™ 𝟘  πŸ™  β†’ refl
    β‰€πŸ™ 𝟘  β‰€πŸ™ β†’ refl
    β‰€πŸ™ 𝟘  ≀ω β†’ refl
    β‰€πŸ™ πŸ™  𝟘  β†’ refl
    β‰€πŸ™ πŸ™  πŸ™  β†’ refl
    β‰€πŸ™ πŸ™  β‰€πŸ™ β†’ refl
    β‰€πŸ™ πŸ™  ≀ω β†’ refl
    β‰€πŸ™ β‰€πŸ™ 𝟘  β†’ refl
    β‰€πŸ™ β‰€πŸ™ πŸ™  β†’ refl
    β‰€πŸ™ β‰€πŸ™ β‰€πŸ™ β†’ refl
    β‰€πŸ™ β‰€πŸ™ ≀ω β†’ refl
    β‰€πŸ™ ≀ω 𝟘  β†’ refl
    β‰€πŸ™ ≀ω πŸ™  β†’ refl
    β‰€πŸ™ ≀ω β‰€πŸ™ β†’ refl
    β‰€πŸ™ ≀ω ≀ω β†’ refl
    ≀ω 𝟘  𝟘  β†’ refl
    ≀ω 𝟘  πŸ™  β†’ refl
    ≀ω 𝟘  β‰€πŸ™ β†’ refl
    ≀ω 𝟘  ≀ω β†’ refl
    ≀ω πŸ™  𝟘  β†’ refl
    ≀ω πŸ™  πŸ™  β†’ refl
    ≀ω πŸ™  β‰€πŸ™ β†’ refl
    ≀ω πŸ™  ≀ω β†’ refl
    ≀ω β‰€πŸ™ 𝟘  β†’ refl
    ≀ω β‰€πŸ™ πŸ™  β†’ refl
    ≀ω β‰€πŸ™ β‰€πŸ™ β†’ refl
    ≀ω β‰€πŸ™ ≀ω β†’ refl
    ≀ω ≀ω 𝟘  β†’ refl
    ≀ω ≀ω πŸ™  β†’ refl
    ≀ω ≀ω β‰€πŸ™ β†’ refl
    ≀ω ≀ω ≀ω β†’ refl

  ∧-comm : Commutative _∧_
  ∧-comm = λ where
    𝟘 𝟘   β†’ refl
    𝟘 πŸ™   β†’ refl
    𝟘 β‰€πŸ™  β†’ refl
    𝟘 ≀ω  β†’ refl
    πŸ™ 𝟘   β†’ refl
    πŸ™ πŸ™   β†’ refl
    πŸ™ β‰€πŸ™  β†’ refl
    πŸ™ ≀ω  β†’ refl
    β‰€πŸ™ 𝟘  β†’ refl
    β‰€πŸ™ πŸ™  β†’ refl
    β‰€πŸ™ β‰€πŸ™ β†’ refl
    β‰€πŸ™ ≀ω β†’ refl
    ≀ω 𝟘  β†’ refl
    ≀ω πŸ™  β†’ refl
    ≀ω β‰€πŸ™ β†’ refl
    ≀ω ≀ω β†’ refl

  ·-distribˑ-∧ : _·_ DistributesOverˑ _∧_
  ·-distribˑ-∧ = λ where
    𝟘  𝟘  𝟘  β†’ refl
    𝟘  𝟘  πŸ™  β†’ refl
    𝟘  𝟘  β‰€πŸ™ β†’ refl
    𝟘  𝟘  ≀ω β†’ refl
    𝟘  πŸ™  𝟘  β†’ refl
    𝟘  πŸ™  πŸ™  β†’ refl
    𝟘  πŸ™  β‰€πŸ™ β†’ refl
    𝟘  πŸ™  ≀ω β†’ refl
    𝟘  β‰€πŸ™ 𝟘  β†’ refl
    𝟘  β‰€πŸ™ πŸ™  β†’ refl
    𝟘  β‰€πŸ™ β‰€πŸ™ β†’ refl
    𝟘  β‰€πŸ™ ≀ω β†’ refl
    𝟘  ≀ω 𝟘  β†’ refl
    𝟘  ≀ω πŸ™  β†’ refl
    𝟘  ≀ω β‰€πŸ™ β†’ refl
    𝟘  ≀ω ≀ω β†’ refl
    πŸ™  𝟘  𝟘  β†’ refl
    πŸ™  𝟘  πŸ™  β†’ refl
    πŸ™  𝟘  β‰€πŸ™ β†’ refl
    πŸ™  𝟘  ≀ω β†’ refl
    πŸ™  πŸ™  𝟘  β†’ refl
    πŸ™  πŸ™  πŸ™  β†’ refl
    πŸ™  πŸ™  β‰€πŸ™ β†’ refl
    πŸ™  πŸ™  ≀ω β†’ refl
    πŸ™  β‰€πŸ™ 𝟘  β†’ refl
    πŸ™  β‰€πŸ™ πŸ™  β†’ refl
    πŸ™  β‰€πŸ™ β‰€πŸ™ β†’ refl
    πŸ™  β‰€πŸ™ ≀ω β†’ refl
    πŸ™  ≀ω 𝟘  β†’ refl
    πŸ™  ≀ω πŸ™  β†’ refl
    πŸ™  ≀ω β‰€πŸ™ β†’ refl
    πŸ™  ≀ω ≀ω β†’ refl
    β‰€πŸ™ 𝟘  𝟘  β†’ refl
    β‰€πŸ™ 𝟘  πŸ™  β†’ refl
    β‰€πŸ™ 𝟘  β‰€πŸ™ β†’ refl
    β‰€πŸ™ 𝟘  ≀ω β†’ refl
    β‰€πŸ™ πŸ™  𝟘  β†’ refl
    β‰€πŸ™ πŸ™  πŸ™  β†’ refl
    β‰€πŸ™ πŸ™  β‰€πŸ™ β†’ refl
    β‰€πŸ™ πŸ™  ≀ω β†’ refl
    β‰€πŸ™ β‰€πŸ™ 𝟘  β†’ refl
    β‰€πŸ™ β‰€πŸ™ πŸ™  β†’ refl
    β‰€πŸ™ β‰€πŸ™ β‰€πŸ™ β†’ refl
    β‰€πŸ™ β‰€πŸ™ ≀ω β†’ refl
    β‰€πŸ™ ≀ω 𝟘  β†’ refl
    β‰€πŸ™ ≀ω πŸ™  β†’ refl
    β‰€πŸ™ ≀ω β‰€πŸ™ β†’ refl
    β‰€πŸ™ ≀ω ≀ω β†’ refl
    ≀ω 𝟘  𝟘  β†’ refl
    ≀ω 𝟘  πŸ™  β†’ refl
    ≀ω 𝟘  β‰€πŸ™ β†’ refl
    ≀ω 𝟘  ≀ω β†’ refl
    ≀ω πŸ™  𝟘  β†’ refl
    ≀ω πŸ™  πŸ™  β†’ refl
    ≀ω πŸ™  β‰€πŸ™ β†’ refl
    ≀ω πŸ™  ≀ω β†’ refl
    ≀ω β‰€πŸ™ 𝟘  β†’ refl
    ≀ω β‰€πŸ™ πŸ™  β†’ refl
    ≀ω β‰€πŸ™ β‰€πŸ™ β†’ refl
    ≀ω β‰€πŸ™ ≀ω β†’ refl
    ≀ω ≀ω 𝟘  β†’ refl
    ≀ω ≀ω πŸ™  β†’ refl
    ≀ω ≀ω β‰€πŸ™ β†’ refl
    ≀ω ≀ω ≀ω β†’ refl

  +-distribˑ-∧ : _+_ DistributesOverˑ _∧_
  +-distribˑ-∧ = λ where
    𝟘  𝟘  𝟘  β†’ refl
    𝟘  𝟘  πŸ™  β†’ refl
    𝟘  𝟘  β‰€πŸ™ β†’ refl
    𝟘  𝟘  ≀ω β†’ refl
    𝟘  πŸ™  𝟘  β†’ refl
    𝟘  πŸ™  πŸ™  β†’ refl
    𝟘  πŸ™  β‰€πŸ™ β†’ refl
    𝟘  πŸ™  ≀ω β†’ refl
    𝟘  β‰€πŸ™ 𝟘  β†’ refl
    𝟘  β‰€πŸ™ πŸ™  β†’ refl
    𝟘  β‰€πŸ™ β‰€πŸ™ β†’ refl
    𝟘  β‰€πŸ™ ≀ω β†’ refl
    𝟘  ≀ω 𝟘  β†’ refl
    𝟘  ≀ω πŸ™  β†’ refl
    𝟘  ≀ω β‰€πŸ™ β†’ refl
    𝟘  ≀ω ≀ω β†’ refl
    πŸ™  𝟘  𝟘  β†’ refl
    πŸ™  𝟘  πŸ™  β†’ refl
    πŸ™  𝟘  β‰€πŸ™ β†’ refl
    πŸ™  𝟘  ≀ω β†’ refl
    πŸ™  πŸ™  𝟘  β†’ refl
    πŸ™  πŸ™  πŸ™  β†’ refl
    πŸ™  πŸ™  β‰€πŸ™ β†’ refl
    πŸ™  πŸ™  ≀ω β†’ refl
    πŸ™  β‰€πŸ™ 𝟘  β†’ refl
    πŸ™  β‰€πŸ™ πŸ™  β†’ refl
    πŸ™  β‰€πŸ™ β‰€πŸ™ β†’ refl
    πŸ™  β‰€πŸ™ ≀ω β†’ refl
    πŸ™  ≀ω 𝟘  β†’ refl
    πŸ™  ≀ω πŸ™  β†’ refl
    πŸ™  ≀ω β‰€πŸ™ β†’ refl
    πŸ™  ≀ω ≀ω β†’ refl
    β‰€πŸ™ 𝟘  𝟘  β†’ refl
    β‰€πŸ™ 𝟘  πŸ™  β†’ refl
    β‰€πŸ™ 𝟘  β‰€πŸ™ β†’ refl
    β‰€πŸ™ 𝟘  ≀ω β†’ refl
    β‰€πŸ™ πŸ™  𝟘  β†’ refl
    β‰€πŸ™ πŸ™  πŸ™  β†’ refl
    β‰€πŸ™ πŸ™  β‰€πŸ™ β†’ refl
    β‰€πŸ™ πŸ™  ≀ω β†’ refl
    β‰€πŸ™ β‰€πŸ™ 𝟘  β†’ refl
    β‰€πŸ™ β‰€πŸ™ πŸ™  β†’ refl
    β‰€πŸ™ β‰€πŸ™ β‰€πŸ™ β†’ refl
    β‰€πŸ™ β‰€πŸ™ ≀ω β†’ refl
    β‰€πŸ™ ≀ω 𝟘  β†’ refl
    β‰€πŸ™ ≀ω πŸ™  β†’ refl
    β‰€πŸ™ ≀ω β‰€πŸ™ β†’ refl
    β‰€πŸ™ ≀ω ≀ω β†’ refl
    ≀ω 𝟘  𝟘  β†’ refl
    ≀ω 𝟘  πŸ™  β†’ refl
    ≀ω 𝟘  β‰€πŸ™ β†’ refl
    ≀ω 𝟘  ≀ω β†’ refl
    ≀ω πŸ™  𝟘  β†’ refl
    ≀ω πŸ™  πŸ™  β†’ refl
    ≀ω πŸ™  β‰€πŸ™ β†’ refl
    ≀ω πŸ™  ≀ω β†’ refl
    ≀ω β‰€πŸ™ 𝟘  β†’ refl
    ≀ω β‰€πŸ™ πŸ™  β†’ refl
    ≀ω β‰€πŸ™ β‰€πŸ™ β†’ refl
    ≀ω β‰€πŸ™ ≀ω β†’ refl
    ≀ω ≀ω 𝟘  β†’ refl
    ≀ω ≀ω πŸ™  β†’ refl
    ≀ω ≀ω β‰€πŸ™ β†’ refl
    ≀ω ≀ω ≀ω β†’ refl

instance

  -- The semiring has a well behaved zero

  linear-or-affine-has-well-behaved-zero :
    Has-well-behaved-zero linear-or-affine-semiring-with-meet
  linear-or-affine-has-well-behaved-zero = record
    { non-trivial = Ξ» ()
    ; zero-product = Ξ» where
        {p = 𝟘}           _  β†’ inj₁ refl
        {q = 𝟘}           _  β†’ injβ‚‚ refl
        {p = πŸ™}  {q = πŸ™}  ()
        {p = πŸ™}  {q = β‰€πŸ™} ()
        {p = πŸ™}  {q = ≀ω} ()
        {p = β‰€πŸ™} {q = πŸ™}  ()
        {p = β‰€πŸ™} {q = β‰€πŸ™} ()
        {p = β‰€πŸ™} {q = ≀ω} ()
        {p = ≀ω} {q = πŸ™}  ()
        {p = ≀ω} {q = β‰€πŸ™} ()
        {p = ≀ω} {q = ≀ω} ()
    ; +-positiveΛ‘ = Ξ» where
        {p = 𝟘}  {q = 𝟘}  _  β†’ refl
        {p = 𝟘}  {q = πŸ™}  _  β†’ refl
        {p = 𝟘}  {q = β‰€πŸ™} ()
        {p = 𝟘}  {q = ≀ω} ()
        {p = πŸ™}  {q = 𝟘}  ()
        {p = πŸ™}  {q = πŸ™}  ()
        {p = πŸ™}  {q = β‰€πŸ™} ()
        {p = πŸ™}  {q = ≀ω} ()
        {p = β‰€πŸ™} {q = 𝟘}  ()
        {p = β‰€πŸ™} {q = πŸ™}  ()
        {p = β‰€πŸ™} {q = β‰€πŸ™} ()
        {p = β‰€πŸ™} {q = ≀ω} ()
        {p = ≀ω} {q = 𝟘}  ()
        {p = ≀ω} {q = πŸ™}  ()
        {p = ≀ω} {q = β‰€πŸ™} ()
        {p = ≀ω} {q = ≀ω} ()
    ; ∧-positiveˑ = λ where
        {p = 𝟘}  {q = 𝟘}  _  β†’ refl
        {p = 𝟘}  {q = πŸ™}  _  β†’ refl
        {p = 𝟘}  {q = β‰€πŸ™} ()
        {p = 𝟘}  {q = ≀ω} ()
        {p = πŸ™}  {q = 𝟘}  ()
        {p = πŸ™}  {q = πŸ™}  ()
        {p = πŸ™}  {q = β‰€πŸ™} ()
        {p = πŸ™}  {q = ≀ω} ()
        {p = β‰€πŸ™} {q = 𝟘}  ()
        {p = β‰€πŸ™} {q = πŸ™}  ()
        {p = β‰€πŸ™} {q = β‰€πŸ™} ()
        {p = β‰€πŸ™} {q = ≀ω} ()
        {p = ≀ω}          ()
    }

------------------------------------------------------------------------
-- Star

-- Some requirements of a star operation.

Star-requirements :
  (Linear-or-affine β†’ Linear-or-affine β†’ Linear-or-affine β†’
   Linear-or-affine) β†’
  Set
Star-requirements _βŠ›_β–·_ =
  (βˆ€ {q r} β†’                     (≀ω βŠ› q  β–· r)  ≑ ≀ω) Γ—
  (βˆ€ {p r} β†’                     (p  βŠ› ≀ω β–· r)  ≑ ≀ω) Γ—
  (βˆ€ {p q} β†’ Β¬ (p ≑ 𝟘 Γ— q ≑ 𝟘) β†’ (p  βŠ› q  β–· ≀ω) ≑ ≀ω) Γ—
  (βˆ€ {r} β†’                       (𝟘  βŠ› 𝟘  β–· r)  ≑ 𝟘)  Γ—
  (βˆ€ {p} β†’                       (p  βŠ› πŸ™  β–· πŸ™)  ≑ ≀ω) Γ—
  (βˆ€ {p} β†’                       (p  βŠ› πŸ™  β–· β‰€πŸ™) ≑ ≀ω) Γ—
  (βˆ€ {p} β†’                       (p  βŠ› β‰€πŸ™ β–· πŸ™)  ≑ ≀ω) Γ—
  (βˆ€ {p} β†’                       (p  βŠ› β‰€πŸ™ β–· β‰€πŸ™) ≑ ≀ω) Γ—
                                ((𝟘  βŠ› πŸ™  β–· 𝟘)  ≀ β‰€πŸ™) Γ—
                                ((𝟘  βŠ› β‰€πŸ™ β–· 𝟘)  ≀ β‰€πŸ™) Γ—
                                ((πŸ™  βŠ› 𝟘  β–· 𝟘)  ≀ β‰€πŸ™) Γ—
                                ((β‰€πŸ™ βŠ› 𝟘  β–· 𝟘)  ≀ β‰€πŸ™) Γ—
                                ((πŸ™  βŠ› 𝟘  β–· πŸ™)  ≀ πŸ™)  Γ—
                                ((πŸ™  βŠ› 𝟘  β–· β‰€πŸ™) ≀ β‰€πŸ™) Γ—
                                ((β‰€πŸ™ βŠ› 𝟘  β–· πŸ™)  ≀ β‰€πŸ™) Γ—
                                ((β‰€πŸ™ βŠ› 𝟘  β–· β‰€πŸ™) ≀ β‰€πŸ™) Γ—
                                ((πŸ™  βŠ› πŸ™  β–· 𝟘)  ≀ πŸ™)  Γ—
                                ((πŸ™  βŠ› β‰€πŸ™ β–· 𝟘)  ≀ β‰€πŸ™) Γ—
                                ((β‰€πŸ™ βŠ› πŸ™  β–· 𝟘)  ≀ β‰€πŸ™) Γ—
                                ((β‰€πŸ™ βŠ› β‰€πŸ™ β–· 𝟘)  ≀ β‰€πŸ™)

-- A star operation for a ModalityWithoutβŠ› for Linear-or-affine for
-- which the zero is 𝟘, the one is πŸ™, addition is _+_, multiplication
-- is _·_, and the meet operation is _∧_ has to satisfy the
-- Star-requirements if certain conditions are satisfied.

Star-requirements-requiredβ€² :
  (M : Semiring-with-meet) β†’
  Semiring-with-meet.𝟘   M ≑ 𝟘 β†’
  Semiring-with-meet.πŸ™   M ≑ πŸ™ β†’
  Semiring-with-meet._+_ M ≑ _+_ β†’
  Semiring-with-meet._Β·_ M ≑ _Β·_ β†’
  Semiring-with-meet._∧_ M ≑ _∧_ β†’
  (_βŠ›_β–·_ :
   Linear-or-affine β†’ Linear-or-affine β†’ Linear-or-affine β†’
   Linear-or-affine) β†’
  (βˆ€ p q r β†’ (p βŠ› q β–· r) ≀ q + r Β· (p βŠ› q β–· r)) β†’
  (βˆ€ p q r β†’ (p βŠ› q β–· r) ≀ p) β†’
  (βˆ€ r β†’ _Β·_ SubDistributesOverΚ³ (_βŠ›_β–· r) by _≀_) β†’
  Star-requirements _βŠ›_β–·_
Star-requirements-requiredβ€²
  M@record{} refl refl refl refl refl star βŠ›-ineq₁ βŠ›-ineqβ‚‚
  Β·-sub-distribΚ³-βŠ› =
    (Ξ» {_ _} β†’ Ο‰βŠ›β–·)
  , (Ξ» {_ _} β†’ βŠ›Ο‰β–·)
  , (Ξ» {_ _} β†’ βŠ›β–·Ο‰ _ _)
  , (Ξ» {r = r} β†’ ≀-antisym
       (begin
          𝟘 βŠ› 𝟘 β–· r  β‰€βŸ¨ βŠ›-ineqβ‚‚ _ _ _ ⟩
          𝟘          ∎)
       (begin
          𝟘              β‰‘Λ˜βŸ¨ Β·-zeroΚ³ (𝟘 βŠ› 𝟘 β–· r) ⟩
          𝟘 βŠ› 𝟘 β–· r Β· 𝟘  β‰€βŸ¨ Β·-sub-distribΚ³-βŠ› _ _ _ _ ⟩
          𝟘 βŠ› 𝟘 β–· r      ∎))
  , (Ξ» {p = p} β†’ ≀-antisym
       (begin
          p βŠ› πŸ™ β–· πŸ™          β‰€βŸ¨ βŠ›-ineq₁ _ _ _ ⟩
          πŸ™ + πŸ™ Β· p βŠ› πŸ™ β–· πŸ™  β‰ˆβŸ¨ β‰’πŸ˜+β‰’πŸ˜ {p = πŸ™} (Ξ» ()) (πŸ™Β·β‰’πŸ˜ βŠ›πŸ™β–·) ⟩
          ≀ω                 ∎)
       (≀ω≀ (p βŠ› πŸ™ β–· πŸ™)))
  , (Ξ» {p = p} β†’ ≀-antisym
       (begin
          p βŠ› πŸ™ β–· β‰€πŸ™           β‰€βŸ¨ βŠ›-ineq₁ _ _ _ ⟩
          πŸ™ + β‰€πŸ™ Β· p βŠ› πŸ™ β–· β‰€πŸ™  β‰ˆβŸ¨ β‰’πŸ˜+β‰’πŸ˜ {p = πŸ™} (Ξ» ()) (β‰€πŸ™Β·β‰’πŸ˜ βŠ›πŸ™β–·) ⟩
          ≀ω                   ∎)
       (≀ω≀ (p βŠ› πŸ™ β–· β‰€πŸ™)))
  , (Ξ» {p = p} β†’ ≀-antisym
       (begin
          p βŠ› β‰€πŸ™ β–· πŸ™           β‰€βŸ¨ βŠ›-ineq₁ _ _ _ ⟩
          β‰€πŸ™ + πŸ™ Β· p βŠ› β‰€πŸ™ β–· πŸ™  β‰ˆβŸ¨ β‰’πŸ˜+β‰’πŸ˜ {p = β‰€πŸ™} (Ξ» ()) (πŸ™Β·β‰’πŸ˜ βŠ›β‰€πŸ™β–·) ⟩
          ≀ω                   ∎)
       (≀ω≀ (p βŠ› β‰€πŸ™ β–· πŸ™)))
  , (Ξ» {p = p} β†’ ≀-antisym
       (begin
          p βŠ› β‰€πŸ™ β–· β‰€πŸ™            β‰€βŸ¨ βŠ›-ineq₁ _ _ _ ⟩
          β‰€πŸ™ + β‰€πŸ™ Β· p βŠ› β‰€πŸ™ β–· β‰€πŸ™  β‰ˆβŸ¨ β‰’πŸ˜+β‰’πŸ˜ {p = β‰€πŸ™} (Ξ» ()) (β‰€πŸ™Β·β‰’πŸ˜ βŠ›β‰€πŸ™β–·) ⟩
          ≀ω                     ∎)
       (≀ω≀ (p βŠ› β‰€πŸ™ β–· β‰€πŸ™)))
  , ∧-greatest-lower-bound
      (βŠ›-ineqβ‚‚ _ _ _)
      (begin
         𝟘 βŠ› πŸ™ β–· 𝟘          β‰€βŸ¨ βŠ›-ineq₁ _ _ _ ⟩
         πŸ™ + 𝟘 Β· 𝟘 βŠ› πŸ™ β–· 𝟘  β‰‘βŸ¨βŸ©
         πŸ™                  ∎)
  , (begin
       𝟘 βŠ› β‰€πŸ™ β–· 𝟘           β‰€βŸ¨ βŠ›-ineq₁ _ _ _ ⟩
       β‰€πŸ™ + 𝟘 Β· 𝟘 βŠ› β‰€πŸ™ β–· 𝟘  β‰‘βŸ¨βŸ©
       β‰€πŸ™                   ∎)
  , ∧-greatest-lower-bound
      (begin
         πŸ™ βŠ› 𝟘 β–· 𝟘          β‰€βŸ¨ βŠ›-ineq₁ _ _ _ ⟩
         𝟘 + 𝟘 Β· πŸ™ βŠ› 𝟘 β–· 𝟘  β‰‘βŸ¨βŸ©
         𝟘                  ∎)
      (βŠ›-ineqβ‚‚ _ _ _)
  , βŠ›-ineqβ‚‚ _ _ _
  , βŠ›-ineqβ‚‚ _ _ _
  , (begin
       πŸ™ βŠ› 𝟘 β–· β‰€πŸ™       β‰€βŸ¨ βŠ›-ineq₁ _ _ _ ⟩
       β‰€πŸ™ Β· πŸ™ βŠ› 𝟘 β–· β‰€πŸ™  β‰€βŸ¨ Β·-monotoneΚ³ {r = β‰€πŸ™} (βŠ›-ineqβ‚‚ _ _ _) ⟩
       β‰€πŸ™ Β· πŸ™           β‰‘βŸ¨βŸ©
       β‰€πŸ™               ∎)
  , βŠ›-ineqβ‚‚ _ _ _
  , βŠ›-ineqβ‚‚ _ _ _
  , βŠ›-ineqβ‚‚ _ _ _
  , (begin
       πŸ™ βŠ› β‰€πŸ™ β–· 𝟘           β‰€βŸ¨ βŠ›-ineq₁ _ _ _ ⟩
       β‰€πŸ™ + 𝟘 Β· πŸ™ βŠ› β‰€πŸ™ β–· 𝟘  β‰‘βŸ¨βŸ©
       β‰€πŸ™                   ∎)
  , βŠ›-ineqβ‚‚ _ _ _
  , βŠ›-ineqβ‚‚ _ _ _
  where
  open Semiring-with-meet M using (Β·-zeroΚ³)
  open PartialOrder M
  open Meet M
  open Multiplication M
  open Tools.Reasoning.PartialOrder ≀-poset

  infix 50 _βŠ›_β–·_

  _βŠ›_β–·_ :
    Linear-or-affine β†’ Linear-or-affine β†’ Linear-or-affine β†’
    Linear-or-affine
  _βŠ›_β–·_ = star

  Ο‰βŠ›β–· : ≀ω βŠ› q β–· r ≑ ≀ω
  Ο‰βŠ›β–· {q = q} {r = r} = ≀-antisym
    (begin
       ≀ω βŠ› q β–· r  β‰€βŸ¨ βŠ›-ineqβ‚‚ _ _ _ ⟩
       ≀ω          ∎)
    (≀ω≀ (≀ω βŠ› q β–· r))

  βŠ›Ο‰β–· : p βŠ› ≀ω β–· r ≑ ≀ω
  βŠ›Ο‰β–· {p = p} {r = r} = ≀-antisym
    (begin
       p βŠ› ≀ω β–· r           β‰€βŸ¨ βŠ›-ineq₁ _ _ _ ⟩
       ≀ω + r Β· p βŠ› ≀ω β–· r  β‰‘βŸ¨ +-zeroΛ‘ (r Β· _) ⟩
       ≀ω                   ∎)
    (≀ω≀ (p βŠ› ≀ω β–· r))

  πŸ™βŠ›β–· : πŸ™ βŠ› q β–· r β‰’ 𝟘
  πŸ™βŠ›β–· {q = q} {r = r} πŸ™βŠ›β–·β‰‘πŸ˜ =
    case begin
      𝟘                β‰‘βŸ¨βŸ©
      𝟘 Β· ≀ω           β‰‘Λ˜βŸ¨ cong (_Β· _) πŸ™βŠ›β–·β‰‘πŸ˜ ⟩
      πŸ™ βŠ› q β–· r Β· ≀ω   β‰€βŸ¨ Β·-sub-distribΚ³-βŠ› _ _ _ _ ⟩
      ≀ω βŠ› q Β· ≀ω β–· r  β‰‘βŸ¨ Ο‰βŠ›β–· ⟩
      ≀ω               ∎
    of Ξ» ()

  β‰€πŸ™βŠ›β–· : β‰€πŸ™ βŠ› q β–· r β‰’ 𝟘
  β‰€πŸ™βŠ›β–· {q = q} {r = r} β‰€πŸ™βŠ›β–·β‰‘πŸ˜ =
    case begin
      𝟘                β‰‘βŸ¨βŸ©
      𝟘 Β· ≀ω           β‰‘Λ˜βŸ¨ cong (_Β· _) β‰€πŸ™βŠ›β–·β‰‘πŸ˜ ⟩
      β‰€πŸ™ βŠ› q β–· r Β· ≀ω  β‰€βŸ¨ Β·-sub-distribΚ³-βŠ› _ _ _ _ ⟩
      ≀ω βŠ› q Β· ≀ω β–· r  β‰‘βŸ¨ Ο‰βŠ›β–· ⟩
      ≀ω               ∎
    of Ξ» ()

  βŠ›πŸ™β–· : p βŠ› πŸ™ β–· r β‰’ 𝟘
  βŠ›πŸ™β–· {p = p} {r = r} βŠ›πŸ™β–·β‰‘πŸ˜ =
    case begin
      𝟘                  β‰‘βŸ¨βŸ©
      𝟘 Β· ≀ω             β‰‘Λ˜βŸ¨ cong (_Β· _) βŠ›πŸ™β–·β‰‘πŸ˜ ⟩
      p βŠ› πŸ™ β–· r Β· ≀ω     β‰€βŸ¨ Β·-sub-distribΚ³-βŠ› _ _ _ _ ⟩
      (p Β· ≀ω) βŠ› ≀ω β–· r  β‰‘βŸ¨ βŠ›Ο‰β–· ⟩
      ≀ω                 ∎
    of Ξ» ()

  βŠ›β‰€πŸ™β–· : p βŠ› β‰€πŸ™ β–· r β‰’ 𝟘
  βŠ›β‰€πŸ™β–· {p = p} {r = r} βŠ›β‰€πŸ™β–·β‰‘πŸ˜ =
    case begin
      𝟘                  β‰‘βŸ¨βŸ©
      𝟘 Β· ≀ω             β‰‘Λ˜βŸ¨ cong (_Β· _) βŠ›β‰€πŸ™β–·β‰‘πŸ˜ ⟩
      p βŠ› β‰€πŸ™ β–· r Β· ≀ω    β‰€βŸ¨ Β·-sub-distribΚ³-βŠ› _ _ _ _ ⟩
      (p Β· ≀ω) βŠ› ≀ω β–· r  β‰‘βŸ¨ βŠ›Ο‰β–· ⟩
      ≀ω                 ∎
    of Ξ» ()

  βŠ›β–·Ο‰ : βˆ€ p q β†’ Β¬ (p ≑ 𝟘 Γ— q ≑ 𝟘) β†’ (p βŠ› q β–· ≀ω) ≑ ≀ω
  βŠ›β–·Ο‰ _ ≀ω _      = βŠ›Ο‰β–·
  βŠ›β–·Ο‰ ≀ω _ _      = Ο‰βŠ›β–·
  βŠ›β–·Ο‰ 𝟘 𝟘 Β¬β‰‘πŸ˜Γ—β‰‘πŸ˜ = βŠ₯-elim (Β¬β‰‘πŸ˜Γ—β‰‘πŸ˜ (refl , refl))
  βŠ›β–·Ο‰ p πŸ™ _      = ≀-antisym
    (begin
       p βŠ› πŸ™ β–· ≀ω           β‰€βŸ¨ βŠ›-ineq₁ _ _ _ ⟩
       πŸ™ + ≀ω Β· p βŠ› πŸ™ β–· ≀ω  β‰‘βŸ¨ cong (πŸ™ +_) (β‰€Ο‰Β·β‰’πŸ˜ βŠ›πŸ™β–·) ⟩
       πŸ™ + ≀ω               β‰‘βŸ¨βŸ©
       ≀ω                   ∎)
    (≀ω≀ (p βŠ› πŸ™ β–· ≀ω))
  βŠ›β–·Ο‰ p β‰€πŸ™ _ = ≀-antisym
    (begin
       p βŠ› β‰€πŸ™ β–· ≀ω            β‰€βŸ¨ βŠ›-ineq₁ _ _ _ ⟩
       β‰€πŸ™ + ≀ω Β· p βŠ› β‰€πŸ™ β–· ≀ω  β‰‘βŸ¨ cong (β‰€πŸ™ +_) (β‰€Ο‰Β·β‰’πŸ˜ βŠ›β‰€πŸ™β–·) ⟩
       β‰€πŸ™ + ≀ω                β‰‘βŸ¨βŸ©
       ≀ω                     ∎)
    (≀ω≀ (p βŠ› πŸ™ β–· ≀ω))
  βŠ›β–·Ο‰ πŸ™ 𝟘 _ = ≀-antisym
    (begin
       πŸ™ βŠ› 𝟘 β–· ≀ω       β‰€βŸ¨ βŠ›-ineq₁ _ _ _ ⟩
       ≀ω Β· πŸ™ βŠ› 𝟘 β–· ≀ω  β‰ˆβŸ¨ β‰€Ο‰Β·β‰’πŸ˜ πŸ™βŠ›β–· ⟩
       ≀ω               ∎)
    (≀ω≀ (πŸ™ βŠ› 𝟘 β–· ≀ω))
  βŠ›β–·Ο‰ β‰€πŸ™ 𝟘 _ = ≀-antisym
    (begin
       β‰€πŸ™ βŠ› 𝟘 β–· ≀ω       β‰€βŸ¨ βŠ›-ineq₁ _ _ _ ⟩
       ≀ω Β· β‰€πŸ™ βŠ› 𝟘 β–· ≀ω  β‰ˆβŸ¨ β‰€Ο‰Β·β‰’πŸ˜ β‰€πŸ™βŠ›β–· ⟩
       ≀ω                ∎)
    (≀ω≀ (β‰€πŸ™ βŠ› 𝟘 β–· ≀ω))

-- Every natrec-star operator for linear-or-affine-semiring-with-meet
-- has to satisfy the Star-requirements.

Star-requirements-required :
  (has-star : Has-star linear-or-affine-semiring-with-meet) β†’
  Star-requirements (Has-star._βŠ›_β–·_ has-star)
Star-requirements-required has-star =
  Star-requirements-requiredβ€²
    linear-or-affine-semiring-with-meet refl refl refl refl refl
    _βŠ›_β–·_ βŠ›-ineq₁ βŠ›-ineqβ‚‚ Β·-sub-distribΚ³-βŠ›
  where
  open Has-star has-star

-- A "greatest" definition of the star operation.

infix 50 _βŠ›_β–·_

_βŠ›_β–·_ :
  Linear-or-affine β†’ Linear-or-affine β†’ Linear-or-affine β†’
  Linear-or-affine
p βŠ› q β–· 𝟘  = p ∧ q
p βŠ› q β–· πŸ™  = p + ≀ω Β· q
p βŠ› q β–· β‰€πŸ™ = p ∧ ≀ω Β· q
p βŠ› q β–· ≀ω = ≀ω Β· (p ∧ q)

-- A simplification lemma for the star operation.

β‰€Ο‰βŠ›β–· : βˆ€ r β†’ ≀ω βŠ› q β–· r ≑ ≀ω
β‰€Ο‰βŠ›β–·          𝟘  = refl
β‰€Ο‰βŠ›β–· {q = 𝟘}  πŸ™  = refl
β‰€Ο‰βŠ›β–· {q = πŸ™}  πŸ™  = refl
β‰€Ο‰βŠ›β–· {q = β‰€πŸ™} πŸ™  = refl
β‰€Ο‰βŠ›β–· {q = ≀ω} πŸ™  = refl
β‰€Ο‰βŠ›β–· {q = 𝟘}  β‰€πŸ™ = refl
β‰€Ο‰βŠ›β–· {q = πŸ™}  β‰€πŸ™ = refl
β‰€Ο‰βŠ›β–· {q = β‰€πŸ™} β‰€πŸ™ = refl
β‰€Ο‰βŠ›β–· {q = ≀ω} β‰€πŸ™ = refl
β‰€Ο‰βŠ›β–·          ≀ω = refl

-- A simplification lemma for the star operation.

βŠ›β‰€Ο‰β–· : βˆ€ r β†’ p βŠ› ≀ω β–· r ≑ ≀ω
βŠ›β‰€Ο‰β–· {p = 𝟘}  𝟘  = refl
βŠ›β‰€Ο‰β–· {p = πŸ™}  𝟘  = refl
βŠ›β‰€Ο‰β–· {p = β‰€πŸ™} 𝟘  = refl
βŠ›β‰€Ο‰β–· {p = ≀ω} 𝟘  = refl
βŠ›β‰€Ο‰β–· {p = 𝟘}  πŸ™  = refl
βŠ›β‰€Ο‰β–· {p = πŸ™}  πŸ™  = refl
βŠ›β‰€Ο‰β–· {p = β‰€πŸ™} πŸ™  = refl
βŠ›β‰€Ο‰β–· {p = ≀ω} πŸ™  = refl
βŠ›β‰€Ο‰β–· {p = 𝟘}  β‰€πŸ™ = refl
βŠ›β‰€Ο‰β–· {p = πŸ™}  β‰€πŸ™ = refl
βŠ›β‰€Ο‰β–· {p = β‰€πŸ™} β‰€πŸ™ = refl
βŠ›β‰€Ο‰β–· {p = ≀ω} β‰€πŸ™ = refl
βŠ›β‰€Ο‰β–· {p = 𝟘}  ≀ω = refl
βŠ›β‰€Ο‰β–· {p = πŸ™}  ≀ω = refl
βŠ›β‰€Ο‰β–· {p = β‰€πŸ™} ≀ω = refl
βŠ›β‰€Ο‰β–· {p = ≀ω} ≀ω = refl

-- A simplification lemma for the star operation.

πŸ˜βŠ›πŸ˜β–· : βˆ€ r β†’ 𝟘 βŠ› 𝟘 β–· r ≑ 𝟘
πŸ˜βŠ›πŸ˜β–· 𝟘  = refl
πŸ˜βŠ›πŸ˜β–· πŸ™  = refl
πŸ˜βŠ›πŸ˜β–· β‰€πŸ™ = refl
πŸ˜βŠ›πŸ˜β–· ≀ω = refl

-- A simplification lemma for the star operation.

βŠ›β–·β‰€Ο‰ : βˆ€ p q β†’ Β¬ (p ≑ 𝟘 Γ— q ≑ 𝟘) β†’ (p βŠ› q β–· ≀ω) ≑ ≀ω
βŠ›β–·β‰€Ο‰ = Ξ» where
  𝟘  𝟘  Β¬β‰‘πŸ˜Γ—β‰‘πŸ˜ β†’ βŠ₯-elim (Β¬β‰‘πŸ˜Γ—β‰‘πŸ˜ (refl , refl))
  πŸ™  𝟘  _      β†’ refl
  β‰€πŸ™ 𝟘  _      β†’ refl
  ≀ω 𝟘  _      β†’ refl
  𝟘  πŸ™  _      β†’ refl
  πŸ™  πŸ™  _      β†’ refl
  β‰€πŸ™ πŸ™  _      β†’ refl
  ≀ω πŸ™  _      β†’ refl
  𝟘  β‰€πŸ™ _      β†’ refl
  πŸ™  β‰€πŸ™ _      β†’ refl
  β‰€πŸ™ β‰€πŸ™ _      β†’ refl
  ≀ω β‰€πŸ™ _      β†’ refl
  p  ≀ω _      β†’ βŠ›β‰€Ο‰β–· {p = p} ≀ω

-- A simplification lemma for the star operation.

βŠ›πŸ™β–·πŸ™ : βˆ€ p β†’ p βŠ› πŸ™ β–· πŸ™ ≑ ≀ω
βŠ›πŸ™β–·πŸ™ 𝟘  = refl
βŠ›πŸ™β–·πŸ™ πŸ™  = refl
βŠ›πŸ™β–·πŸ™ β‰€πŸ™ = refl
βŠ›πŸ™β–·πŸ™ ≀ω = refl

-- A simplification lemma for the star operation.

βŠ›πŸ™β–·β‰€πŸ™ : βˆ€ p β†’ p βŠ› πŸ™ β–· β‰€πŸ™ ≑ ≀ω
βŠ›πŸ™β–·β‰€πŸ™ 𝟘  = refl
βŠ›πŸ™β–·β‰€πŸ™ πŸ™  = refl
βŠ›πŸ™β–·β‰€πŸ™ β‰€πŸ™ = refl
βŠ›πŸ™β–·β‰€πŸ™ ≀ω = refl

-- A simplification lemma for the star operation.

βŠ›β‰€πŸ™β–·πŸ™ : βˆ€ p β†’ p βŠ› β‰€πŸ™ β–· πŸ™ ≑ ≀ω
βŠ›β‰€πŸ™β–·πŸ™ 𝟘  = refl
βŠ›β‰€πŸ™β–·πŸ™ πŸ™  = refl
βŠ›β‰€πŸ™β–·πŸ™ β‰€πŸ™ = refl
βŠ›β‰€πŸ™β–·πŸ™ ≀ω = refl

-- A simplification lemma for the star operation.

βŠ›β‰€πŸ™β–·β‰€πŸ™ : βˆ€ p β†’ p βŠ› β‰€πŸ™ β–· β‰€πŸ™ ≑ ≀ω
βŠ›β‰€πŸ™β–·β‰€πŸ™ 𝟘  = refl
βŠ›β‰€πŸ™β–·β‰€πŸ™ πŸ™  = refl
βŠ›β‰€πŸ™β–·β‰€πŸ™ β‰€πŸ™ = refl
βŠ›β‰€πŸ™β–·β‰€πŸ™ ≀ω = refl

-- The natrec-star operator returns results that are at least as large
-- as those of any other natrec-star operator for
-- linear-or-affine-semiring-with-meet.

βŠ›-greatest :
  (has-star : Has-star linear-or-affine-semiring-with-meet) β†’
  βˆ€ p q r β†’ Has-star._βŠ›_β–·_ has-star p q r ≀ p βŠ› q β–· r
βŠ›-greatest has-star =
  case Star-requirements-required has-star of
    Ξ» (β‰€Ο‰βŠ›β–·β€² , βŠ›β‰€Ο‰β–·β€² , βŠ›β–·β€²β‰€Ο‰ , πŸ˜βŠ›πŸ˜β–·β€² ,
       βŠ›πŸ™β–·β€²πŸ™ , βŠ›πŸ™β–·β€²β‰€πŸ™ , βŠ›β‰€πŸ™β–·β€²πŸ™ , βŠ›β‰€πŸ™β–·β€²β‰€πŸ™ ,
       πŸ˜βŠ›πŸ™β–·β€²πŸ˜ , πŸ˜βŠ›β‰€πŸ™β–·β€²πŸ˜ , πŸ™βŠ›πŸ˜β–·β€²πŸ˜ , β‰€πŸ™βŠ›πŸ˜β–·β€²πŸ˜ ,
       πŸ™βŠ›πŸ˜β–·β€²πŸ™ , πŸ™βŠ›πŸ˜β–·β€²β‰€πŸ™ , β‰€πŸ™βŠ›πŸ˜β–·β€²πŸ™ , β‰€πŸ™βŠ›πŸ˜β–·β€²β‰€πŸ™ ,
       πŸ™βŠ›πŸ™β–·β€²πŸ˜ , πŸ™βŠ›β‰€πŸ™β–·β€²πŸ˜ , β‰€πŸ™βŠ›πŸ™β–·β€²πŸ˜ , β‰€πŸ™βŠ›β‰€πŸ™β–·β€²πŸ˜) β†’ Ξ» where
    ≀ω q r β†’ begin
      ≀ω βŠ› q β–·β€² r  β‰ˆβŸ¨ β‰€Ο‰βŠ›β–·β€² ⟩
      ≀ω           β‰ˆΛ˜βŸ¨ β‰€Ο‰βŠ›β–· r ⟩
      ≀ω βŠ› q β–· r   ∎
    p ≀ω r β†’ begin
      p βŠ› ≀ω β–·β€² r  β‰ˆβŸ¨ βŠ›β‰€Ο‰β–·β€² ⟩
      ≀ω           β‰ˆΛ˜βŸ¨ βŠ›β‰€Ο‰β–· r ⟩
      p βŠ› ≀ω β–· r   ∎
    𝟘 𝟘 r β†’ begin
      𝟘 βŠ› 𝟘 β–·β€² r  β‰ˆβŸ¨ πŸ˜βŠ›πŸ˜β–·β€² ⟩
      𝟘           β‰ˆΛ˜βŸ¨ πŸ˜βŠ›πŸ˜β–· r ⟩
      𝟘 βŠ› 𝟘 β–· r   ∎
    𝟘 πŸ™ ≀ω β†’ begin
      𝟘 βŠ› πŸ™ β–·β€² ≀ω  β‰ˆβŸ¨ βŠ›β–·β€²β‰€Ο‰ (Ξ» { (_ , ()) }) ⟩
      ≀ω           β‰ˆΛ˜βŸ¨ βŠ›β–·β‰€Ο‰ 𝟘 πŸ™ (Ξ» { (_ , ()) }) ⟩
      𝟘 βŠ› πŸ™ β–· ≀ω   ∎
    𝟘 β‰€πŸ™ ≀ω β†’ begin
      𝟘 βŠ› β‰€πŸ™ β–·β€² ≀ω  β‰ˆβŸ¨ βŠ›β–·β€²β‰€Ο‰ (Ξ» { (_ , ()) }) ⟩
      ≀ω            β‰ˆΛ˜βŸ¨ βŠ›β–·β‰€Ο‰ 𝟘 πŸ™ (Ξ» { (_ , ()) }) ⟩
      𝟘 βŠ› β‰€πŸ™ β–· ≀ω   ∎
    πŸ™ q ≀ω β†’ begin
      πŸ™ βŠ› q β–·β€² ≀ω  β‰ˆβŸ¨ βŠ›β–·β€²β‰€Ο‰ (Ξ» { (() , _) }) ⟩
      ≀ω           β‰ˆΛ˜βŸ¨ βŠ›β–·β‰€Ο‰ πŸ™ q (Ξ» { (() , _) }) ⟩
      πŸ™ βŠ› q β–· ≀ω   ∎
    β‰€πŸ™ q ≀ω β†’ begin
      β‰€πŸ™ βŠ› q β–·β€² ≀ω  β‰ˆβŸ¨ βŠ›β–·β€²β‰€Ο‰ (Ξ» { (() , _) }) ⟩
      ≀ω            β‰ˆΛ˜βŸ¨ βŠ›β–·β‰€Ο‰ β‰€πŸ™ q (Ξ» { (() , _) }) ⟩
      β‰€πŸ™ βŠ› q β–· ≀ω   ∎
    p πŸ™ πŸ™ β†’ begin
      p βŠ› πŸ™ β–·β€² πŸ™  β‰ˆβŸ¨ βŠ›πŸ™β–·β€²πŸ™ ⟩
      ≀ω          β‰ˆΛ˜βŸ¨ βŠ›πŸ™β–·πŸ™ p ⟩
      p βŠ› πŸ™ β–· πŸ™   ∎
    p β‰€πŸ™ πŸ™ β†’ begin
      p βŠ› β‰€πŸ™ β–·β€² πŸ™  β‰ˆβŸ¨ βŠ›β‰€πŸ™β–·β€²πŸ™ ⟩
      ≀ω           β‰ˆΛ˜βŸ¨ βŠ›β‰€πŸ™β–·πŸ™ p ⟩
      p βŠ› β‰€πŸ™ β–· πŸ™   ∎
    p πŸ™ β‰€πŸ™ β†’ begin
      p βŠ› πŸ™ β–·β€² β‰€πŸ™  β‰ˆβŸ¨ βŠ›πŸ™β–·β€²β‰€πŸ™ ⟩
      ≀ω           β‰ˆΛ˜βŸ¨ βŠ›πŸ™β–·β‰€πŸ™ p ⟩
      p βŠ› πŸ™ β–· β‰€πŸ™   ∎
    p β‰€πŸ™ β‰€πŸ™ β†’ begin
      p βŠ› β‰€πŸ™ β–·β€² β‰€πŸ™  β‰ˆβŸ¨ βŠ›β‰€πŸ™β–·β€²β‰€πŸ™ ⟩
      ≀ω            β‰ˆΛ˜βŸ¨ βŠ›β‰€πŸ™β–·β‰€πŸ™ p ⟩
      p βŠ› β‰€πŸ™ β–· β‰€πŸ™   ∎
    𝟘 πŸ™ 𝟘 β†’ begin
      𝟘 βŠ› πŸ™ β–·β€² 𝟘  β‰€βŸ¨ πŸ˜βŠ›πŸ™β–·β€²πŸ˜ ⟩
      β‰€πŸ™          ∎
    𝟘 β‰€πŸ™ 𝟘 β†’ begin
      𝟘 βŠ› β‰€πŸ™ β–·β€² 𝟘  β‰€βŸ¨ πŸ˜βŠ›β‰€πŸ™β–·β€²πŸ˜ ⟩
      β‰€πŸ™           ∎
    πŸ™ 𝟘 𝟘 β†’ begin
      πŸ™ βŠ› 𝟘 β–·β€² 𝟘  β‰€βŸ¨ πŸ™βŠ›πŸ˜β–·β€²πŸ˜ ⟩
      β‰€πŸ™          ∎
    β‰€πŸ™ 𝟘 𝟘 β†’ begin
      β‰€πŸ™ βŠ› 𝟘 β–·β€² 𝟘  β‰€βŸ¨ β‰€πŸ™βŠ›πŸ˜β–·β€²πŸ˜ ⟩
      β‰€πŸ™           ∎
    πŸ™ 𝟘 πŸ™ β†’ begin
      πŸ™ βŠ› 𝟘 β–·β€² πŸ™  β‰€βŸ¨ πŸ™βŠ›πŸ˜β–·β€²πŸ™ ⟩
      πŸ™           ∎
    πŸ™ 𝟘 β‰€πŸ™ β†’ begin
      πŸ™ βŠ› 𝟘 β–·β€² β‰€πŸ™  β‰€βŸ¨ πŸ™βŠ›πŸ˜β–·β€²β‰€πŸ™ ⟩
      β‰€πŸ™           ∎
    β‰€πŸ™ 𝟘 πŸ™ β†’ begin
      β‰€πŸ™ βŠ› 𝟘 β–·β€² πŸ™  β‰€βŸ¨ β‰€πŸ™βŠ›πŸ˜β–·β€²πŸ™ ⟩
      β‰€πŸ™           ∎
    β‰€πŸ™ 𝟘 β‰€πŸ™ β†’ begin
      β‰€πŸ™ βŠ› 𝟘 β–·β€² β‰€πŸ™  β‰€βŸ¨ β‰€πŸ™βŠ›πŸ˜β–·β€²β‰€πŸ™ ⟩
      β‰€πŸ™            ∎
    πŸ™ πŸ™ 𝟘 β†’ begin
      πŸ™ βŠ› πŸ™ β–·β€² 𝟘  β‰€βŸ¨ πŸ™βŠ›πŸ™β–·β€²πŸ˜ ⟩
      πŸ™           ∎
    πŸ™ β‰€πŸ™ 𝟘 β†’ begin
      πŸ™ βŠ› β‰€πŸ™ β–·β€² 𝟘  β‰€βŸ¨ πŸ™βŠ›β‰€πŸ™β–·β€²πŸ˜ ⟩
      β‰€πŸ™           ∎
    β‰€πŸ™ πŸ™ 𝟘 β†’ begin
      β‰€πŸ™ βŠ› πŸ™ β–·β€² 𝟘  β‰€βŸ¨ β‰€πŸ™βŠ›πŸ™β–·β€²πŸ˜ ⟩
      β‰€πŸ™           ∎
    β‰€πŸ™ β‰€πŸ™ 𝟘 β†’ begin
      β‰€πŸ™ βŠ› β‰€πŸ™ β–·β€² 𝟘  β‰€βŸ¨ β‰€πŸ™βŠ›β‰€πŸ™β–·β€²πŸ˜ ⟩
      β‰€πŸ™            ∎
  where
  open Has-star has-star renaming (_βŠ›_β–·_ to _βŠ›_β–·β€²_)
  open PartialOrder linear-or-affine-semiring-with-meet
  open Tools.Reasoning.PartialOrder ≀-poset

-- The "greatest" star operator defined above is a proper natrec-star
-- operator.

linear-or-affine-has-star :
  Has-star linear-or-affine-semiring-with-meet
linear-or-affine-has-star = record
  { _βŠ›_β–·_                   = _βŠ›_β–·_
  ; βŠ›-ineq                  = βŠ›-ineq₁ , βŠ›-ineqβ‚‚
  ; +-sub-interchangeable-βŠ› = +-sub-interchangeable-βŠ›
  ; Β·-sub-distribΚ³-βŠ›        = Ξ» r _ _ _ β†’
                                ≀-reflexive (Β·-distribΚ³-βŠ› r _ _ _)
  ; βŠ›-sub-distrib-∧         = Ξ» r β†’
      (Ξ» _ _ _ β†’ ≀-reflexive (βŠ›-distribΛ‘-∧ r _ _ _))
    , (Ξ» _ _ _ β†’ ≀-reflexive (βŠ›-distribΚ³-∧ r _ _ _))
  }
  where
  semiring-with-meet = linear-or-affine-semiring-with-meet

  open Semiring-with-meet semiring-with-meet
    hiding (𝟘; πŸ™; _+_; _Β·_; _∧_; _≀_)
  open PartialOrder semiring-with-meet
  open Addition semiring-with-meet
  open Multiplication semiring-with-meet

  βŠ›-ineq₁ : βˆ€ p q r β†’ p βŠ› q β–· r ≀ q + r Β· p βŠ› q β–· r
  βŠ›-ineq₁ = Ξ» where
    𝟘  𝟘  𝟘  β†’ refl
    𝟘  𝟘  πŸ™  β†’ refl
    𝟘  𝟘  β‰€πŸ™ β†’ refl
    𝟘  𝟘  ≀ω β†’ refl
    𝟘  πŸ™  𝟘  β†’ refl
    𝟘  πŸ™  πŸ™  β†’ refl
    𝟘  πŸ™  β‰€πŸ™ β†’ refl
    𝟘  πŸ™  ≀ω β†’ refl
    𝟘  β‰€πŸ™ 𝟘  β†’ refl
    𝟘  β‰€πŸ™ πŸ™  β†’ refl
    𝟘  β‰€πŸ™ β‰€πŸ™ β†’ refl
    𝟘  β‰€πŸ™ ≀ω β†’ refl
    𝟘  ≀ω 𝟘  β†’ refl
    𝟘  ≀ω πŸ™  β†’ refl
    𝟘  ≀ω β‰€πŸ™ β†’ refl
    𝟘  ≀ω ≀ω β†’ refl
    πŸ™  𝟘  𝟘  β†’ refl
    πŸ™  𝟘  πŸ™  β†’ refl
    πŸ™  𝟘  β‰€πŸ™ β†’ refl
    πŸ™  𝟘  ≀ω β†’ refl
    πŸ™  πŸ™  𝟘  β†’ refl
    πŸ™  πŸ™  πŸ™  β†’ refl
    πŸ™  πŸ™  β‰€πŸ™ β†’ refl
    πŸ™  πŸ™  ≀ω β†’ refl
    πŸ™  β‰€πŸ™ 𝟘  β†’ refl
    πŸ™  β‰€πŸ™ πŸ™  β†’ refl
    πŸ™  β‰€πŸ™ β‰€πŸ™ β†’ refl
    πŸ™  β‰€πŸ™ ≀ω β†’ refl
    πŸ™  ≀ω 𝟘  β†’ refl
    πŸ™  ≀ω πŸ™  β†’ refl
    πŸ™  ≀ω β‰€πŸ™ β†’ refl
    πŸ™  ≀ω ≀ω β†’ refl
    β‰€πŸ™ 𝟘  𝟘  β†’ refl
    β‰€πŸ™ 𝟘  πŸ™  β†’ refl
    β‰€πŸ™ 𝟘  β‰€πŸ™ β†’ refl
    β‰€πŸ™ 𝟘  ≀ω β†’ refl
    β‰€πŸ™ πŸ™  𝟘  β†’ refl
    β‰€πŸ™ πŸ™  πŸ™  β†’ refl
    β‰€πŸ™ πŸ™  β‰€πŸ™ β†’ refl
    β‰€πŸ™ πŸ™  ≀ω β†’ refl
    β‰€πŸ™ β‰€πŸ™ 𝟘  β†’ refl
    β‰€πŸ™ β‰€πŸ™ πŸ™  β†’ refl
    β‰€πŸ™ β‰€πŸ™ β‰€πŸ™ β†’ refl
    β‰€πŸ™ β‰€πŸ™ ≀ω β†’ refl
    β‰€πŸ™ ≀ω 𝟘  β†’ refl
    β‰€πŸ™ ≀ω πŸ™  β†’ refl
    β‰€πŸ™ ≀ω β‰€πŸ™ β†’ refl
    β‰€πŸ™ ≀ω ≀ω β†’ refl
    ≀ω 𝟘  𝟘  β†’ refl
    ≀ω 𝟘  πŸ™  β†’ refl
    ≀ω 𝟘  β‰€πŸ™ β†’ refl
    ≀ω 𝟘  ≀ω β†’ refl
    ≀ω πŸ™  𝟘  β†’ refl
    ≀ω πŸ™  πŸ™  β†’ refl
    ≀ω πŸ™  β‰€πŸ™ β†’ refl
    ≀ω πŸ™  ≀ω β†’ refl
    ≀ω β‰€πŸ™ 𝟘  β†’ refl
    ≀ω β‰€πŸ™ πŸ™  β†’ refl
    ≀ω β‰€πŸ™ β‰€πŸ™ β†’ refl
    ≀ω β‰€πŸ™ ≀ω β†’ refl
    ≀ω ≀ω 𝟘  β†’ refl
    ≀ω ≀ω πŸ™  β†’ refl
    ≀ω ≀ω β‰€πŸ™ β†’ refl
    ≀ω ≀ω ≀ω β†’ refl

  βŠ›-ineqβ‚‚ : βˆ€ p q r β†’ (p βŠ› q β–· r) ≀ p
  βŠ›-ineqβ‚‚ = Ξ» where
    𝟘  𝟘  𝟘  β†’ refl
    𝟘  𝟘  πŸ™  β†’ refl
    𝟘  𝟘  β‰€πŸ™ β†’ refl
    𝟘  𝟘  ≀ω β†’ refl
    𝟘  πŸ™  𝟘  β†’ refl
    𝟘  πŸ™  πŸ™  β†’ refl
    𝟘  πŸ™  β‰€πŸ™ β†’ refl
    𝟘  πŸ™  ≀ω β†’ refl
    𝟘  β‰€πŸ™ 𝟘  β†’ refl
    𝟘  β‰€πŸ™ πŸ™  β†’ refl
    𝟘  β‰€πŸ™ β‰€πŸ™ β†’ refl
    𝟘  β‰€πŸ™ ≀ω β†’ refl
    𝟘  ≀ω 𝟘  β†’ refl
    𝟘  ≀ω πŸ™  β†’ refl
    𝟘  ≀ω β‰€πŸ™ β†’ refl
    𝟘  ≀ω ≀ω β†’ refl
    πŸ™  𝟘  𝟘  β†’ refl
    πŸ™  𝟘  πŸ™  β†’ refl
    πŸ™  𝟘  β‰€πŸ™ β†’ refl
    πŸ™  𝟘  ≀ω β†’ refl
    πŸ™  πŸ™  𝟘  β†’ refl
    πŸ™  πŸ™  πŸ™  β†’ refl
    πŸ™  πŸ™  β‰€πŸ™ β†’ refl
    πŸ™  πŸ™  ≀ω β†’ refl
    πŸ™  β‰€πŸ™ 𝟘  β†’ refl
    πŸ™  β‰€πŸ™ πŸ™  β†’ refl
    πŸ™  β‰€πŸ™ β‰€πŸ™ β†’ refl
    πŸ™  β‰€πŸ™ ≀ω β†’ refl
    πŸ™  ≀ω 𝟘  β†’ refl
    πŸ™  ≀ω πŸ™  β†’ refl
    πŸ™  ≀ω β‰€πŸ™ β†’ refl
    πŸ™  ≀ω ≀ω β†’ refl
    β‰€πŸ™ 𝟘  𝟘  β†’ refl
    β‰€πŸ™ 𝟘  πŸ™  β†’ refl
    β‰€πŸ™ 𝟘  β‰€πŸ™ β†’ refl
    β‰€πŸ™ 𝟘  ≀ω β†’ refl
    β‰€πŸ™ πŸ™  𝟘  β†’ refl
    β‰€πŸ™ πŸ™  πŸ™  β†’ refl
    β‰€πŸ™ πŸ™  β‰€πŸ™ β†’ refl
    β‰€πŸ™ πŸ™  ≀ω β†’ refl
    β‰€πŸ™ β‰€πŸ™ 𝟘  β†’ refl
    β‰€πŸ™ β‰€πŸ™ πŸ™  β†’ refl
    β‰€πŸ™ β‰€πŸ™ β‰€πŸ™ β†’ refl
    β‰€πŸ™ β‰€πŸ™ ≀ω β†’ refl
    β‰€πŸ™ ≀ω 𝟘  β†’ refl
    β‰€πŸ™ ≀ω πŸ™  β†’ refl
    β‰€πŸ™ ≀ω β‰€πŸ™ β†’ refl
    β‰€πŸ™ ≀ω ≀ω β†’ refl
    ≀ω 𝟘  𝟘  β†’ refl
    ≀ω 𝟘  πŸ™  β†’ refl
    ≀ω 𝟘  β‰€πŸ™ β†’ refl
    ≀ω 𝟘  ≀ω β†’ refl
    ≀ω πŸ™  𝟘  β†’ refl
    ≀ω πŸ™  πŸ™  β†’ refl
    ≀ω πŸ™  β‰€πŸ™ β†’ refl
    ≀ω πŸ™  ≀ω β†’ refl
    ≀ω β‰€πŸ™ 𝟘  β†’ refl
    ≀ω β‰€πŸ™ πŸ™  β†’ refl
    ≀ω β‰€πŸ™ β‰€πŸ™ β†’ refl
    ≀ω β‰€πŸ™ ≀ω β†’ refl
    ≀ω ≀ω 𝟘  β†’ refl
    ≀ω ≀ω πŸ™  β†’ refl
    ≀ω ≀ω β‰€πŸ™ β†’ refl
    ≀ω ≀ω ≀ω β†’ refl

  +-sub-interchangeable-βŠ› : βˆ€ r β†’ _+_ SubInterchangeable (_βŠ›_β–· r) by _≀_
  +-sub-interchangeable-βŠ› = Ξ» where
      𝟘 p q pβ€² qβ€² β†’ begin
        (p ∧ q) + (pβ€² ∧ qβ€²)  β‰€βŸ¨ +-sub-interchangeable-∧ p _ _ _ ⟩
        (p + pβ€²) ∧ (q + qβ€²)  ∎
      πŸ™ p q pβ€² qβ€² β†’ begin
        (p + ≀ω Β· q) + (pβ€² + ≀ω Β· qβ€²)  β‰ˆβŸ¨ +-assoc p _ _ ⟩
        p + (≀ω Β· q + (pβ€² + ≀ω Β· qβ€²))  β‰ˆΛ˜βŸ¨ cong (p +_) (+-assoc (≀ω Β· q) _ _) ⟩
        p + ((≀ω Β· q + pβ€²) + ≀ω Β· qβ€²)  β‰ˆβŸ¨ cong (Ξ» q β†’ p + (q + _)) (+-comm _ pβ€²) ⟩
        p + ((pβ€² + ≀ω Β· q) + ≀ω Β· qβ€²)  β‰ˆβŸ¨ cong (p +_) (+-assoc pβ€² _ _) ⟩
        p + (pβ€² + (≀ω Β· q + ≀ω Β· qβ€²))  β‰ˆΛ˜βŸ¨ +-assoc p _ _ ⟩
        (p + pβ€²) + (≀ω Β· q + ≀ω Β· qβ€²)  β‰ˆΛ˜βŸ¨ cong ((p + _) +_) (Β·-distribΛ‘-+ ≀ω q _) ⟩
        (p + pβ€²) + ≀ω Β· (q + qβ€²)       ∎
      β‰€πŸ™ p q pβ€² qβ€² β†’ begin
        (p ∧ ≀ω Β· q) + (pβ€² ∧ ≀ω Β· qβ€²)  β‰€βŸ¨ +-sub-interchangeable-∧ p _ _ _ ⟩
        (p + pβ€²) ∧ (≀ω Β· q + ≀ω Β· qβ€²)  β‰ˆΛ˜βŸ¨ ∧-congΛ‘ (Β·-distribΛ‘-+ ≀ω q _) ⟩
        (p + pβ€²) ∧ ≀ω Β· (q + qβ€²)       ∎
      ≀ω p q pβ€² qβ€² β†’ begin
        ≀ω Β· (p ∧ q) + ≀ω Β· (pβ€² ∧ qβ€²)  β‰ˆΛ˜βŸ¨ Β·-distribΛ‘-+ ≀ω (p ∧ _) _ ⟩
        ≀ω Β· ((p ∧ q) + (pβ€² ∧ qβ€²))     β‰€βŸ¨ Β·-monotoneΚ³ {r = ≀ω} (+-sub-interchangeable-∧ p _ _ _) ⟩
        ≀ω Β· ((p + pβ€²) ∧ (q + qβ€²))     ∎
    where
    open Tools.Reasoning.PartialOrder ≀-poset

  Β·-distribΚ³-βŠ› : βˆ€ r β†’ _Β·_ DistributesOverΚ³ (_βŠ›_β–· r)
  Β·-distribΚ³-βŠ› = Ξ» where
      𝟘 q p pβ€² β†’
        (p ∧ pβ€²) Β· q    β‰‘βŸ¨ Β·-distribΚ³-∧ _ p _ ⟩
        p Β· q ∧ pβ€² Β· q  ∎
      πŸ™ q p pβ€² β†’
        (p + ≀ω Β· pβ€²) Β· q      β‰‘βŸ¨ Β·-distribΚ³-+ _ p _ ⟩
        p Β· q + (≀ω Β· pβ€²) Β· q  β‰‘βŸ¨ cong (p Β· _ +_) (Β·-assoc ≀ω pβ€² _) ⟩
        p Β· q + ≀ω Β· pβ€² Β· q    ∎
      β‰€πŸ™ q p pβ€² β†’
        (p ∧ ≀ω Β· pβ€²) Β· q      β‰‘βŸ¨ Β·-distribΚ³-∧ _ p _ ⟩
        p Β· q ∧ (≀ω Β· pβ€²) Β· q  β‰‘βŸ¨ ∧-congΛ‘ (Β·-assoc ≀ω pβ€² _) ⟩
        p Β· q ∧ ≀ω Β· pβ€² Β· q    ∎
      ≀ω q p pβ€² β†’
        (≀ω Β· (p ∧ pβ€²)) Β· q    β‰‘βŸ¨ Β·-assoc ≀ω (p ∧ _) _ ⟩
        ≀ω Β· (p ∧ pβ€²) Β· q      β‰‘βŸ¨ cong (≀ω Β·_) (Β·-distribΚ³-∧ _ p _) ⟩
        ≀ω Β· (p Β· q ∧ pβ€² Β· q)  ∎
    where
    open Tools.Reasoning.PropositionalEquality

  βŠ›-distribΛ‘-∧ : βˆ€ r β†’ (_βŠ›_β–· r) DistributesOverΛ‘ _∧_
  βŠ›-distribΛ‘-∧ = Ξ» where
      𝟘 p _ _  β†’ lemma p _ _
      πŸ™ p q qβ€² β†’
        p + ≀ω Β· (q ∧ qβ€²)             β‰‘βŸ¨ cong (p +_) (Β·-distribΛ‘-∧ ≀ω q _) ⟩
        p + (≀ω Β· q ∧ ≀ω Β· qβ€²)        β‰‘βŸ¨ +-distribΛ‘-∧ p _ _ ⟩
        (p + ≀ω Β· q) ∧ (p + ≀ω Β· qβ€²)  ∎
      β‰€πŸ™ p q qβ€² β†’
        p ∧ ≀ω Β· (q ∧ qβ€²)             β‰‘βŸ¨ ∧-congΛ‘ (Β·-distribΛ‘-∧ ≀ω q _) ⟩
        p ∧ (≀ω Β· q ∧ ≀ω Β· qβ€²)        β‰‘βŸ¨ lemma p _ _ ⟩
        (p ∧ ≀ω Β· q) ∧ (p ∧ ≀ω Β· qβ€²)  ∎
      ≀ω p q qβ€² β†’
        ≀ω Β· (p ∧ q ∧ qβ€²)             β‰‘βŸ¨ cong (≀ω Β·_) (lemma p _ _) ⟩
        ≀ω Β· ((p ∧ q) ∧ (p ∧ qβ€²))     β‰‘βŸ¨ Β·-distribΛ‘-∧ ≀ω (p ∧ _) _ ⟩
        ≀ω Β· (p ∧ q) ∧ ≀ω Β· (p ∧ qβ€²)  ∎
    where
    open Tools.Reasoning.PropositionalEquality

    lemma = Ξ» p q qβ€² β†’
      p ∧ (q ∧ qβ€²)        β‰‘Λ˜βŸ¨ cong (_∧ _) (∧-idem p) ⟩
      (p ∧ p) ∧ (q ∧ qβ€²)  β‰‘βŸ¨ ∧-assoc p _ _ ⟩
      p ∧ (p ∧ (q ∧ qβ€²))  β‰‘Λ˜βŸ¨ cong (p ∧_) (∧-assoc p _ _) ⟩
      p ∧ ((p ∧ q) ∧ qβ€²)  β‰‘βŸ¨ cong (Ξ» q β†’ p ∧ (q ∧ _)) (∧-comm p _) ⟩
      p ∧ ((q ∧ p) ∧ qβ€²)  β‰‘βŸ¨ cong (p ∧_) (∧-assoc q _ _) ⟩
      p ∧ (q ∧ (p ∧ qβ€²))  β‰‘Λ˜βŸ¨ ∧-assoc p _ _ ⟩
      (p ∧ q) ∧ (p ∧ qβ€²)  ∎

  βŠ›-distribΚ³-∧ : βˆ€ r β†’ (_βŠ›_β–· r) DistributesOverΚ³ _∧_
  βŠ›-distribΚ³-∧ = Ξ» where
      𝟘 _ p _  β†’ lemma _ p _
      πŸ™ q p pβ€² β†’
        (p ∧ pβ€²) + ≀ω Β· q             β‰‘βŸ¨ +-distribΚ³-∧ _ p _ ⟩
        (p + ≀ω Β· q) ∧ (pβ€² + ≀ω Β· q)  ∎
      β‰€πŸ™ q p pβ€² β†’
        (p ∧ pβ€²) ∧ ≀ω Β· q             β‰‘βŸ¨ lemma _ _ _ ⟩
        (p ∧ ≀ω Β· q) ∧ (pβ€² ∧ ≀ω Β· q)  ∎
      ≀ω q p pβ€² β†’
        ≀ω Β· ((p ∧ pβ€²) ∧ q)           β‰‘βŸ¨ cong (≀ω Β·_) (lemma _ p _) ⟩
        ≀ω Β· ((p ∧ q) ∧ (pβ€² ∧ q))     β‰‘βŸ¨ Β·-distribΛ‘-∧ ≀ω (p ∧ _) _ ⟩
        ≀ω Β· (p ∧ q) ∧ ≀ω Β· (pβ€² ∧ q)  ∎
    where
    open Tools.Reasoning.PropositionalEquality

    lemma = Ξ» q p pβ€² β†’
      (p ∧ pβ€²) ∧ q        β‰‘βŸ¨ ∧-comm _ q ⟩
      q ∧ (p ∧ pβ€²)        β‰‘βŸ¨ βŠ›-distribΛ‘-∧ 𝟘 q _ _ ⟩
      (q ∧ p) ∧ (q ∧ pβ€²)  β‰‘βŸ¨ congβ‚‚ _∧_ (∧-comm q _) (∧-comm q _) ⟩
      (p ∧ q) ∧ (pβ€² ∧ q)  ∎

------------------------------------------------------------------------
-- A modality

-- A modality for Linear-or-affine.

linear-or-affine : Modality-variant β†’ Modality
linear-or-affine variant = record
  { variant            = variant
  ; semiring-with-meet = linear-or-affine-semiring-with-meet
  ; 𝟘-well-behaved     = Ξ» _ β†’ linear-or-affine-has-well-behaved-zero
  }

------------------------------------------------------------------------
-- Custom nr functions for the Modality

opaque

  -- A (not very good) nr function based on the natrec-star operator
  -- defined above.

  -- See Graded.Modality.Instances.Linear-or-affine.Bad for some
  -- examples that illustrate in what sense this nr function is not very
  -- good. The nr function below does not suffer from
  -- these problems (see
  -- Graded.Modality.Instances.Linear-or-affine.Good).

  bad-linear-or-affine-has-nr : Has-nr linear-or-affine-semiring-with-meet
  bad-linear-or-affine-has-nr =
    Star.has-nr _ ⦃ linear-or-affine-has-star ⦄

-- An nr function for Linear-or-affine.
--
-- The value of nr p 𝟘 z s n is defined in the following way:
--
-- * If pΒ =Β πŸ™, then there are no (non-erased) recursive calls, and the
--   argument is used exactly once in the successor case (excluding
--   erased uses):
--
--     f zero    = f_z
--     f (suc m) = f_s m
--
--   Let us use nΒ +Β z for the zero case, and nΒ +Β s for the successor
--   case: the result is a conservative approximation of these two
--   values (their meet).
--
-- * If p = 𝟘, then there are no (non-erased) recursive
--   calls, and the argument is not used (in non-erased positions) in
--   the successor case:
--
--     f zero    = f_z
--     f (suc m) = f_s
--
--   Let us again use nΒ +Β z for the zero case. For the successor case
--   we use β‰€πŸ™Β Β·Β nΒ +Β s: the argument is not used linearly in the
--   successor case, because it is not used at all, so if n is πŸ™, then
--   the result should be at most β‰€πŸ™ (not πŸ™, because the function is
--   not linear, and not 𝟘, because that would amount to an erased
--   match on a natural number).
--
-- * If pΒ =Β β‰€πŸ™, then there are no (non-erased) recursive calls, and
--   the argument is used at most once in the successor case
--   (excluding erased uses). Let us again use nΒ +Β z for the zero
--   case, and β‰€πŸ™Β Β·Β nΒ +Β s for the successor case.
--
-- * If pΒ = ≀ω, then there are no (non-erased) recursive calls. In the
--   successor case the argument is used an unlimited number of times,
--   so we use ≀ω · nΒ +Β s. In the zero case we use nΒ +Β z, as before.
--
-- All of these cases can be expressed in the following way (note that
-- πŸ™Β βˆ§Β πŸ˜ and πŸ™Β βˆ§Β β‰€πŸ™ are both equal to β‰€πŸ™):
--
--   nr p 𝟘 z s n = ((πŸ™ ∧ p) Β· n + s) ∧ (n + z)
--
-- The value of nrΒ pΒ πŸ™Β zΒ sΒ n is defined in the following way:
--
-- * If p = 𝟘, then we have linear recursion: the argument is used
--   linearly (n), the successor case can occur an unlimited number of
--   times (≀ω · s), and the zero case occurs once (z).
--
-- * If p is πŸ™, β‰€πŸ™ or ≀ω, then there is recursion (≀ω · s), the
--   argument can be used in each recursive call (≀ω · n), and the
--   zero case occurs once (z).
--
-- We get the following definition:
--
--   nr p πŸ™ z s n = (πŸ™ + p) Β· n + ≀ω Β· s + z
--
-- The value of nrΒ pΒ β‰€πŸ™Β zΒ sΒ n is defined in the following way:
--
-- * If p = 𝟘, then we have affine recursion: the argument is used
--   affinely (β‰€πŸ™Β Β·Β n), the successor case can occur an unlimited
--   number of times (≀ω · s), and the zero case occurs at most once
--   (β‰€πŸ™Β Β·Β z).
--
-- * If p is πŸ™, β‰€πŸ™ or ≀ω, then there is recursion (≀ω · s), the
--   argument can be used in each recursive call (≀ω · n), and the
--   zero case occurs at most once (β‰€πŸ™Β Β·Β z).
--
-- We get the following definition:
--
--   nr p πŸ™ z s n = (β‰€πŸ™ + p) Β· n + ≀ω Β· s + β‰€πŸ™ Β· z
--
-- Finally we use the following definition for nrΒ p ≀ω zΒ sΒ n:
--
--   nr _ ≀ω z s n = ≀ω Β· (n + s + z)
--
-- There is recursion (≀ω · s), in the successor case there can be
-- multiple recursive calls (≀ω · n), and the zero case can occur
-- multiple times (≀ω · z).

nr :
  Linear-or-affine β†’ Linear-or-affine β†’
  Linear-or-affine β†’ Linear-or-affine β†’ Linear-or-affine β†’
  Linear-or-affine
nr p 𝟘  z s n = ((πŸ™ ∧ p) Β· n + s) ∧ (n + z)
nr p πŸ™  z s n = (πŸ™  + p) Β· n + ≀ω Β· s +      z
nr p β‰€πŸ™ z s n = (β‰€πŸ™ + p) Β· n + ≀ω Β· s + β‰€πŸ™ Β· z
nr _ ≀ω z s n = ≀ω Β· (n + s + z)

-- The value of nr p r z s n is 𝟘 iff z, s and n are all zero.

nr-𝟘 : βˆ€ r β†’ nr p r z s n ≑ 𝟘 ⇔ (z ≑ 𝟘 Γ— s ≑ 𝟘 Γ— n ≑ 𝟘)
nr-𝟘 r =
    lemma₁ _ r _ _ _
  , Ξ» { (refl , refl , refl) β†’ lemmaβ‚‚ _ r }
  where
  lemma₁ : βˆ€ p r z s n β†’ nr p r z s n ≑ 𝟘 β†’ z ≑ 𝟘 Γ— s ≑ 𝟘 Γ— n ≑ 𝟘
  lemma₁ = Ξ» where
    𝟘  𝟘  𝟘  𝟘  𝟘  refl β†’ refl , refl , refl
    πŸ™  𝟘  𝟘  𝟘  𝟘  refl β†’ refl , refl , refl
    β‰€πŸ™ 𝟘  𝟘  𝟘  𝟘  refl β†’ refl , refl , refl
    ≀ω 𝟘  𝟘  𝟘  𝟘  refl β†’ refl , refl , refl
    𝟘  πŸ™  𝟘  𝟘  𝟘  refl β†’ refl , refl , refl
    πŸ™  πŸ™  𝟘  𝟘  𝟘  refl β†’ refl , refl , refl
    β‰€πŸ™ πŸ™  𝟘  𝟘  𝟘  refl β†’ refl , refl , refl
    ≀ω πŸ™  𝟘  𝟘  𝟘  refl β†’ refl , refl , refl
    𝟘  β‰€πŸ™ 𝟘  𝟘  𝟘  refl β†’ refl , refl , refl
    πŸ™  β‰€πŸ™ 𝟘  𝟘  𝟘  refl β†’ refl , refl , refl
    β‰€πŸ™ β‰€πŸ™ 𝟘  𝟘  𝟘  refl β†’ refl , refl , refl
    ≀ω β‰€πŸ™ 𝟘  𝟘  𝟘  refl β†’ refl , refl , refl
    _  ≀ω 𝟘  𝟘  𝟘  refl β†’ refl , refl , refl
    𝟘  𝟘  𝟘  𝟘  πŸ™  ()
    𝟘  𝟘  𝟘  𝟘  β‰€πŸ™ ()
    𝟘  𝟘  𝟘  𝟘  ≀ω ()
    𝟘  𝟘  𝟘  πŸ™  𝟘  ()
    𝟘  𝟘  𝟘  πŸ™  πŸ™  ()
    𝟘  𝟘  𝟘  πŸ™  β‰€πŸ™ ()
    𝟘  𝟘  𝟘  πŸ™  ≀ω ()
    𝟘  𝟘  𝟘  β‰€πŸ™ 𝟘  ()
    𝟘  𝟘  𝟘  β‰€πŸ™ πŸ™  ()
    𝟘  𝟘  𝟘  β‰€πŸ™ β‰€πŸ™ ()
    𝟘  𝟘  𝟘  β‰€πŸ™ ≀ω ()
    𝟘  𝟘  𝟘  ≀ω 𝟘  ()
    𝟘  𝟘  𝟘  ≀ω πŸ™  ()
    𝟘  𝟘  𝟘  ≀ω β‰€πŸ™ ()
    𝟘  𝟘  𝟘  ≀ω ≀ω ()
    𝟘  𝟘  πŸ™  𝟘  𝟘  ()
    𝟘  𝟘  πŸ™  𝟘  πŸ™  ()
    𝟘  𝟘  πŸ™  𝟘  β‰€πŸ™ ()
    𝟘  𝟘  πŸ™  𝟘  ≀ω ()
    𝟘  𝟘  πŸ™  πŸ™  𝟘  ()
    𝟘  𝟘  πŸ™  πŸ™  πŸ™  ()
    𝟘  𝟘  πŸ™  πŸ™  β‰€πŸ™ ()
    𝟘  𝟘  πŸ™  πŸ™  ≀ω ()
    𝟘  𝟘  πŸ™  β‰€πŸ™ 𝟘  ()
    𝟘  𝟘  πŸ™  β‰€πŸ™ πŸ™  ()
    𝟘  𝟘  πŸ™  β‰€πŸ™ β‰€πŸ™ ()
    𝟘  𝟘  πŸ™  β‰€πŸ™ ≀ω ()
    𝟘  𝟘  πŸ™  ≀ω 𝟘  ()
    𝟘  𝟘  πŸ™  ≀ω πŸ™  ()
    𝟘  𝟘  πŸ™  ≀ω β‰€πŸ™ ()
    𝟘  𝟘  πŸ™  ≀ω ≀ω ()
    𝟘  𝟘  β‰€πŸ™ 𝟘  𝟘  ()
    𝟘  𝟘  β‰€πŸ™ 𝟘  πŸ™  ()
    𝟘  𝟘  β‰€πŸ™ 𝟘  β‰€πŸ™ ()
    𝟘  𝟘  β‰€πŸ™ 𝟘  ≀ω ()
    𝟘  𝟘  β‰€πŸ™ πŸ™  𝟘  ()
    𝟘  𝟘  β‰€πŸ™ πŸ™  πŸ™  ()
    𝟘  𝟘  β‰€πŸ™ πŸ™  β‰€πŸ™ ()
    𝟘  𝟘  β‰€πŸ™ πŸ™  ≀ω ()
    𝟘  𝟘  β‰€πŸ™ β‰€πŸ™ 𝟘  ()
    𝟘  𝟘  β‰€πŸ™ β‰€πŸ™ πŸ™  ()
    𝟘  𝟘  β‰€πŸ™ β‰€πŸ™ β‰€πŸ™ ()
    𝟘  𝟘  β‰€πŸ™ β‰€πŸ™ ≀ω ()
    𝟘  𝟘  β‰€πŸ™ ≀ω 𝟘  ()
    𝟘  𝟘  β‰€πŸ™ ≀ω πŸ™  ()
    𝟘  𝟘  β‰€πŸ™ ≀ω β‰€πŸ™ ()
    𝟘  𝟘  β‰€πŸ™ ≀ω ≀ω ()
    𝟘  𝟘  ≀ω 𝟘  𝟘  ()
    𝟘  𝟘  ≀ω 𝟘  πŸ™  ()
    𝟘  𝟘  ≀ω 𝟘  β‰€πŸ™ ()
    𝟘  𝟘  ≀ω 𝟘  ≀ω ()
    𝟘  𝟘  ≀ω πŸ™  𝟘  ()
    𝟘  𝟘  ≀ω πŸ™  πŸ™  ()
    𝟘  𝟘  ≀ω πŸ™  β‰€πŸ™ ()
    𝟘  𝟘  ≀ω πŸ™  ≀ω ()
    𝟘  𝟘  ≀ω β‰€πŸ™ 𝟘  ()
    𝟘  𝟘  ≀ω β‰€πŸ™ πŸ™  ()
    𝟘  𝟘  ≀ω β‰€πŸ™ β‰€πŸ™ ()
    𝟘  𝟘  ≀ω β‰€πŸ™ ≀ω ()
    𝟘  𝟘  ≀ω ≀ω 𝟘  ()
    𝟘  𝟘  ≀ω ≀ω πŸ™  ()
    𝟘  𝟘  ≀ω ≀ω β‰€πŸ™ ()
    𝟘  𝟘  ≀ω ≀ω ≀ω ()
    πŸ™  𝟘  𝟘  𝟘  πŸ™  ()
    πŸ™  𝟘  𝟘  𝟘  β‰€πŸ™ ()
    πŸ™  𝟘  𝟘  𝟘  ≀ω ()
    πŸ™  𝟘  𝟘  πŸ™  𝟘  ()
    πŸ™  𝟘  𝟘  πŸ™  πŸ™  ()
    πŸ™  𝟘  𝟘  πŸ™  β‰€πŸ™ ()
    πŸ™  𝟘  𝟘  πŸ™  ≀ω ()
    πŸ™  𝟘  𝟘  β‰€πŸ™ 𝟘  ()
    πŸ™  𝟘  𝟘  β‰€πŸ™ πŸ™  ()
    πŸ™  𝟘  𝟘  β‰€πŸ™ β‰€πŸ™ ()
    πŸ™  𝟘  𝟘  β‰€πŸ™ ≀ω ()
    πŸ™  𝟘  𝟘  ≀ω 𝟘  ()
    πŸ™  𝟘  𝟘  ≀ω πŸ™  ()
    πŸ™  𝟘  𝟘  ≀ω β‰€πŸ™ ()
    πŸ™  𝟘  𝟘  ≀ω ≀ω ()
    πŸ™  𝟘  πŸ™  𝟘  𝟘  ()
    πŸ™  𝟘  πŸ™  𝟘  πŸ™  ()
    πŸ™  𝟘  πŸ™  𝟘  β‰€πŸ™ ()
    πŸ™  𝟘  πŸ™  𝟘  ≀ω ()
    πŸ™  𝟘  πŸ™  πŸ™  𝟘  ()
    πŸ™  𝟘  πŸ™  πŸ™  πŸ™  ()
    πŸ™  𝟘  πŸ™  πŸ™  β‰€πŸ™ ()
    πŸ™  𝟘  πŸ™  πŸ™  ≀ω ()
    πŸ™  𝟘  πŸ™  β‰€πŸ™ 𝟘  ()
    πŸ™  𝟘  πŸ™  β‰€πŸ™ πŸ™  ()
    πŸ™  𝟘  πŸ™  β‰€πŸ™ β‰€πŸ™ ()
    πŸ™  𝟘  πŸ™  β‰€πŸ™ ≀ω ()
    πŸ™  𝟘  πŸ™  ≀ω 𝟘  ()
    πŸ™  𝟘  πŸ™  ≀ω πŸ™  ()
    πŸ™  𝟘  πŸ™  ≀ω β‰€πŸ™ ()
    πŸ™  𝟘  πŸ™  ≀ω ≀ω ()
    πŸ™  𝟘  β‰€πŸ™ 𝟘  𝟘  ()
    πŸ™  𝟘  β‰€πŸ™ 𝟘  πŸ™  ()
    πŸ™  𝟘  β‰€πŸ™ 𝟘  β‰€πŸ™ ()
    πŸ™  𝟘  β‰€πŸ™ 𝟘  ≀ω ()
    πŸ™  𝟘  β‰€πŸ™ πŸ™  𝟘  ()
    πŸ™  𝟘  β‰€πŸ™ πŸ™  πŸ™  ()
    πŸ™  𝟘  β‰€πŸ™ πŸ™  β‰€πŸ™ ()
    πŸ™  𝟘  β‰€πŸ™ πŸ™  ≀ω ()
    πŸ™  𝟘  β‰€πŸ™ β‰€πŸ™ 𝟘  ()
    πŸ™  𝟘  β‰€πŸ™ β‰€πŸ™ πŸ™  ()
    πŸ™  𝟘  β‰€πŸ™ β‰€πŸ™ β‰€πŸ™ ()
    πŸ™  𝟘  β‰€πŸ™ β‰€πŸ™ ≀ω ()
    πŸ™  𝟘  β‰€πŸ™ ≀ω 𝟘  ()
    πŸ™  𝟘  β‰€πŸ™ ≀ω πŸ™  ()
    πŸ™  𝟘  β‰€πŸ™ ≀ω β‰€πŸ™ ()
    πŸ™  𝟘  β‰€πŸ™ ≀ω ≀ω ()
    πŸ™  𝟘  ≀ω 𝟘  𝟘  ()
    πŸ™  𝟘  ≀ω 𝟘  πŸ™  ()
    πŸ™  𝟘  ≀ω 𝟘  β‰€πŸ™ ()
    πŸ™  𝟘  ≀ω 𝟘  ≀ω ()
    πŸ™  𝟘  ≀ω πŸ™  𝟘  ()
    πŸ™  𝟘  ≀ω πŸ™  πŸ™  ()
    πŸ™  𝟘  ≀ω πŸ™  β‰€πŸ™ ()
    πŸ™  𝟘  ≀ω πŸ™  ≀ω ()
    πŸ™  𝟘  ≀ω β‰€πŸ™ 𝟘  ()
    πŸ™  𝟘  ≀ω β‰€πŸ™ πŸ™  ()
    πŸ™  𝟘  ≀ω β‰€πŸ™ β‰€πŸ™ ()
    πŸ™  𝟘  ≀ω β‰€πŸ™ ≀ω ()
    πŸ™  𝟘  ≀ω ≀ω 𝟘  ()
    πŸ™  𝟘  ≀ω ≀ω πŸ™  ()
    πŸ™  𝟘  ≀ω ≀ω β‰€πŸ™ ()
    πŸ™  𝟘  ≀ω ≀ω ≀ω ()
    β‰€πŸ™ 𝟘  𝟘  𝟘  πŸ™  ()
    β‰€πŸ™ 𝟘  𝟘  𝟘  β‰€πŸ™ ()
    β‰€πŸ™ 𝟘  𝟘  𝟘  ≀ω ()
    β‰€πŸ™ 𝟘  𝟘  πŸ™  𝟘  ()
    β‰€πŸ™ 𝟘  𝟘  πŸ™  πŸ™  ()
    β‰€πŸ™ 𝟘  𝟘  πŸ™  β‰€πŸ™ ()
    β‰€πŸ™ 𝟘  𝟘  πŸ™  ≀ω ()
    β‰€πŸ™ 𝟘  𝟘  β‰€πŸ™ 𝟘  ()
    β‰€πŸ™ 𝟘  𝟘  β‰€πŸ™ πŸ™  ()
    β‰€πŸ™ 𝟘  𝟘  β‰€πŸ™ β‰€πŸ™ ()
    β‰€πŸ™ 𝟘  𝟘  β‰€πŸ™ ≀ω ()
    β‰€πŸ™ 𝟘  𝟘  ≀ω 𝟘  ()
    β‰€πŸ™ 𝟘  𝟘  ≀ω πŸ™  ()
    β‰€πŸ™ 𝟘  𝟘  ≀ω β‰€πŸ™ ()
    β‰€πŸ™ 𝟘  𝟘  ≀ω ≀ω ()
    β‰€πŸ™ 𝟘  πŸ™  𝟘  𝟘  ()
    β‰€πŸ™ 𝟘  πŸ™  𝟘  πŸ™  ()
    β‰€πŸ™ 𝟘  πŸ™  𝟘  β‰€πŸ™ ()
    β‰€πŸ™ 𝟘  πŸ™  𝟘  ≀ω ()
    β‰€πŸ™ 𝟘  πŸ™  πŸ™  𝟘  ()
    β‰€πŸ™ 𝟘  πŸ™  πŸ™  πŸ™  ()
    β‰€πŸ™ 𝟘  πŸ™  πŸ™  β‰€πŸ™ ()
    β‰€πŸ™ 𝟘  πŸ™  πŸ™  ≀ω ()
    β‰€πŸ™ 𝟘  πŸ™  β‰€πŸ™ 𝟘  ()
    β‰€πŸ™ 𝟘  πŸ™  β‰€πŸ™ πŸ™  ()
    β‰€πŸ™ 𝟘  πŸ™  β‰€πŸ™ β‰€πŸ™ ()
    β‰€πŸ™ 𝟘  πŸ™  β‰€πŸ™ ≀ω ()
    β‰€πŸ™ 𝟘  πŸ™  ≀ω 𝟘  ()
    β‰€πŸ™ 𝟘  πŸ™  ≀ω πŸ™  ()
    β‰€πŸ™ 𝟘  πŸ™  ≀ω β‰€πŸ™ ()
    β‰€πŸ™ 𝟘  πŸ™  ≀ω ≀ω ()
    β‰€πŸ™ 𝟘  β‰€πŸ™ 𝟘  𝟘  ()
    β‰€πŸ™ 𝟘  β‰€πŸ™ 𝟘  πŸ™  ()
    β‰€πŸ™ 𝟘  β‰€πŸ™ 𝟘  β‰€πŸ™ ()
    β‰€πŸ™ 𝟘  β‰€πŸ™ 𝟘  ≀ω ()
    β‰€πŸ™ 𝟘  β‰€πŸ™ πŸ™  𝟘  ()
    β‰€πŸ™ 𝟘  β‰€πŸ™ πŸ™  πŸ™  ()
    β‰€πŸ™ 𝟘  β‰€πŸ™ πŸ™  β‰€πŸ™ ()
    β‰€πŸ™ 𝟘  β‰€πŸ™ πŸ™  ≀ω ()
    β‰€πŸ™ 𝟘  β‰€πŸ™ β‰€πŸ™ 𝟘  ()
    β‰€πŸ™ 𝟘  β‰€πŸ™ β‰€πŸ™ πŸ™  ()
    β‰€πŸ™ 𝟘  β‰€πŸ™ β‰€πŸ™ β‰€πŸ™ ()
    β‰€πŸ™ 𝟘  β‰€πŸ™ β‰€πŸ™ ≀ω ()
    β‰€πŸ™ 𝟘  β‰€πŸ™ ≀ω 𝟘  ()
    β‰€πŸ™ 𝟘  β‰€πŸ™ ≀ω πŸ™  ()
    β‰€πŸ™ 𝟘  β‰€πŸ™ ≀ω β‰€πŸ™ ()
    β‰€πŸ™ 𝟘  β‰€πŸ™ ≀ω ≀ω ()
    β‰€πŸ™ 𝟘  ≀ω 𝟘  𝟘  ()
    β‰€πŸ™ 𝟘  ≀ω 𝟘  πŸ™  ()
    β‰€πŸ™ 𝟘  ≀ω 𝟘  β‰€πŸ™ ()
    β‰€πŸ™ 𝟘  ≀ω 𝟘  ≀ω ()
    β‰€πŸ™ 𝟘  ≀ω πŸ™  𝟘  ()
    β‰€πŸ™ 𝟘  ≀ω πŸ™  πŸ™  ()
    β‰€πŸ™ 𝟘  ≀ω πŸ™  β‰€πŸ™ ()
    β‰€πŸ™ 𝟘  ≀ω πŸ™  ≀ω ()
    β‰€πŸ™ 𝟘  ≀ω β‰€πŸ™ 𝟘  ()
    β‰€πŸ™ 𝟘  ≀ω β‰€πŸ™ πŸ™  ()
    β‰€πŸ™ 𝟘  ≀ω β‰€πŸ™ β‰€πŸ™ ()
    β‰€πŸ™ 𝟘  ≀ω β‰€πŸ™ ≀ω ()
    β‰€πŸ™ 𝟘  ≀ω ≀ω 𝟘  ()
    β‰€πŸ™ 𝟘  ≀ω ≀ω πŸ™  ()
    β‰€πŸ™ 𝟘  ≀ω ≀ω β‰€πŸ™ ()
    β‰€πŸ™ 𝟘  ≀ω ≀ω ≀ω ()
    ≀ω 𝟘  𝟘  𝟘  πŸ™  ()
    ≀ω 𝟘  𝟘  𝟘  β‰€πŸ™ ()
    ≀ω 𝟘  𝟘  𝟘  ≀ω ()
    ≀ω 𝟘  𝟘  πŸ™  𝟘  ()
    ≀ω 𝟘  𝟘  πŸ™  πŸ™  ()
    ≀ω 𝟘  𝟘  πŸ™  β‰€πŸ™ ()
    ≀ω 𝟘  𝟘  πŸ™  ≀ω ()
    ≀ω 𝟘  𝟘  β‰€πŸ™ 𝟘  ()
    ≀ω 𝟘  𝟘  β‰€πŸ™ πŸ™  ()
    ≀ω 𝟘  𝟘  β‰€πŸ™ β‰€πŸ™ ()
    ≀ω 𝟘  𝟘  β‰€πŸ™ ≀ω ()
    ≀ω 𝟘  𝟘  ≀ω 𝟘  ()
    ≀ω 𝟘  𝟘  ≀ω πŸ™  ()
    ≀ω 𝟘  𝟘  ≀ω β‰€πŸ™ ()
    ≀ω 𝟘  𝟘  ≀ω ≀ω ()
    ≀ω 𝟘  πŸ™  𝟘  𝟘  ()
    ≀ω 𝟘  πŸ™  𝟘  πŸ™  ()
    ≀ω 𝟘  πŸ™  𝟘  β‰€πŸ™ ()
    ≀ω 𝟘  πŸ™  𝟘  ≀ω ()
    ≀ω 𝟘  πŸ™  πŸ™  𝟘  ()
    ≀ω 𝟘  πŸ™  πŸ™  πŸ™  ()
    ≀ω 𝟘  πŸ™  πŸ™  β‰€πŸ™ ()
    ≀ω 𝟘  πŸ™  πŸ™  ≀ω ()
    ≀ω 𝟘  πŸ™  β‰€πŸ™ 𝟘  ()
    ≀ω 𝟘  πŸ™  β‰€πŸ™ πŸ™  ()
    ≀ω 𝟘  πŸ™  β‰€πŸ™ β‰€πŸ™ ()
    ≀ω 𝟘  πŸ™  β‰€πŸ™ ≀ω ()
    ≀ω 𝟘  πŸ™  ≀ω 𝟘  ()
    ≀ω 𝟘  πŸ™  ≀ω πŸ™  ()
    ≀ω 𝟘  πŸ™  ≀ω β‰€πŸ™ ()
    ≀ω 𝟘  πŸ™  ≀ω ≀ω ()
    ≀ω 𝟘  β‰€πŸ™ 𝟘  𝟘  ()
    ≀ω 𝟘  β‰€πŸ™ 𝟘  πŸ™  ()
    ≀ω 𝟘  β‰€πŸ™ 𝟘  β‰€πŸ™ ()
    ≀ω 𝟘  β‰€πŸ™ 𝟘  ≀ω ()
    ≀ω 𝟘  β‰€πŸ™ πŸ™  𝟘  ()
    ≀ω 𝟘  β‰€πŸ™ πŸ™  πŸ™  ()
    ≀ω 𝟘  β‰€πŸ™ πŸ™  β‰€πŸ™ ()
    ≀ω 𝟘  β‰€πŸ™ πŸ™  ≀ω ()
    ≀ω 𝟘  β‰€πŸ™ β‰€πŸ™ 𝟘  ()
    ≀ω 𝟘  β‰€πŸ™ β‰€πŸ™ πŸ™  ()
    ≀ω 𝟘  β‰€πŸ™ β‰€πŸ™ β‰€πŸ™ ()
    ≀ω 𝟘  β‰€πŸ™ β‰€πŸ™ ≀ω ()
    ≀ω 𝟘  β‰€πŸ™ ≀ω 𝟘  ()
    ≀ω 𝟘  β‰€πŸ™ ≀ω πŸ™  ()
    ≀ω 𝟘  β‰€πŸ™ ≀ω β‰€πŸ™ ()
    ≀ω 𝟘  β‰€πŸ™ ≀ω ≀ω ()
    ≀ω 𝟘  ≀ω 𝟘  𝟘  ()
    ≀ω 𝟘  ≀ω 𝟘  πŸ™  ()
    ≀ω 𝟘  ≀ω 𝟘  β‰€πŸ™ ()
    ≀ω 𝟘  ≀ω 𝟘  ≀ω ()
    ≀ω 𝟘  ≀ω πŸ™  𝟘  ()
    ≀ω 𝟘  ≀ω πŸ™  πŸ™  ()
    ≀ω 𝟘  ≀ω πŸ™  β‰€πŸ™ ()
    ≀ω 𝟘  ≀ω πŸ™  ≀ω ()
    ≀ω 𝟘  ≀ω β‰€πŸ™ 𝟘  ()
    ≀ω 𝟘  ≀ω β‰€πŸ™ πŸ™  ()
    ≀ω 𝟘  ≀ω β‰€πŸ™ β‰€πŸ™ ()
    ≀ω 𝟘  ≀ω β‰€πŸ™ ≀ω ()
    ≀ω 𝟘  ≀ω ≀ω 𝟘  ()
    ≀ω 𝟘  ≀ω ≀ω πŸ™  ()
    ≀ω 𝟘  ≀ω ≀ω β‰€πŸ™ ()
    ≀ω 𝟘  ≀ω ≀ω ≀ω ()
    𝟘  πŸ™  𝟘  𝟘  πŸ™  ()
    𝟘  πŸ™  𝟘  𝟘  β‰€πŸ™ ()
    𝟘  πŸ™  𝟘  𝟘  ≀ω ()
    𝟘  πŸ™  𝟘  πŸ™  𝟘  ()
    𝟘  πŸ™  𝟘  πŸ™  πŸ™  ()
    𝟘  πŸ™  𝟘  πŸ™  β‰€πŸ™ ()
    𝟘  πŸ™  𝟘  πŸ™  ≀ω ()
    𝟘  πŸ™  𝟘  β‰€πŸ™ 𝟘  ()
    𝟘  πŸ™  𝟘  β‰€πŸ™ πŸ™  ()
    𝟘  πŸ™  𝟘  β‰€πŸ™ β‰€πŸ™ ()
    𝟘  πŸ™  𝟘  β‰€πŸ™ ≀ω ()
    𝟘  πŸ™  𝟘  ≀ω 𝟘  ()
    𝟘  πŸ™  𝟘  ≀ω πŸ™  ()
    𝟘  πŸ™  𝟘  ≀ω β‰€πŸ™ ()
    𝟘  πŸ™  𝟘  ≀ω ≀ω ()
    𝟘  πŸ™  πŸ™  𝟘  𝟘  ()
    𝟘  πŸ™  πŸ™  𝟘  πŸ™  ()
    𝟘  πŸ™  πŸ™  𝟘  β‰€πŸ™ ()
    𝟘  πŸ™  πŸ™  𝟘  ≀ω ()
    𝟘  πŸ™  πŸ™  πŸ™  𝟘  ()
    𝟘  πŸ™  πŸ™  πŸ™  πŸ™  ()
    𝟘  πŸ™  πŸ™  πŸ™  β‰€πŸ™ ()
    𝟘  πŸ™  πŸ™  πŸ™  ≀ω ()
    𝟘  πŸ™  πŸ™  β‰€πŸ™ 𝟘  ()
    𝟘  πŸ™  πŸ™  β‰€πŸ™ πŸ™  ()
    𝟘  πŸ™  πŸ™  β‰€πŸ™ β‰€πŸ™ ()
    𝟘  πŸ™  πŸ™  β‰€πŸ™ ≀ω ()
    𝟘  πŸ™  πŸ™  ≀ω 𝟘  ()
    𝟘  πŸ™  πŸ™  ≀ω πŸ™  ()
    𝟘  πŸ™  πŸ™  ≀ω β‰€πŸ™ ()
    𝟘  πŸ™  πŸ™  ≀ω ≀ω ()
    𝟘  πŸ™  β‰€πŸ™ 𝟘  𝟘  ()
    𝟘  πŸ™  β‰€πŸ™ 𝟘  πŸ™  ()
    𝟘  πŸ™  β‰€πŸ™ 𝟘  β‰€πŸ™ ()
    𝟘  πŸ™  β‰€πŸ™ 𝟘  ≀ω ()
    𝟘  πŸ™  β‰€πŸ™ πŸ™  𝟘  ()
    𝟘  πŸ™  β‰€πŸ™ πŸ™  πŸ™  ()
    𝟘  πŸ™  β‰€πŸ™ πŸ™  β‰€πŸ™ ()
    𝟘  πŸ™  β‰€πŸ™ πŸ™  ≀ω ()
    𝟘  πŸ™  β‰€πŸ™ β‰€πŸ™ 𝟘  ()
    𝟘  πŸ™  β‰€πŸ™ β‰€πŸ™ πŸ™  ()
    𝟘  πŸ™  β‰€πŸ™ β‰€πŸ™ β‰€πŸ™ ()
    𝟘  πŸ™  β‰€πŸ™ β‰€πŸ™ ≀ω ()
    𝟘  πŸ™  β‰€πŸ™ ≀ω 𝟘  ()
    𝟘  πŸ™  β‰€πŸ™ ≀ω πŸ™  ()
    𝟘  πŸ™  β‰€πŸ™ ≀ω β‰€πŸ™ ()
    𝟘  πŸ™  β‰€πŸ™ ≀ω ≀ω ()
    𝟘  πŸ™  ≀ω 𝟘  𝟘  ()
    𝟘  πŸ™  ≀ω 𝟘  πŸ™  ()
    𝟘  πŸ™  ≀ω 𝟘  β‰€πŸ™ ()
    𝟘  πŸ™  ≀ω 𝟘  ≀ω ()
    𝟘  πŸ™  ≀ω πŸ™  𝟘  ()
    𝟘  πŸ™  ≀ω πŸ™  πŸ™  ()
    𝟘  πŸ™  ≀ω πŸ™  β‰€πŸ™ ()
    𝟘  πŸ™  ≀ω πŸ™  ≀ω ()
    𝟘  πŸ™  ≀ω β‰€πŸ™ 𝟘  ()
    𝟘  πŸ™  ≀ω β‰€πŸ™ πŸ™  ()
    𝟘  πŸ™  ≀ω β‰€πŸ™ β‰€πŸ™ ()
    𝟘  πŸ™  ≀ω β‰€πŸ™ ≀ω ()
    𝟘  πŸ™  ≀ω ≀ω 𝟘  ()
    𝟘  πŸ™  ≀ω ≀ω πŸ™  ()
    𝟘  πŸ™  ≀ω ≀ω β‰€πŸ™ ()
    𝟘  πŸ™  ≀ω ≀ω ≀ω ()
    πŸ™  πŸ™  𝟘  𝟘  πŸ™  ()
    πŸ™  πŸ™  𝟘  𝟘  β‰€πŸ™ ()
    πŸ™  πŸ™  𝟘  𝟘  ≀ω ()
    πŸ™  πŸ™  𝟘  πŸ™  𝟘  ()
    πŸ™  πŸ™  𝟘  πŸ™  πŸ™  ()
    πŸ™  πŸ™  𝟘  πŸ™  β‰€πŸ™ ()
    πŸ™  πŸ™  𝟘  πŸ™  ≀ω ()
    πŸ™  πŸ™  𝟘  β‰€πŸ™ 𝟘  ()
    πŸ™  πŸ™  𝟘  β‰€πŸ™ πŸ™  ()
    πŸ™  πŸ™  𝟘  β‰€πŸ™ β‰€πŸ™ ()
    πŸ™  πŸ™  𝟘  β‰€πŸ™ ≀ω ()
    πŸ™  πŸ™  𝟘  ≀ω 𝟘  ()
    πŸ™  πŸ™  𝟘  ≀ω πŸ™  ()
    πŸ™  πŸ™  𝟘  ≀ω β‰€πŸ™ ()
    πŸ™  πŸ™  𝟘  ≀ω ≀ω ()
    πŸ™  πŸ™  πŸ™  𝟘  𝟘  ()
    πŸ™  πŸ™  πŸ™  𝟘  πŸ™  ()
    πŸ™  πŸ™  πŸ™  𝟘  β‰€πŸ™ ()
    πŸ™  πŸ™  πŸ™  𝟘  ≀ω ()
    πŸ™  πŸ™  πŸ™  πŸ™  𝟘  ()
    πŸ™  πŸ™  πŸ™  πŸ™  πŸ™  ()
    πŸ™  πŸ™  πŸ™  πŸ™  β‰€πŸ™ ()
    πŸ™  πŸ™  πŸ™  πŸ™  ≀ω ()
    πŸ™  πŸ™  πŸ™  β‰€πŸ™ 𝟘  ()
    πŸ™  πŸ™  πŸ™  β‰€πŸ™ πŸ™  ()
    πŸ™  πŸ™  πŸ™  β‰€πŸ™ β‰€πŸ™ ()
    πŸ™  πŸ™  πŸ™  β‰€πŸ™ ≀ω ()
    πŸ™  πŸ™  πŸ™  ≀ω 𝟘  ()
    πŸ™  πŸ™  πŸ™  ≀ω πŸ™  ()
    πŸ™  πŸ™  πŸ™  ≀ω β‰€πŸ™ ()
    πŸ™  πŸ™  πŸ™  ≀ω ≀ω ()
    πŸ™  πŸ™  β‰€πŸ™ 𝟘  𝟘  ()
    πŸ™  πŸ™  β‰€πŸ™ 𝟘  πŸ™  ()
    πŸ™  πŸ™  β‰€πŸ™ 𝟘  β‰€πŸ™ ()
    πŸ™  πŸ™  β‰€πŸ™ 𝟘  ≀ω ()
    πŸ™  πŸ™  β‰€πŸ™ πŸ™  𝟘  ()
    πŸ™  πŸ™  β‰€πŸ™ πŸ™  πŸ™  ()
    πŸ™  πŸ™  β‰€πŸ™ πŸ™  β‰€πŸ™ ()
    πŸ™  πŸ™  β‰€πŸ™ πŸ™  ≀ω ()
    πŸ™  πŸ™  β‰€πŸ™ β‰€πŸ™ 𝟘  ()
    πŸ™  πŸ™  β‰€πŸ™ β‰€πŸ™ πŸ™  ()
    πŸ™  πŸ™  β‰€πŸ™ β‰€πŸ™ β‰€πŸ™ ()
    πŸ™  πŸ™  β‰€πŸ™ β‰€πŸ™ ≀ω ()
    πŸ™  πŸ™  β‰€πŸ™ ≀ω 𝟘  ()
    πŸ™  πŸ™  β‰€πŸ™ ≀ω πŸ™  ()
    πŸ™  πŸ™  β‰€πŸ™ ≀ω β‰€πŸ™ ()
    πŸ™  πŸ™  β‰€πŸ™ ≀ω ≀ω ()
    πŸ™  πŸ™  ≀ω 𝟘  𝟘  ()
    πŸ™  πŸ™  ≀ω 𝟘  πŸ™  ()
    πŸ™  πŸ™  ≀ω 𝟘  β‰€πŸ™ ()
    πŸ™  πŸ™  ≀ω 𝟘  ≀ω ()
    πŸ™  πŸ™  ≀ω πŸ™  𝟘  ()
    πŸ™  πŸ™  ≀ω πŸ™  πŸ™  ()
    πŸ™  πŸ™  ≀ω πŸ™  β‰€πŸ™ ()
    πŸ™  πŸ™  ≀ω πŸ™  ≀ω ()
    πŸ™  πŸ™  ≀ω β‰€πŸ™ 𝟘  ()
    πŸ™  πŸ™  ≀ω β‰€πŸ™ πŸ™  ()
    πŸ™  πŸ™  ≀ω β‰€πŸ™ β‰€πŸ™ ()
    πŸ™  πŸ™  ≀ω β‰€πŸ™ ≀ω ()
    πŸ™  πŸ™  ≀ω ≀ω 𝟘  ()
    πŸ™  πŸ™  ≀ω ≀ω πŸ™  ()
    πŸ™  πŸ™  ≀ω ≀ω β‰€πŸ™ ()
    πŸ™  πŸ™  ≀ω ≀ω ≀ω ()
    β‰€πŸ™ πŸ™  𝟘  𝟘  πŸ™  ()
    β‰€πŸ™ πŸ™  𝟘  𝟘  β‰€πŸ™ ()
    β‰€πŸ™ πŸ™  𝟘  𝟘  ≀ω ()
    β‰€πŸ™ πŸ™  𝟘  πŸ™  𝟘  ()
    β‰€πŸ™ πŸ™  𝟘  πŸ™  πŸ™  ()
    β‰€πŸ™ πŸ™  𝟘  πŸ™  β‰€πŸ™ ()
    β‰€πŸ™ πŸ™  𝟘  πŸ™  ≀ω ()
    β‰€πŸ™ πŸ™  𝟘  β‰€πŸ™ 𝟘  ()
    β‰€πŸ™ πŸ™  𝟘  β‰€πŸ™ πŸ™  ()
    β‰€πŸ™ πŸ™  𝟘  β‰€πŸ™ β‰€πŸ™ ()
    β‰€πŸ™ πŸ™  𝟘  β‰€πŸ™ ≀ω ()
    β‰€πŸ™ πŸ™  𝟘  ≀ω 𝟘  ()
    β‰€πŸ™ πŸ™  𝟘  ≀ω πŸ™  ()
    β‰€πŸ™ πŸ™  𝟘  ≀ω β‰€πŸ™ ()
    β‰€πŸ™ πŸ™  𝟘  ≀ω ≀ω ()
    β‰€πŸ™ πŸ™  πŸ™  𝟘  𝟘  ()
    β‰€πŸ™ πŸ™  πŸ™  𝟘  πŸ™  ()
    β‰€πŸ™ πŸ™  πŸ™  𝟘  β‰€πŸ™ ()
    β‰€πŸ™ πŸ™  πŸ™  𝟘  ≀ω ()
    β‰€πŸ™ πŸ™  πŸ™  πŸ™  𝟘  ()
    β‰€πŸ™ πŸ™  πŸ™  πŸ™  πŸ™  ()
    β‰€πŸ™ πŸ™  πŸ™  πŸ™  β‰€πŸ™ ()
    β‰€πŸ™ πŸ™  πŸ™  πŸ™  ≀ω ()
    β‰€πŸ™ πŸ™  πŸ™  β‰€πŸ™ 𝟘  ()
    β‰€πŸ™ πŸ™  πŸ™  β‰€πŸ™ πŸ™  ()
    β‰€πŸ™ πŸ™  πŸ™  β‰€πŸ™ β‰€πŸ™ ()
    β‰€πŸ™ πŸ™  πŸ™  β‰€πŸ™ ≀ω ()
    β‰€πŸ™ πŸ™  πŸ™  ≀ω 𝟘  ()
    β‰€πŸ™ πŸ™  πŸ™  ≀ω πŸ™  ()
    β‰€πŸ™ πŸ™  πŸ™  ≀ω β‰€πŸ™ ()
    β‰€πŸ™ πŸ™  πŸ™  ≀ω ≀ω ()
    β‰€πŸ™ πŸ™  β‰€πŸ™ 𝟘  𝟘  ()
    β‰€πŸ™ πŸ™  β‰€πŸ™ 𝟘  πŸ™  ()
    β‰€πŸ™ πŸ™  β‰€πŸ™ 𝟘  β‰€πŸ™ ()
    β‰€πŸ™ πŸ™  β‰€πŸ™ 𝟘  ≀ω ()
    β‰€πŸ™ πŸ™  β‰€πŸ™ πŸ™  𝟘  ()
    β‰€πŸ™ πŸ™  β‰€πŸ™ πŸ™  πŸ™  ()
    β‰€πŸ™ πŸ™  β‰€πŸ™ πŸ™  β‰€πŸ™ ()
    β‰€πŸ™ πŸ™  β‰€πŸ™ πŸ™  ≀ω ()
    β‰€πŸ™ πŸ™  β‰€πŸ™ β‰€πŸ™ 𝟘  ()
    β‰€πŸ™ πŸ™  β‰€πŸ™ β‰€πŸ™ πŸ™  ()
    β‰€πŸ™ πŸ™  β‰€πŸ™ β‰€πŸ™ β‰€πŸ™ ()
    β‰€πŸ™ πŸ™  β‰€πŸ™ β‰€πŸ™ ≀ω ()
    β‰€πŸ™ πŸ™  β‰€πŸ™ ≀ω 𝟘  ()
    β‰€πŸ™ πŸ™  β‰€πŸ™ ≀ω πŸ™  ()
    β‰€πŸ™ πŸ™  β‰€πŸ™ ≀ω β‰€πŸ™ ()
    β‰€πŸ™ πŸ™  β‰€πŸ™ ≀ω ≀ω ()
    β‰€πŸ™ πŸ™  ≀ω 𝟘  𝟘  ()
    β‰€πŸ™ πŸ™  ≀ω 𝟘  πŸ™  ()
    β‰€πŸ™ πŸ™  ≀ω 𝟘  β‰€πŸ™ ()
    β‰€πŸ™ πŸ™  ≀ω 𝟘  ≀ω ()
    β‰€πŸ™ πŸ™  ≀ω πŸ™  𝟘  ()
    β‰€πŸ™ πŸ™  ≀ω πŸ™  πŸ™  ()
    β‰€πŸ™ πŸ™  ≀ω πŸ™  β‰€πŸ™ ()
    β‰€πŸ™ πŸ™  ≀ω πŸ™  ≀ω ()
    β‰€πŸ™ πŸ™  ≀ω β‰€πŸ™ 𝟘  ()
    β‰€πŸ™ πŸ™  ≀ω β‰€πŸ™ πŸ™  ()
    β‰€πŸ™ πŸ™  ≀ω β‰€πŸ™ β‰€πŸ™ ()
    β‰€πŸ™ πŸ™  ≀ω β‰€πŸ™ ≀ω ()
    β‰€πŸ™ πŸ™  ≀ω ≀ω 𝟘  ()
    β‰€πŸ™ πŸ™  ≀ω ≀ω πŸ™  ()
    β‰€πŸ™ πŸ™  ≀ω ≀ω β‰€πŸ™ ()
    β‰€πŸ™ πŸ™  ≀ω ≀ω ≀ω ()
    ≀ω πŸ™  𝟘  𝟘  πŸ™  ()
    ≀ω πŸ™  𝟘  𝟘  β‰€πŸ™ ()
    ≀ω πŸ™  𝟘  𝟘  ≀ω ()
    ≀ω πŸ™  𝟘  πŸ™  𝟘  ()
    ≀ω πŸ™  𝟘  πŸ™  πŸ™  ()
    ≀ω πŸ™  𝟘  πŸ™  β‰€πŸ™ ()
    ≀ω πŸ™  𝟘  πŸ™  ≀ω ()
    ≀ω πŸ™  𝟘  β‰€πŸ™ 𝟘  ()
    ≀ω πŸ™  𝟘  β‰€πŸ™ πŸ™  ()
    ≀ω πŸ™  𝟘  β‰€πŸ™ β‰€πŸ™ ()
    ≀ω πŸ™  𝟘  β‰€πŸ™ ≀ω ()
    ≀ω πŸ™  𝟘  ≀ω 𝟘  ()
    ≀ω πŸ™  𝟘  ≀ω πŸ™  ()
    ≀ω πŸ™  𝟘  ≀ω β‰€πŸ™ ()
    ≀ω πŸ™  𝟘  ≀ω ≀ω ()
    ≀ω πŸ™  πŸ™  𝟘  𝟘  ()
    ≀ω πŸ™  πŸ™  𝟘  πŸ™  ()
    ≀ω πŸ™  πŸ™  𝟘  β‰€πŸ™ ()
    ≀ω πŸ™  πŸ™  𝟘  ≀ω ()
    ≀ω πŸ™  πŸ™  πŸ™  𝟘  ()
    ≀ω πŸ™  πŸ™  πŸ™  πŸ™  ()
    ≀ω πŸ™  πŸ™  πŸ™  β‰€πŸ™ ()
    ≀ω πŸ™  πŸ™  πŸ™  ≀ω ()
    ≀ω πŸ™  πŸ™  β‰€πŸ™ 𝟘  ()
    ≀ω πŸ™  πŸ™  β‰€πŸ™ πŸ™  ()
    ≀ω πŸ™  πŸ™  β‰€πŸ™ β‰€πŸ™ ()
    ≀ω πŸ™  πŸ™  β‰€πŸ™ ≀ω ()
    ≀ω πŸ™  πŸ™  ≀ω 𝟘  ()
    ≀ω πŸ™  πŸ™  ≀ω πŸ™  ()
    ≀ω πŸ™  πŸ™  ≀ω β‰€πŸ™ ()
    ≀ω πŸ™  πŸ™  ≀ω ≀ω ()
    ≀ω πŸ™  β‰€πŸ™ 𝟘  𝟘  ()
    ≀ω πŸ™  β‰€πŸ™ 𝟘  πŸ™  ()
    ≀ω πŸ™  β‰€πŸ™ 𝟘  β‰€πŸ™ ()
    ≀ω πŸ™  β‰€πŸ™ 𝟘  ≀ω ()
    ≀ω πŸ™  β‰€πŸ™ πŸ™  𝟘  ()
    ≀ω πŸ™  β‰€πŸ™ πŸ™  πŸ™  ()
    ≀ω πŸ™  β‰€πŸ™ πŸ™  β‰€πŸ™ ()
    ≀ω πŸ™  β‰€πŸ™ πŸ™  ≀ω ()
    ≀ω πŸ™  β‰€πŸ™ β‰€πŸ™ 𝟘  ()
    ≀ω πŸ™  β‰€πŸ™ β‰€πŸ™ πŸ™  ()
    ≀ω πŸ™  β‰€πŸ™ β‰€πŸ™ β‰€πŸ™ ()
    ≀ω πŸ™  β‰€πŸ™ β‰€πŸ™ ≀ω ()
    ≀ω πŸ™  β‰€πŸ™ ≀ω 𝟘  ()
    ≀ω πŸ™  β‰€πŸ™ ≀ω πŸ™  ()
    ≀ω πŸ™  β‰€πŸ™ ≀ω β‰€πŸ™ ()
    ≀ω πŸ™  β‰€πŸ™ ≀ω ≀ω ()
    ≀ω πŸ™  ≀ω 𝟘  𝟘  ()
    ≀ω πŸ™  ≀ω 𝟘  πŸ™  ()
    ≀ω πŸ™  ≀ω 𝟘  β‰€πŸ™ ()
    ≀ω πŸ™  ≀ω 𝟘  ≀ω ()
    ≀ω πŸ™  ≀ω πŸ™  𝟘  ()
    ≀ω πŸ™  ≀ω πŸ™  πŸ™  ()
    ≀ω πŸ™  ≀ω πŸ™  β‰€πŸ™ ()
    ≀ω πŸ™  ≀ω πŸ™  ≀ω ()
    ≀ω πŸ™  ≀ω β‰€πŸ™ 𝟘  ()
    ≀ω πŸ™  ≀ω β‰€πŸ™ πŸ™  ()
    ≀ω πŸ™  ≀ω β‰€πŸ™ β‰€πŸ™ ()
    ≀ω πŸ™  ≀ω β‰€πŸ™ ≀ω ()
    ≀ω πŸ™  ≀ω ≀ω 𝟘  ()
    ≀ω πŸ™  ≀ω ≀ω πŸ™  ()
    ≀ω πŸ™  ≀ω ≀ω β‰€πŸ™ ()
    ≀ω πŸ™  ≀ω ≀ω ≀ω ()
    𝟘  β‰€πŸ™ 𝟘  𝟘  πŸ™  ()
    𝟘  β‰€πŸ™ 𝟘  𝟘  β‰€πŸ™ ()
    𝟘  β‰€πŸ™ 𝟘  𝟘  ≀ω ()
    𝟘  β‰€πŸ™ 𝟘  πŸ™  𝟘  ()
    𝟘  β‰€πŸ™ 𝟘  πŸ™  πŸ™  ()
    𝟘  β‰€πŸ™ 𝟘  πŸ™  β‰€πŸ™ ()
    𝟘  β‰€πŸ™ 𝟘  πŸ™  ≀ω ()
    𝟘  β‰€πŸ™ 𝟘  β‰€πŸ™ 𝟘  ()
    𝟘  β‰€πŸ™ 𝟘  β‰€πŸ™ πŸ™  ()
    𝟘  β‰€πŸ™ 𝟘  β‰€πŸ™ β‰€πŸ™ ()
    𝟘  β‰€πŸ™ 𝟘  β‰€πŸ™ ≀ω ()
    𝟘  β‰€πŸ™ 𝟘  ≀ω 𝟘  ()
    𝟘  β‰€πŸ™ 𝟘  ≀ω πŸ™  ()
    𝟘  β‰€πŸ™ 𝟘  ≀ω β‰€πŸ™ ()
    𝟘  β‰€πŸ™ 𝟘  ≀ω ≀ω ()
    𝟘  β‰€πŸ™ πŸ™  𝟘  𝟘  ()
    𝟘  β‰€πŸ™ πŸ™  𝟘  πŸ™  ()
    𝟘  β‰€πŸ™ πŸ™  𝟘  β‰€πŸ™ ()
    𝟘  β‰€πŸ™ πŸ™  𝟘  ≀ω ()
    𝟘  β‰€πŸ™ πŸ™  πŸ™  𝟘  ()
    𝟘  β‰€πŸ™ πŸ™  πŸ™  πŸ™  ()
    𝟘  β‰€πŸ™ πŸ™  πŸ™  β‰€πŸ™ ()
    𝟘  β‰€πŸ™ πŸ™  πŸ™  ≀ω ()
    𝟘  β‰€πŸ™ πŸ™  β‰€πŸ™ 𝟘  ()
    𝟘  β‰€πŸ™ πŸ™  β‰€πŸ™ πŸ™  ()
    𝟘  β‰€πŸ™ πŸ™  β‰€πŸ™ β‰€πŸ™ ()
    𝟘  β‰€πŸ™ πŸ™  β‰€πŸ™ ≀ω ()
    𝟘  β‰€πŸ™ πŸ™  ≀ω 𝟘  ()
    𝟘  β‰€πŸ™ πŸ™  ≀ω πŸ™  ()
    𝟘  β‰€πŸ™ πŸ™  ≀ω β‰€πŸ™ ()
    𝟘  β‰€πŸ™ πŸ™  ≀ω ≀ω ()
    𝟘  β‰€πŸ™ β‰€πŸ™ 𝟘  𝟘  ()
    𝟘  β‰€πŸ™ β‰€πŸ™ 𝟘  πŸ™  ()
    𝟘  β‰€πŸ™ β‰€πŸ™ 𝟘  β‰€πŸ™ ()
    𝟘  β‰€πŸ™ β‰€πŸ™ 𝟘  ≀ω ()
    𝟘  β‰€πŸ™ β‰€πŸ™ πŸ™  𝟘  ()
    𝟘  β‰€πŸ™ β‰€πŸ™ πŸ™  πŸ™  ()
    𝟘  β‰€πŸ™ β‰€πŸ™ πŸ™  β‰€πŸ™ ()
    𝟘  β‰€πŸ™ β‰€πŸ™ πŸ™  ≀ω ()
    𝟘  β‰€πŸ™ β‰€πŸ™ β‰€πŸ™ 𝟘  ()
    𝟘  β‰€πŸ™ β‰€πŸ™ β‰€πŸ™ πŸ™  ()
    𝟘  β‰€πŸ™ β‰€πŸ™ β‰€πŸ™ β‰€πŸ™ ()
    𝟘  β‰€πŸ™ β‰€πŸ™ β‰€πŸ™ ≀ω ()
    𝟘  β‰€πŸ™ β‰€πŸ™ ≀ω 𝟘  ()
    𝟘  β‰€πŸ™ β‰€πŸ™ ≀ω πŸ™  ()
    𝟘  β‰€πŸ™ β‰€πŸ™ ≀ω β‰€πŸ™ ()
    𝟘  β‰€πŸ™ β‰€πŸ™ ≀ω ≀ω ()
    𝟘  β‰€πŸ™ ≀ω 𝟘  𝟘  ()
    𝟘  β‰€πŸ™ ≀ω 𝟘  πŸ™  ()
    𝟘  β‰€πŸ™ ≀ω 𝟘  β‰€πŸ™ ()
    𝟘  β‰€πŸ™ ≀ω 𝟘  ≀ω ()
    𝟘  β‰€πŸ™ ≀ω πŸ™  𝟘  ()
    𝟘  β‰€πŸ™ ≀ω πŸ™  πŸ™  ()
    𝟘  β‰€πŸ™ ≀ω πŸ™  β‰€πŸ™ ()
    𝟘  β‰€πŸ™ ≀ω πŸ™  ≀ω ()
    𝟘  β‰€πŸ™ ≀ω β‰€πŸ™ 𝟘  ()
    𝟘  β‰€πŸ™ ≀ω β‰€πŸ™ πŸ™  ()
    𝟘  β‰€πŸ™ ≀ω β‰€πŸ™ β‰€πŸ™ ()
    𝟘  β‰€πŸ™ ≀ω β‰€πŸ™ ≀ω ()
    𝟘  β‰€πŸ™ ≀ω ≀ω 𝟘  ()
    𝟘  β‰€πŸ™ ≀ω ≀ω πŸ™  ()
    𝟘  β‰€πŸ™ ≀ω ≀ω β‰€πŸ™ ()
    𝟘  β‰€πŸ™ ≀ω ≀ω ≀ω ()
    πŸ™  β‰€πŸ™ 𝟘  𝟘  πŸ™  ()
    πŸ™  β‰€πŸ™ 𝟘  𝟘  β‰€πŸ™ ()
    πŸ™  β‰€πŸ™ 𝟘  𝟘  ≀ω ()
    πŸ™  β‰€πŸ™ 𝟘  πŸ™  𝟘  ()
    πŸ™  β‰€πŸ™ 𝟘  πŸ™  πŸ™  ()
    πŸ™  β‰€πŸ™ 𝟘  πŸ™  β‰€πŸ™ ()
    πŸ™  β‰€πŸ™ 𝟘  πŸ™  ≀ω ()
    πŸ™  β‰€πŸ™ 𝟘  β‰€πŸ™ 𝟘  ()
    πŸ™  β‰€πŸ™ 𝟘  β‰€πŸ™ πŸ™  ()
    πŸ™  β‰€πŸ™ 𝟘  β‰€πŸ™ β‰€πŸ™ ()
    πŸ™  β‰€πŸ™ 𝟘  β‰€πŸ™ ≀ω ()
    πŸ™  β‰€πŸ™ 𝟘  ≀ω 𝟘  ()
    πŸ™  β‰€πŸ™ 𝟘  ≀ω πŸ™  ()
    πŸ™  β‰€πŸ™ 𝟘  ≀ω β‰€πŸ™ ()
    πŸ™  β‰€πŸ™ 𝟘  ≀ω ≀ω ()
    πŸ™  β‰€πŸ™ πŸ™  𝟘  𝟘  ()
    πŸ™  β‰€πŸ™ πŸ™  𝟘  πŸ™  ()
    πŸ™  β‰€πŸ™ πŸ™  𝟘  β‰€πŸ™ ()
    πŸ™  β‰€πŸ™ πŸ™  𝟘  ≀ω ()
    πŸ™  β‰€πŸ™ πŸ™  πŸ™  𝟘  ()
    πŸ™  β‰€πŸ™ πŸ™  πŸ™  πŸ™  ()
    πŸ™  β‰€πŸ™ πŸ™  πŸ™  β‰€πŸ™ ()
    πŸ™  β‰€πŸ™ πŸ™  πŸ™  ≀ω ()
    πŸ™  β‰€πŸ™ πŸ™  β‰€πŸ™ 𝟘  ()
    πŸ™  β‰€πŸ™ πŸ™  β‰€πŸ™ πŸ™  ()
    πŸ™  β‰€πŸ™ πŸ™  β‰€πŸ™ β‰€πŸ™ ()
    πŸ™  β‰€πŸ™ πŸ™  β‰€πŸ™ ≀ω ()
    πŸ™  β‰€πŸ™ πŸ™  ≀ω 𝟘  ()
    πŸ™  β‰€πŸ™ πŸ™  ≀ω πŸ™  ()
    πŸ™  β‰€πŸ™ πŸ™  ≀ω β‰€πŸ™ ()
    πŸ™  β‰€πŸ™ πŸ™  ≀ω ≀ω ()
    πŸ™  β‰€πŸ™ β‰€πŸ™ 𝟘  𝟘  ()
    πŸ™  β‰€πŸ™ β‰€πŸ™ 𝟘  πŸ™  ()
    πŸ™  β‰€πŸ™ β‰€πŸ™ 𝟘  β‰€πŸ™ ()
    πŸ™  β‰€πŸ™ β‰€πŸ™ 𝟘  ≀ω ()
    πŸ™  β‰€πŸ™ β‰€πŸ™ πŸ™  𝟘  ()
    πŸ™  β‰€πŸ™ β‰€πŸ™ πŸ™  πŸ™  ()
    πŸ™  β‰€πŸ™ β‰€πŸ™ πŸ™  β‰€πŸ™ ()
    πŸ™  β‰€πŸ™ β‰€πŸ™ πŸ™  ≀ω ()
    πŸ™  β‰€πŸ™ β‰€πŸ™ β‰€πŸ™ 𝟘  ()
    πŸ™  β‰€πŸ™ β‰€πŸ™ β‰€πŸ™ πŸ™  ()
    πŸ™  β‰€πŸ™ β‰€πŸ™ β‰€πŸ™ β‰€πŸ™ ()
    πŸ™  β‰€πŸ™ β‰€πŸ™ β‰€πŸ™ ≀ω ()
    πŸ™  β‰€πŸ™ β‰€πŸ™ ≀ω 𝟘  ()
    πŸ™  β‰€πŸ™ β‰€πŸ™ ≀ω πŸ™  ()
    πŸ™  β‰€πŸ™ β‰€πŸ™ ≀ω β‰€πŸ™ ()
    πŸ™  β‰€πŸ™ β‰€πŸ™ ≀ω ≀ω ()
    πŸ™  β‰€πŸ™ ≀ω 𝟘  𝟘  ()
    πŸ™  β‰€πŸ™ ≀ω 𝟘  πŸ™  ()
    πŸ™  β‰€πŸ™ ≀ω 𝟘  β‰€πŸ™ ()
    πŸ™  β‰€πŸ™ ≀ω 𝟘  ≀ω ()
    πŸ™  β‰€πŸ™ ≀ω πŸ™  𝟘  ()
    πŸ™  β‰€πŸ™ ≀ω πŸ™  πŸ™  ()
    πŸ™  β‰€πŸ™ ≀ω πŸ™  β‰€πŸ™ ()
    πŸ™  β‰€πŸ™ ≀ω πŸ™  ≀ω ()
    πŸ™  β‰€πŸ™ ≀ω β‰€πŸ™ 𝟘  ()
    πŸ™  β‰€πŸ™ ≀ω β‰€πŸ™ πŸ™  ()
    πŸ™  β‰€πŸ™ ≀ω β‰€πŸ™ β‰€πŸ™ ()
    πŸ™  β‰€πŸ™ ≀ω β‰€πŸ™ ≀ω ()
    πŸ™  β‰€πŸ™ ≀ω ≀ω 𝟘  ()
    πŸ™  β‰€πŸ™ ≀ω ≀ω πŸ™  ()
    πŸ™  β‰€πŸ™ ≀ω ≀ω β‰€πŸ™ ()
    πŸ™  β‰€πŸ™ ≀ω ≀ω ≀ω ()
    β‰€πŸ™ β‰€πŸ™ 𝟘  𝟘  πŸ™  ()
    β‰€πŸ™ β‰€πŸ™ 𝟘  𝟘  β‰€πŸ™ ()
    β‰€πŸ™ β‰€πŸ™ 𝟘  𝟘  ≀ω ()
    β‰€πŸ™ β‰€πŸ™ 𝟘  πŸ™  𝟘  ()
    β‰€πŸ™ β‰€πŸ™ 𝟘  πŸ™  πŸ™  ()
    β‰€πŸ™ β‰€πŸ™ 𝟘  πŸ™  β‰€πŸ™ ()
    β‰€πŸ™ β‰€πŸ™ 𝟘  πŸ™  ≀ω ()
    β‰€πŸ™ β‰€πŸ™ 𝟘  β‰€πŸ™ 𝟘  ()
    β‰€πŸ™ β‰€πŸ™ 𝟘  β‰€πŸ™ πŸ™  ()
    β‰€πŸ™ β‰€πŸ™ 𝟘  β‰€πŸ™ β‰€πŸ™ ()
    β‰€πŸ™ β‰€πŸ™ 𝟘  β‰€πŸ™ ≀ω ()
    β‰€πŸ™ β‰€πŸ™ 𝟘  ≀ω 𝟘  ()
    β‰€πŸ™ β‰€πŸ™ 𝟘  ≀ω πŸ™  ()
    β‰€πŸ™ β‰€πŸ™ 𝟘  ≀ω β‰€πŸ™ ()
    β‰€πŸ™ β‰€πŸ™ 𝟘  ≀ω ≀ω ()
    β‰€πŸ™ β‰€πŸ™ πŸ™  𝟘  𝟘  ()
    β‰€πŸ™ β‰€πŸ™ πŸ™  𝟘  πŸ™  ()
    β‰€πŸ™ β‰€πŸ™ πŸ™  𝟘  β‰€πŸ™ ()
    β‰€πŸ™ β‰€πŸ™ πŸ™  𝟘  ≀ω ()
    β‰€πŸ™ β‰€πŸ™ πŸ™  πŸ™  𝟘  ()
    β‰€πŸ™ β‰€πŸ™ πŸ™  πŸ™  πŸ™  ()
    β‰€πŸ™ β‰€πŸ™ πŸ™  πŸ™  β‰€πŸ™ ()
    β‰€πŸ™ β‰€πŸ™ πŸ™  πŸ™  ≀ω ()
    β‰€πŸ™ β‰€πŸ™ πŸ™  β‰€πŸ™ 𝟘  ()
    β‰€πŸ™ β‰€πŸ™ πŸ™  β‰€πŸ™ πŸ™  ()
    β‰€πŸ™ β‰€πŸ™ πŸ™  β‰€πŸ™ β‰€πŸ™ ()
    β‰€πŸ™ β‰€πŸ™ πŸ™  β‰€πŸ™ ≀ω ()
    β‰€πŸ™ β‰€πŸ™ πŸ™  ≀ω 𝟘  ()
    β‰€πŸ™ β‰€πŸ™ πŸ™  ≀ω πŸ™  ()
    β‰€πŸ™ β‰€πŸ™ πŸ™  ≀ω β‰€πŸ™ ()
    β‰€πŸ™ β‰€πŸ™ πŸ™  ≀ω ≀ω ()
    β‰€πŸ™ β‰€πŸ™ β‰€πŸ™ 𝟘  𝟘  ()
    β‰€πŸ™ β‰€πŸ™ β‰€πŸ™ 𝟘  πŸ™  ()
    β‰€πŸ™ β‰€πŸ™ β‰€πŸ™ 𝟘  β‰€πŸ™ ()
    β‰€πŸ™ β‰€πŸ™ β‰€πŸ™ 𝟘  ≀ω ()
    β‰€πŸ™ β‰€πŸ™ β‰€πŸ™ πŸ™  𝟘  ()
    β‰€πŸ™ β‰€πŸ™ β‰€πŸ™ πŸ™  πŸ™  ()
    β‰€πŸ™ β‰€πŸ™ β‰€πŸ™ πŸ™  β‰€πŸ™ ()
    β‰€πŸ™ β‰€πŸ™ β‰€πŸ™ πŸ™  ≀ω ()
    β‰€πŸ™ β‰€πŸ™ β‰€πŸ™ β‰€πŸ™ 𝟘  ()
    β‰€πŸ™ β‰€πŸ™ β‰€πŸ™ β‰€πŸ™ πŸ™  ()
    β‰€πŸ™ β‰€πŸ™ β‰€πŸ™ β‰€πŸ™ β‰€πŸ™ ()
    β‰€πŸ™ β‰€πŸ™ β‰€πŸ™ β‰€πŸ™ ≀ω ()
    β‰€πŸ™ β‰€πŸ™ β‰€πŸ™ ≀ω 𝟘  ()
    β‰€πŸ™ β‰€πŸ™ β‰€πŸ™ ≀ω πŸ™  ()
    β‰€πŸ™ β‰€πŸ™ β‰€πŸ™ ≀ω β‰€πŸ™ ()
    β‰€πŸ™ β‰€πŸ™ β‰€πŸ™ ≀ω ≀ω ()
    β‰€πŸ™ β‰€πŸ™ ≀ω 𝟘  𝟘  ()
    β‰€πŸ™ β‰€πŸ™ ≀ω 𝟘  πŸ™  ()
    β‰€πŸ™ β‰€πŸ™ ≀ω 𝟘  β‰€πŸ™ ()
    β‰€πŸ™ β‰€πŸ™ ≀ω 𝟘  ≀ω ()
    β‰€πŸ™ β‰€πŸ™ ≀ω πŸ™  𝟘  ()
    β‰€πŸ™ β‰€πŸ™ ≀ω πŸ™  πŸ™  ()
    β‰€πŸ™ β‰€πŸ™ ≀ω πŸ™  β‰€πŸ™ ()
    β‰€πŸ™ β‰€πŸ™ ≀ω πŸ™  ≀ω ()
    β‰€πŸ™ β‰€πŸ™ ≀ω β‰€πŸ™ 𝟘  ()
    β‰€πŸ™ β‰€πŸ™ ≀ω β‰€πŸ™ πŸ™  ()
    β‰€πŸ™ β‰€πŸ™ ≀ω β‰€πŸ™ β‰€πŸ™ ()
    β‰€πŸ™ β‰€πŸ™ ≀ω β‰€πŸ™ ≀ω ()
    β‰€πŸ™ β‰€πŸ™ ≀ω ≀ω 𝟘  ()
    β‰€πŸ™ β‰€πŸ™ ≀ω ≀ω πŸ™  ()
    β‰€πŸ™ β‰€πŸ™ ≀ω ≀ω β‰€πŸ™ ()
    β‰€πŸ™ β‰€πŸ™ ≀ω ≀ω ≀ω ()
    ≀ω β‰€πŸ™ 𝟘  𝟘  πŸ™  ()
    ≀ω β‰€πŸ™ 𝟘  𝟘  β‰€πŸ™ ()
    ≀ω β‰€πŸ™ 𝟘  𝟘  ≀ω ()
    ≀ω β‰€πŸ™ 𝟘  πŸ™  𝟘  ()
    ≀ω β‰€πŸ™ 𝟘  πŸ™  πŸ™  ()
    ≀ω β‰€πŸ™ 𝟘  πŸ™  β‰€πŸ™ ()
    ≀ω β‰€πŸ™ 𝟘  πŸ™  ≀ω ()
    ≀ω β‰€πŸ™ 𝟘  β‰€πŸ™ 𝟘  ()
    ≀ω β‰€πŸ™ 𝟘  β‰€πŸ™ πŸ™  ()
    ≀ω β‰€πŸ™ 𝟘  β‰€πŸ™ β‰€πŸ™ ()
    ≀ω β‰€πŸ™ 𝟘  β‰€πŸ™ ≀ω ()
    ≀ω β‰€πŸ™ 𝟘  ≀ω 𝟘  ()
    ≀ω β‰€πŸ™ 𝟘  ≀ω πŸ™  ()
    ≀ω β‰€πŸ™ 𝟘  ≀ω β‰€πŸ™ ()
    ≀ω β‰€πŸ™ 𝟘  ≀ω ≀ω ()
    ≀ω β‰€πŸ™ πŸ™  𝟘  𝟘  ()
    ≀ω β‰€πŸ™ πŸ™  𝟘  πŸ™  ()
    ≀ω β‰€πŸ™ πŸ™  𝟘  β‰€πŸ™ ()
    ≀ω β‰€πŸ™ πŸ™  𝟘  ≀ω ()
    ≀ω β‰€πŸ™ πŸ™  πŸ™  𝟘  ()
    ≀ω β‰€πŸ™ πŸ™  πŸ™  πŸ™  ()
    ≀ω β‰€πŸ™ πŸ™  πŸ™  β‰€πŸ™ ()
    ≀ω β‰€πŸ™ πŸ™  πŸ™  ≀ω ()
    ≀ω β‰€πŸ™ πŸ™  β‰€πŸ™ 𝟘  ()
    ≀ω β‰€πŸ™ πŸ™  β‰€πŸ™ πŸ™  ()
    ≀ω β‰€πŸ™ πŸ™  β‰€πŸ™ β‰€πŸ™ ()
    ≀ω β‰€πŸ™ πŸ™  β‰€πŸ™ ≀ω ()
    ≀ω β‰€πŸ™ πŸ™  ≀ω 𝟘  ()
    ≀ω β‰€πŸ™ πŸ™  ≀ω πŸ™  ()
    ≀ω β‰€πŸ™ πŸ™  ≀ω β‰€πŸ™ ()
    ≀ω β‰€πŸ™ πŸ™  ≀ω ≀ω ()
    ≀ω β‰€πŸ™ β‰€πŸ™ 𝟘  𝟘  ()
    ≀ω β‰€πŸ™ β‰€πŸ™ 𝟘  πŸ™  ()
    ≀ω β‰€πŸ™ β‰€πŸ™ 𝟘  β‰€πŸ™ ()
    ≀ω β‰€πŸ™ β‰€πŸ™ 𝟘  ≀ω ()
    ≀ω β‰€πŸ™ β‰€πŸ™ πŸ™  𝟘  ()
    ≀ω β‰€πŸ™ β‰€πŸ™ πŸ™  πŸ™  ()
    ≀ω β‰€πŸ™ β‰€πŸ™ πŸ™  β‰€πŸ™ ()
    ≀ω β‰€πŸ™ β‰€πŸ™ πŸ™  ≀ω ()
    ≀ω β‰€πŸ™ β‰€πŸ™ β‰€πŸ™ 𝟘  ()
    ≀ω β‰€πŸ™ β‰€πŸ™ β‰€πŸ™ πŸ™  ()
    ≀ω β‰€πŸ™ β‰€πŸ™ β‰€πŸ™ β‰€πŸ™ ()
    ≀ω β‰€πŸ™ β‰€πŸ™ β‰€πŸ™ ≀ω ()
    ≀ω β‰€πŸ™ β‰€πŸ™ ≀ω 𝟘  ()
    ≀ω β‰€πŸ™ β‰€πŸ™ ≀ω πŸ™  ()
    ≀ω β‰€πŸ™ β‰€πŸ™ ≀ω β‰€πŸ™ ()
    ≀ω β‰€πŸ™ β‰€πŸ™ ≀ω ≀ω ()
    ≀ω β‰€πŸ™ ≀ω 𝟘  𝟘  ()
    ≀ω β‰€πŸ™ ≀ω 𝟘  πŸ™  ()
    ≀ω β‰€πŸ™ ≀ω 𝟘  β‰€πŸ™ ()
    ≀ω β‰€πŸ™ ≀ω 𝟘  ≀ω ()
    ≀ω β‰€πŸ™ ≀ω πŸ™  𝟘  ()
    ≀ω β‰€πŸ™ ≀ω πŸ™  πŸ™  ()
    ≀ω β‰€πŸ™ ≀ω πŸ™  β‰€πŸ™ ()
    ≀ω β‰€πŸ™ ≀ω πŸ™  ≀ω ()
    ≀ω β‰€πŸ™ ≀ω β‰€πŸ™ 𝟘  ()
    ≀ω β‰€πŸ™ ≀ω β‰€πŸ™ πŸ™  ()
    ≀ω β‰€πŸ™ ≀ω β‰€πŸ™ β‰€πŸ™ ()
    ≀ω β‰€πŸ™ ≀ω β‰€πŸ™ ≀ω ()
    ≀ω β‰€πŸ™ ≀ω ≀ω 𝟘  ()
    ≀ω β‰€πŸ™ ≀ω ≀ω πŸ™  ()
    ≀ω β‰€πŸ™ ≀ω ≀ω β‰€πŸ™ ()
    ≀ω β‰€πŸ™ ≀ω ≀ω ≀ω ()
    _  ≀ω 𝟘  𝟘  πŸ™  ()
    _  ≀ω 𝟘  𝟘  β‰€πŸ™ ()
    _  ≀ω 𝟘  𝟘  ≀ω ()
    _  ≀ω 𝟘  πŸ™  𝟘  ()
    _  ≀ω 𝟘  πŸ™  πŸ™  ()
    _  ≀ω 𝟘  πŸ™  β‰€πŸ™ ()
    _  ≀ω 𝟘  πŸ™  ≀ω ()
    _  ≀ω 𝟘  β‰€πŸ™ 𝟘  ()
    _  ≀ω 𝟘  β‰€πŸ™ πŸ™  ()
    _  ≀ω 𝟘  β‰€πŸ™ β‰€πŸ™ ()
    _  ≀ω 𝟘  β‰€πŸ™ ≀ω ()
    _  ≀ω 𝟘  ≀ω 𝟘  ()
    _  ≀ω 𝟘  ≀ω πŸ™  ()
    _  ≀ω 𝟘  ≀ω β‰€πŸ™ ()
    _  ≀ω 𝟘  ≀ω ≀ω ()
    _  ≀ω πŸ™  𝟘  𝟘  ()
    _  ≀ω πŸ™  𝟘  πŸ™  ()
    _  ≀ω πŸ™  𝟘  β‰€πŸ™ ()
    _  ≀ω πŸ™  𝟘  ≀ω ()
    _  ≀ω πŸ™  πŸ™  𝟘  ()
    _  ≀ω πŸ™  πŸ™  πŸ™  ()
    _  ≀ω πŸ™  πŸ™  β‰€πŸ™ ()
    _  ≀ω πŸ™  πŸ™  ≀ω ()
    _  ≀ω πŸ™  β‰€πŸ™ 𝟘  ()
    _  ≀ω πŸ™  β‰€πŸ™ πŸ™  ()
    _  ≀ω πŸ™  β‰€πŸ™ β‰€πŸ™ ()
    _  ≀ω πŸ™  β‰€πŸ™ ≀ω ()
    _  ≀ω πŸ™  ≀ω 𝟘  ()
    _  ≀ω πŸ™  ≀ω πŸ™  ()
    _  ≀ω πŸ™  ≀ω β‰€πŸ™ ()
    _  ≀ω πŸ™  ≀ω ≀ω ()
    _  ≀ω β‰€πŸ™ 𝟘  𝟘  ()
    _  ≀ω β‰€πŸ™ 𝟘  πŸ™  ()
    _  ≀ω β‰€πŸ™ 𝟘  β‰€πŸ™ ()
    _  ≀ω β‰€πŸ™ 𝟘  ≀ω ()
    _  ≀ω β‰€πŸ™ πŸ™  𝟘  ()
    _  ≀ω β‰€πŸ™ πŸ™  πŸ™  ()
    _  ≀ω β‰€πŸ™ πŸ™  β‰€πŸ™ ()
    _  ≀ω β‰€πŸ™ πŸ™  ≀ω ()
    _  ≀ω β‰€πŸ™ β‰€πŸ™ 𝟘  ()
    _  ≀ω β‰€πŸ™ β‰€πŸ™ πŸ™  ()
    _  ≀ω β‰€πŸ™ β‰€πŸ™ β‰€πŸ™ ()
    _  ≀ω β‰€πŸ™ β‰€πŸ™ ≀ω ()
    _  ≀ω β‰€πŸ™ ≀ω 𝟘  ()
    _  ≀ω β‰€πŸ™ ≀ω πŸ™  ()
    _  ≀ω β‰€πŸ™ ≀ω β‰€πŸ™ ()
    _  ≀ω β‰€πŸ™ ≀ω ≀ω ()
    _  ≀ω ≀ω 𝟘  𝟘  ()
    _  ≀ω ≀ω 𝟘  πŸ™  ()
    _  ≀ω ≀ω 𝟘  β‰€πŸ™ ()
    _  ≀ω ≀ω 𝟘  ≀ω ()
    _  ≀ω ≀ω πŸ™  𝟘  ()
    _  ≀ω ≀ω πŸ™  πŸ™  ()
    _  ≀ω ≀ω πŸ™  β‰€πŸ™ ()
    _  ≀ω ≀ω πŸ™  ≀ω ()
    _  ≀ω ≀ω β‰€πŸ™ 𝟘  ()
    _  ≀ω ≀ω β‰€πŸ™ πŸ™  ()
    _  ≀ω ≀ω β‰€πŸ™ β‰€πŸ™ ()
    _  ≀ω ≀ω β‰€πŸ™ ≀ω ()
    _  ≀ω ≀ω ≀ω 𝟘  ()
    _  ≀ω ≀ω ≀ω πŸ™  ()
    _  ≀ω ≀ω ≀ω β‰€πŸ™ ()
    _  ≀ω ≀ω ≀ω ≀ω ()

  lemmaβ‚‚ : βˆ€ p r β†’ nr p r 𝟘 𝟘 𝟘 ≑ 𝟘
  lemmaβ‚‚ = Ξ» where
    𝟘  𝟘  β†’ refl
    𝟘  πŸ™  β†’ refl
    𝟘  β‰€πŸ™ β†’ refl
    𝟘  ≀ω β†’ refl
    πŸ™  𝟘  β†’ refl
    πŸ™  πŸ™  β†’ refl
    πŸ™  β‰€πŸ™ β†’ refl
    πŸ™  ≀ω β†’ refl
    β‰€πŸ™ 𝟘  β†’ refl
    β‰€πŸ™ πŸ™  β†’ refl
    β‰€πŸ™ β‰€πŸ™ β†’ refl
    β‰€πŸ™ ≀ω β†’ refl
    ≀ω 𝟘  β†’ refl
    ≀ω πŸ™  β†’ refl
    ≀ω β‰€πŸ™ β†’ refl
    ≀ω ≀ω β†’ refl

-- An nr function can be defined for
-- linear-or-affine-semiring-with-meet.

linear-or-affine-has-nr : Has-nr linear-or-affine-semiring-with-meet
linear-or-affine-has-nr = record
  { nr          = nr
  ; nr-monotone = Ξ» {p = p} {r = r} β†’ nr-monotone p r
  ; nr-Β·        = Ξ» {p = _} {r = r} β†’ nr-Β· r
  ; nr-+        = Ξ» {p = _} {r = r} β†’ nr-+ r
  ; nr-positive = Ξ» {p = _} {r = r} β†’ nr-𝟘 r .proj₁
  ; nr-zero     = Ξ» {n = _} {p = _} {r = r} β†’ nr-zero r _ _ _ _
  ; nr-suc      = Ξ» {p = _} {r = r} β†’ nr-suc r _ _ _ _
  }
  where
  open Semiring-with-meet linear-or-affine-semiring-with-meet
    hiding (𝟘; πŸ™; _+_; _Β·_; _∧_; _≀_)
  open Addition linear-or-affine-semiring-with-meet
  open Meet linear-or-affine-semiring-with-meet
  open Multiplication linear-or-affine-semiring-with-meet
  open PartialOrder linear-or-affine-semiring-with-meet

  nr-monotone :
    βˆ€ p r β†’
    z₁ ≀ zβ‚‚ β†’ s₁ ≀ sβ‚‚ β†’ n₁ ≀ nβ‚‚ β†’
    nr p r z₁ s₁ n₁ ≀ nr p r zβ‚‚ sβ‚‚ nβ‚‚
  nr-monotone = Ξ» where
    p 𝟘 z₁≀zβ‚‚ s₁≀sβ‚‚ n₁≀nβ‚‚ β†’
      ∧-monotone (+-monotone (Β·-monotoneΚ³ {r = πŸ™ ∧ p} n₁≀nβ‚‚) s₁≀sβ‚‚)
        (+-monotone n₁≀nβ‚‚ z₁≀zβ‚‚)
    p πŸ™ z₁≀zβ‚‚ s₁≀sβ‚‚ n₁≀nβ‚‚ β†’
      +-monotone (Β·-monotoneΚ³ {r = πŸ™ + p} n₁≀nβ‚‚)
        (+-monotone (Β·-monotoneΚ³ {r = ≀ω} s₁≀sβ‚‚) z₁≀zβ‚‚)
    p β‰€πŸ™ z₁≀zβ‚‚ s₁≀sβ‚‚ n₁≀nβ‚‚ β†’
      +-monotone (Β·-monotoneΚ³ {r = β‰€πŸ™ + p} n₁≀nβ‚‚)
        (+-monotone (Β·-monotoneΚ³ {r = ≀ω} s₁≀sβ‚‚)
           (Β·-monotoneΚ³ {r = β‰€πŸ™} z₁≀zβ‚‚))
    _ ≀ω z₁≀zβ‚‚ s₁≀sβ‚‚ n₁≀nβ‚‚ β†’
      Β·-monotoneΚ³ {r = ≀ω} (+-monotone n₁≀nβ‚‚ (+-monotone s₁≀sβ‚‚ z₁≀zβ‚‚))

  nr-Β· : βˆ€ r β†’ nr p r z s n Β· q ≀ nr p r (z Β· q) (s Β· q) (n Β· q)
  nr-Β· {p = p} {z = z} {s = s} {n = n} {q = q} = Ξ» where
      𝟘 β†’ begin
        (((πŸ™ ∧ p) Β· n + s) ∧ (n + z)) Β· q              β‰‘βŸ¨ Β·-distribΚ³-∧ _ ((πŸ™ ∧ p) Β· _ + _) _ ⟩
        ((πŸ™ ∧ p) Β· n + s) Β· q ∧ (n + z) Β· q            β‰‘βŸ¨ ∧-cong (Β·-distribΚ³-+ _ ((πŸ™ ∧ p) Β· _) _)
                                                            (·-distribʳ-+ _ n _) ⟩
        (((πŸ™ ∧ p) Β· n) Β· q + s Β· q) ∧ (n Β· q + z Β· q)  β‰‘βŸ¨ ∧-congΚ³ (+-congΚ³ (Β·-assoc (πŸ™ ∧ p) _ _)) ⟩
        ((πŸ™ ∧ p) Β· (n Β· q) + s Β· q) ∧ (n Β· q + z Β· q)  ∎
      πŸ™ β†’ begin
        ((πŸ™ + p) Β· n + ≀ω Β· s + z) Β· q            β‰‘βŸ¨ Β·-distribΚ³-+ _ ((πŸ™ + p) Β· _) _ ⟩
        ((πŸ™ + p) Β· n) Β· q + (≀ω Β· s + z) Β· q      β‰‘βŸ¨ +-congΛ‘ {x = ((πŸ™ + p) Β· _) Β· _}
                                                       (Β·-distribΚ³-+ _ (≀ω Β· s) _) ⟩
        ((πŸ™ + p) Β· n) Β· q + (≀ω Β· s) Β· q + z Β· q  β‰‘βŸ¨ +-cong (Β·-assoc (πŸ™ + p) _ _)
                                                       (+-congΚ³ (Β·-assoc ≀ω s _)) ⟩
        (πŸ™ + p) Β· (n Β· q) + ≀ω Β· (s Β· q) + z Β· q  ∎
      β‰€πŸ™ β†’ begin
        ((β‰€πŸ™ + p) Β· n + ≀ω Β· s + β‰€πŸ™ Β· z) Β· q              β‰‘βŸ¨ Β·-distribΚ³-+ _ ((β‰€πŸ™ + p) Β· _) _ ⟩
        ((β‰€πŸ™ + p) Β· n) Β· q + (≀ω Β· s + β‰€πŸ™ Β· z) Β· q        β‰‘βŸ¨ +-congΛ‘ {x = ((β‰€πŸ™ + p) Β· _) Β· _}
                                                               (Β·-distribΚ³-+ _ (≀ω Β· s) _) ⟩
        ((β‰€πŸ™ + p) Β· n) Β· q + (≀ω Β· s) Β· q + (β‰€πŸ™ Β· z) Β· q  β‰‘βŸ¨ +-cong (Β·-assoc (β‰€πŸ™ + p) _ _)
                                                               (+-cong (Β·-assoc ≀ω s _) (Β·-assoc β‰€πŸ™ z _)) ⟩
        (β‰€πŸ™ + p) Β· (n Β· q) + ≀ω Β· (s Β· q) + β‰€πŸ™ Β· (z Β· q)  ∎
      ≀ω β†’ begin
        (≀ω Β· (n + s + z)) Β· q        β‰‘βŸ¨ Β·-assoc ≀ω (n + _) _ ⟩
        ≀ω Β· ((n + s + z) Β· q)        β‰‘βŸ¨ Β·-congΛ‘ {x = ≀ω} (Β·-distribΚ³-+ _ n _) ⟩
        ≀ω Β· (n Β· q + (s + z) Β· q)    β‰‘βŸ¨ Β·-congΛ‘ {x = ≀ω} (+-congΛ‘ {x = n Β· _} (Β·-distribΚ³-+ _ s _)) ⟩
        ≀ω Β· (n Β· q + s Β· q + z Β· q)  ∎
    where
    open Tools.Reasoning.PartialOrder ≀-poset

  nr-+ :
    βˆ€ r β†’
    nr p r z₁ s₁ n₁ + nr p r zβ‚‚ sβ‚‚ nβ‚‚ ≀
    nr p r (z₁ + zβ‚‚) (s₁ + sβ‚‚) (n₁ + nβ‚‚)
  nr-+
    {p = p}
    {z₁ = z₁} {s₁ = s₁} {n₁ = n₁}
    {zβ‚‚ = zβ‚‚} {sβ‚‚ = sβ‚‚} {nβ‚‚ = nβ‚‚} = Ξ» where
      𝟘 β†’ begin
        (((πŸ™ ∧ p) Β· n₁ + s₁) ∧ (n₁ + z₁)) +
        (((πŸ™ ∧ p) Β· nβ‚‚ + sβ‚‚) ∧ (nβ‚‚ + zβ‚‚))                            β‰€βŸ¨ +-sub-interchangeable-∧ ((πŸ™ ∧ p) Β· _ + _) _ _ _ ⟩

        (((πŸ™ ∧ p) Β· n₁ + s₁) + ((πŸ™ ∧ p) Β· nβ‚‚ + sβ‚‚)) ∧
        ((n₁ + z₁) + (nβ‚‚ + zβ‚‚))                                      β‰‘βŸ¨ ∧-cong (+-sub-interchangeable-+ ((πŸ™ ∧ p) Β· _) _ _ _)
                                                                          (+-sub-interchangeable-+ n₁ _ _ _) ⟩
        (((πŸ™ ∧ p) Β· n₁ + (πŸ™ ∧ p) Β· nβ‚‚) + (s₁ + sβ‚‚)) ∧
        ((n₁ + nβ‚‚) + (z₁ + zβ‚‚))                                      β‰‘Λ˜βŸ¨ ∧-congΚ³ (+-congΚ³ (Β·-distribΛ‘-+ (πŸ™ ∧ p) _ _)) ⟩

        ((πŸ™ ∧ p) Β· (n₁ + nβ‚‚) + (s₁ + sβ‚‚)) ∧ ((n₁ + nβ‚‚) + (z₁ + zβ‚‚))  ∎
      πŸ™ β†’ begin
        ((πŸ™ + p) Β· n₁ + ≀ω Β· s₁ + z₁) + ((πŸ™ + p) Β· nβ‚‚ + ≀ω Β· sβ‚‚ + zβ‚‚)    β‰‘βŸ¨ +-sub-interchangeable-+ ((πŸ™ + p) Β· _) _ _ _ ⟩
        ((πŸ™ + p) Β· n₁ + (πŸ™ + p) Β· nβ‚‚) + (≀ω Β· s₁ + z₁) + (≀ω Β· sβ‚‚ + zβ‚‚)  β‰‘βŸ¨ +-cong (sym (Β·-distribΛ‘-+ (πŸ™ + p) _ _))
                                                                              (+-sub-interchangeable-+ (≀ω Β· s₁) _ _ _) ⟩
        (πŸ™ + p) Β· (n₁ + nβ‚‚) + (≀ω Β· s₁ + ≀ω Β· sβ‚‚) + (z₁ + zβ‚‚)            β‰‘Λ˜βŸ¨ +-congΛ‘ {x = (πŸ™ + p) Β· _}
                                                                               (+-congΚ³ (Β·-distribΛ‘-+ ≀ω s₁ _)) ⟩
        (πŸ™ + p) Β· (n₁ + nβ‚‚) + ≀ω Β· (s₁ + sβ‚‚) + (z₁ + zβ‚‚)                 ∎
      β‰€πŸ™ β†’ begin
        ((β‰€πŸ™ + p) Β· n₁ + ≀ω Β· s₁ + β‰€πŸ™ Β· z₁) +
        ((β‰€πŸ™ + p) Β· nβ‚‚ + ≀ω Β· sβ‚‚ + β‰€πŸ™ Β· zβ‚‚)                               β‰‘βŸ¨ +-sub-interchangeable-+ ((β‰€πŸ™ + p) Β· _) _ _ _ ⟩

        ((β‰€πŸ™ + p) Β· n₁ + (β‰€πŸ™ + p) Β· nβ‚‚) +
        (≀ω Β· s₁ + β‰€πŸ™ Β· z₁) + (≀ω Β· sβ‚‚ + β‰€πŸ™ Β· zβ‚‚)                         β‰‘βŸ¨ +-cong (sym (Β·-distribΛ‘-+ (β‰€πŸ™ + p) _ _))
                                                                               (+-sub-interchangeable-+ (≀ω Β· s₁) _ _ _) ⟩

        (β‰€πŸ™ + p) Β· (n₁ + nβ‚‚) + (≀ω Β· s₁ + ≀ω Β· sβ‚‚) + (β‰€πŸ™ Β· z₁ + β‰€πŸ™ Β· zβ‚‚)  β‰‘Λ˜βŸ¨ +-congΛ‘ {x = (β‰€πŸ™ + p) Β· _}
                                                                                (+-cong (Β·-distribΛ‘-+ ≀ω s₁ _)
                                                                                   (Β·-distribΛ‘-+ β‰€πŸ™ z₁ _)) ⟩
        (β‰€πŸ™ + p) Β· (n₁ + nβ‚‚) + ≀ω Β· (s₁ + sβ‚‚) + β‰€πŸ™ Β· (z₁ + zβ‚‚)            ∎
      ≀ω β†’ begin
        ≀ω Β· (n₁ + s₁ + z₁) + ≀ω Β· (nβ‚‚ + sβ‚‚ + zβ‚‚)  β‰‘Λ˜βŸ¨ Β·-distribΛ‘-+ ≀ω (n₁ + _) _ ⟩
        ≀ω Β· ((n₁ + s₁ + z₁) + (nβ‚‚ + sβ‚‚ + zβ‚‚))     β‰‘βŸ¨ Β·-congΛ‘ {x = ≀ω} lemma ⟩
        ≀ω Β· ((n₁ + nβ‚‚) + (s₁ + sβ‚‚) + (z₁ + zβ‚‚))   ∎
    where
    lemma =
      (n₁ + s₁ + z₁) + (nβ‚‚ + sβ‚‚ + zβ‚‚)    β‰‘βŸ¨ +-sub-interchangeable-+ n₁ _ _ _ ⟩
      (n₁ + nβ‚‚) + (s₁ + z₁) + (sβ‚‚ + zβ‚‚)  β‰‘βŸ¨ +-congΛ‘ {x = n₁ + _}
                                              (+-sub-interchangeable-+ s₁ _ _ _) ⟩
      (n₁ + nβ‚‚) + (s₁ + sβ‚‚) + (z₁ + zβ‚‚)  ∎
      where
      open Tools.Reasoning.PropositionalEquality

    open Tools.Reasoning.PartialOrder ≀-poset

  nr-zero : βˆ€ r p z s n β†’ n ≀ 𝟘 β†’ nr p r z s n ≀ z
  nr-zero = Ξ» where
    𝟘  𝟘  𝟘  𝟘  𝟘  refl β†’ refl
    𝟘  𝟘  𝟘  𝟘  β‰€πŸ™ refl β†’ refl
    𝟘  𝟘  𝟘  𝟘  ≀ω refl β†’ refl
    𝟘  𝟘  𝟘  πŸ™  𝟘  refl β†’ refl
    𝟘  𝟘  𝟘  πŸ™  β‰€πŸ™ refl β†’ refl
    𝟘  𝟘  𝟘  πŸ™  ≀ω refl β†’ refl
    𝟘  𝟘  𝟘  β‰€πŸ™ 𝟘  refl β†’ refl
    𝟘  𝟘  𝟘  β‰€πŸ™ β‰€πŸ™ refl β†’ refl
    𝟘  𝟘  𝟘  β‰€πŸ™ ≀ω refl β†’ refl
    𝟘  𝟘  𝟘  ≀ω 𝟘  refl β†’ refl
    𝟘  𝟘  𝟘  ≀ω β‰€πŸ™ refl β†’ refl
    𝟘  𝟘  𝟘  ≀ω ≀ω refl β†’ refl
    𝟘  𝟘  πŸ™  𝟘  𝟘  refl β†’ refl
    𝟘  𝟘  πŸ™  𝟘  β‰€πŸ™ refl β†’ refl
    𝟘  𝟘  πŸ™  𝟘  ≀ω refl β†’ refl
    𝟘  𝟘  πŸ™  πŸ™  𝟘  refl β†’ refl
    𝟘  𝟘  πŸ™  πŸ™  β‰€πŸ™ refl β†’ refl
    𝟘  𝟘  πŸ™  πŸ™  ≀ω refl β†’ refl
    𝟘  𝟘  πŸ™  β‰€πŸ™ 𝟘  refl β†’ refl
    𝟘  𝟘  πŸ™  β‰€πŸ™ β‰€πŸ™ refl β†’ refl
    𝟘  𝟘  πŸ™  β‰€πŸ™ ≀ω refl β†’ refl
    𝟘  𝟘  πŸ™  ≀ω 𝟘  refl β†’ refl
    𝟘  𝟘  πŸ™  ≀ω β‰€πŸ™ refl β†’ refl
    𝟘  𝟘  πŸ™  ≀ω ≀ω refl β†’ refl
    𝟘  𝟘  β‰€πŸ™ 𝟘  𝟘  refl β†’ refl
    𝟘  𝟘  β‰€πŸ™ 𝟘  β‰€πŸ™ refl β†’ refl
    𝟘  𝟘  β‰€πŸ™ 𝟘  ≀ω refl β†’ refl
    𝟘  𝟘  β‰€πŸ™ πŸ™  𝟘  refl β†’ refl
    𝟘  𝟘  β‰€πŸ™ πŸ™  β‰€πŸ™ refl β†’ refl
    𝟘  𝟘  β‰€πŸ™ πŸ™  ≀ω refl β†’ refl
    𝟘  𝟘  β‰€πŸ™ β‰€πŸ™ 𝟘  refl β†’ refl
    𝟘  𝟘  β‰€πŸ™ β‰€πŸ™ β‰€πŸ™ refl β†’ refl
    𝟘  𝟘  β‰€πŸ™ β‰€πŸ™ ≀ω refl β†’ refl
    𝟘  𝟘  β‰€πŸ™ ≀ω 𝟘  refl β†’ refl
    𝟘  𝟘  β‰€πŸ™ ≀ω β‰€πŸ™ refl β†’ refl
    𝟘  𝟘  β‰€πŸ™ ≀ω ≀ω refl β†’ refl
    𝟘  𝟘  ≀ω 𝟘  𝟘  refl β†’ refl
    𝟘  𝟘  ≀ω 𝟘  β‰€πŸ™ refl β†’ refl
    𝟘  𝟘  ≀ω 𝟘  ≀ω refl β†’ refl
    𝟘  𝟘  ≀ω πŸ™  𝟘  refl β†’ refl
    𝟘  𝟘  ≀ω πŸ™  β‰€πŸ™ refl β†’ refl
    𝟘  𝟘  ≀ω πŸ™  ≀ω refl β†’ refl
    𝟘  𝟘  ≀ω β‰€πŸ™ 𝟘  refl β†’ refl
    𝟘  𝟘  ≀ω β‰€πŸ™ β‰€πŸ™ refl β†’ refl
    𝟘  𝟘  ≀ω β‰€πŸ™ ≀ω refl β†’ refl
    𝟘  𝟘  ≀ω ≀ω 𝟘  refl β†’ refl
    𝟘  𝟘  ≀ω ≀ω β‰€πŸ™ refl β†’ refl
    𝟘  𝟘  ≀ω ≀ω ≀ω refl β†’ refl
    𝟘  πŸ™  𝟘  𝟘  𝟘  refl β†’ refl
    𝟘  πŸ™  𝟘  𝟘  β‰€πŸ™ refl β†’ refl
    𝟘  πŸ™  𝟘  𝟘  ≀ω refl β†’ refl
    𝟘  πŸ™  𝟘  πŸ™  𝟘  refl β†’ refl
    𝟘  πŸ™  𝟘  πŸ™  β‰€πŸ™ refl β†’ refl
    𝟘  πŸ™  𝟘  πŸ™  ≀ω refl β†’ refl
    𝟘  πŸ™  𝟘  β‰€πŸ™ 𝟘  refl β†’ refl
    𝟘  πŸ™  𝟘  β‰€πŸ™ β‰€πŸ™ refl β†’ refl
    𝟘  πŸ™  𝟘  β‰€πŸ™ ≀ω refl β†’ refl
    𝟘  πŸ™  𝟘  ≀ω 𝟘  refl β†’ refl
    𝟘  πŸ™  𝟘  ≀ω β‰€πŸ™ refl β†’ refl
    𝟘  πŸ™  𝟘  ≀ω ≀ω refl β†’ refl
    𝟘  πŸ™  πŸ™  𝟘  𝟘  refl β†’ refl
    𝟘  πŸ™  πŸ™  𝟘  β‰€πŸ™ refl β†’ refl
    𝟘  πŸ™  πŸ™  𝟘  ≀ω refl β†’ refl
    𝟘  πŸ™  πŸ™  πŸ™  𝟘  refl β†’ refl
    𝟘  πŸ™  πŸ™  πŸ™  β‰€πŸ™ refl β†’ refl
    𝟘  πŸ™  πŸ™  πŸ™  ≀ω refl β†’ refl
    𝟘  πŸ™  πŸ™  β‰€πŸ™ 𝟘  refl β†’ refl
    𝟘  πŸ™  πŸ™  β‰€πŸ™ β‰€πŸ™ refl β†’ refl
    𝟘  πŸ™  πŸ™  β‰€πŸ™ ≀ω refl β†’ refl
    𝟘  πŸ™  πŸ™  ≀ω 𝟘  refl β†’ refl
    𝟘  πŸ™  πŸ™  ≀ω β‰€πŸ™ refl β†’ refl
    𝟘  πŸ™  πŸ™  ≀ω ≀ω refl β†’ refl
    𝟘  πŸ™  β‰€πŸ™ 𝟘  𝟘  refl β†’ refl
    𝟘  πŸ™  β‰€πŸ™ 𝟘  β‰€πŸ™ refl β†’ refl
    𝟘  πŸ™  β‰€πŸ™ 𝟘  ≀ω refl β†’ refl
    𝟘  πŸ™  β‰€πŸ™ πŸ™  𝟘  refl β†’ refl
    𝟘  πŸ™  β‰€πŸ™ πŸ™  β‰€πŸ™ refl β†’ refl
    𝟘  πŸ™  β‰€πŸ™ πŸ™  ≀ω refl β†’ refl
    𝟘  πŸ™  β‰€πŸ™ β‰€πŸ™ 𝟘  refl β†’ refl
    𝟘  πŸ™  β‰€πŸ™ β‰€πŸ™ β‰€πŸ™ refl β†’ refl
    𝟘  πŸ™  β‰€πŸ™ β‰€πŸ™ ≀ω refl β†’ refl
    𝟘  πŸ™  β‰€πŸ™ ≀ω 𝟘  refl β†’ refl
    𝟘  πŸ™  β‰€πŸ™ ≀ω β‰€πŸ™ refl β†’ refl
    𝟘  πŸ™  β‰€πŸ™ ≀ω ≀ω refl β†’ refl
    𝟘  πŸ™  ≀ω 𝟘  𝟘  refl β†’ refl
    𝟘  πŸ™  ≀ω 𝟘  β‰€πŸ™ refl β†’ refl
    𝟘  πŸ™  ≀ω 𝟘  ≀ω refl β†’ refl
    𝟘  πŸ™  ≀ω πŸ™  𝟘  refl β†’ refl
    𝟘  πŸ™  ≀ω πŸ™  β‰€πŸ™ refl β†’ refl
    𝟘  πŸ™  ≀ω πŸ™  ≀ω refl β†’ refl
    𝟘  πŸ™  ≀ω β‰€πŸ™ 𝟘  refl β†’ refl
    𝟘  πŸ™  ≀ω β‰€πŸ™ β‰€πŸ™ refl β†’ refl
    𝟘  πŸ™  ≀ω β‰€πŸ™ ≀ω refl β†’ refl
    𝟘  πŸ™  ≀ω ≀ω 𝟘  refl β†’ refl
    𝟘  πŸ™  ≀ω ≀ω β‰€πŸ™ refl β†’ refl
    𝟘  πŸ™  ≀ω ≀ω ≀ω refl β†’ refl
    𝟘  β‰€πŸ™ 𝟘  𝟘  𝟘  refl β†’ refl
    𝟘  β‰€πŸ™ 𝟘  𝟘  β‰€πŸ™ refl β†’ refl
    𝟘  β‰€πŸ™ 𝟘  𝟘  ≀ω refl β†’ refl
    𝟘  β‰€πŸ™ 𝟘  πŸ™  𝟘  refl β†’ refl
    𝟘  β‰€πŸ™ 𝟘  πŸ™  β‰€πŸ™ refl β†’ refl
    𝟘  β‰€πŸ™ 𝟘  πŸ™  ≀ω refl β†’ refl
    𝟘  β‰€πŸ™ 𝟘  β‰€πŸ™ 𝟘  refl β†’ refl
    𝟘  β‰€πŸ™ 𝟘  β‰€πŸ™ β‰€πŸ™ refl β†’ refl
    𝟘  β‰€πŸ™ 𝟘  β‰€πŸ™ ≀ω refl β†’ refl
    𝟘  β‰€πŸ™ 𝟘  ≀ω 𝟘  refl β†’ refl
    𝟘  β‰€πŸ™ 𝟘  ≀ω β‰€πŸ™ refl β†’ refl
    𝟘  β‰€πŸ™ 𝟘  ≀ω ≀ω refl β†’ refl
    𝟘  β‰€πŸ™ πŸ™  𝟘  𝟘  refl β†’ refl
    𝟘  β‰€πŸ™ πŸ™  𝟘  β‰€πŸ™ refl β†’ refl
    𝟘  β‰€πŸ™ πŸ™  𝟘  ≀ω refl β†’ refl
    𝟘  β‰€πŸ™ πŸ™  πŸ™  𝟘  refl β†’ refl
    𝟘  β‰€πŸ™ πŸ™  πŸ™  β‰€πŸ™ refl β†’ refl
    𝟘  β‰€πŸ™ πŸ™  πŸ™  ≀ω refl β†’ refl
    𝟘  β‰€πŸ™ πŸ™  β‰€πŸ™ 𝟘  refl β†’ refl
    𝟘  β‰€πŸ™ πŸ™  β‰€πŸ™ β‰€πŸ™ refl β†’ refl
    𝟘  β‰€πŸ™ πŸ™  β‰€πŸ™ ≀ω refl β†’ refl
    𝟘  β‰€πŸ™ πŸ™  ≀ω 𝟘  refl β†’ refl
    𝟘  β‰€πŸ™ πŸ™  ≀ω β‰€πŸ™ refl β†’ refl
    𝟘  β‰€πŸ™ πŸ™  ≀ω ≀ω refl β†’ refl
    𝟘  β‰€πŸ™ β‰€πŸ™ 𝟘  𝟘  refl β†’ refl
    𝟘  β‰€πŸ™ β‰€πŸ™ 𝟘  β‰€πŸ™ refl β†’ refl
    𝟘  β‰€πŸ™ β‰€πŸ™ 𝟘  ≀ω refl β†’ refl
    𝟘  β‰€πŸ™ β‰€πŸ™ πŸ™  𝟘  refl β†’ refl
    𝟘  β‰€πŸ™ β‰€πŸ™ πŸ™  β‰€πŸ™ refl β†’ refl
    𝟘  β‰€πŸ™ β‰€πŸ™ πŸ™  ≀ω refl β†’ refl
    𝟘  β‰€πŸ™ β‰€πŸ™ β‰€πŸ™ 𝟘  refl β†’ refl
    𝟘  β‰€πŸ™ β‰€πŸ™ β‰€πŸ™ β‰€πŸ™ refl β†’ refl
    𝟘  β‰€πŸ™ β‰€πŸ™ β‰€πŸ™ ≀ω refl β†’ refl
    𝟘  β‰€πŸ™ β‰€πŸ™ ≀ω 𝟘  refl β†’ refl
    𝟘  β‰€πŸ™ β‰€πŸ™ ≀ω β‰€πŸ™ refl β†’ refl
    𝟘  β‰€πŸ™ β‰€πŸ™ ≀ω ≀ω refl β†’ refl
    𝟘  β‰€πŸ™ ≀ω 𝟘  𝟘  refl β†’ refl
    𝟘  β‰€πŸ™ ≀ω 𝟘  β‰€πŸ™ refl β†’ refl
    𝟘  β‰€πŸ™ ≀ω 𝟘  ≀ω refl β†’ refl
    𝟘  β‰€πŸ™ ≀ω πŸ™  𝟘  refl β†’ refl
    𝟘  β‰€πŸ™ ≀ω πŸ™  β‰€πŸ™ refl β†’ refl
    𝟘  β‰€πŸ™ ≀ω πŸ™  ≀ω refl β†’ refl
    𝟘  β‰€πŸ™ ≀ω β‰€πŸ™ 𝟘  refl β†’ refl
    𝟘  β‰€πŸ™ ≀ω β‰€πŸ™ β‰€πŸ™ refl β†’ refl
    𝟘  β‰€πŸ™ ≀ω β‰€πŸ™ ≀ω refl β†’ refl
    𝟘  β‰€πŸ™ ≀ω ≀ω 𝟘  refl β†’ refl
    𝟘  β‰€πŸ™ ≀ω ≀ω β‰€πŸ™ refl β†’ refl
    𝟘  β‰€πŸ™ ≀ω ≀ω ≀ω refl β†’ refl
    𝟘  ≀ω 𝟘  𝟘  𝟘  refl β†’ refl
    𝟘  ≀ω 𝟘  𝟘  β‰€πŸ™ refl β†’ refl
    𝟘  ≀ω 𝟘  𝟘  ≀ω refl β†’ refl
    𝟘  ≀ω 𝟘  πŸ™  𝟘  refl β†’ refl
    𝟘  ≀ω 𝟘  πŸ™  β‰€πŸ™ refl β†’ refl
    𝟘  ≀ω 𝟘  πŸ™  ≀ω refl β†’ refl
    𝟘  ≀ω 𝟘  β‰€πŸ™ 𝟘  refl β†’ refl
    𝟘  ≀ω 𝟘  β‰€πŸ™ β‰€πŸ™ refl β†’ refl
    𝟘  ≀ω 𝟘  β‰€πŸ™ ≀ω refl β†’ refl
    𝟘  ≀ω 𝟘  ≀ω 𝟘  refl β†’ refl
    𝟘  ≀ω 𝟘  ≀ω β‰€πŸ™ refl β†’ refl
    𝟘  ≀ω 𝟘  ≀ω ≀ω refl β†’ refl
    𝟘  ≀ω πŸ™  𝟘  𝟘  refl β†’ refl
    𝟘  ≀ω πŸ™  𝟘  β‰€πŸ™ refl β†’ refl
    𝟘  ≀ω πŸ™  𝟘  ≀ω refl β†’ refl
    𝟘  ≀ω πŸ™  πŸ™  𝟘  refl β†’ refl
    𝟘  ≀ω πŸ™  πŸ™  β‰€πŸ™ refl β†’ refl
    𝟘  ≀ω πŸ™  πŸ™  ≀ω refl β†’ refl
    𝟘  ≀ω πŸ™  β‰€πŸ™ 𝟘  refl β†’ refl
    𝟘  ≀ω πŸ™  β‰€πŸ™ β‰€πŸ™ refl β†’ refl
    𝟘  ≀ω πŸ™  β‰€πŸ™ ≀ω refl β†’ refl
    𝟘  ≀ω πŸ™  ≀ω 𝟘  refl β†’ refl
    𝟘  ≀ω πŸ™  ≀ω β‰€πŸ™ refl β†’ refl
    𝟘  ≀ω πŸ™  ≀ω ≀ω refl β†’ refl
    𝟘  ≀ω β‰€πŸ™ 𝟘  𝟘  refl β†’ refl
    𝟘  ≀ω β‰€πŸ™ 𝟘  β‰€πŸ™ refl β†’ refl
    𝟘  ≀ω β‰€πŸ™ 𝟘  ≀ω refl β†’ refl
    𝟘  ≀ω β‰€πŸ™ πŸ™  𝟘  refl β†’ refl
    𝟘  ≀ω β‰€πŸ™ πŸ™  β‰€πŸ™ refl β†’ refl
    𝟘  ≀ω β‰€πŸ™ πŸ™  ≀ω refl β†’ refl
    𝟘  ≀ω β‰€πŸ™ β‰€πŸ™ 𝟘  refl β†’ refl
    𝟘  ≀ω β‰€πŸ™ β‰€πŸ™ β‰€πŸ™ refl β†’ refl
    𝟘  ≀ω β‰€πŸ™ β‰€πŸ™ ≀ω refl β†’ refl
    𝟘  ≀ω β‰€πŸ™ ≀ω 𝟘  refl β†’ refl
    𝟘  ≀ω β‰€πŸ™ ≀ω β‰€πŸ™ refl β†’ refl
    𝟘  ≀ω β‰€πŸ™ ≀ω ≀ω refl β†’ refl
    𝟘  ≀ω ≀ω 𝟘  𝟘  refl β†’ refl
    𝟘  ≀ω ≀ω 𝟘  β‰€πŸ™ refl β†’ refl
    𝟘  ≀ω ≀ω 𝟘  ≀ω refl β†’ refl
    𝟘  ≀ω ≀ω πŸ™  𝟘  refl β†’ refl
    𝟘  ≀ω ≀ω πŸ™  β‰€πŸ™ refl β†’ refl
    𝟘  ≀ω ≀ω πŸ™  ≀ω refl β†’ refl
    𝟘  ≀ω ≀ω β‰€πŸ™ 𝟘  refl β†’ refl
    𝟘  ≀ω ≀ω β‰€πŸ™ β‰€πŸ™ refl β†’ refl
    𝟘  ≀ω ≀ω β‰€πŸ™ ≀ω refl β†’ refl
    𝟘  ≀ω ≀ω ≀ω 𝟘  refl β†’ refl
    𝟘  ≀ω ≀ω ≀ω β‰€πŸ™ refl β†’ refl
    𝟘  ≀ω ≀ω ≀ω ≀ω refl β†’ refl
    πŸ™  𝟘  𝟘  𝟘  𝟘  refl β†’ refl
    πŸ™  𝟘  𝟘  𝟘  β‰€πŸ™ refl β†’ refl
    πŸ™  𝟘  𝟘  𝟘  ≀ω refl β†’ refl
    πŸ™  𝟘  𝟘  πŸ™  𝟘  refl β†’ refl
    πŸ™  𝟘  𝟘  πŸ™  β‰€πŸ™ refl β†’ refl
    πŸ™  𝟘  𝟘  πŸ™  ≀ω refl β†’ refl
    πŸ™  𝟘  𝟘  β‰€πŸ™ 𝟘  refl β†’ refl
    πŸ™  𝟘  𝟘  β‰€πŸ™ β‰€πŸ™ refl β†’ refl
    πŸ™  𝟘  𝟘  β‰€πŸ™ ≀ω refl β†’ refl
    πŸ™  𝟘  𝟘  ≀ω 𝟘  refl β†’ refl
    πŸ™  𝟘  𝟘  ≀ω β‰€πŸ™ refl β†’ refl
    πŸ™  𝟘  𝟘  ≀ω ≀ω refl β†’ refl
    πŸ™  𝟘  πŸ™  𝟘  𝟘  refl β†’ refl
    πŸ™  𝟘  πŸ™  𝟘  β‰€πŸ™ refl β†’ refl
    πŸ™  𝟘  πŸ™  𝟘  ≀ω refl β†’ refl
    πŸ™  𝟘  πŸ™  πŸ™  𝟘  refl β†’ refl
    πŸ™  𝟘  πŸ™  πŸ™  β‰€πŸ™ refl β†’ refl
    πŸ™  𝟘  πŸ™  πŸ™  ≀ω refl β†’ refl
    πŸ™  𝟘  πŸ™  β‰€πŸ™ 𝟘  refl β†’ refl
    πŸ™  𝟘  πŸ™  β‰€πŸ™ β‰€πŸ™ refl β†’ refl
    πŸ™  𝟘  πŸ™  β‰€πŸ™ ≀ω refl β†’ refl
    πŸ™  𝟘  πŸ™  ≀ω 𝟘  refl β†’ refl
    πŸ™  𝟘  πŸ™  ≀ω β‰€πŸ™ refl β†’ refl
    πŸ™  𝟘  πŸ™  ≀ω ≀ω refl β†’ refl
    πŸ™  𝟘  β‰€πŸ™ 𝟘  𝟘  refl β†’ refl
    πŸ™  𝟘  β‰€πŸ™ 𝟘  β‰€πŸ™ refl β†’ refl
    πŸ™  𝟘  β‰€πŸ™ 𝟘  ≀ω refl β†’ refl
    πŸ™  𝟘  β‰€πŸ™ πŸ™  𝟘  refl β†’ refl
    πŸ™  𝟘  β‰€πŸ™ πŸ™  β‰€πŸ™ refl β†’ refl
    πŸ™  𝟘  β‰€πŸ™ πŸ™  ≀ω refl β†’ refl
    πŸ™  𝟘  β‰€πŸ™ β‰€πŸ™ 𝟘  refl β†’ refl
    πŸ™  𝟘  β‰€πŸ™ β‰€πŸ™ β‰€πŸ™ refl β†’ refl
    πŸ™  𝟘  β‰€πŸ™ β‰€πŸ™ ≀ω refl β†’ refl
    πŸ™  𝟘  β‰€πŸ™ ≀ω 𝟘  refl β†’ refl
    πŸ™  𝟘  β‰€πŸ™ ≀ω β‰€πŸ™ refl β†’ refl
    πŸ™  𝟘  β‰€πŸ™ ≀ω ≀ω refl β†’ refl
    πŸ™  𝟘  ≀ω 𝟘  𝟘  refl β†’ refl
    πŸ™  𝟘  ≀ω 𝟘  β‰€πŸ™ refl β†’ refl
    πŸ™  𝟘  ≀ω 𝟘  ≀ω refl β†’ refl
    πŸ™  𝟘  ≀ω πŸ™  𝟘  refl β†’ refl
    πŸ™  𝟘  ≀ω πŸ™  β‰€πŸ™ refl β†’ refl
    πŸ™  𝟘  ≀ω πŸ™  ≀ω refl β†’ refl
    πŸ™  𝟘  ≀ω β‰€πŸ™ 𝟘  refl β†’ refl
    πŸ™  𝟘  ≀ω β‰€πŸ™ β‰€πŸ™ refl β†’ refl
    πŸ™  𝟘  ≀ω β‰€πŸ™ ≀ω refl β†’ refl
    πŸ™  𝟘  ≀ω ≀ω 𝟘  refl β†’ refl
    πŸ™  𝟘  ≀ω ≀ω β‰€πŸ™ refl β†’ refl
    πŸ™  𝟘  ≀ω ≀ω ≀ω refl β†’ refl
    πŸ™  πŸ™  𝟘  𝟘  𝟘  refl β†’ refl
    πŸ™  πŸ™  𝟘  𝟘  β‰€πŸ™ refl β†’ refl
    πŸ™  πŸ™  𝟘  𝟘  ≀ω refl β†’ refl
    πŸ™  πŸ™  𝟘  πŸ™  𝟘  refl β†’ refl
    πŸ™  πŸ™  𝟘  πŸ™  β‰€πŸ™ refl β†’ refl
    πŸ™  πŸ™  𝟘  πŸ™  ≀ω refl β†’ refl
    πŸ™  πŸ™  𝟘  β‰€πŸ™ 𝟘  refl β†’ refl
    πŸ™  πŸ™  𝟘  β‰€πŸ™ β‰€πŸ™ refl β†’ refl
    πŸ™  πŸ™  𝟘  β‰€πŸ™ ≀ω refl β†’ refl
    πŸ™  πŸ™  𝟘  ≀ω 𝟘  refl β†’ refl
    πŸ™  πŸ™  𝟘  ≀ω β‰€πŸ™ refl β†’ refl
    πŸ™  πŸ™  𝟘  ≀ω ≀ω refl β†’ refl
    πŸ™  πŸ™  πŸ™  𝟘  𝟘  refl β†’ refl
    πŸ™  πŸ™  πŸ™  𝟘  β‰€πŸ™ refl β†’ refl
    πŸ™  πŸ™  πŸ™  𝟘  ≀ω refl β†’ refl
    πŸ™  πŸ™  πŸ™  πŸ™  𝟘  refl β†’ refl
    πŸ™  πŸ™  πŸ™  πŸ™  β‰€πŸ™ refl β†’ refl
    πŸ™  πŸ™  πŸ™  πŸ™  ≀ω refl β†’ refl
    πŸ™  πŸ™  πŸ™  β‰€πŸ™ 𝟘  refl β†’ refl
    πŸ™  πŸ™  πŸ™  β‰€πŸ™ β‰€πŸ™ refl β†’ refl
    πŸ™  πŸ™  πŸ™  β‰€πŸ™ ≀ω refl β†’ refl
    πŸ™  πŸ™  πŸ™  ≀ω 𝟘  refl β†’ refl
    πŸ™  πŸ™  πŸ™  ≀ω β‰€πŸ™ refl β†’ refl
    πŸ™  πŸ™  πŸ™  ≀ω ≀ω refl β†’ refl
    πŸ™  πŸ™  β‰€πŸ™ 𝟘  𝟘  refl β†’ refl
    πŸ™  πŸ™  β‰€πŸ™ 𝟘  β‰€πŸ™ refl β†’ refl
    πŸ™  πŸ™  β‰€πŸ™ 𝟘  ≀ω refl β†’ refl
    πŸ™  πŸ™  β‰€πŸ™ πŸ™  𝟘  refl β†’ refl
    πŸ™  πŸ™  β‰€πŸ™ πŸ™  β‰€πŸ™ refl β†’ refl
    πŸ™  πŸ™  β‰€πŸ™ πŸ™  ≀ω refl β†’ refl
    πŸ™  πŸ™  β‰€πŸ™ β‰€πŸ™ 𝟘  refl β†’ refl
    πŸ™  πŸ™  β‰€πŸ™ β‰€πŸ™ β‰€πŸ™ refl β†’ refl
    πŸ™  πŸ™  β‰€πŸ™ β‰€πŸ™ ≀ω refl β†’ refl
    πŸ™  πŸ™  β‰€πŸ™ ≀ω 𝟘  refl β†’ refl
    πŸ™  πŸ™  β‰€πŸ™ ≀ω β‰€πŸ™ refl β†’ refl
    πŸ™  πŸ™  β‰€πŸ™ ≀ω ≀ω refl β†’ refl
    πŸ™  πŸ™  ≀ω 𝟘  𝟘  refl β†’ refl
    πŸ™  πŸ™  ≀ω 𝟘  β‰€πŸ™ refl β†’ refl
    πŸ™  πŸ™  ≀ω 𝟘  ≀ω refl β†’ refl
    πŸ™  πŸ™  ≀ω πŸ™  𝟘  refl β†’ refl
    πŸ™  πŸ™  ≀ω πŸ™  β‰€πŸ™ refl β†’ refl
    πŸ™  πŸ™  ≀ω πŸ™  ≀ω refl β†’ refl
    πŸ™  πŸ™  ≀ω β‰€πŸ™ 𝟘  refl β†’ refl
    πŸ™  πŸ™  ≀ω β‰€πŸ™ β‰€πŸ™ refl β†’ refl
    πŸ™  πŸ™  ≀ω β‰€πŸ™ ≀ω refl β†’ refl
    πŸ™  πŸ™  ≀ω ≀ω 𝟘  refl β†’ refl
    πŸ™  πŸ™  ≀ω ≀ω β‰€πŸ™ refl β†’ refl
    πŸ™  πŸ™  ≀ω ≀ω ≀ω refl β†’ refl
    πŸ™  β‰€πŸ™ 𝟘  𝟘  𝟘  refl β†’ refl
    πŸ™  β‰€πŸ™ 𝟘  𝟘  β‰€πŸ™ refl β†’ refl
    πŸ™  β‰€πŸ™ 𝟘  𝟘  ≀ω refl β†’ refl
    πŸ™  β‰€πŸ™ 𝟘  πŸ™  𝟘  refl β†’ refl
    πŸ™  β‰€πŸ™ 𝟘  πŸ™  β‰€πŸ™ refl β†’ refl
    πŸ™  β‰€πŸ™ 𝟘  πŸ™  ≀ω refl β†’ refl
    πŸ™  β‰€πŸ™ 𝟘  β‰€πŸ™ 𝟘  refl β†’ refl
    πŸ™  β‰€πŸ™ 𝟘  β‰€πŸ™ β‰€πŸ™ refl β†’ refl
    πŸ™  β‰€πŸ™ 𝟘  β‰€πŸ™ ≀ω refl β†’ refl
    πŸ™  β‰€πŸ™ 𝟘  ≀ω 𝟘  refl β†’ refl
    πŸ™  β‰€πŸ™ 𝟘  ≀ω β‰€πŸ™ refl β†’ refl
    πŸ™  β‰€πŸ™ 𝟘  ≀ω ≀ω refl β†’ refl
    πŸ™  β‰€πŸ™ πŸ™  𝟘  𝟘  refl β†’ refl
    πŸ™  β‰€πŸ™ πŸ™  𝟘  β‰€πŸ™ refl β†’ refl
    πŸ™  β‰€πŸ™ πŸ™  𝟘  ≀ω refl β†’ refl
    πŸ™  β‰€πŸ™ πŸ™  πŸ™  𝟘  refl β†’ refl
    πŸ™  β‰€πŸ™ πŸ™  πŸ™  β‰€πŸ™ refl β†’ refl
    πŸ™  β‰€πŸ™ πŸ™  πŸ™  ≀ω refl β†’ refl
    πŸ™  β‰€πŸ™ πŸ™  β‰€πŸ™ 𝟘  refl β†’ refl
    πŸ™  β‰€πŸ™ πŸ™  β‰€πŸ™ β‰€πŸ™ refl β†’ refl
    πŸ™  β‰€πŸ™ πŸ™  β‰€πŸ™ ≀ω refl β†’ refl
    πŸ™  β‰€πŸ™ πŸ™  ≀ω 𝟘  refl β†’ refl
    πŸ™  β‰€πŸ™ πŸ™  ≀ω β‰€πŸ™ refl β†’ refl
    πŸ™  β‰€πŸ™ πŸ™  ≀ω ≀ω refl β†’ refl
    πŸ™  β‰€πŸ™ β‰€πŸ™ 𝟘  𝟘  refl β†’ refl
    πŸ™  β‰€πŸ™ β‰€πŸ™ 𝟘  β‰€πŸ™ refl β†’ refl
    πŸ™  β‰€πŸ™ β‰€πŸ™ 𝟘  ≀ω refl β†’ refl
    πŸ™  β‰€πŸ™ β‰€πŸ™ πŸ™  𝟘  refl β†’ refl
    πŸ™  β‰€πŸ™ β‰€πŸ™ πŸ™  β‰€πŸ™ refl β†’ refl
    πŸ™  β‰€πŸ™ β‰€πŸ™ πŸ™  ≀ω refl β†’ refl
    πŸ™  β‰€πŸ™ β‰€πŸ™ β‰€πŸ™ 𝟘  refl β†’ refl
    πŸ™  β‰€πŸ™ β‰€πŸ™ β‰€πŸ™ β‰€πŸ™ refl β†’ refl
    πŸ™  β‰€πŸ™ β‰€πŸ™ β‰€πŸ™ ≀ω refl β†’ refl
    πŸ™  β‰€πŸ™ β‰€πŸ™ ≀ω 𝟘  refl β†’ refl
    πŸ™  β‰€πŸ™ β‰€πŸ™ ≀ω β‰€πŸ™ refl β†’ refl
    πŸ™  β‰€πŸ™ β‰€πŸ™ ≀ω ≀ω refl β†’ refl
    πŸ™  β‰€πŸ™ ≀ω 𝟘  𝟘  refl β†’ refl
    πŸ™  β‰€πŸ™ ≀ω 𝟘  β‰€πŸ™ refl β†’ refl
    πŸ™  β‰€πŸ™ ≀ω 𝟘  ≀ω refl β†’ refl
    πŸ™  β‰€πŸ™ ≀ω πŸ™  𝟘  refl β†’ refl
    πŸ™  β‰€πŸ™ ≀ω πŸ™  β‰€πŸ™ refl β†’ refl
    πŸ™  β‰€πŸ™ ≀ω πŸ™  ≀ω refl β†’ refl
    πŸ™  β‰€πŸ™ ≀ω β‰€πŸ™ 𝟘  refl β†’ refl
    πŸ™  β‰€πŸ™ ≀ω β‰€πŸ™ β‰€πŸ™ refl β†’ refl
    πŸ™  β‰€πŸ™ ≀ω β‰€πŸ™ ≀ω refl β†’ refl
    πŸ™  β‰€πŸ™ ≀ω ≀ω 𝟘  refl β†’ refl
    πŸ™  β‰€πŸ™ ≀ω ≀ω β‰€πŸ™ refl β†’ refl
    πŸ™  β‰€πŸ™ ≀ω ≀ω ≀ω refl β†’ refl
    πŸ™  ≀ω 𝟘  𝟘  𝟘  refl β†’ refl
    πŸ™  ≀ω 𝟘  𝟘  β‰€πŸ™ refl β†’ refl
    πŸ™  ≀ω 𝟘  𝟘  ≀ω refl β†’ refl
    πŸ™  ≀ω 𝟘  πŸ™  𝟘  refl β†’ refl
    πŸ™  ≀ω 𝟘  πŸ™  β‰€πŸ™ refl β†’ refl
    πŸ™  ≀ω 𝟘  πŸ™  ≀ω refl β†’ refl
    πŸ™  ≀ω 𝟘  β‰€πŸ™ 𝟘  refl β†’ refl
    πŸ™  ≀ω 𝟘  β‰€πŸ™ β‰€πŸ™ refl β†’ refl
    πŸ™  ≀ω 𝟘  β‰€πŸ™ ≀ω refl β†’ refl
    πŸ™  ≀ω 𝟘  ≀ω 𝟘  refl β†’ refl
    πŸ™  ≀ω 𝟘  ≀ω β‰€πŸ™ refl β†’ refl
    πŸ™  ≀ω 𝟘  ≀ω ≀ω refl β†’ refl
    πŸ™  ≀ω πŸ™  𝟘  𝟘  refl β†’ refl
    πŸ™  ≀ω πŸ™  𝟘  β‰€πŸ™ refl β†’ refl
    πŸ™  ≀ω πŸ™  𝟘  ≀ω refl β†’ refl
    πŸ™  ≀ω πŸ™  πŸ™  𝟘  refl β†’ refl
    πŸ™  ≀ω πŸ™  πŸ™  β‰€πŸ™ refl β†’ refl
    πŸ™  ≀ω πŸ™  πŸ™  ≀ω refl β†’ refl
    πŸ™  ≀ω πŸ™  β‰€πŸ™ 𝟘  refl β†’ refl
    πŸ™  ≀ω πŸ™  β‰€πŸ™ β‰€πŸ™ refl β†’ refl
    πŸ™  ≀ω πŸ™  β‰€πŸ™ ≀ω refl β†’ refl
    πŸ™  ≀ω πŸ™  ≀ω 𝟘  refl β†’ refl
    πŸ™  ≀ω πŸ™  ≀ω β‰€πŸ™ refl β†’ refl
    πŸ™  ≀ω πŸ™  ≀ω ≀ω refl β†’ refl
    πŸ™  ≀ω β‰€πŸ™ 𝟘  𝟘  refl β†’ refl
    πŸ™  ≀ω β‰€πŸ™ 𝟘  β‰€πŸ™ refl β†’ refl
    πŸ™  ≀ω β‰€πŸ™ 𝟘  ≀ω refl β†’ refl
    πŸ™  ≀ω β‰€πŸ™ πŸ™  𝟘  refl β†’ refl
    πŸ™  ≀ω β‰€πŸ™ πŸ™  β‰€πŸ™ refl β†’ refl
    πŸ™  ≀ω β‰€πŸ™ πŸ™  ≀ω refl β†’ refl
    πŸ™  ≀ω β‰€πŸ™ β‰€πŸ™ 𝟘  refl β†’ refl
    πŸ™  ≀ω β‰€πŸ™ β‰€πŸ™ β‰€πŸ™ refl β†’ refl
    πŸ™  ≀ω β‰€πŸ™ β‰€πŸ™ ≀ω refl β†’ refl
    πŸ™  ≀ω β‰€πŸ™ ≀ω 𝟘  refl β†’ refl
    πŸ™  ≀ω β‰€πŸ™ ≀ω β‰€πŸ™ refl β†’ refl
    πŸ™  ≀ω β‰€πŸ™ ≀ω ≀ω refl β†’ refl
    πŸ™  ≀ω ≀ω 𝟘  𝟘  refl β†’ refl
    πŸ™  ≀ω ≀ω 𝟘  β‰€πŸ™ refl β†’ refl
    πŸ™  ≀ω ≀ω 𝟘  ≀ω refl β†’ refl
    πŸ™  ≀ω ≀ω πŸ™  𝟘  refl β†’ refl
    πŸ™  ≀ω ≀ω πŸ™  β‰€πŸ™ refl β†’ refl
    πŸ™  ≀ω ≀ω πŸ™  ≀ω refl β†’ refl
    πŸ™  ≀ω ≀ω β‰€πŸ™ 𝟘  refl β†’ refl
    πŸ™  ≀ω ≀ω β‰€πŸ™ β‰€πŸ™ refl β†’ refl
    πŸ™  ≀ω ≀ω β‰€πŸ™ ≀ω refl β†’ refl
    πŸ™  ≀ω ≀ω ≀ω 𝟘  refl β†’ refl
    πŸ™  ≀ω ≀ω ≀ω β‰€πŸ™ refl β†’ refl
    πŸ™  ≀ω ≀ω ≀ω ≀ω refl β†’ refl
    β‰€πŸ™ 𝟘  𝟘  𝟘  𝟘  refl β†’ refl
    β‰€πŸ™ 𝟘  𝟘  𝟘  β‰€πŸ™ refl β†’ refl
    β‰€πŸ™ 𝟘  𝟘  𝟘  ≀ω refl β†’ refl
    β‰€πŸ™ 𝟘  𝟘  πŸ™  𝟘  refl β†’ refl
    β‰€πŸ™ 𝟘  𝟘  πŸ™  β‰€πŸ™ refl β†’ refl
    β‰€πŸ™ 𝟘  𝟘  πŸ™  ≀ω refl β†’ refl
    β‰€πŸ™ 𝟘  𝟘  β‰€πŸ™ 𝟘  refl β†’ refl
    β‰€πŸ™ 𝟘  𝟘  β‰€πŸ™ β‰€πŸ™ refl β†’ refl
    β‰€πŸ™ 𝟘  𝟘  β‰€πŸ™ ≀ω refl β†’ refl
    β‰€πŸ™ 𝟘  𝟘  ≀ω 𝟘  refl β†’ refl
    β‰€πŸ™ 𝟘  𝟘  ≀ω β‰€πŸ™ refl β†’ refl
    β‰€πŸ™ 𝟘  𝟘  ≀ω ≀ω refl β†’ refl
    β‰€πŸ™ 𝟘  πŸ™  𝟘  𝟘  refl β†’ refl
    β‰€πŸ™ 𝟘  πŸ™  𝟘  β‰€πŸ™ refl β†’ refl
    β‰€πŸ™ 𝟘  πŸ™  𝟘  ≀ω refl β†’ refl
    β‰€πŸ™ 𝟘  πŸ™  πŸ™  𝟘  refl β†’ refl
    β‰€πŸ™ 𝟘  πŸ™  πŸ™  β‰€πŸ™ refl β†’ refl
    β‰€πŸ™ 𝟘  πŸ™  πŸ™  ≀ω refl β†’ refl
    β‰€πŸ™ 𝟘  πŸ™  β‰€πŸ™ 𝟘  refl β†’ refl
    β‰€πŸ™ 𝟘  πŸ™  β‰€πŸ™ β‰€πŸ™ refl β†’ refl
    β‰€πŸ™ 𝟘  πŸ™  β‰€πŸ™ ≀ω refl β†’ refl
    β‰€πŸ™ 𝟘  πŸ™  ≀ω 𝟘  refl β†’ refl
    β‰€πŸ™ 𝟘  πŸ™  ≀ω β‰€πŸ™ refl β†’ refl
    β‰€πŸ™ 𝟘  πŸ™  ≀ω ≀ω refl β†’ refl
    β‰€πŸ™ 𝟘  β‰€πŸ™ 𝟘  𝟘  refl β†’ refl
    β‰€πŸ™ 𝟘  β‰€πŸ™ 𝟘  β‰€πŸ™ refl β†’ refl
    β‰€πŸ™ 𝟘  β‰€πŸ™ 𝟘  ≀ω refl β†’ refl
    β‰€πŸ™ 𝟘  β‰€πŸ™ πŸ™  𝟘  refl β†’ refl
    β‰€πŸ™ 𝟘  β‰€πŸ™ πŸ™  β‰€πŸ™ refl β†’ refl
    β‰€πŸ™ 𝟘  β‰€πŸ™ πŸ™  ≀ω refl β†’ refl
    β‰€πŸ™ 𝟘  β‰€πŸ™ β‰€πŸ™ 𝟘  refl β†’ refl
    β‰€πŸ™ 𝟘  β‰€πŸ™ β‰€πŸ™ β‰€πŸ™ refl β†’ refl
    β‰€πŸ™ 𝟘  β‰€πŸ™ β‰€πŸ™ ≀ω refl β†’ refl
    β‰€πŸ™ 𝟘  β‰€πŸ™ ≀ω 𝟘  refl β†’ refl
    β‰€πŸ™ 𝟘  β‰€πŸ™ ≀ω β‰€πŸ™ refl β†’ refl
    β‰€πŸ™ 𝟘  β‰€πŸ™ ≀ω ≀ω refl β†’ refl
    β‰€πŸ™ 𝟘  ≀ω 𝟘  𝟘  refl β†’ refl
    β‰€πŸ™ 𝟘  ≀ω 𝟘  β‰€πŸ™ refl β†’ refl
    β‰€πŸ™ 𝟘  ≀ω 𝟘  ≀ω refl β†’ refl
    β‰€πŸ™ 𝟘  ≀ω πŸ™  𝟘  refl β†’ refl
    β‰€πŸ™ 𝟘  ≀ω πŸ™  β‰€πŸ™ refl β†’ refl
    β‰€πŸ™ 𝟘  ≀ω πŸ™  ≀ω refl β†’ refl
    β‰€πŸ™ 𝟘  ≀ω β‰€πŸ™ 𝟘  refl β†’ refl
    β‰€πŸ™ 𝟘  ≀ω β‰€πŸ™ β‰€πŸ™ refl β†’ refl
    β‰€πŸ™ 𝟘  ≀ω β‰€πŸ™ ≀ω refl β†’ refl
    β‰€πŸ™ 𝟘  ≀ω ≀ω 𝟘  refl β†’ refl
    β‰€πŸ™ 𝟘  ≀ω ≀ω β‰€πŸ™ refl β†’ refl
    β‰€πŸ™ 𝟘  ≀ω ≀ω ≀ω refl β†’ refl
    β‰€πŸ™ πŸ™  𝟘  𝟘  𝟘  refl β†’ refl
    β‰€πŸ™ πŸ™  𝟘  𝟘  β‰€πŸ™ refl β†’ refl
    β‰€πŸ™ πŸ™  𝟘  𝟘  ≀ω refl β†’ refl
    β‰€πŸ™ πŸ™  𝟘  πŸ™  𝟘  refl β†’ refl
    β‰€πŸ™ πŸ™  𝟘  πŸ™  β‰€πŸ™ refl β†’ refl
    β‰€πŸ™ πŸ™  𝟘  πŸ™  ≀ω refl β†’ refl
    β‰€πŸ™ πŸ™  𝟘  β‰€πŸ™ 𝟘  refl β†’ refl
    β‰€πŸ™ πŸ™  𝟘  β‰€πŸ™ β‰€πŸ™ refl β†’ refl
    β‰€πŸ™ πŸ™  𝟘  β‰€πŸ™ ≀ω refl β†’ refl
    β‰€πŸ™ πŸ™  𝟘  ≀ω 𝟘  refl β†’ refl
    β‰€πŸ™ πŸ™  𝟘  ≀ω β‰€πŸ™ refl β†’ refl
    β‰€πŸ™ πŸ™  𝟘  ≀ω ≀ω refl β†’ refl
    β‰€πŸ™ πŸ™  πŸ™  𝟘  𝟘  refl β†’ refl
    β‰€πŸ™ πŸ™  πŸ™  𝟘  β‰€πŸ™ refl β†’ refl
    β‰€πŸ™ πŸ™  πŸ™  𝟘  ≀ω refl β†’ refl
    β‰€πŸ™ πŸ™  πŸ™  πŸ™  𝟘  refl β†’ refl
    β‰€πŸ™ πŸ™  πŸ™  πŸ™  β‰€πŸ™ refl β†’ refl
    β‰€πŸ™ πŸ™  πŸ™  πŸ™  ≀ω refl β†’ refl
    β‰€πŸ™ πŸ™  πŸ™  β‰€πŸ™ 𝟘  refl β†’ refl
    β‰€πŸ™ πŸ™  πŸ™  β‰€πŸ™ β‰€πŸ™ refl β†’ refl
    β‰€πŸ™ πŸ™  πŸ™  β‰€πŸ™ ≀ω refl β†’ refl
    β‰€πŸ™ πŸ™  πŸ™  ≀ω 𝟘  refl β†’ refl
    β‰€πŸ™ πŸ™  πŸ™  ≀ω β‰€πŸ™ refl β†’ refl
    β‰€πŸ™ πŸ™  πŸ™  ≀ω ≀ω refl β†’ refl
    β‰€πŸ™ πŸ™  β‰€πŸ™ 𝟘  𝟘  refl β†’ refl
    β‰€πŸ™ πŸ™  β‰€πŸ™ 𝟘  β‰€πŸ™ refl β†’ refl
    β‰€πŸ™ πŸ™  β‰€πŸ™ 𝟘  ≀ω refl β†’ refl
    β‰€πŸ™ πŸ™  β‰€πŸ™ πŸ™  𝟘  refl β†’ refl
    β‰€πŸ™ πŸ™  β‰€πŸ™ πŸ™  β‰€πŸ™ refl β†’ refl
    β‰€πŸ™ πŸ™  β‰€πŸ™ πŸ™  ≀ω refl β†’ refl
    β‰€πŸ™ πŸ™  β‰€πŸ™ β‰€πŸ™ 𝟘  refl β†’ refl
    β‰€πŸ™ πŸ™  β‰€πŸ™ β‰€πŸ™ β‰€πŸ™ refl β†’ refl
    β‰€πŸ™ πŸ™  β‰€πŸ™ β‰€πŸ™ ≀ω refl β†’ refl
    β‰€πŸ™ πŸ™  β‰€πŸ™ ≀ω 𝟘  refl β†’ refl
    β‰€πŸ™ πŸ™  β‰€πŸ™ ≀ω β‰€πŸ™ refl β†’ refl
    β‰€πŸ™ πŸ™  β‰€πŸ™ ≀ω ≀ω refl β†’ refl
    β‰€πŸ™ πŸ™  ≀ω 𝟘  𝟘  refl β†’ refl
    β‰€πŸ™ πŸ™  ≀ω 𝟘  β‰€πŸ™ refl β†’ refl
    β‰€πŸ™ πŸ™  ≀ω 𝟘  ≀ω refl β†’ refl
    β‰€πŸ™ πŸ™  ≀ω πŸ™  𝟘  refl β†’ refl
    β‰€πŸ™ πŸ™  ≀ω πŸ™  β‰€πŸ™ refl β†’ refl
    β‰€πŸ™ πŸ™  ≀ω πŸ™  ≀ω refl β†’ refl
    β‰€πŸ™ πŸ™  ≀ω β‰€πŸ™ 𝟘  refl β†’ refl
    β‰€πŸ™ πŸ™  ≀ω β‰€πŸ™ β‰€πŸ™ refl β†’ refl
    β‰€πŸ™ πŸ™  ≀ω β‰€πŸ™ ≀ω refl β†’ refl
    β‰€πŸ™ πŸ™  ≀ω ≀ω 𝟘  refl β†’ refl
    β‰€πŸ™ πŸ™  ≀ω ≀ω β‰€πŸ™ refl β†’ refl
    β‰€πŸ™ πŸ™  ≀ω ≀ω ≀ω refl β†’ refl
    β‰€πŸ™ β‰€πŸ™ 𝟘  𝟘  𝟘  refl β†’ refl
    β‰€πŸ™ β‰€πŸ™ 𝟘  𝟘  β‰€πŸ™ refl β†’ refl
    β‰€πŸ™ β‰€πŸ™ 𝟘  𝟘  ≀ω refl β†’ refl
    β‰€πŸ™ β‰€πŸ™ 𝟘  πŸ™  𝟘  refl β†’ refl
    β‰€πŸ™ β‰€πŸ™ 𝟘  πŸ™  β‰€πŸ™ refl β†’ refl
    β‰€πŸ™ β‰€πŸ™ 𝟘  πŸ™  ≀ω refl β†’ refl
    β‰€πŸ™ β‰€πŸ™ 𝟘  β‰€πŸ™ 𝟘  refl β†’ refl
    β‰€πŸ™ β‰€πŸ™ 𝟘  β‰€πŸ™ β‰€πŸ™ refl β†’ refl
    β‰€πŸ™ β‰€πŸ™ 𝟘  β‰€πŸ™ ≀ω refl β†’ refl
    β‰€πŸ™ β‰€πŸ™ 𝟘  ≀ω 𝟘  refl β†’ refl
    β‰€πŸ™ β‰€πŸ™ 𝟘  ≀ω β‰€πŸ™ refl β†’ refl
    β‰€πŸ™ β‰€πŸ™ 𝟘  ≀ω ≀ω refl β†’ refl
    β‰€πŸ™ β‰€πŸ™ πŸ™  𝟘  𝟘  refl β†’ refl
    β‰€πŸ™ β‰€πŸ™ πŸ™  𝟘  β‰€πŸ™ refl β†’ refl
    β‰€πŸ™ β‰€πŸ™ πŸ™  𝟘  ≀ω refl β†’ refl
    β‰€πŸ™ β‰€πŸ™ πŸ™  πŸ™  𝟘  refl β†’ refl
    β‰€πŸ™ β‰€πŸ™ πŸ™  πŸ™  β‰€πŸ™ refl β†’ refl
    β‰€πŸ™ β‰€πŸ™ πŸ™  πŸ™  ≀ω refl β†’ refl
    β‰€πŸ™ β‰€πŸ™ πŸ™  β‰€πŸ™ 𝟘  refl β†’ refl
    β‰€πŸ™ β‰€πŸ™ πŸ™  β‰€πŸ™ β‰€πŸ™ refl β†’ refl
    β‰€πŸ™ β‰€πŸ™ πŸ™  β‰€πŸ™ ≀ω refl β†’ refl
    β‰€πŸ™ β‰€πŸ™ πŸ™  ≀ω 𝟘  refl β†’ refl
    β‰€πŸ™ β‰€πŸ™ πŸ™  ≀ω β‰€πŸ™ refl β†’ refl
    β‰€πŸ™ β‰€πŸ™ πŸ™  ≀ω ≀ω refl β†’ refl
    β‰€πŸ™ β‰€πŸ™ β‰€πŸ™ 𝟘  𝟘  refl β†’ refl
    β‰€πŸ™ β‰€πŸ™ β‰€πŸ™ 𝟘  β‰€πŸ™ refl β†’ refl
    β‰€πŸ™ β‰€πŸ™ β‰€πŸ™ 𝟘  ≀ω refl β†’ refl
    β‰€πŸ™ β‰€πŸ™ β‰€πŸ™ πŸ™  𝟘  refl β†’ refl
    β‰€πŸ™ β‰€πŸ™ β‰€πŸ™ πŸ™  β‰€πŸ™ refl β†’ refl
    β‰€πŸ™ β‰€πŸ™ β‰€πŸ™ πŸ™  ≀ω refl β†’ refl
    β‰€πŸ™ β‰€πŸ™ β‰€πŸ™ β‰€πŸ™ 𝟘  refl β†’ refl
    β‰€πŸ™ β‰€πŸ™ β‰€πŸ™ β‰€πŸ™ β‰€πŸ™ refl β†’ refl
    β‰€πŸ™ β‰€πŸ™ β‰€πŸ™ β‰€πŸ™ ≀ω refl β†’ refl
    β‰€πŸ™ β‰€πŸ™ β‰€πŸ™ ≀ω 𝟘  refl β†’ refl
    β‰€πŸ™ β‰€πŸ™ β‰€πŸ™ ≀ω β‰€πŸ™ refl β†’ refl
    β‰€πŸ™ β‰€πŸ™ β‰€πŸ™ ≀ω ≀ω refl β†’ refl
    β‰€πŸ™ β‰€πŸ™ ≀ω 𝟘  𝟘  refl β†’ refl
    β‰€πŸ™ β‰€πŸ™ ≀ω 𝟘  β‰€πŸ™ refl β†’ refl
    β‰€πŸ™ β‰€πŸ™ ≀ω 𝟘  ≀ω refl β†’ refl
    β‰€πŸ™ β‰€πŸ™ ≀ω πŸ™  𝟘  refl β†’ refl
    β‰€πŸ™ β‰€πŸ™ ≀ω πŸ™  β‰€πŸ™ refl β†’ refl
    β‰€πŸ™ β‰€πŸ™ ≀ω πŸ™  ≀ω refl β†’ refl
    β‰€πŸ™ β‰€πŸ™ ≀ω β‰€πŸ™ 𝟘  refl β†’ refl
    β‰€πŸ™ β‰€πŸ™ ≀ω β‰€πŸ™ β‰€πŸ™ refl β†’ refl
    β‰€πŸ™ β‰€πŸ™ ≀ω β‰€πŸ™ ≀ω refl β†’ refl
    β‰€πŸ™ β‰€πŸ™ ≀ω ≀ω 𝟘  refl β†’ refl
    β‰€πŸ™ β‰€πŸ™ ≀ω ≀ω β‰€πŸ™ refl β†’ refl
    β‰€πŸ™ β‰€πŸ™ ≀ω ≀ω ≀ω refl β†’ refl
    β‰€πŸ™ ≀ω 𝟘  𝟘  𝟘  refl β†’ refl
    β‰€πŸ™ ≀ω 𝟘  𝟘  β‰€πŸ™ refl β†’ refl
    β‰€πŸ™ ≀ω 𝟘  𝟘  ≀ω refl β†’ refl
    β‰€πŸ™ ≀ω 𝟘  πŸ™  𝟘  refl β†’ refl
    β‰€πŸ™ ≀ω 𝟘  πŸ™  β‰€πŸ™ refl β†’ refl
    β‰€πŸ™ ≀ω 𝟘  πŸ™  ≀ω refl β†’ refl
    β‰€πŸ™ ≀ω 𝟘  β‰€πŸ™ 𝟘  refl β†’ refl
    β‰€πŸ™ ≀ω 𝟘  β‰€πŸ™ β‰€πŸ™ refl β†’ refl
    β‰€πŸ™ ≀ω 𝟘  β‰€πŸ™ ≀ω refl β†’ refl
    β‰€πŸ™ ≀ω 𝟘  ≀ω 𝟘  refl β†’ refl
    β‰€πŸ™ ≀ω 𝟘  ≀ω β‰€πŸ™ refl β†’ refl
    β‰€πŸ™ ≀ω 𝟘  ≀ω ≀ω refl β†’ refl
    β‰€πŸ™ ≀ω πŸ™  𝟘  𝟘  refl β†’ refl
    β‰€πŸ™ ≀ω πŸ™  𝟘  β‰€πŸ™ refl β†’ refl
    β‰€πŸ™ ≀ω πŸ™  𝟘  ≀ω refl β†’ refl
    β‰€πŸ™ ≀ω πŸ™  πŸ™  𝟘  refl β†’ refl
    β‰€πŸ™ ≀ω πŸ™  πŸ™  β‰€πŸ™ refl β†’ refl
    β‰€πŸ™ ≀ω πŸ™  πŸ™  ≀ω refl β†’ refl
    β‰€πŸ™ ≀ω πŸ™  β‰€πŸ™ 𝟘  refl β†’ refl
    β‰€πŸ™ ≀ω πŸ™  β‰€πŸ™ β‰€πŸ™ refl β†’ refl
    β‰€πŸ™ ≀ω πŸ™  β‰€πŸ™ ≀ω refl β†’ refl
    β‰€πŸ™ ≀ω πŸ™  ≀ω 𝟘  refl β†’ refl
    β‰€πŸ™ ≀ω πŸ™  ≀ω β‰€πŸ™ refl β†’ refl
    β‰€πŸ™ ≀ω πŸ™  ≀ω ≀ω refl β†’ refl
    β‰€πŸ™ ≀ω β‰€πŸ™ 𝟘  𝟘  refl β†’ refl
    β‰€πŸ™ ≀ω β‰€πŸ™ 𝟘  β‰€πŸ™ refl β†’ refl
    β‰€πŸ™ ≀ω β‰€πŸ™ 𝟘  ≀ω refl β†’ refl
    β‰€πŸ™ ≀ω β‰€πŸ™ πŸ™  𝟘  refl β†’ refl
    β‰€πŸ™ ≀ω β‰€πŸ™ πŸ™  β‰€πŸ™ refl β†’ refl
    β‰€πŸ™ ≀ω β‰€πŸ™ πŸ™  ≀ω refl β†’ refl
    β‰€πŸ™ ≀ω β‰€πŸ™ β‰€πŸ™ 𝟘  refl β†’ refl
    β‰€πŸ™ ≀ω β‰€πŸ™ β‰€πŸ™ β‰€πŸ™ refl β†’ refl
    β‰€πŸ™ ≀ω β‰€πŸ™ β‰€πŸ™ ≀ω refl β†’ refl
    β‰€πŸ™ ≀ω β‰€πŸ™ ≀ω 𝟘  refl β†’ refl
    β‰€πŸ™ ≀ω β‰€πŸ™ ≀ω β‰€πŸ™ refl β†’ refl
    β‰€πŸ™ ≀ω β‰€πŸ™ ≀ω ≀ω refl β†’ refl
    β‰€πŸ™ ≀ω ≀ω 𝟘  𝟘  refl β†’ refl
    β‰€πŸ™ ≀ω ≀ω 𝟘  β‰€πŸ™ refl β†’ refl
    β‰€πŸ™ ≀ω ≀ω 𝟘  ≀ω refl β†’ refl
    β‰€πŸ™ ≀ω ≀ω πŸ™  𝟘  refl β†’ refl
    β‰€πŸ™ ≀ω ≀ω πŸ™  β‰€πŸ™ refl β†’ refl
    β‰€πŸ™ ≀ω ≀ω πŸ™  ≀ω refl β†’ refl
    β‰€πŸ™ ≀ω ≀ω β‰€πŸ™ 𝟘  refl β†’ refl
    β‰€πŸ™ ≀ω ≀ω β‰€πŸ™ β‰€πŸ™ refl β†’ refl
    β‰€πŸ™ ≀ω ≀ω β‰€πŸ™ ≀ω refl β†’ refl
    β‰€πŸ™ ≀ω ≀ω ≀ω 𝟘  refl β†’ refl
    β‰€πŸ™ ≀ω ≀ω ≀ω β‰€πŸ™ refl β†’ refl
    β‰€πŸ™ ≀ω ≀ω ≀ω ≀ω refl β†’ refl
    ≀ω _  𝟘  𝟘  𝟘  refl β†’ refl
    ≀ω _  𝟘  𝟘  β‰€πŸ™ refl β†’ refl
    ≀ω _  𝟘  𝟘  ≀ω refl β†’ refl
    ≀ω _  𝟘  πŸ™  𝟘  refl β†’ refl
    ≀ω _  𝟘  πŸ™  β‰€πŸ™ refl β†’ refl
    ≀ω _  𝟘  πŸ™  ≀ω refl β†’ refl
    ≀ω _  𝟘  β‰€πŸ™ 𝟘  refl β†’ refl
    ≀ω _  𝟘  β‰€πŸ™ β‰€πŸ™ refl β†’ refl
    ≀ω _  𝟘  β‰€πŸ™ ≀ω refl β†’ refl
    ≀ω _  𝟘  ≀ω 𝟘  refl β†’ refl
    ≀ω _  𝟘  ≀ω β‰€πŸ™ refl β†’ refl
    ≀ω _  𝟘  ≀ω ≀ω refl β†’ refl
    ≀ω _  πŸ™  𝟘  𝟘  refl β†’ refl
    ≀ω _  πŸ™  𝟘  β‰€πŸ™ refl β†’ refl
    ≀ω _  πŸ™  𝟘  ≀ω refl β†’ refl
    ≀ω _  πŸ™  πŸ™  𝟘  refl β†’ refl
    ≀ω _  πŸ™  πŸ™  β‰€πŸ™ refl β†’ refl
    ≀ω _  πŸ™  πŸ™  ≀ω refl β†’ refl
    ≀ω _  πŸ™  β‰€πŸ™ 𝟘  refl β†’ refl
    ≀ω _  πŸ™  β‰€πŸ™ β‰€πŸ™ refl β†’ refl
    ≀ω _  πŸ™  β‰€πŸ™ ≀ω refl β†’ refl
    ≀ω _  πŸ™  ≀ω 𝟘  refl β†’ refl
    ≀ω _  πŸ™  ≀ω β‰€πŸ™ refl β†’ refl
    ≀ω _  πŸ™  ≀ω ≀ω refl β†’ refl
    ≀ω _  β‰€πŸ™ 𝟘  𝟘  refl β†’ refl
    ≀ω _  β‰€πŸ™ 𝟘  β‰€πŸ™ refl β†’ refl
    ≀ω _  β‰€πŸ™ 𝟘  ≀ω refl β†’ refl
    ≀ω _  β‰€πŸ™ πŸ™  𝟘  refl β†’ refl
    ≀ω _  β‰€πŸ™ πŸ™  β‰€πŸ™ refl β†’ refl
    ≀ω _  β‰€πŸ™ πŸ™  ≀ω refl β†’ refl
    ≀ω _  β‰€πŸ™ β‰€πŸ™ 𝟘  refl β†’ refl
    ≀ω _  β‰€πŸ™ β‰€πŸ™ β‰€πŸ™ refl β†’ refl
    ≀ω _  β‰€πŸ™ β‰€πŸ™ ≀ω refl β†’ refl
    ≀ω _  β‰€πŸ™ ≀ω 𝟘  refl β†’ refl
    ≀ω _  β‰€πŸ™ ≀ω β‰€πŸ™ refl β†’ refl
    ≀ω _  β‰€πŸ™ ≀ω ≀ω refl β†’ refl
    ≀ω _  ≀ω 𝟘  𝟘  refl β†’ refl
    ≀ω _  ≀ω 𝟘  β‰€πŸ™ refl β†’ refl
    ≀ω _  ≀ω 𝟘  ≀ω refl β†’ refl
    ≀ω _  ≀ω πŸ™  𝟘  refl β†’ refl
    ≀ω _  ≀ω πŸ™  β‰€πŸ™ refl β†’ refl
    ≀ω _  ≀ω πŸ™  ≀ω refl β†’ refl
    ≀ω _  ≀ω β‰€πŸ™ 𝟘  refl β†’ refl
    ≀ω _  ≀ω β‰€πŸ™ β‰€πŸ™ refl β†’ refl
    ≀ω _  ≀ω β‰€πŸ™ ≀ω refl β†’ refl
    ≀ω _  ≀ω ≀ω 𝟘  refl β†’ refl
    ≀ω _  ≀ω ≀ω β‰€πŸ™ refl β†’ refl
    ≀ω _  ≀ω ≀ω ≀ω refl β†’ refl
    _  _  _  _  πŸ™  ()

  nr-suc : βˆ€ r p z s n β†’ nr p r z s n ≀ s + p Β· n + r Β· nr p r z s n
  nr-suc = Ξ» where
    𝟘  𝟘  𝟘  𝟘  𝟘  β†’ refl
    𝟘  𝟘  𝟘  𝟘  πŸ™  β†’ refl
    𝟘  𝟘  𝟘  𝟘  β‰€πŸ™ β†’ refl
    𝟘  𝟘  𝟘  𝟘  ≀ω β†’ refl
    𝟘  𝟘  𝟘  πŸ™  𝟘  β†’ refl
    𝟘  𝟘  𝟘  πŸ™  πŸ™  β†’ refl
    𝟘  𝟘  𝟘  πŸ™  β‰€πŸ™ β†’ refl
    𝟘  𝟘  𝟘  πŸ™  ≀ω β†’ refl
    𝟘  𝟘  𝟘  β‰€πŸ™ 𝟘  β†’ refl
    𝟘  𝟘  𝟘  β‰€πŸ™ πŸ™  β†’ refl
    𝟘  𝟘  𝟘  β‰€πŸ™ β‰€πŸ™ β†’ refl
    𝟘  𝟘  𝟘  β‰€πŸ™ ≀ω β†’ refl
    𝟘  𝟘  𝟘  ≀ω 𝟘  β†’ refl
    𝟘  𝟘  𝟘  ≀ω πŸ™  β†’ refl
    𝟘  𝟘  𝟘  ≀ω β‰€πŸ™ β†’ refl
    𝟘  𝟘  𝟘  ≀ω ≀ω β†’ refl
    𝟘  𝟘  πŸ™  𝟘  𝟘  β†’ refl
    𝟘  𝟘  πŸ™  𝟘  πŸ™  β†’ refl
    𝟘  𝟘  πŸ™  𝟘  β‰€πŸ™ β†’ refl
    𝟘  𝟘  πŸ™  𝟘  ≀ω β†’ refl
    𝟘  𝟘  πŸ™  πŸ™  𝟘  β†’ refl
    𝟘  𝟘  πŸ™  πŸ™  πŸ™  β†’ refl
    𝟘  𝟘  πŸ™  πŸ™  β‰€πŸ™ β†’ refl
    𝟘  𝟘  πŸ™  πŸ™  ≀ω β†’ refl
    𝟘  𝟘  πŸ™  β‰€πŸ™ 𝟘  β†’ refl
    𝟘  𝟘  πŸ™  β‰€πŸ™ πŸ™  β†’ refl
    𝟘  𝟘  πŸ™  β‰€πŸ™ β‰€πŸ™ β†’ refl
    𝟘  𝟘  πŸ™  β‰€πŸ™ ≀ω β†’ refl
    𝟘  𝟘  πŸ™  ≀ω 𝟘  β†’ refl
    𝟘  𝟘  πŸ™  ≀ω πŸ™  β†’ refl
    𝟘  𝟘  πŸ™  ≀ω β‰€πŸ™ β†’ refl
    𝟘  𝟘  πŸ™  ≀ω ≀ω β†’ refl
    𝟘  𝟘  β‰€πŸ™ 𝟘  𝟘  β†’ refl
    𝟘  𝟘  β‰€πŸ™ 𝟘  πŸ™  β†’ refl
    𝟘  𝟘  β‰€πŸ™ 𝟘  β‰€πŸ™ β†’ refl
    𝟘  𝟘  β‰€πŸ™ 𝟘  ≀ω β†’ refl
    𝟘  𝟘  β‰€πŸ™ πŸ™  𝟘  β†’ refl
    𝟘  𝟘  β‰€πŸ™ πŸ™  πŸ™  β†’ refl
    𝟘  𝟘  β‰€πŸ™ πŸ™  β‰€πŸ™ β†’ refl
    𝟘  𝟘  β‰€πŸ™ πŸ™  ≀ω β†’ refl
    𝟘  𝟘  β‰€πŸ™ β‰€πŸ™ 𝟘  β†’ refl
    𝟘  𝟘  β‰€πŸ™ β‰€πŸ™ πŸ™  β†’ refl
    𝟘  𝟘  β‰€πŸ™ β‰€πŸ™ β‰€πŸ™ β†’ refl
    𝟘  𝟘  β‰€πŸ™ β‰€πŸ™ ≀ω β†’ refl
    𝟘  𝟘  β‰€πŸ™ ≀ω 𝟘  β†’ refl
    𝟘  𝟘  β‰€πŸ™ ≀ω πŸ™  β†’ refl
    𝟘  𝟘  β‰€πŸ™ ≀ω β‰€πŸ™ β†’ refl
    𝟘  𝟘  β‰€πŸ™ ≀ω ≀ω β†’ refl
    𝟘  𝟘  ≀ω 𝟘  𝟘  β†’ refl
    𝟘  𝟘  ≀ω 𝟘  πŸ™  β†’ refl
    𝟘  𝟘  ≀ω 𝟘  β‰€πŸ™ β†’ refl
    𝟘  𝟘  ≀ω 𝟘  ≀ω β†’ refl
    𝟘  𝟘  ≀ω πŸ™  𝟘  β†’ refl
    𝟘  𝟘  ≀ω πŸ™  πŸ™  β†’ refl
    𝟘  𝟘  ≀ω πŸ™  β‰€πŸ™ β†’ refl
    𝟘  𝟘  ≀ω πŸ™  ≀ω β†’ refl
    𝟘  𝟘  ≀ω β‰€πŸ™ 𝟘  β†’ refl
    𝟘  𝟘  ≀ω β‰€πŸ™ πŸ™  β†’ refl
    𝟘  𝟘  ≀ω β‰€πŸ™ β‰€πŸ™ β†’ refl
    𝟘  𝟘  ≀ω β‰€πŸ™ ≀ω β†’ refl
    𝟘  𝟘  ≀ω ≀ω 𝟘  β†’ refl
    𝟘  𝟘  ≀ω ≀ω πŸ™  β†’ refl
    𝟘  𝟘  ≀ω ≀ω β‰€πŸ™ β†’ refl
    𝟘  𝟘  ≀ω ≀ω ≀ω β†’ refl
    𝟘  πŸ™  𝟘  𝟘  𝟘  β†’ refl
    𝟘  πŸ™  𝟘  𝟘  πŸ™  β†’ refl
    𝟘  πŸ™  𝟘  𝟘  β‰€πŸ™ β†’ refl
    𝟘  πŸ™  𝟘  𝟘  ≀ω β†’ refl
    𝟘  πŸ™  𝟘  πŸ™  𝟘  β†’ refl
    𝟘  πŸ™  𝟘  πŸ™  πŸ™  β†’ refl
    𝟘  πŸ™  𝟘  πŸ™  β‰€πŸ™ β†’ refl
    𝟘  πŸ™  𝟘  πŸ™  ≀ω β†’ refl
    𝟘  πŸ™  𝟘  β‰€πŸ™ 𝟘  β†’ refl
    𝟘  πŸ™  𝟘  β‰€πŸ™ πŸ™  β†’ refl
    𝟘  πŸ™  𝟘  β‰€πŸ™ β‰€πŸ™ β†’ refl
    𝟘  πŸ™  𝟘  β‰€πŸ™ ≀ω β†’ refl
    𝟘  πŸ™  𝟘  ≀ω 𝟘  β†’ refl
    𝟘  πŸ™  𝟘  ≀ω πŸ™  β†’ refl
    𝟘  πŸ™  𝟘  ≀ω β‰€πŸ™ β†’ refl
    𝟘  πŸ™  𝟘  ≀ω ≀ω β†’ refl
    𝟘  πŸ™  πŸ™  𝟘  𝟘  β†’ refl
    𝟘  πŸ™  πŸ™  𝟘  πŸ™  β†’ refl
    𝟘  πŸ™  πŸ™  𝟘  β‰€πŸ™ β†’ refl
    𝟘  πŸ™  πŸ™  𝟘  ≀ω β†’ refl
    𝟘  πŸ™  πŸ™  πŸ™  𝟘  β†’ refl
    𝟘  πŸ™  πŸ™  πŸ™  πŸ™  β†’ refl
    𝟘  πŸ™  πŸ™  πŸ™  β‰€πŸ™ β†’ refl
    𝟘  πŸ™  πŸ™  πŸ™  ≀ω β†’ refl
    𝟘  πŸ™  πŸ™  β‰€πŸ™ 𝟘  β†’ refl
    𝟘  πŸ™  πŸ™  β‰€πŸ™ πŸ™  β†’ refl
    𝟘  πŸ™  πŸ™  β‰€πŸ™ β‰€πŸ™ β†’ refl
    𝟘  πŸ™  πŸ™  β‰€πŸ™ ≀ω β†’ refl
    𝟘  πŸ™  πŸ™  ≀ω 𝟘  β†’ refl
    𝟘  πŸ™  πŸ™  ≀ω πŸ™  β†’ refl
    𝟘  πŸ™  πŸ™  ≀ω β‰€πŸ™ β†’ refl
    𝟘  πŸ™  πŸ™  ≀ω ≀ω β†’ refl
    𝟘  πŸ™  β‰€πŸ™ 𝟘  𝟘  β†’ refl
    𝟘  πŸ™  β‰€πŸ™ 𝟘  πŸ™  β†’ refl
    𝟘  πŸ™  β‰€πŸ™ 𝟘  β‰€πŸ™ β†’ refl
    𝟘  πŸ™  β‰€πŸ™ 𝟘  ≀ω β†’ refl
    𝟘  πŸ™  β‰€πŸ™ πŸ™  𝟘  β†’ refl
    𝟘  πŸ™  β‰€πŸ™ πŸ™  πŸ™  β†’ refl
    𝟘  πŸ™  β‰€πŸ™ πŸ™  β‰€πŸ™ β†’ refl
    𝟘  πŸ™  β‰€πŸ™ πŸ™  ≀ω β†’ refl
    𝟘  πŸ™  β‰€πŸ™ β‰€πŸ™ 𝟘  β†’ refl
    𝟘  πŸ™  β‰€πŸ™ β‰€πŸ™ πŸ™  β†’ refl
    𝟘  πŸ™  β‰€πŸ™ β‰€πŸ™ β‰€πŸ™ β†’ refl
    𝟘  πŸ™  β‰€πŸ™ β‰€πŸ™ ≀ω β†’ refl
    𝟘  πŸ™  β‰€πŸ™ ≀ω 𝟘  β†’ refl
    𝟘  πŸ™  β‰€πŸ™ ≀ω πŸ™  β†’ refl
    𝟘  πŸ™  β‰€πŸ™ ≀ω β‰€πŸ™ β†’ refl
    𝟘  πŸ™  β‰€πŸ™ ≀ω ≀ω β†’ refl
    𝟘  πŸ™  ≀ω 𝟘  𝟘  β†’ refl
    𝟘  πŸ™  ≀ω 𝟘  πŸ™  β†’ refl
    𝟘  πŸ™  ≀ω 𝟘  β‰€πŸ™ β†’ refl
    𝟘  πŸ™  ≀ω 𝟘  ≀ω β†’ refl
    𝟘  πŸ™  ≀ω πŸ™  𝟘  β†’ refl
    𝟘  πŸ™  ≀ω πŸ™  πŸ™  β†’ refl
    𝟘  πŸ™  ≀ω πŸ™  β‰€πŸ™ β†’ refl
    𝟘  πŸ™  ≀ω πŸ™  ≀ω β†’ refl
    𝟘  πŸ™  ≀ω β‰€πŸ™ 𝟘  β†’ refl
    𝟘  πŸ™  ≀ω β‰€πŸ™ πŸ™  β†’ refl
    𝟘  πŸ™  ≀ω β‰€πŸ™ β‰€πŸ™ β†’ refl
    𝟘  πŸ™  ≀ω β‰€πŸ™ ≀ω β†’ refl
    𝟘  πŸ™  ≀ω ≀ω 𝟘  β†’ refl
    𝟘  πŸ™  ≀ω ≀ω πŸ™  β†’ refl
    𝟘  πŸ™  ≀ω ≀ω β‰€πŸ™ β†’ refl
    𝟘  πŸ™  ≀ω ≀ω ≀ω β†’ refl
    𝟘  β‰€πŸ™ 𝟘  𝟘  𝟘  β†’ refl
    𝟘  β‰€πŸ™ 𝟘  𝟘  πŸ™  β†’ refl
    𝟘  β‰€πŸ™ 𝟘  𝟘  β‰€πŸ™ β†’ refl
    𝟘  β‰€πŸ™ 𝟘  𝟘  ≀ω β†’ refl
    𝟘  β‰€πŸ™ 𝟘  πŸ™  𝟘  β†’ refl
    𝟘  β‰€πŸ™ 𝟘  πŸ™  πŸ™  β†’ refl
    𝟘  β‰€πŸ™ 𝟘  πŸ™  β‰€πŸ™ β†’ refl
    𝟘  β‰€πŸ™ 𝟘  πŸ™  ≀ω β†’ refl
    𝟘  β‰€πŸ™ 𝟘  β‰€πŸ™ 𝟘  β†’ refl
    𝟘  β‰€πŸ™ 𝟘  β‰€πŸ™ πŸ™  β†’ refl
    𝟘  β‰€πŸ™ 𝟘  β‰€πŸ™ β‰€πŸ™ β†’ refl
    𝟘  β‰€πŸ™ 𝟘  β‰€πŸ™ ≀ω β†’ refl
    𝟘  β‰€πŸ™ 𝟘  ≀ω 𝟘  β†’ refl
    𝟘  β‰€πŸ™ 𝟘  ≀ω πŸ™  β†’ refl
    𝟘  β‰€πŸ™ 𝟘  ≀ω β‰€πŸ™ β†’ refl
    𝟘  β‰€πŸ™ 𝟘  ≀ω ≀ω β†’ refl
    𝟘  β‰€πŸ™ πŸ™  𝟘  𝟘  β†’ refl
    𝟘  β‰€πŸ™ πŸ™  𝟘  πŸ™  β†’ refl
    𝟘  β‰€πŸ™ πŸ™  𝟘  β‰€πŸ™ β†’ refl
    𝟘  β‰€πŸ™ πŸ™  𝟘  ≀ω β†’ refl
    𝟘  β‰€πŸ™ πŸ™  πŸ™  𝟘  β†’ refl
    𝟘  β‰€πŸ™ πŸ™  πŸ™  πŸ™  β†’ refl
    𝟘  β‰€πŸ™ πŸ™  πŸ™  β‰€πŸ™ β†’ refl
    𝟘  β‰€πŸ™ πŸ™  πŸ™  ≀ω β†’ refl
    𝟘  β‰€πŸ™ πŸ™  β‰€πŸ™ 𝟘  β†’ refl
    𝟘  β‰€πŸ™ πŸ™  β‰€πŸ™ πŸ™  β†’ refl
    𝟘  β‰€πŸ™ πŸ™  β‰€πŸ™ β‰€πŸ™ β†’ refl
    𝟘  β‰€πŸ™ πŸ™  β‰€πŸ™ ≀ω β†’ refl
    𝟘  β‰€πŸ™ πŸ™  ≀ω 𝟘  β†’ refl
    𝟘  β‰€πŸ™ πŸ™  ≀ω πŸ™  β†’ refl
    𝟘  β‰€πŸ™ πŸ™  ≀ω β‰€πŸ™ β†’ refl
    𝟘  β‰€πŸ™ πŸ™  ≀ω ≀ω β†’ refl
    𝟘  β‰€πŸ™ β‰€πŸ™ 𝟘  𝟘  β†’ refl
    𝟘  β‰€πŸ™ β‰€πŸ™ 𝟘  πŸ™  β†’ refl
    𝟘  β‰€πŸ™ β‰€πŸ™ 𝟘  β‰€πŸ™ β†’ refl
    𝟘  β‰€πŸ™ β‰€πŸ™ 𝟘  ≀ω β†’ refl
    𝟘  β‰€πŸ™ β‰€πŸ™ πŸ™  𝟘  β†’ refl
    𝟘  β‰€πŸ™ β‰€πŸ™ πŸ™  πŸ™  β†’ refl
    𝟘  β‰€πŸ™ β‰€πŸ™ πŸ™  β‰€πŸ™ β†’ refl
    𝟘  β‰€πŸ™ β‰€πŸ™ πŸ™  ≀ω β†’ refl
    𝟘  β‰€πŸ™ β‰€πŸ™ β‰€πŸ™ 𝟘  β†’ refl
    𝟘  β‰€πŸ™ β‰€πŸ™ β‰€πŸ™ πŸ™  β†’ refl
    𝟘  β‰€πŸ™ β‰€πŸ™ β‰€πŸ™ β‰€πŸ™ β†’ refl
    𝟘  β‰€πŸ™ β‰€πŸ™ β‰€πŸ™ ≀ω β†’ refl
    𝟘  β‰€πŸ™ β‰€πŸ™ ≀ω 𝟘  β†’ refl
    𝟘  β‰€πŸ™ β‰€πŸ™ ≀ω πŸ™  β†’ refl
    𝟘  β‰€πŸ™ β‰€πŸ™ ≀ω β‰€πŸ™ β†’ refl
    𝟘  β‰€πŸ™ β‰€πŸ™ ≀ω ≀ω β†’ refl
    𝟘  β‰€πŸ™ ≀ω 𝟘  𝟘  β†’ refl
    𝟘  β‰€πŸ™ ≀ω 𝟘  πŸ™  β†’ refl
    𝟘  β‰€πŸ™ ≀ω 𝟘  β‰€πŸ™ β†’ refl
    𝟘  β‰€πŸ™ ≀ω 𝟘  ≀ω β†’ refl
    𝟘  β‰€πŸ™ ≀ω πŸ™  𝟘  β†’ refl
    𝟘  β‰€πŸ™ ≀ω πŸ™  πŸ™  β†’ refl
    𝟘  β‰€πŸ™ ≀ω πŸ™  β‰€πŸ™ β†’ refl
    𝟘  β‰€πŸ™ ≀ω πŸ™  ≀ω β†’ refl
    𝟘  β‰€πŸ™ ≀ω β‰€πŸ™ 𝟘  β†’ refl
    𝟘  β‰€πŸ™ ≀ω β‰€πŸ™ πŸ™  β†’ refl
    𝟘  β‰€πŸ™ ≀ω β‰€πŸ™ β‰€πŸ™ β†’ refl
    𝟘  β‰€πŸ™ ≀ω β‰€πŸ™ ≀ω β†’ refl
    𝟘  β‰€πŸ™ ≀ω ≀ω 𝟘  β†’ refl
    𝟘  β‰€πŸ™ ≀ω ≀ω πŸ™  β†’ refl
    𝟘  β‰€πŸ™ ≀ω ≀ω β‰€πŸ™ β†’ refl
    𝟘  β‰€πŸ™ ≀ω ≀ω ≀ω β†’ refl
    𝟘  ≀ω 𝟘  𝟘  𝟘  β†’ refl
    𝟘  ≀ω 𝟘  𝟘  πŸ™  β†’ refl
    𝟘  ≀ω 𝟘  𝟘  β‰€πŸ™ β†’ refl
    𝟘  ≀ω 𝟘  𝟘  ≀ω β†’ refl
    𝟘  ≀ω 𝟘  πŸ™  𝟘  β†’ refl
    𝟘  ≀ω 𝟘  πŸ™  πŸ™  β†’ refl
    𝟘  ≀ω 𝟘  πŸ™  β‰€πŸ™ β†’ refl
    𝟘  ≀ω 𝟘  πŸ™  ≀ω β†’ refl
    𝟘  ≀ω 𝟘  β‰€πŸ™ 𝟘  β†’ refl
    𝟘  ≀ω 𝟘  β‰€πŸ™ πŸ™  β†’ refl
    𝟘  ≀ω 𝟘  β‰€πŸ™ β‰€πŸ™ β†’ refl
    𝟘  ≀ω 𝟘  β‰€πŸ™ ≀ω β†’ refl
    𝟘  ≀ω 𝟘  ≀ω 𝟘  β†’ refl
    𝟘  ≀ω 𝟘  ≀ω πŸ™  β†’ refl
    𝟘  ≀ω 𝟘  ≀ω β‰€πŸ™ β†’ refl
    𝟘  ≀ω 𝟘  ≀ω ≀ω β†’ refl
    𝟘  ≀ω πŸ™  𝟘  𝟘  β†’ refl
    𝟘  ≀ω πŸ™  𝟘  πŸ™  β†’ refl
    𝟘  ≀ω πŸ™  𝟘  β‰€πŸ™ β†’ refl
    𝟘  ≀ω πŸ™  𝟘  ≀ω β†’ refl
    𝟘  ≀ω πŸ™  πŸ™  𝟘  β†’ refl
    𝟘  ≀ω πŸ™  πŸ™  πŸ™  β†’ refl
    𝟘  ≀ω πŸ™  πŸ™  β‰€πŸ™ β†’ refl
    𝟘  ≀ω πŸ™  πŸ™  ≀ω β†’ refl
    𝟘  ≀ω πŸ™  β‰€πŸ™ 𝟘  β†’ refl
    𝟘  ≀ω πŸ™  β‰€πŸ™ πŸ™  β†’ refl
    𝟘  ≀ω πŸ™  β‰€πŸ™ β‰€πŸ™ β†’ refl
    𝟘  ≀ω πŸ™  β‰€πŸ™ ≀ω β†’ refl
    𝟘  ≀ω πŸ™  ≀ω 𝟘  β†’ refl
    𝟘  ≀ω πŸ™  ≀ω πŸ™  β†’ refl
    𝟘  ≀ω πŸ™  ≀ω β‰€πŸ™ β†’ refl
    𝟘  ≀ω πŸ™  ≀ω ≀ω β†’ refl
    𝟘  ≀ω β‰€πŸ™ 𝟘  𝟘  β†’ refl
    𝟘  ≀ω β‰€πŸ™ 𝟘  πŸ™  β†’ refl
    𝟘  ≀ω β‰€πŸ™ 𝟘  β‰€πŸ™ β†’ refl
    𝟘  ≀ω β‰€πŸ™ 𝟘  ≀ω β†’ refl
    𝟘  ≀ω β‰€πŸ™ πŸ™  𝟘  β†’ refl
    𝟘  ≀ω β‰€πŸ™ πŸ™  πŸ™  β†’ refl
    𝟘  ≀ω β‰€πŸ™ πŸ™  β‰€πŸ™ β†’ refl
    𝟘  ≀ω β‰€πŸ™ πŸ™  ≀ω β†’ refl
    𝟘  ≀ω β‰€πŸ™ β‰€πŸ™ 𝟘  β†’ refl
    𝟘  ≀ω β‰€πŸ™ β‰€πŸ™ πŸ™  β†’ refl
    𝟘  ≀ω β‰€πŸ™ β‰€πŸ™ β‰€πŸ™ β†’ refl
    𝟘  ≀ω β‰€πŸ™ β‰€πŸ™ ≀ω β†’ refl
    𝟘  ≀ω β‰€πŸ™ ≀ω 𝟘  β†’ refl
    𝟘  ≀ω β‰€πŸ™ ≀ω πŸ™  β†’ refl
    𝟘  ≀ω β‰€πŸ™ ≀ω β‰€πŸ™ β†’ refl
    𝟘  ≀ω β‰€πŸ™ ≀ω ≀ω β†’ refl
    𝟘  ≀ω ≀ω 𝟘  𝟘  β†’ refl
    𝟘  ≀ω ≀ω 𝟘  πŸ™  β†’ refl
    𝟘  ≀ω ≀ω 𝟘  β‰€πŸ™ β†’ refl
    𝟘  ≀ω ≀ω 𝟘  ≀ω β†’ refl
    𝟘  ≀ω ≀ω πŸ™  𝟘  β†’ refl
    𝟘  ≀ω ≀ω πŸ™  πŸ™  β†’ refl
    𝟘  ≀ω ≀ω πŸ™  β‰€πŸ™ β†’ refl
    𝟘  ≀ω ≀ω πŸ™  ≀ω β†’ refl
    𝟘  ≀ω ≀ω β‰€πŸ™ 𝟘  β†’ refl
    𝟘  ≀ω ≀ω β‰€πŸ™ πŸ™  β†’ refl
    𝟘  ≀ω ≀ω β‰€πŸ™ β‰€πŸ™ β†’ refl
    𝟘  ≀ω ≀ω β‰€πŸ™ ≀ω β†’ refl
    𝟘  ≀ω ≀ω ≀ω 𝟘  β†’ refl
    𝟘  ≀ω ≀ω ≀ω πŸ™  β†’ refl
    𝟘  ≀ω ≀ω ≀ω β‰€πŸ™ β†’ refl
    𝟘  ≀ω ≀ω ≀ω ≀ω β†’ refl
    πŸ™  𝟘  𝟘  𝟘  𝟘  β†’ refl
    πŸ™  𝟘  𝟘  𝟘  πŸ™  β†’ refl
    πŸ™  𝟘  𝟘  𝟘  β‰€πŸ™ β†’ refl
    πŸ™  𝟘  𝟘  𝟘  ≀ω β†’ refl
    πŸ™  𝟘  𝟘  πŸ™  𝟘  β†’ refl
    πŸ™  𝟘  𝟘  πŸ™  πŸ™  β†’ refl
    πŸ™  𝟘  𝟘  πŸ™  β‰€πŸ™ β†’ refl
    πŸ™  𝟘  𝟘  πŸ™  ≀ω β†’ refl
    πŸ™  𝟘  𝟘  β‰€πŸ™ 𝟘  β†’ refl
    πŸ™  𝟘  𝟘  β‰€πŸ™ πŸ™  β†’ refl
    πŸ™  𝟘  𝟘  β‰€πŸ™ β‰€πŸ™ β†’ refl
    πŸ™  𝟘  𝟘  β‰€πŸ™ ≀ω β†’ refl
    πŸ™  𝟘  𝟘  ≀ω 𝟘  β†’ refl
    πŸ™  𝟘  𝟘  ≀ω πŸ™  β†’ refl
    πŸ™  𝟘  𝟘  ≀ω β‰€πŸ™ β†’ refl
    πŸ™  𝟘  𝟘  ≀ω ≀ω β†’ refl
    πŸ™  𝟘  πŸ™  𝟘  𝟘  β†’ refl
    πŸ™  𝟘  πŸ™  𝟘  πŸ™  β†’ refl
    πŸ™  𝟘  πŸ™  𝟘  β‰€πŸ™ β†’ refl
    πŸ™  𝟘  πŸ™  𝟘  ≀ω β†’ refl
    πŸ™  𝟘  πŸ™  πŸ™  𝟘  β†’ refl
    πŸ™  𝟘  πŸ™  πŸ™  πŸ™  β†’ refl
    πŸ™  𝟘  πŸ™  πŸ™  β‰€πŸ™ β†’ refl
    πŸ™  𝟘  πŸ™  πŸ™  ≀ω β†’ refl
    πŸ™  𝟘  πŸ™  β‰€πŸ™ 𝟘  β†’ refl
    πŸ™  𝟘  πŸ™  β‰€πŸ™ πŸ™  β†’ refl
    πŸ™  𝟘  πŸ™  β‰€πŸ™ β‰€πŸ™ β†’ refl
    πŸ™  𝟘  πŸ™  β‰€πŸ™ ≀ω β†’ refl
    πŸ™  𝟘  πŸ™  ≀ω 𝟘  β†’ refl
    πŸ™  𝟘  πŸ™  ≀ω πŸ™  β†’ refl
    πŸ™  𝟘  πŸ™  ≀ω β‰€πŸ™ β†’ refl
    πŸ™  𝟘  πŸ™  ≀ω ≀ω β†’ refl
    πŸ™  𝟘  β‰€πŸ™ 𝟘  𝟘  β†’ refl
    πŸ™  𝟘  β‰€πŸ™ 𝟘  πŸ™  β†’ refl
    πŸ™  𝟘  β‰€πŸ™ 𝟘  β‰€πŸ™ β†’ refl
    πŸ™  𝟘  β‰€πŸ™ 𝟘  ≀ω β†’ refl
    πŸ™  𝟘  β‰€πŸ™ πŸ™  𝟘  β†’ refl
    πŸ™  𝟘  β‰€πŸ™ πŸ™  πŸ™  β†’ refl
    πŸ™  𝟘  β‰€πŸ™ πŸ™  β‰€πŸ™ β†’ refl
    πŸ™  𝟘  β‰€πŸ™ πŸ™  ≀ω β†’ refl
    πŸ™  𝟘  β‰€πŸ™ β‰€πŸ™ 𝟘  β†’ refl
    πŸ™  𝟘  β‰€πŸ™ β‰€πŸ™ πŸ™  β†’ refl
    πŸ™  𝟘  β‰€πŸ™ β‰€πŸ™ β‰€πŸ™ β†’ refl
    πŸ™  𝟘  β‰€πŸ™ β‰€πŸ™ ≀ω β†’ refl
    πŸ™  𝟘  β‰€πŸ™ ≀ω 𝟘  β†’ refl
    πŸ™  𝟘  β‰€πŸ™ ≀ω πŸ™  β†’ refl
    πŸ™  𝟘  β‰€πŸ™ ≀ω β‰€πŸ™ β†’ refl
    πŸ™  𝟘  β‰€πŸ™ ≀ω ≀ω β†’ refl
    πŸ™  𝟘  ≀ω 𝟘  𝟘  β†’ refl
    πŸ™  𝟘  ≀ω 𝟘  πŸ™  β†’ refl
    πŸ™  𝟘  ≀ω 𝟘  β‰€πŸ™ β†’ refl
    πŸ™  𝟘  ≀ω 𝟘  ≀ω β†’ refl
    πŸ™  𝟘  ≀ω πŸ™  𝟘  β†’ refl
    πŸ™  𝟘  ≀ω πŸ™  πŸ™  β†’ refl
    πŸ™  𝟘  ≀ω πŸ™  β‰€πŸ™ β†’ refl
    πŸ™  𝟘  ≀ω πŸ™  ≀ω β†’ refl
    πŸ™  𝟘  ≀ω β‰€πŸ™ 𝟘  β†’ refl
    πŸ™  𝟘  ≀ω β‰€πŸ™ πŸ™  β†’ refl
    πŸ™  𝟘  ≀ω β‰€πŸ™ β‰€πŸ™ β†’ refl
    πŸ™  𝟘  ≀ω β‰€πŸ™ ≀ω β†’ refl
    πŸ™  𝟘  ≀ω ≀ω 𝟘  β†’ refl
    πŸ™  𝟘  ≀ω ≀ω πŸ™  β†’ refl
    πŸ™  𝟘  ≀ω ≀ω β‰€πŸ™ β†’ refl
    πŸ™  𝟘  ≀ω ≀ω ≀ω β†’ refl
    πŸ™  πŸ™  𝟘  𝟘  𝟘  β†’ refl
    πŸ™  πŸ™  𝟘  𝟘  πŸ™  β†’ refl
    πŸ™  πŸ™  𝟘  𝟘  β‰€πŸ™ β†’ refl
    πŸ™  πŸ™  𝟘  𝟘  ≀ω β†’ refl
    πŸ™  πŸ™  𝟘  πŸ™  𝟘  β†’ refl
    πŸ™  πŸ™  𝟘  πŸ™  πŸ™  β†’ refl
    πŸ™  πŸ™  𝟘  πŸ™  β‰€πŸ™ β†’ refl
    πŸ™  πŸ™  𝟘  πŸ™  ≀ω β†’ refl
    πŸ™  πŸ™  𝟘  β‰€πŸ™ 𝟘  β†’ refl
    πŸ™  πŸ™  𝟘  β‰€πŸ™ πŸ™  β†’ refl
    πŸ™  πŸ™  𝟘  β‰€πŸ™ β‰€πŸ™ β†’ refl
    πŸ™  πŸ™  𝟘  β‰€πŸ™ ≀ω β†’ refl
    πŸ™  πŸ™  𝟘  ≀ω 𝟘  β†’ refl
    πŸ™  πŸ™  𝟘  ≀ω πŸ™  β†’ refl
    πŸ™  πŸ™  𝟘  ≀ω β‰€πŸ™ β†’ refl
    πŸ™  πŸ™  𝟘  ≀ω ≀ω β†’ refl
    πŸ™  πŸ™  πŸ™  𝟘  𝟘  β†’ refl
    πŸ™  πŸ™  πŸ™  𝟘  πŸ™  β†’ refl
    πŸ™  πŸ™  πŸ™  𝟘  β‰€πŸ™ β†’ refl
    πŸ™  πŸ™  πŸ™  𝟘  ≀ω β†’ refl
    πŸ™  πŸ™  πŸ™  πŸ™  𝟘  β†’ refl
    πŸ™  πŸ™  πŸ™  πŸ™  πŸ™  β†’ refl
    πŸ™  πŸ™  πŸ™  πŸ™  β‰€πŸ™ β†’ refl
    πŸ™  πŸ™  πŸ™  πŸ™  ≀ω β†’ refl
    πŸ™  πŸ™  πŸ™  β‰€πŸ™ 𝟘  β†’ refl
    πŸ™  πŸ™  πŸ™  β‰€πŸ™ πŸ™  β†’ refl
    πŸ™  πŸ™  πŸ™  β‰€πŸ™ β‰€πŸ™ β†’ refl
    πŸ™  πŸ™  πŸ™  β‰€πŸ™ ≀ω β†’ refl
    πŸ™  πŸ™  πŸ™  ≀ω 𝟘  β†’ refl
    πŸ™  πŸ™  πŸ™  ≀ω πŸ™  β†’ refl
    πŸ™  πŸ™  πŸ™  ≀ω β‰€πŸ™ β†’ refl
    πŸ™  πŸ™  πŸ™  ≀ω ≀ω β†’ refl
    πŸ™  πŸ™  β‰€πŸ™ 𝟘  𝟘  β†’ refl
    πŸ™  πŸ™  β‰€πŸ™ 𝟘  πŸ™  β†’ refl
    πŸ™  πŸ™  β‰€πŸ™ 𝟘  β‰€πŸ™ β†’ refl
    πŸ™  πŸ™  β‰€πŸ™ 𝟘  ≀ω β†’ refl
    πŸ™  πŸ™  β‰€πŸ™ πŸ™  𝟘  β†’ refl
    πŸ™  πŸ™  β‰€πŸ™ πŸ™  πŸ™  β†’ refl
    πŸ™  πŸ™  β‰€πŸ™ πŸ™  β‰€πŸ™ β†’ refl
    πŸ™  πŸ™  β‰€πŸ™ πŸ™  ≀ω β†’ refl
    πŸ™  πŸ™  β‰€πŸ™ β‰€πŸ™ 𝟘  β†’ refl
    πŸ™  πŸ™  β‰€πŸ™ β‰€πŸ™ πŸ™  β†’ refl
    πŸ™  πŸ™  β‰€πŸ™ β‰€πŸ™ β‰€πŸ™ β†’ refl
    πŸ™  πŸ™  β‰€πŸ™ β‰€πŸ™ ≀ω β†’ refl
    πŸ™  πŸ™  β‰€πŸ™ ≀ω 𝟘  β†’ refl
    πŸ™  πŸ™  β‰€πŸ™ ≀ω πŸ™  β†’ refl
    πŸ™  πŸ™  β‰€πŸ™ ≀ω β‰€πŸ™ β†’ refl
    πŸ™  πŸ™  β‰€πŸ™ ≀ω ≀ω β†’ refl
    πŸ™  πŸ™  ≀ω 𝟘  𝟘  β†’ refl
    πŸ™  πŸ™  ≀ω 𝟘  πŸ™  β†’ refl
    πŸ™  πŸ™  ≀ω 𝟘  β‰€πŸ™ β†’ refl
    πŸ™  πŸ™  ≀ω 𝟘  ≀ω β†’ refl
    πŸ™  πŸ™  ≀ω πŸ™  𝟘  β†’ refl
    πŸ™  πŸ™  ≀ω πŸ™  πŸ™  β†’ refl
    πŸ™  πŸ™  ≀ω πŸ™  β‰€πŸ™ β†’ refl
    πŸ™  πŸ™  ≀ω πŸ™  ≀ω β†’ refl
    πŸ™  πŸ™  ≀ω β‰€πŸ™ 𝟘  β†’ refl
    πŸ™  πŸ™  ≀ω β‰€πŸ™ πŸ™  β†’ refl
    πŸ™  πŸ™  ≀ω β‰€πŸ™ β‰€πŸ™ β†’ refl
    πŸ™  πŸ™  ≀ω β‰€πŸ™ ≀ω β†’ refl
    πŸ™  πŸ™  ≀ω ≀ω 𝟘  β†’ refl
    πŸ™  πŸ™  ≀ω ≀ω πŸ™  β†’ refl
    πŸ™  πŸ™  ≀ω ≀ω β‰€πŸ™ β†’ refl
    πŸ™  πŸ™  ≀ω ≀ω ≀ω β†’ refl
    πŸ™  β‰€πŸ™ 𝟘  𝟘  𝟘  β†’ refl
    πŸ™  β‰€πŸ™ 𝟘  𝟘  πŸ™  β†’ refl
    πŸ™  β‰€πŸ™ 𝟘  𝟘  β‰€πŸ™ β†’ refl
    πŸ™  β‰€πŸ™ 𝟘  𝟘  ≀ω β†’ refl
    πŸ™  β‰€πŸ™ 𝟘  πŸ™  𝟘  β†’ refl
    πŸ™  β‰€πŸ™ 𝟘  πŸ™  πŸ™  β†’ refl
    πŸ™  β‰€πŸ™ 𝟘  πŸ™  β‰€πŸ™ β†’ refl
    πŸ™  β‰€πŸ™ 𝟘  πŸ™  ≀ω β†’ refl
    πŸ™  β‰€πŸ™ 𝟘  β‰€πŸ™ 𝟘  β†’ refl
    πŸ™  β‰€πŸ™ 𝟘  β‰€πŸ™ πŸ™  β†’ refl
    πŸ™  β‰€πŸ™ 𝟘  β‰€πŸ™ β‰€πŸ™ β†’ refl
    πŸ™  β‰€πŸ™ 𝟘  β‰€πŸ™ ≀ω β†’ refl
    πŸ™  β‰€πŸ™ 𝟘  ≀ω 𝟘  β†’ refl
    πŸ™  β‰€πŸ™ 𝟘  ≀ω πŸ™  β†’ refl
    πŸ™  β‰€πŸ™ 𝟘  ≀ω β‰€πŸ™ β†’ refl
    πŸ™  β‰€πŸ™ 𝟘  ≀ω ≀ω β†’ refl
    πŸ™  β‰€πŸ™ πŸ™  𝟘  𝟘  β†’ refl
    πŸ™  β‰€πŸ™ πŸ™  𝟘  πŸ™  β†’ refl
    πŸ™  β‰€πŸ™ πŸ™  𝟘  β‰€πŸ™ β†’ refl
    πŸ™  β‰€πŸ™ πŸ™  𝟘  ≀ω β†’ refl
    πŸ™  β‰€πŸ™ πŸ™  πŸ™  𝟘  β†’ refl
    πŸ™  β‰€πŸ™ πŸ™  πŸ™  πŸ™  β†’ refl
    πŸ™  β‰€πŸ™ πŸ™  πŸ™  β‰€πŸ™ β†’ refl
    πŸ™  β‰€πŸ™ πŸ™  πŸ™  ≀ω β†’ refl
    πŸ™  β‰€πŸ™ πŸ™  β‰€πŸ™ 𝟘  β†’ refl
    πŸ™  β‰€πŸ™ πŸ™  β‰€πŸ™ πŸ™  β†’ refl
    πŸ™  β‰€πŸ™ πŸ™  β‰€πŸ™ β‰€πŸ™ β†’ refl
    πŸ™  β‰€πŸ™ πŸ™  β‰€πŸ™ ≀ω β†’ refl
    πŸ™  β‰€πŸ™ πŸ™  ≀ω 𝟘  β†’ refl
    πŸ™  β‰€πŸ™ πŸ™  ≀ω πŸ™  β†’ refl
    πŸ™  β‰€πŸ™ πŸ™  ≀ω β‰€πŸ™ β†’ refl
    πŸ™  β‰€πŸ™ πŸ™  ≀ω ≀ω β†’ refl
    πŸ™  β‰€πŸ™ β‰€πŸ™ 𝟘  𝟘  β†’ refl
    πŸ™  β‰€πŸ™ β‰€πŸ™ 𝟘  πŸ™  β†’ refl
    πŸ™  β‰€πŸ™ β‰€πŸ™ 𝟘  β‰€πŸ™ β†’ refl
    πŸ™  β‰€πŸ™ β‰€πŸ™ 𝟘  ≀ω β†’ refl
    πŸ™  β‰€πŸ™ β‰€πŸ™ πŸ™  𝟘  β†’ refl
    πŸ™  β‰€πŸ™ β‰€πŸ™ πŸ™  πŸ™  β†’ refl
    πŸ™  β‰€πŸ™ β‰€πŸ™ πŸ™  β‰€πŸ™ β†’ refl
    πŸ™  β‰€πŸ™ β‰€πŸ™ πŸ™  ≀ω β†’ refl
    πŸ™  β‰€πŸ™ β‰€πŸ™ β‰€πŸ™ 𝟘  β†’ refl
    πŸ™  β‰€πŸ™ β‰€πŸ™ β‰€πŸ™ πŸ™  β†’ refl
    πŸ™  β‰€πŸ™ β‰€πŸ™ β‰€πŸ™ β‰€πŸ™ β†’ refl
    πŸ™  β‰€πŸ™ β‰€πŸ™ β‰€πŸ™ ≀ω β†’ refl
    πŸ™  β‰€πŸ™ β‰€πŸ™ ≀ω 𝟘  β†’ refl
    πŸ™  β‰€πŸ™ β‰€πŸ™ ≀ω πŸ™  β†’ refl
    πŸ™  β‰€πŸ™ β‰€πŸ™ ≀ω β‰€πŸ™ β†’ refl
    πŸ™  β‰€πŸ™ β‰€πŸ™ ≀ω ≀ω β†’ refl
    πŸ™  β‰€πŸ™ ≀ω 𝟘  𝟘  β†’ refl
    πŸ™  β‰€πŸ™ ≀ω 𝟘  πŸ™  β†’ refl
    πŸ™  β‰€πŸ™ ≀ω 𝟘  β‰€πŸ™ β†’ refl
    πŸ™  β‰€πŸ™ ≀ω 𝟘  ≀ω β†’ refl
    πŸ™  β‰€πŸ™ ≀ω πŸ™  𝟘  β†’ refl
    πŸ™  β‰€πŸ™ ≀ω πŸ™  πŸ™  β†’ refl
    πŸ™  β‰€πŸ™ ≀ω πŸ™  β‰€πŸ™ β†’ refl
    πŸ™  β‰€πŸ™ ≀ω πŸ™  ≀ω β†’ refl
    πŸ™  β‰€πŸ™ ≀ω β‰€πŸ™ 𝟘  β†’ refl
    πŸ™  β‰€πŸ™ ≀ω β‰€πŸ™ πŸ™  β†’ refl
    πŸ™  β‰€πŸ™ ≀ω β‰€πŸ™ β‰€πŸ™ β†’ refl
    πŸ™  β‰€πŸ™ ≀ω β‰€πŸ™ ≀ω β†’ refl
    πŸ™  β‰€πŸ™ ≀ω ≀ω 𝟘  β†’ refl
    πŸ™  β‰€πŸ™ ≀ω ≀ω πŸ™  β†’ refl
    πŸ™  β‰€πŸ™ ≀ω ≀ω β‰€πŸ™ β†’ refl
    πŸ™  β‰€πŸ™ ≀ω ≀ω ≀ω β†’ refl
    πŸ™  ≀ω 𝟘  𝟘  𝟘  β†’ refl
    πŸ™  ≀ω 𝟘  𝟘  πŸ™  β†’ refl
    πŸ™  ≀ω 𝟘  𝟘  β‰€πŸ™ β†’ refl
    πŸ™  ≀ω 𝟘  𝟘  ≀ω β†’ refl
    πŸ™  ≀ω 𝟘  πŸ™  𝟘  β†’ refl
    πŸ™  ≀ω 𝟘  πŸ™  πŸ™  β†’ refl
    πŸ™  ≀ω 𝟘  πŸ™  β‰€πŸ™ β†’ refl
    πŸ™  ≀ω 𝟘  πŸ™  ≀ω β†’ refl
    πŸ™  ≀ω 𝟘  β‰€πŸ™ 𝟘  β†’ refl
    πŸ™  ≀ω 𝟘  β‰€πŸ™ πŸ™  β†’ refl
    πŸ™  ≀ω 𝟘  β‰€πŸ™ β‰€πŸ™ β†’ refl
    πŸ™  ≀ω 𝟘  β‰€πŸ™ ≀ω β†’ refl
    πŸ™  ≀ω 𝟘  ≀ω 𝟘  β†’ refl
    πŸ™  ≀ω 𝟘  ≀ω πŸ™  β†’ refl
    πŸ™  ≀ω 𝟘  ≀ω β‰€πŸ™ β†’ refl
    πŸ™  ≀ω 𝟘  ≀ω ≀ω β†’ refl
    πŸ™  ≀ω πŸ™  𝟘  𝟘  β†’ refl
    πŸ™  ≀ω πŸ™  𝟘  πŸ™  β†’ refl
    πŸ™  ≀ω πŸ™  𝟘  β‰€πŸ™ β†’ refl
    πŸ™  ≀ω πŸ™  𝟘  ≀ω β†’ refl
    πŸ™  ≀ω πŸ™  πŸ™  𝟘  β†’ refl
    πŸ™  ≀ω πŸ™  πŸ™  πŸ™  β†’ refl
    πŸ™  ≀ω πŸ™  πŸ™  β‰€πŸ™ β†’ refl
    πŸ™  ≀ω πŸ™  πŸ™  ≀ω β†’ refl
    πŸ™  ≀ω πŸ™  β‰€πŸ™ 𝟘  β†’ refl
    πŸ™  ≀ω πŸ™  β‰€πŸ™ πŸ™  β†’ refl
    πŸ™  ≀ω πŸ™  β‰€πŸ™ β‰€πŸ™ β†’ refl
    πŸ™  ≀ω πŸ™  β‰€πŸ™ ≀ω β†’ refl
    πŸ™  ≀ω πŸ™  ≀ω 𝟘  β†’ refl
    πŸ™  ≀ω πŸ™  ≀ω πŸ™  β†’ refl
    πŸ™  ≀ω πŸ™  ≀ω β‰€πŸ™ β†’ refl
    πŸ™  ≀ω πŸ™  ≀ω ≀ω β†’ refl
    πŸ™  ≀ω β‰€πŸ™ 𝟘  𝟘  β†’ refl
    πŸ™  ≀ω β‰€πŸ™ 𝟘  πŸ™  β†’ refl
    πŸ™  ≀ω β‰€πŸ™ 𝟘  β‰€πŸ™ β†’ refl
    πŸ™  ≀ω β‰€πŸ™ 𝟘  ≀ω β†’ refl
    πŸ™  ≀ω β‰€πŸ™ πŸ™  𝟘  β†’ refl
    πŸ™  ≀ω β‰€πŸ™ πŸ™  πŸ™  β†’ refl
    πŸ™  ≀ω β‰€πŸ™ πŸ™  β‰€πŸ™ β†’ refl
    πŸ™  ≀ω β‰€πŸ™ πŸ™  ≀ω β†’ refl
    πŸ™  ≀ω β‰€πŸ™ β‰€πŸ™ 𝟘  β†’ refl
    πŸ™  ≀ω β‰€πŸ™ β‰€πŸ™ πŸ™  β†’ refl
    πŸ™  ≀ω β‰€πŸ™ β‰€πŸ™ β‰€πŸ™ β†’ refl
    πŸ™  ≀ω β‰€πŸ™ β‰€πŸ™ ≀ω β†’ refl
    πŸ™  ≀ω β‰€πŸ™ ≀ω 𝟘  β†’ refl
    πŸ™  ≀ω β‰€πŸ™ ≀ω πŸ™  β†’ refl
    πŸ™  ≀ω β‰€πŸ™ ≀ω β‰€πŸ™ β†’ refl
    πŸ™  ≀ω β‰€πŸ™ ≀ω ≀ω β†’ refl
    πŸ™  ≀ω ≀ω 𝟘  𝟘  β†’ refl
    πŸ™  ≀ω ≀ω 𝟘  πŸ™  β†’ refl
    πŸ™  ≀ω ≀ω 𝟘  β‰€πŸ™ β†’ refl
    πŸ™  ≀ω ≀ω 𝟘  ≀ω β†’ refl
    πŸ™  ≀ω ≀ω πŸ™  𝟘  β†’ refl
    πŸ™  ≀ω ≀ω πŸ™  πŸ™  β†’ refl
    πŸ™  ≀ω ≀ω πŸ™  β‰€πŸ™ β†’ refl
    πŸ™  ≀ω ≀ω πŸ™  ≀ω β†’ refl
    πŸ™  ≀ω ≀ω β‰€πŸ™ 𝟘  β†’ refl
    πŸ™  ≀ω ≀ω β‰€πŸ™ πŸ™  β†’ refl
    πŸ™  ≀ω ≀ω β‰€πŸ™ β‰€πŸ™ β†’ refl
    πŸ™  ≀ω ≀ω β‰€πŸ™ ≀ω β†’ refl
    πŸ™  ≀ω ≀ω ≀ω 𝟘  β†’ refl
    πŸ™  ≀ω ≀ω ≀ω πŸ™  β†’ refl
    πŸ™  ≀ω ≀ω ≀ω β‰€πŸ™ β†’ refl
    πŸ™  ≀ω ≀ω ≀ω ≀ω β†’ refl
    β‰€πŸ™ 𝟘  𝟘  𝟘  𝟘  β†’ refl
    β‰€πŸ™ 𝟘  𝟘  𝟘  πŸ™  β†’ refl
    β‰€πŸ™ 𝟘  𝟘  𝟘  β‰€πŸ™ β†’ refl
    β‰€πŸ™ 𝟘  𝟘  𝟘  ≀ω β†’ refl
    β‰€πŸ™ 𝟘  𝟘  πŸ™  𝟘  β†’ refl
    β‰€πŸ™ 𝟘  𝟘  πŸ™  πŸ™  β†’ refl
    β‰€πŸ™ 𝟘  𝟘  πŸ™  β‰€πŸ™ β†’ refl
    β‰€πŸ™ 𝟘  𝟘  πŸ™  ≀ω β†’ refl
    β‰€πŸ™ 𝟘  𝟘  β‰€πŸ™ 𝟘  β†’ refl
    β‰€πŸ™ 𝟘  𝟘  β‰€πŸ™ πŸ™  β†’ refl
    β‰€πŸ™ 𝟘  𝟘  β‰€πŸ™ β‰€πŸ™ β†’ refl
    β‰€πŸ™ 𝟘  𝟘  β‰€πŸ™ ≀ω β†’ refl
    β‰€πŸ™ 𝟘  𝟘  ≀ω 𝟘  β†’ refl
    β‰€πŸ™ 𝟘  𝟘  ≀ω πŸ™  β†’ refl
    β‰€πŸ™ 𝟘  𝟘  ≀ω β‰€πŸ™ β†’ refl
    β‰€πŸ™ 𝟘  𝟘  ≀ω ≀ω β†’ refl
    β‰€πŸ™ 𝟘  πŸ™  𝟘  𝟘  β†’ refl
    β‰€πŸ™ 𝟘  πŸ™  𝟘  πŸ™  β†’ refl
    β‰€πŸ™ 𝟘  πŸ™  𝟘  β‰€πŸ™ β†’ refl
    β‰€πŸ™ 𝟘  πŸ™  𝟘  ≀ω β†’ refl
    β‰€πŸ™ 𝟘  πŸ™  πŸ™  𝟘  β†’ refl
    β‰€πŸ™ 𝟘  πŸ™  πŸ™  πŸ™  β†’ refl
    β‰€πŸ™ 𝟘  πŸ™  πŸ™  β‰€πŸ™ β†’ refl
    β‰€πŸ™ 𝟘  πŸ™  πŸ™  ≀ω β†’ refl
    β‰€πŸ™ 𝟘  πŸ™  β‰€πŸ™ 𝟘  β†’ refl
    β‰€πŸ™ 𝟘  πŸ™  β‰€πŸ™ πŸ™  β†’ refl
    β‰€πŸ™ 𝟘  πŸ™  β‰€πŸ™ β‰€πŸ™ β†’ refl
    β‰€πŸ™ 𝟘  πŸ™  β‰€πŸ™ ≀ω β†’ refl
    β‰€πŸ™ 𝟘  πŸ™  ≀ω 𝟘  β†’ refl
    β‰€πŸ™ 𝟘  πŸ™  ≀ω πŸ™  β†’ refl
    β‰€πŸ™ 𝟘  πŸ™  ≀ω β‰€πŸ™ β†’ refl
    β‰€πŸ™ 𝟘  πŸ™  ≀ω ≀ω β†’ refl
    β‰€πŸ™ 𝟘  β‰€πŸ™ 𝟘  𝟘  β†’ refl
    β‰€πŸ™ 𝟘  β‰€πŸ™ 𝟘  πŸ™  β†’ refl
    β‰€πŸ™ 𝟘  β‰€πŸ™ 𝟘  β‰€πŸ™ β†’ refl
    β‰€πŸ™ 𝟘  β‰€πŸ™ 𝟘  ≀ω β†’ refl
    β‰€πŸ™ 𝟘  β‰€πŸ™ πŸ™  𝟘  β†’ refl
    β‰€πŸ™ 𝟘  β‰€πŸ™ πŸ™  πŸ™  β†’ refl
    β‰€πŸ™ 𝟘  β‰€πŸ™ πŸ™  β‰€πŸ™ β†’ refl
    β‰€πŸ™ 𝟘  β‰€πŸ™ πŸ™  ≀ω β†’ refl
    β‰€πŸ™ 𝟘  β‰€πŸ™ β‰€πŸ™ 𝟘  β†’ refl
    β‰€πŸ™ 𝟘  β‰€πŸ™ β‰€πŸ™ πŸ™  β†’ refl
    β‰€πŸ™ 𝟘  β‰€πŸ™ β‰€πŸ™ β‰€πŸ™ β†’ refl
    β‰€πŸ™ 𝟘  β‰€πŸ™ β‰€πŸ™ ≀ω β†’ refl
    β‰€πŸ™ 𝟘  β‰€πŸ™ ≀ω 𝟘  β†’ refl
    β‰€πŸ™ 𝟘  β‰€πŸ™ ≀ω πŸ™  β†’ refl
    β‰€πŸ™ 𝟘  β‰€πŸ™ ≀ω β‰€πŸ™ β†’ refl
    β‰€πŸ™ 𝟘  β‰€πŸ™ ≀ω ≀ω β†’ refl
    β‰€πŸ™ 𝟘  ≀ω 𝟘  𝟘  β†’ refl
    β‰€πŸ™ 𝟘  ≀ω 𝟘  πŸ™  β†’ refl
    β‰€πŸ™ 𝟘  ≀ω 𝟘  β‰€πŸ™ β†’ refl
    β‰€πŸ™ 𝟘  ≀ω 𝟘  ≀ω β†’ refl
    β‰€πŸ™ 𝟘  ≀ω πŸ™  𝟘  β†’ refl
    β‰€πŸ™ 𝟘  ≀ω πŸ™  πŸ™  β†’ refl
    β‰€πŸ™ 𝟘  ≀ω πŸ™  β‰€πŸ™ β†’ refl
    β‰€πŸ™ 𝟘  ≀ω πŸ™  ≀ω β†’ refl
    β‰€πŸ™ 𝟘  ≀ω β‰€πŸ™ 𝟘  β†’ refl
    β‰€πŸ™ 𝟘  ≀ω β‰€πŸ™ πŸ™  β†’ refl
    β‰€πŸ™ 𝟘  ≀ω β‰€πŸ™ β‰€πŸ™ β†’ refl
    β‰€πŸ™ 𝟘  ≀ω β‰€πŸ™ ≀ω β†’ refl
    β‰€πŸ™ 𝟘  ≀ω ≀ω 𝟘  β†’ refl
    β‰€πŸ™ 𝟘  ≀ω ≀ω πŸ™  β†’ refl
    β‰€πŸ™ 𝟘  ≀ω ≀ω β‰€πŸ™ β†’ refl
    β‰€πŸ™ 𝟘  ≀ω ≀ω ≀ω β†’ refl
    β‰€πŸ™ πŸ™  𝟘  𝟘  𝟘  β†’ refl
    β‰€πŸ™ πŸ™  𝟘  𝟘  πŸ™  β†’ refl
    β‰€πŸ™ πŸ™  𝟘  𝟘  β‰€πŸ™ β†’ refl
    β‰€πŸ™ πŸ™  𝟘  𝟘  ≀ω β†’ refl
    β‰€πŸ™ πŸ™  𝟘  πŸ™  𝟘  β†’ refl
    β‰€πŸ™ πŸ™  𝟘  πŸ™  πŸ™  β†’ refl
    β‰€πŸ™ πŸ™  𝟘  πŸ™  β‰€πŸ™ β†’ refl
    β‰€πŸ™ πŸ™  𝟘  πŸ™  ≀ω β†’ refl
    β‰€πŸ™ πŸ™  𝟘  β‰€πŸ™ 𝟘  β†’ refl
    β‰€πŸ™ πŸ™  𝟘  β‰€πŸ™ πŸ™  β†’ refl
    β‰€πŸ™ πŸ™  𝟘  β‰€πŸ™ β‰€πŸ™ β†’ refl
    β‰€πŸ™ πŸ™  𝟘  β‰€πŸ™ ≀ω β†’ refl
    β‰€πŸ™ πŸ™  𝟘  ≀ω 𝟘  β†’ refl
    β‰€πŸ™ πŸ™  𝟘  ≀ω πŸ™  β†’ refl
    β‰€πŸ™ πŸ™  𝟘  ≀ω β‰€πŸ™ β†’ refl
    β‰€πŸ™ πŸ™  𝟘  ≀ω ≀ω β†’ refl
    β‰€πŸ™ πŸ™  πŸ™  𝟘  𝟘  β†’ refl
    β‰€πŸ™ πŸ™  πŸ™  𝟘  πŸ™  β†’ refl
    β‰€πŸ™ πŸ™  πŸ™  𝟘  β‰€πŸ™ β†’ refl
    β‰€πŸ™ πŸ™  πŸ™  𝟘  ≀ω β†’ refl
    β‰€πŸ™ πŸ™  πŸ™  πŸ™  𝟘  β†’ refl
    β‰€πŸ™ πŸ™  πŸ™  πŸ™  πŸ™  β†’ refl
    β‰€πŸ™ πŸ™  πŸ™  πŸ™  β‰€πŸ™ β†’ refl
    β‰€πŸ™ πŸ™  πŸ™  πŸ™  ≀ω β†’ refl
    β‰€πŸ™ πŸ™  πŸ™  β‰€πŸ™ 𝟘  β†’ refl
    β‰€πŸ™ πŸ™  πŸ™  β‰€πŸ™ πŸ™  β†’ refl
    β‰€πŸ™ πŸ™  πŸ™  β‰€πŸ™ β‰€πŸ™ β†’ refl
    β‰€πŸ™ πŸ™  πŸ™  β‰€πŸ™ ≀ω β†’ refl
    β‰€πŸ™ πŸ™  πŸ™  ≀ω 𝟘  β†’ refl
    β‰€πŸ™ πŸ™  πŸ™  ≀ω πŸ™  β†’ refl
    β‰€πŸ™ πŸ™  πŸ™  ≀ω β‰€πŸ™ β†’ refl
    β‰€πŸ™ πŸ™  πŸ™  ≀ω ≀ω β†’ refl
    β‰€πŸ™ πŸ™  β‰€πŸ™ 𝟘  𝟘  β†’ refl
    β‰€πŸ™ πŸ™  β‰€πŸ™ 𝟘  πŸ™  β†’ refl
    β‰€πŸ™ πŸ™  β‰€πŸ™ 𝟘  β‰€πŸ™ β†’ refl
    β‰€πŸ™ πŸ™  β‰€πŸ™ 𝟘  ≀ω β†’ refl
    β‰€πŸ™ πŸ™  β‰€πŸ™ πŸ™  𝟘  β†’ refl
    β‰€πŸ™ πŸ™  β‰€πŸ™ πŸ™  πŸ™  β†’ refl
    β‰€πŸ™ πŸ™  β‰€πŸ™ πŸ™  β‰€πŸ™ β†’ refl
    β‰€πŸ™ πŸ™  β‰€πŸ™ πŸ™  ≀ω β†’ refl
    β‰€πŸ™ πŸ™  β‰€πŸ™ β‰€πŸ™ 𝟘  β†’ refl
    β‰€πŸ™ πŸ™  β‰€πŸ™ β‰€πŸ™ πŸ™  β†’ refl
    β‰€πŸ™ πŸ™  β‰€πŸ™ β‰€πŸ™ β‰€πŸ™ β†’ refl
    β‰€πŸ™ πŸ™  β‰€πŸ™ β‰€πŸ™ ≀ω β†’ refl
    β‰€πŸ™ πŸ™  β‰€πŸ™ ≀ω 𝟘  β†’ refl
    β‰€πŸ™ πŸ™  β‰€πŸ™ ≀ω πŸ™  β†’ refl
    β‰€πŸ™ πŸ™  β‰€πŸ™ ≀ω β‰€πŸ™ β†’ refl
    β‰€πŸ™ πŸ™  β‰€πŸ™ ≀ω ≀ω β†’ refl
    β‰€πŸ™ πŸ™  ≀ω 𝟘  𝟘  β†’ refl
    β‰€πŸ™ πŸ™  ≀ω 𝟘  πŸ™  β†’ refl
    β‰€πŸ™ πŸ™  ≀ω 𝟘  β‰€πŸ™ β†’ refl
    β‰€πŸ™ πŸ™  ≀ω 𝟘  ≀ω β†’ refl
    β‰€πŸ™ πŸ™  ≀ω πŸ™  𝟘  β†’ refl
    β‰€πŸ™ πŸ™  ≀ω πŸ™  πŸ™  β†’ refl
    β‰€πŸ™ πŸ™  ≀ω πŸ™  β‰€πŸ™ β†’ refl
    β‰€πŸ™ πŸ™  ≀ω πŸ™  ≀ω β†’ refl
    β‰€πŸ™ πŸ™  ≀ω β‰€πŸ™ 𝟘  β†’ refl
    β‰€πŸ™ πŸ™  ≀ω β‰€πŸ™ πŸ™  β†’ refl
    β‰€πŸ™ πŸ™  ≀ω β‰€πŸ™ β‰€πŸ™ β†’ refl
    β‰€πŸ™ πŸ™  ≀ω β‰€πŸ™ ≀ω β†’ refl
    β‰€πŸ™ πŸ™  ≀ω ≀ω 𝟘  β†’ refl
    β‰€πŸ™ πŸ™  ≀ω ≀ω πŸ™  β†’ refl
    β‰€πŸ™ πŸ™  ≀ω ≀ω β‰€πŸ™ β†’ refl
    β‰€πŸ™ πŸ™  ≀ω ≀ω ≀ω β†’ refl
    β‰€πŸ™ β‰€πŸ™ 𝟘  𝟘  𝟘  β†’ refl
    β‰€πŸ™ β‰€πŸ™ 𝟘  𝟘  πŸ™  β†’ refl
    β‰€πŸ™ β‰€πŸ™ 𝟘  𝟘  β‰€πŸ™ β†’ refl
    β‰€πŸ™ β‰€πŸ™ 𝟘  𝟘  ≀ω β†’ refl
    β‰€πŸ™ β‰€πŸ™ 𝟘  πŸ™  𝟘  β†’ refl
    β‰€πŸ™ β‰€πŸ™ 𝟘  πŸ™  πŸ™  β†’ refl
    β‰€πŸ™ β‰€πŸ™ 𝟘  πŸ™  β‰€πŸ™ β†’ refl
    β‰€πŸ™ β‰€πŸ™ 𝟘  πŸ™  ≀ω β†’ refl
    β‰€πŸ™ β‰€πŸ™ 𝟘  β‰€πŸ™ 𝟘  β†’ refl
    β‰€πŸ™ β‰€πŸ™ 𝟘  β‰€πŸ™ πŸ™  β†’ refl
    β‰€πŸ™ β‰€πŸ™ 𝟘  β‰€πŸ™ β‰€πŸ™ β†’ refl
    β‰€πŸ™ β‰€πŸ™ 𝟘  β‰€πŸ™ ≀ω β†’ refl
    β‰€πŸ™ β‰€πŸ™ 𝟘  ≀ω 𝟘  β†’ refl
    β‰€πŸ™ β‰€πŸ™ 𝟘  ≀ω πŸ™  β†’ refl
    β‰€πŸ™ β‰€πŸ™ 𝟘  ≀ω β‰€πŸ™ β†’ refl
    β‰€πŸ™ β‰€πŸ™ 𝟘  ≀ω ≀ω β†’ refl
    β‰€πŸ™ β‰€πŸ™ πŸ™  𝟘  𝟘  β†’ refl
    β‰€πŸ™ β‰€πŸ™ πŸ™  𝟘  πŸ™  β†’ refl
    β‰€πŸ™ β‰€πŸ™ πŸ™  𝟘  β‰€πŸ™ β†’ refl
    β‰€πŸ™ β‰€πŸ™ πŸ™  𝟘  ≀ω β†’ refl
    β‰€πŸ™ β‰€πŸ™ πŸ™  πŸ™  𝟘  β†’ refl
    β‰€πŸ™ β‰€πŸ™ πŸ™  πŸ™  πŸ™  β†’ refl
    β‰€πŸ™ β‰€πŸ™ πŸ™  πŸ™  β‰€πŸ™ β†’ refl
    β‰€πŸ™ β‰€πŸ™ πŸ™  πŸ™  ≀ω β†’ refl
    β‰€πŸ™ β‰€πŸ™ πŸ™  β‰€πŸ™ 𝟘  β†’ refl
    β‰€πŸ™ β‰€πŸ™ πŸ™  β‰€πŸ™ πŸ™  β†’ refl
    β‰€πŸ™ β‰€πŸ™ πŸ™  β‰€πŸ™ β‰€πŸ™ β†’ refl
    β‰€πŸ™ β‰€πŸ™ πŸ™  β‰€πŸ™ ≀ω β†’ refl
    β‰€πŸ™ β‰€πŸ™ πŸ™  ≀ω 𝟘  β†’ refl
    β‰€πŸ™ β‰€πŸ™ πŸ™  ≀ω πŸ™  β†’ refl
    β‰€πŸ™ β‰€πŸ™ πŸ™  ≀ω β‰€πŸ™ β†’ refl
    β‰€πŸ™ β‰€πŸ™ πŸ™  ≀ω ≀ω β†’ refl
    β‰€πŸ™ β‰€πŸ™ β‰€πŸ™ 𝟘  𝟘  β†’ refl
    β‰€πŸ™ β‰€πŸ™ β‰€πŸ™ 𝟘  πŸ™  β†’ refl
    β‰€πŸ™ β‰€πŸ™ β‰€πŸ™ 𝟘  β‰€πŸ™ β†’ refl
    β‰€πŸ™ β‰€πŸ™ β‰€πŸ™ 𝟘  ≀ω β†’ refl
    β‰€πŸ™ β‰€πŸ™ β‰€πŸ™ πŸ™  𝟘  β†’ refl
    β‰€πŸ™ β‰€πŸ™ β‰€πŸ™ πŸ™  πŸ™  β†’ refl
    β‰€πŸ™ β‰€πŸ™ β‰€πŸ™ πŸ™  β‰€πŸ™ β†’ refl
    β‰€πŸ™ β‰€πŸ™ β‰€πŸ™ πŸ™  ≀ω β†’ refl
    β‰€πŸ™ β‰€πŸ™ β‰€πŸ™ β‰€πŸ™ 𝟘  β†’ refl
    β‰€πŸ™ β‰€πŸ™ β‰€πŸ™ β‰€πŸ™ πŸ™  β†’ refl
    β‰€πŸ™ β‰€πŸ™ β‰€πŸ™ β‰€πŸ™ β‰€πŸ™ β†’ refl
    β‰€πŸ™ β‰€πŸ™ β‰€πŸ™ β‰€πŸ™ ≀ω β†’ refl
    β‰€πŸ™ β‰€πŸ™ β‰€πŸ™ ≀ω 𝟘  β†’ refl
    β‰€πŸ™ β‰€πŸ™ β‰€πŸ™ ≀ω πŸ™  β†’ refl
    β‰€πŸ™ β‰€πŸ™ β‰€πŸ™ ≀ω β‰€πŸ™ β†’ refl
    β‰€πŸ™ β‰€πŸ™ β‰€πŸ™ ≀ω ≀ω β†’ refl
    β‰€πŸ™ β‰€πŸ™ ≀ω 𝟘  𝟘  β†’ refl
    β‰€πŸ™ β‰€πŸ™ ≀ω 𝟘  πŸ™  β†’ refl
    β‰€πŸ™ β‰€πŸ™ ≀ω 𝟘  β‰€πŸ™ β†’ refl
    β‰€πŸ™ β‰€πŸ™ ≀ω 𝟘  ≀ω β†’ refl
    β‰€πŸ™ β‰€πŸ™ ≀ω πŸ™  𝟘  β†’ refl
    β‰€πŸ™ β‰€πŸ™ ≀ω πŸ™  πŸ™  β†’ refl
    β‰€πŸ™ β‰€πŸ™ ≀ω πŸ™  β‰€πŸ™ β†’ refl
    β‰€πŸ™ β‰€πŸ™ ≀ω πŸ™  ≀ω β†’ refl
    β‰€πŸ™ β‰€πŸ™ ≀ω β‰€πŸ™ 𝟘  β†’ refl
    β‰€πŸ™ β‰€πŸ™ ≀ω β‰€πŸ™ πŸ™  β†’ refl
    β‰€πŸ™ β‰€πŸ™ ≀ω β‰€πŸ™ β‰€πŸ™ β†’ refl
    β‰€πŸ™ β‰€πŸ™ ≀ω β‰€πŸ™ ≀ω β†’ refl
    β‰€πŸ™ β‰€πŸ™ ≀ω ≀ω 𝟘  β†’ refl
    β‰€πŸ™ β‰€πŸ™ ≀ω ≀ω πŸ™  β†’ refl
    β‰€πŸ™ β‰€πŸ™ ≀ω ≀ω β‰€πŸ™ β†’ refl
    β‰€πŸ™ β‰€πŸ™ ≀ω ≀ω ≀ω β†’ refl
    β‰€πŸ™ ≀ω 𝟘  𝟘  𝟘  β†’ refl
    β‰€πŸ™ ≀ω 𝟘  𝟘  πŸ™  β†’ refl
    β‰€πŸ™ ≀ω 𝟘  𝟘  β‰€πŸ™ β†’ refl
    β‰€πŸ™ ≀ω 𝟘  𝟘  ≀ω β†’ refl
    β‰€πŸ™ ≀ω 𝟘  πŸ™  𝟘  β†’ refl
    β‰€πŸ™ ≀ω 𝟘  πŸ™  πŸ™  β†’ refl
    β‰€πŸ™ ≀ω 𝟘  πŸ™  β‰€πŸ™ β†’ refl
    β‰€πŸ™ ≀ω 𝟘  πŸ™  ≀ω β†’ refl
    β‰€πŸ™ ≀ω 𝟘  β‰€πŸ™ 𝟘  β†’ refl
    β‰€πŸ™ ≀ω 𝟘  β‰€πŸ™ πŸ™  β†’ refl
    β‰€πŸ™ ≀ω 𝟘  β‰€πŸ™ β‰€πŸ™ β†’ refl
    β‰€πŸ™ ≀ω 𝟘  β‰€πŸ™ ≀ω β†’ refl
    β‰€πŸ™ ≀ω 𝟘  ≀ω 𝟘  β†’ refl
    β‰€πŸ™ ≀ω 𝟘  ≀ω πŸ™  β†’ refl
    β‰€πŸ™ ≀ω 𝟘  ≀ω β‰€πŸ™ β†’ refl
    β‰€πŸ™ ≀ω 𝟘  ≀ω ≀ω β†’ refl
    β‰€πŸ™ ≀ω πŸ™  𝟘  𝟘  β†’ refl
    β‰€πŸ™ ≀ω πŸ™  𝟘  πŸ™  β†’ refl
    β‰€πŸ™ ≀ω πŸ™  𝟘  β‰€πŸ™ β†’ refl
    β‰€πŸ™ ≀ω πŸ™  𝟘  ≀ω β†’ refl
    β‰€πŸ™ ≀ω πŸ™  πŸ™  𝟘  β†’ refl
    β‰€πŸ™ ≀ω πŸ™  πŸ™  πŸ™  β†’ refl
    β‰€πŸ™ ≀ω πŸ™  πŸ™  β‰€πŸ™ β†’ refl
    β‰€πŸ™ ≀ω πŸ™  πŸ™  ≀ω β†’ refl
    β‰€πŸ™ ≀ω πŸ™  β‰€πŸ™ 𝟘  β†’ refl
    β‰€πŸ™ ≀ω πŸ™  β‰€πŸ™ πŸ™  β†’ refl
    β‰€πŸ™ ≀ω πŸ™  β‰€πŸ™ β‰€πŸ™ β†’ refl
    β‰€πŸ™ ≀ω πŸ™  β‰€πŸ™ ≀ω β†’ refl
    β‰€πŸ™ ≀ω πŸ™  ≀ω 𝟘  β†’ refl
    β‰€πŸ™ ≀ω πŸ™  ≀ω πŸ™  β†’ refl
    β‰€πŸ™ ≀ω πŸ™  ≀ω β‰€πŸ™ β†’ refl
    β‰€πŸ™ ≀ω πŸ™  ≀ω ≀ω β†’ refl
    β‰€πŸ™ ≀ω β‰€πŸ™ 𝟘  𝟘  β†’ refl
    β‰€πŸ™ ≀ω β‰€πŸ™ 𝟘  πŸ™  β†’ refl
    β‰€πŸ™ ≀ω β‰€πŸ™ 𝟘  β‰€πŸ™ β†’ refl
    β‰€πŸ™ ≀ω β‰€πŸ™ 𝟘  ≀ω β†’ refl
    β‰€πŸ™ ≀ω β‰€πŸ™ πŸ™  𝟘  β†’ refl
    β‰€πŸ™ ≀ω β‰€πŸ™ πŸ™  πŸ™  β†’ refl
    β‰€πŸ™ ≀ω β‰€πŸ™ πŸ™  β‰€πŸ™ β†’ refl
    β‰€πŸ™ ≀ω β‰€πŸ™ πŸ™  ≀ω β†’ refl
    β‰€πŸ™ ≀ω β‰€πŸ™ β‰€πŸ™ 𝟘  β†’ refl
    β‰€πŸ™ ≀ω β‰€πŸ™ β‰€πŸ™ πŸ™  β†’ refl
    β‰€πŸ™ ≀ω β‰€πŸ™ β‰€πŸ™ β‰€πŸ™ β†’ refl
    β‰€πŸ™ ≀ω β‰€πŸ™ β‰€πŸ™ ≀ω β†’ refl
    β‰€πŸ™ ≀ω β‰€πŸ™ ≀ω 𝟘  β†’ refl
    β‰€πŸ™ ≀ω β‰€πŸ™ ≀ω πŸ™  β†’ refl
    β‰€πŸ™ ≀ω β‰€πŸ™ ≀ω β‰€πŸ™ β†’ refl
    β‰€πŸ™ ≀ω β‰€πŸ™ ≀ω ≀ω β†’ refl
    β‰€πŸ™ ≀ω ≀ω 𝟘  𝟘  β†’ refl
    β‰€πŸ™ ≀ω ≀ω 𝟘  πŸ™  β†’ refl
    β‰€πŸ™ ≀ω ≀ω 𝟘  β‰€πŸ™ β†’ refl
    β‰€πŸ™ ≀ω ≀ω 𝟘  ≀ω β†’ refl
    β‰€πŸ™ ≀ω ≀ω πŸ™  𝟘  β†’ refl
    β‰€πŸ™ ≀ω ≀ω πŸ™  πŸ™  β†’ refl
    β‰€πŸ™ ≀ω ≀ω πŸ™  β‰€πŸ™ β†’ refl
    β‰€πŸ™ ≀ω ≀ω πŸ™  ≀ω β†’ refl
    β‰€πŸ™ ≀ω ≀ω β‰€πŸ™ 𝟘  β†’ refl
    β‰€πŸ™ ≀ω ≀ω β‰€πŸ™ πŸ™  β†’ refl
    β‰€πŸ™ ≀ω ≀ω β‰€πŸ™ β‰€πŸ™ β†’ refl
    β‰€πŸ™ ≀ω ≀ω β‰€πŸ™ ≀ω β†’ refl
    β‰€πŸ™ ≀ω ≀ω ≀ω 𝟘  β†’ refl
    β‰€πŸ™ ≀ω ≀ω ≀ω πŸ™  β†’ refl
    β‰€πŸ™ ≀ω ≀ω ≀ω β‰€πŸ™ β†’ refl
    β‰€πŸ™ ≀ω ≀ω ≀ω ≀ω β†’ refl
    ≀ω 𝟘  𝟘  𝟘  𝟘  β†’ refl
    ≀ω πŸ™  𝟘  𝟘  𝟘  β†’ refl
    ≀ω β‰€πŸ™ 𝟘  𝟘  𝟘  β†’ refl
    ≀ω ≀ω 𝟘  𝟘  𝟘  β†’ refl
    ≀ω _  𝟘  𝟘  πŸ™  β†’ refl
    ≀ω _  𝟘  𝟘  β‰€πŸ™ β†’ refl
    ≀ω _  𝟘  𝟘  ≀ω β†’ refl
    ≀ω _  𝟘  πŸ™  𝟘  β†’ refl
    ≀ω _  𝟘  πŸ™  πŸ™  β†’ refl
    ≀ω _  𝟘  πŸ™  β‰€πŸ™ β†’ refl
    ≀ω _  𝟘  πŸ™  ≀ω β†’ refl
    ≀ω _  𝟘  β‰€πŸ™ 𝟘  β†’ refl
    ≀ω _  𝟘  β‰€πŸ™ πŸ™  β†’ refl
    ≀ω _  𝟘  β‰€πŸ™ β‰€πŸ™ β†’ refl
    ≀ω _  𝟘  β‰€πŸ™ ≀ω β†’ refl
    ≀ω _  𝟘  ≀ω 𝟘  β†’ refl
    ≀ω _  𝟘  ≀ω πŸ™  β†’ refl
    ≀ω _  𝟘  ≀ω β‰€πŸ™ β†’ refl
    ≀ω _  𝟘  ≀ω ≀ω β†’ refl
    ≀ω _  πŸ™  𝟘  𝟘  β†’ refl
    ≀ω _  πŸ™  𝟘  πŸ™  β†’ refl
    ≀ω _  πŸ™  𝟘  β‰€πŸ™ β†’ refl
    ≀ω _  πŸ™  𝟘  ≀ω β†’ refl
    ≀ω _  πŸ™  πŸ™  𝟘  β†’ refl
    ≀ω _  πŸ™  πŸ™  πŸ™  β†’ refl
    ≀ω _  πŸ™  πŸ™  β‰€πŸ™ β†’ refl
    ≀ω _  πŸ™  πŸ™  ≀ω β†’ refl
    ≀ω _  πŸ™  β‰€πŸ™ 𝟘  β†’ refl
    ≀ω _  πŸ™  β‰€πŸ™ πŸ™  β†’ refl
    ≀ω _  πŸ™  β‰€πŸ™ β‰€πŸ™ β†’ refl
    ≀ω _  πŸ™  β‰€πŸ™ ≀ω β†’ refl
    ≀ω _  πŸ™  ≀ω 𝟘  β†’ refl
    ≀ω _  πŸ™  ≀ω πŸ™  β†’ refl
    ≀ω _  πŸ™  ≀ω β‰€πŸ™ β†’ refl
    ≀ω _  πŸ™  ≀ω ≀ω β†’ refl
    ≀ω _  β‰€πŸ™ 𝟘  𝟘  β†’ refl
    ≀ω _  β‰€πŸ™ 𝟘  πŸ™  β†’ refl
    ≀ω _  β‰€πŸ™ 𝟘  β‰€πŸ™ β†’ refl
    ≀ω _  β‰€πŸ™ 𝟘  ≀ω β†’ refl
    ≀ω _  β‰€πŸ™ πŸ™  𝟘  β†’ refl
    ≀ω _  β‰€πŸ™ πŸ™  πŸ™  β†’ refl
    ≀ω _  β‰€πŸ™ πŸ™  β‰€πŸ™ β†’ refl
    ≀ω _  β‰€πŸ™ πŸ™  ≀ω β†’ refl
    ≀ω _  β‰€πŸ™ β‰€πŸ™ 𝟘  β†’ refl
    ≀ω _  β‰€πŸ™ β‰€πŸ™ πŸ™  β†’ refl
    ≀ω _  β‰€πŸ™ β‰€πŸ™ β‰€πŸ™ β†’ refl
    ≀ω _  β‰€πŸ™ β‰€πŸ™ ≀ω β†’ refl
    ≀ω _  β‰€πŸ™ ≀ω 𝟘  β†’ refl
    ≀ω _  β‰€πŸ™ ≀ω πŸ™  β†’ refl
    ≀ω _  β‰€πŸ™ ≀ω β‰€πŸ™ β†’ refl
    ≀ω _  β‰€πŸ™ ≀ω ≀ω β†’ refl
    ≀ω _  ≀ω 𝟘  𝟘  β†’ refl
    ≀ω _  ≀ω 𝟘  πŸ™  β†’ refl
    ≀ω _  ≀ω 𝟘  β‰€πŸ™ β†’ refl
    ≀ω _  ≀ω 𝟘  ≀ω β†’ refl
    ≀ω _  ≀ω πŸ™  𝟘  β†’ refl
    ≀ω _  ≀ω πŸ™  πŸ™  β†’ refl
    ≀ω _  ≀ω πŸ™  β‰€πŸ™ β†’ refl
    ≀ω _  ≀ω πŸ™  ≀ω β†’ refl
    ≀ω _  ≀ω β‰€πŸ™ 𝟘  β†’ refl
    ≀ω _  ≀ω β‰€πŸ™ πŸ™  β†’ refl
    ≀ω _  ≀ω β‰€πŸ™ β‰€πŸ™ β†’ refl
    ≀ω _  ≀ω β‰€πŸ™ ≀ω β†’ refl
    ≀ω _  ≀ω ≀ω 𝟘  β†’ refl
    ≀ω _  ≀ω ≀ω πŸ™  β†’ refl
    ≀ω _  ≀ω ≀ω β‰€πŸ™ β†’ refl
    ≀ω _  ≀ω ≀ω ≀ω β†’ refl

opaque

  -- The nr-function defined above is factoring

  linear-or-affine-has-factoring-nr :
    Is-factoring-nr linear-or-affine-has-nr
  linear-or-affine-has-factoring-nr = record
    { nrβ‚‚ = nrβ‚‚
    ; nrβ‚‚β‰’πŸ˜ = Ξ» {p} {r} β†’ πŸ™βˆ§pβ‰’πŸ˜ (r + p)
    ; nr-factoring = Ξ» {p} {r} {z} {s} {n} β†’ nr-factoring p r z s n
    }
    where
    open Semiring-with-meet linear-or-affine-semiring-with-meet
      hiding (𝟘; πŸ™; _+_; _Β·_; _∧_; _≀_)

    nrβ‚‚ : Opβ‚‚ Linear-or-affine
    nrβ‚‚ p r = πŸ™ ∧ (r + p)

    πŸ™βˆ§β‰€πŸ™+p≑≀1+p : βˆ€ p β†’ πŸ™ ∧ (β‰€πŸ™ + p) ≑ β‰€πŸ™ + p
    πŸ™βˆ§β‰€πŸ™+p≑≀1+p 𝟘 = refl
    πŸ™βˆ§β‰€πŸ™+p≑≀1+p πŸ™ = refl
    πŸ™βˆ§β‰€πŸ™+p≑≀1+p β‰€πŸ™ = refl
    πŸ™βˆ§β‰€πŸ™+p≑≀1+p ≀ω = refl

    πŸ™βˆ§πŸ™+p≑1+p : βˆ€ p β†’ πŸ™ ∧ (πŸ™ + p) ≑ πŸ™ + p
    πŸ™βˆ§πŸ™+p≑1+p 𝟘 = refl
    πŸ™βˆ§πŸ™+p≑1+p πŸ™ = refl
    πŸ™βˆ§πŸ™+p≑1+p β‰€πŸ™ = refl
    πŸ™βˆ§πŸ™+p≑1+p ≀ω = refl

    lemma : βˆ€ p z s n β†’ p β‰’ 𝟘
          β†’ (p Β· n + s) ∧ (n + z) ≑ p Β· n + s ∧ z
    lemma 𝟘 z s n pβ‰’πŸ˜ = βŠ₯-elim (pβ‰’πŸ˜ refl)
    lemma πŸ™ z s n pβ‰’πŸ˜ rewrite Β·-identityΛ‘ n =
      sym (+-distribˑ-∧ n s z)
    lemma β‰€πŸ™ z s 𝟘 pβ‰’πŸ˜ = refl
    lemma β‰€πŸ™ 𝟘 𝟘 πŸ™ pβ‰’πŸ˜ = refl
    lemma β‰€πŸ™ πŸ™ 𝟘 πŸ™ pβ‰’πŸ˜ = refl
    lemma β‰€πŸ™ β‰€πŸ™ 𝟘 πŸ™ pβ‰’πŸ˜ = refl
    lemma β‰€πŸ™ ≀ω 𝟘 πŸ™ pβ‰’πŸ˜ = refl
    lemma β‰€πŸ™ 𝟘 πŸ™ πŸ™ pβ‰’πŸ˜ = refl
    lemma β‰€πŸ™ πŸ™ πŸ™ πŸ™ pβ‰’πŸ˜ = refl
    lemma β‰€πŸ™ β‰€πŸ™ πŸ™ πŸ™ pβ‰’πŸ˜ = refl
    lemma β‰€πŸ™ ≀ω πŸ™ πŸ™ pβ‰’πŸ˜ = refl
    lemma β‰€πŸ™ 𝟘 β‰€πŸ™ πŸ™ pβ‰’πŸ˜ = refl
    lemma β‰€πŸ™ πŸ™ β‰€πŸ™ πŸ™ pβ‰’πŸ˜ = refl
    lemma β‰€πŸ™ β‰€πŸ™ β‰€πŸ™ πŸ™ pβ‰’πŸ˜ = refl
    lemma β‰€πŸ™ ≀ω β‰€πŸ™ πŸ™ pβ‰’πŸ˜ = refl
    lemma β‰€πŸ™ z ≀ω πŸ™ pβ‰’πŸ˜ = refl
    lemma β‰€πŸ™ z s β‰€πŸ™ pβ‰’πŸ˜ = sym (+-distribΛ‘-∧ β‰€πŸ™ s z)
    lemma β‰€πŸ™ z s ≀ω pβ‰’πŸ˜ = sym (+-distribΛ‘-∧ ≀ω s z)
    lemma ≀ω z s 𝟘 pβ‰’πŸ˜ = refl
    lemma ≀ω z s πŸ™ pβ‰’πŸ˜ rewrite ≀ω+ s rewrite ≀ω+ (s ∧ z) = refl
    lemma ≀ω z s β‰€πŸ™ pβ‰’πŸ˜ rewrite ≀ω+ s rewrite ≀ω+ (s ∧ z) = refl
    lemma ≀ω z s ≀ω pβ‰’πŸ˜ = sym (+-distribΛ‘-∧ ≀ω s z)

    nr-factoring : (p r z s n : Linear-or-affine)
                 β†’ nr p r z s n ≑ nrβ‚‚ p r Β· n + nr p r z s 𝟘
    nr-factoring p 𝟘 z s n rewrite Β·-zeroΚ³ (πŸ™ ∧ p) =
      lemma (πŸ™ ∧ p) z s n (πŸ™βˆ§pβ‰’πŸ˜ p)
    nr-factoring p πŸ™ z s n rewrite Β·-zeroΚ³ (πŸ™ + p) =
      +-congΚ³ (Β·-congΚ³ (sym (πŸ™βˆ§πŸ™+p≑1+p p)))
    nr-factoring p β‰€πŸ™ z s n rewrite Β·-zeroΚ³ (β‰€πŸ™ + p) =
      +-congΚ³ (Β·-congΚ³ (sym (πŸ™βˆ§β‰€πŸ™+p≑≀1+p p)))
    nr-factoring p ≀ω z s n rewrite ≀ω+ p = Β·-distribΛ‘-+ Ο‰ n (s + z)

opaque

  -- The nr function returns results that are at least as large as those
  -- of any other factoring nr function for linear-or-affine-semiring-with-meet.

  nr-greatest-factoring :
    (has-nr : Has-nr linear-or-affine-semiring-with-meet)
    (is-factoring-nr : Is-factoring-nr has-nr) β†’
    βˆ€ p r z s n β†’ Has-nr.nr has-nr p r z s n ≀ nr p r z s n
  nr-greatest-factoring has-nr is-factoring-nr = Ξ» where
      p r ≀ω s n β†’ lemma $ begin
        nrβ€² p r ≀ω s n                β‰‘βŸ¨ nr-factoring ⟩
        nrβ‚‚β€² p r Β· n + nrβ€² p r ≀ω s 𝟘 β‰€βŸ¨ +-monotoneΚ³ {r = nrβ‚‚β€² p r Β· n} (nr-zero refl) ⟩
        nrβ‚‚β€² p r Β· n + ≀ω             β‰‘βŸ¨ +-zeroΚ³ (nrβ‚‚β€² p r Β· n) ⟩
        ≀ω                            ∎
      p r z ≀ω n β†’ lemma $ begin
        nrβ€² p r z ≀ω n                  β‰€βŸ¨ nr-suc ⟩
        ≀ω + p Β· n + r Β· nrβ€² p r z ≀ω n β‰‘βŸ¨ +-zeroΛ‘ (p Β· n + r Β· nrβ€² p r z ≀ω n) ⟩
        ≀ω                              ∎
      p r z s ≀ω β†’ lemma $ begin
        nrβ€² p r z s ≀ω                β‰‘βŸ¨ nr-factoring ⟩
        nrβ‚‚β€² p r Β· ≀ω + nrβ€² p r z s 𝟘 β‰‘βŸ¨ +-congΚ³ (β‰’πŸ˜Β·β‰€Ο‰ nrβ‚‚β‰’πŸ˜) ⟩
        ≀ω + nrβ€² p r z s 𝟘            β‰‘βŸ¨ +-zeroΛ‘ (nrβ€² p r z s 𝟘) ⟩
        ≀ω                            ∎
      p r 𝟘 𝟘 𝟘 β†’ begin
        nrβ€² p r 𝟘 𝟘 𝟘 β‰‘βŸ¨ nrβ€²-𝟘 ⟩
        𝟘             β‰‘Λ˜βŸ¨ nr-𝟘 r .projβ‚‚ (refl , refl , refl) ⟩
        nr p r 𝟘 𝟘 𝟘  ∎
      ≀ω r z s πŸ™ β†’ pn≑ω→nr′≀ refl
      ≀ω r z s β‰€πŸ™ β†’ pn≑ω→nr′≀ refl
      πŸ™ r z πŸ™ πŸ™ β†’ pn,sβ‰’πŸ˜β†’nr′≀ (Ξ» ()) (Ξ» ())
      πŸ™ r z β‰€πŸ™ πŸ™ β†’ pn,sβ‰’πŸ˜β†’nr′≀ (Ξ» ()) (Ξ» ())
      πŸ™ r z πŸ™ β‰€πŸ™ β†’ pn,sβ‰’πŸ˜β†’nr′≀ (Ξ» ()) (Ξ» ())
      β‰€πŸ™ r z πŸ™ πŸ™ β†’ pn,sβ‰’πŸ˜β†’nr′≀ (Ξ» ()) (Ξ» ())
      β‰€πŸ™ r z πŸ™ β‰€πŸ™ β†’ pn,sβ‰’πŸ˜β†’nr′≀ (Ξ» ()) (Ξ» ())
      πŸ™ r z β‰€πŸ™ β‰€πŸ™ β†’ pn,sβ‰’πŸ˜β†’nr′≀ (Ξ» ()) (Ξ» ())
      β‰€πŸ™ r z β‰€πŸ™ πŸ™ β†’ pn,sβ‰’πŸ˜β†’nr′≀ (Ξ» ()) (Ξ» ())
      β‰€πŸ™ r z β‰€πŸ™ β‰€πŸ™ β†’ pn,sβ‰’πŸ˜β†’nr′≀ (Ξ» ()) (Ξ» ())
      p r 𝟘 πŸ™ πŸ™ β†’ nβ‰’πŸ˜β†’nr′≀ (Ξ» ()) (Ξ» ())
      p r 𝟘 β‰€πŸ™ πŸ™ β†’ nβ‰’πŸ˜β†’nr′≀ (Ξ» ()) Ξ» ()
      p r πŸ™ s πŸ™ β†’ nβ‰’πŸ˜β†’nr′≀ (Ξ» ()) (Ξ» ())
      p r β‰€πŸ™ s πŸ™ β†’ nβ‰’πŸ˜β†’nr′≀ (Ξ» ()) (Ξ» ())
      p r 𝟘 πŸ™ β‰€πŸ™ β†’ nβ‰’πŸ˜β†’nr′≀ (Ξ» ()) (Ξ» ())
      p r 𝟘 β‰€πŸ™ β‰€πŸ™ β†’ nβ‰’πŸ˜β†’nr′≀ (Ξ» ()) (Ξ» ())
      p r πŸ™ s β‰€πŸ™ β†’ nβ‰’πŸ˜β†’nr′≀ (Ξ» ()) (Ξ» ())
      p r β‰€πŸ™ s β‰€πŸ™ β†’ nβ‰’πŸ˜β†’nr′≀ (Ξ» ()) (Ξ» ())
      p ≀ω 𝟘 𝟘 πŸ™ β†’ nrβ€²pω≀ Ξ» ()
      p ≀ω 𝟘 𝟘 β‰€πŸ™ β†’ nrβ€²pω≀ Ξ» ()
      p ≀ω 𝟘 πŸ™ n β†’ nrβ€²pω≀ Ξ» ()
      p ≀ω 𝟘 β‰€πŸ™ n β†’ nrβ€²pω≀ Ξ» ()
      p ≀ω πŸ™ s n β†’ nrβ€²pω≀ Ξ» ()
      p ≀ω β‰€πŸ™ s n β†’ nrβ€²pω≀ Ξ» ()
      πŸ™ πŸ™ z s πŸ™ β†’ p,r,nβ‰’πŸ˜β†’nr′≀ (Ξ» ()) (Ξ» ()) (Ξ» ())
      πŸ™ πŸ™ z s β‰€πŸ™ β†’ p,r,nβ‰’πŸ˜β†’nr′≀ (Ξ» ()) (Ξ» ()) (Ξ» ())
      β‰€πŸ™ πŸ™ z s πŸ™ β†’ p,r,nβ‰’πŸ˜β†’nr′≀ (Ξ» ()) (Ξ» ()) (Ξ» ())
      β‰€πŸ™ πŸ™ z s β‰€πŸ™ β†’ p,r,nβ‰’πŸ˜β†’nr′≀ (Ξ» ()) (Ξ» ()) (Ξ» ())
      πŸ™ β‰€πŸ™ z s πŸ™ β†’ p,r,nβ‰’πŸ˜β†’nr′≀ (Ξ» ()) (Ξ» ()) (Ξ» ())
      πŸ™ β‰€πŸ™ z s β‰€πŸ™ β†’ p,r,nβ‰’πŸ˜β†’nr′≀ (Ξ» ()) (Ξ» ()) (Ξ» ())
      β‰€πŸ™ β‰€πŸ™ z s πŸ™ β†’ p,r,nβ‰’πŸ˜β†’nr′≀ (Ξ» ()) (Ξ» ()) (Ξ» ())
      β‰€πŸ™ β‰€πŸ™ z s β‰€πŸ™ β†’ p,r,nβ‰’πŸ˜β†’nr′≀ (Ξ» ()) (Ξ» ()) (Ξ» ())
      p πŸ™ z πŸ™ n β†’ r,sβ‰’πŸ˜β†’nr′≀ (Ξ» ()) (Ξ» ())
      p πŸ™ z β‰€πŸ™ n β†’ r,sβ‰’πŸ˜β†’nr′≀ (Ξ» ()) (Ξ» ())
      p β‰€πŸ™ z πŸ™ n β†’ r,sβ‰’πŸ˜β†’nr′≀ (Ξ» ()) (Ξ» ())
      p β‰€πŸ™ z β‰€πŸ™ n β†’ r,sβ‰’πŸ˜β†’nr′≀ (Ξ» ()) (Ξ» ())
      p 𝟘 z s 𝟘 β†’ begin
        nrβ€² p 𝟘 z s 𝟘 β‰€βŸ¨ ∧-greatest-lower-bound
                          (≀-trans nr-sucβ€² (≀-reflexive (+-identityΚ³ s)))
                          (nr-zero refl) ⟩
        s ∧ z β‰‘βŸ¨βŸ©
        (𝟘 + s) ∧ z β‰‘Λ˜βŸ¨ ∧-congΚ³ (+-congΚ³ (Β·-zeroΚ³ (πŸ™ ∧ p))) ⟩
        ((πŸ™ ∧ p) Β· 𝟘 + s) ∧ z β‰‘βŸ¨βŸ©
        nr p 𝟘 z s 𝟘 ∎
      p 𝟘 𝟘 𝟘 n β†’
        let ≀pn : nrβ€² p 𝟘 𝟘 𝟘 n ≀ p Β· n
            ≀pn = begin
              nrβ€² p 𝟘 𝟘 𝟘 n                  β‰€βŸ¨ nr-suc ⟩
              𝟘 + p Β· n + 𝟘 Β· nrβ€² p 𝟘 𝟘 𝟘 πŸ™ β‰‘βŸ¨βŸ©
              p Β· n + 𝟘                      β‰‘βŸ¨ +-identityΚ³ (p Β· n) ⟩
              p · n                          ∎
            ≀n : nrβ€² p 𝟘 𝟘 𝟘 n ≀ n
            ≀n = begin
              nrβ€² p 𝟘 𝟘 𝟘 n                 β‰‘βŸ¨ nr-factoring ⟩
              nrβ‚‚β€² p 𝟘 Β· n + nrβ€² p 𝟘 𝟘 𝟘 𝟘 β‰‘βŸ¨ +-congΛ‘ {nrβ‚‚β€² p 𝟘 Β· n} nrβ€²-𝟘 ⟩
              nrβ‚‚β€² p 𝟘 Β· n + 𝟘              β‰‘βŸ¨ +-identityΚ³ (nrβ‚‚β€² p 𝟘 Β· n) ⟩
              nrβ‚‚β€² p 𝟘 Β· n                  β‰€βŸ¨ Β·-monotoneΛ‘ (β‰’πŸ˜β†’β‰€πŸ™ nrβ‚‚β‰’πŸ˜) ⟩
              πŸ™ Β· n                         β‰‘βŸ¨ Β·-identityΛ‘ n ⟩
              n                             ∎
        in begin
          nrβ€² p 𝟘 𝟘 𝟘 n              β‰€βŸ¨ ∧-greatest-lower-bound ≀n ≀pn ⟩
          n ∧ p Β· n                   β‰‘Λ˜βŸ¨ ∧-congΚ³ (∧-idem n) ⟩
          (n ∧ n) ∧ p Β· n             β‰‘βŸ¨ ∧-assoc n n (p Β· n) ⟩
          n ∧ n ∧ p Β· n               β‰‘βŸ¨ ∧-comm n (n ∧ p Β· n) ⟩
          (n ∧ p Β· n) ∧ n             β‰‘Λ˜βŸ¨ ∧-congΚ³ (∧-congΚ³ (Β·-identityΛ‘ n)) ⟩
          (πŸ™ Β· n ∧ p Β· n) ∧ n         β‰‘Λ˜βŸ¨ ∧-congΚ³ (Β·-distribΚ³-∧ n πŸ™ p) ⟩
          ((πŸ™ ∧ p) Β· n) ∧ n           β‰‘Λ˜βŸ¨ ∧-cong (+-identityΚ³ ((πŸ™ ∧ p) Β· n)) (+-identityΚ³ n) ⟩
          ((πŸ™ ∧ p) Β· n + 𝟘) ∧ (n + 𝟘) β‰‘βŸ¨βŸ©
          nr p 𝟘 𝟘 𝟘 n                ∎
      p πŸ™ z 𝟘 𝟘 β†’ begin
        nrβ€² p πŸ™ z 𝟘 𝟘 β‰€βŸ¨ nr-zero refl ⟩
        z              β‰‘βŸ¨βŸ©
        𝟘 + z          β‰‘Λ˜βŸ¨ +-congΚ³ (Β·-zeroΚ³ (πŸ™ + p)) ⟩
        (πŸ™ + p) Β· 𝟘 + z β‰‘βŸ¨βŸ©
        nr p πŸ™ z 𝟘 𝟘  ∎
      𝟘 πŸ™ 𝟘 𝟘 n β†’ begin
        nrβ€² 𝟘 πŸ™ 𝟘 𝟘 n                 β‰‘βŸ¨ nr-factoring ⟩
        nrβ‚‚β€² 𝟘 πŸ™ Β· n + nrβ€² 𝟘 πŸ™ 𝟘 𝟘 𝟘 β‰‘βŸ¨ +-congΛ‘ {nrβ‚‚β€² 𝟘 πŸ™ Β· n} nrβ€²-𝟘 ⟩
        nrβ‚‚β€² 𝟘 πŸ™ Β· n + 𝟘              β‰€βŸ¨ +-monotoneΛ‘ (Β·-monotoneΛ‘ (β‰’πŸ˜β†’β‰€πŸ™ nrβ‚‚β‰’πŸ˜)) ⟩
        πŸ™ Β· n + 𝟘                     β‰‘βŸ¨βŸ©
        nr 𝟘 πŸ™ 𝟘 𝟘 n                  ∎
      𝟘 β‰€πŸ™ 𝟘 𝟘 n β†’ begin
        nrβ€² 𝟘 β‰€πŸ™ 𝟘 𝟘 n β‰€βŸ¨ nr-suc ⟩
        𝟘 + 𝟘 Β· n + β‰€πŸ™ Β· nrβ€² 𝟘 β‰€πŸ™ 𝟘 𝟘 n       β‰‘βŸ¨βŸ©
        β‰€πŸ™ Β· nrβ€² 𝟘 β‰€πŸ™ 𝟘 𝟘 n                   β‰‘βŸ¨ Β·-congΛ‘ {β‰€πŸ™} nr-factoring ⟩
        β‰€πŸ™ Β· (nrβ‚‚β€² 𝟘 β‰€πŸ™ Β· n + nrβ€² 𝟘 β‰€πŸ™ 𝟘 𝟘 𝟘) β‰‘βŸ¨ Β·-congΛ‘ {β‰€πŸ™} (+-congΛ‘ {nrβ‚‚β€² 𝟘 β‰€πŸ™ Β· n} nrβ€²-𝟘) ⟩
        β‰€πŸ™ Β· (nrβ‚‚β€² 𝟘 β‰€πŸ™ Β· n + 𝟘)               β‰‘βŸ¨ Β·-distribΛ‘-+ β‰€πŸ™ (nrβ‚‚β€² 𝟘 β‰€πŸ™ Β· n) 𝟘 ⟩
        β‰€πŸ™ Β· nrβ‚‚β€² 𝟘 β‰€πŸ™ Β· n + 𝟘                 β‰€βŸ¨ +-monotoneΛ‘ {r = 𝟘} (Β·-monotoneΚ³ {r = β‰€πŸ™}
                                                     (Β·-monotoneΛ‘ (β‰’πŸ˜β†’β‰€πŸ™ nrβ‚‚β‰’πŸ˜))) ⟩
        β‰€πŸ™ Β· πŸ™ Β· n + 𝟘                         β‰‘βŸ¨ +-congΚ³ {𝟘} (Β·-congΛ‘ {β‰€πŸ™} (Β·-identityΛ‘ n)) ⟩
        β‰€πŸ™ Β· n + 𝟘                             β‰‘βŸ¨βŸ©
        nr 𝟘 β‰€πŸ™ 𝟘 𝟘 n                          ∎
      p β‰€πŸ™ z 𝟘 𝟘 β†’ begin
        nrβ€² p β‰€πŸ™ z 𝟘 𝟘           β‰€βŸ¨ nr-sucβ€² ⟩
        𝟘 + β‰€πŸ™ Β· nrβ€² p β‰€πŸ™ z 𝟘 𝟘 β‰€βŸ¨ +-monotoneΚ³ {r = 𝟘} (Β·-monotoneΚ³ {r = β‰€πŸ™} (nr-zero refl)) ⟩
        𝟘 + β‰€πŸ™ Β· z               β‰‘Λ˜βŸ¨ +-congΚ³ (Β·-zeroΚ³ (β‰€πŸ™ + p)) ⟩
        (β‰€πŸ™ + p) Β· 𝟘 + β‰€πŸ™ Β· z    β‰‘βŸ¨βŸ©
        nr p β‰€πŸ™ z 𝟘 𝟘            ∎
    where
    open Is-factoring-nr is-factoring-nr renaming (nrβ‚‚ to nrβ‚‚β€²)
    open Has-nr has-nr renaming (nr to nrβ€²; nr-positive to nrβ€²-positive)
    open Addition linear-or-affine-semiring-with-meet
    open Meet linear-or-affine-semiring-with-meet
    open Multiplication linear-or-affine-semiring-with-meet
    open PartialOrder linear-or-affine-semiring-with-meet
    open Semiring-with-meet linear-or-affine-semiring-with-meet
      hiding (𝟘; πŸ™; Ο‰; _+_; _Β·_; _∧_; _≀_)
    open Tools.Reasoning.PartialOrder ≀-poset
    lemma : nrβ€² p r z s n ≀ ≀ω β†’ nrβ€² p r z s n ≀ nr p r z s n
    lemma {p} {r} {z} {s} {n} nr′≀ω =
      ≀-trans nr′≀ω (≀ω≀ (nr p r z s n))
    nr-sucβ€² : nrβ€² p r z s 𝟘 ≀ s + r Β· nrβ€² p r z s 𝟘
    nr-sucβ€² {p} {r} {z} {s} = begin
      nrβ€² p r z s 𝟘 β‰€βŸ¨ nr-suc ⟩
      s + p Β· 𝟘 + r Β· nrβ€² p r z s 𝟘 β‰‘βŸ¨ +-congΛ‘ {s} (+-congΚ³ (Β·-zeroΚ³ p)) ⟩
      s + 𝟘 + r Β· nrβ€² p r z s 𝟘     β‰‘βŸ¨βŸ©
      s + r Β· nrβ€² p r z s 𝟘         ∎
    nrβ€²-𝟘 : nrβ€² p r 𝟘 𝟘 𝟘 ≑ 𝟘
    nrβ€²-𝟘 = Natrec.nr-𝟘 linear-or-affine-semiring-with-meet ⦃ has-nr ⦄
    pn≑ω→nr′≀ : p Β· n ≑ ≀ω β†’ nrβ€² p r z s n ≀ nr p r z s n
    pn≑ω→nr′≀ {p} {n} {r} {z} {s} pn≑ω = lemma $ begin
      nrβ€² p r z s n                 β‰€βŸ¨ nr-suc ⟩
      s + p Β· n + r Β· nrβ€² p r z s n β‰‘βŸ¨ +-congΛ‘ {s} (+-congΚ³ pn≑ω) ⟩
      s + ≀ω + r Β· nrβ€² p r z s n    β‰‘βŸ¨ +-congΛ‘ {s} (+-zeroΛ‘ (r Β· nrβ€² p r z s n)) ⟩
      s + ≀ω                        β‰‘βŸ¨ +-zeroΚ³ s ⟩
      ≀ω                            ∎
    pn,sβ‰’πŸ˜β†’nr′≀ : p Β· n β‰’ 𝟘 β†’ s β‰’ 𝟘 β†’ nrβ€² p r z s n ≀ nr p r z s n
    pn,sβ‰’πŸ˜β†’nr′≀ {p} {n} {s} {r} {z} pnβ‰’πŸ˜ sβ‰’πŸ˜ = lemma $ begin
        nrβ€² p r z s n                   β‰€βŸ¨ nr-suc ⟩
        s + p Β· n + r Β· nrβ€² p r z s n   β‰‘Λ˜βŸ¨ +-assoc s (p Β· n) (r Β· nrβ€² p r z s n) ⟩
        (s + p Β· n) + r Β· nrβ€² p r z s n β‰‘βŸ¨ +-congΚ³ (β‰’πŸ˜+β‰’πŸ˜ sβ‰’πŸ˜ pnβ‰’πŸ˜) ⟩
        ≀ω + r Β· nrβ€² p r z s n          β‰‘βŸ¨ +-zeroΛ‘ (r Β· nrβ€² p r z s n) ⟩
        ≀ω                              ∎
    nβ‰’πŸ˜β†’nr′≀ : n β‰’ 𝟘 β†’ Β¬ (z ≑ 𝟘 Γ— s ≑ 𝟘) β†’ nrβ€² p r z s n ≀ nr p r z s n
    nβ‰’πŸ˜β†’nr′≀ {n} {z} {s} {p} {r} nβ‰’πŸ˜ z,sβ‰’πŸ˜ = lemma $ begin
      nrβ€² p r z s n β‰‘βŸ¨ nr-factoring ⟩
      nrβ‚‚β€² p r Β· n + nrβ€² p r z s 𝟘 β‰‘βŸ¨ β‰’πŸ˜+β‰’πŸ˜ (β‰’πŸ˜Β·β‰’πŸ˜ nrβ‚‚β‰’πŸ˜ nβ‰’πŸ˜) (Ξ» nrβ€²β‰‘πŸ˜ β†’
                                       let zβ‰‘πŸ˜ , sβ‰‘πŸ˜ , _ = nrβ€²-positive nrβ€²β‰‘πŸ˜
                                       in  z,sβ‰’πŸ˜ (zβ‰‘πŸ˜ , sβ‰‘πŸ˜)) ⟩
      ≀ω ∎
    nrβ€²pω≀ : Β¬ (z ≑ 𝟘 Γ— s ≑ 𝟘 Γ— n ≑ 𝟘) β†’ nrβ€² p ≀ω z s n ≀ nr p ≀ω z s n
    nrβ€²pω≀ {z} {s} {n} {p} β‰’πŸ˜ = lemma $ begin
      nrβ€² p ≀ω z s n                  β‰€βŸ¨ nr-suc ⟩
      s + p Β· n + ≀ω Β· nrβ€² p ≀ω z s n β‰‘βŸ¨ +-congΛ‘ {s} (+-congΛ‘ {p Β· n} (β‰€Ο‰Β·β‰’πŸ˜ (β‰’πŸ˜ βˆ˜β†’ nrβ€²-positive))) ⟩
      s + p Β· n + ≀ω                  β‰‘βŸ¨ +-congΛ‘ {s} (+-zeroΚ³ (p Β· n)) ⟩
      s + ≀ω                          β‰‘βŸ¨ +-zeroΚ³ s ⟩
      ≀ω                              ∎
    p,r,nβ‰’πŸ˜β†’nr′≀ : p β‰’ 𝟘 β†’ r β‰’ 𝟘 β†’ n β‰’ 𝟘 β†’ nrβ€² p r z s n ≀ nr p r z s n
    p,r,nβ‰’πŸ˜β†’nr′≀ {p} {r} {n} {z} {s} pβ‰’πŸ˜ rβ‰’πŸ˜ nβ‰’πŸ˜ = lemma $ begin
      nrβ€² p r z s n β‰€βŸ¨ nr-suc ⟩
      s + p Β· n + r Β· nrβ€² p r z s n β‰‘βŸ¨ +-congΛ‘ {s} (β‰’πŸ˜+β‰’πŸ˜ (β‰’πŸ˜Β·β‰’πŸ˜ pβ‰’πŸ˜ nβ‰’πŸ˜)
                                        (β‰’πŸ˜Β·β‰’πŸ˜ rβ‰’πŸ˜ (nβ‰’πŸ˜ βˆ˜β†’ projβ‚‚ βˆ˜β†’ projβ‚‚ βˆ˜β†’ nrβ€²-positive))) ⟩
      s + ≀ω β‰‘βŸ¨ +-zeroΚ³ s ⟩
      ≀ω ∎
    r,sβ‰’πŸ˜β†’nr′≀ : r β‰’ 𝟘 β†’ s β‰’ 𝟘 β†’ nrβ€² p r z s n ≀ nr p r z s n
    r,sβ‰’πŸ˜β†’nr′≀ {r} {s} {p} {z} {n} rβ‰’πŸ˜ sβ‰’πŸ˜ = lemma $ begin
      nrβ€² p r z s n                   β‰€βŸ¨ nr-suc ⟩
      s + p Β· n + r Β· nrβ€² p r z s n   β‰‘βŸ¨ +-congΛ‘ {s} (+-comm (p Β· n) (r Β· nrβ€² p r z s n)) ⟩
      s + r Β· nrβ€² p r z s n + p Β· n   β‰‘Λ˜βŸ¨ +-assoc s (r Β· nrβ€² p r z s n) (p Β· n) ⟩
      (s + r Β· nrβ€² p r z s n) + p Β· n β‰‘βŸ¨ +-congΚ³ (β‰’πŸ˜+β‰’πŸ˜ sβ‰’πŸ˜
                                          (β‰’πŸ˜Β·β‰’πŸ˜ rβ‰’πŸ˜ (sβ‰’πŸ˜ βˆ˜β†’ proj₁ βˆ˜β†’ projβ‚‚ βˆ˜β†’ nrβ€²-positive))) ⟩
      ≀ω + p Β· n                      β‰‘βŸ¨ +-zeroΛ‘ (p Β· n) ⟩
      ≀ω                              ∎

opaque

  -- The nr function satisfies Linearity-like-nr-for-𝟘.

  nr-linearity-like-for-𝟘 :
    Has-nr.Linearity-like-nr-for-𝟘 linear-or-affine-has-nr
  nr-linearity-like-for-𝟘 = refl

opaque

  -- The nr function satisfies Linearity-like-nr-for-πŸ™.

  nr-linearity-like-for-πŸ™ :
    Has-nr.Linearity-like-nr-for-πŸ™ linear-or-affine-has-nr
  nr-linearity-like-for-πŸ™ = refl

------------------------------------------------------------------------
-- Instances of Full-reduction-assumptions

-- Instances of Type-restrictions and Usage-restrictions are suitable
-- for the full reduction theorem if
-- * whenever UnitΛ’-allowed holds, then StarΛ’-sink holds,
-- * UnitΚ·-allowed and UnitΚ·-Ξ· do not both hold,
-- * Σ˒-allowed 𝟘 p does not hold,
-- * Ξ£Λ’-allowedΒ β‰€πŸ™Β p does not hold, and
-- * Ξ£Λ’-allowed ≀ω p does not hold.

Suitable-for-full-reduction :
  βˆ€ variant β†’
  Type-restrictions (linear-or-affine variant) β†’
  Usage-restrictions (linear-or-affine variant) β†’
  Set
Suitable-for-full-reduction variant rs us =
  (UnitΛ’-allowed β†’ StarΛ’-sink) Γ—
  (UnitΚ·-allowed β†’ Β¬ UnitΚ·-Ξ·) Γ—
  (βˆ€ p β†’ Β¬ Ξ£Λ’-allowed 𝟘 p) Γ—
  (βˆ€ p β†’ Β¬ Ξ£Λ’-allowed β‰€πŸ™ p) Γ—
  (βˆ€ p β†’ Β¬ Ξ£Λ’-allowed ≀ω p)
  where
  open Type-restrictions  rs
  open Usage-restrictions us

-- Given an instance of Type-restrictionsΒ (linear-or-affineΒ variant)
-- one can create a "suitable" instance.

suitable-for-full-reduction :
  Type-restrictions (linear-or-affine variant) β†’
  βˆƒ Ξ» rs β†’ Suitable-for-full-reduction variant rs urs
suitable-for-full-reduction {urs} rs =
    record rs
      { Unit-allowed = Ξ» where
          𝕀 β†’ UnitΛ’-allowed Γ— StarΛ’-sink
          𝕨 β†’ UnitΚ·-allowed Γ— Β¬ UnitΚ·-Ξ·
      ; Ξ Ξ£-allowed   = Ξ» b p q β†’
          Ξ Ξ£-allowed b p q Γ— (b ≑ BMΞ£ 𝕀 β†’ p ≑ πŸ™)
      ; []-cong-allowed = Ξ» where
          𝕀 β†’ βŠ₯
          𝕨 β†’ []-congΚ·-allowed Γ— Β¬ UnitΚ·-Ξ·
      ; []-cong→Erased = λ where
          {s = 𝕀} ()
          {s = 𝕨} (ok , no-Ξ·) β†’
            case []-cong→Erased ok of λ
              (ok₁ , okβ‚‚) β†’
            (ok₁ , no-Ξ·) , okβ‚‚ , (Ξ» ())
      ; []-cong→¬Trivial = λ where
          {s = 𝕀} ()
          {s = 𝕨}    β†’ []-congβ†’Β¬Trivial βˆ˜β†’ proj₁
      }
  , projβ‚‚
  , projβ‚‚
  , (Ξ» _ β†’ ((Ξ» ()) βˆ˜β†’ (_$ PE.refl)) βˆ˜β†’ projβ‚‚)
  , (Ξ» _ β†’ ((Ξ» ()) βˆ˜β†’ (_$ PE.refl)) βˆ˜β†’ projβ‚‚)
  , (Ξ» _ β†’ ((Ξ» ()) βˆ˜β†’ (_$ PE.refl)) βˆ˜β†’ projβ‚‚)
  where
  open Type-restrictions rs
  open Usage-restrictions urs

-- The full reduction assumptions hold for any instance of
-- linear-or-affine and any "suitable" Type-restrictions and
-- Usage-restrictions.

full-reduction-assumptions :
  Suitable-for-full-reduction variant trs urs β†’
  Full-reduction-assumptions trs urs
full-reduction-assumptions (sink , no-Ξ· , ¬𝟘 , Β¬β‰€πŸ™ , ¬≀ω) = record
  { sinkβŠŽπŸ™β‰€πŸ˜ = Ξ» where
      {s = 𝕀} ok _         β†’ inj₁ (refl , sink ok)
      {s = 𝕨} _  (inj₁ ())
      {s = 𝕨} ok (injβ‚‚ Ξ·)  β†’ βŠ₯-elim (no-Ξ· ok Ξ·)
  ; β‰‘πŸ™βŠŽπŸ™β‰€πŸ˜ = Ξ» where
      {p = 𝟘}  ok β†’ βŠ₯-elim (¬𝟘 _ ok)
      {p = β‰€πŸ™} ok β†’ βŠ₯-elim (Β¬β‰€πŸ™ _ ok)
      {p = ≀ω} ok β†’ βŠ₯-elim (¬≀ω _ ok)
      {p = πŸ™}  _  β†’ inj₁ refl
  }

-- Type and usage restrictions that satisfy the full reduction
-- assumptions are "suitable".

full-reduction-assumptions-suitable :
  Full-reduction-assumptions trs urs β†’
  Suitable-for-full-reduction variant trs urs
full-reduction-assumptions-suitable {urs = urs} as =
     (Ξ» ok β†’ case sinkβŠŽπŸ™β‰€πŸ˜ ok (inj₁ refl) of Ξ» where
        (inj₁ (_ , sink)) β†’ sink
        (injβ‚‚ ()))
   , (Ξ» ok Ξ· β†’ case sinkβŠŽπŸ™β‰€πŸ˜ ok (injβ‚‚ Ξ·) of Ξ» where
        (inj₁ (() , _))
        (injβ‚‚ ()))
   , (Ξ» p Ξ£-ok β†’ case β‰‘πŸ™βŠŽπŸ™β‰€πŸ˜ Ξ£-ok of Ξ» where
        (inj₁ ())
        (injβ‚‚ (_ , _ , ())))
   , (Ξ» p Ξ£-ok β†’ case β‰‘πŸ™βŠŽπŸ™β‰€πŸ˜ Ξ£-ok of Ξ» where
        (inj₁ ())
        (injβ‚‚ (() , _)))
   , Ξ» p Ξ£-ok β†’ case β‰‘πŸ™βŠŽπŸ™β‰€πŸ˜ Ξ£-ok of Ξ» where
        (inj₁ ())
        (injβ‚‚ (() , _))
  where
  open Full-reduction-assumptions as
  open Usage-restrictions urs

------------------------------------------------------------------------
-- Subtraction

open Subtraction linear-or-affine-semiring-with-meet

opaque

  -- Subtraction of Ο‰ by anything is Ο‰

  Ο‰-p≑ω : βˆ€ p β†’ ≀ω - p ≑ ≀ω
  Ο‰-p≑ω p = ∞-pβ‰‘βˆž PE.refl p

opaque

  -- Subtraction of πŸ™ by πŸ™ is 𝟘

  πŸ™-πŸ™β‰‘πŸ˜ : πŸ™ - πŸ™ ≑ 𝟘
  πŸ™-πŸ™β‰‘πŸ˜ =
    refl ,
    Ξ» where
      𝟘  _  β†’ refl
      πŸ™  ()
      β‰€πŸ™ ()
      ≀ω ()

opaque

  -- Subtraction of β‰€πŸ™ by β‰€πŸ™ is 𝟘

  β‰€πŸ™-β‰€πŸ™β‰‘πŸ˜ : β‰€πŸ™ - β‰€πŸ™ ≑ 𝟘
  β‰€πŸ™-β‰€πŸ™β‰‘πŸ˜ =
    refl ,
    Ξ» where
      𝟘  _  β†’ refl
      πŸ™  ()
      β‰€πŸ™ ()
      ≀ω ()

opaque

  -- Subtraction of β‰€πŸ™ by πŸ™ is 𝟘

  β‰€πŸ™-πŸ™β‰‘πŸ˜ : β‰€πŸ™ - πŸ™ ≑ 𝟘
  β‰€πŸ™-πŸ™β‰‘πŸ˜ =
    refl ,
    Ξ» where
      𝟘  _  β†’ refl
      πŸ™  ()
      β‰€πŸ™ ()
      ≀ω ()

opaque

  -- Subtraction of p by ≀ω is not possible unless p ≑ ≀ω

  p-Ο‰β‰° : p - ≀ω ≀ q β†’ p ≑ ≀ω
  p-Ο‰β‰° {(𝟘)} {(𝟘)} ()
  p-Ο‰β‰° {(𝟘)} {(πŸ™)} ()
  p-Ο‰β‰° {(𝟘)} {(β‰€πŸ™)} ()
  p-Ο‰β‰° {(𝟘)} {(≀ω)} ()
  p-Ο‰β‰° {(πŸ™)} {(𝟘)} ()
  p-Ο‰β‰° {(πŸ™)} {(πŸ™)} ()
  p-Ο‰β‰° {(πŸ™)} {(β‰€πŸ™)} ()
  p-Ο‰β‰° {(πŸ™)} {(≀ω)} ()
  p-Ο‰β‰° {(β‰€πŸ™)} {(𝟘)} ()
  p-Ο‰β‰° {(β‰€πŸ™)} {(πŸ™)} ()
  p-Ο‰β‰° {(β‰€πŸ™)} {(β‰€πŸ™)} ()
  p-Ο‰β‰° {(β‰€πŸ™)} {(≀ω)} ()
  p-Ο‰β‰° {(≀ω)} _ = refl

opaque

  -- Subtraction of p by ≀ω is not possible unless p ≑ ≀ω

  p-Ο‰β‰’ : p - ≀ω ≑ q β†’ p ≑ ≀ω
  p-Ο‰β‰’ {q} = p-Ο‰β‰° {q = q} βˆ˜β†’ proj₁

opaque

  -- Subtraction of πŸ™ by β‰€πŸ™ is not possible

  πŸ™-β‰€πŸ™β‰° : πŸ™ - β‰€πŸ™ ≀ p β†’ βŠ₯
  πŸ™-β‰€πŸ™β‰° {(𝟘)} ()
  πŸ™-β‰€πŸ™β‰° {(πŸ™)} ()
  πŸ™-β‰€πŸ™β‰° {(β‰€πŸ™)} ()
  πŸ™-β‰€πŸ™β‰° {(≀ω)} ()

opaque

  -- Subtraction of πŸ™ by β‰€πŸ™ is not possible

  πŸ™-β‰€πŸ™β‰’ : πŸ™ - β‰€πŸ™ ≑ p β†’ βŠ₯
  πŸ™-β‰€πŸ™β‰’ {p} = πŸ™-β‰€πŸ™β‰° {p} βˆ˜β†’ proj₁

opaque

  -- The semiring supports subtraction with
  --   ≀ω - p ≑ ≀ω for all p
  --   p - 𝟘 ≑ p for all p
  --   πŸ™ - πŸ™ ≑ 𝟘
  --   β‰€πŸ™ - β‰€πŸ™ ≑ 𝟘
  --   β‰€πŸ™ - πŸ™ ≑ 𝟘
  -- and not defined otherwise

  supports-subtraction : Supports-subtraction
  supports-subtraction {p} {(≀ω)} {r} x =
    case p-Ο‰β‰° {q = r} x of Ξ» {
      refl β†’
    ≀ω , Ο‰-p≑ω ≀ω }
  supports-subtraction {p} {(𝟘)} {r} x =
    p , p-πŸ˜β‰‘p
  supports-subtraction {(≀ω)} {q} _ =
    ≀ω , Ο‰-p≑ω q
  supports-subtraction {(𝟘)} {r} x =
    case 𝟘-p≀q {q = r} x of Ξ» {
      (refl , refl) β†’
    𝟘 , p-πŸ˜β‰‘p }
  supports-subtraction {(πŸ™)} {(πŸ™)} _ =
    𝟘 , p-pβ‰€πŸ˜ ,
    Ξ» where
      𝟘  _  β†’ refl
      πŸ™  ()
      β‰€πŸ™ ()
      ≀ω ()
  supports-subtraction {(β‰€πŸ™)} {(πŸ™)} x =
    𝟘 , β‰€πŸ™-πŸ™β‰‘πŸ˜
  supports-subtraction {(β‰€πŸ™)} {(β‰€πŸ™)} x =
    𝟘 , p-pβ‰€πŸ˜ ,
    Ξ» where
      𝟘  _  β†’ refl
      πŸ™  ()
      β‰€πŸ™ ()
      ≀ω ()
  supports-subtraction {(πŸ™)} {(β‰€πŸ™)} {r} x =
    βŠ₯-elim (πŸ™-β‰€πŸ™β‰° {p = r} x)

-- An alternative definition of the subtraction relation with
--   ≀ω - p ≑ ≀ω for all p
--   p - 𝟘 ≑ p for all p
--   πŸ™ - πŸ™ ≑ 𝟘
--   β‰€πŸ™ - β‰€πŸ™ ≑ 𝟘
--   β‰€πŸ™ - πŸ™ ≑ 𝟘
-- and not defined otherwise

data _-_≑′_ : (p q r : Linear-or-affine) β†’ Set where
  Ο‰-p≑′ω : ≀ω - p ≑′ ≀ω
  p-πŸ˜β‰‘β€²p : p - 𝟘 ≑′ p
  πŸ™-πŸ™β‰‘β€²πŸ˜ : πŸ™ - πŸ™ ≑′ 𝟘
  β‰€πŸ™-β‰€πŸ™β‰‘β€²πŸ˜ : β‰€πŸ™ - β‰€πŸ™ ≑′ 𝟘
  β‰€πŸ™-πŸ™β‰‘β€²πŸ˜ : β‰€πŸ™ - πŸ™ ≑′ 𝟘

opaque

  -- The two subtraction relations are equivalent.

  -≑↔-≑′ : βˆ€ p q r β†’ (p - q ≑ r) ⇔ (p - q ≑′ r)
  -≑↔-≑′ p q r = left p q r , right
    where
    left : βˆ€ p q r β†’ p - q ≑ r β†’ p - q ≑′ r
    left ≀ω q r p-q≑r =
      case -≑-functional {q = q} p-q≑r (Ο‰-p≑ω q) of Ξ» {
        refl β†’
      Ο‰-p≑′ω }
    left p 𝟘 r p-q≑r =
      case -≑-functional p-q≑r p-πŸ˜β‰‘p of Ξ» {
        refl β†’
      p-πŸ˜β‰‘β€²p }
    left 𝟘 q r p-q≑r =
      case 𝟘-p≑q p-q≑r of Ξ» {
        (refl , refl) β†’
      p-πŸ˜β‰‘β€²p}
    left πŸ™ πŸ™ r p-q≑r =
      case -≑-functional p-q≑r πŸ™-πŸ™β‰‘πŸ˜ of Ξ» {
        refl β†’
      πŸ™-πŸ™β‰‘β€²πŸ˜ }
    left β‰€πŸ™ β‰€πŸ™ r p-q≑r =
      case -≑-functional p-q≑r β‰€πŸ™-β‰€πŸ™β‰‘πŸ˜ of Ξ» {
        refl β†’
      β‰€πŸ™-β‰€πŸ™β‰‘β€²πŸ˜ }
    left β‰€πŸ™ πŸ™ r p-q≑r =
      case -≑-functional p-q≑r β‰€πŸ™-πŸ™β‰‘πŸ˜ of Ξ» {
        refl β†’
      β‰€πŸ™-πŸ™β‰‘β€²πŸ˜ }
    left πŸ™ β‰€πŸ™ r p-q≑r =
      βŠ₯-elim (πŸ™-β‰€πŸ™β‰’ {r} p-q≑r)
    left πŸ™ ≀ω r p-q≑r =
      case p-Ο‰β‰’ p-q≑r of Ξ» ()
    left β‰€πŸ™ ≀ω r p-q≑r =
      case p-Ο‰β‰’ p-q≑r of Ξ» ()
    right : p - q ≑′ r β†’ p - q ≑ r
    right Ο‰-p≑′ω = Ο‰-p≑ω p
    right p-πŸ˜β‰‘β€²p = p-πŸ˜β‰‘p
    right πŸ™-πŸ™β‰‘β€²πŸ˜ = πŸ™-πŸ™β‰‘πŸ˜
    right β‰€πŸ™-β‰€πŸ™β‰‘β€²πŸ˜ = β‰€πŸ™-β‰€πŸ™β‰‘πŸ˜
    right β‰€πŸ™-πŸ™β‰‘β€²πŸ˜ = β‰€πŸ™-πŸ™β‰‘πŸ˜


------------------------------------------------------------------------
-- Properties of greatest lower bounds

opaque

  -- nr 𝟘 r z s 𝟘 is the greatest lower bound of nrᡒ r z s.

  nr-nrα΅’-GLB :
    let 𝕄 = linear-or-affine-semiring-with-meet in
      βˆ€ r β†’ Semiring-with-meet.Greatest-lower-bound
              𝕄 (nr 𝟘 r z s 𝟘) (Semiring-with-meet.nrα΅’ 𝕄 r z s)
  nr-nrα΅’-GLB = Ξ» where
      𝟘 β†’ GLB-congΚ³ (sym (trans (∧-congΚ³ (+-congΚ³ (Β·-zeroΚ³ (πŸ™ ∧ 𝟘))))
            (∧-comm _ _))) nrᡒ-𝟘-GLB
      πŸ™ β†’ lemma-πŸ™ _ _
      β‰€πŸ™ β†’ lemma-β‰€πŸ™ _ _
      ≀ω β†’ lemma-Ο‰ _ _
    where
    open Semiring-with-meet linear-or-affine-semiring-with-meet
      hiding (𝟘; πŸ™; Ο‰; _∧_; _Β·_; _+_)
    open GLB linear-or-affine-semiring-with-meet
    open Natrec linear-or-affine-semiring-with-meet
    open PartialOrder linear-or-affine-semiring-with-meet
    lemmaβ€² : βˆ€ {z} i β†’ nrα΅’ πŸ™ z 𝟘 i ≑ z
    lemmaβ€² 0 = refl
    lemmaβ€² (1+ i) = trans (Β·-identityΛ‘ _) (lemmaβ€² i)
    lemma : βˆ€ {r z s} i β†’
      nrα΅’ r z s i ≑ ≀ω β†’ Greatest-lower-bound ≀ω (nrα΅’ r z s)
    lemma {r} {z} {s} i nrᡒ≑ω =
      (Ξ» i β†’ ≀ω≀ (nrα΅’ r z s i)) , Ξ» q q≀ β†’ ≀-trans (q≀ i) (≀-reflexive nrᡒ≑ω)
    lemma-πŸ™ : βˆ€ z s β†’ Greatest-lower-bound (≀ω Β· s + z) (nrα΅’ πŸ™ z s)
    lemma-πŸ™ 𝟘 𝟘 = GLB-nrα΅’-𝟘
    lemma-πŸ™ 𝟘 πŸ™ = lemma 2 refl
    lemma-πŸ™ 𝟘 β‰€πŸ™ = lemma 2 refl
    lemma-πŸ™ 𝟘 ≀ω = lemma 1 refl
    lemma-πŸ™ πŸ™ 𝟘 = GLB-const lemmaβ€²
    lemma-πŸ™ πŸ™ πŸ™ = lemma 1 refl
    lemma-πŸ™ πŸ™ β‰€πŸ™ = lemma 1 refl
    lemma-πŸ™ πŸ™ ≀ω = lemma 1 refl
    lemma-πŸ™ β‰€πŸ™ 𝟘 = GLB-const lemmaβ€²
    lemma-πŸ™ β‰€πŸ™ πŸ™ = lemma 1 refl
    lemma-πŸ™ β‰€πŸ™ β‰€πŸ™ = lemma 1 refl
    lemma-πŸ™ β‰€πŸ™ ≀ω = lemma 1 refl
    lemma-πŸ™ ≀ω 𝟘 = lemma 0 refl
    lemma-πŸ™ ≀ω πŸ™ = lemma 0 refl
    lemma-πŸ™ ≀ω β‰€πŸ™ = lemma 0 refl
    lemma-πŸ™ ≀ω ≀ω = lemma 0 refl
    lemma-β‰€πŸ™ : βˆ€ z s β†’ Greatest-lower-bound (≀ω Β· s + β‰€πŸ™ Β· z) (nrα΅’ β‰€πŸ™ z s)
    lemma-β‰€πŸ™ 𝟘 𝟘 = GLB-nrα΅’-𝟘
    lemma-β‰€πŸ™ 𝟘 πŸ™ = lemma 2 refl
    lemma-β‰€πŸ™ 𝟘 β‰€πŸ™ = lemma 2 refl
    lemma-β‰€πŸ™ 𝟘 ≀ω = lemma 1 refl
    lemma-β‰€πŸ™ πŸ™ 𝟘 =
      (Ξ» { 0 β†’ refl
         ; (1+ i) β†’ ≀-reflexive (lem i)}) ,
      Ξ» { 𝟘 q≀ β†’ case q≀ 0 of Ξ» ()
        ; πŸ™ q≀ β†’ case q≀ 1 of Ξ» ()
        ; β‰€πŸ™ q≀ β†’ refl
        ; ≀ω q≀ β†’ refl}
      where
      lem : βˆ€ i β†’ β‰€πŸ™ ≑ nrα΅’ β‰€πŸ™ πŸ™ 𝟘 (1+ i)
      lem 0 = refl
      lem (1+ i) = Β·-congΛ‘ {x = β‰€πŸ™} (lem i)
    lemma-β‰€πŸ™ πŸ™ πŸ™ = lemma 1 refl
    lemma-β‰€πŸ™ πŸ™ β‰€πŸ™ = lemma 1 refl
    lemma-β‰€πŸ™ πŸ™ ≀ω = lemma 1 refl
    lemma-β‰€πŸ™ β‰€πŸ™ 𝟘 = GLB-const lem
      where
      lem : βˆ€ i β†’ nrα΅’ β‰€πŸ™ β‰€πŸ™ 𝟘 i ≑ β‰€πŸ™
      lem 0 = refl
      lem (1+ i) = Β·-congΛ‘ {x = β‰€πŸ™} (lem i)
    lemma-β‰€πŸ™ β‰€πŸ™ πŸ™ = lemma 1 refl
    lemma-β‰€πŸ™ β‰€πŸ™ β‰€πŸ™ = lemma 1 refl
    lemma-β‰€πŸ™ β‰€πŸ™ ≀ω = lemma 1 refl
    lemma-β‰€πŸ™ ≀ω 𝟘 = lemma 0 refl
    lemma-β‰€πŸ™ ≀ω πŸ™ = lemma 0 refl
    lemma-β‰€πŸ™ ≀ω β‰€πŸ™ = lemma 0 refl
    lemma-β‰€πŸ™ ≀ω ≀ω = lemma 0 refl
    lemma-Ο‰ : βˆ€ z s β†’ Greatest-lower-bound (≀ω Β· (s + z)) (nrα΅’ ≀ω z s)
    lemma-Ο‰ 𝟘 𝟘 = GLB-nrα΅’-𝟘
    lemma-Ο‰ πŸ™ 𝟘 = lemma 1 refl
    lemma-Ο‰ β‰€πŸ™ 𝟘 = lemma 1 refl
    lemma-Ο‰ ≀ω 𝟘 = lemma 0 refl
    lemma-Ο‰ 𝟘 πŸ™ = lemma 2 refl
    lemma-Ο‰ πŸ™ πŸ™ = lemma 1 refl
    lemma-Ο‰ β‰€πŸ™ πŸ™ = lemma 1 refl
    lemma-Ο‰ ≀ω πŸ™ = lemma 0 refl
    lemma-Ο‰ 𝟘 β‰€πŸ™ = lemma 2 refl
    lemma-Ο‰ πŸ™ β‰€πŸ™ = lemma 1 refl
    lemma-Ο‰ β‰€πŸ™ β‰€πŸ™ = lemma 1 refl
    lemma-Ο‰ ≀ω β‰€πŸ™ = lemma 0 refl
    lemma-Ο‰ 𝟘 ≀ω = lemma 1 refl
    lemma-Ο‰ πŸ™ ≀ω = lemma 1 refl
    lemma-Ο‰ β‰€πŸ™ ≀ω = lemma 1 refl
    lemma-Ο‰ ≀ω ≀ω = lemma 0 refl

opaque

  -- The sequence nrα΅’Β rΒ zΒ s has a greatest lower bound

  nrα΅’-GLB :
    let 𝕄 = linear-or-affine-semiring-with-meet in
    βˆ€ r z s β†’ βˆƒ Ξ» p β†’
      Semiring-with-meet.Greatest-lower-bound
        𝕄 p (Semiring-with-meet.nrα΅’ 𝕄 r z s)
  nrα΅’-GLB r z s = _ , nr-nrα΅’-GLB r

opaque

  -- The modality has well-behaved GLBs

  linear-or-affine-supports-glb-for-natrec :
    Has-well-behaved-GLBs linear-or-affine-semiring-with-meet
  linear-or-affine-supports-glb-for-natrec = record
    { +-GLBΛ‘ = Ξ» {_} {_} {q} β†’ +-GLBΛ‘ {q = q}
    ; Β·-GLBΛ‘ = Ξ» {_} {_} {q} β†’ Β·-GLBΛ‘ {q = q}
    ; Β·-GLBΚ³ = comm∧·-GLBΛ‘β‡’Β·-GLBΚ³ Β·-comm (Ξ» {_} {_} {q} β†’ Β·-GLBΛ‘ {q = q})
    ; +nrα΅’-GLB = +nrα΅’-GLB
    }
    where
    open Semiring-with-meet linear-or-affine-semiring-with-meet
      hiding (𝟘; πŸ™; Ο‰; _+_; _Β·_; _∧_; _≀_)
    open GLB linear-or-affine-semiring-with-meet
    open Multiplication linear-or-affine-semiring-with-meet
    open PartialOrder linear-or-affine-semiring-with-meet

    Β·-GLBΛ‘ :
      {pα΅’ : Sequence Linear-or-affine} β†’
      Greatest-lower-bound p pα΅’ β†’
      Greatest-lower-bound (q Β· p) (Ξ» i β†’ q Β· pα΅’ i)
    Β·-GLBΛ‘ {q = 𝟘} p-glb = GLB-constβ€²
    Β·-GLBΛ‘ {q = πŸ™} p-glb =
      GLB-cong (sym (Β·-identityΛ‘ _))
        (Ξ» _ β†’ sym (Β·-identityΛ‘ _))
        p-glb
    Β·-GLBΛ‘ {q = β‰€πŸ™} {pα΅’} p-glb = lemma _ p-glb
      where
      lemmaβ€² : 𝟘 ≀ β‰€πŸ™ Β· p β†’ p ≑ 𝟘
      lemmaβ€² {(𝟘)} _ = refl
      lemmaβ€² {(πŸ™)} ()
      lemmaβ€² {(β‰€πŸ™)} ()
      lemmaβ€² {(≀ω)} ()
      lemmaβ€³ : βˆ€ p β†’ πŸ™ ≀ β‰€πŸ™ Β· p β†’ βŠ₯
      lemmaβ€³ 𝟘 ()
      lemmaβ€³ πŸ™ ()
      lemmaβ€³ β‰€πŸ™ ()
      lemmaβ€³ ≀ω ()
      lemma‴ : β‰€πŸ™ ≀ β‰€πŸ™ Β· p β†’ β‰€πŸ™ ≀ p
      lemma‴ {(𝟘)} _ = refl
      lemma‴ {(πŸ™)} _ = refl
      lemma‴ {(β‰€πŸ™)} _ = refl
      lemma‴ {(≀ω)} ()
      lemma⁗ : Greatest-lower-bound ≀ω pα΅’ β†’ (βˆ€ i β†’ β‰€πŸ™ ≀ pα΅’ i) β†’ βŠ₯
      lemma⁗ Ο‰-glb ≀pα΅’ = case Ο‰-glb .projβ‚‚ β‰€πŸ™ ≀pα΅’ of Ξ» ()
      lemma :
        βˆ€ p β†’ Greatest-lower-bound p pα΅’ β†’
        Greatest-lower-bound (β‰€πŸ™ Β· p) (Ξ» i β†’ β‰€πŸ™ Β· pα΅’ i)
      lemma 𝟘 p-glb =
        GLB-const (Ξ» i β†’ Β·-congΛ‘ {x = β‰€πŸ™} (𝟘-GLB-inv p-glb i))
      lemma πŸ™ p-glb =
          (Ξ» i β†’ Β·-monotoneΚ³ {r = β‰€πŸ™} (p-glb .proj₁ i))
        , Ξ» { 𝟘 q≀ β†’ βŠ₯-elim (β‰’p-GLB-inv (Ξ» ()) p-glb (lemmaβ€² βˆ˜β†’ q≀))
            ; πŸ™ q≀ β†’ βŠ₯-elim (lemmaβ€³ (pα΅’ 0) (q≀ 0))
            ; β‰€πŸ™ q≀ β†’ refl
            ; ≀ω q≀ β†’ refl}
      lemma β‰€πŸ™ p-glb =
          (Ξ» i β†’ Β·-monotoneΚ³ {r = β‰€πŸ™} (p-glb .proj₁ i))
        , Ξ» { 𝟘 q≀ β†’ βŠ₯-elim (β‰’p-GLB-inv (Ξ» ()) p-glb (lemmaβ€² βˆ˜β†’ q≀))
            ; πŸ™ q≀ β†’ βŠ₯-elim (lemmaβ€³ (pα΅’ 0) (q≀ 0))
            ; β‰€πŸ™ q≀ β†’ refl
            ; ≀ω q≀ β†’ refl}
      lemma ≀ω p-glb =
          (Ξ» _ β†’ refl)
        , Ξ» { 𝟘 q≀ β†’ βŠ₯-elim (β‰’p-GLB-inv (Ξ» ()) p-glb (lemmaβ€² βˆ˜β†’ q≀))
            ; πŸ™ q≀ β†’ βŠ₯-elim (lemmaβ€³ (pα΅’ 0) (q≀ 0))
            ; β‰€πŸ™ q≀ β†’ βŠ₯-elim (lemma⁗ p-glb (Ξ» i β†’ lemma‴ (q≀ i)))
            ; ≀ω q≀ β†’ refl}
    Β·-GLBΛ‘ {q = ≀ω} {pα΅’} p-glb = lemma _ p-glb
      where
      lemmaβ€² : 𝟘 ≀ ≀ω Β· p β†’ p ≑ 𝟘
      lemmaβ€² {(𝟘)} _ = refl
      lemmaβ€² {(πŸ™)} ()
      lemmaβ€² {(β‰€πŸ™)} ()
      lemmaβ€² {(≀ω)} ()
      lemmaβ€³ : βˆ€ p β†’ πŸ™ ≀ ≀ω Β· p β†’ βŠ₯
      lemmaβ€³ 𝟘 ()
      lemmaβ€³ πŸ™ ()
      lemmaβ€³ β‰€πŸ™ ()
      lemmaβ€³ ≀ω ()
      lemma‴ : β‰€πŸ™ ≀ ≀ω Β· p β†’ p ≑ 𝟘
      lemma‴ {(𝟘)} _ = refl
      lemma‴ {(πŸ™)} ()
      lemma‴ {(β‰€πŸ™)} ()
      lemma‴ {(≀ω)} ()
      lemma :
        βˆ€ p β†’ Greatest-lower-bound p pα΅’ β†’
        Greatest-lower-bound (≀ω Β· p) (Ξ» i β†’ ≀ω Β· pα΅’ i)
      lemma 𝟘 p-glb =
        GLB-const (Ξ» i β†’ Β·-congΛ‘ {x = ≀ω} (𝟘-GLB-inv p-glb i))
      lemma πŸ™ p-glb =
          (Ξ» _ β†’ refl)
        , Ξ» { 𝟘 q≀ β†’ βŠ₯-elim (β‰’p-GLB-inv (Ξ» ()) p-glb (lemmaβ€² βˆ˜β†’ q≀))
            ; πŸ™ q≀ β†’ βŠ₯-elim (lemmaβ€³ (pα΅’ 0) (q≀ 0))
            ; β‰€πŸ™ q≀ β†’ βŠ₯-elim (β‰’p-GLB-inv (Ξ» ()) p-glb (lemma‴ βˆ˜β†’ q≀))
            ; ≀ω q≀ β†’ refl}
      lemma β‰€πŸ™ p-glb =
          (Ξ» _ β†’ refl)
        , Ξ» { 𝟘 q≀ β†’ βŠ₯-elim (β‰’p-GLB-inv (Ξ» ()) p-glb (lemmaβ€² βˆ˜β†’ q≀))
            ; πŸ™ q≀ β†’ βŠ₯-elim (lemmaβ€³ (pα΅’ 0) (q≀ 0))
            ; β‰€πŸ™ q≀ β†’ βŠ₯-elim (β‰’p-GLB-inv (Ξ» ()) p-glb (lemma‴ βˆ˜β†’ q≀))
            ; ≀ω q≀ β†’ refl}
      lemma ≀ω p-glb =
          (Ξ» _ β†’ refl)
        , Ξ» { 𝟘 q≀ β†’ βŠ₯-elim (β‰’p-GLB-inv (Ξ» ()) p-glb (lemmaβ€² βˆ˜β†’ q≀))
            ; πŸ™ q≀ β†’ βŠ₯-elim (lemmaβ€³ (pα΅’ 0) (q≀ 0))
            ; β‰€πŸ™ q≀ β†’ βŠ₯-elim (β‰’p-GLB-inv (Ξ» ()) p-glb (lemma‴ βˆ˜β†’ q≀))
            ; ≀ω q≀ β†’ refl}

    +-GLBΛ‘ :
      {pα΅’ : Sequence Linear-or-affine} β†’
      Greatest-lower-bound p pα΅’ β†’
      Greatest-lower-bound (q + p) (Ξ» i β†’ q + pα΅’ i)
    +-GLBˑ {q = 𝟘} p-glb = p-glb
    +-GLBΛ‘ {q = πŸ™} {pα΅’} p-glb = lemma _ p-glb
      where
      lemmaβ€² : βˆ€ p q β†’ q β‰’ ≀ω β†’ q ≀ πŸ™ + p β†’ p ≑ 𝟘
      lemmaβ€² 𝟘 𝟘 _ _ = refl
      lemmaβ€² 𝟘 πŸ™ _ _ = refl
      lemmaβ€² 𝟘 β‰€πŸ™ _ _ = refl
      lemmaβ€² p ≀ω qβ‰’Ο‰ _ = βŠ₯-elim (qβ‰’Ο‰ refl)
      lemmaβ€² πŸ™ 𝟘 qβ‰’Ο‰ ()
      lemmaβ€² πŸ™ πŸ™ qβ‰’Ο‰ ()
      lemmaβ€² πŸ™ β‰€πŸ™ qβ‰’Ο‰ ()
      lemmaβ€² β‰€πŸ™ 𝟘 qβ‰’Ο‰ ()
      lemmaβ€² β‰€πŸ™ πŸ™ qβ‰’Ο‰ ()
      lemmaβ€² β‰€πŸ™ β‰€πŸ™ qβ‰’Ο‰ ()
      lemmaβ€² ≀ω 𝟘 qβ‰’Ο‰ ()
      lemmaβ€² ≀ω πŸ™ qβ‰’Ο‰ ()
      lemmaβ€² ≀ω β‰€πŸ™ qβ‰’Ο‰ ()
      lemma :
        βˆ€ p β†’ Greatest-lower-bound p pα΅’ β†’
        Greatest-lower-bound (πŸ™ + p) (Ξ» i β†’ πŸ™ + pα΅’ i)
      lemma 𝟘 p-glb =
        GLB-const (Ξ» i β†’ +-congΛ‘ {x = πŸ™} (𝟘-GLB-inv p-glb i))
      lemma πŸ™ p-glb =
          (Ξ» _ β†’ refl)
        , Ξ» { 𝟘 q≀ β†’ βŠ₯-elim (β‰’p-GLB-inv (Ξ» ()) p-glb (lemmaβ€² _ _ (Ξ» ()) βˆ˜β†’ q≀))
            ; πŸ™ q≀ β†’ βŠ₯-elim (β‰’p-GLB-inv (Ξ» ()) p-glb (lemmaβ€² _ _ (Ξ» ()) βˆ˜β†’ q≀))
            ; β‰€πŸ™ q≀ β†’ βŠ₯-elim (β‰’p-GLB-inv (Ξ» ()) p-glb (lemmaβ€² _ _ (Ξ» ()) βˆ˜β†’ q≀))
            ; ≀ω q≀ β†’ refl}
      lemma β‰€πŸ™ p-glb =
          (Ξ» _ β†’ refl)
        , Ξ» { 𝟘 q≀ β†’ βŠ₯-elim (β‰’p-GLB-inv (Ξ» ()) p-glb (lemmaβ€² _ _ (Ξ» ()) βˆ˜β†’ q≀))
            ; πŸ™ q≀ β†’ βŠ₯-elim (β‰’p-GLB-inv (Ξ» ()) p-glb (lemmaβ€² _ _ (Ξ» ()) βˆ˜β†’ q≀))
            ; β‰€πŸ™ q≀ β†’ βŠ₯-elim (β‰’p-GLB-inv (Ξ» ()) p-glb (lemmaβ€² _ _ (Ξ» ()) βˆ˜β†’ q≀))
            ; ≀ω q≀ β†’ refl}
      lemma ≀ω p-glb =
          (Ξ» _ β†’ refl)
        , Ξ» { 𝟘 q≀ β†’ βŠ₯-elim (β‰’p-GLB-inv (Ξ» ()) p-glb (lemmaβ€² _ _ (Ξ» ()) βˆ˜β†’ q≀))
            ; πŸ™ q≀ β†’ βŠ₯-elim (β‰’p-GLB-inv (Ξ» ()) p-glb (lemmaβ€² _ _ (Ξ» ()) βˆ˜β†’ q≀))
            ; β‰€πŸ™ q≀ β†’ βŠ₯-elim (β‰’p-GLB-inv (Ξ» ()) p-glb (lemmaβ€² _ _ (Ξ» ()) βˆ˜β†’ q≀))
            ; ≀ω q≀ β†’ refl}
    +-GLBΛ‘ {q = β‰€πŸ™} {pα΅’} p-glb = lemma _ p-glb
      where
      lemma :
        βˆ€ p β†’ Greatest-lower-bound p pα΅’ β†’
        Greatest-lower-bound (β‰€πŸ™ + p) (Ξ» i β†’ β‰€πŸ™ + pα΅’ i)
      lemmaβ€² : βˆ€ p q β†’ q β‰’ ≀ω β†’ q ≀ β‰€πŸ™ + p β†’ p ≑ 𝟘
      lemmaβ€² 𝟘 _ _ _ = refl
      lemmaβ€² _ ≀ω qβ‰’Ο‰ _ = βŠ₯-elim (qβ‰’Ο‰ refl)
      lemmaβ€² πŸ™ 𝟘 _ ()
      lemmaβ€² πŸ™ πŸ™ _ ()
      lemmaβ€² πŸ™ β‰€πŸ™ _ ()
      lemmaβ€² β‰€πŸ™ 𝟘 _ ()
      lemmaβ€² β‰€πŸ™ πŸ™ _ ()
      lemmaβ€² β‰€πŸ™ β‰€πŸ™ _ ()
      lemmaβ€² ≀ω 𝟘 _ ()
      lemmaβ€² ≀ω πŸ™ _ ()
      lemmaβ€² ≀ω β‰€πŸ™ _ ()
      lemma 𝟘 p-glb =
        GLB-const (Ξ» i β†’ +-congΛ‘ {x = β‰€πŸ™} (𝟘-GLB-inv p-glb i))
      lemma πŸ™ p-glb =
          (Ξ» _ β†’ refl)
        , (Ξ» { 𝟘 q≀ β†’ βŠ₯-elim (β‰’p-GLB-inv (Ξ» ()) p-glb (lemmaβ€² _ _ (Ξ» ()) βˆ˜β†’ q≀))
             ; πŸ™ q≀ β†’ βŠ₯-elim (β‰’p-GLB-inv (Ξ» ()) p-glb (lemmaβ€² _ _ (Ξ» ()) βˆ˜β†’ q≀))
             ; β‰€πŸ™ q≀ β†’ βŠ₯-elim (β‰’p-GLB-inv (Ξ» ()) p-glb (lemmaβ€² _ _ (Ξ» ()) βˆ˜β†’ q≀))
             ; ≀ω q≀ β†’ refl})
      lemma β‰€πŸ™ p-glb =
          (Ξ» _ β†’ refl)
        , Ξ» { 𝟘 q≀ β†’ βŠ₯-elim (β‰’p-GLB-inv (Ξ» ()) p-glb (lemmaβ€² _ _ (Ξ» ()) βˆ˜β†’ q≀))
            ; πŸ™ q≀ β†’ βŠ₯-elim (β‰’p-GLB-inv (Ξ» ()) p-glb (lemmaβ€² _ _ (Ξ» ()) βˆ˜β†’ q≀))
            ; β‰€πŸ™ q≀ β†’ βŠ₯-elim (β‰’p-GLB-inv (Ξ» ()) p-glb (lemmaβ€² _ _ (Ξ» ()) βˆ˜β†’ q≀))
            ; ≀ω q≀ β†’ refl}
      lemma ≀ω p-glb =
          (Ξ» _ β†’ refl)
        , Ξ» { 𝟘 q≀ β†’ βŠ₯-elim (β‰’p-GLB-inv (Ξ» ()) p-glb (lemmaβ€² _ _ (Ξ» ()) βˆ˜β†’ q≀))
            ; πŸ™ q≀ β†’ βŠ₯-elim (β‰’p-GLB-inv (Ξ» ()) p-glb (lemmaβ€² _ _ (Ξ» ()) βˆ˜β†’ q≀))
            ; β‰€πŸ™ q≀ β†’ βŠ₯-elim (β‰’p-GLB-inv (Ξ» ()) p-glb (lemmaβ€² _ _ (Ξ» ()) βˆ˜β†’ q≀))
            ; ≀ω q≀ β†’ refl}
    +-GLBΛ‘ {q = ≀ω} {pα΅’} p-glb = lemma _ p-glb
      where
      lemmaβ€² : βˆ€ p q β†’ q β‰’ ≀ω β†’ q ≀ ≀ω + p β†’ βŠ₯
      lemmaβ€² p 𝟘 qβ‰’Ο‰ x rewrite ≀ω+ p = case x of Ξ» ()
      lemmaβ€² p πŸ™ qβ‰’Ο‰ x rewrite ≀ω+ p = case x of Ξ» ()
      lemmaβ€² p β‰€πŸ™ qβ‰’Ο‰ x rewrite ≀ω+ p = case x of Ξ» ()
      lemmaβ€² p ≀ω qβ‰’Ο‰ _ = qβ‰’Ο‰ refl
      lemma :
        βˆ€ p β†’ Greatest-lower-bound p pα΅’ β†’
        Greatest-lower-bound (≀ω + p) (Ξ» i β†’ ≀ω + pα΅’ i)
      lemma 𝟘 p-glb =
        GLB-const (Ξ» i β†’ +-congΛ‘ {x = ≀ω} (𝟘-GLB-inv p-glb i))
      lemma πŸ™ p-glb =
          (Ξ» _ β†’ refl)
        , Ξ» { 𝟘 q≀ β†’ βŠ₯-elim (lemmaβ€² (pα΅’ 0) _ (Ξ» ()) (q≀ 0))
            ; πŸ™ q≀ β†’ βŠ₯-elim (lemmaβ€² (pα΅’ 0) _ (Ξ» ()) (q≀ 0))
            ; β‰€πŸ™ q≀ β†’ βŠ₯-elim (lemmaβ€² (pα΅’ 0) _ (Ξ» ()) (q≀ 0))
            ; ≀ω q≀ β†’ refl}
      lemma β‰€πŸ™ p-glb =
          (Ξ» _ β†’ refl)
        , Ξ» { 𝟘 q≀ β†’ βŠ₯-elim (lemmaβ€² (pα΅’ 0) _ (Ξ» ()) (q≀ 0))
            ; πŸ™ q≀ β†’ βŠ₯-elim (lemmaβ€² (pα΅’ 0) _ (Ξ» ()) (q≀ 0))
            ; β‰€πŸ™ q≀ β†’ βŠ₯-elim (lemmaβ€² (pα΅’ 0) _ (Ξ» ()) (q≀ 0))
            ; ≀ω q≀ β†’ refl}
      lemma ≀ω p-glb =
          (Ξ» _ β†’ refl)
        , Ξ» { 𝟘 q≀ β†’ βŠ₯-elim (lemmaβ€² (pα΅’ 0) _ (Ξ» ()) (q≀ 0))
            ; πŸ™ q≀ β†’ βŠ₯-elim (lemmaβ€² (pα΅’ 0) _ (Ξ» ()) (q≀ 0))
            ; β‰€πŸ™ q≀ β†’ βŠ₯-elim (lemmaβ€² (pα΅’ 0) _ (Ξ» ()) (q≀ 0))
            ; ≀ω q≀ β†’ refl}

    open Tools.Reasoning.PartialOrder ≀-poset

    +nrα΅’-GLB :
      βˆ€ {p₁ pβ‚‚} β†’
      Greatest-lower-bound p₁ (nrα΅’ r z₁ s₁) β†’
      Greatest-lower-bound pβ‚‚ (nrα΅’ r zβ‚‚ sβ‚‚) β†’
      βˆƒ Ξ» q β†’ Greatest-lower-bound q (nrα΅’ r (z₁ + zβ‚‚) (s₁ + sβ‚‚)) Γ—
          p₁ + pβ‚‚ ≀ q
    +nrα΅’-GLB {r} {z₁} {s₁} {zβ‚‚} {sβ‚‚} {p₁} {pβ‚‚} p₁-glb pβ‚‚-glb =
      _ , nr-nrα΅’-GLB r , (begin
        p₁ + pβ‚‚                         β‰‘βŸ¨ +-cong (GLB-unique p₁-glb (nr-nrα΅’-GLB r))
                                           (GLB-unique pβ‚‚-glb (nr-nrα΅’-GLB r)) ⟩
        nr 𝟘 r z₁ s₁ 𝟘 + nr 𝟘 r zβ‚‚ sβ‚‚ 𝟘 β‰€βŸ¨ Has-nr.nr-+ linear-or-affine-has-nr {𝟘} {r} ⟩
        nr 𝟘 r (z₁ + zβ‚‚) (s₁ + sβ‚‚) 𝟘    ∎)