Mercurial > hg > Gears > GearsAgda
diff logic.agda @ 949:057d3309ed9d
...
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Sun, 04 Aug 2024 13:05:12 +0900 |
parents | e5288029f850 |
children | 5c75fc6dfe59 |
line wrap: on
line diff
--- a/logic.agda Sat Jul 20 17:01:50 2024 +0900 +++ b/logic.agda Sun Aug 04 13:05:12 2024 +0900 @@ -1,14 +1,11 @@ -{-# OPTIONS --safe --cubical-compatible #-} +{-# OPTIONS --cubical-compatible --safe #-} + module logic where -open import Level - +open import Level open import Relation.Nullary -open import Relation.Binary hiding (_⇔_) -open import Relation.Binary.PropositionalEquality - +open import Relation.Binary hiding (_⇔_ ) open import Data.Empty -open import Data.Nat hiding (_⊔_) data Bool : Set where @@ -49,45 +46,139 @@ dont-orb {A} {B} (case2 b) ¬B = ⊥-elim ( ¬B b ) dont-orb {A} {B} (case1 a) ¬B = a - infixr 130 _∧_ infixr 140 _∨_ infixr 150 _⇔_ -_/\_ : Bool → Bool → Bool +_/\_ : Bool → Bool → Bool true /\ true = true _ /\ _ = false -_<B?_ : ℕ → ℕ → Bool -ℕ.zero <B? x = true -ℕ.suc x <B? ℕ.zero = false -ℕ.suc x <B? ℕ.suc xx = x <B? xx - --- _<BT_ : ℕ → ℕ → Set --- ℕ.zero <BT ℕ.zero = ⊤ --- ℕ.zero <BT ℕ.suc b = ⊤ --- ℕ.suc a <BT ℕ.zero = ⊥ --- ℕ.suc a <BT ℕ.suc b = a <BT b - - -_≟B_ : Decidable {A = Bool} _≡_ -true ≟B true = yes refl -false ≟B false = yes refl -true ≟B false = no λ() -false ≟B true = no λ() - -_\/_ : Bool → Bool → Bool +_\/_ : Bool → Bool → Bool false \/ false = false _ \/ _ = true -not_ : Bool → Bool +not : Bool → Bool not true = false -not false = true +not false = true -_<=>_ : Bool → Bool → Bool +_<=>_ : Bool → Bool → Bool true <=> true = true false <=> false = true _ <=> _ = false infixr 130 _\/_ infixr 140 _/\_ + +open import Relation.Binary.PropositionalEquality + +record Bijection {n m : Level} (R : Set n) (S : Set m) : Set (n Level.⊔ m) where + field + fun← : S → R + fun→ : R → S + fiso← : (x : R) → fun← ( fun→ x ) ≡ x + fiso→ : (x : S ) → fun→ ( fun← x ) ≡ x + +injection : {n m : Level} (R : Set n) (S : Set m) (f : R → S ) → Set (n Level.⊔ m) +injection R S f = (x y : R) → f x ≡ f y → x ≡ y + + +-- Cubical Agda has trouble with std-lib's Dec +-- we sometimes use simpler version of Dec + +data Dec0 {n : Level} (A : Set n) : Set n where + yes0 : A → Dec0 A + no0 : (A → ⊥) → Dec0 A + +open _∧_ +∧-injective : {n m : Level} {A : Set n} {B : Set m} → {a b : A ∧ B} → proj1 a ≡ proj1 b → proj2 a ≡ proj2 b → a ≡ b +∧-injective refl refl = refl + +not-not-bool : { b : Bool } → not (not b) ≡ b +not-not-bool {true} = refl +not-not-bool {false} = refl + +¬t=f : (t : Bool ) → ¬ ( not t ≡ t) +¬t=f true () +¬t=f false () + +≡-Bool-func : {A B : Bool } → ( A ≡ true → B ≡ true ) → ( B ≡ true → A ≡ true ) → A ≡ B +≡-Bool-func {true} {true} a→b b→a = refl +≡-Bool-func {false} {true} a→b b→a with b→a refl +... | () +≡-Bool-func {true} {false} a→b b→a with a→b refl +... | () +≡-Bool-func {false} {false} a→b b→a = refl + +bool-≡-? : (a b : Bool) → Dec0 ( a ≡ b ) +bool-≡-? true true = yes0 refl +bool-≡-? true false = no0 (λ ()) +bool-≡-? false true = no0 (λ ()) +bool-≡-? false false = yes0 refl + +¬-bool-t : {a : Bool} → ¬ ( a ≡ true ) → a ≡ false +¬-bool-t {true} ne = ⊥-elim ( ne refl ) +¬-bool-t {false} ne = refl + +¬-bool-f : {a : Bool} → ¬ ( a ≡ false ) → a ≡ true +¬-bool-f {true} ne = refl +¬-bool-f {false} ne = ⊥-elim ( ne refl ) + +¬-bool : {a : Bool} → a ≡ false → a ≡ true → ⊥ +¬-bool refl () + +lemma-∧-0 : {a b : Bool} → a /\ b ≡ true → a ≡ false → ⊥ +lemma-∧-0 {true} {false} () +lemma-∧-0 {false} {true} () +lemma-∧-0 {false} {false} () +lemma-∧-0 {true} {true} eq1 () + +lemma-∧-1 : {a b : Bool} → a /\ b ≡ true → b ≡ false → ⊥ +lemma-∧-1 {true} {false} () +lemma-∧-1 {false} {true} () +lemma-∧-1 {false} {false} () +lemma-∧-1 {true} {true} eq1 () + +bool-and-tt : {a b : Bool} → a ≡ true → b ≡ true → ( a /\ b ) ≡ true +bool-and-tt refl refl = refl + +bool-∧→tt-0 : {a b : Bool} → ( a /\ b ) ≡ true → a ≡ true +bool-∧→tt-0 {true} {true} eq = refl +bool-∧→tt-0 {false} {_} () + +bool-∧→tt-1 : {a b : Bool} → ( a /\ b ) ≡ true → b ≡ true +bool-∧→tt-1 {true} {true} eq = refl +bool-∧→tt-1 {true} {false} () +bool-∧→tt-1 {false} {false} () + +bool-or-1 : {a b : Bool} → a ≡ false → ( a \/ b ) ≡ b +bool-or-1 {false} {true} eq = refl +bool-or-1 {false} {false} eq = refl +bool-or-2 : {a b : Bool} → b ≡ false → (a \/ b ) ≡ a +bool-or-2 {true} {false} eq = refl +bool-or-2 {false} {false} eq = refl + +bool-or-3 : {a : Bool} → ( a \/ true ) ≡ true +bool-or-3 {true} = refl +bool-or-3 {false} = refl + +bool-or-31 : {a b : Bool} → b ≡ true → ( a \/ b ) ≡ true +bool-or-31 {true} {true} eq = refl +bool-or-31 {false} {true} eq = refl + +bool-or-4 : {a : Bool} → ( true \/ a ) ≡ true +bool-or-4 {true} = refl +bool-or-4 {false} = refl + +bool-or-41 : {a b : Bool} → a ≡ true → ( a \/ b ) ≡ true +bool-or-41 {true} {b} eq = refl + +bool-and-1 : {a b : Bool} → a ≡ false → (a /\ b ) ≡ false +bool-and-1 {false} {b} eq = refl +bool-and-2 : {a b : Bool} → b ≡ false → (a /\ b ) ≡ false +bool-and-2 {true} {false} eq = refl +bool-and-2 {false} {false} eq = refl +bool-and-2 {true} {true} () +bool-and-2 {false} {true} () + +