{-# OPTIONS --cubical --allow-unsolved-metas #-}
open import Cubical.Core.Everything
open import Cubical.Foundations.Prelude
data ℤmod4 : Set where
zero : ℤmod4
succ : ℤmod4 → ℤmod4
wrap : succ (succ (succ (succ zero))) ≡ zero
one : ℤmod4
one = succ zero
five : ℤmod4
five = succ (succ (succ (succ (succ zero))))
_ : five ≡ one
_ = cong succ wrap
data UnorderedPair (A : Set) : Set where
pair : A → A → UnorderedPair A
swap : (x y : A) → pair x y ≡ pair y x
example-pair : UnorderedPair ℤmod4
example-pair = pair one zero
example-pair' : UnorderedPair ℤmod4
example-pair' = pair zero one
_ : example-pair ≡ example-pair'
_ = swap one zero
first : {A : Set} → UnorderedPair A → A
first (pair x y) = x
first (swap x y i) = {!!}
data Circle : Set where
base : Circle
loop : base ≡ base
refl' : {X : Set} → (x : X) → x ≡ x
refl' x = λ i → x
sym' : {X : Set} {a b : X} → a ≡ b → b ≡ a
sym' p = λ i → p (~ i)
trans : {X : Set} {a b c : X} → a ≡ b → b ≡ c → a ≡ c
trans p q = p ∙ q
cong' : {X Y : Set} {a b : X} → (f : X → Y) → a ≡ b → f a ≡ f b
cong' f p = λ i → f (p i)
funext : {X Y : Set} {f g : X → Y} → ((x : X) → f x ≡ g x) → f ≡ g
funext h = λ i x → h x i
open import Padova2025.ProvingBasics.Equality.Base renaming (_≡_ to _≡ᵢ_; refl to reflᵢ)
theorem : {X : Set} {a b : X} → a ≡ᵢ b → a ≡ b
theorem {X} {a} {b} reflᵢ = refl' a
theorem' : {X : Set} {a b : X} → a ≡ b → a ≡ᵢ b
theorem' = {!J!}
open import Padova2025.ProgrammingBasics.Naturals.Base
open import Padova2025.ProgrammingBasics.Naturals.Arithmetic
data ℤ : Set where
_⊝_ : (credit : ℕ) → (debt : ℕ) → ℤ
cancel : (a b : ℕ) → a ⊝ b ≡ succ a ⊝ succ b
data ℤ' : Set where
_⊝'_ : (credit : ℕ) → (debt : ℕ) → ℤ'
_≈_ : ℤ' → ℤ' → Set
(a ⊝' b) ≈ (u ⊝' v) = (a + v) ≡ᵢ (u + b)
succℤ' : ℤ' → ℤ'
succℤ' (a ⊝' b) = succ a ⊝' b
succℤ'-≈ : {x y : ℤ'} → x ≈ y → succℤ' x ≈ succℤ' y
succℤ'-≈ = {!!}
example-int : ℤ
example-int = succ (succ (succ zero)) ⊝ succ zero
example-int' : ℤ
example-int' = succ (succ (succ (succ zero))) ⊝ succ (succ zero)
minusone : ℤ
minusone = zero ⊝ succ zero
succℤ : ℤ → ℤ
succℤ (credit ⊝ debt) = succ credit ⊝ debt
succℤ (cancel a b i) = cancel (succ a) b i
_ = example-int ≡ example-int'
_ = cancel (succ (succ (succ zero))) (succ zero)
data Segment : Set where
start : Segment
end : Segment
walk : start ≡ end
data FilledSquare : Set where
upper-left : FilledSquare
lower-right : FilledSquare
p : upper-left ≡ lower-right
q : upper-left ≡ lower-right
filler : p ≡ q