open import Realizability.CombinatoryAlgebra
open import Realizability.ApplicativeStructure
open import Cubical.Foundations.Prelude
open import Cubical.Foundations.Equiv
open import Cubical.Data.FinData
open import Cubical.Data.Vec
open import Cubical.Data.Sum renaming (rec to sumRec)
open import Cubical.Relation.Binary.Order.Preorder
open import Cubical.HITs.PropositionalTruncation
open import Cubical.HITs.PropositionalTruncation.Monad
module Realizability.Tripos.Prealgebra.Meets.Commutativity {ℓ ℓ' ℓ''} {A : Type ℓ} (ca : CombinatoryAlgebra A) where
open import Realizability.Tripos.Prealgebra.Predicate {ℓ' = ℓ'} {ℓ'' = ℓ''} ca
open CombinatoryAlgebra ca
open Realizability.CombinatoryAlgebra.Combinators ca renaming (i to Id; ia≡a to Ida≡a)
module _ (X : Type ℓ') (isSetX' : isSet X) where
private PredicateX = Predicate X
open Predicate
open PredicateProperties X
open PreorderReasoning preorder≤
x⊓y≤y⊓x : ∀ x y → x ⊓ y ≤ y ⊓ x
x⊓y≤y⊓x x y =
do
let
proof : Term as 1
proof = ` pair ̇ (` pr₂ ̇ # zero) ̇ (` pr₁ ̇ # zero)
return
(λ* proof ,
(λ x' a a⊩x⊓y →
subst
(λ r → r ⊩ ∣ y ⊓ x ∣ x')
(sym (λ*ComputationRule proof a))
((subst (λ r → r ⊩ ∣ y ∣ x') (sym (pr₁pxy≡x _ _)) (a⊩x⊓y .snd)) ,
(subst (λ r → r ⊩ ∣ x ∣ x') (sym (pr₂pxy≡y _ _)) (a⊩x⊓y .fst)))))
antiSym→x⊓z≤y⊓z : ∀ x y z → x ≤ y → y ≤ x → x ⊓ z ≤ y ⊓ z
antiSym→x⊓z≤y⊓z x y z x≤y y≤x =
do
(f , f⊩x≤y) ← x≤y
(g , g⊩y≤x) ← y≤x
let
proof : Term as 1
proof = ` pair ̇ (` f ̇ (` pr₁ ̇ # zero)) ̇ (` pr₂ ̇ # zero)
return
((λ* proof) ,
(λ x' a a⊩x⊓z →
subst
(λ r → r ⊩ ∣ y ⊓ z ∣ x')
(sym (λ*ComputationRule proof a))
((subst (λ r → r ⊩ ∣ y ∣ x') (sym (pr₁pxy≡x _ _)) (f⊩x≤y x' (pr₁ ⨾ a) (a⊩x⊓z .fst))) ,
(subst (λ r → r ⊩ ∣ z ∣ x') (sym (pr₂pxy≡y _ _)) (a⊩x⊓z .snd)))))
antiSym→x⊓y≤x⊓z : ∀ x y z → y ≤ z → z ≤ y → x ⊓ y ≤ x ⊓ z
antiSym→x⊓y≤x⊓z x y z y≤z z≤y =
do
(f , f⊩y≤z) ← y≤z
(g , g⊩z≤y) ← z≤y
let
proof : Term as 1
proof = ` pair ̇ (` pr₁ ̇ # zero) ̇ (` f ̇ (` pr₂ ̇ # zero))
return
((λ* proof) ,
(λ { x' a (pr₁a⊩x , pr₂a⊩y) →
subst
(λ r → r ⊩ ∣ x ⊓ z ∣ x')
(sym (λ*ComputationRule proof a))
((subst (λ r → r ⊩ ∣ x ∣ x') (sym (pr₁pxy≡x _ _)) pr₁a⊩x) ,
(subst (λ r → r ⊩ ∣ z ∣ x') (sym (pr₂pxy≡y _ _)) (f⊩y≤z x' (pr₂ ⨾ a) pr₂a⊩y))) }))