open import Tools.Bool using (Bool; true; false; if_then_else_; T)
module Graded.Modality.Instances.Zero-one-many
(πβ€π : Bool)
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
import Graded.Modality.Instances.LowerBounded as LowerBounded
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.PartialOrder as PartialOrder
import Graded.Modality.Properties.Star as Star
import Graded.Modality.Properties.Natrec as Natrec
import Graded.Modality.Properties.Subtraction as Subtraction
open import Graded.Modality.Variant lzero
data Zero-one-many : Set where
π π Ο : Zero-one-many
private variable
n nβ nβ p pβ pβ q r result s sβ sβ z zβ zβ : Zero-one-many
open Graded.Modality Zero-one-many
open Tools.Algebra Zero-one-many
infix 10 _β_
_β_ : Decidable (_β‘_ {A = Zero-one-many})
π β π = yes refl
π β π = no (Ξ» ())
π β Ο = no (Ξ» ())
π β π = no (Ξ» ())
π β π = yes refl
π β Ο = no (Ξ» ())
Ο β π = no (Ξ» ())
Ο β π = no (Ξ» ())
Ο β Ο = yes refl
Meet-requirements :
(Zero-one-many β Zero-one-many β Zero-one-many) β Set
Meet-requirements _β§_ =
(π β§ π β‘ π) Γ
(π β§ π β‘ π) Γ
(Ο β§ Ο β‘ Ο) Γ
(π β§ Ο β‘ Ο) Γ
(Ο β§ π β‘ Ο) Γ
(π β§ Ο β‘ Ο) Γ
(Ο β§ π β‘ Ο) Γ
(π β§ π β’ π) Γ
(π β§ π β’ π)
Meet-requirements-required :
(M : Semiring-with-meet) β
Semiring-with-meet.π M β‘ π β
Semiring-with-meet.π M β‘ π β
Semiring-with-meet._β§_ M π π β’ π β
(β p β Semiring-with-meet._β€_ M Ο p) β
Meet-requirements (Semiring-with-meet._β§_ M)
Meet-requirements-required M@record{} refl refl πβ§πβ’π Οβ€ =
(π β§ π β‘β¨ β§-idem _ β©
π β)
, (π β§ π β‘β¨ β§-idem _ β©
π β)
, (Ο β§ Ο β‘β¨ β§-idem _ β©
Ο β)
, (π β§ Ο β‘β¨ β§-comm _ _ β©
Ο β§ π β‘Λβ¨ Οβ€ π β©
Ο β)
, (Ο β§ π β‘Λβ¨ Οβ€ π β©
Ο β)
, (π β§ Ο β‘β¨ β§-comm _ _ β©
Ο β§ π β‘Λβ¨ Οβ€ π β©
Ο β)
, (Ο β§ π β‘Λβ¨ Οβ€ π β©
Ο β)
, πβ§πβ’π
, (Ξ» πβ§πβ‘π β πβ§πβ’π (
π β§ π β‘β¨ β§-comm _ _ β©
π β§ π β‘β¨ πβ§πβ‘π β©
π β))
where
open Semiring-with-meet M hiding (π; π; Ο)
open Meet M
open PartialOrder M
open Tools.Reasoning.PropositionalEquality
πβ§π : Zero-one-many
πβ§π = if πβ€π then π else Ο
infixr 43 _β§_
_β§_ : Zero-one-many β Zero-one-many β Zero-one-many
π β§ π = π
π β§ π = π
π β§ π = πβ§π
π β§ π = πβ§π
_ β§ _ = Ο
πβ§πβ‘π : T πβ€π β πβ§π β‘ π
πβ§πβ‘π = lemma _
where
lemma : β b β T b β (if b then π else Ο) β‘ π
lemma true _ = refl
lemma false ()
πβ§πβ‘πβπβ€π : πβ§π β‘ π β T πβ€π
πβ§πβ‘πβπβ€π = lemma _
where
lemma : β b β (if b then π else Ο) β‘ π β T b
lemma true _ = _
lemma false ()
πβ§πβ‘Ο : Β¬ T πβ€π β πβ§π β‘ Ο
πβ§πβ‘Ο = lemma _
where
lemma : β b β Β¬ T b β (if b then π else Ο) β‘ Ο
lemma false _ = refl
lemma true Β¬β€ = β₯-elim (Β¬β€ _)
πβ§πβ’πβπβ°π : πβ§π β’ π β Β¬ T πβ€π
πβ§πβ’πβπβ°π = lemma _
where
lemma : β b β (if b then π else Ο) β’ π β Β¬ T b
lemma true πβ’π = Ξ» _ β πβ’π refl
lemma false _ = idαΆ
πβ§πβ’π : πβ§π β’ π
πβ§πβ’π = lemma _
where
lemma : β b β (if b then π else Ο) β’ π
lemma false ()
lemma true ()
πβ§π-elim :
β {p} (P : Zero-one-many β Set p) β
(πβ§π β‘ π β P π) β
(πβ§π β‘ Ο β P Ο) β
P πβ§π
πβ§π-elim P one omega = lemma _ refl
where
lemma : β p β πβ§π β‘ p β P p
lemma π πβ§πβ‘π = β₯-elim (πβ§πβ’π πβ§πβ‘π)
lemma π πβ§πβ‘π = one πβ§πβ‘π
lemma Ο πβ§πβ‘Ο = omega πβ§πβ‘Ο
πβ§[πβ§π] : π β§ πβ§π β‘ πβ§π
πβ§[πβ§π] = πβ§π-elim
(Ξ» p β π β§ p β‘ p)
(Ξ» πβ§πβ‘π β πβ§πβ‘π)
(Ξ» _ β refl)
πβ§[πβ§π] : π β§ πβ§π β‘ πβ§π
πβ§[πβ§π] = πβ§π-elim
(Ξ» p β π β§ p β‘ p)
(Ξ» _ β refl)
(Ξ» _ β refl)
β§-zeroΚ³ : RightZero Ο _β§_
β§-zeroΚ³ π = refl
β§-zeroΚ³ π = refl
β§-zeroΚ³ Ο = refl
β§-zero : Zero Ο _β§_
β§-zero = (Ξ» _ β refl) , β§-zeroΚ³
β§β‘π :
p β§ q β‘ π β
p β‘ π Γ q β‘ π Γ T πβ€π β
p β‘ π Γ q β‘ π Γ T πβ€π β
p β‘ π Γ q β‘ π
β§β‘π {p = π} {q = π} eq = injβ (refl , refl , πβ§πβ‘πβπβ€π eq)
β§β‘π {p = π} {q = π} eq = injβ (injβ (refl , refl , πβ§πβ‘πβπβ€π eq))
β§β‘π {p = π} {q = π} _ = injβ (injβ (refl , refl))
β§β‘π {p = π} {q = π} ()
β§β‘π {p = π} {q = Ο} ()
β§β‘π {p = π} {q = Ο} ()
β§β‘π {p = Ο} ()
opaque
πβ§pβ’π : β p β π β§ p β’ π
πβ§pβ’π π = πβ§πβ’π
πβ§pβ’π π = Ξ» ()
πβ§pβ’π Ο = Ξ» ()
Order-requirements : (Zero-one-many β Zero-one-many β Set) β Set
Order-requirements _β€_ = (Ο β€ π) Γ (Ο β€ π) Γ Β¬ (π β€ π)
Order-requirements-required :
(M : Semiring-with-meet) β
Semiring-with-meet.π M β‘ π β
Semiring-with-meet.π M β‘ π β
Semiring-with-meet._β§_ M π π β’ π β
(β p β Semiring-with-meet._β€_ M Ο p) β
Order-requirements (Semiring-with-meet._β€_ M)
Order-requirements-required M@record{} refl refl πβ§πβ’π Οβ€ =
case Meet-requirements-required M refl refl πβ§πβ’π Οβ€ of Ξ» where
(_ , _ , _ , _ , Οβπβ‘Ο , _ , Οβπβ‘Ο , πβπβ’π , _) β
(Ο β‘Λβ¨ Οβπβ‘Ο β©
Ο β π β)
, (Ο β‘Λβ¨ Οβπβ‘Ο β©
Ο β π β)
, (Ξ» πβ‘πβπ β πβπβ’π (
π β π β‘Λβ¨ πβ‘πβπ β©
π β))
where
open Semiring-with-meet M using () renaming (_β§_ to _β_)
open Tools.Reasoning.PropositionalEquality
infix 10 _β€_
_β€_ : Zero-one-many β Zero-one-many β Set
p β€ q = p β‘ p β§ q
Οβ€ : β p β Ο β€ p
Οβ€ _ = refl
π-maximal : π β€ p β p β‘ π
π-maximal {p = Ο} ()
π-maximal {p = π} refl = refl
π-maximal {p = π} = πβ§π-elim
(Ξ» q β π β‘ q β π β‘ π)
(Ξ» _ β sym)
(Ξ» _ ())
πβ°πβ§π : Β¬ π β€ πβ§π
πβ°πβ§π = πβ§πβ’π ββ π-maximal
πβ€πβπβ€π : T πβ€π β π β€ π
πβ€πβπβ€π πβ€π =
π β‘Λβ¨ πβ§πβ‘π πβ€π β©
π β§ π β
where
open Tools.Reasoning.PropositionalEquality
π-maximal : Β¬ T πβ€π β π β€ p β p β‘ π
π-maximal {p = Ο} _ ()
π-maximal {p = π} _ refl = refl
π-maximal {p = π} πβ°π πβ€π = β₯-elim (
case
π β‘β¨ πβ€π β©
π β§ π β‘β¨ πβ§πβ‘Ο πβ°π β©
Ο β
of Ξ» ())
where
open Tools.Reasoning.PropositionalEquality
opaque
β’πββ€π : β p β p β’ π β p β€ π
β’πββ€π π pβ’π = β₯-elim (pβ’π refl)
β’πββ€π π pβ’π = refl
β’πββ€π Ο pβ’π = refl
infixr 40 _+_
_+_ : Zero-one-many β Zero-one-many β Zero-one-many
π + q = q
π + π = π
_ + _ = Ο
+-decreasingΛ‘ : T πβ€π β β p q β p + q β€ p
+-decreasingΛ‘ πβ€π = Ξ» where
π π β refl
π π β πβ€πβπβ€π πβ€π
π Ο β refl
π π β refl
π π β refl
π Ο β refl
Ο _ β refl
Β¬-+-decreasingΛ‘ : Β¬ T πβ€π β Β¬ (β p q β p + q β€ p)
Β¬-+-decreasingΛ‘ πβ°π hyp =
case π-maximal {p = π} πβ°π (hyp π π) of Ξ» ()
β’π+β’π : p β’ π β q β’ π β p + q β‘ Ο
β’π+β’π {p = π} πβ’π _ = β₯-elim (πβ’π refl)
β’π+β’π {p = π} {q = π} _ πβ’π = β₯-elim (πβ’π refl)
β’π+β’π {p = π} {q = π} _ _ = refl
β’π+β’π {p = π} {q = Ο} _ _ = refl
β’π+β’π {p = Ο} _ _ = refl
+β‘π : 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 = Ο} ()
+-zeroΚ³ : RightZero Ο _+_
+-zeroΚ³ π = refl
+-zeroΚ³ π = refl
+-zeroΚ³ Ο = refl
+-zero : Zero Ο _+_
+-zero = (Ξ» _ β refl) , +-zeroΚ³
infixr 45 _Β·_
_Β·_ : Zero-one-many β Zero-one-many β Zero-one-many
π Β· _ = π
_ Β· π = π
π Β· π = π
_ Β· _ = Ο
Β·-idempotent : Idempotent _Β·_
Β·-idempotent π = refl
Β·-idempotent π = refl
Β·-idempotent Ο = refl
Β·-comm : Commutative _Β·_
Β·-comm = Ξ» where
π π β refl
π π β refl
π Ο β refl
π π β refl
π π β refl
π Ο β refl
Ο π β refl
Ο π β refl
Ο Ο β refl
ΟΒ·β’π : p β’ π β Ο Β· p β‘ Ο
ΟΒ·β’π {p = π} πβ’π = β₯-elim (πβ’π refl)
ΟΒ·β’π {p = π} _ = refl
ΟΒ·β’π {p = Ο} _ = refl
opaque
β’πΒ·Ο : p β’ π β p Β· Ο β‘ Ο
β’πΒ·Ο {(π)} πβ’π = β₯-elim (πβ’π refl)
β’πΒ·Ο {(π)} _ = refl
β’πΒ·Ο {(Ο)} _ = refl
πΒ·β’π : p β’ π β π Β· p β’ π
πΒ·β’π {p = π} πβ’π = πβ’π
πΒ·β’π {p = π} πβ’π = πβ’π
πΒ·β’π {p = Ο} Οβ’π = Οβ’π
ΟΒ·β’π : Ο Β· p β’ π
ΟΒ·β’π {p = π} ()
ΟΒ·β’π {p = π} ()
ΟΒ·β’π {p = Ο} ()
opaque
ΟΒ·+β€ΟΒ·Κ³ : β p β Ο Β· (p + q) β€ Ο Β· q
ΟΒ·+β€ΟΒ·Κ³ {q = π} π = refl
ΟΒ·+β€ΟΒ·Κ³ {q = π} π = refl
ΟΒ·+β€ΟΒ·Κ³ {q = Ο} π = refl
ΟΒ·+β€ΟΒ·Κ³ {q = π} π = refl
ΟΒ·+β€ΟΒ·Κ³ {q = π} π = refl
ΟΒ·+β€ΟΒ·Κ³ {q = Ο} π = refl
ΟΒ·+β€ΟΒ·Κ³ Ο = refl
zero-one-many-semiring-with-meet : Semiring-with-meet
zero-one-many-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 = Ξ» where
π _ _ β refl
π π _ β refl
π π π β refl
π π π β refl
π π Ο β refl
π Ο _ β refl
Ο _ _ β refl
}
; identity =
(Ξ» _ β refl)
, commβ§idΛ‘βidΚ³ +-comm (Ξ» _ β refl)
}
; comm = +-comm
}
; *-cong = congβ _Β·_
; *-assoc = Ξ» where
π _ _ β refl
π π _ β refl
π π π β refl
π π π β refl
π π Ο β refl
π Ο π β refl
π Ο π β refl
π Ο Ο β refl
Ο π _ β refl
Ο π π β refl
Ο π π β refl
Ο π Ο β refl
Ο Ο π β refl
Ο Ο π β refl
Ο Ο Ο β refl
; *-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 = Ξ» where
π π π β refl
π π π β
πβ§π β‘Λβ¨ πβ§[πβ§π] β©
π β§ πβ§π β
π π Ο β refl
π π π β
πβ§π β§ π β‘β¨β©
πβ§π β§ π β‘β¨ β§-comm πβ§π _ β©
π β§ πβ§π β
π π π β
πβ§π β§ π β‘β¨ β§-comm πβ§π _ β©
π β§ πβ§π β‘β¨ πβ§[πβ§π] β©
πβ§π β
π π Ο β
πβ§π β§ Ο β‘β¨ β§-comm πβ§π _ β©
Ο β§ πβ§π β‘β¨β©
Ο β
π Ο _ β refl
π π π β
πβ§π β§ π β‘β¨ β§-comm πβ§π _ β©
π β§ πβ§π β‘β¨ πβ§[πβ§π] β©
πβ§π β
π π π β
πβ§π β§ π β‘β¨β©
πβ§π β§ π β‘β¨ β§-comm πβ§π _ β©
π β§ πβ§π β
π π Ο β
πβ§π β§ Ο β‘β¨ β§-comm πβ§π _ β©
Ο β§ πβ§π β‘β¨β©
Ο β
π π π β
πβ§π β‘Λβ¨ πβ§[πβ§π] β©
π β§ πβ§π β
π π π β refl
π π Ο β refl
π Ο _ β refl
Ο _ _ β refl
}
; idem = Ξ» where
π β refl
π β refl
Ο β refl
}
; comm = β§-comm
}
; Β·-distrib-β§ =
Β·-distrib-β§Λ‘
, commβ§distrΛ‘βdistrΚ³ Β·-comm Β·-distrib-β§Λ‘
; +-distrib-β§ =
+-distrib-β§Λ‘
, commβ§distrΛ‘βdistrΚ³ +-comm +-distrib-β§Λ‘
}
where
open Tools.Reasoning.PropositionalEquality
+-comm : Commutative _+_
+-comm = Ξ» where
π π β refl
π π β refl
π Ο β refl
π π β refl
π π β refl
π Ο β refl
Ο π β refl
Ο π β refl
Ο Ο β refl
Β·-identityΛ‘ : LeftIdentity π _Β·_
Β·-identityΛ‘ = Ξ» where
π β refl
π β refl
Ο β refl
Β·-distrib-+Λ‘ : _Β·_ DistributesOverΛ‘ _+_
Β·-distrib-+Λ‘ = Ξ» where
π _ _ β refl
π π _ β refl
π π π β refl
π π π β refl
π π Ο β refl
π Ο _ β refl
Ο π _ β refl
Ο π π β refl
Ο π π β refl
Ο π Ο β refl
Ο Ο _ β refl
β§-comm : Commutative _β§_
β§-comm = Ξ» where
π π β refl
π π β refl
π Ο β refl
π π β refl
π π β refl
π Ο β refl
Ο π β refl
Ο π β refl
Ο Ο β refl
Β·-distrib-β§Λ‘ : _Β·_ DistributesOverΛ‘ _β§_
Β·-distrib-β§Λ‘ = Ξ» where
π _ _ β refl
π π π β refl
π π π β
π Β· πβ§π β‘β¨ Β·-identityΛ‘ _ β©
πβ§π β
π π Ο β refl
π π π β
π Β· πβ§π β‘β¨ Β·-identityΛ‘ _ β©
πβ§π β
π π π β refl
π π Ο β refl
π Ο _ β refl
Ο π π β refl
Ο π π β
Ο Β· πβ§π β‘β¨ ΟΒ·β’π πβ§πβ’π β©
Ο β
Ο π Ο β refl
Ο π π β
Ο Β· πβ§π β‘β¨ ΟΒ·β’π πβ§πβ’π β©
Ο β
Ο π π β refl
Ο π Ο β refl
Ο Ο _ β refl
+-distrib-β§Λ‘ : _+_ DistributesOverΛ‘ _β§_
+-distrib-β§Λ‘ = Ξ» where
π _ _ β refl
π π π β refl
π π π β
π + πβ§π β‘β¨ β’π+β’π (Ξ» ()) πβ§πβ’π β©
Ο β
π π Ο β refl
π π π β
π + πβ§π β‘β¨ β’π+β’π (Ξ» ()) πβ§πβ’π β©
Ο β
π π π β refl
π π Ο β refl
π Ο _ β refl
Ο _ _ β refl
instance
zero-one-many-has-well-behaved-zero :
Has-well-behaved-zero zero-one-many-semiring-with-meet
zero-one-many-has-well-behaved-zero = record
{ non-trivial = Ξ» ()
; zero-product = Ξ» where
{p = π} _ β injβ refl
{q = π} _ β injβ refl
{p = π} {q = π} ()
{p = π} {q = Ο} ()
{p = Ο} {q = π} ()
{p = Ο} {q = Ο} ()
; +-positiveΛ‘ = Ξ» where
{p = π} {q = π} _ β refl
{p = π} {q = π} ()
{p = π} {q = Ο} ()
{p = π} {q = π} ()
{p = π} {q = π} ()
{p = π} {q = Ο} ()
{p = Ο} ()
; β§-positiveΛ‘ = Ξ» where
{p = π} {q = π} _ β refl
{p = π} {q = π} _ β refl
{p = π} {q = π} πβ§πβ‘π β
β₯-elim (
case
π β‘β¨ π-maximal (sym πβ§πβ‘π) β©
π β
of Ξ» ())
{p = π} {q = Ο} ()
{p = π} {q = π} ()
{p = π} {q = Ο} ()
{p = Ο} ()
}
where open Tools.Reasoning.PropositionalEquality
Star-requirements :
(Zero-one-many β Zero-one-many β Zero-one-many β Zero-one-many) β
(Zero-one-many β Zero-one-many β Zero-one-many) β
Set
Star-requirements _β_β·_ _β§_ =
let _β€_ : Zero-one-many β Zero-one-many β Set
p β€ q = p β‘ (p β§ q)
in
(β {q r} β (Ο β q β· r) β‘ Ο) Γ
(β {p r} β (p β Ο β· r) β‘ Ο) Γ
(β {p q} β Β¬ (p β‘ π Γ q β‘ π) β (p β q β· Ο) β‘ Ο) Γ
(β {r} β (π β π β· r) β‘ π) Γ
(β {p} β (p β π β· π) β‘ Ο) Γ
((π β π β· π) β€ (π β§ π)) Γ
((π β π β· π) β€ (π β§ π)) Γ
((π β π β· π) β€ π) Γ
((π β π β· π) β€ π)
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 β‘ _β§_ β
(_β_β·_ :
Zero-one-many β Zero-one-many β Zero-one-many β Zero-one-many) β
(β 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Κ³-β =
case Meet-requirements-required M refl refl πβ§πβ’π Οβ€ of Ξ» where
(_ , _ , ΟβΟβ‘Ο , _ , Οβπβ‘Ο , _ , Οβπβ‘Ο , _ , _) β
(Ξ» {_ _} β Οββ·)
, (Ξ» {_ _} β βΟβ·)
, (Ξ» {_ _} β ββ·Ο _ _)
, (Ξ» {r = r} β β€-antisym
(begin
π β π β· r β€β¨ β-ineqβ _ _ _ β©
π β)
(begin
π β‘Λβ¨ Β·-zeroΚ³ _ β©
π β π β· r Β· π β€β¨ Β·-sub-distribΚ³-β _ _ _ _ β©
π β π β· r β))
, (Ξ» {p = p} β β€-antisym
(begin
p β π β· π β€β¨ β-ineqβ _ _ _ β©
π + π Β· p β π β· π ββ¨ β’π+β’π (Ξ» ()) (πΒ·β’π βπβ·) β©
Ο β)
(Οβ€ (p β π β· π)))
, β§-greatest-lower-bound
(β-ineqβ _ _ _)
(begin
π β π β· π β€β¨ β-ineqβ _ _ _ β©
π + π Β· π β π β· π β‘β¨β©
π β)
, β§-greatest-lower-bound
(begin
π β π β· π β€β¨ β-ineqβ _ _ _ β©
π + π Β· π β π β· π β‘β¨β©
π β)
(β-ineqβ _ _ _)
, β-ineqβ _ _ _
, β-ineqβ _ _ _
where
open Semiring-with-meet M hiding (π; π; Ο; _+_; _Β·_; _β§_; _β€_)
open PartialOrder M
open Meet M
open Tools.Reasoning.PartialOrder β€-poset
infix 50 _β_β·_
_β_β·_ : Zero-one-many β Zero-one-many β Zero-one-many β Zero-one-many
_β_β·_ = 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 β‘β¨β©
Ο β)
(Οβ€ (p β Ο β· r))
πββ· : π β 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 q β Β¬ (p β‘ π Γ q β‘ π) β (p β q β· Ο) β‘ Ο
ββ·Ο _ Ο _ = βΟβ·
ββ·Ο Ο _ _ = Οββ·
ββ·Ο π π Β¬β‘πΓβ‘π = β₯-elim (Β¬β‘πΓβ‘π (refl , refl))
ββ·Ο p π _ = β€-antisym
(begin
p β π β· Ο β€β¨ β-ineqβ _ _ _ β©
π + Ο Β· p β π β· Ο ββ¨ +-congΛ‘ (ΟΒ·β’π βπβ·) β©
π + Ο β‘β¨β©
Ο β)
(Οβ€ (p β π β· Ο))
ββ·Ο π π _ = β€-antisym
(begin
π β π β· Ο β€β¨ β-ineqβ _ _ _ β©
Ο Β· π β π β· Ο ββ¨ ΟΒ·β’π πββ· β©
Ο β)
(Οβ€ (π β π β· Ο))
Star-requirements-required :
(has-star : Has-star zero-one-many-semiring-with-meet) β
Star-requirements (Has-star._β_β·_ has-star) _β§_
Star-requirements-required has-star =
Star-requirements-requiredβ²
zero-one-many-semiring-with-meet refl refl refl refl refl
_β_β·_
β-ineqβ
β-ineqβ
Β·-sub-distribΚ³-β
where
open Has-star has-star
zero-one-many-lower-bounded-star :
Has-star zero-one-many-semiring-with-meet
zero-one-many-lower-bounded-star =
LowerBounded.has-star zero-one-many-semiring-with-meet Ο Οβ€
zero-one-many-lower-bounded-β :
let open Has-star zero-one-many-lower-bounded-star in
(β r β π β π β· r β‘ π) Γ
(β p q r β Β¬ (p β‘ π Γ q β‘ π) β p β q β· r β‘ Ο)
zero-one-many-lower-bounded-β =
(Ξ» _ β refl)
, (Ξ» where
π π _ Β¬β‘πΓβ‘π β β₯-elim (Β¬β‘πΓβ‘π (refl , refl))
π π _ _ β
Ο Β· πβ§π β‘β¨ ΟΒ·β’π πβ§πβ’π β©
Ο β
π Ο _ _ β refl
π π _ _ β
Ο Β· πβ§π β‘β¨ ΟΒ·β’π πβ§πβ’π β©
Ο β
π π _ _ β refl
π Ο _ _ β refl
Ο _ _ _ β refl)
where
open Has-star zero-one-many-lower-bounded-star
open Tools.Reasoning.PropositionalEquality
infix 50 _β_β·_
_β_β·_ : Zero-one-many β Zero-one-many β Zero-one-many β Zero-one-many
p β q β· π = p β§ q
p β q β· π = p + Ο Β· q
p β q β· Ο = Ο Β· (p β§ q)
lower-boundedβ’greatest :
Has-star._β_β·_ zero-one-many-lower-bounded-star β’ _β_β·_
lower-boundedβ’greatest hyp =
case cong (Ξ» f β f π π π) hyp of Ξ» ()
Οββ· : β r β Ο β q β· r β‘ Ο
Οββ· π = refl
Οββ· π = refl
Οββ· Ο = refl
βΟβ· : β r β p β Ο β· r β‘ Ο
βΟβ· {p = p} = Ξ» where
π β
p β§ Ο β‘β¨ M.β§-comm p _ β©
Ο β§ p β‘β¨β©
Ο β
π β
p + Ο β‘β¨ M.+-comm p _ β©
Ο + p β‘β¨β©
Ο β
Ο β
Ο Β· (p β§ Ο) β‘β¨ cong (_ Β·_) (M.β§-comm p _) β©
Ο Β· (Ο β§ p) β‘β¨β©
Ο β
where
open Tools.Reasoning.PropositionalEquality
module M = Semiring-with-meet zero-one-many-semiring-with-meet
πβπβ· : β r β π β π β· r β‘ π
πβπβ· π = refl
πβπβ· π = refl
πβπβ· Ο = refl
ββ·Ο : β p q β Β¬ (p β‘ π Γ q β‘ π) β (p β q β· Ο) β‘ Ο
ββ·Ο p Ο _ = βΟβ· {p = p} Ο
ββ·Ο Ο _ _ = refl
ββ·Ο π π Β¬β‘πΓβ‘π = β₯-elim (Β¬β‘πΓβ‘π (refl , refl))
ββ·Ο π π _ = ΟΒ·β’π πβ§πβ’π
ββ·Ο π π _ = refl
ββ·Ο π π _ = ΟΒ·β’π πβ§πβ’π
βπβ·π : β p β p β π β· π β‘ Ο
βπβ·π π = refl
βπβ·π π = refl
βπβ·π Ο = refl
βπβ§πβ·π : β p β p β πβ§π β· π β‘ Ο
βπβ§πβ·π π = πβ§π-elim (Ξ» q β π β q β· π β‘ Ο) (Ξ» _ β refl) (Ξ» _ β refl)
βπβ§πβ·π π = πβ§π-elim (Ξ» q β π β q β· π β‘ Ο) (Ξ» _ β refl) (Ξ» _ β refl)
βπβ§πβ·π Ο = refl
πβπβ§πβ·π : π β πβ§π β· π β‘ πβ§π
πβπβ§πβ·π = πβ§π-elim
(Ξ» q β π β q β· π β‘ q)
(Ξ» πβ§πβ‘π β πβ§πβ‘π)
(Ξ» _ β refl)
πβπβ§πβ·π : π β πβ§π β· π β‘ πβ§π
πβπβ§πβ·π = πβ§π-elim
(Ξ» q β π β q β· π β‘ q)
(Ξ» _ β refl)
(Ξ» _ β refl)
β-greatest :
(has-star : Has-star zero-one-many-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
(Οββ·β² , βΟβ·β² , ββ·β²Ο ,
πβπβ·β² , βπβ·β²π , πβπβ·β²π , πβπβ·β²π , πβπβ·β²π , πβπβ·β²π) β Ξ» where
Ο q r β begin
Ο β q β·β² r ββ¨ Οββ·β² β©
Ο βΛβ¨ Οββ· r β©
Ο β q β· r β
p Ο r β begin
p β Ο β·β² r ββ¨ βΟβ·β² β©
Ο βΛβ¨ βΟβ· r β©
p β Ο β· r β
π π r β begin
π β π β·β² r ββ¨ πβπβ·β² β©
π βΛβ¨ πβπβ· r β©
π β π β· r β
π π Ο β begin
π β π β·β² Ο ββ¨ ββ·β²Ο (Ξ» { (_ , ()) }) β©
Ο βΛβ¨ ββ·Ο π π (Ξ» { (_ , ()) }) β©
π β π β· Ο β
π q Ο β begin
π β q β·β² Ο ββ¨ ββ·β²Ο (Ξ» { (() , _) }) β©
Ο βΛβ¨ ββ·Ο π q (Ξ» { (() , _) }) β©
π β q β· Ο β
p π π β begin
p β π β·β² π ββ¨ βπβ·β²π β©
Ο βΛβ¨ βπβ·π p β©
p β π β· π β
π π π β begin
π β π β·β² π β€β¨ πβπβ·β²π β©
π β§ π β
π π π β begin
π β π β·β² π β€β¨ πβπβ·β²π β©
π β§ π β
π π π β begin
π β π β·β² π β€β¨ πβπβ·β²π β©
π β
π π π β begin
π β π β·β² π β€β¨ πβπβ·β²π β©
π β
where
open Has-star has-star renaming (_β_β·_ to _β_β·β²_)
open PartialOrder zero-one-many-semiring-with-meet
open Tools.Reasoning.PartialOrder β€-poset
zero-one-many-greatest-star : Has-star zero-one-many-semiring-with-meet
zero-one-many-greatest-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 = zero-one-many-semiring-with-meet
open Semiring-with-meet semiring-with-meet
hiding (π; π; Ο; _+_; _Β·_; _β§_; _β€_)
open PartialOrder semiring-with-meet
open Addition semiring-with-meet
open Meet semiring-with-meet
open Multiplication semiring-with-meet
β-ineqβ : β p q r β p β q β· r β€ q + r Β· p β q β· r
β-ineqβ p = Ξ» where
q π β begin
p β§ q β€β¨ β§-decreasingΚ³ p _ β©
q βΛβ¨ +-identityΚ³ _ β©
q + π β
π π β begin
p β π β· π βΛβ¨ Β·-identityΛ‘ _ β©
π Β· p β π β· π β
π π β begin
p + Ο ββ¨ +-zeroΚ³ _ β©
Ο β‘β¨β©
π + π Β· Ο βΛβ¨ cong (Ξ» p β π + π Β· p) (+-zeroΚ³ p) β©
π + π Β· (p + Ο) β
Ο π β begin
p + Ο ββ¨ +-zeroΚ³ _ β©
Ο β
π Ο β begin
Ο Β· (p β§ π) β‘β¨β©
(Ο Β· Ο) Β· (p β§ π) ββ¨ Β·-assoc _ _ _ β©
Ο Β· Ο Β· (p β§ π) β
π Ο β begin
Ο Β· (p β§ π) ββ¨ Β·-distribΛ‘-β§ _ p _ β©
Ο Β· p β§ Ο ββ¨ β§-comm (Ο Β· p) _ β©
Ο β§ Ο Β· p β‘β¨β©
Ο β‘β¨β©
π + Ο Β· Ο ββ¨ cong (Ξ» p β _ + Ο Β· p) (β§-comm _ (Ο Β· p)) β©
π + Ο Β· (Ο Β· p β§ Ο) βΛβ¨ cong (Ξ» p β _ + Ο Β· p) (Β·-distribΛ‘-β§ Ο p _) β©
π + Ο Β· Ο Β· (p β§ π) β
Ο Ο β begin
Ο Β· (p β§ Ο) ββ¨ Β·-distribΛ‘-β§ _ p _ β©
Ο Β· p β§ Ο β€β¨ β§-decreasingΚ³ (Ο Β· p) _ β©
Ο β
where
open Tools.Reasoning.PartialOrder β€-poset
β-ineqβ : β p q r β (p β q β· r) β€ p
β-ineqβ p = Ξ» where
q π β begin
p β§ q β€β¨ β§-decreasingΛ‘ p _ β©
p β
π π β begin
p + π ββ¨ +-identityΚ³ _ β©
p β
π π β begin
p + Ο ββ¨ +-zeroΚ³ _ β©
Ο β€β¨ Οβ€ p β©
p β
Ο π β begin
p + Ο ββ¨ +-zeroΚ³ _ β©
Ο β€β¨ Οβ€ p β©
p β
q Ο β begin
Ο Β· (p β§ q) ββ¨ Β·-distribΛ‘-β§ _ p _ β©
Ο Β· p β§ Ο Β· q β€β¨ β§-decreasingΛ‘ (Ο Β· p) _ β©
Ο Β· p β€β¨ Β·-monotoneΛ‘ (Οβ€ π) β©
π Β· p ββ¨ Β·-identityΛ‘ _ β©
p β
where
open Tools.Reasoning.PartialOrder β€-poset
+-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 (_ +_) (Β·-distribΛ‘-+ Ο q _) β©
(p + pβ²) + Ο Β· (q + qβ²) β
Ο p q pβ² qβ² β begin
Ο Β· (p β§ q) + Ο Β· (pβ² β§ qβ²) βΛβ¨ Β·-distribΛ‘-+ Ο (p β§ q) (pβ² β§ qβ²) β©
Ο Β· ((p β§ q) + (pβ² β§ qβ²)) β€β¨ Β·-monotoneΚ³ (+-sub-interchangeable-β§ p q pβ² qβ²) β©
Ο Β· ((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 (_ +_) (Β·-assoc Ο pβ² _) β©
p Β· q + Ο Β· pβ² Β· q β
Ο q p pβ² β
(Ο Β· (p β§ pβ²)) Β· q β‘β¨ Β·-assoc _ _ _ β©
Ο Β· (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 (_ +_) (Β·-distribΛ‘-β§ Ο q _) β©
p + (Ο Β· q β§ Ο Β· qβ²) β‘β¨ +-distribΛ‘-β§ 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
π q p pβ² β
lemma _ p _
π q p pβ² β
(p β§ pβ²) + Ο Β· q β‘β¨ +-distribΚ³-β§ _ p _ β©
(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) β
Β¬-lower-bounded-greatest :
Β¬ ((has-star : Has-star zero-one-many-semiring-with-meet) β
β p q r β
Has-star._β_β·_ has-star p q r β€
Has-star._β_β·_ zero-one-many-lower-bounded-star p q r)
Β¬-lower-bounded-greatest hyp =
case hyp zero-one-many-greatest-star π π π of Ξ» ()
zero-one-many-greatest-star-nr : Has-nr zero-one-many-semiring-with-meet
zero-one-many-greatest-star-nr =
Star.has-nr _ β¦ has-star = zero-one-many-greatest-star β¦
opaque
Β¬zero-one-many-greatest-star-factoring-nr :
Β¬ Is-factoring-nr zero-one-many-greatest-star-nr
Β¬zero-one-many-greatest-star-factoring-nr factoring = case πβ‘Ο of Ξ» ()
where
open Has-nr zero-one-many-greatest-star-nr
open Is-factoring-nr factoring
open Semiring-with-meet zero-one-many-semiring-with-meet
hiding (π; π; Ο; _+_; _Β·_)
open Tools.Reasoning.PropositionalEquality
πβ‘Ο : π β‘ Ο
πβ‘Ο = begin
π β‘β¨β©
nr π π π π π β‘β¨ nr-factoring {z = π} {s = π} β©
nrβ π π Β· π + nr π π π π π β‘β¨β©
nrβ π π Β· π + πβ§π + π β‘β¨ +-cong (Β·-identityΚ³ _) (+-identityΚ³ πβ§π) β©
nrβ π π + πβ§π β‘β¨ β’π+β’π nrββ’π πβ§πβ’π β©
Ο β
nr :
Zero-one-many β Zero-one-many β
Zero-one-many β Zero-one-many β Zero-one-many β Zero-one-many
nr p π z s n = ((π β§ p) Β· n + s) β§ (n + z)
nr p π z s n = (π + p) Β· n + Ο Β· s + z
nr _ Ο z s n = Ο Β· (n + s + z)
nrβ² :
Zero-one-many β Zero-one-many β
Zero-one-many β Zero-one-many β Zero-one-many β Zero-one-many
nrβ² _ _ π π π = π
nrβ² _ π π π π = π
nrβ² _ π π π π = π β§ π
nrβ² _ π π π π = π
nrβ² _ π π π π = π β§ π
nrβ² π π π π π = π
nrβ² π π π π π = π β§ π
nrβ² π π π π π = π
nrβ² _ _ _ _ _ = Ο
data Nr-Ο : (p r z s n : Zero-one-many) β Set where
nrβ‘Οβ : Nr-Ο p r Ο s n
nrβ‘Οβ : Nr-Ο p r z Ο n
nrβ‘Οβ : Nr-Ο p r z s Ο
nrβ‘Οβ : Nr-Ο p Ο π s n
nrβ‘Οβ
: Nr-Ο p Ο π π n
nrβ‘Οβ : Nr-Ο p Ο π π π
nrβ‘Οβ : Nr-Ο Ο π π π π
nrβ‘Οβ : Nr-Ο Ο π π π π
nrβ‘Οβ : Nr-Ο π π π π π
nrβ‘Οββ : Nr-Ο p π π π π
nrβ‘Οββ : Nr-Ο p π z π n
nrβ‘Οββ : Nr-Ο p π π s π
nrβ‘Οββ : Nr-Ο p π π π π
data Nr-πβ§π : (p r z s n : Zero-one-many) β Set where
nrβ‘πβ§πβ : Nr-πβ§π p π π π π
nrβ‘πβ§πβ : Nr-πβ§π p π π π π
nrβ‘πβ§πβ : Nr-πβ§π π π π π π
data Nr : (p r z s n result : Zero-one-many) β Set where
nrβ‘π : result β‘ π β Nr p r π π π result
nrβ‘πβ : result β‘ π β Nr p π π π π result
nrβ‘πβ : result β‘ π β Nr p π π π π result
nrβ‘πβ : Nr π π π π π π
nrβ‘πβ : Nr π π π π π π
nrβ‘πβ§π : Nr-πβ§π p r z s n β result β‘ π β§ π β Nr p r z s n result
nrβ‘Ο : Nr-Ο p r z s n β result β‘ Ο β Nr p r z s n result
nrβ²-view : β p r z s n β Nr p r z s n (nrβ² p r z s n)
nrβ²-view = Ξ» where
_ _ π π π β nrβ‘π refl
_ π π π π β nrβ‘πβ refl
_ π π π π β nrβ‘πβ refl
π π π π π β nrβ‘πβ
π π π π π β nrβ‘πβ
_ π π π π β nrβ‘πβ§π nrβ‘πβ§πβ refl
_ π π π π β nrβ‘πβ§π nrβ‘πβ§πβ refl
π π π π π β nrβ‘πβ§π nrβ‘πβ§πβ refl
_ _ Ο _ _ β nrβ‘Ο nrβ‘Οβ refl
_ _ π Ο _ β nrβ‘Ο nrβ‘Οβ refl
_ π π Ο _ β nrβ‘Ο nrβ‘Οβ refl
_ π π Ο _ β nrβ‘Ο nrβ‘Οβ refl
_ _ π π Ο β nrβ‘Ο nrβ‘Οβ refl
_ π π π Ο β nrβ‘Ο nrβ‘Οβ refl
_ π π π Ο β nrβ‘Ο nrβ‘Οβ refl
_ π π π Ο β nrβ‘Ο nrβ‘Οβ refl
_ π π π Ο β nrβ‘Ο nrβ‘Οβ refl
_ Ο π _ _ β nrβ‘Ο nrβ‘Οβ refl
_ Ο π π _ β nrβ‘Ο nrβ‘Οβ
refl
π Ο π π π β nrβ‘Ο nrβ‘Οβ refl
π Ο π π π β nrβ‘Ο nrβ‘Οβ refl
Ο Ο π π π β nrβ‘Ο nrβ‘Οβ refl
Ο π π π π β nrβ‘Ο nrβ‘Οβ refl
Ο π π π π β nrβ‘Ο nrβ‘Οβ refl
π π π π π β nrβ‘Ο nrβ‘Οβ refl
_ π π π π β nrβ‘Ο nrβ‘Οββ refl
_ π π π _ β nrβ‘Ο nrβ‘Οββ refl
_ π π π _ β nrβ‘Ο nrβ‘Οββ refl
_ π π π π β nrβ‘Ο nrβ‘Οββ refl
_ π π π π β nrβ‘Ο nrβ‘Οββ refl
_ π π π π β nrβ‘Ο nrβ‘Οββ refl
nrβ‘nrβ² : β p r β nr p r z s n β‘ nrβ² p r z s n
nrβ‘nrβ² p r = lemma _ _ _ _ _ (nrβ²-view p r _ _ _)
where
open Semiring-with-meet zero-one-many-semiring-with-meet
hiding (π; π; Ο; _+_; _Β·_; _β§_)
open Tools.Reasoning.PropositionalEquality
lemma :
β p r z s n β Nr p r z s n (nrβ² p r z s n) β
nr p r z s n β‘ nrβ² p r z s n
lemma p π .π .π .π (nrβ‘π _) =
((π β§ p) Β· π + π) β§ π β‘β¨ cong (_β§ _) (+-identityΚ³ ((π β§ p) Β· _)) β©
((π β§ p) Β· π) β§ π β‘β¨ cong (_β§ _) (Β·-zeroΚ³ (π β§ p)) β©
π β§ π β‘β¨β©
π β
lemma p π .π .π .π (nrβ‘π _) =
(π + p) Β· π + π β‘β¨ +-identityΚ³ _ β©
(π + p) Β· π β‘β¨ Β·-zeroΚ³ _ β©
π β
lemma _ Ο .π .π .π (nrβ‘π _) =
π β
lemma p .π .π .π .π (nrβ‘πβ _) =
((π β§ p) Β· π + π) β§ π β‘β¨ cong ((_β§ _) ββ (_+ _)) (Β·-zeroΚ³ (π β§ p)) β©
(π + π) β§ π β‘β¨β©
π β
lemma p .π .π .π .π (nrβ‘πβ _) =
(π + p) Β· π + π β‘β¨ cong (_+ _) (Β·-zeroΚ³ (π + p)) β©
π + π β‘β¨β©
π β
lemma .π .π .π .π .π nrβ‘πβ =
π β
lemma .π .π .π .π .π nrβ‘πβ =
π β
lemma p .π .π .π .π (nrβ‘πβ§π nrβ‘πβ§πβ _) =
((π β§ p) Β· π + π) β§ π β‘β¨ cong (_β§ _) (+-identityΚ³ ((π β§ p) Β· _)) β©
((π β§ p) Β· π) β§ π β‘β¨ cong (_β§ _) (Β·-zeroΚ³ (π β§ p)) β©
π β§ π β
lemma p .π .π .π .π (nrβ‘πβ§π nrβ‘πβ§πβ _) =
((π β§ p) Β· π + π) β§ π β‘β¨ cong ((_β§ _) ββ (_+ _)) (Β·-zeroΚ³ (π β§ p)) β©
π β§ π β‘β¨β©
π β§ π β
lemma .π .π .π .π .π (nrβ‘πβ§π nrβ‘πβ§πβ _) =
((π β§ π) Β· π + π) β§ π β‘β¨ cong (_β§ _) (+-identityΚ³ (πβ§π Β· _)) β©
(π β§ π) Β· π β§ π β‘β¨ cong (_β§ _) (Β·-identityΚ³ πβ§π) β©
(π β§ π) β§ π β‘β¨ β§-assoc π π _ β©
π β§ (π β§ π) β‘β¨β©
π β§ π β
lemma p π .Ο s n (nrβ‘Ο nrβ‘Οβ _) =
((π β§ p) Β· n + s) β§ (n + Ο) β‘β¨ cong (((π β§ p) Β· _ + _) β§_) (+-zeroΚ³ _) β©
((π β§ p) Β· n + s) β§ Ο β‘β¨ β§-zeroΚ³ ((π β§ p) Β· _ + _) β©
Ο β
lemma p π .Ο s n (nrβ‘Ο nrβ‘Οβ _) =
(π + p) Β· n + Ο Β· s + Ο β‘β¨ cong ((π + p) Β· _ +_) (+-zeroΚ³ _) β©
(π + p) Β· n + Ο β‘β¨ +-zeroΚ³ _ β©
Ο β
lemma p Ο .Ο s n (nrβ‘Ο nrβ‘Οβ _) =
Ο Β· (n + s + Ο) β‘β¨ Β·-distribΛ‘-+ _ n _ β©
Ο Β· n + Ο Β· (s + Ο) β‘β¨ cong (Ο Β· n +_) (Β·-distribΛ‘-+ _ s _) β©
Ο Β· n + Ο Β· s + Ο β‘β¨ cong (Ο Β· n +_) (+-zeroΚ³ _) β©
Ο Β· n + Ο β‘β¨ +-zeroΚ³ _ β©
Ο β
lemma p π z .Ο n (nrβ‘Ο nrβ‘Οβ β‘Ο) =
((π β§ p) Β· n + Ο) β§ (n + z) β‘β¨ cong (_β§ _) (+-zeroΚ³ ((π β§ p) Β· _)) β©
Ο β§ (n + z) β‘β¨β©
Ο β‘Λβ¨ β‘Ο β©
nrβ² p π z Ο n β
lemma p π z .Ο n (nrβ‘Ο nrβ‘Οβ β‘Ο) =
(π + p) Β· n + Ο β‘β¨ +-zeroΚ³ _ β©
Ο β‘Λβ¨ β‘Ο β©
nrβ² p π z Ο n β
lemma p Ο z .Ο n (nrβ‘Ο nrβ‘Οβ β‘Ο) =
Ο Β· (n + Ο) β‘β¨ Β·-distribΛ‘-+ _ n _ β©
Ο Β· n + Ο β‘β¨ +-zeroΚ³ _ β©
Ο β‘Λβ¨ β‘Ο β©
nrβ² p Ο z Ο n β
lemma p π z s .Ο (nrβ‘Ο nrβ‘Οβ β‘Ο) =
((π β§ p) Β· Ο + s) β§ Ο β‘β¨ β§-zeroΚ³ ((π β§ p) Β· _ + _) β©
Ο β‘Λβ¨ β‘Ο β©
nrβ² p π z s Ο β
lemma p π z s .Ο (nrβ‘Ο nrβ‘Οβ β‘Ο) =
(π + p) Β· Ο + Ο Β· s + z β‘β¨ cong (_+ _) (Β·-distribΚ³-+ _ π p) β©
(Ο + p Β· Ο) + Ο Β· s + z β‘β¨β©
Ο β‘Λβ¨ β‘Ο β©
nrβ² p π z s Ο β
lemma p Ο z s .Ο (nrβ‘Ο nrβ‘Οβ β‘Ο) =
Ο β‘Λβ¨ β‘Ο β©
nrβ² p Ο z s Ο β
lemma p .Ο .π s n (nrβ‘Ο nrβ‘Οβ _) =
Ο Β· (n + s + π) β‘Λβ¨ cong (Ο Β·_) (+-assoc n _ _) β©
Ο Β· ((n + s) + π) β‘β¨ Β·-distribΛ‘-+ _ (n + _) _ β©
Ο Β· (n + s) + Ο β‘β¨ +-zeroΚ³ _ β©
Ο β
lemma p .Ο .π .π n (nrβ‘Ο nrβ‘Οβ
_) =
Ο Β· (n + π) β‘β¨ Β·-distribΛ‘-+ _ n _ β©
Ο Β· n + Ο β‘β¨ +-zeroΚ³ _ β©
Ο β
lemma p .Ο .π .π .π (nrβ‘Ο nrβ‘Οβ β‘Ο) =
Ο β‘Λβ¨ β‘Ο β©
nrβ² p Ο π π π β
lemma .Ο π .π .π .π (nrβ‘Ο nrβ‘Οβ _) =
Ο β
lemma .Ο π .π .π .π (nrβ‘Ο nrβ‘Οβ _) =
Ο β
lemma .π .π .π .π .π (nrβ‘Ο nrβ‘Οβ _) =
Ο β
lemma p .π .π .π .π (nrβ‘Ο nrβ‘Οββ _) =
((π β§ p) Β· π + π) β§ π β‘β¨ cong ((_β§ _) ββ (_+ _)) (Β·-distribΚ³-β§ _ π p) β©
((π β§ p Β· π) + π) β§ π β‘β¨ cong ((_β§ _) ββ (_+ _) ββ (π β§_)) (Β·-identityΚ³ p) β©
((π β§ p) + π) β§ π β‘β¨ cong (_β§ _) (+-distribΚ³-β§ _ π p) β©
(Ο β§ (p + π)) β§ π β‘β¨β©
Ο β
lemma p .π z .π n (nrβ‘Ο nrβ‘Οββ β‘Ο) =
(π + p) Β· n + Ο β‘β¨ +-zeroΚ³ _ β©
Ο β‘Λβ¨ β‘Ο β©
nrβ² p π z π n β
lemma p .π .π s .π (nrβ‘Ο nrβ‘Οββ β‘Ο) =
((π β§ p) Β· π + s) β§ Ο β‘β¨ β§-zeroΚ³ ((π β§ p) Β· _ + _) β©
Ο β‘Λβ¨ β‘Ο β©
nrβ² p π π s π β
lemma p .π .π .π .π (nrβ‘Ο nrβ‘Οββ _) =
(π + p) Β· π + π β‘β¨ cong (_+ _) (Β·-distribΚ³-+ _ π p) β©
(π + p Β· π) + π β‘β¨ cong (_+ _) (+-comm _ (p Β· _)) β©
(p Β· π + π) + π β‘β¨ +-assoc (p Β· _) _ _ β©
p Β· π + Ο β‘β¨ +-zeroΚ³ _ β©
Ο β
nr-view : β p r z s n β Nr p r z s n (nr p r z s n)
nr-view p r z s n = $β¨ nrβ²-view _ _ _ _ _ β©
Nr p r z s n (nrβ² p r z s n) ββ¨ subst (Nr _ _ _ _ _) (sym (nrβ‘nrβ² p r)) β©
Nr p r z s n (nr p r z s n) β‘
nr-π : β p r β nr p r z s n β‘ π β (z β‘ π Γ s β‘ π Γ n β‘ π)
nr-π p r =
lemmaβ (nr-view _ _ _ _ _)
, Ξ» { (refl , refl , refl) β lemmaβ p r }
where
open Semiring-with-meet zero-one-many-semiring-with-meet
hiding (π; π; _+_; _Β·_; _β§_)
open Tools.Reasoning.PropositionalEquality
lemmaβ : Nr p r z s n result β result β‘ π β z β‘ π Γ s β‘ π Γ n β‘ π
lemmaβ (nrβ‘π _) refl = refl , refl , refl
lemmaβ (nrβ‘πβ§π _ πβ‘πβ§π) refl = β₯-elim (πβ§πβ’π (sym πβ‘πβ§π))
lemmaβ (nrβ‘πβ ()) refl
lemmaβ (nrβ‘πβ ()) refl
lemmaβ nrβ‘πβ ()
lemmaβ nrβ‘πβ ()
lemmaβ (nrβ‘Ο _ ()) refl
lemmaβ : β p r β nr p r π π π β‘ π
lemmaβ = Ξ» where
_ Ο β refl
Ο π β refl
π π β refl
π π β refl
Ο π β refl
π π β refl
π π β
((π β§ π) Β· π + π) β§ π β‘β¨ cong (_β§ _) (+-identityΚ³ (πβ§π Β· _)) β©
((π β§ π) Β· π) β§ π β‘β¨ cong (_β§ _) (Β·-zeroΚ³ πβ§π) β©
π β§ π β‘β¨β©
π β
zero-one-many-has-nr : Has-nr zero-one-many-semiring-with-meet
zero-one-many-has-nr = record
{ nr = nr
; nr-monotone = Ξ» {p = p} {r = r} β nr-monotone p r
; nr-Β· = Ξ» {p = p} {r = r} β nr-Β· p r
; nr-+ = Ξ» {p = p} {r = r} β nr-+ p r
; nr-positive = Ξ» {p = p} {r = r} β nr-π p r .projβ
; nr-zero = Ξ» {n = _} {p = p} {r = r} nβ€π β nr-zero p r nβ€π
; nr-suc = Ξ» {p = p} {r = r} β nr-suc p r
}
where
open Semiring-with-meet zero-one-many-semiring-with-meet
hiding (π; π; Ο; _+_; _Β·_; _β§_; _β€_)
open Addition zero-one-many-semiring-with-meet
open Meet zero-one-many-semiring-with-meet
open Multiplication zero-one-many-semiring-with-meet
open PartialOrder zero-one-many-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Κ³ sββ€sβ) zββ€zβ)
_ Ο zββ€zβ sββ€sβ nββ€nβ β
Β·-monotoneΚ³ (+-monotone nββ€nβ (+-monotone sββ€sβ zββ€zβ))
nr-Β· : β p r β nr p r z s n Β· q β€ nr p r (z Β· q) (s Β· q) (n Β· q)
nr-Β· {z = z} {s = s} {n = n} {q = q} p = Ξ» 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Λ‘ (Β·-distribΚ³-+ _ (Ο Β· s) _) β©
((π + p) Β· n) Β· q + (Ο Β· s) Β· q + z Β· q β‘β¨ +-cong (Β·-assoc (π + p) _ _)
(+-congΚ³ (Β·-assoc Ο s _)) β©
(π + p) Β· (n Β· q) + Ο Β· (s Β· q) + z Β· q β
Ο β begin
(Ο Β· (n + s + z)) Β· q β‘β¨ Β·-assoc _ _ _ β©
Ο Β· ((n + s + z) Β· q) β‘β¨ Β·-congΛ‘ (Β·-distribΚ³-+ _ n _) β©
Ο Β· (n Β· q + (s + z) Β· q) β‘β¨ Β·-congΛ‘ (+-congΛ‘ (Β·-distribΚ³-+ _ s _)) β©
Ο Β· (n Β· q + s Β· q + z Β· q) β
where
open Tools.Reasoning.PartialOrder β€-poset
nr-+ :
β p r β
nr p r zβ sβ nβ + nr p r zβ sβ nβ β€
nr p r (zβ + zβ) (sβ + sβ) (nβ + nβ)
nr-+ {zβ = zβ} {sβ = sβ} {nβ = nβ} {zβ = zβ} {sβ = sβ} {nβ = nβ} p =
Ξ» 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
Ο Β· (nβ + sβ + zβ) + Ο Β· (nβ + sβ + zβ) β‘Λβ¨ Β·-distribΛ‘-+ _ (nβ + _) _ β©
Ο Β· ((nβ + sβ + zβ) + (nβ + sβ + zβ)) β‘β¨ Β·-congΛ‘ 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 : β p r β n β€ π β nr p r z s n β€ z
nr-zero {n = n} {z = z} {s = s} p r nβ€π =
case nr-view p r z s n of Ξ» where
(nrβ‘π β‘π) β begin
nr p r π π π β‘β¨ β‘π β©
π β
(nrβ‘πβ β‘π) β begin
nr p π π π π β‘β¨ β‘π β©
π β
(nrβ‘πβ β‘π) β begin
nr p π π π π β‘β¨ β‘π β©
π β
nrβ‘πβ β begin
π β€β¨ nβ€π β©
π β
nrβ‘πβ β begin
π β€β¨ nβ€π β©
π β
(nrβ‘πβ§π nrβ‘πβ§πβ β‘πβ§π) β begin
((π β§ p) Β· π + π) β§ π β‘β¨ β‘πβ§π β©
π β§ π β€β¨ β§-decreasingΚ³ π π β©
π β
(nrβ‘πβ§π nrβ‘πβ§πβ β‘πβ§π) β begin
((π β§ p) Β· π + π) β§ π β‘β¨ β‘πβ§π β©
π β§ π β€β¨ β§-decreasingΛ‘ π π β©
π β
(nrβ‘πβ§π nrβ‘πβ§πβ β‘πβ§π) β begin
((π β§ π) Β· π + π) β§ π β‘β¨ β‘πβ§π β©
π β§ π β€β¨ β§-decreasingΛ‘ π π β©
π β
(nrβ‘Ο _ β‘Ο) β begin
nr p r z s n β‘β¨ β‘Ο β©
Ο β€β¨ refl β©
z β
where
open Tools.Reasoning.PartialOrder β€-poset
nr-suc : β p r β nr p r z s n β€ s + p Β· n + r Β· nr p r z s n
nr-suc {z = z} {s = s} {n = n} p r =
case nr-view p r z s n of Ξ» where
(nrβ‘π β‘π) β begin
nr p r π π π β‘β¨ β‘π β©
π β‘Λβ¨ Β·-zeroΚ³ _ β©
r Β· π β‘Λβ¨ +-identityΛ‘ _ β©
π + r Β· π β‘Λβ¨ +-cong (Β·-zeroΚ³ p) (Β·-congΛ‘ β‘π) β©
p Β· π + r Β· nr p r π π π β‘β¨β©
π + p Β· π + r Β· nr p r π π π β
(nrβ‘πβ β‘π) β begin
nr p π π π π β‘β¨ β‘π β©
π β‘β¨β©
π + π + π β‘Λβ¨ +-congΛ‘ (+-congΚ³ {x = π} (Β·-zeroΚ³ p)) β©
π + p Β· π + π β‘β¨β©
π + p Β· π + π Β· nr p π π π π β
(nrβ‘πβ _) β begin
nr p π π π π β‘β¨β©
π + nr p π π π π β‘Λβ¨ +-cong (Β·-zeroΚ³ p) (Β·-identityΛ‘ _) β©
p Β· π + π Β· nr p π π π π β‘Λβ¨ +-identityΛ‘ _ β©
π + p Β· π + π Β· nr p π π π π β
nrβ‘πβ β begin
nr π π π π π β‘β¨β©
π β‘β¨β©
π + π Β· π + π Β· nr π π π π π β
nrβ‘πβ β begin
nr π π π π π β‘β¨β©
π β‘β¨β©
π + π Β· π + π Β· nr π π π π π β
(nrβ‘πβ§π nrβ‘πβ§πβ β‘πβ§π) β begin
((π β§ p) Β· π + π) β§ π β‘β¨ β‘πβ§π β©
π β§ π β€β¨ β§-decreasingΛ‘ π π β©
π β‘Λβ¨ Β·-zeroΚ³ _ β©
p Β· π β‘Λβ¨ +-identityΚ³ _ β©
p Β· π + π β
(nrβ‘πβ§π nrβ‘πβ§πβ β‘πβ§π) β begin
((π β§ p) Β· π + π) β§ π β‘β¨ β‘πβ§π β©
π β§ π β€β¨ β§-decreasingΚ³ π π β©
π β‘Λβ¨ +-identityΚ³ _ β©
π + π β‘Λβ¨ cong (_ +_) (Β·-zeroΚ³ p) β©
π + p Β· π β‘Λβ¨ cong (_ +_) (+-identityΚ³ (p Β· _)) β©
π + p Β· π + π β
(nrβ‘πβ§π nrβ‘πβ§πβ β‘πβ§π) β begin
((π β§ π) Β· π + π) β§ π β‘β¨ β‘πβ§π β©
π β§ π β€β¨ β§-decreasingΛ‘ π π β©
π β
(nrβ‘Ο _ β‘Ο) β begin
nr p r z s n β‘β¨ β‘Ο β©
Ο β€β¨ refl β©
s + p Β· n + r Β· nr p r z s n β
where
open Tools.Reasoning.PartialOrder β€-poset
opaque
zero-one-many-has-factoring-nr :
Is-factoring-nr zero-one-many-has-nr
zero-one-many-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 Tools.Reasoning.PropositionalEquality
open Semiring-with-meet zero-one-many-semiring-with-meet
hiding (π; π; Ο; _+_; _Β·_; _β§_)
nrβ : Opβ Zero-one-many
nrβ p r = π β§ (r + p)
π+pβ‘πβ§π+p : β p β π + p β‘ π β§ (π + p)
π+pβ‘πβ§π+p π = refl
π+pβ‘πβ§π+p π = refl
π+pβ‘πβ§π+p Ο = refl
lemma : β p q r β p β’ π β (p + q) β§ (π + r) β‘ p + q β§ r
lemma π q r pβ’π = β₯-elim (pβ’π refl)
lemma π q r pβ’π = sym (+-distribΛ‘-β§ π q r)
lemma Ο q r pβ’π = refl
nr-factoring : (p r z s n : Zero-one-many) β nr p r z s n β‘ nrβ p r Β· n + nr p r z s π
nr-factoring p π z s π
rewrite Β·-zeroΚ³ (π β§ p) = refl
nr-factoring p π z s π
rewrite Β·-zeroΚ³ (π β§ p) rewrite Β·-identityΚ³ (π β§ p) = lemma (π β§ p) s z (πβ§pβ’π p)
nr-factoring p π z s Ο
rewrite Β·-distribΚ³-β§ Ο π p = refl
nr-factoring p π z s n rewrite Β·-zeroΚ³ (π + p) =
+-congΚ³ (Β·-congΚ³ (π+pβ‘πβ§π+p p))
nr-factoring p Ο z s n = Β·-distribΛ‘-+ Ο n (s + z)
opaque
nr-greatest-factoring :
(has-nr : Has-nr zero-one-many-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Κ³ (nr-zero refl) β©
nrββ³ p r Β· n + Ο β‘β¨ +-zeroΚ³ _ β©
Ο β
p r z Ο n β lemma $ begin
nrβ³ p r z Ο n β€β¨ nr-suc β©
Ο + 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ββ’π) β©
Ο β
p r π π π β begin
nrβ³ p r π π π β‘β¨ nrβ³-π β¦ has-nr β¦ β©
π β‘Λβ¨ nr-π p r .projβ (refl , refl , refl) β©
nr p r π π π β
Ο r z s π β lemma $ begin
nrβ³ Ο r z s π β€β¨ nr-suc β©
s + Ο + r Β· nrβ³ Ο r z s π β‘β¨β©
s + Ο β‘β¨ +-zeroΚ³ s β©
Ο β
π r z π π β lemma $ begin
nrβ³ π r z π π β€β¨ nr-suc β©
π + π + r Β· nrβ³ π r z π π β‘Λβ¨ +-assoc π π (r Β· nrβ³ π r z π π) β©
Ο + r Β· nrβ³ π r z π π β‘β¨β©
Ο β
p r π π π β nrβ³przsπβ€ Ξ» ()
p r π s π β nrβ³przsπβ€ Ξ» ()
p Ο π π π β nrβ³pΟβ€ Ξ» ()
p Ο z π π β nrβ³pΟβ€ Ξ» ()
p Ο z s π β nrβ³pΟβ€ Ξ» ()
π π z s π β lemma $ begin
nrβ³ π π z s π β€β¨ nr-suc β©
s + π + π Β· nrβ³ π π z s π β‘β¨ +-congΛ‘ {s} (+-congΛ‘ {π} (Β·-identityΛ‘ (nrβ³ π π z s π))) β©
s + π + nrβ³ π π z s π β‘β¨ +-congΛ‘ {s} (β’π+β’π {π} {nrβ³ π π z s π} (Ξ» ())
Ξ» nrβ³β‘π β case nrβ³-positive nrβ³β‘π of Ξ» ()) β©
s + Ο β‘β¨ +-zeroΚ³ s β©
Ο β
p π z π n β lemma $ begin
nrβ³ p π z π n β€β¨ nr-suc β©
π + p Β· n + π Β· nrβ³ p π z π n β‘β¨ +-congΛ‘ {π} (+-congΛ‘ {p Β· n} (Β·-identityΛ‘ _)) β©
π + p Β· n + nrβ³ p π z π n β‘β¨ +-congΛ‘ {π} (+-comm (p Β· n) (nrβ³ p π z π n)) β©
π + nrβ³ p π z π n + p Β· n β‘Λβ¨ +-assoc π (nrβ³ p π z π n) (p Β· n) β©
(π + nrβ³ p π z π n) + p Β· n β‘β¨ +-congΚ³ {p Β· n} (β’π+β’π {π} {nrβ³ p π z π n} (Ξ» ())
Ξ» nrβ³β‘π β case nrβ³-positive nrβ³β‘π of Ξ» ()) β©
Ο + p Β· n β‘β¨β©
Ο β
π π π π π β begin
nrβ³ π π π π π β€β¨ β§-greatest-lower-bound {q = π} {π} nr-suc
(β’πββ€π (nrβ³ π π π π π) (Ξ» nrβ³β‘π β case nrβ³-positive nrβ³β‘π of Ξ» ())) β©
πβ§π β‘β¨β©
nrβ² π π π π π β‘Λβ¨ nrβ‘nrβ² {π} {π} {π} π π β©
nr π π π π π β
π π π π π β begin
nrβ³ π π π π π β€β¨ nr-suc β©
π β‘β¨β©
nr π π π π π β
π π π π π β begin
nrβ³ π π π π π β€β¨ β’πββ€π (nrβ³ π π π π π) (Ξ» nrβ³β‘π β case nrβ³-positive nrβ³β‘π of Ξ» ()) β©
π β‘β¨β©
nr π π π π π β
p π π π π β begin
nrβ³ p π π π π β€β¨ β§-greatest-lower-bound {q = π} {π} (nr-zero refl) nr-sucβ² β©
πβ§π β‘β¨β©
nrβ² p π π π π β‘Λβ¨ nrβ‘nrβ² {π} {π} {π} p π β©
nr p π π π π β
p π π π π β begin
nrβ³ p π π π π β€β¨ β§-greatest-lower-bound {q = π} {π} nr-sucβ² (nr-zero refl) β©
πβ§π β‘β¨β©
nrβ² p π π π π β‘Λβ¨ nrβ‘nrβ² {π} {π} {π} p π β©
nr p π π π π β
p π π π π β begin
nrβ³ p π π π π β€β¨ nr-sucβ² β©
π β‘β¨β©
nrβ² p π π π π β‘Λβ¨ nrβ‘nrβ² {π} {π} {π} p π β©
nr p π π π π β
p π π π π β begin
nrβ³ p π π π π β€β¨ nr-zero refl β©
π β‘β¨β©
nrβ² p π π π π β‘Λβ¨ nrβ‘nrβ² {π} {π} {π} p π β©
nr p π π π π β
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 zero-one-many-semiring-with-meet
open Meet zero-one-many-semiring-with-meet
open Natrec zero-one-many-semiring-with-meet renaming (nr-π to nrβ³-π)
open PartialOrder zero-one-many-semiring-with-meet
open Semiring-with-meet zero-one-many-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β³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Λ‘ (ΟΒ·β’π (β’π ββ nrβ³-positive))) β©
s + p Β· n + Ο β‘β¨ +-congΛ‘ (+-zeroΚ³ _) β©
s + Ο β‘β¨ +-zeroΚ³ _ β©
Ο β
nrβ³przsπβ€ : Β¬ (z β‘ π Γ s β‘ π) β nrβ³ p r z s π β€ nr p r z s π
nrβ³przsπβ€ {z} {s} {p} {r} β’π = lemma $ begin
nrβ³ p r z s π β‘β¨ nr-factoring β©
nrββ³ p r Β· π + nrβ³ p r z s π β‘β¨ +-congΚ³ {nrβ³ p r z s π} (Β·-identityΚ³ _) β©
nrββ³ p r + nrβ³ p r z s π β‘β¨ β’π+β’π nrββ’π (Ξ» nrβ³β‘π β
let zβ‘π , sβ‘π , _ = nrβ³-positive nrβ³β‘π
in β’π (zβ‘π , sβ‘π)) β©
Ο β
opaque
nr-linearity-like-for-π :
Has-nr.Linearity-like-nr-for-π zero-one-many-has-nr
nr-linearity-like-for-π = refl
opaque
nr-linearity-like-for-π :
Has-nr.Linearity-like-nr-for-π zero-one-many-has-nr
nr-linearity-like-for-π = refl
zero-one-many-modality : Modality-variant β Modality
zero-one-many-modality variant = record
{ variant = variant
; semiring-with-meet = zero-one-many-semiring-with-meet
; π-well-behaved = Ξ» _ β zero-one-many-has-well-behaved-zero
}
open Subtraction zero-one-many-semiring-with-meet
opaque
Ο-pβ‘Ο : β p β Ο - p β‘ Ο
Ο-pβ‘Ο p = β-pβ‘β PE.refl p
opaque
π-πβ‘π : π - π β‘ π
π-πβ‘π =
p-pβ€π ,
Ξ» where
π _ β refl
π ()
Ο ()
opaque
p-Οβ° : p - Ο β€ q β p β‘ Ο
p-Οβ° {(π)} {(π)} ()
p-Οβ° {(π)} {(π)} ()
p-Οβ° {(π)} {(Ο)} ()
p-Οβ° {(π)} {(π)} ()
p-Οβ° {(π)} {(π)} ()
p-Οβ° {(π)} {(Ο)} ()
p-Οβ° {(Ο)} _ = refl
opaque
p-Οβ’ : p - Ο β‘ q β p β‘ Ο
p-Οβ’ {q} = p-Οβ° {q = q} ββ projβ
opaque
supports-subtraction : Supports-subtraction
supports-subtraction {p} {(Ο)} {r} x =
case p-Οβ° {q = r} x of Ξ» {
refl β
Ο , Ο-pβ‘Ο Ο }
supports-subtraction {p} {(π)} _ =
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 {(π)} {(π)} {(r)} x =
π , π-πβ‘π
data _-_β‘β²_ : (p q r : Zero-one-many) β Set where
Ο-pβ‘β²Ο : Ο - p β‘β² Ο
p-πβ‘β²p : p - π β‘β² p
π-πβ‘β²π : π - π β‘β² π
opaque
-β‘β-β‘β² : β 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 p-Οβ’ p-qβ‘r of Ξ» ()
right : p - q β‘β² r β p - q β‘ r
right Ο-pβ‘β²Ο = Ο-pβ‘Ο q
right p-πβ‘β²p = p-πβ‘p
right π-πβ‘β²π = π-πβ‘π
opaque
nr-nrα΅’-GLB :
let π = zero-one-many-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 {z} {s} = Ξ» where
π β GLB-congΚ³ (sym (trans (β§-congΚ³ (+-congΚ³ (Β·-zeroΚ³ (π β§ π))))
(β§-comm s z))) nrα΅’-π-GLB
π β lemma-π _ _
Ο β lemma-Ο _ _
where
open Semiring-with-meet zero-one-many-semiring-with-meet
hiding (π; π; Ο; _β§_; _Β·_; _+_)
open GLB zero-one-many-semiring-with-meet
open Natrec zero-one-many-semiring-with-meet
open PartialOrder zero-one-many-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-π z π =
GLB-const lemmaβ²
lemma-π π π = lemma 2 refl
lemma-π π π = lemma 1 refl
lemma-π Ο π = lemma 0 refl
lemma-π z Ο = lemma 1 refl
lemma-Ο : β z s β Greatest-lower-bound (Ο Β· (s + z)) (nrα΅’ Ο z s)
lemma-Ο π π = GLB-nrα΅’-π
lemma-Ο π π = lemma 1 refl
lemma-Ο Ο π = lemma 0 refl
lemma-Ο π π = lemma 2 refl
lemma-Ο π π = lemma 1 refl
lemma-Ο Ο π = lemma 0 refl
lemma-Ο z Ο = lemma 1 refl
opaque
nrα΅’-π-GLB :
let π = zero-one-many-semiring-with-meet in
β p q β Semiring-with-meet.Greatest-lower-bound
π (p β§ q) (Semiring-with-meet.nrα΅’ π π p q)
nrα΅’-π-GLB p q = Natrec.nrα΅’-π-GLB zero-one-many-semiring-with-meet
opaque
nrα΅’-π-GLB :
let π = zero-one-many-semiring-with-meet in
β p q β Semiring-with-meet.Greatest-lower-bound
π (p + Ο Β· q) (Semiring-with-meet.nrα΅’ π π p q)
nrα΅’-π-GLB p q =
GLB.GLB-congΚ³ zero-one-many-semiring-with-meet (+-comm (Ο Β· q) p) (nr-nrα΅’-GLB {z = p} {s = q} π)
where
open Semiring-with-meet zero-one-many-semiring-with-meet
hiding (π; Ο; _Β·_; _+_)
opaque
nrα΅’-Ο-GLB :
let π = zero-one-many-semiring-with-meet in
β p q β Semiring-with-meet.Greatest-lower-bound
π (Ο Β· (p + q)) (Semiring-with-meet.nrα΅’ π Ο p q)
nrα΅’-Ο-GLB p q =
GLB.GLB-congΚ³ zero-one-many-semiring-with-meet (Β·-congΛ‘ (+-comm q p)) (nr-nrα΅’-GLB {z = p} {s = q} Ο)
where
open Semiring-with-meet zero-one-many-semiring-with-meet
hiding (Ο; _Β·_; _+_)
opaque
nrα΅’-GLB :
let π = zero-one-many-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
zero-one-many-supports-glb-for-natrec :
Has-well-behaved-GLBs zero-one-many-semiring-with-meet
zero-one-many-supports-glb-for-natrec = record
{ +-GLBΛ‘ = +-GLBΛ‘
; Β·-GLBΛ‘ = Β·-GLBΛ‘
; Β·-GLBΚ³ = commβ§Β·-GLBΛ‘βΒ·-GLBΚ³ Β·-comm Β·-GLBΛ‘
; +nrα΅’-GLB = +nrα΅’-GLB
}
where
open Semiring-with-meet zero-one-many-semiring-with-meet
hiding (_+_; _Β·_; _β€_; π; π; Ο)
open GLB zero-one-many-semiring-with-meet
open Multiplication zero-one-many-semiring-with-meet
open PartialOrder zero-one-many-semiring-with-meet
Β·-GLBΛ‘ :
{pα΅’ : Sequence Zero-one-many} β
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β² : π β€ Ο Β· p β p β‘ π
lemmaβ² {(π)} _ = refl
lemmaβ² {(π)} ()
lemmaβ² {(Ο)} ()
lemma : β p β Greatest-lower-bound p pα΅’ β
Greatest-lower-bound (Ο Β· p) (Ξ» i β Ο Β· pα΅’ i)
lemma π p-glb =
GLB-const Ξ» i β Β·-congΛ‘ (π-GLB-inv p-glb i)
lemma π p-glb =
(Ξ» i β Οβ€ (pα΅’ i))
, Ξ» { π qβ€ β β₯-elim (β’p-GLB-inv (Ξ» ()) p-glb (lemmaβ² ββ qβ€))
; π qβ€ β β₯-elim (β’p-GLB-inv (Ξ» ()) p-glb (lemmaβ³ ββ qβ€))
; Ο qβ€ β refl}
lemma Ο p-glb =
(Ξ» i β Οβ€ (pα΅’ i))
, Ξ» { π qβ€ β β₯-elim (β’p-GLB-inv (Ξ» ()) p-glb (lemmaβ² ββ qβ€))
; π qβ€ β β₯-elim (β’p-GLB-inv (Ξ» ()) p-glb (lemmaβ³ ββ qβ€))
; Ο qβ€ β refl}
+-GLBΛ‘ :
{pα΅’ : Sequence Zero-one-many} β
Greatest-lower-bound p pα΅’ β
Greatest-lower-bound (q + p) (Ξ» i β q + pα΅’ i)
+-GLBΛ‘ {q = π} p-glb = p-glb
+-GLBΛ‘ {(π)} {q = π} p-glb =
GLB-const (Ξ» i β +-congΛ‘ (π-GLB-inv p-glb i))
+-GLBΛ‘ {q = π} {pα΅’} p-glb = lemma _ p-glb
where
lemmaβ³ : π β€ π + p β p β‘ π
lemmaβ³ {(π)} _ = refl
lemmaβ³ {(π)} ()
lemmaβ³ {(Ο)} ()
lemmaβ² : π β€ π + p β p β‘ π
lemmaβ² {(π)} _ = refl
lemmaβ² {(π)} ()
lemmaβ² {(Ο)} ()
lemma : β p β Greatest-lower-bound p pα΅’ β
Greatest-lower-bound (π + p) (Ξ» i β π + pα΅’ i)
lemma π p-glb =
GLB-const (Ξ» i β +-congΛ‘ (π-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β€ β refl}
lemma Ο p-glb =
(Ξ» _ β refl)
, Ξ» { π qβ€ β β₯-elim (β’p-GLB-inv (Ξ» ()) p-glb (lemmaβ² ββ qβ€))
; π qβ€ β β₯-elim (β’p-GLB-inv (Ξ» ()) p-glb (lemmaβ³ ββ qβ€))
; Ο qβ€ β refl }
+-GLBΛ‘ {q = Ο} p-glb = GLB-constβ²
open Tools.Reasoning.PartialOrder β€-poset
+nrα΅’-GLB :
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 {pβ} {r} {zβ} {sβ} {pβ} {zβ} {sβ} 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-+ zero-one-many-has-nr {π} {r} β©
nr π r (zβ + zβ) (sβ + sβ) π β)