{-# OPTIONS --cubical-compatible --safe #-}
module index where
open import Level
open import Algebra.Bundles
open import Relation.Unary
import Data.Nat as Nat
open import Relation.Binary.PropositionalEquality
open import Data.Product
open import Data.List
import Forcing.Base
import Forcing.Monad
import Forcing.Monad.Conservative
import Forcing.Levy
import Forcing.Prime
import Forcing.Semantics
import Krull.Base
import Krull.FreeRing
import Krull.Static
import Krull.Dynamical
module §1
  (R… : CommutativeRing 0ℓ 0ℓ)
  (Enum : Nat.ℕ → Pred (CommutativeRing.Carrier R…) 0ℓ)
  (Enum-singlevalued : ∀ {n} {x y} → Enum n x → Enum n y → x ≡ y)
  (Enum-surjective : (x : CommutativeRing.Carrier R…) → Σ[ n ∈ Nat.ℕ ] Enum n x)
  where
  open CommutativeRing R… renaming (Carrier to R)
  open Krull.Base R…
  open Krull.Static R… Enum Enum-singlevalued
  Construction-1 : Pred R 0ℓ
  Construction-1 = 𝔪
  module Lemma-1-1 where
    a : ⟨ 𝔪 ⟩ ⊆ 𝔪
    a = 𝔪-is-ideal Enum-surjective
    b : ¬ 1# ∈ 𝔪
    b = 𝔪-proper
    c : {n : Nat.ℕ} →
      let [1] = Enum n ⊆ G (Nat.suc n)
          [2] = Enum n ⊆ 𝔪
          [3] = ¬ 1# ∈ ⟨ 𝔪 ∪ Enum n ⟩
          [4] = ¬ 1# ∈ ⟨ G n ∪ Enum n ⟩
      in ([1] → [2]) × ([2] → [3]) × ([3] → [4]) × ([4] → [1])
    c = 1⇒2 , 2⇒3 , 3⇒4 , 4⇒1
  Corollary-1-2 : (x : R) → ¬ 1# ∈ ⟨ 𝔪 ∪ { x } ⟩ → x ∈ 𝔪
  Corollary-1-2 = 𝔪-is-maximal Enum-surjective
module §2 where
  Proposition-2-6 = Krull.Static.example
module §4 where
  open Forcing.Base
  module §4-1 where
    Definition-4-1 : Set₁
    Definition-4-1 = ForcingNotion
    Definition-4-2 : ForcingNotion → Set₁
    Definition-4-2 = Filter
    Example-4-3 : Set → ForcingNotion
    Example-4-3 = Forcing.Levy.L…
  module §4-2 (L… : ForcingNotion) where
    open ForcingNotion L…
    open Forcing.Monad L…
    Definition-Ev : (L → Set) → (L → Set)
    Definition-Ev = Ev
    Lemma-4-10 : {P : L → Set} → Monotonic P → Monotonic (Ev P)
    Lemma-4-10 = weaken-ev
    Proposition-4-11
      : {P : L → Set} {F… : Filter L…} {x : L} (open Filter F…)
      → Ev P x → F x → Σ[ y ∈ L ] y ≼ x × F y × P y
    Proposition-4-11 {P} {F…} {x} = Ev⇒Filter {P} {F…} {x}
    Proposition-4-12
      : (all-coverings-inhabited : {x : L} (R : Cov x) → Satisfiable (_◁ R))
      → {{x : L}} {P : Set} → ∇ P → P
    Proposition-4-12 all-coverings-inhabited = escape
      where open Forcing.Monad.Conservative L… all-coverings-inhabited
  module Example-4-13 (X : Set) where
    open Forcing.Levy X
    open ForcingNotion L…
    open Forcing.Monad L…
    lemma : {x : L} {P : Set} → ∇ {{x}} P → P
    lemma = escape
  module §4-3 (L… : ForcingNotion) where
    open Forcing.Semantics L…
    Definition-Language  = Formula
    Definition-Semantics = exec∇
    Lemma-4-17 = weaken
    module Theorem-4-22 = 1ˢᵗOrderEquivalence
    module Theorem-4-23 = CoherentEquivalence
  module §4-4 = Krull.Dynamical
  Version-of-Proposition-4-26 = Forcing.Prime.corollary
  module TestCase where
    open Krull.FreeRing
    data Var : Set where
      a b c d u v : Var
    infix 4 _~_
    data _~_ : Term Var → Term Var → Set where
      ua1 : var u * var a ~ 1#
      ub0 : var u * var b ~ 0#
      va0 : var v * var a ~ 0#
      vb1 : var v * var b ~ 1#
    R… = ℤ[ Var ]/ _~_
    open Krull.Dynamical R…
    1≈0 = example (var a) (var b) (var u) (var v) (eq ua1) (eq ub0) (eq va0) (eq vb1)