initial agda code with Owen's pseudocode from the Geolog lectures, and some universe library code from Escardo's book

This commit is contained in:
Felix Dilke 2026-01-12 15:21:49 +00:00
parent 09ddf9556e
commit 2232600ed1
3 changed files with 102 additions and 3 deletions

3
.gitignore vendored
View File

@ -23,7 +23,4 @@ cabal.project.local~
.HTF/
.ghc.environment.*
# ---> Agda
*.agdai
MAlonzo/**

4
agda-experiments/.gitignore vendored Normal file
View File

@ -0,0 +1,4 @@
# ---> Agda
*.agdai
MAlonzo/**

View File

@ -0,0 +1,98 @@
{-# OPTIONS --guardedness #-}
{-# OPTIONS --allow-unsolved-metas #-}
open import Data.Unit
open import Data.Bool using (Bool)
import Data.Bool as Bool
open import Data.Fin using (Fin)
import Data.Fin as Fin
open import Data.Nat
open import Relation.Nullary.Decidable using (Dec)
module Owen where
data Con (S : Set) : Set where
: Con S
_▷_ : Con S -> S -> Con S
data Var {S : Set} : Con S -> S -> Set where
q : {A : S} -> {Γ : Con S} -> Var (Γ A) A
p_ : {A B : S} -> {Γ : Con S} -> Var Γ A -> Var (Γ B) A
module RegularLogic (Sort : Set) (Rel : Con Sort -> Set) where
variable Γ Δ : Con Sort
variable A B : Sort
Tm = Var
Sub : Con Sort -> Con Sort -> Set
Sub Γ Δ = (A : Sort) -> Tm Δ A -> Tm Γ A
data Prop : Con Sort -> Set where
true : Prop Γ
_$_ : Rel Δ -> Sub Γ Δ -> Prop Γ
_∧_ : Prop Γ -> Prop Γ -> Prop Γ
_===_ : Tm Γ A -> Tm Γ A -> Prop Γ
: Prop (Γ A) -> Prop Γ
record Axiom : Set where
field
con : Con Sort
ante : Prop con
cons : Prop con
record Sig : Set where
field
sorts : Con
rels : Con (Con (Var sorts tt))
Sort : (S : Sig) -> Set
Sort S = Var (Sig.sorts S) tt
Rel : (S : Sig) -> Con (Sort S) -> Set
Rel S = Var (Sig.rels S)
record Theory : Set where
field
sig : Sig
axioms : Con (RegularLogic.Axiom (Sort sig) (Rel sig))
Tuple : (S : Sig) -> (Sort S -> ) -> Con (Sort S) -> Set
Tuple S elts Γ = (A : Sort S) -> Var Γ A -> Fin (elts A)
record ModelData (S : Sig) : Set where
field
elts : Sort S ->
sat : {Γ : Con (Sort S)} -> Rel S Γ -> Tuple S elts Γ -> Bool
module Interp (S : Sig) (M : ModelData S) where
open RegularLogic (Sort S) (Rel S)
t = Tuple S (ModelData.elts M)
Elt : Sort S -> Set
Elt A = Fin (ModelData.elts M A)
extend : (Γ : Con (Sort S)) -> t Γ -> (A : Sort S) -> Elt A -> t (Γ A)
extend = {!!}
any : {n : } -> (Fin n -> Bool) -> Bool
any = {!!}
allTuples : (Γ : Con (Sort S)) -> (t Γ -> Bool) -> Bool
allTuples = {!!}
eval : {Γ : Con (Sort S)} -> {A : Sort S} -> Tm Γ A -> t Γ -> Elt A
eval {Γ} {A} v f = f A v
evalSub : {Γ Δ : Con (Sort S)} -> Sub Γ Δ -> t Γ -> t Δ
evalSub s f A v = f A (s A v)
interp : {Γ : Con (Sort S)} -> Prop Γ -> t Γ -> Bool
interp true _ = Bool.true
interp (r $ xs) f = ModelData.sat M r (evalSub xs f)
interp (ϕ ψ) f = interp ϕ f Bool.∧ interp ψ f
interp (x₁ === x₂) f = Dec.does (eval x₁ f Fin.≟ eval x₂ f)
interp ( {Γ} {A} ϕ) f = any (λ i -> interp ϕ (extend Γ f A i))
satisfies : Axiom -> Bool
satisfies a = allTuples
(Axiom.con a)
(λ f -> Dec.does (interp (Axiom.ante a) f Bool.≤? interp (Axiom.cons a) f))