{-# LANGUAGE DataKinds #-}
{-# LANGUAGE DeriveDataTypeable #-}
{-# LANGUAGE DeriveAnyClass #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE NamedFieldPuns #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE StandaloneDeriving #-}
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE TypeAbstractions #-}
{-# OPTIONS_GHC -Wall -Werror #-}
module Documentation.SBV.Examples.TP.ShefferStroke where
import Prelude hiding ((<))
import Data.List (intercalate)
import Data.SBV
import Data.SBV.TP
class BooleanAlgebra α where
ﬧ :: α -> α
(⨆) :: α -> α -> α
(⨅) :: α -> α -> α
(≤) :: α -> α -> SBool
(<) :: α -> α -> SBool
(\\) :: α -> α -> α
(⇨) :: α -> α -> α
ⲳ :: α
т :: α
infix 4 ≤
infixl 6 ⨆
infixl 7 ⨅
data BooleanAlgebraProof = BooleanAlgebraProof {
BooleanAlgebraProof -> Proof (Forall "a" Stroke -> SBool)
le_refl :: Proof (Forall "a" Stroke -> SBool)
, BooleanAlgebraProof
-> Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
le_trans :: Proof (Forall "a" Stroke -> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
, BooleanAlgebraProof
-> Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
lt_iff_le_not_le :: Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
, BooleanAlgebraProof
-> Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
le_antisymm :: Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
, BooleanAlgebraProof
-> Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
le_sup_left :: Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
, BooleanAlgebraProof
-> Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
le_sup_right :: Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
, BooleanAlgebraProof
-> Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
sup_le :: Proof (Forall "a" Stroke -> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
, BooleanAlgebraProof
-> Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
inf_le_left :: Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
, BooleanAlgebraProof
-> Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
inf_le_right :: Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
, BooleanAlgebraProof
-> Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
le_inf :: Proof (Forall "a" Stroke -> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
, BooleanAlgebraProof
-> Proof
(Forall "x" Stroke
-> Forall "y" Stroke -> Forall "z" Stroke -> SBool)
le_sup_inf :: Proof (Forall "x" Stroke -> Forall "y" Stroke -> Forall "z" Stroke -> SBool)
, BooleanAlgebraProof -> Proof (Forall "x" Stroke -> SBool)
inf_compl_le_bot :: Proof (Forall "x" Stroke -> SBool)
, BooleanAlgebraProof -> Proof (Forall "x" Stroke -> SBool)
top_le_sup_compl :: Proof (Forall "x" Stroke -> SBool)
, BooleanAlgebraProof -> Proof (Forall "a" Stroke -> SBool)
le_top :: Proof (Forall "a" Stroke -> SBool)
, BooleanAlgebraProof -> Proof (Forall "a" Stroke -> SBool)
bot_le :: Proof (Forall "a" Stroke -> SBool)
, BooleanAlgebraProof
-> Proof (Forall "x" Stroke -> Forall "y" Stroke -> SBool)
sdiff_eq :: Proof (Forall "x" Stroke -> Forall "y" Stroke -> SBool)
, BooleanAlgebraProof
-> Proof (Forall "x" Stroke -> Forall "y" Stroke -> SBool)
himp_eq :: Proof (Forall "x" Stroke -> Forall "y" Stroke -> SBool)
}
instance Show BooleanAlgebraProof where
show :: BooleanAlgebraProof -> String
show BooleanAlgebraProof
p = String -> [String] -> String
forall a. [a] -> [[a]] -> [a]
intercalate String
"\n" [ String
"BooleanAlgebraProof {"
, String
" le_refl : " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Proof (Forall "a" Stroke -> SBool) -> String
forall a. Show a => a -> String
show (BooleanAlgebraProof -> Proof (Forall "a" Stroke -> SBool)
le_refl BooleanAlgebraProof
p)
, String
" le_trans : " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
-> String
forall a. Show a => a -> String
show (BooleanAlgebraProof
-> Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
le_trans BooleanAlgebraProof
p)
, String
" lt_iff_le_not_le: " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool) -> String
forall a. Show a => a -> String
show (BooleanAlgebraProof
-> Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
lt_iff_le_not_le BooleanAlgebraProof
p)
, String
" le_antisymm : " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool) -> String
forall a. Show a => a -> String
show (BooleanAlgebraProof
-> Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
le_antisymm BooleanAlgebraProof
p)
, String
" le_sup_left : " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool) -> String
forall a. Show a => a -> String
show (BooleanAlgebraProof
-> Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
le_sup_left BooleanAlgebraProof
p)
, String
" le_sup_right : " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool) -> String
forall a. Show a => a -> String
show (BooleanAlgebraProof
-> Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
le_sup_right BooleanAlgebraProof
p)
, String
" sup_le : " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
-> String
forall a. Show a => a -> String
show (BooleanAlgebraProof
-> Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
sup_le BooleanAlgebraProof
p)
, String
" inf_le_left : " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool) -> String
forall a. Show a => a -> String
show (BooleanAlgebraProof
-> Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
inf_le_left BooleanAlgebraProof
p)
, String
" inf_le_right : " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool) -> String
forall a. Show a => a -> String
show (BooleanAlgebraProof
-> Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
inf_le_right BooleanAlgebraProof
p)
, String
" le_inf : " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
-> String
forall a. Show a => a -> String
show (BooleanAlgebraProof
-> Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
le_inf BooleanAlgebraProof
p)
, String
" le_sup_inf : " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Proof
(Forall "x" Stroke
-> Forall "y" Stroke -> Forall "z" Stroke -> SBool)
-> String
forall a. Show a => a -> String
show (BooleanAlgebraProof
-> Proof
(Forall "x" Stroke
-> Forall "y" Stroke -> Forall "z" Stroke -> SBool)
le_sup_inf BooleanAlgebraProof
p)
, String
" inf_compl_le_bot: " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Proof (Forall "x" Stroke -> SBool) -> String
forall a. Show a => a -> String
show (BooleanAlgebraProof -> Proof (Forall "x" Stroke -> SBool)
inf_compl_le_bot BooleanAlgebraProof
p)
, String
" top_le_sup_compl: " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Proof (Forall "x" Stroke -> SBool) -> String
forall a. Show a => a -> String
show (BooleanAlgebraProof -> Proof (Forall "x" Stroke -> SBool)
top_le_sup_compl BooleanAlgebraProof
p)
, String
" le_top : " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Proof (Forall "a" Stroke -> SBool) -> String
forall a. Show a => a -> String
show (BooleanAlgebraProof -> Proof (Forall "a" Stroke -> SBool)
le_top BooleanAlgebraProof
p)
, String
" bot_le : " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Proof (Forall "a" Stroke -> SBool) -> String
forall a. Show a => a -> String
show (BooleanAlgebraProof -> Proof (Forall "a" Stroke -> SBool)
bot_le BooleanAlgebraProof
p)
, String
" sdiff_eq : " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Proof (Forall "x" Stroke -> Forall "y" Stroke -> SBool) -> String
forall a. Show a => a -> String
show (BooleanAlgebraProof
-> Proof (Forall "x" Stroke -> Forall "y" Stroke -> SBool)
sdiff_eq BooleanAlgebraProof
p)
, String
" himp_eq : " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Proof (Forall "x" Stroke -> Forall "y" Stroke -> SBool) -> String
forall a. Show a => a -> String
show (BooleanAlgebraProof
-> Proof (Forall "x" Stroke -> Forall "y" Stroke -> SBool)
himp_eq BooleanAlgebraProof
p)
, String
"}"
]
data Stroke
mkUninterpretedSort ''Stroke
(⏐) :: SStroke -> SStroke -> SStroke
⏐ :: SBV Stroke -> SBV Stroke -> SBV Stroke
(⏐) = String -> SBV Stroke -> SBV Stroke -> SBV Stroke
forall a. SMTDefinable a => String -> a
uninterpret String
"⏐"
infixl 7 ⏐
instance BooleanAlgebra SStroke where
ﬧ :: SBV Stroke -> SBV Stroke
ﬧ SBV Stroke
x = SBV Stroke
x SBV Stroke -> SBV Stroke -> SBV Stroke
⏐ SBV Stroke
x
SBV Stroke
a ⨆ :: SBV Stroke -> SBV Stroke -> SBV Stroke
⨆ SBV Stroke
b = SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧ(SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
⏐ SBV Stroke
b)
SBV Stroke
a ⨅ :: SBV Stroke -> SBV Stroke -> SBV Stroke
⨅ SBV Stroke
b = SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧ SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
⏐ SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧ SBV Stroke
b
SBV Stroke
a ≤ :: SBV Stroke -> SBV Stroke -> SBool
≤ SBV Stroke
b = SBV Stroke
a SBV Stroke -> SBV Stroke -> SBool
forall a. EqSymbolic a => a -> a -> SBool
.== SBV Stroke
b SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ SBV Stroke
a
SBV Stroke
a < :: SBV Stroke -> SBV Stroke -> SBool
< SBV Stroke
b = SBV Stroke
a SBV Stroke -> SBV Stroke -> SBool
forall α. BooleanAlgebra α => α -> α -> SBool
≤ SBV Stroke
b SBool -> SBool -> SBool
.&& SBV Stroke
a SBV Stroke -> SBV Stroke -> SBool
forall a. EqSymbolic a => a -> a -> SBool
./= SBV Stroke
b
SBV Stroke
a \\ :: SBV Stroke -> SBV Stroke -> SBV Stroke
\\ SBV Stroke
b = SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧ SBV Stroke
b
SBV Stroke
a ⇨ :: SBV Stroke -> SBV Stroke -> SBV Stroke
⇨ SBV Stroke
b = SBV Stroke
b SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧ SBV Stroke
a
ⲳ :: SBV Stroke
ⲳ = SBV Stroke
arb SBV Stroke -> SBV Stroke -> SBV Stroke
⏐ SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧ SBV Stroke
arb where arb :: SBV Stroke
arb = String -> (SBV Stroke -> SBool) -> SBV Stroke
forall a.
(SymVal a, HasKind a) =>
String -> (SBV a -> SBool) -> SBV a
some String
"ⲳ" (SBool -> SBV Stroke -> SBool
forall a b. a -> b -> a
const SBool
sTrue)
т :: SBV Stroke
т = SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧ SBV Stroke
forall α. BooleanAlgebra α => α
ⲳ
ﬧﬧ :: BooleanAlgebra a => a -> a
ﬧﬧ :: forall α. BooleanAlgebra α => α -> α
ﬧﬧ = a -> a
forall α. BooleanAlgebra α => α -> α
ﬧ (a -> a) -> (a -> a) -> a -> a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. a -> a
forall α. BooleanAlgebra α => α -> α
ﬧ
sheffer1 :: TP (Proof (Forall "a" Stroke -> SBool))
sheffer1 :: TP (Proof (Forall "a" Stroke -> SBool))
sheffer1 = String
-> (Forall "a" Stroke -> SBool)
-> TP (Proof (Forall "a" Stroke -> SBool))
forall a. Proposition a => String -> a -> TP (Proof a)
axiom String
"ﬧﬧa == a" ((Forall "a" Stroke -> SBool)
-> TP (Proof (Forall "a" Stroke -> SBool)))
-> (Forall "a" Stroke -> SBool)
-> TP (Proof (Forall "a" Stroke -> SBool))
forall a b. (a -> b) -> a -> b
$ \(Forall SBV Stroke
a) -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧﬧ SBV Stroke
a SBV Stroke -> SBV Stroke -> SBool
forall a. EqSymbolic a => a -> a -> SBool
.== SBV Stroke
a
sheffer2 :: TP (Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool))
sheffer2 :: TP (Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool))
sheffer2 = String
-> (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
-> TP (Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool))
forall a. Proposition a => String -> a -> TP (Proof a)
axiom String
"a ⏐ (b ⏐ ﬧb) == ﬧa" ((Forall "a" Stroke -> Forall "b" Stroke -> SBool)
-> TP (Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)))
-> (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
-> TP (Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool))
forall a b. (a -> b) -> a -> b
$ \(Forall SBV Stroke
a) (Forall SBV Stroke
b) -> SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
⏐ (SBV Stroke
b SBV Stroke -> SBV Stroke -> SBV Stroke
⏐ SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧ SBV Stroke
b) SBV Stroke -> SBV Stroke -> SBool
forall a. EqSymbolic a => a -> a -> SBool
.== SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧ SBV Stroke
a
sheffer3 :: TP (Proof (Forall "a" Stroke -> Forall "b" Stroke -> Forall "c" Stroke -> SBool))
sheffer3 :: TP
(Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool))
sheffer3 = String
-> (Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
-> TP
(Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool))
forall a. Proposition a => String -> a -> TP (Proof a)
axiom String
"ﬧ(a ⏐ (b ⏐ c)) == (ﬧb ⏐ a) ⏐ (ﬧc ⏐ a)" ((Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
-> TP
(Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)))
-> (Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
-> TP
(Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool))
forall a b. (a -> b) -> a -> b
$ \(Forall SBV Stroke
a) (Forall SBV Stroke
b) (Forall SBV Stroke
c) -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧ(SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
⏐ (SBV Stroke
b SBV Stroke -> SBV Stroke -> SBV Stroke
⏐ SBV Stroke
c)) SBV Stroke -> SBV Stroke -> SBool
forall a. EqSymbolic a => a -> a -> SBool
.== (SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧ SBV Stroke
b SBV Stroke -> SBV Stroke -> SBV Stroke
⏐ SBV Stroke
a) SBV Stroke -> SBV Stroke -> SBV Stroke
⏐ (SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧ SBV Stroke
c SBV Stroke -> SBV Stroke -> SBV Stroke
⏐ SBV Stroke
a)
shefferBooleanAlgebra :: IO BooleanAlgebraProof
shefferBooleanAlgebra :: IO BooleanAlgebraProof
shefferBooleanAlgebra = SMTConfig -> TP BooleanAlgebraProof -> IO BooleanAlgebraProof
forall a. SMTConfig -> TP a -> IO a
runTPWith (Int -> SMTConfig -> SMTConfig
tpRibbon Int
60 SMTConfig
z3) (TP BooleanAlgebraProof -> IO BooleanAlgebraProof)
-> TP BooleanAlgebraProof -> IO BooleanAlgebraProof
forall a b. (a -> b) -> a -> b
$ do
let p :: Proof a -> ProofObj
p = Proof a -> ProofObj
forall a. Proof a -> ProofObj
proofOf
Proof (Forall "a" Stroke -> SBool)
sh1 <- TP (Proof (Forall "a" Stroke -> SBool))
sheffer1
Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
sh2 <- TP (Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool))
sheffer2
Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
sh3 <- TP
(Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool))
sheffer3
Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
commut <- String
-> (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
-> StepArgs
(Forall "a" Stroke -> Forall "b" Stroke -> SBool) Stroke
-> TP (Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool))
forall t.
(Proposition (Forall "a" Stroke -> Forall "b" Stroke -> SBool),
SymVal t, EqSymbolic (SBV t)) =>
String
-> (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
-> StepArgs (Forall "a" Stroke -> Forall "b" Stroke -> SBool) t
-> TP (Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool))
forall a t.
(Calc a, Proposition a, SymVal t, EqSymbolic (SBV t)) =>
String -> a -> StepArgs a t -> TP (Proof a)
calc String
"a | b = b | a" (\(Forall @"a" SBV Stroke
a) (Forall @"b" SBV Stroke
b) -> SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
⏐ SBV Stroke
b SBV Stroke -> SBV Stroke -> SBool
forall a. EqSymbolic a => a -> a -> SBool
.== SBV Stroke
b SBV Stroke -> SBV Stroke -> SBV Stroke
⏐ SBV Stroke
a) (StepArgs (Forall "a" Stroke -> Forall "b" Stroke -> SBool) Stroke
-> TP (Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)))
-> StepArgs
(Forall "a" Stroke -> Forall "b" Stroke -> SBool) Stroke
-> TP (Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool))
forall a b. (a -> b) -> a -> b
$
\SBV Stroke
a SBV Stroke
b -> [] [SBool]
-> TPProofRaw (SBV Stroke) -> (SBool, TPProofRaw (SBV Stroke))
forall a. [SBool] -> TPProofRaw a -> (SBool, TPProofRaw a)
⊢ SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
⏐ SBV Stroke
b SBV Stroke
-> Proof (Forall "a" Stroke -> SBool) -> Hinted (SBV Stroke)
forall a b. HintsTo a b => a -> b -> Hinted a
∵ Proof (Forall "a" Stroke -> SBool)
sh1
TPProofRaw (SBV Stroke)
-> ChainsTo (TPProofRaw (SBV Stroke))
-> ChainsTo (TPProofRaw (SBV Stroke))
forall a. ChainStep a (ChainsTo a) => a -> ChainsTo a -> ChainsTo a
≡ SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧﬧ(SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
⏐ SBV Stroke
b) SBV Stroke
-> Proof (Forall "a" Stroke -> SBool) -> Hinted (SBV Stroke)
forall a b. HintsTo a b => a -> b -> Hinted a
∵ Proof (Forall "a" Stroke -> SBool)
sh1
TPProofRaw (SBV Stroke)
-> ChainsTo (TPProofRaw (SBV Stroke))
-> ChainsTo (TPProofRaw (SBV Stroke))
forall a. ChainStep a (ChainsTo a) => a -> ChainsTo a -> ChainsTo a
≡ SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧﬧ(SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
⏐ SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧﬧ SBV Stroke
b)
SBV Stroke -> ChainsTo (SBV Stroke) -> ChainsTo (SBV Stroke)
forall a. ChainStep a (ChainsTo a) => a -> ChainsTo a -> ChainsTo a
≡ SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧﬧ(SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
⏐ (SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧ SBV Stroke
b SBV Stroke -> SBV Stroke -> SBV Stroke
⏐ SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧ SBV Stroke
b)) SBV Stroke
-> Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
-> Hinted (SBV Stroke)
forall a b. HintsTo a b => a -> b -> Hinted a
∵ Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
sh3
TPProofRaw (SBV Stroke)
-> ChainsTo (TPProofRaw (SBV Stroke))
-> ChainsTo (TPProofRaw (SBV Stroke))
forall a. ChainStep a (ChainsTo a) => a -> ChainsTo a -> ChainsTo a
≡ SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧ ((SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧﬧ SBV Stroke
b SBV Stroke -> SBV Stroke -> SBV Stroke
⏐ SBV Stroke
a) SBV Stroke -> SBV Stroke -> SBV Stroke
⏐ (SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧﬧ SBV Stroke
b SBV Stroke -> SBV Stroke -> SBV Stroke
⏐ SBV Stroke
a))
SBV Stroke -> ChainsTo (SBV Stroke) -> ChainsTo (SBV Stroke)
forall a. ChainStep a (ChainsTo a) => a -> ChainsTo a -> ChainsTo a
≡ SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧﬧ(SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧﬧ SBV Stroke
b SBV Stroke -> SBV Stroke -> SBV Stroke
⏐ SBV Stroke
a) SBV Stroke
-> Proof (Forall "a" Stroke -> SBool) -> Hinted (SBV Stroke)
forall a b. HintsTo a b => a -> b -> Hinted a
∵ Proof (Forall "a" Stroke -> SBool)
sh1
TPProofRaw (SBV Stroke)
-> ChainsTo (TPProofRaw (SBV Stroke))
-> ChainsTo (TPProofRaw (SBV Stroke))
forall a. ChainStep a (ChainsTo a) => a -> ChainsTo a -> ChainsTo a
≡ SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧﬧ SBV Stroke
b SBV Stroke -> SBV Stroke -> SBV Stroke
⏐ SBV Stroke
a SBV Stroke
-> Proof (Forall "a" Stroke -> SBool) -> Hinted (SBV Stroke)
forall a b. HintsTo a b => a -> b -> Hinted a
∵ Proof (Forall "a" Stroke -> SBool)
sh1
TPProofRaw (SBV Stroke)
-> ChainsTo (TPProofRaw (SBV Stroke))
-> ChainsTo (TPProofRaw (SBV Stroke))
forall a. ChainStep a (ChainsTo a) => a -> ChainsTo a -> ChainsTo a
≡ SBV Stroke
b SBV Stroke -> SBV Stroke -> SBV Stroke
⏐ SBV Stroke
a
SBV Stroke -> ChainsTo (SBV Stroke) -> ChainsTo (SBV Stroke)
forall a. ChainStep a (ChainsTo a) => a -> ChainsTo a -> ChainsTo a
≡ ChainsTo (SBV Stroke)
TPProofRaw (SBV Stroke)
forall a. TPProofRaw a
qed
Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
all_bot <- String
-> (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
-> StepArgs
(Forall "a" Stroke -> Forall "b" Stroke -> SBool) Stroke
-> TP (Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool))
forall t.
(Proposition (Forall "a" Stroke -> Forall "b" Stroke -> SBool),
SymVal t, EqSymbolic (SBV t)) =>
String
-> (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
-> StepArgs (Forall "a" Stroke -> Forall "b" Stroke -> SBool) t
-> TP (Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool))
forall a t.
(Calc a, Proposition a, SymVal t, EqSymbolic (SBV t)) =>
String -> a -> StepArgs a t -> TP (Proof a)
calc String
"a | a′ = b | b′" (\(Forall @"a" SBV Stroke
a) (Forall @"b" SBV Stroke
b) -> SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
⏐ SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧ SBV Stroke
a SBV Stroke -> SBV Stroke -> SBool
forall a. EqSymbolic a => a -> a -> SBool
.== SBV Stroke
b SBV Stroke -> SBV Stroke -> SBV Stroke
⏐ SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧ SBV Stroke
b) (StepArgs (Forall "a" Stroke -> Forall "b" Stroke -> SBool) Stroke
-> TP (Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)))
-> StepArgs
(Forall "a" Stroke -> Forall "b" Stroke -> SBool) Stroke
-> TP (Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool))
forall a b. (a -> b) -> a -> b
$
\SBV Stroke
a SBV Stroke
b -> [] [SBool]
-> TPProofRaw (SBV Stroke) -> (SBool, TPProofRaw (SBV Stroke))
forall a. [SBool] -> TPProofRaw a -> (SBool, TPProofRaw a)
⊢ SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
⏐ SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧ SBV Stroke
a SBV Stroke
-> Proof (Forall "a" Stroke -> SBool) -> Hinted (SBV Stroke)
forall a b. HintsTo a b => a -> b -> Hinted a
∵ Proof (Forall "a" Stroke -> SBool)
sh1
TPProofRaw (SBV Stroke)
-> ChainsTo (TPProofRaw (SBV Stroke))
-> ChainsTo (TPProofRaw (SBV Stroke))
forall a. ChainStep a (ChainsTo a) => a -> ChainsTo a -> ChainsTo a
≡ SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧﬧ(SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
⏐ SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧ SBV Stroke
a) SBV Stroke
-> Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
-> Hinted (SBV Stroke)
forall a b. HintsTo a b => a -> b -> Hinted a
∵ Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
sh2
TPProofRaw (SBV Stroke)
-> ChainsTo (TPProofRaw (SBV Stroke))
-> ChainsTo (TPProofRaw (SBV Stroke))
forall a. ChainStep a (ChainsTo a) => a -> ChainsTo a -> ChainsTo a
≡ SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧ((SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
⏐ SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧ SBV Stroke
a) SBV Stroke -> SBV Stroke -> SBV Stroke
⏐ (SBV Stroke
b SBV Stroke -> SBV Stroke -> SBV Stroke
⏐ SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧ SBV Stroke
b)) SBV Stroke
-> Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
-> Hinted (SBV Stroke)
forall a b. HintsTo a b => a -> b -> Hinted a
∵ Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
commut
TPProofRaw (SBV Stroke)
-> ChainsTo (TPProofRaw (SBV Stroke))
-> ChainsTo (TPProofRaw (SBV Stroke))
forall a. ChainStep a (ChainsTo a) => a -> ChainsTo a -> ChainsTo a
≡ SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧ((SBV Stroke
b SBV Stroke -> SBV Stroke -> SBV Stroke
⏐ SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧ SBV Stroke
b) SBV Stroke -> SBV Stroke -> SBV Stroke
⏐ (SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
⏐ SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧ SBV Stroke
a)) SBV Stroke
-> Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
-> Hinted (SBV Stroke)
forall a b. HintsTo a b => a -> b -> Hinted a
∵ Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
sh2
TPProofRaw (SBV Stroke)
-> ChainsTo (TPProofRaw (SBV Stroke))
-> ChainsTo (TPProofRaw (SBV Stroke))
forall a. ChainStep a (ChainsTo a) => a -> ChainsTo a -> ChainsTo a
≡ SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧﬧ (SBV Stroke
b SBV Stroke -> SBV Stroke -> SBV Stroke
⏐ SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧ SBV Stroke
b) SBV Stroke
-> Proof (Forall "a" Stroke -> SBool) -> Hinted (SBV Stroke)
forall a b. HintsTo a b => a -> b -> Hinted a
∵ Proof (Forall "a" Stroke -> SBool)
sh1
TPProofRaw (SBV Stroke)
-> ChainsTo (TPProofRaw (SBV Stroke))
-> ChainsTo (TPProofRaw (SBV Stroke))
forall a. ChainStep a (ChainsTo a) => a -> ChainsTo a -> ChainsTo a
≡ SBV Stroke
b SBV Stroke -> SBV Stroke -> SBV Stroke
⏐ SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧ SBV Stroke
b
SBV Stroke -> ChainsTo (SBV Stroke) -> ChainsTo (SBV Stroke)
forall a. ChainStep a (ChainsTo a) => a -> ChainsTo a -> ChainsTo a
≡ ChainsTo (SBV Stroke)
TPProofRaw (SBV Stroke)
forall a. TPProofRaw a
qed
Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
commut1 <- String
-> (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
-> [ProofObj]
-> TP (Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool))
forall a.
Proposition a =>
String -> a -> [ProofObj] -> TP (Proof a)
lemma String
"a ⊔ b = b ⊔ a" (\(Forall @"a" (SBV Stroke
a :: SStroke)) (Forall @"b" SBV Stroke
b) -> SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ SBV Stroke
b SBV Stroke -> SBV Stroke -> SBool
forall a. EqSymbolic a => a -> a -> SBool
.== SBV Stroke
b SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ SBV Stroke
a) [Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool) -> ProofObj
forall a. Proof a -> ProofObj
p Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
commut]
Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
commut2 <- String
-> (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
-> [ProofObj]
-> TP (Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool))
forall a.
Proposition a =>
String -> a -> [ProofObj] -> TP (Proof a)
lemma String
"a ⊓ b = b ⊓ a" (\(Forall @"a" (SBV Stroke
a :: SStroke)) (Forall @"b" SBV Stroke
b) -> SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ SBV Stroke
b SBV Stroke -> SBV Stroke -> SBool
forall a. EqSymbolic a => a -> a -> SBool
.== SBV Stroke
b SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ SBV Stroke
a) [Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool) -> ProofObj
forall a. Proof a -> ProofObj
p Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
commut]
Proof (Forall "a" Stroke -> SBool)
ident1 <- String
-> (Forall "a" Stroke -> SBool)
-> [ProofObj]
-> TP (Proof (Forall "a" Stroke -> SBool))
forall a.
Proposition a =>
String -> a -> [ProofObj] -> TP (Proof a)
lemma String
"a ⊔ ⲳ = a" (\(Forall @"a" (SBV Stroke
a :: SStroke)) -> SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ SBV Stroke
forall α. BooleanAlgebra α => α
ⲳ SBV Stroke -> SBV Stroke -> SBool
forall a. EqSymbolic a => a -> a -> SBool
.== SBV Stroke
a) [Proof (Forall "a" Stroke -> SBool) -> ProofObj
forall a. Proof a -> ProofObj
p Proof (Forall "a" Stroke -> SBool)
sh1, Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool) -> ProofObj
forall a. Proof a -> ProofObj
p Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
sh2]
Proof (Forall "a" Stroke -> SBool)
ident2 <- String
-> (Forall "a" Stroke -> SBool)
-> [ProofObj]
-> TP (Proof (Forall "a" Stroke -> SBool))
forall a.
Proposition a =>
String -> a -> [ProofObj] -> TP (Proof a)
lemma String
"a ⊓ т = a" (\(Forall @"a" (SBV Stroke
a :: SStroke)) -> SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ SBV Stroke
forall α. BooleanAlgebra α => α
т SBV Stroke -> SBV Stroke -> SBool
forall a. EqSymbolic a => a -> a -> SBool
.== SBV Stroke
a) [Proof (Forall "a" Stroke -> SBool) -> ProofObj
forall a. Proof a -> ProofObj
p Proof (Forall "a" Stroke -> SBool)
sh1, Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool) -> ProofObj
forall a. Proof a -> ProofObj
p Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
sh2]
Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
distrib1 <- String
-> (Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
-> [ProofObj]
-> TP
(Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool))
forall a.
Proposition a =>
String -> a -> [ProofObj] -> TP (Proof a)
lemma String
"a ⊔ (b ⊓ c) = (a ⊔ b) ⊓ (a ⊔ c)"
(\(Forall @"a" (SBV Stroke
a :: SStroke)) (Forall @"b" SBV Stroke
b) (Forall @"c" SBV Stroke
c) -> SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ (SBV Stroke
b SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ SBV Stroke
c) SBV Stroke -> SBV Stroke -> SBool
forall a. EqSymbolic a => a -> a -> SBool
.== (SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ SBV Stroke
b) SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ (SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ SBV Stroke
c))
[Proof (Forall "a" Stroke -> SBool) -> ProofObj
forall a. Proof a -> ProofObj
p Proof (Forall "a" Stroke -> SBool)
sh1, Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
-> ProofObj
forall a. Proof a -> ProofObj
p Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
sh3, Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool) -> ProofObj
forall a. Proof a -> ProofObj
p Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
commut]
Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
distrib2 <- String
-> (Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
-> [ProofObj]
-> TP
(Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool))
forall a.
Proposition a =>
String -> a -> [ProofObj] -> TP (Proof a)
lemma String
"a ⊓ (b ⊔ c) = (a ⊓ b) ⊔ (a ⊓ c)"
(\(Forall @"a" (SBV Stroke
a :: SStroke)) (Forall @"b" SBV Stroke
b) (Forall @"c" SBV Stroke
c) -> SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ (SBV Stroke
b SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ SBV Stroke
c) SBV Stroke -> SBV Stroke -> SBool
forall a. EqSymbolic a => a -> a -> SBool
.== (SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ SBV Stroke
b) SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ (SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ SBV Stroke
c))
[Proof (Forall "a" Stroke -> SBool) -> ProofObj
forall a. Proof a -> ProofObj
p Proof (Forall "a" Stroke -> SBool)
sh1, Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
-> ProofObj
forall a. Proof a -> ProofObj
p Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
sh3, Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool) -> ProofObj
forall a. Proof a -> ProofObj
p Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
commut]
Proof (Forall "a" Stroke -> SBool)
compl1 <- String
-> (Forall "a" Stroke -> SBool)
-> [ProofObj]
-> TP (Proof (Forall "a" Stroke -> SBool))
forall a.
Proposition a =>
String -> a -> [ProofObj] -> TP (Proof a)
lemma String
"a ⊔ aᶜ = т" (\(Forall @"a" (SBV Stroke
a :: SStroke)) -> SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧ SBV Stroke
a SBV Stroke -> SBV Stroke -> SBool
forall a. EqSymbolic a => a -> a -> SBool
.== SBV Stroke
forall α. BooleanAlgebra α => α
т) [Proof (Forall "a" Stroke -> SBool) -> ProofObj
forall a. Proof a -> ProofObj
p Proof (Forall "a" Stroke -> SBool)
sh1, Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool) -> ProofObj
forall a. Proof a -> ProofObj
p Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
sh2, Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
-> ProofObj
forall a. Proof a -> ProofObj
p Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
sh3, Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool) -> ProofObj
forall a. Proof a -> ProofObj
p Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
all_bot]
Proof (Forall "a" Stroke -> SBool)
compl2 <- String
-> (Forall "a" Stroke -> SBool)
-> [ProofObj]
-> TP (Proof (Forall "a" Stroke -> SBool))
forall a.
Proposition a =>
String -> a -> [ProofObj] -> TP (Proof a)
lemma String
"a ⊓ aᶜ = ⲳ" (\(Forall @"a" (SBV Stroke
a :: SStroke)) -> SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧ SBV Stroke
a SBV Stroke -> SBV Stroke -> SBool
forall a. EqSymbolic a => a -> a -> SBool
.== SBV Stroke
forall α. BooleanAlgebra α => α
ⲳ) [Proof (Forall "a" Stroke -> SBool) -> ProofObj
forall a. Proof a -> ProofObj
p Proof (Forall "a" Stroke -> SBool)
sh1, Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool) -> ProofObj
forall a. Proof a -> ProofObj
p Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
commut, Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool) -> ProofObj
forall a. Proof a -> ProofObj
p Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
all_bot]
Proof (Forall "a" Stroke -> SBool)
bound1 <- String
-> (Forall "a" Stroke -> SBool)
-> StepArgs (Forall "a" Stroke -> SBool) Stroke
-> TP (Proof (Forall "a" Stroke -> SBool))
forall t.
(Proposition (Forall "a" Stroke -> SBool), SymVal t,
EqSymbolic (SBV t)) =>
String
-> (Forall "a" Stroke -> SBool)
-> StepArgs (Forall "a" Stroke -> SBool) t
-> TP (Proof (Forall "a" Stroke -> SBool))
forall a t.
(Calc a, Proposition a, SymVal t, EqSymbolic (SBV t)) =>
String -> a -> StepArgs a t -> TP (Proof a)
calc String
"a ⊔ т = т" (\(Forall @"a" SBV Stroke
a) -> SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ SBV Stroke
forall α. BooleanAlgebra α => α
т SBV Stroke -> SBV Stroke -> SBool
forall a. EqSymbolic a => a -> a -> SBool
.== SBV Stroke
forall α. BooleanAlgebra α => α
т) (StepArgs (Forall "a" Stroke -> SBool) Stroke
-> TP (Proof (Forall "a" Stroke -> SBool)))
-> StepArgs (Forall "a" Stroke -> SBool) Stroke
-> TP (Proof (Forall "a" Stroke -> SBool))
forall a b. (a -> b) -> a -> b
$
\SBV Stroke
a -> [] [SBool]
-> TPProofRaw (SBV Stroke) -> (SBool, TPProofRaw (SBV Stroke))
forall a. [SBool] -> TPProofRaw a -> (SBool, TPProofRaw a)
⊢ SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ SBV Stroke
forall α. BooleanAlgebra α => α
т SBV Stroke
-> Proof (Forall "a" Stroke -> SBool) -> Hinted (SBV Stroke)
forall a b. HintsTo a b => a -> b -> Hinted a
∵ Proof (Forall "a" Stroke -> SBool)
ident2
Hinted (SBV Stroke)
-> ChainsTo (Hinted (SBV Stroke)) -> ChainsTo (Hinted (SBV Stroke))
forall a. ChainStep a (ChainsTo a) => a -> ChainsTo a -> ChainsTo a
≡ (SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ SBV Stroke
forall α. BooleanAlgebra α => α
т) SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ SBV Stroke
forall α. BooleanAlgebra α => α
т SBV Stroke
-> Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
-> Hinted (SBV Stroke)
forall a b. HintsTo a b => a -> b -> Hinted a
∵ Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
commut2
Hinted (SBV Stroke)
-> ChainsTo (Hinted (SBV Stroke)) -> ChainsTo (Hinted (SBV Stroke))
forall a. ChainStep a (ChainsTo a) => a -> ChainsTo a -> ChainsTo a
≡ SBV Stroke
forall α. BooleanAlgebra α => α
т SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ (SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ SBV Stroke
forall α. BooleanAlgebra α => α
т) SBV Stroke
-> Proof (Forall "a" Stroke -> SBool) -> Hinted (SBV Stroke)
forall a b. HintsTo a b => a -> b -> Hinted a
∵ Proof (Forall "a" Stroke -> SBool)
compl1
Hinted (SBV Stroke)
-> ChainsTo (Hinted (SBV Stroke)) -> ChainsTo (Hinted (SBV Stroke))
forall a. ChainStep a (ChainsTo a) => a -> ChainsTo a -> ChainsTo a
≡ (SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧ SBV Stroke
a) SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ (SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ SBV Stroke
forall α. BooleanAlgebra α => α
т) SBV Stroke
-> Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
-> Hinted (SBV Stroke)
forall a b. HintsTo a b => a -> b -> Hinted a
∵ Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
distrib1
Hinted (SBV Stroke)
-> ChainsTo (Hinted (SBV Stroke)) -> ChainsTo (Hinted (SBV Stroke))
forall a. ChainStep a (ChainsTo a) => a -> ChainsTo a -> ChainsTo a
≡ SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ (SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧ SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ SBV Stroke
forall α. BooleanAlgebra α => α
т) SBV Stroke
-> Proof (Forall "a" Stroke -> SBool) -> Hinted (SBV Stroke)
forall a b. HintsTo a b => a -> b -> Hinted a
∵ Proof (Forall "a" Stroke -> SBool)
ident2
Hinted (SBV Stroke)
-> ChainsTo (Hinted (SBV Stroke)) -> ChainsTo (Hinted (SBV Stroke))
forall a. ChainStep a (ChainsTo a) => a -> ChainsTo a -> ChainsTo a
≡ SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧ SBV Stroke
a SBV Stroke
-> Proof (Forall "a" Stroke -> SBool) -> Hinted (SBV Stroke)
forall a b. HintsTo a b => a -> b -> Hinted a
∵ Proof (Forall "a" Stroke -> SBool)
compl1
Hinted (SBV Stroke)
-> ChainsTo (Hinted (SBV Stroke)) -> ChainsTo (Hinted (SBV Stroke))
forall a. ChainStep a (ChainsTo a) => a -> ChainsTo a -> ChainsTo a
≡ (SBV Stroke
forall α. BooleanAlgebra α => α
т :: SStroke)
SBV Stroke -> ChainsTo (SBV Stroke) -> ChainsTo (SBV Stroke)
forall a. ChainStep a (ChainsTo a) => a -> ChainsTo a -> ChainsTo a
≡ ChainsTo (SBV Stroke)
TPProofRaw (SBV Stroke)
forall a. TPProofRaw a
qed
Proof (Forall "a" Stroke -> SBool)
bound2 <- String
-> (Forall "a" Stroke -> SBool)
-> StepArgs (Forall "a" Stroke -> SBool) Stroke
-> TP (Proof (Forall "a" Stroke -> SBool))
forall t.
(Proposition (Forall "a" Stroke -> SBool), SymVal t,
EqSymbolic (SBV t)) =>
String
-> (Forall "a" Stroke -> SBool)
-> StepArgs (Forall "a" Stroke -> SBool) t
-> TP (Proof (Forall "a" Stroke -> SBool))
forall a t.
(Calc a, Proposition a, SymVal t, EqSymbolic (SBV t)) =>
String -> a -> StepArgs a t -> TP (Proof a)
calc String
"a ⊓ ⲳ = ⲳ" (\(Forall @"a" SBV Stroke
a) -> SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ SBV Stroke
forall α. BooleanAlgebra α => α
ⲳ SBV Stroke -> SBV Stroke -> SBool
forall a. EqSymbolic a => a -> a -> SBool
.== SBV Stroke
forall α. BooleanAlgebra α => α
ⲳ) (StepArgs (Forall "a" Stroke -> SBool) Stroke
-> TP (Proof (Forall "a" Stroke -> SBool)))
-> StepArgs (Forall "a" Stroke -> SBool) Stroke
-> TP (Proof (Forall "a" Stroke -> SBool))
forall a b. (a -> b) -> a -> b
$
\SBV Stroke
a -> [] [SBool]
-> TPProofRaw (SBV Stroke) -> (SBool, TPProofRaw (SBV Stroke))
forall a. [SBool] -> TPProofRaw a -> (SBool, TPProofRaw a)
⊢ SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ SBV Stroke
forall α. BooleanAlgebra α => α
ⲳ SBV Stroke
-> Proof (Forall "a" Stroke -> SBool) -> Hinted (SBV Stroke)
forall a b. HintsTo a b => a -> b -> Hinted a
∵ Proof (Forall "a" Stroke -> SBool)
ident1
Hinted (SBV Stroke)
-> ChainsTo (Hinted (SBV Stroke)) -> ChainsTo (Hinted (SBV Stroke))
forall a. ChainStep a (ChainsTo a) => a -> ChainsTo a -> ChainsTo a
≡ (SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ SBV Stroke
forall α. BooleanAlgebra α => α
ⲳ) SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ SBV Stroke
forall α. BooleanAlgebra α => α
ⲳ SBV Stroke
-> Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
-> Hinted (SBV Stroke)
forall a b. HintsTo a b => a -> b -> Hinted a
∵ Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
commut1
Hinted (SBV Stroke)
-> ChainsTo (Hinted (SBV Stroke)) -> ChainsTo (Hinted (SBV Stroke))
forall a. ChainStep a (ChainsTo a) => a -> ChainsTo a -> ChainsTo a
≡ SBV Stroke
forall α. BooleanAlgebra α => α
ⲳ SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ (SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ SBV Stroke
forall α. BooleanAlgebra α => α
ⲳ) SBV Stroke
-> Proof (Forall "a" Stroke -> SBool) -> Hinted (SBV Stroke)
forall a b. HintsTo a b => a -> b -> Hinted a
∵ Proof (Forall "a" Stroke -> SBool)
compl2
Hinted (SBV Stroke)
-> ChainsTo (Hinted (SBV Stroke)) -> ChainsTo (Hinted (SBV Stroke))
forall a. ChainStep a (ChainsTo a) => a -> ChainsTo a -> ChainsTo a
≡ (SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧ SBV Stroke
a) SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ (SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ SBV Stroke
forall α. BooleanAlgebra α => α
ⲳ) SBV Stroke
-> Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
-> Hinted (SBV Stroke)
forall a b. HintsTo a b => a -> b -> Hinted a
∵ Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
distrib2
Hinted (SBV Stroke)
-> ChainsTo (Hinted (SBV Stroke)) -> ChainsTo (Hinted (SBV Stroke))
forall a. ChainStep a (ChainsTo a) => a -> ChainsTo a -> ChainsTo a
≡ SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ (SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧ SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ SBV Stroke
forall α. BooleanAlgebra α => α
ⲳ) SBV Stroke
-> Proof (Forall "a" Stroke -> SBool) -> Hinted (SBV Stroke)
forall a b. HintsTo a b => a -> b -> Hinted a
∵ Proof (Forall "a" Stroke -> SBool)
ident1
Hinted (SBV Stroke)
-> ChainsTo (Hinted (SBV Stroke)) -> ChainsTo (Hinted (SBV Stroke))
forall a. ChainStep a (ChainsTo a) => a -> ChainsTo a -> ChainsTo a
≡ SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧ SBV Stroke
a SBV Stroke
-> Proof (Forall "a" Stroke -> SBool) -> Hinted (SBV Stroke)
forall a b. HintsTo a b => a -> b -> Hinted a
∵ Proof (Forall "a" Stroke -> SBool)
compl2
Hinted (SBV Stroke)
-> ChainsTo (Hinted (SBV Stroke)) -> ChainsTo (Hinted (SBV Stroke))
forall a. ChainStep a (ChainsTo a) => a -> ChainsTo a -> ChainsTo a
≡ (SBV Stroke
forall α. BooleanAlgebra α => α
ⲳ :: SStroke)
SBV Stroke -> ChainsTo (SBV Stroke) -> ChainsTo (SBV Stroke)
forall a. ChainStep a (ChainsTo a) => a -> ChainsTo a -> ChainsTo a
≡ ChainsTo (SBV Stroke)
TPProofRaw (SBV Stroke)
forall a. TPProofRaw a
qed
Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
absorb1 <- String
-> (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
-> StepArgs
(Forall "a" Stroke -> Forall "b" Stroke -> SBool) Stroke
-> TP (Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool))
forall t.
(Proposition (Forall "a" Stroke -> Forall "b" Stroke -> SBool),
SymVal t, EqSymbolic (SBV t)) =>
String
-> (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
-> StepArgs (Forall "a" Stroke -> Forall "b" Stroke -> SBool) t
-> TP (Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool))
forall a t.
(Calc a, Proposition a, SymVal t, EqSymbolic (SBV t)) =>
String -> a -> StepArgs a t -> TP (Proof a)
calc String
"a ⊔ (a ⊓ b) = a" (\(Forall @"a" (SBV Stroke
a :: SStroke)) (Forall @"b" SBV Stroke
b) -> SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ (SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ SBV Stroke
b) SBV Stroke -> SBV Stroke -> SBool
forall a. EqSymbolic a => a -> a -> SBool
.== SBV Stroke
a) (StepArgs (Forall "a" Stroke -> Forall "b" Stroke -> SBool) Stroke
-> TP (Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)))
-> StepArgs
(Forall "a" Stroke -> Forall "b" Stroke -> SBool) Stroke
-> TP (Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool))
forall a b. (a -> b) -> a -> b
$
\SBV Stroke
a SBV Stroke
b -> [] [SBool]
-> TPProofRaw (SBV Stroke) -> (SBool, TPProofRaw (SBV Stroke))
forall a. [SBool] -> TPProofRaw a -> (SBool, TPProofRaw a)
⊢ SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ (SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ SBV Stroke
b) SBV Stroke
-> Proof (Forall "a" Stroke -> SBool) -> Hinted (SBV Stroke)
forall a b. HintsTo a b => a -> b -> Hinted a
∵ Proof (Forall "a" Stroke -> SBool)
ident2
Hinted (SBV Stroke)
-> ChainsTo (Hinted (SBV Stroke)) -> ChainsTo (Hinted (SBV Stroke))
forall a. ChainStep a (ChainsTo a) => a -> ChainsTo a -> ChainsTo a
≡ (SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ SBV Stroke
forall α. BooleanAlgebra α => α
т) SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ (SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ SBV Stroke
b) SBV Stroke
-> Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
-> Hinted (SBV Stroke)
forall a b. HintsTo a b => a -> b -> Hinted a
∵ Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
distrib2
Hinted (SBV Stroke)
-> ChainsTo (Hinted (SBV Stroke)) -> ChainsTo (Hinted (SBV Stroke))
forall a. ChainStep a (ChainsTo a) => a -> ChainsTo a -> ChainsTo a
≡ SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ (SBV Stroke
forall α. BooleanAlgebra α => α
т SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ SBV Stroke
b) SBV Stroke
-> Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
-> Hinted (SBV Stroke)
forall a b. HintsTo a b => a -> b -> Hinted a
∵ Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
commut1
Hinted (SBV Stroke)
-> ChainsTo (Hinted (SBV Stroke)) -> ChainsTo (Hinted (SBV Stroke))
forall a. ChainStep a (ChainsTo a) => a -> ChainsTo a -> ChainsTo a
≡ SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ (SBV Stroke
b SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ SBV Stroke
forall α. BooleanAlgebra α => α
т) SBV Stroke
-> Proof (Forall "a" Stroke -> SBool) -> Hinted (SBV Stroke)
forall a b. HintsTo a b => a -> b -> Hinted a
∵ Proof (Forall "a" Stroke -> SBool)
bound1
Hinted (SBV Stroke)
-> ChainsTo (Hinted (SBV Stroke)) -> ChainsTo (Hinted (SBV Stroke))
forall a. ChainStep a (ChainsTo a) => a -> ChainsTo a -> ChainsTo a
≡ SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ SBV Stroke
forall α. BooleanAlgebra α => α
т SBV Stroke
-> Proof (Forall "a" Stroke -> SBool) -> Hinted (SBV Stroke)
forall a b. HintsTo a b => a -> b -> Hinted a
∵ Proof (Forall "a" Stroke -> SBool)
ident2
Hinted (SBV Stroke)
-> ChainsTo (Hinted (SBV Stroke)) -> ChainsTo (Hinted (SBV Stroke))
forall a. ChainStep a (ChainsTo a) => a -> ChainsTo a -> ChainsTo a
≡ SBV Stroke
a
SBV Stroke -> ChainsTo (SBV Stroke) -> ChainsTo (SBV Stroke)
forall a. ChainStep a (ChainsTo a) => a -> ChainsTo a -> ChainsTo a
≡ ChainsTo (SBV Stroke)
TPProofRaw (SBV Stroke)
forall a. TPProofRaw a
qed
Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
absorb2 <- String
-> (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
-> StepArgs
(Forall "a" Stroke -> Forall "b" Stroke -> SBool) Stroke
-> TP (Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool))
forall t.
(Proposition (Forall "a" Stroke -> Forall "b" Stroke -> SBool),
SymVal t, EqSymbolic (SBV t)) =>
String
-> (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
-> StepArgs (Forall "a" Stroke -> Forall "b" Stroke -> SBool) t
-> TP (Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool))
forall a t.
(Calc a, Proposition a, SymVal t, EqSymbolic (SBV t)) =>
String -> a -> StepArgs a t -> TP (Proof a)
calc String
"a ⊓ (a ⊔ b) = a" (\(Forall @"a" (SBV Stroke
a :: SStroke)) (Forall @"b" SBV Stroke
b) -> SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ (SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ SBV Stroke
b) SBV Stroke -> SBV Stroke -> SBool
forall a. EqSymbolic a => a -> a -> SBool
.== SBV Stroke
a) (StepArgs (Forall "a" Stroke -> Forall "b" Stroke -> SBool) Stroke
-> TP (Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)))
-> StepArgs
(Forall "a" Stroke -> Forall "b" Stroke -> SBool) Stroke
-> TP (Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool))
forall a b. (a -> b) -> a -> b
$
\SBV Stroke
a SBV Stroke
b -> [] [SBool]
-> TPProofRaw (SBV Stroke) -> (SBool, TPProofRaw (SBV Stroke))
forall a. [SBool] -> TPProofRaw a -> (SBool, TPProofRaw a)
⊢ SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ (SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ SBV Stroke
b) SBV Stroke
-> Proof (Forall "a" Stroke -> SBool) -> Hinted (SBV Stroke)
forall a b. HintsTo a b => a -> b -> Hinted a
∵ Proof (Forall "a" Stroke -> SBool)
ident1
Hinted (SBV Stroke)
-> ChainsTo (Hinted (SBV Stroke)) -> ChainsTo (Hinted (SBV Stroke))
forall a. ChainStep a (ChainsTo a) => a -> ChainsTo a -> ChainsTo a
≡ (SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ SBV Stroke
forall α. BooleanAlgebra α => α
ⲳ) SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ (SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ SBV Stroke
b) SBV Stroke
-> Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
-> Hinted (SBV Stroke)
forall a b. HintsTo a b => a -> b -> Hinted a
∵ Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
distrib1
Hinted (SBV Stroke)
-> ChainsTo (Hinted (SBV Stroke)) -> ChainsTo (Hinted (SBV Stroke))
forall a. ChainStep a (ChainsTo a) => a -> ChainsTo a -> ChainsTo a
≡ SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ (SBV Stroke
forall α. BooleanAlgebra α => α
ⲳ SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ SBV Stroke
b) SBV Stroke
-> Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
-> Hinted (SBV Stroke)
forall a b. HintsTo a b => a -> b -> Hinted a
∵ Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
commut2
Hinted (SBV Stroke)
-> ChainsTo (Hinted (SBV Stroke)) -> ChainsTo (Hinted (SBV Stroke))
forall a. ChainStep a (ChainsTo a) => a -> ChainsTo a -> ChainsTo a
≡ SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ (SBV Stroke
b SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ SBV Stroke
forall α. BooleanAlgebra α => α
ⲳ) SBV Stroke
-> Proof (Forall "a" Stroke -> SBool) -> Hinted (SBV Stroke)
forall a b. HintsTo a b => a -> b -> Hinted a
∵ Proof (Forall "a" Stroke -> SBool)
bound2
Hinted (SBV Stroke)
-> ChainsTo (Hinted (SBV Stroke)) -> ChainsTo (Hinted (SBV Stroke))
forall a. ChainStep a (ChainsTo a) => a -> ChainsTo a -> ChainsTo a
≡ SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ SBV Stroke
forall α. BooleanAlgebra α => α
ⲳ SBV Stroke
-> Proof (Forall "a" Stroke -> SBool) -> Hinted (SBV Stroke)
forall a b. HintsTo a b => a -> b -> Hinted a
∵ Proof (Forall "a" Stroke -> SBool)
ident1
Hinted (SBV Stroke)
-> ChainsTo (Hinted (SBV Stroke)) -> ChainsTo (Hinted (SBV Stroke))
forall a. ChainStep a (ChainsTo a) => a -> ChainsTo a -> ChainsTo a
≡ SBV Stroke
a
SBV Stroke -> ChainsTo (SBV Stroke) -> ChainsTo (SBV Stroke)
forall a. ChainStep a (ChainsTo a) => a -> ChainsTo a -> ChainsTo a
≡ ChainsTo (SBV Stroke)
TPProofRaw (SBV Stroke)
forall a. TPProofRaw a
qed
Proof (Forall "a" Stroke -> SBool)
idemp2 <- String
-> (Forall "a" Stroke -> SBool)
-> StepArgs (Forall "a" Stroke -> SBool) Stroke
-> TP (Proof (Forall "a" Stroke -> SBool))
forall t.
(Proposition (Forall "a" Stroke -> SBool), SymVal t,
EqSymbolic (SBV t)) =>
String
-> (Forall "a" Stroke -> SBool)
-> StepArgs (Forall "a" Stroke -> SBool) t
-> TP (Proof (Forall "a" Stroke -> SBool))
forall a t.
(Calc a, Proposition a, SymVal t, EqSymbolic (SBV t)) =>
String -> a -> StepArgs a t -> TP (Proof a)
calc String
"a ⊓ a = a" (\(Forall @"a" (SBV Stroke
a :: SStroke)) -> SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ SBV Stroke
a SBV Stroke -> SBV Stroke -> SBool
forall a. EqSymbolic a => a -> a -> SBool
.== SBV Stroke
a) (StepArgs (Forall "a" Stroke -> SBool) Stroke
-> TP (Proof (Forall "a" Stroke -> SBool)))
-> StepArgs (Forall "a" Stroke -> SBool) Stroke
-> TP (Proof (Forall "a" Stroke -> SBool))
forall a b. (a -> b) -> a -> b
$
\SBV Stroke
a -> [] [SBool]
-> TPProofRaw (SBV Stroke) -> (SBool, TPProofRaw (SBV Stroke))
forall a. [SBool] -> TPProofRaw a -> (SBool, TPProofRaw a)
⊢ SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ SBV Stroke
a SBV Stroke
-> Proof (Forall "a" Stroke -> SBool) -> Hinted (SBV Stroke)
forall a b. HintsTo a b => a -> b -> Hinted a
∵ Proof (Forall "a" Stroke -> SBool)
ident1
Hinted (SBV Stroke)
-> ChainsTo (Hinted (SBV Stroke)) -> ChainsTo (Hinted (SBV Stroke))
forall a. ChainStep a (ChainsTo a) => a -> ChainsTo a -> ChainsTo a
≡ SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ (SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ SBV Stroke
forall α. BooleanAlgebra α => α
ⲳ) SBV Stroke
-> Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
-> Hinted (SBV Stroke)
forall a b. HintsTo a b => a -> b -> Hinted a
∵ Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
absorb2
Hinted (SBV Stroke)
-> ChainsTo (Hinted (SBV Stroke)) -> ChainsTo (Hinted (SBV Stroke))
forall a. ChainStep a (ChainsTo a) => a -> ChainsTo a -> ChainsTo a
≡ SBV Stroke
a
SBV Stroke -> ChainsTo (SBV Stroke) -> ChainsTo (SBV Stroke)
forall a. ChainStep a (ChainsTo a) => a -> ChainsTo a -> ChainsTo a
≡ ChainsTo (SBV Stroke)
TPProofRaw (SBV Stroke)
forall a. TPProofRaw a
qed
Proof (Forall "a" Stroke -> Forall "a'" Stroke -> SBool)
inv <- String
-> (Forall "a" Stroke -> Forall "a'" Stroke -> SBool)
-> StepArgs
(Forall "a" Stroke -> Forall "a'" Stroke -> SBool) Stroke
-> TP (Proof (Forall "a" Stroke -> Forall "a'" Stroke -> SBool))
forall t.
(Proposition (Forall "a" Stroke -> Forall "a'" Stroke -> SBool),
SymVal t, EqSymbolic (SBV t)) =>
String
-> (Forall "a" Stroke -> Forall "a'" Stroke -> SBool)
-> StepArgs (Forall "a" Stroke -> Forall "a'" Stroke -> SBool) t
-> TP (Proof (Forall "a" Stroke -> Forall "a'" Stroke -> SBool))
forall a t.
(Calc a, Proposition a, SymVal t, EqSymbolic (SBV t)) =>
String -> a -> StepArgs a t -> TP (Proof a)
calc String
"a ⊔ a' = т → a ⊓ a' = ⲳ → a' = aᶜ"
(\(Forall @"a" (SBV Stroke
a :: SStroke)) (Forall @"a'" SBV Stroke
a') -> SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ SBV Stroke
a' SBV Stroke -> SBV Stroke -> SBool
forall a. EqSymbolic a => a -> a -> SBool
.== SBV Stroke
forall α. BooleanAlgebra α => α
т SBool -> SBool -> SBool
.=> SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ SBV Stroke
a' SBV Stroke -> SBV Stroke -> SBool
forall a. EqSymbolic a => a -> a -> SBool
.== SBV Stroke
forall α. BooleanAlgebra α => α
ⲳ SBool -> SBool -> SBool
.=> SBV Stroke
a' SBV Stroke -> SBV Stroke -> SBool
forall a. EqSymbolic a => a -> a -> SBool
.== SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧ SBV Stroke
a) (StepArgs (Forall "a" Stroke -> Forall "a'" Stroke -> SBool) Stroke
-> TP (Proof (Forall "a" Stroke -> Forall "a'" Stroke -> SBool)))
-> StepArgs
(Forall "a" Stroke -> Forall "a'" Stroke -> SBool) Stroke
-> TP (Proof (Forall "a" Stroke -> Forall "a'" Stroke -> SBool))
forall a b. (a -> b) -> a -> b
$
\SBV Stroke
a SBV Stroke
a' -> [SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ SBV Stroke
a' SBV Stroke -> SBV Stroke -> SBool
forall a. EqSymbolic a => a -> a -> SBool
.== SBV Stroke
forall α. BooleanAlgebra α => α
т, SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ SBV Stroke
a' SBV Stroke -> SBV Stroke -> SBool
forall a. EqSymbolic a => a -> a -> SBool
.== SBV Stroke
forall α. BooleanAlgebra α => α
ⲳ] [SBool]
-> TPProofRaw (SBV Stroke) -> (SBool, TPProofRaw (SBV Stroke))
forall a. [SBool] -> TPProofRaw a -> (SBool, TPProofRaw a)
⊢ SBV Stroke
a' SBV Stroke
-> Proof (Forall "a" Stroke -> SBool) -> Hinted (SBV Stroke)
forall a b. HintsTo a b => a -> b -> Hinted a
∵ Proof (Forall "a" Stroke -> SBool)
ident2
Hinted (SBV Stroke)
-> ChainsTo (Hinted (SBV Stroke)) -> ChainsTo (Hinted (SBV Stroke))
forall a. ChainStep a (ChainsTo a) => a -> ChainsTo a -> ChainsTo a
≡ SBV Stroke
a' SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ SBV Stroke
forall α. BooleanAlgebra α => α
т SBV Stroke
-> Proof (Forall "a" Stroke -> SBool) -> Hinted (SBV Stroke)
forall a b. HintsTo a b => a -> b -> Hinted a
∵ Proof (Forall "a" Stroke -> SBool)
compl1
Hinted (SBV Stroke)
-> ChainsTo (Hinted (SBV Stroke)) -> ChainsTo (Hinted (SBV Stroke))
forall a. ChainStep a (ChainsTo a) => a -> ChainsTo a -> ChainsTo a
≡ SBV Stroke
a' SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ (SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧ SBV Stroke
a) SBV Stroke
-> Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
-> Hinted (SBV Stroke)
forall a b. HintsTo a b => a -> b -> Hinted a
∵ Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
distrib2
Hinted (SBV Stroke)
-> ChainsTo (Hinted (SBV Stroke)) -> ChainsTo (Hinted (SBV Stroke))
forall a. ChainStep a (ChainsTo a) => a -> ChainsTo a -> ChainsTo a
≡ (SBV Stroke
a' SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ SBV Stroke
a) SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ (SBV Stroke
a' SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧ SBV Stroke
a) SBV Stroke
-> Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
-> Hinted (SBV Stroke)
forall a b. HintsTo a b => a -> b -> Hinted a
∵ Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
commut2
Hinted (SBV Stroke)
-> ChainsTo (Hinted (SBV Stroke)) -> ChainsTo (Hinted (SBV Stroke))
forall a. ChainStep a (ChainsTo a) => a -> ChainsTo a -> ChainsTo a
≡ (SBV Stroke
a' SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ SBV Stroke
a) SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ (SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧ SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ SBV Stroke
a') SBV Stroke
-> Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
-> Hinted (SBV Stroke)
forall a b. HintsTo a b => a -> b -> Hinted a
∵ Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
commut2
Hinted (SBV Stroke)
-> ChainsTo (Hinted (SBV Stroke)) -> ChainsTo (Hinted (SBV Stroke))
forall a. ChainStep a (ChainsTo a) => a -> ChainsTo a -> ChainsTo a
≡ (SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ SBV Stroke
a') SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ (SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧ SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ SBV Stroke
a') SBV Stroke -> SBool -> Hinted (SBV Stroke)
forall a b. HintsTo a b => a -> b -> Hinted a
∵ SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ SBV Stroke
a' SBV Stroke -> SBV Stroke -> SBool
forall a. EqSymbolic a => a -> a -> SBool
.== SBV Stroke
forall α. BooleanAlgebra α => α
ⲳ
Hinted (SBV Stroke)
-> ChainsTo (Hinted (SBV Stroke)) -> ChainsTo (Hinted (SBV Stroke))
forall a. ChainStep a (ChainsTo a) => a -> ChainsTo a -> ChainsTo a
≡ SBV Stroke
forall α. BooleanAlgebra α => α
ⲳ SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ (SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧ SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ SBV Stroke
a') SBV Stroke
-> Proof (Forall "a" Stroke -> SBool) -> Hinted (SBV Stroke)
forall a b. HintsTo a b => a -> b -> Hinted a
∵ Proof (Forall "a" Stroke -> SBool)
compl2
Hinted (SBV Stroke)
-> ChainsTo (Hinted (SBV Stroke)) -> ChainsTo (Hinted (SBV Stroke))
forall a. ChainStep a (ChainsTo a) => a -> ChainsTo a -> ChainsTo a
≡ (SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧ SBV Stroke
a) SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ (SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧ SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ SBV Stroke
a') SBV Stroke
-> Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
-> Hinted (SBV Stroke)
forall a b. HintsTo a b => a -> b -> Hinted a
∵ Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
commut2
Hinted (SBV Stroke)
-> ChainsTo (Hinted (SBV Stroke)) -> ChainsTo (Hinted (SBV Stroke))
forall a. ChainStep a (ChainsTo a) => a -> ChainsTo a -> ChainsTo a
≡ (SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧ SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ SBV Stroke
a) SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ (SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧ SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ SBV Stroke
a') SBV Stroke
-> Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
-> Hinted (SBV Stroke)
forall a b. HintsTo a b => a -> b -> Hinted a
∵ Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
distrib2
Hinted (SBV Stroke)
-> ChainsTo (Hinted (SBV Stroke)) -> ChainsTo (Hinted (SBV Stroke))
forall a. ChainStep a (ChainsTo a) => a -> ChainsTo a -> ChainsTo a
≡ SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧ SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ (SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ SBV Stroke
a') SBV Stroke -> SBool -> Hinted (SBV Stroke)
forall a b. HintsTo a b => a -> b -> Hinted a
∵ SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ SBV Stroke
a' SBV Stroke -> SBV Stroke -> SBool
forall a. EqSymbolic a => a -> a -> SBool
.== SBV Stroke
forall α. BooleanAlgebra α => α
т
Hinted (SBV Stroke)
-> ChainsTo (Hinted (SBV Stroke)) -> ChainsTo (Hinted (SBV Stroke))
forall a. ChainStep a (ChainsTo a) => a -> ChainsTo a -> ChainsTo a
≡ SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧ SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ SBV Stroke
forall α. BooleanAlgebra α => α
т SBV Stroke
-> Proof (Forall "a" Stroke -> SBool) -> Hinted (SBV Stroke)
forall a b. HintsTo a b => a -> b -> Hinted a
∵ Proof (Forall "a" Stroke -> SBool)
ident2
Hinted (SBV Stroke)
-> ChainsTo (Hinted (SBV Stroke)) -> ChainsTo (Hinted (SBV Stroke))
forall a. ChainStep a (ChainsTo a) => a -> ChainsTo a -> ChainsTo a
≡ SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧ SBV Stroke
a
SBV Stroke -> ChainsTo (SBV Stroke) -> ChainsTo (SBV Stroke)
forall a. ChainStep a (ChainsTo a) => a -> ChainsTo a -> ChainsTo a
≡ ChainsTo (SBV Stroke)
TPProofRaw (SBV Stroke)
forall a. TPProofRaw a
qed
Proof (Forall "a" Stroke -> SBool)
dne <- String
-> (Forall "a" Stroke -> SBool)
-> [ProofObj]
-> TP (Proof (Forall "a" Stroke -> SBool))
forall a.
Proposition a =>
String -> a -> [ProofObj] -> TP (Proof a)
lemma String
"aᶜᶜ = a"
(\(Forall @"a" (SBV Stroke
a :: SStroke)) -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧﬧ SBV Stroke
a SBV Stroke -> SBV Stroke -> SBool
forall a. EqSymbolic a => a -> a -> SBool
.== SBV Stroke
a)
[Proof (Forall "a" Stroke -> Forall "a'" Stroke -> SBool)
-> ProofObj
forall a. Proof a -> ProofObj
p Proof (Forall "a" Stroke -> Forall "a'" Stroke -> SBool)
inv, Proof (Forall "a" Stroke -> SBool) -> ProofObj
forall a. Proof a -> ProofObj
p Proof (Forall "a" Stroke -> SBool)
compl1, Proof (Forall "a" Stroke -> SBool) -> ProofObj
forall a. Proof a -> ProofObj
p Proof (Forall "a" Stroke -> SBool)
compl2, Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool) -> ProofObj
forall a. Proof a -> ProofObj
p Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
commut1, Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool) -> ProofObj
forall a. Proof a -> ProofObj
p Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
commut2]
Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
inv_elim <- String
-> (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
-> [ProofObj]
-> TP (Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool))
forall a.
Proposition a =>
String -> a -> [ProofObj] -> TP (Proof a)
lemma String
"aᶜ = bᶜ → a = b"
(\(Forall @"a" (SBV Stroke
a :: SStroke)) (Forall @"b" SBV Stroke
b) -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧ SBV Stroke
a SBV Stroke -> SBV Stroke -> SBool
forall a. EqSymbolic a => a -> a -> SBool
.== SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧ SBV Stroke
b SBool -> SBool -> SBool
.=> SBV Stroke
a SBV Stroke -> SBV Stroke -> SBool
forall a. EqSymbolic a => a -> a -> SBool
.== SBV Stroke
b)
[Proof (Forall "a" Stroke -> SBool) -> ProofObj
forall a. Proof a -> ProofObj
p Proof (Forall "a" Stroke -> SBool)
dne]
Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
cancel <- String
-> (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
-> [ProofObj]
-> TP (Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool))
forall a.
Proposition a =>
String -> a -> [ProofObj] -> TP (Proof a)
lemma String
"a ⊔ bᶜ = т → a ⊓ bᶜ = ⲳ → a = b"
(\(Forall @"a" (SBV Stroke
a :: SStroke)) (Forall @"b" SBV Stroke
b) -> SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧ SBV Stroke
b SBV Stroke -> SBV Stroke -> SBool
forall a. EqSymbolic a => a -> a -> SBool
.== SBV Stroke
forall α. BooleanAlgebra α => α
т SBool -> SBool -> SBool
.=> SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧ SBV Stroke
b SBV Stroke -> SBV Stroke -> SBool
forall a. EqSymbolic a => a -> a -> SBool
.== SBV Stroke
forall α. BooleanAlgebra α => α
ⲳ SBool -> SBool -> SBool
.=> SBV Stroke
a SBV Stroke -> SBV Stroke -> SBool
forall a. EqSymbolic a => a -> a -> SBool
.== SBV Stroke
b)
[Proof (Forall "a" Stroke -> Forall "a'" Stroke -> SBool)
-> ProofObj
forall a. Proof a -> ProofObj
p Proof (Forall "a" Stroke -> Forall "a'" Stroke -> SBool)
inv, Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool) -> ProofObj
forall a. Proof a -> ProofObj
p Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
inv_elim]
Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
a1 <- String
-> (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
-> StepArgs
(Forall "a" Stroke -> Forall "b" Stroke -> SBool) Stroke
-> TP (Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool))
forall t.
(Proposition (Forall "a" Stroke -> Forall "b" Stroke -> SBool),
SymVal t, EqSymbolic (SBV t)) =>
String
-> (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
-> StepArgs (Forall "a" Stroke -> Forall "b" Stroke -> SBool) t
-> TP (Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool))
forall a t.
(Calc a, Proposition a, SymVal t, EqSymbolic (SBV t)) =>
String -> a -> StepArgs a t -> TP (Proof a)
calc String
"a ⊔ (aᶜ ⊔ b) = т" (\(Forall @"a" SBV Stroke
a) (Forall @"b" SBV Stroke
b) -> SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ (SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧ SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ SBV Stroke
b) SBV Stroke -> SBV Stroke -> SBool
forall a. EqSymbolic a => a -> a -> SBool
.== SBV Stroke
forall α. BooleanAlgebra α => α
т) (StepArgs (Forall "a" Stroke -> Forall "b" Stroke -> SBool) Stroke
-> TP (Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)))
-> StepArgs
(Forall "a" Stroke -> Forall "b" Stroke -> SBool) Stroke
-> TP (Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool))
forall a b. (a -> b) -> a -> b
$
\SBV Stroke
a SBV Stroke
b -> [] [SBool]
-> TPProofRaw (SBV Stroke) -> (SBool, TPProofRaw (SBV Stroke))
forall a. [SBool] -> TPProofRaw a -> (SBool, TPProofRaw a)
⊢ SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ (SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧ SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ SBV Stroke
b) SBV Stroke
-> Proof (Forall "a" Stroke -> SBool) -> Hinted (SBV Stroke)
forall a b. HintsTo a b => a -> b -> Hinted a
∵ Proof (Forall "a" Stroke -> SBool)
ident2
Hinted (SBV Stroke)
-> ChainsTo (Hinted (SBV Stroke)) -> ChainsTo (Hinted (SBV Stroke))
forall a. ChainStep a (ChainsTo a) => a -> ChainsTo a -> ChainsTo a
≡ (SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ (SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧ SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ SBV Stroke
b)) SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ SBV Stroke
forall α. BooleanAlgebra α => α
т SBV Stroke
-> Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
-> Hinted (SBV Stroke)
forall a b. HintsTo a b => a -> b -> Hinted a
∵ Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
commut2
Hinted (SBV Stroke)
-> ChainsTo (Hinted (SBV Stroke)) -> ChainsTo (Hinted (SBV Stroke))
forall a. ChainStep a (ChainsTo a) => a -> ChainsTo a -> ChainsTo a
≡ SBV Stroke
forall α. BooleanAlgebra α => α
т SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ (SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ (SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧ SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ SBV Stroke
b)) SBV Stroke
-> Proof (Forall "a" Stroke -> SBool) -> Hinted (SBV Stroke)
forall a b. HintsTo a b => a -> b -> Hinted a
∵ Proof (Forall "a" Stroke -> SBool)
compl1
Hinted (SBV Stroke)
-> ChainsTo (Hinted (SBV Stroke)) -> ChainsTo (Hinted (SBV Stroke))
forall a. ChainStep a (ChainsTo a) => a -> ChainsTo a -> ChainsTo a
≡ (SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧ SBV Stroke
a) SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ (SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ (SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧ SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ SBV Stroke
b)) SBV Stroke
-> Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
-> Hinted (SBV Stroke)
forall a b. HintsTo a b => a -> b -> Hinted a
∵ Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
distrib1
Hinted (SBV Stroke)
-> ChainsTo (Hinted (SBV Stroke)) -> ChainsTo (Hinted (SBV Stroke))
forall a. ChainStep a (ChainsTo a) => a -> ChainsTo a -> ChainsTo a
≡ SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ (SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧ SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ (SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧ SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ SBV Stroke
b)) SBV Stroke
-> Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
-> Hinted (SBV Stroke)
forall a b. HintsTo a b => a -> b -> Hinted a
∵ Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
absorb2
Hinted (SBV Stroke)
-> ChainsTo (Hinted (SBV Stroke)) -> ChainsTo (Hinted (SBV Stroke))
forall a. ChainStep a (ChainsTo a) => a -> ChainsTo a -> ChainsTo a
≡ SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧ SBV Stroke
a SBV Stroke
-> Proof (Forall "a" Stroke -> SBool) -> Hinted (SBV Stroke)
forall a b. HintsTo a b => a -> b -> Hinted a
∵ Proof (Forall "a" Stroke -> SBool)
compl1
Hinted (SBV Stroke)
-> ChainsTo (Hinted (SBV Stroke)) -> ChainsTo (Hinted (SBV Stroke))
forall a. ChainStep a (ChainsTo a) => a -> ChainsTo a -> ChainsTo a
≡ (SBV Stroke
forall α. BooleanAlgebra α => α
т :: SStroke)
SBV Stroke -> ChainsTo (SBV Stroke) -> ChainsTo (SBV Stroke)
forall a. ChainStep a (ChainsTo a) => a -> ChainsTo a -> ChainsTo a
≡ ChainsTo (SBV Stroke)
TPProofRaw (SBV Stroke)
forall a. TPProofRaw a
qed
Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
a2 <- String
-> (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
-> StepArgs
(Forall "a" Stroke -> Forall "b" Stroke -> SBool) Stroke
-> TP (Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool))
forall t.
(Proposition (Forall "a" Stroke -> Forall "b" Stroke -> SBool),
SymVal t, EqSymbolic (SBV t)) =>
String
-> (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
-> StepArgs (Forall "a" Stroke -> Forall "b" Stroke -> SBool) t
-> TP (Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool))
forall a t.
(Calc a, Proposition a, SymVal t, EqSymbolic (SBV t)) =>
String -> a -> StepArgs a t -> TP (Proof a)
calc String
"a ⊓ (aᶜ ⊓ b) = ⲳ" (\(Forall @"a" SBV Stroke
a) (Forall @"b" SBV Stroke
b) -> SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ (SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧ SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ SBV Stroke
b) SBV Stroke -> SBV Stroke -> SBool
forall a. EqSymbolic a => a -> a -> SBool
.== SBV Stroke
forall α. BooleanAlgebra α => α
ⲳ) (StepArgs (Forall "a" Stroke -> Forall "b" Stroke -> SBool) Stroke
-> TP (Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)))
-> StepArgs
(Forall "a" Stroke -> Forall "b" Stroke -> SBool) Stroke
-> TP (Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool))
forall a b. (a -> b) -> a -> b
$
\SBV Stroke
a SBV Stroke
b -> [] [SBool]
-> TPProofRaw (SBV Stroke) -> (SBool, TPProofRaw (SBV Stroke))
forall a. [SBool] -> TPProofRaw a -> (SBool, TPProofRaw a)
⊢ SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ (SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧ SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ SBV Stroke
b) SBV Stroke
-> Proof (Forall "a" Stroke -> SBool) -> Hinted (SBV Stroke)
forall a b. HintsTo a b => a -> b -> Hinted a
∵ Proof (Forall "a" Stroke -> SBool)
ident1
Hinted (SBV Stroke)
-> ChainsTo (Hinted (SBV Stroke)) -> ChainsTo (Hinted (SBV Stroke))
forall a. ChainStep a (ChainsTo a) => a -> ChainsTo a -> ChainsTo a
≡ (SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ (SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧ SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ SBV Stroke
b)) SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ SBV Stroke
forall α. BooleanAlgebra α => α
ⲳ SBV Stroke
-> Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
-> Hinted (SBV Stroke)
forall a b. HintsTo a b => a -> b -> Hinted a
∵ Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
commut1
Hinted (SBV Stroke)
-> ChainsTo (Hinted (SBV Stroke)) -> ChainsTo (Hinted (SBV Stroke))
forall a. ChainStep a (ChainsTo a) => a -> ChainsTo a -> ChainsTo a
≡ SBV Stroke
forall α. BooleanAlgebra α => α
ⲳ SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ (SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ (SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧ SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ SBV Stroke
b)) SBV Stroke
-> Proof (Forall "a" Stroke -> SBool) -> Hinted (SBV Stroke)
forall a b. HintsTo a b => a -> b -> Hinted a
∵ Proof (Forall "a" Stroke -> SBool)
compl2
Hinted (SBV Stroke)
-> ChainsTo (Hinted (SBV Stroke)) -> ChainsTo (Hinted (SBV Stroke))
forall a. ChainStep a (ChainsTo a) => a -> ChainsTo a -> ChainsTo a
≡ (SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧ SBV Stroke
a) SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ (SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ (SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧ SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ SBV Stroke
b)) SBV Stroke
-> Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
-> Hinted (SBV Stroke)
forall a b. HintsTo a b => a -> b -> Hinted a
∵ Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
distrib2
Hinted (SBV Stroke)
-> ChainsTo (Hinted (SBV Stroke)) -> ChainsTo (Hinted (SBV Stroke))
forall a. ChainStep a (ChainsTo a) => a -> ChainsTo a -> ChainsTo a
≡ SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ (SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧ SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ (SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧ SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ SBV Stroke
b)) SBV Stroke
-> Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
-> Hinted (SBV Stroke)
forall a b. HintsTo a b => a -> b -> Hinted a
∵ Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
absorb1
Hinted (SBV Stroke)
-> ChainsTo (Hinted (SBV Stroke)) -> ChainsTo (Hinted (SBV Stroke))
forall a. ChainStep a (ChainsTo a) => a -> ChainsTo a -> ChainsTo a
≡ SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧ SBV Stroke
a SBV Stroke
-> Proof (Forall "a" Stroke -> SBool) -> Hinted (SBV Stroke)
forall a b. HintsTo a b => a -> b -> Hinted a
∵ Proof (Forall "a" Stroke -> SBool)
compl2
Hinted (SBV Stroke)
-> ChainsTo (Hinted (SBV Stroke)) -> ChainsTo (Hinted (SBV Stroke))
forall a. ChainStep a (ChainsTo a) => a -> ChainsTo a -> ChainsTo a
≡ (SBV Stroke
forall α. BooleanAlgebra α => α
ⲳ :: SStroke)
SBV Stroke -> ChainsTo (SBV Stroke) -> ChainsTo (SBV Stroke)
forall a. ChainStep a (ChainsTo a) => a -> ChainsTo a -> ChainsTo a
≡ ChainsTo (SBV Stroke)
TPProofRaw (SBV Stroke)
forall a. TPProofRaw a
qed
Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
dm1 <- String
-> (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
-> [ProofObj]
-> TP (Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool))
forall a.
Proposition a =>
String -> a -> [ProofObj] -> TP (Proof a)
lemma String
"(a ⊔ b)ᶜ = aᶜ ⊓ bᶜ"
(\(Forall @"a" (SBV Stroke
a :: SStroke)) (Forall @"b" SBV Stroke
b) -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧ(SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ SBV Stroke
b) SBV Stroke -> SBV Stroke -> SBool
forall a. EqSymbolic a => a -> a -> SBool
.== SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧ SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧ SBV Stroke
b)
[Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool) -> ProofObj
forall a. Proof a -> ProofObj
p Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
a1, Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool) -> ProofObj
forall a. Proof a -> ProofObj
p Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
a2, Proof (Forall "a" Stroke -> SBool) -> ProofObj
forall a. Proof a -> ProofObj
p Proof (Forall "a" Stroke -> SBool)
dne, Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool) -> ProofObj
forall a. Proof a -> ProofObj
p Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
commut1, Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool) -> ProofObj
forall a. Proof a -> ProofObj
p Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
commut2, Proof (Forall "a" Stroke -> SBool) -> ProofObj
forall a. Proof a -> ProofObj
p Proof (Forall "a" Stroke -> SBool)
ident1, Proof (Forall "a" Stroke -> SBool) -> ProofObj
forall a. Proof a -> ProofObj
p Proof (Forall "a" Stroke -> SBool)
ident2, Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
-> ProofObj
forall a. Proof a -> ProofObj
p Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
distrib1, Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
-> ProofObj
forall a. Proof a -> ProofObj
p Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
distrib2]
Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
dm2 <- String
-> (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
-> [ProofObj]
-> TP (Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool))
forall a.
Proposition a =>
String -> a -> [ProofObj] -> TP (Proof a)
lemma String
"(a ⨅ b)ᶜ = aᶜ ⨆ bᶜ"
(\(Forall @"a" (SBV Stroke
a :: SStroke)) (Forall @"b" SBV Stroke
b) -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧ(SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ SBV Stroke
b) SBV Stroke -> SBV Stroke -> SBool
forall a. EqSymbolic a => a -> a -> SBool
.== SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧ SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧ SBV Stroke
b)
[Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool) -> ProofObj
forall a. Proof a -> ProofObj
p Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
a1, Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool) -> ProofObj
forall a. Proof a -> ProofObj
p Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
a2, Proof (Forall "a" Stroke -> SBool) -> ProofObj
forall a. Proof a -> ProofObj
p Proof (Forall "a" Stroke -> SBool)
dne, Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool) -> ProofObj
forall a. Proof a -> ProofObj
p Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
commut1, Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool) -> ProofObj
forall a. Proof a -> ProofObj
p Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
commut2, Proof (Forall "a" Stroke -> SBool) -> ProofObj
forall a. Proof a -> ProofObj
p Proof (Forall "a" Stroke -> SBool)
ident1, Proof (Forall "a" Stroke -> SBool) -> ProofObj
forall a. Proof a -> ProofObj
p Proof (Forall "a" Stroke -> SBool)
ident2, Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
-> ProofObj
forall a. Proof a -> ProofObj
p Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
distrib1, Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
-> ProofObj
forall a. Proof a -> ProofObj
p Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
distrib2]
Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
d1 <- String
-> (Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
-> [ProofObj]
-> TP
(Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool))
forall a.
Proposition a =>
String -> a -> [ProofObj] -> TP (Proof a)
lemma String
"(a ⊔ (b ⊔ c)) ⊔ aᶜ = т"
(\(Forall @"a" (SBV Stroke
a :: SStroke)) (Forall @"b" SBV Stroke
b) (Forall @"c" SBV Stroke
c) -> (SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ (SBV Stroke
b SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ SBV Stroke
c)) SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧ SBV Stroke
a SBV Stroke -> SBV Stroke -> SBool
forall a. EqSymbolic a => a -> a -> SBool
.== SBV Stroke
forall α. BooleanAlgebra α => α
т)
[Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool) -> ProofObj
forall a. Proof a -> ProofObj
p Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
a1, Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool) -> ProofObj
forall a. Proof a -> ProofObj
p Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
a2, Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool) -> ProofObj
forall a. Proof a -> ProofObj
p Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
commut1, Proof (Forall "a" Stroke -> SBool) -> ProofObj
forall a. Proof a -> ProofObj
p Proof (Forall "a" Stroke -> SBool)
ident1, Proof (Forall "a" Stroke -> SBool) -> ProofObj
forall a. Proof a -> ProofObj
p Proof (Forall "a" Stroke -> SBool)
ident2, Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
-> ProofObj
forall a. Proof a -> ProofObj
p Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
distrib1, Proof (Forall "a" Stroke -> SBool) -> ProofObj
forall a. Proof a -> ProofObj
p Proof (Forall "a" Stroke -> SBool)
compl1, Proof (Forall "a" Stroke -> SBool) -> ProofObj
forall a. Proof a -> ProofObj
p Proof (Forall "a" Stroke -> SBool)
compl2, Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool) -> ProofObj
forall a. Proof a -> ProofObj
p Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
dm1, Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool) -> ProofObj
forall a. Proof a -> ProofObj
p Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
dm2, Proof (Forall "a" Stroke -> SBool) -> ProofObj
forall a. Proof a -> ProofObj
p Proof (Forall "a" Stroke -> SBool)
idemp2]
Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
e1 <- String
-> (Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
-> [ProofObj]
-> TP
(Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool))
forall a.
Proposition a =>
String -> a -> [ProofObj] -> TP (Proof a)
lemma String
"b ⊓ (a ⊔ (b ⊔ c)) = b"
(\(Forall @"a" (SBV Stroke
a :: SStroke)) (Forall @"b" SBV Stroke
b) (Forall @"c" SBV Stroke
c) -> SBV Stroke
b SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ (SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ (SBV Stroke
b SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ SBV Stroke
c)) SBV Stroke -> SBV Stroke -> SBool
forall a. EqSymbolic a => a -> a -> SBool
.== SBV Stroke
b)
[Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
-> ProofObj
forall a. Proof a -> ProofObj
p Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
distrib2, Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool) -> ProofObj
forall a. Proof a -> ProofObj
p Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
absorb1, Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool) -> ProofObj
forall a. Proof a -> ProofObj
p Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
absorb2, Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool) -> ProofObj
forall a. Proof a -> ProofObj
p Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
commut1]
Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
e2 <- String
-> (Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
-> [ProofObj]
-> TP
(Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool))
forall a.
Proposition a =>
String -> a -> [ProofObj] -> TP (Proof a)
lemma String
"b ⊔ (a ⊓ (b ⊓ c)) = b" (\(Forall @"a" (SBV Stroke
a :: SStroke)) (Forall @"b" SBV Stroke
b) (Forall @"c" SBV Stroke
c) -> SBV Stroke
b SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ (SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ (SBV Stroke
b SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ SBV Stroke
c)) SBV Stroke -> SBV Stroke -> SBool
forall a. EqSymbolic a => a -> a -> SBool
.== SBV Stroke
b) [Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
-> ProofObj
forall a. Proof a -> ProofObj
p Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
distrib1, Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool) -> ProofObj
forall a. Proof a -> ProofObj
p Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
absorb1, Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool) -> ProofObj
forall a. Proof a -> ProofObj
p Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
absorb2, Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool) -> ProofObj
forall a. Proof a -> ProofObj
p Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
commut2]
Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
f1 <- String
-> (Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
-> StepArgs
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
Stroke
-> TP
(Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool))
forall t.
(Proposition
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool),
SymVal t, EqSymbolic (SBV t)) =>
String
-> (Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
-> StepArgs
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
t
-> TP
(Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool))
forall a t.
(Calc a, Proposition a, SymVal t, EqSymbolic (SBV t)) =>
String -> a -> StepArgs a t -> TP (Proof a)
calc String
"(a ⊔ (b ⊔ c)) ⊔ bᶜ = т" (\(Forall @"a" (SBV Stroke
a :: SStroke)) (Forall @"b" SBV Stroke
b) (Forall @"c" SBV Stroke
c) -> (SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ (SBV Stroke
b SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ SBV Stroke
c)) SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧ SBV Stroke
b SBV Stroke -> SBV Stroke -> SBool
forall a. EqSymbolic a => a -> a -> SBool
.== SBV Stroke
forall α. BooleanAlgebra α => α
т) (StepArgs
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
Stroke
-> TP
(Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)))
-> StepArgs
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
Stroke
-> TP
(Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool))
forall a b. (a -> b) -> a -> b
$
\SBV Stroke
a SBV Stroke
b SBV Stroke
c -> [] [SBool]
-> TPProofRaw (SBV Stroke) -> (SBool, TPProofRaw (SBV Stroke))
forall a. [SBool] -> TPProofRaw a -> (SBool, TPProofRaw a)
⊢ (SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ (SBV Stroke
b SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ SBV Stroke
c)) SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧ SBV Stroke
b SBV Stroke
-> Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
-> Hinted (SBV Stroke)
forall a b. HintsTo a b => a -> b -> Hinted a
∵ Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
commut1
Hinted (SBV Stroke)
-> ChainsTo (Hinted (SBV Stroke)) -> ChainsTo (Hinted (SBV Stroke))
forall a. ChainStep a (ChainsTo a) => a -> ChainsTo a -> ChainsTo a
≡ SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧ SBV Stroke
b SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ (SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ (SBV Stroke
b SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ SBV Stroke
c)) SBV Stroke
-> Proof (Forall "a" Stroke -> SBool) -> Hinted (SBV Stroke)
forall a b. HintsTo a b => a -> b -> Hinted a
∵ Proof (Forall "a" Stroke -> SBool)
ident2
Hinted (SBV Stroke)
-> ChainsTo (Hinted (SBV Stroke)) -> ChainsTo (Hinted (SBV Stroke))
forall a. ChainStep a (ChainsTo a) => a -> ChainsTo a -> ChainsTo a
≡ (SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧ SBV Stroke
b SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ (SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ (SBV Stroke
b SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ SBV Stroke
c))) SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ SBV Stroke
forall α. BooleanAlgebra α => α
т SBV Stroke
-> Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
-> Hinted (SBV Stroke)
forall a b. HintsTo a b => a -> b -> Hinted a
∵ Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
commut2
Hinted (SBV Stroke)
-> ChainsTo (Hinted (SBV Stroke)) -> ChainsTo (Hinted (SBV Stroke))
forall a. ChainStep a (ChainsTo a) => a -> ChainsTo a -> ChainsTo a
≡ SBV Stroke
forall α. BooleanAlgebra α => α
т SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ (SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧ SBV Stroke
b SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ (SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ (SBV Stroke
b SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ SBV Stroke
c))) SBV Stroke
-> Proof (Forall "a" Stroke -> SBool) -> Hinted (SBV Stroke)
forall a b. HintsTo a b => a -> b -> Hinted a
∵ Proof (Forall "a" Stroke -> SBool)
compl1
Hinted (SBV Stroke)
-> ChainsTo (Hinted (SBV Stroke)) -> ChainsTo (Hinted (SBV Stroke))
forall a. ChainStep a (ChainsTo a) => a -> ChainsTo a -> ChainsTo a
≡ (SBV Stroke
b SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧ SBV Stroke
b) SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ (SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧ SBV Stroke
b SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ (SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ (SBV Stroke
b SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ SBV Stroke
c))) SBV Stroke
-> Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
-> Hinted (SBV Stroke)
forall a b. HintsTo a b => a -> b -> Hinted a
∵ Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
commut1
Hinted (SBV Stroke)
-> ChainsTo (Hinted (SBV Stroke)) -> ChainsTo (Hinted (SBV Stroke))
forall a. ChainStep a (ChainsTo a) => a -> ChainsTo a -> ChainsTo a
≡ (SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧ SBV Stroke
b SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ SBV Stroke
b) SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ (SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧ SBV Stroke
b SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ (SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ (SBV Stroke
b SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ SBV Stroke
c))) SBV Stroke
-> Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
-> Hinted (SBV Stroke)
forall a b. HintsTo a b => a -> b -> Hinted a
∵ Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
distrib1
Hinted (SBV Stroke)
-> ChainsTo (Hinted (SBV Stroke)) -> ChainsTo (Hinted (SBV Stroke))
forall a. ChainStep a (ChainsTo a) => a -> ChainsTo a -> ChainsTo a
≡ SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧ SBV Stroke
b SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ (SBV Stroke
b SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ (SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ (SBV Stroke
b SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ SBV Stroke
c))) SBV Stroke
-> Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
-> Hinted (SBV Stroke)
forall a b. HintsTo a b => a -> b -> Hinted a
∵ Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
e1
Hinted (SBV Stroke)
-> ChainsTo (Hinted (SBV Stroke)) -> ChainsTo (Hinted (SBV Stroke))
forall a. ChainStep a (ChainsTo a) => a -> ChainsTo a -> ChainsTo a
≡ SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧ SBV Stroke
b SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ SBV Stroke
b SBV Stroke
-> Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
-> Hinted (SBV Stroke)
forall a b. HintsTo a b => a -> b -> Hinted a
∵ Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
commut1
Hinted (SBV Stroke)
-> ChainsTo (Hinted (SBV Stroke)) -> ChainsTo (Hinted (SBV Stroke))
forall a. ChainStep a (ChainsTo a) => a -> ChainsTo a -> ChainsTo a
≡ SBV Stroke
b SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧ SBV Stroke
b SBV Stroke
-> Proof (Forall "a" Stroke -> SBool) -> Hinted (SBV Stroke)
forall a b. HintsTo a b => a -> b -> Hinted a
∵ Proof (Forall "a" Stroke -> SBool)
compl1
Hinted (SBV Stroke)
-> ChainsTo (Hinted (SBV Stroke)) -> ChainsTo (Hinted (SBV Stroke))
forall a. ChainStep a (ChainsTo a) => a -> ChainsTo a -> ChainsTo a
≡ (SBV Stroke
forall α. BooleanAlgebra α => α
т :: SStroke)
SBV Stroke -> ChainsTo (SBV Stroke) -> ChainsTo (SBV Stroke)
forall a. ChainStep a (ChainsTo a) => a -> ChainsTo a -> ChainsTo a
≡ ChainsTo (SBV Stroke)
TPProofRaw (SBV Stroke)
forall a. TPProofRaw a
qed
Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
g1 <- String
-> (Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
-> [ProofObj]
-> TP
(Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool))
forall a.
Proposition a =>
String -> a -> [ProofObj] -> TP (Proof a)
lemma String
"(a ⊔ (b ⊔ c)) ⊔ cᶜ = т"
(\(Forall @"a" (SBV Stroke
a :: SStroke)) (Forall @"b" SBV Stroke
b) (Forall @"c" SBV Stroke
c) -> (SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ (SBV Stroke
b SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ SBV Stroke
c)) SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧ SBV Stroke
c SBV Stroke -> SBV Stroke -> SBool
forall a. EqSymbolic a => a -> a -> SBool
.== SBV Stroke
forall α. BooleanAlgebra α => α
т)
[Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool) -> ProofObj
forall a. Proof a -> ProofObj
p Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
commut1, Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
-> ProofObj
forall a. Proof a -> ProofObj
p Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
f1]
Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
h1 <- String
-> (Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
-> StepArgs
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
Stroke
-> TP
(Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool))
forall t.
(Proposition
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool),
SymVal t, EqSymbolic (SBV t)) =>
String
-> (Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
-> StepArgs
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
t
-> TP
(Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool))
forall a t.
(Calc a, Proposition a, SymVal t, EqSymbolic (SBV t)) =>
String -> a -> StepArgs a t -> TP (Proof a)
calc String
"(a ⊔ b ⊔ c)ᶜ ⊓ a = ⲳ"
(\(Forall @"a" (SBV Stroke
a :: SStroke)) (Forall @"b" SBV Stroke
b) (Forall @"c" SBV Stroke
c) -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧ(SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ SBV Stroke
b SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ SBV Stroke
c) SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ SBV Stroke
a SBV Stroke -> SBV Stroke -> SBool
forall a. EqSymbolic a => a -> a -> SBool
.== SBV Stroke
forall α. BooleanAlgebra α => α
ⲳ) (StepArgs
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
Stroke
-> TP
(Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)))
-> StepArgs
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
Stroke
-> TP
(Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool))
forall a b. (a -> b) -> a -> b
$
\SBV Stroke
a SBV Stroke
b SBV Stroke
c -> [] [SBool]
-> TPProofRaw (SBV Stroke) -> (SBool, TPProofRaw (SBV Stroke))
forall a. [SBool] -> TPProofRaw a -> (SBool, TPProofRaw a)
⊢ SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧ(SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ SBV Stroke
b SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ SBV Stroke
c) SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ SBV Stroke
a SBV Stroke
-> Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
-> Hinted (SBV Stroke)
forall a b. HintsTo a b => a -> b -> Hinted a
∵ Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
commut2
Hinted (SBV Stroke)
-> ChainsTo (Hinted (SBV Stroke)) -> ChainsTo (Hinted (SBV Stroke))
forall a. ChainStep a (ChainsTo a) => a -> ChainsTo a -> ChainsTo a
≡ SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧ (SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ SBV Stroke
b SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ SBV Stroke
c) SBV Stroke
-> Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
-> Hinted (SBV Stroke)
forall a b. HintsTo a b => a -> b -> Hinted a
∵ Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
dm1
Hinted (SBV Stroke)
-> ChainsTo (Hinted (SBV Stroke)) -> ChainsTo (Hinted (SBV Stroke))
forall a. ChainStep a (ChainsTo a) => a -> ChainsTo a -> ChainsTo a
≡ SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ (SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧ SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧ SBV Stroke
b SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧ SBV Stroke
c) SBV Stroke
-> Proof (Forall "a" Stroke -> SBool) -> Hinted (SBV Stroke)
forall a b. HintsTo a b => a -> b -> Hinted a
∵ Proof (Forall "a" Stroke -> SBool)
ident1
Hinted (SBV Stroke)
-> ChainsTo (Hinted (SBV Stroke)) -> ChainsTo (Hinted (SBV Stroke))
forall a. ChainStep a (ChainsTo a) => a -> ChainsTo a -> ChainsTo a
≡ (SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ (SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧ SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧ SBV Stroke
b SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧ SBV Stroke
c)) SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ SBV Stroke
forall α. BooleanAlgebra α => α
ⲳ SBV Stroke
-> Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
-> Hinted (SBV Stroke)
forall a b. HintsTo a b => a -> b -> Hinted a
∵ Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
commut1
Hinted (SBV Stroke)
-> ChainsTo (Hinted (SBV Stroke)) -> ChainsTo (Hinted (SBV Stroke))
forall a. ChainStep a (ChainsTo a) => a -> ChainsTo a -> ChainsTo a
≡ SBV Stroke
forall α. BooleanAlgebra α => α
ⲳ SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ (SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ (SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧ SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧ SBV Stroke
b SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧ SBV Stroke
c)) SBV Stroke
-> Proof (Forall "a" Stroke -> SBool) -> Hinted (SBV Stroke)
forall a b. HintsTo a b => a -> b -> Hinted a
∵ Proof (Forall "a" Stroke -> SBool)
compl2
Hinted (SBV Stroke)
-> ChainsTo (Hinted (SBV Stroke)) -> ChainsTo (Hinted (SBV Stroke))
forall a. ChainStep a (ChainsTo a) => a -> ChainsTo a -> ChainsTo a
≡ (SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧ SBV Stroke
a) SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ (SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ (SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧ SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧ SBV Stroke
b SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧ SBV Stroke
c)) SBV Stroke
-> Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
-> Hinted (SBV Stroke)
forall a b. HintsTo a b => a -> b -> Hinted a
∵ Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
distrib2
Hinted (SBV Stroke)
-> ChainsTo (Hinted (SBV Stroke)) -> ChainsTo (Hinted (SBV Stroke))
forall a. ChainStep a (ChainsTo a) => a -> ChainsTo a -> ChainsTo a
≡ SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ (SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧ SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ (SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧ SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧ SBV Stroke
b SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧ SBV Stroke
c)) SBV Stroke
-> Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
-> Hinted (SBV Stroke)
forall a b. HintsTo a b => a -> b -> Hinted a
∵ Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
commut2
Hinted (SBV Stroke)
-> ChainsTo (Hinted (SBV Stroke)) -> ChainsTo (Hinted (SBV Stroke))
forall a. ChainStep a (ChainsTo a) => a -> ChainsTo a -> ChainsTo a
≡ SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ (SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧ SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ (SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧ SBV Stroke
c SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ (SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧ SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧ SBV Stroke
b))) SBV Stroke
-> Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
-> Hinted (SBV Stroke)
forall a b. HintsTo a b => a -> b -> Hinted a
∵ Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
e2
Hinted (SBV Stroke)
-> ChainsTo (Hinted (SBV Stroke)) -> ChainsTo (Hinted (SBV Stroke))
forall a. ChainStep a (ChainsTo a) => a -> ChainsTo a -> ChainsTo a
≡ SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧ SBV Stroke
a SBV Stroke
-> Proof (Forall "a" Stroke -> SBool) -> Hinted (SBV Stroke)
forall a b. HintsTo a b => a -> b -> Hinted a
∵ Proof (Forall "a" Stroke -> SBool)
compl2
Hinted (SBV Stroke)
-> ChainsTo (Hinted (SBV Stroke)) -> ChainsTo (Hinted (SBV Stroke))
forall a. ChainStep a (ChainsTo a) => a -> ChainsTo a -> ChainsTo a
≡ (SBV Stroke
forall α. BooleanAlgebra α => α
ⲳ :: SStroke)
SBV Stroke -> ChainsTo (SBV Stroke) -> ChainsTo (SBV Stroke)
forall a. ChainStep a (ChainsTo a) => a -> ChainsTo a -> ChainsTo a
≡ ChainsTo (SBV Stroke)
TPProofRaw (SBV Stroke)
forall a. TPProofRaw a
qed
Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
i1 <- String
-> (Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
-> [ProofObj]
-> TP
(Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool))
forall a.
Proposition a =>
String -> a -> [ProofObj] -> TP (Proof a)
lemma String
"(a ⊔ b ⊔ c)ᶜ ⊓ b = ⲳ"
(\(Forall @"a" (SBV Stroke
a :: SStroke)) (Forall @"b" SBV Stroke
b) (Forall @"c" SBV Stroke
c) -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧ(SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ SBV Stroke
b SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ SBV Stroke
c) SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ SBV Stroke
b SBV Stroke -> SBV Stroke -> SBool
forall a. EqSymbolic a => a -> a -> SBool
.== SBV Stroke
forall α. BooleanAlgebra α => α
ⲳ)
[Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool) -> ProofObj
forall a. Proof a -> ProofObj
p Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
commut1, Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
-> ProofObj
forall a. Proof a -> ProofObj
p Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
h1]
Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
j1 <- String
-> (Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
-> [ProofObj]
-> TP
(Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool))
forall a.
Proposition a =>
String -> a -> [ProofObj] -> TP (Proof a)
lemma String
"(a ⊔ b ⊔ c)ᶜ ⊓ c = ⲳ"
(\(Forall @"a" (SBV Stroke
a :: SStroke)) (Forall @"b" SBV Stroke
b) (Forall @"c" SBV Stroke
c) -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧ(SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ SBV Stroke
b SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ SBV Stroke
c) SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ SBV Stroke
c SBV Stroke -> SBV Stroke -> SBool
forall a. EqSymbolic a => a -> a -> SBool
.== SBV Stroke
forall α. BooleanAlgebra α => α
ⲳ)
[Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool) -> ProofObj
forall a. Proof a -> ProofObj
p Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
a2, Proof (Forall "a" Stroke -> SBool) -> ProofObj
forall a. Proof a -> ProofObj
p Proof (Forall "a" Stroke -> SBool)
dne, Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool) -> ProofObj
forall a. Proof a -> ProofObj
p Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
commut2]
Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
assoc1 <- do
Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
c1 <- String
-> (Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
-> StepArgs
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
Stroke
-> TP
(Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool))
forall t.
(Proposition
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool),
SymVal t, EqSymbolic (SBV t)) =>
String
-> (Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
-> StepArgs
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
t
-> TP
(Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool))
forall a t.
(Calc a, Proposition a, SymVal t, EqSymbolic (SBV t)) =>
String -> a -> StepArgs a t -> TP (Proof a)
calc String
"(a ⊔ (b ⊔ c)) ⊔ ((a ⊔ b) ⊔ c)ᶜ = т"
(\(Forall @"a" (SBV Stroke
a :: SStroke)) (Forall @"b" SBV Stroke
b) (Forall @"c" SBV Stroke
c) -> (SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ (SBV Stroke
b SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ SBV Stroke
c)) SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧ((SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ SBV Stroke
b) SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ SBV Stroke
c) SBV Stroke -> SBV Stroke -> SBool
forall a. EqSymbolic a => a -> a -> SBool
.== SBV Stroke
forall α. BooleanAlgebra α => α
т) (StepArgs
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
Stroke
-> TP
(Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)))
-> StepArgs
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
Stroke
-> TP
(Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool))
forall a b. (a -> b) -> a -> b
$
\SBV Stroke
a SBV Stroke
b SBV Stroke
c -> [] [SBool]
-> TPProofRaw (SBV Stroke) -> (SBool, TPProofRaw (SBV Stroke))
forall a. [SBool] -> TPProofRaw a -> (SBool, TPProofRaw a)
⊢ (SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ (SBV Stroke
b SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ SBV Stroke
c)) SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧ((SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ SBV Stroke
b) SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ SBV Stroke
c) SBV Stroke
-> Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
-> Hinted (SBV Stroke)
forall a b. HintsTo a b => a -> b -> Hinted a
∵ Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
dm1
Hinted (SBV Stroke)
-> ChainsTo (Hinted (SBV Stroke)) -> ChainsTo (Hinted (SBV Stroke))
forall a. ChainStep a (ChainsTo a) => a -> ChainsTo a -> ChainsTo a
≡ (SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ (SBV Stroke
b SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ SBV Stroke
c)) SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ (SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧ SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧ SBV Stroke
b SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧ SBV Stroke
c) SBV Stroke
-> Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
-> Hinted (SBV Stroke)
forall a b. HintsTo a b => a -> b -> Hinted a
∵ Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
distrib1
Hinted (SBV Stroke)
-> ChainsTo (Hinted (SBV Stroke)) -> ChainsTo (Hinted (SBV Stroke))
forall a. ChainStep a (ChainsTo a) => a -> ChainsTo a -> ChainsTo a
≡ ((SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ (SBV Stroke
b SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ SBV Stroke
c)) SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ (SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧ SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧ SBV Stroke
b)) SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ ((SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ (SBV Stroke
b SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ SBV Stroke
c)) SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧ SBV Stroke
c) SBV Stroke
-> Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
-> Hinted (SBV Stroke)
forall a b. HintsTo a b => a -> b -> Hinted a
∵ Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
g1
Hinted (SBV Stroke)
-> ChainsTo (Hinted (SBV Stroke)) -> ChainsTo (Hinted (SBV Stroke))
forall a. ChainStep a (ChainsTo a) => a -> ChainsTo a -> ChainsTo a
≡ ((SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ (SBV Stroke
b SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ SBV Stroke
c)) SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ (SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧ SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧ SBV Stroke
b)) SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ SBV Stroke
forall α. BooleanAlgebra α => α
т SBV Stroke
-> Proof (Forall "a" Stroke -> SBool) -> Hinted (SBV Stroke)
forall a b. HintsTo a b => a -> b -> Hinted a
∵ Proof (Forall "a" Stroke -> SBool)
ident2
Hinted (SBV Stroke)
-> ChainsTo (Hinted (SBV Stroke)) -> ChainsTo (Hinted (SBV Stroke))
forall a. ChainStep a (ChainsTo a) => a -> ChainsTo a -> ChainsTo a
≡ (SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ (SBV Stroke
b SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ SBV Stroke
c)) SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ (SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧ SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧ SBV Stroke
b) SBV Stroke
-> Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
-> Hinted (SBV Stroke)
forall a b. HintsTo a b => a -> b -> Hinted a
∵ Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
distrib1
Hinted (SBV Stroke)
-> ChainsTo (Hinted (SBV Stroke)) -> ChainsTo (Hinted (SBV Stroke))
forall a. ChainStep a (ChainsTo a) => a -> ChainsTo a -> ChainsTo a
≡ ((SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ (SBV Stroke
b SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ SBV Stroke
c)) SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧ SBV Stroke
a) SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ ((SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ (SBV Stroke
b SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ SBV Stroke
c)) SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧ SBV Stroke
b) SBV Stroke
-> Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
-> Hinted (SBV Stroke)
forall a b. HintsTo a b => a -> b -> Hinted a
∵ Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
d1
Hinted (SBV Stroke)
-> ChainsTo (Hinted (SBV Stroke)) -> ChainsTo (Hinted (SBV Stroke))
forall a. ChainStep a (ChainsTo a) => a -> ChainsTo a -> ChainsTo a
≡ SBV Stroke
forall α. BooleanAlgebra α => α
т SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ ((SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ (SBV Stroke
b SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ SBV Stroke
c)) SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧ SBV Stroke
b) SBV Stroke
-> Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
-> Hinted (SBV Stroke)
forall a b. HintsTo a b => a -> b -> Hinted a
∵ Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
f1
Hinted (SBV Stroke)
-> ChainsTo (Hinted (SBV Stroke)) -> ChainsTo (Hinted (SBV Stroke))
forall a. ChainStep a (ChainsTo a) => a -> ChainsTo a -> ChainsTo a
≡ (SBV Stroke
forall α. BooleanAlgebra α => α
т SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ SBV Stroke
forall α. BooleanAlgebra α => α
т :: SStroke) SBV Stroke
-> Proof (Forall "a" Stroke -> SBool) -> Hinted (SBV Stroke)
forall a b. HintsTo a b => a -> b -> Hinted a
∵ Proof (Forall "a" Stroke -> SBool)
idemp2
TPProofRaw (SBV Stroke)
-> ChainsTo (TPProofRaw (SBV Stroke))
-> ChainsTo (TPProofRaw (SBV Stroke))
forall a. ChainStep a (ChainsTo a) => a -> ChainsTo a -> ChainsTo a
≡ (SBV Stroke
forall α. BooleanAlgebra α => α
т :: SStroke)
SBV Stroke -> ChainsTo (SBV Stroke) -> ChainsTo (SBV Stroke)
forall a. ChainStep a (ChainsTo a) => a -> ChainsTo a -> ChainsTo a
≡ ChainsTo (SBV Stroke)
TPProofRaw (SBV Stroke)
forall a. TPProofRaw a
qed
Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
c2 <- String
-> (Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
-> StepArgs
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
Stroke
-> TP
(Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool))
forall t.
(Proposition
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool),
SymVal t, EqSymbolic (SBV t)) =>
String
-> (Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
-> StepArgs
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
t
-> TP
(Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool))
forall a t.
(Calc a, Proposition a, SymVal t, EqSymbolic (SBV t)) =>
String -> a -> StepArgs a t -> TP (Proof a)
calc String
"(a ⊔ (b ⊔ c)) ⊓ ((a ⊔ b) ⊔ c)ᶜ = ⲳ"
(\(Forall @"a" (SBV Stroke
a :: SStroke)) (Forall @"b" SBV Stroke
b) (Forall @"c" SBV Stroke
c) -> (SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ (SBV Stroke
b SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ SBV Stroke
c)) SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧ((SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ SBV Stroke
b) SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ SBV Stroke
c) SBV Stroke -> SBV Stroke -> SBool
forall a. EqSymbolic a => a -> a -> SBool
.== SBV Stroke
forall α. BooleanAlgebra α => α
ⲳ) (StepArgs
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
Stroke
-> TP
(Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)))
-> StepArgs
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
Stroke
-> TP
(Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool))
forall a b. (a -> b) -> a -> b
$
\SBV Stroke
a SBV Stroke
b SBV Stroke
c -> [] [SBool]
-> TPProofRaw (SBV Stroke) -> (SBool, TPProofRaw (SBV Stroke))
forall a. [SBool] -> TPProofRaw a -> (SBool, TPProofRaw a)
⊢ (SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ (SBV Stroke
b SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ SBV Stroke
c)) SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧ((SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ SBV Stroke
b) SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ SBV Stroke
c) SBV Stroke
-> Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
-> Hinted (SBV Stroke)
forall a b. HintsTo a b => a -> b -> Hinted a
∵ Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
commut2
Hinted (SBV Stroke)
-> ChainsTo (Hinted (SBV Stroke)) -> ChainsTo (Hinted (SBV Stroke))
forall a. ChainStep a (ChainsTo a) => a -> ChainsTo a -> ChainsTo a
≡ SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧ((SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ SBV Stroke
b) SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ SBV Stroke
c) SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ (SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ (SBV Stroke
b SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ SBV Stroke
c)) SBV Stroke
-> Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
-> Hinted (SBV Stroke)
forall a b. HintsTo a b => a -> b -> Hinted a
∵ Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
distrib2
Hinted (SBV Stroke)
-> ChainsTo (Hinted (SBV Stroke)) -> ChainsTo (Hinted (SBV Stroke))
forall a. ChainStep a (ChainsTo a) => a -> ChainsTo a -> ChainsTo a
≡ (SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧ((SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ SBV Stroke
b) SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ SBV Stroke
c) SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ SBV Stroke
a) SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ (SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧ((SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ SBV Stroke
b) SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ SBV Stroke
c) SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ (SBV Stroke
b SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ SBV Stroke
c)) SBV Stroke
-> Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
-> Hinted (SBV Stroke)
forall a b. HintsTo a b => a -> b -> Hinted a
∵ Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
commut2
Hinted (SBV Stroke)
-> ChainsTo (Hinted (SBV Stroke)) -> ChainsTo (Hinted (SBV Stroke))
forall a. ChainStep a (ChainsTo a) => a -> ChainsTo a -> ChainsTo a
≡ (SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧ((SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ SBV Stroke
b) SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ SBV Stroke
c)) SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ ((SBV Stroke
b SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ SBV Stroke
c) SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧ((SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ SBV Stroke
b) SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ SBV Stroke
c)) SBV Stroke
-> Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
-> Hinted (SBV Stroke)
forall a b. HintsTo a b => a -> b -> Hinted a
∵ Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
commut2
Hinted (SBV Stroke)
-> ChainsTo (Hinted (SBV Stroke)) -> ChainsTo (Hinted (SBV Stroke))
forall a. ChainStep a (ChainsTo a) => a -> ChainsTo a -> ChainsTo a
≡ (SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧ((SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ SBV Stroke
b) SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ SBV Stroke
c) SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ SBV Stroke
a) SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ ((SBV Stroke
b SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ SBV Stroke
c) SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧ((SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ SBV Stroke
b) SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ SBV Stroke
c)) SBV Stroke
-> Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
-> Hinted (SBV Stroke)
forall a b. HintsTo a b => a -> b -> Hinted a
∵ Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
h1
Hinted (SBV Stroke)
-> ChainsTo (Hinted (SBV Stroke)) -> ChainsTo (Hinted (SBV Stroke))
forall a. ChainStep a (ChainsTo a) => a -> ChainsTo a -> ChainsTo a
≡ SBV Stroke
forall α. BooleanAlgebra α => α
ⲳ SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ ((SBV Stroke
b SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ SBV Stroke
c) SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧ((SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ SBV Stroke
b) SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ SBV Stroke
c)) SBV Stroke
-> Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
-> Hinted (SBV Stroke)
forall a b. HintsTo a b => a -> b -> Hinted a
∵ Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
commut1
Hinted (SBV Stroke)
-> ChainsTo (Hinted (SBV Stroke)) -> ChainsTo (Hinted (SBV Stroke))
forall a. ChainStep a (ChainsTo a) => a -> ChainsTo a -> ChainsTo a
≡ ((SBV Stroke
b SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ SBV Stroke
c) SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧ((SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ SBV Stroke
b) SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ SBV Stroke
c)) SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ SBV Stroke
forall α. BooleanAlgebra α => α
ⲳ SBV Stroke
-> Proof (Forall "a" Stroke -> SBool) -> Hinted (SBV Stroke)
forall a b. HintsTo a b => a -> b -> Hinted a
∵ Proof (Forall "a" Stroke -> SBool)
ident1
Hinted (SBV Stroke)
-> ChainsTo (Hinted (SBV Stroke)) -> ChainsTo (Hinted (SBV Stroke))
forall a. ChainStep a (ChainsTo a) => a -> ChainsTo a -> ChainsTo a
≡ (SBV Stroke
b SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ SBV Stroke
c) SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧ((SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ SBV Stroke
b) SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ SBV Stroke
c) SBV Stroke
-> Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
-> Hinted (SBV Stroke)
forall a b. HintsTo a b => a -> b -> Hinted a
∵ Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
commut2
Hinted (SBV Stroke)
-> ChainsTo (Hinted (SBV Stroke)) -> ChainsTo (Hinted (SBV Stroke))
forall a. ChainStep a (ChainsTo a) => a -> ChainsTo a -> ChainsTo a
≡ SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧ((SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ SBV Stroke
b) SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ SBV Stroke
c) SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ (SBV Stroke
b SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ SBV Stroke
c) SBV Stroke
-> Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
-> Hinted (SBV Stroke)
forall a b. HintsTo a b => a -> b -> Hinted a
∵ Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
distrib2
Hinted (SBV Stroke)
-> ChainsTo (Hinted (SBV Stroke)) -> ChainsTo (Hinted (SBV Stroke))
forall a. ChainStep a (ChainsTo a) => a -> ChainsTo a -> ChainsTo a
≡ (SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧ((SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ SBV Stroke
b) SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ SBV Stroke
c) SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ SBV Stroke
b) SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ (SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧ((SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ SBV Stroke
b) SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ SBV Stroke
c) SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ SBV Stroke
c) SBV Stroke
-> Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
-> Hinted (SBV Stroke)
forall a b. HintsTo a b => a -> b -> Hinted a
∵ Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
j1
Hinted (SBV Stroke)
-> ChainsTo (Hinted (SBV Stroke)) -> ChainsTo (Hinted (SBV Stroke))
forall a. ChainStep a (ChainsTo a) => a -> ChainsTo a -> ChainsTo a
≡ (SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧ((SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ SBV Stroke
b) SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ SBV Stroke
c) SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ SBV Stroke
b) SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ SBV Stroke
forall α. BooleanAlgebra α => α
ⲳ SBV Stroke
-> Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
-> Hinted (SBV Stroke)
forall a b. HintsTo a b => a -> b -> Hinted a
∵ Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
i1
Hinted (SBV Stroke)
-> ChainsTo (Hinted (SBV Stroke)) -> ChainsTo (Hinted (SBV Stroke))
forall a. ChainStep a (ChainsTo a) => a -> ChainsTo a -> ChainsTo a
≡ (SBV Stroke
forall α. BooleanAlgebra α => α
ⲳ SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ SBV Stroke
forall α. BooleanAlgebra α => α
ⲳ :: SStroke) SBV Stroke
-> Proof (Forall "a" Stroke -> SBool) -> Hinted (SBV Stroke)
forall a b. HintsTo a b => a -> b -> Hinted a
∵ Proof (Forall "a" Stroke -> SBool)
ident1
TPProofRaw (SBV Stroke)
-> ChainsTo (TPProofRaw (SBV Stroke))
-> ChainsTo (TPProofRaw (SBV Stroke))
forall a. ChainStep a (ChainsTo a) => a -> ChainsTo a -> ChainsTo a
≡ (SBV Stroke
forall α. BooleanAlgebra α => α
ⲳ :: SStroke)
SBV Stroke -> ChainsTo (SBV Stroke) -> ChainsTo (SBV Stroke)
forall a. ChainStep a (ChainsTo a) => a -> ChainsTo a -> ChainsTo a
≡ ChainsTo (SBV Stroke)
TPProofRaw (SBV Stroke)
forall a. TPProofRaw a
qed
String
-> (Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
-> [ProofObj]
-> TP
(Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool))
forall a.
Proposition a =>
String -> a -> [ProofObj] -> TP (Proof a)
lemma String
"a ⊔ (b ⊔ c) = (a ⊔ b) ⊔ c"
(\(Forall @"a" (SBV Stroke
a :: SStroke)) (Forall @"b" SBV Stroke
b) (Forall @"c" SBV Stroke
c) -> SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ (SBV Stroke
b SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ SBV Stroke
c) SBV Stroke -> SBV Stroke -> SBool
forall a. EqSymbolic a => a -> a -> SBool
.== (SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ SBV Stroke
b) SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ SBV Stroke
c)
[Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
-> ProofObj
forall a. Proof a -> ProofObj
p Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
c1, Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
-> ProofObj
forall a. Proof a -> ProofObj
p Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
c2, Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool) -> ProofObj
forall a. Proof a -> ProofObj
p Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
cancel]
Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
assoc2 <- String
-> (Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
-> StepArgs
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
Stroke
-> TP
(Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool))
forall t.
(Proposition
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool),
SymVal t, EqSymbolic (SBV t)) =>
String
-> (Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
-> StepArgs
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
t
-> TP
(Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool))
forall a t.
(Calc a, Proposition a, SymVal t, EqSymbolic (SBV t)) =>
String -> a -> StepArgs a t -> TP (Proof a)
calc String
"a ⊓ (b ⊓ c) = (a ⊓ b) ⊓ c"
(\(Forall @"a" (SBV Stroke
a :: SStroke)) (Forall @"b" SBV Stroke
b) (Forall @"c" SBV Stroke
c) -> SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ (SBV Stroke
b SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ SBV Stroke
c) SBV Stroke -> SBV Stroke -> SBool
forall a. EqSymbolic a => a -> a -> SBool
.== (SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ SBV Stroke
b) SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ SBV Stroke
c) (StepArgs
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
Stroke
-> TP
(Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)))
-> StepArgs
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
Stroke
-> TP
(Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool))
forall a b. (a -> b) -> a -> b
$
\SBV Stroke
a SBV Stroke
b SBV Stroke
c -> [] [SBool]
-> TPProofRaw (SBV Stroke) -> (SBool, TPProofRaw (SBV Stroke))
forall a. [SBool] -> TPProofRaw a -> (SBool, TPProofRaw a)
⊢ SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ (SBV Stroke
b SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ SBV Stroke
c) SBV Stroke
-> Proof (Forall "a" Stroke -> SBool) -> Hinted (SBV Stroke)
forall a b. HintsTo a b => a -> b -> Hinted a
∵ Proof (Forall "a" Stroke -> SBool)
dne
Hinted (SBV Stroke)
-> ChainsTo (Hinted (SBV Stroke)) -> ChainsTo (Hinted (SBV Stroke))
forall a. ChainStep a (ChainsTo a) => a -> ChainsTo a -> ChainsTo a
≡ SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧﬧ(SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ (SBV Stroke
b SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ SBV Stroke
c)) SBV Stroke
-> Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
-> Hinted (SBV Stroke)
forall a b. HintsTo a b => a -> b -> Hinted a
∵ Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
assoc1
Hinted (SBV Stroke)
-> ChainsTo (Hinted (SBV Stroke)) -> ChainsTo (Hinted (SBV Stroke))
forall a. ChainStep a (ChainsTo a) => a -> ChainsTo a -> ChainsTo a
≡ SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧﬧ((SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ SBV Stroke
b) SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ SBV Stroke
c) SBV Stroke
-> Proof (Forall "a" Stroke -> SBool) -> Hinted (SBV Stroke)
forall a b. HintsTo a b => a -> b -> Hinted a
∵ Proof (Forall "a" Stroke -> SBool)
dne
Hinted (SBV Stroke)
-> ChainsTo (Hinted (SBV Stroke)) -> ChainsTo (Hinted (SBV Stroke))
forall a. ChainStep a (ChainsTo a) => a -> ChainsTo a -> ChainsTo a
≡ ((SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ SBV Stroke
b) SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ SBV Stroke
c)
SBV Stroke -> ChainsTo (SBV Stroke) -> ChainsTo (SBV Stroke)
forall a. ChainStep a (ChainsTo a) => a -> ChainsTo a -> ChainsTo a
≡ ChainsTo (SBV Stroke)
TPProofRaw (SBV Stroke)
forall a. TPProofRaw a
qed
Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
le_antisymm <- String
-> (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
-> StepArgs
(Forall "a" Stroke -> Forall "b" Stroke -> SBool) Stroke
-> TP (Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool))
forall t.
(Proposition (Forall "a" Stroke -> Forall "b" Stroke -> SBool),
SymVal t, EqSymbolic (SBV t)) =>
String
-> (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
-> StepArgs (Forall "a" Stroke -> Forall "b" Stroke -> SBool) t
-> TP (Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool))
forall a t.
(Calc a, Proposition a, SymVal t, EqSymbolic (SBV t)) =>
String -> a -> StepArgs a t -> TP (Proof a)
calc String
"a ≤ b → b ≤ a → a = b"
(\(Forall @"a" SBV Stroke
a) (Forall @"b" SBV Stroke
b) -> SBV Stroke
a SBV Stroke -> SBV Stroke -> SBool
forall α. BooleanAlgebra α => α -> α -> SBool
≤ SBV Stroke
b SBool -> SBool -> SBool
.=> SBV Stroke
b SBV Stroke -> SBV Stroke -> SBool
forall α. BooleanAlgebra α => α -> α -> SBool
≤ SBV Stroke
a SBool -> SBool -> SBool
.=> SBV Stroke
a SBV Stroke -> SBV Stroke -> SBool
forall a. EqSymbolic a => a -> a -> SBool
.== SBV Stroke
b) (StepArgs (Forall "a" Stroke -> Forall "b" Stroke -> SBool) Stroke
-> TP (Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)))
-> StepArgs
(Forall "a" Stroke -> Forall "b" Stroke -> SBool) Stroke
-> TP (Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool))
forall a b. (a -> b) -> a -> b
$
\SBV Stroke
a SBV Stroke
b -> [SBV Stroke
a SBV Stroke -> SBV Stroke -> SBool
forall α. BooleanAlgebra α => α -> α -> SBool
≤ SBV Stroke
b, SBV Stroke
b SBV Stroke -> SBV Stroke -> SBool
forall α. BooleanAlgebra α => α -> α -> SBool
≤ SBV Stroke
a] [SBool]
-> TPProofRaw (SBV Stroke) -> (SBool, TPProofRaw (SBV Stroke))
forall a. [SBool] -> TPProofRaw a -> (SBool, TPProofRaw a)
⊢ SBV Stroke
a SBV Stroke -> SBool -> Hinted (SBV Stroke)
forall a b. HintsTo a b => a -> b -> Hinted a
∵ SBV Stroke
a SBV Stroke -> SBV Stroke -> SBool
forall α. BooleanAlgebra α => α -> α -> SBool
≤ SBV Stroke
b
Hinted (SBV Stroke)
-> ChainsTo (Hinted (SBV Stroke)) -> ChainsTo (Hinted (SBV Stroke))
forall a. ChainStep a (ChainsTo a) => a -> ChainsTo a -> ChainsTo a
≡ SBV Stroke
b SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ SBV Stroke
a SBV Stroke
-> Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
-> Hinted (SBV Stroke)
forall a b. HintsTo a b => a -> b -> Hinted a
∵ Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
commut2
Hinted (SBV Stroke)
-> ChainsTo (Hinted (SBV Stroke)) -> ChainsTo (Hinted (SBV Stroke))
forall a. ChainStep a (ChainsTo a) => a -> ChainsTo a -> ChainsTo a
≡ SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ SBV Stroke
b SBV Stroke -> SBool -> Hinted (SBV Stroke)
forall a b. HintsTo a b => a -> b -> Hinted a
∵ SBV Stroke
b SBV Stroke -> SBV Stroke -> SBool
forall α. BooleanAlgebra α => α -> α -> SBool
≤ SBV Stroke
a
Hinted (SBV Stroke)
-> ChainsTo (Hinted (SBV Stroke)) -> ChainsTo (Hinted (SBV Stroke))
forall a. ChainStep a (ChainsTo a) => a -> ChainsTo a -> ChainsTo a
≡ SBV Stroke
b
SBV Stroke -> ChainsTo (SBV Stroke) -> ChainsTo (SBV Stroke)
forall a. ChainStep a (ChainsTo a) => a -> ChainsTo a -> ChainsTo a
≡ ChainsTo (SBV Stroke)
TPProofRaw (SBV Stroke)
forall a. TPProofRaw a
qed
Proof (Forall "a" Stroke -> SBool)
le_refl <- String
-> (Forall "a" Stroke -> SBool)
-> [ProofObj]
-> TP (Proof (Forall "a" Stroke -> SBool))
forall a.
Proposition a =>
String -> a -> [ProofObj] -> TP (Proof a)
lemma String
"a ≤ a" (\(Forall @"a" SBV Stroke
a) -> SBV Stroke
a SBV Stroke -> SBV Stroke -> SBool
forall α. BooleanAlgebra α => α -> α -> SBool
≤ SBV Stroke
a) [Proof (Forall "a" Stroke -> SBool) -> ProofObj
forall a. Proof a -> ProofObj
p Proof (Forall "a" Stroke -> SBool)
idemp2]
Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
le_trans <- String
-> (Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
-> StepArgs
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
Stroke
-> TP
(Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool))
forall t.
(Proposition
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool),
SymVal t, EqSymbolic (SBV t)) =>
String
-> (Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
-> StepArgs
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
t
-> TP
(Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool))
forall a t.
(Calc a, Proposition a, SymVal t, EqSymbolic (SBV t)) =>
String -> a -> StepArgs a t -> TP (Proof a)
calc String
"a ≤ b → b ≤ c → a ≤ c" (\(Forall SBV Stroke
a) (Forall SBV Stroke
b) (Forall SBV Stroke
c) -> SBV Stroke
a SBV Stroke -> SBV Stroke -> SBool
forall α. BooleanAlgebra α => α -> α -> SBool
≤ SBV Stroke
b SBool -> SBool -> SBool
.=> SBV Stroke
b SBV Stroke -> SBV Stroke -> SBool
forall α. BooleanAlgebra α => α -> α -> SBool
≤ SBV Stroke
c SBool -> SBool -> SBool
.=> SBV Stroke
a SBV Stroke -> SBV Stroke -> SBool
forall α. BooleanAlgebra α => α -> α -> SBool
≤ SBV Stroke
c) (StepArgs
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
Stroke
-> TP
(Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)))
-> StepArgs
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
Stroke
-> TP
(Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool))
forall a b. (a -> b) -> a -> b
$
\SBV Stroke
a SBV Stroke
b SBV Stroke
c -> [SBV Stroke
a SBV Stroke -> SBV Stroke -> SBool
forall α. BooleanAlgebra α => α -> α -> SBool
≤ SBV Stroke
b, SBV Stroke
b SBV Stroke -> SBV Stroke -> SBool
forall α. BooleanAlgebra α => α -> α -> SBool
≤ SBV Stroke
c] [SBool]
-> TPProofRaw (SBV Stroke) -> (SBool, TPProofRaw (SBV Stroke))
forall a. [SBool] -> TPProofRaw a -> (SBool, TPProofRaw a)
⊢ SBV Stroke
a SBV Stroke -> SBool -> Hinted (SBV Stroke)
forall a b. HintsTo a b => a -> b -> Hinted a
∵ SBV Stroke
a SBV Stroke -> SBV Stroke -> SBool
forall α. BooleanAlgebra α => α -> α -> SBool
≤ SBV Stroke
b
Hinted (SBV Stroke)
-> ChainsTo (Hinted (SBV Stroke)) -> ChainsTo (Hinted (SBV Stroke))
forall a. ChainStep a (ChainsTo a) => a -> ChainsTo a -> ChainsTo a
≡ SBV Stroke
b SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ SBV Stroke
a SBV Stroke -> SBool -> Hinted (SBV Stroke)
forall a b. HintsTo a b => a -> b -> Hinted a
∵ SBV Stroke
b SBV Stroke -> SBV Stroke -> SBool
forall α. BooleanAlgebra α => α -> α -> SBool
≤ SBV Stroke
c
Hinted (SBV Stroke)
-> ChainsTo (Hinted (SBV Stroke)) -> ChainsTo (Hinted (SBV Stroke))
forall a. ChainStep a (ChainsTo a) => a -> ChainsTo a -> ChainsTo a
≡ (SBV Stroke
c SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ SBV Stroke
b) SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ SBV Stroke
a SBV Stroke
-> Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
-> Hinted (SBV Stroke)
forall a b. HintsTo a b => a -> b -> Hinted a
∵ Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
assoc2
Hinted (SBV Stroke)
-> ChainsTo (Hinted (SBV Stroke)) -> ChainsTo (Hinted (SBV Stroke))
forall a. ChainStep a (ChainsTo a) => a -> ChainsTo a -> ChainsTo a
≡ SBV Stroke
c SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ (SBV Stroke
b SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ SBV Stroke
a) SBV Stroke -> SBool -> Hinted (SBV Stroke)
forall a b. HintsTo a b => a -> b -> Hinted a
∵ SBV Stroke
a SBV Stroke -> SBV Stroke -> SBool
forall α. BooleanAlgebra α => α -> α -> SBool
≤ SBV Stroke
b
Hinted (SBV Stroke)
-> ChainsTo (Hinted (SBV Stroke)) -> ChainsTo (Hinted (SBV Stroke))
forall a. ChainStep a (ChainsTo a) => a -> ChainsTo a -> ChainsTo a
≡ (SBV Stroke
c SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ SBV Stroke
a)
SBV Stroke -> ChainsTo (SBV Stroke) -> ChainsTo (SBV Stroke)
forall a. ChainStep a (ChainsTo a) => a -> ChainsTo a -> ChainsTo a
≡ ChainsTo (SBV Stroke)
TPProofRaw (SBV Stroke)
forall a. TPProofRaw a
qed
Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
lt_iff_le_not_le <- String
-> (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
-> [ProofObj]
-> TP (Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool))
forall a.
Proposition a =>
String -> a -> [ProofObj] -> TP (Proof a)
lemma String
"a < b ↔ a ≤ b ∧ ¬b ≤ a"
(\(Forall @"a" (SBV Stroke
a :: SStroke)) (Forall @"b" SBV Stroke
b) -> (SBV Stroke
a SBV Stroke -> SBV Stroke -> SBool
forall α. BooleanAlgebra α => α -> α -> SBool
< SBV Stroke
b) SBool -> SBool -> SBool
.<=> SBV Stroke
a SBV Stroke -> SBV Stroke -> SBool
forall α. BooleanAlgebra α => α -> α -> SBool
≤ SBV Stroke
b SBool -> SBool -> SBool
.&& SBool -> SBool
sNot (SBV Stroke
b SBV Stroke -> SBV Stroke -> SBool
forall α. BooleanAlgebra α => α -> α -> SBool
≤ SBV Stroke
a))
[Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
-> ProofObj
forall a. Proof a -> ProofObj
p Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
sh3]
Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
le_sup_left <- String
-> (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
-> [ProofObj]
-> TP (Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool))
forall a.
Proposition a =>
String -> a -> [ProofObj] -> TP (Proof a)
lemma String
"a ≤ a ⊔ b"
(\(Forall @"a" (SBV Stroke
a :: SStroke)) (Forall @"b" SBV Stroke
b) -> SBV Stroke
a SBV Stroke -> SBV Stroke -> SBool
forall α. BooleanAlgebra α => α -> α -> SBool
≤ SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ SBV Stroke
b)
[Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool) -> ProofObj
forall a. Proof a -> ProofObj
p Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
commut1, Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool) -> ProofObj
forall a. Proof a -> ProofObj
p Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
commut2, Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool) -> ProofObj
forall a. Proof a -> ProofObj
p Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
absorb2]
Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
le_sup_right <- String
-> (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
-> [ProofObj]
-> TP (Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool))
forall a.
Proposition a =>
String -> a -> [ProofObj] -> TP (Proof a)
lemma String
"b ≤ a ⊔ b"
(\(Forall @"a" (SBV Stroke
a :: SStroke)) (Forall @"b" SBV Stroke
b) -> SBV Stroke
a SBV Stroke -> SBV Stroke -> SBool
forall α. BooleanAlgebra α => α -> α -> SBool
≤ SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ SBV Stroke
b)
[Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool) -> ProofObj
forall a. Proof a -> ProofObj
p Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
commut1, Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool) -> ProofObj
forall a. Proof a -> ProofObj
p Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
commut2, Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool) -> ProofObj
forall a. Proof a -> ProofObj
p Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
absorb2]
Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
sup_le <- String
-> (Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
-> StepArgs
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
Stroke
-> TP
(Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool))
forall t.
(Proposition
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool),
SymVal t, EqSymbolic (SBV t)) =>
String
-> (Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
-> StepArgs
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
t
-> TP
(Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool))
forall a t.
(Calc a, Proposition a, SymVal t, EqSymbolic (SBV t)) =>
String -> a -> StepArgs a t -> TP (Proof a)
calc String
"a ≤ c → b ≤ c → a ⊔ b ≤ c"
(\(Forall SBV Stroke
a) (Forall SBV Stroke
b) (Forall SBV Stroke
c) -> SBV Stroke
a SBV Stroke -> SBV Stroke -> SBool
forall α. BooleanAlgebra α => α -> α -> SBool
≤ SBV Stroke
c SBool -> SBool -> SBool
.=> SBV Stroke
b SBV Stroke -> SBV Stroke -> SBool
forall α. BooleanAlgebra α => α -> α -> SBool
≤ SBV Stroke
c SBool -> SBool -> SBool
.=> SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ SBV Stroke
b SBV Stroke -> SBV Stroke -> SBool
forall α. BooleanAlgebra α => α -> α -> SBool
≤ SBV Stroke
c) (StepArgs
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
Stroke
-> TP
(Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)))
-> StepArgs
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
Stroke
-> TP
(Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool))
forall a b. (a -> b) -> a -> b
$
\SBV Stroke
a SBV Stroke
b SBV Stroke
c -> [SBV Stroke
a SBV Stroke -> SBV Stroke -> SBool
forall α. BooleanAlgebra α => α -> α -> SBool
≤ SBV Stroke
c, SBV Stroke
b SBV Stroke -> SBV Stroke -> SBool
forall α. BooleanAlgebra α => α -> α -> SBool
≤ SBV Stroke
c] [SBool]
-> TPProofRaw (SBV Stroke) -> (SBool, TPProofRaw (SBV Stroke))
forall a. [SBool] -> TPProofRaw a -> (SBool, TPProofRaw a)
⊢ SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ SBV Stroke
b SBV Stroke -> [SBool] -> Hinted (SBV Stroke)
forall a b. HintsTo a b => a -> b -> Hinted a
∵ [SBV Stroke
a SBV Stroke -> SBV Stroke -> SBool
forall α. BooleanAlgebra α => α -> α -> SBool
≤ SBV Stroke
c, SBV Stroke
b SBV Stroke -> SBV Stroke -> SBool
forall α. BooleanAlgebra α => α -> α -> SBool
≤ SBV Stroke
c]
Hinted (SBV Stroke)
-> ChainsTo (Hinted (SBV Stroke)) -> ChainsTo (Hinted (SBV Stroke))
forall a. ChainStep a (ChainsTo a) => a -> ChainsTo a -> ChainsTo a
≡ (SBV Stroke
c SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ SBV Stroke
a) SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ (SBV Stroke
c SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ SBV Stroke
b) SBV Stroke
-> Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
-> Hinted (SBV Stroke)
forall a b. HintsTo a b => a -> b -> Hinted a
∵ Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
distrib2
Hinted (SBV Stroke)
-> ChainsTo (Hinted (SBV Stroke)) -> ChainsTo (Hinted (SBV Stroke))
forall a. ChainStep a (ChainsTo a) => a -> ChainsTo a -> ChainsTo a
≡ SBV Stroke
c SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ (SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ SBV Stroke
b)
SBV Stroke -> ChainsTo (SBV Stroke) -> ChainsTo (SBV Stroke)
forall a. ChainStep a (ChainsTo a) => a -> ChainsTo a -> ChainsTo a
≡ ChainsTo (SBV Stroke)
TPProofRaw (SBV Stroke)
forall a. TPProofRaw a
qed
Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
inf_le_left <- String
-> (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
-> [ProofObj]
-> TP (Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool))
forall a.
Proposition a =>
String -> a -> [ProofObj] -> TP (Proof a)
lemma String
"a ⊓ b ≤ a"
(\(Forall @"a" (SBV Stroke
a :: SStroke)) (Forall @"b" SBV Stroke
b) -> SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ SBV Stroke
b SBV Stroke -> SBV Stroke -> SBool
forall α. BooleanAlgebra α => α -> α -> SBool
≤ SBV Stroke
a)
[Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
-> ProofObj
forall a. Proof a -> ProofObj
p Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
assoc2, Proof (Forall "a" Stroke -> SBool) -> ProofObj
forall a. Proof a -> ProofObj
p Proof (Forall "a" Stroke -> SBool)
idemp2]
Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
inf_le_right <- String
-> (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
-> [ProofObj]
-> TP (Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool))
forall a.
Proposition a =>
String -> a -> [ProofObj] -> TP (Proof a)
lemma String
"a ⊓ b ≤ b"
(\(Forall @"a" (SBV Stroke
a :: SStroke)) (Forall @"b" SBV Stroke
b) -> SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ SBV Stroke
b SBV Stroke -> SBV Stroke -> SBool
forall α. BooleanAlgebra α => α -> α -> SBool
≤ SBV Stroke
b)
[Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool) -> ProofObj
forall a. Proof a -> ProofObj
p Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
commut2, Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool) -> ProofObj
forall a. Proof a -> ProofObj
p Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
inf_le_left]
Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
le_inf <- String
-> (Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
-> StepArgs
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
Stroke
-> TP
(Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool))
forall t.
(Proposition
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool),
SymVal t, EqSymbolic (SBV t)) =>
String
-> (Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
-> StepArgs
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
t
-> TP
(Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool))
forall a t.
(Calc a, Proposition a, SymVal t, EqSymbolic (SBV t)) =>
String -> a -> StepArgs a t -> TP (Proof a)
calc String
"a ≤ b → a ≤ c → a ≤ b ⊓ c"
(\(Forall SBV Stroke
a) (Forall SBV Stroke
b) (Forall SBV Stroke
c) -> SBV Stroke
a SBV Stroke -> SBV Stroke -> SBool
forall α. BooleanAlgebra α => α -> α -> SBool
≤ SBV Stroke
b SBool -> SBool -> SBool
.=> SBV Stroke
a SBV Stroke -> SBV Stroke -> SBool
forall α. BooleanAlgebra α => α -> α -> SBool
≤ SBV Stroke
c SBool -> SBool -> SBool
.=> SBV Stroke
a SBV Stroke -> SBV Stroke -> SBool
forall α. BooleanAlgebra α => α -> α -> SBool
≤ SBV Stroke
b SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ SBV Stroke
c) (StepArgs
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
Stroke
-> TP
(Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)))
-> StepArgs
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
Stroke
-> TP
(Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool))
forall a b. (a -> b) -> a -> b
$
\SBV Stroke
a SBV Stroke
b SBV Stroke
c -> [SBV Stroke
a SBV Stroke -> SBV Stroke -> SBool
forall α. BooleanAlgebra α => α -> α -> SBool
≤ SBV Stroke
b, SBV Stroke
a SBV Stroke -> SBV Stroke -> SBool
forall α. BooleanAlgebra α => α -> α -> SBool
≤ SBV Stroke
c] [SBool]
-> TPProofRaw (SBV Stroke) -> (SBool, TPProofRaw (SBV Stroke))
forall a. [SBool] -> TPProofRaw a -> (SBool, TPProofRaw a)
⊢ SBV Stroke
a SBV Stroke -> SBool -> Hinted (SBV Stroke)
forall a b. HintsTo a b => a -> b -> Hinted a
∵ SBV Stroke
a SBV Stroke -> SBV Stroke -> SBool
forall α. BooleanAlgebra α => α -> α -> SBool
≤ SBV Stroke
b
Hinted (SBV Stroke)
-> ChainsTo (Hinted (SBV Stroke)) -> ChainsTo (Hinted (SBV Stroke))
forall a. ChainStep a (ChainsTo a) => a -> ChainsTo a -> ChainsTo a
≡ SBV Stroke
b SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ SBV Stroke
a SBV Stroke -> SBool -> Hinted (SBV Stroke)
forall a b. HintsTo a b => a -> b -> Hinted a
∵ SBV Stroke
a SBV Stroke -> SBV Stroke -> SBool
forall α. BooleanAlgebra α => α -> α -> SBool
≤ SBV Stroke
c
Hinted (SBV Stroke)
-> ChainsTo (Hinted (SBV Stroke)) -> ChainsTo (Hinted (SBV Stroke))
forall a. ChainStep a (ChainsTo a) => a -> ChainsTo a -> ChainsTo a
≡ SBV Stroke
b SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ (SBV Stroke
c SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ SBV Stroke
a) SBV Stroke
-> Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
-> Hinted (SBV Stroke)
forall a b. HintsTo a b => a -> b -> Hinted a
∵ Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
assoc2
Hinted (SBV Stroke)
-> ChainsTo (Hinted (SBV Stroke)) -> ChainsTo (Hinted (SBV Stroke))
forall a. ChainStep a (ChainsTo a) => a -> ChainsTo a -> ChainsTo a
≡ (SBV Stroke
b SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ SBV Stroke
c SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ SBV Stroke
a)
SBV Stroke -> ChainsTo (SBV Stroke) -> ChainsTo (SBV Stroke)
forall a. ChainStep a (ChainsTo a) => a -> ChainsTo a -> ChainsTo a
≡ ChainsTo (SBV Stroke)
TPProofRaw (SBV Stroke)
forall a. TPProofRaw a
qed
Proof
(Forall "x" Stroke
-> Forall "y" Stroke -> Forall "z" Stroke -> SBool)
le_sup_inf <- String
-> (Forall "x" Stroke
-> Forall "y" Stroke -> Forall "z" Stroke -> SBool)
-> [ProofObj]
-> TP
(Proof
(Forall "x" Stroke
-> Forall "y" Stroke -> Forall "z" Stroke -> SBool))
forall a.
Proposition a =>
String -> a -> [ProofObj] -> TP (Proof a)
lemma String
"(x ⊔ y) ⊓ (x ⊔ z) ≤ x ⊔ y ⊓ z"
(\(Forall SBV Stroke
x) (Forall SBV Stroke
y) (Forall SBV Stroke
z) -> (SBV Stroke
x SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ SBV Stroke
y) SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ (SBV Stroke
x SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ SBV Stroke
z) SBV Stroke -> SBV Stroke -> SBool
forall α. BooleanAlgebra α => α -> α -> SBool
≤ SBV Stroke
x SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ SBV Stroke
y SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ SBV Stroke
z)
[Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
-> ProofObj
forall a. Proof a -> ProofObj
p Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
distrib1, Proof (Forall "a" Stroke -> SBool) -> ProofObj
forall a. Proof a -> ProofObj
p Proof (Forall "a" Stroke -> SBool)
le_refl]
Proof (Forall "x" Stroke -> SBool)
inf_compl_le_bot <- String
-> (Forall "x" Stroke -> SBool)
-> [ProofObj]
-> TP (Proof (Forall "x" Stroke -> SBool))
forall a.
Proposition a =>
String -> a -> [ProofObj] -> TP (Proof a)
lemma String
"x ⊓ xᶜ ≤ ⊥" (\(Forall SBV Stroke
x) -> SBV Stroke
x SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧ SBV Stroke
x SBV Stroke -> SBV Stroke -> SBool
forall α. BooleanAlgebra α => α -> α -> SBool
≤ SBV Stroke
forall α. BooleanAlgebra α => α
ⲳ) [Proof (Forall "a" Stroke -> SBool) -> ProofObj
forall a. Proof a -> ProofObj
p Proof (Forall "a" Stroke -> SBool)
compl2, Proof (Forall "a" Stroke -> SBool) -> ProofObj
forall a. Proof a -> ProofObj
p Proof (Forall "a" Stroke -> SBool)
le_refl]
Proof (Forall "x" Stroke -> SBool)
top_le_sup_compl <- String
-> (Forall "x" Stroke -> SBool)
-> [ProofObj]
-> TP (Proof (Forall "x" Stroke -> SBool))
forall a.
Proposition a =>
String -> a -> [ProofObj] -> TP (Proof a)
lemma String
"⊤ ≤ x ⊔ xᶜ" (\(Forall SBV Stroke
x) -> SBV Stroke
forall α. BooleanAlgebra α => α
т SBV Stroke -> SBV Stroke -> SBool
forall α. BooleanAlgebra α => α -> α -> SBool
≤ SBV Stroke
x SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧ SBV Stroke
x) [Proof (Forall "a" Stroke -> SBool) -> ProofObj
forall a. Proof a -> ProofObj
p Proof (Forall "a" Stroke -> SBool)
compl1, Proof (Forall "a" Stroke -> SBool) -> ProofObj
forall a. Proof a -> ProofObj
p Proof (Forall "a" Stroke -> SBool)
le_refl]
Proof (Forall "a" Stroke -> SBool)
le_top <- String
-> (Forall "a" Stroke -> SBool)
-> StepArgs (Forall "a" Stroke -> SBool) Bool
-> TP (Proof (Forall "a" Stroke -> SBool))
forall t.
(Proposition (Forall "a" Stroke -> SBool), SymVal t,
EqSymbolic (SBV t)) =>
String
-> (Forall "a" Stroke -> SBool)
-> StepArgs (Forall "a" Stroke -> SBool) t
-> TP (Proof (Forall "a" Stroke -> SBool))
forall a t.
(Calc a, Proposition a, SymVal t, EqSymbolic (SBV t)) =>
String -> a -> StepArgs a t -> TP (Proof a)
calc String
"a ≤ ⊤" (\(Forall @"a" SBV Stroke
a) -> SBV Stroke
a SBV Stroke -> SBV Stroke -> SBool
forall α. BooleanAlgebra α => α -> α -> SBool
≤ SBV Stroke
forall α. BooleanAlgebra α => α
т) (StepArgs (Forall "a" Stroke -> SBool) Bool
-> TP (Proof (Forall "a" Stroke -> SBool)))
-> StepArgs (Forall "a" Stroke -> SBool) Bool
-> TP (Proof (Forall "a" Stroke -> SBool))
forall a b. (a -> b) -> a -> b
$
\SBV Stroke
a -> [] [SBool] -> TPProofRaw SBool -> (SBool, TPProofRaw SBool)
forall a. [SBool] -> TPProofRaw a -> (SBool, TPProofRaw a)
⊢ SBV Stroke
a SBV Stroke -> SBV Stroke -> SBool
forall α. BooleanAlgebra α => α -> α -> SBool
≤ SBV Stroke
forall α. BooleanAlgebra α => α
т
SBool -> ChainsTo SBool -> ChainsTo SBool
forall a. ChainStep a (ChainsTo a) => a -> ChainsTo a -> ChainsTo a
≡ SBV Stroke
a SBV Stroke -> SBV Stroke -> SBool
forall a. EqSymbolic a => a -> a -> SBool
.== SBV Stroke
forall α. BooleanAlgebra α => α
т SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ SBV Stroke
a SBool
-> Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
-> Hinted SBool
forall a b. HintsTo a b => a -> b -> Hinted a
∵ Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
commut2
TPProofRaw SBool
-> ChainsTo (TPProofRaw SBool) -> ChainsTo (TPProofRaw SBool)
forall a. ChainStep a (ChainsTo a) => a -> ChainsTo a -> ChainsTo a
≡ SBV Stroke
a SBV Stroke -> SBV Stroke -> SBool
forall a. EqSymbolic a => a -> a -> SBool
.== SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ SBV Stroke
forall α. BooleanAlgebra α => α
т SBool -> Proof (Forall "a" Stroke -> SBool) -> Hinted SBool
forall a b. HintsTo a b => a -> b -> Hinted a
∵ Proof (Forall "a" Stroke -> SBool)
ident2
TPProofRaw SBool
-> ChainsTo (TPProofRaw SBool) -> ChainsTo (TPProofRaw SBool)
forall a. ChainStep a (ChainsTo a) => a -> ChainsTo a -> ChainsTo a
≡ SBV Stroke
a SBV Stroke -> SBV Stroke -> SBool
forall a. EqSymbolic a => a -> a -> SBool
.== SBV Stroke
a
SBool -> ChainsTo SBool -> ChainsTo SBool
forall a. ChainStep a (ChainsTo a) => a -> ChainsTo a -> ChainsTo a
≡ ChainsTo SBool
TPProofRaw SBool
forall a. TPProofRaw a
qed
Proof (Forall "a" Stroke -> SBool)
bot_le <- String
-> (Forall "a" Stroke -> SBool)
-> StepArgs (Forall "a" Stroke -> SBool) Bool
-> TP (Proof (Forall "a" Stroke -> SBool))
forall t.
(Proposition (Forall "a" Stroke -> SBool), SymVal t,
EqSymbolic (SBV t)) =>
String
-> (Forall "a" Stroke -> SBool)
-> StepArgs (Forall "a" Stroke -> SBool) t
-> TP (Proof (Forall "a" Stroke -> SBool))
forall a t.
(Calc a, Proposition a, SymVal t, EqSymbolic (SBV t)) =>
String -> a -> StepArgs a t -> TP (Proof a)
calc String
"⊥ ≤ a" (\(Forall @"a" SBV Stroke
a) -> SBV Stroke
forall α. BooleanAlgebra α => α
ⲳ SBV Stroke -> SBV Stroke -> SBool
forall α. BooleanAlgebra α => α -> α -> SBool
≤ SBV Stroke
a) (StepArgs (Forall "a" Stroke -> SBool) Bool
-> TP (Proof (Forall "a" Stroke -> SBool)))
-> StepArgs (Forall "a" Stroke -> SBool) Bool
-> TP (Proof (Forall "a" Stroke -> SBool))
forall a b. (a -> b) -> a -> b
$
\SBV Stroke
a -> [] [SBool] -> TPProofRaw SBool -> (SBool, TPProofRaw SBool)
forall a. [SBool] -> TPProofRaw a -> (SBool, TPProofRaw a)
⊢ SBV Stroke
forall α. BooleanAlgebra α => α
ⲳ SBV Stroke -> SBV Stroke -> SBool
forall α. BooleanAlgebra α => α -> α -> SBool
≤ SBV Stroke
a
SBool -> ChainsTo SBool -> ChainsTo SBool
forall a. ChainStep a (ChainsTo a) => a -> ChainsTo a -> ChainsTo a
≡ SBV Stroke
forall α. BooleanAlgebra α => α
ⲳ SBV Stroke -> SBV Stroke -> SBool
forall a. EqSymbolic a => a -> a -> SBool
.== SBV Stroke
a SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ SBV Stroke
forall α. BooleanAlgebra α => α
ⲳ SBool -> Proof (Forall "a" Stroke -> SBool) -> Hinted SBool
forall a b. HintsTo a b => a -> b -> Hinted a
∵ Proof (Forall "a" Stroke -> SBool)
bound2
TPProofRaw SBool
-> ChainsTo (TPProofRaw SBool) -> ChainsTo (TPProofRaw SBool)
forall a. ChainStep a (ChainsTo a) => a -> ChainsTo a -> ChainsTo a
≡ SBV Stroke
forall α. BooleanAlgebra α => α
ⲳ SBV Stroke -> SBV Stroke -> SBool
forall a. EqSymbolic a => a -> a -> SBool
.== (SBV Stroke
forall α. BooleanAlgebra α => α
ⲳ :: SStroke)
SBool -> ChainsTo SBool -> ChainsTo SBool
forall a. ChainStep a (ChainsTo a) => a -> ChainsTo a -> ChainsTo a
≡ ChainsTo SBool
TPProofRaw SBool
forall a. TPProofRaw a
qed
Proof (Forall "x" Stroke -> Forall "y" Stroke -> SBool)
sdiff_eq <- String
-> (Forall "x" Stroke -> Forall "y" Stroke -> SBool)
-> [ProofObj]
-> TP (Proof (Forall "x" Stroke -> Forall "y" Stroke -> SBool))
forall a.
Proposition a =>
String -> a -> [ProofObj] -> TP (Proof a)
lemma String
"x \\ y = x ⊓ yᶜ" (\(Forall SBV Stroke
x) (Forall SBV Stroke
y) -> SBV Stroke
x SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
\\ SBV Stroke
y SBV Stroke -> SBV Stroke -> SBool
forall a. EqSymbolic a => a -> a -> SBool
.== SBV Stroke
x SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨅ SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧ SBV Stroke
y) []
Proof (Forall "x" Stroke -> Forall "y" Stroke -> SBool)
himp_eq <- String
-> (Forall "x" Stroke -> Forall "y" Stroke -> SBool)
-> [ProofObj]
-> TP (Proof (Forall "x" Stroke -> Forall "y" Stroke -> SBool))
forall a.
Proposition a =>
String -> a -> [ProofObj] -> TP (Proof a)
lemma String
"x ⇨ y = y ⊔ xᶜ" (\(Forall SBV Stroke
x) (Forall SBV Stroke
y) -> SBV Stroke
x SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⇨ SBV Stroke
y SBV Stroke -> SBV Stroke -> SBool
forall a. EqSymbolic a => a -> a -> SBool
.== SBV Stroke
y SBV Stroke -> SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α -> α
⨆ SBV Stroke -> SBV Stroke
forall α. BooleanAlgebra α => α -> α
ﬧ SBV Stroke
x) []
BooleanAlgebraProof -> TP BooleanAlgebraProof
forall a. a -> TP a
forall (f :: * -> *) a. Applicative f => a -> f a
pure BooleanAlgebraProof {
le_refl :: Proof (Forall "a" Stroke -> SBool)
le_refl = Proof (Forall "a" Stroke -> SBool)
le_refl
, le_trans :: Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
le_trans = Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
le_trans
, lt_iff_le_not_le :: Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
lt_iff_le_not_le = Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
lt_iff_le_not_le
, le_antisymm :: Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
le_antisymm = Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
le_antisymm
, le_sup_left :: Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
le_sup_left = Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
le_sup_left
, le_sup_right :: Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
le_sup_right = Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
le_sup_right
, sup_le :: Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
sup_le = Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
sup_le
, inf_le_left :: Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
inf_le_left = Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
inf_le_left
, inf_le_right :: Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
inf_le_right = Proof (Forall "a" Stroke -> Forall "b" Stroke -> SBool)
inf_le_right
, le_inf :: Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
le_inf = Proof
(Forall "a" Stroke
-> Forall "b" Stroke -> Forall "c" Stroke -> SBool)
le_inf
, le_sup_inf :: Proof
(Forall "x" Stroke
-> Forall "y" Stroke -> Forall "z" Stroke -> SBool)
le_sup_inf = Proof
(Forall "x" Stroke
-> Forall "y" Stroke -> Forall "z" Stroke -> SBool)
le_sup_inf
, inf_compl_le_bot :: Proof (Forall "x" Stroke -> SBool)
inf_compl_le_bot = Proof (Forall "x" Stroke -> SBool)
inf_compl_le_bot
, top_le_sup_compl :: Proof (Forall "x" Stroke -> SBool)
top_le_sup_compl = Proof (Forall "x" Stroke -> SBool)
top_le_sup_compl
, le_top :: Proof (Forall "a" Stroke -> SBool)
le_top = Proof (Forall "a" Stroke -> SBool)
le_top
, bot_le :: Proof (Forall "a" Stroke -> SBool)
bot_le = Proof (Forall "a" Stroke -> SBool)
bot_le
, sdiff_eq :: Proof (Forall "x" Stroke -> Forall "y" Stroke -> SBool)
sdiff_eq = Proof (Forall "x" Stroke -> Forall "y" Stroke -> SBool)
sdiff_eq
, himp_eq :: Proof (Forall "x" Stroke -> Forall "y" Stroke -> SBool)
himp_eq = Proof (Forall "x" Stroke -> Forall "y" Stroke -> SBool)
himp_eq
}