(A → B) ↔ (¬A ∨ B)
ɺ໋"ɺ#ʹΑΒͣɺৗʹਅ
߃ਅ τʔτϩδʔ
P ↔ Q := (P → Q) ∧ (Q → P)
Slide 20
Slide 20 text
߃ਅʢτʔτϩδʔʣͷྫ
ྗͱύϫʔ
ຖ͕ΤϒϦσΠ
A → A
ಉҰ
Slide 21
Slide 21 text
߃ਅʢτʔτϩδʔʣͷྫ
ੈͷதʹछྨͷஉ͔͠ډͳ͍
Զ͔ɺԶҎ֎͔
A ∨ ¬A
ഉத
Slide 22
Slide 22 text
߃ਅʢτʔτϩδʔʣͷྫ
(A → B) → ((B → C) → (A → C))
((((A → B) → (¬C → ¬D)) → C) → E) → ((E → A) → (D → A))
¬(A ∧ ¬A) (A ∧ ¬A) → B
((A → B) → A) → A
¬¬A → A
(A → B) ↔ (¬B → ¬A)
¬(A ∧ B) ↔ (¬A ∨ ¬B) ¬(A ∨ B) ↔ (¬A ∧ ¬B)
Slide 23
Slide 23 text
(A → B) → ((B → C) → (A → C))
((((A → B) → (¬C → ¬D)) → C) → E) → ((E → A) → (D → A))
¬(A ∧ ¬A) (A ∧ ¬A) → B
((A → B) → A) → A
¬¬A → A
(A → B) ↔ (¬B → ¬A)
¬(A ∧ B) ↔ (¬A ∨ ¬B) ¬(A ∨ B) ↔ (¬A ∧ ¬B)
߃ਅʢτʔτϩδʔʣͷྫ
ໃ६ രൃ ೋॏ൱ఆআڈ
ύʔεͷ๏ଇ
ରۮ
υɾϞϧΨϯͷ๏ଇ
ਪҠ
ϝϨσΟεͷެཧ
Slide 24
Slide 24 text
߃ਅʢτʔτϩδʔʣͷྫ
߃ਅͳཧࣜແݶʹଘࡏ͢Δ
ˠ༗ݶͷنଇ͔Βಋ͖ग़ͤͳ͍͔ʁ
A → ¬¬A
A → ¬¬¬¬A
A → ¬¬¬¬¬¬A ⋯
ܗࣜతମܥͷछྨ
w ήϯπΣϯྲྀ
w ࣗવԋ៷ʜৗͷਪʹ͍ۙɺެཧͳ͠ɺਪنଇ͕ଟ͍
w γʔΫΤϯτܭࢉʜެཧ͕̍ͭʢಉҰੑʣɺਪنଇ͕ଟ͍
w ώϧϕϧτྲྀ
w ެཧ͕ଟ͍ɺਪنଇ͕̍ͭʢϞʔμεϙωϯεʣ
w ܗࣜతମܥ͔Βಋग़͞ΕΔཧࣜʢఆཧʣɺ߃ਅʢ݈શੑʣ
Slide 28
Slide 28 text
ήϯπΣϯྲྀɾࣗવԋ៷
A B
A ∧ B
A ∧ B
A
A ∧ B
B
A
A ∨ B
B
A ∨ B
A ∨ B C C
C
A → B A
B
B
A → B
⊥
¬A
A ¬A
⊥
⊥
A
⋮
[A]
¬¬A
A
⋮
[A]
⋮
[B]
⋮
[A]
<">ʜ"ͷԾఆΛด͡Δ
Slide 29
Slide 29 text
ήϯπΣϯྲྀɾࣗવԋ៷ʢγʔΫΤϯτܭࢉ෩ʣ
Γ ⊢ A Γ ⊢ B
Γ ⊢ A ∧ B
Γ ⊢ A ∧ B
Γ ⊢ A
Γ ⊢ A ∧ B
Γ ⊢ B
Γ ⊢ A
Γ ⊢ A ∨ B
Γ ⊢ B
Γ ⊢ A ∨ B
Γ ⊢ A ∨ B Γ, A ⊢ C Γ, B ⊢ C
Γ ⊢ C
Γ ⊢ A → B Γ ⊢ A
Γ ⊢ B
Γ, A ⊢ B
Γ ⊢ A → B
Γ, A ⊢ ⊥
Γ ⊢ ¬A
Γ ⊢ A Γ ⊢ ¬A
Γ ⊢ ⊥
Γ ⊢ ⊥
Γ ⊢ A
Γ ⊢ ¬¬A
Γ ⊢ A
A ∈ Γ
Γ ⊢ A
ϵ⊢"ʜཧࣜͷ༗ݶྻϵ͔Βɺཧࣜ"͕ূ໌Ͱ͖Δ
Slide 30
Slide 30 text
ώϧϕϧτྲྀ A → B A
B
B → (A → B)
(A → (B → C)) → ((A → B) → (A → C))
¬¬A → A
A → A ∨ B ⊥ → A
B → A ∨ B
(A → C) → ((B → C) → ((A ∨ B) → C))
A ∧ B → A
A ∧ B → B
A → (B → (A ∧ B))
ਪنଇ
ϞʔμεϙωϯεͷΈ
(A → ¬A) → ¬A
¬A → (A → B)
ʲ࠶ܝʳώϧϕϧτྲྀ
B → (A → B)
(A → (B → C)) → ((A → B) → (A → C))
A → A ∨ B
B → A ∨ B
(A → C) → ((B → C) → ((A ∨ B) → C))
A ∧ B → A
A ∧ B → B
A → (B → (A ∧ B))
A → B A
B
ਪنଇ
ϞʔμεϙωϯεͷΈ
¬¬A → A
⊥ → A
(A → ¬A) → ¬A
¬A → (A → B)
Slide 40
Slide 40 text
ʲ࠶ܝʳώϧϕϧτྲྀ
(A → C) → ((B → C) → ((A ∨ B) → C))
A → B A
B
A → A ∨ B
B → A ∨ B
A ∧ B → A
A ∧ B → B
A → (B → (A ∧ B))
ਪنଇ
ϞʔμεϙωϯεͷΈ
¬¬A → A
⊥ → A
(A → ¬A) → ¬A
¬A → (A → B)
(A → (B → C)) → ((A → B) → (A → C))
A ∨ B := ¬A → B := ¬B → A
A ∧ B := ¬(A → ¬B) := ¬(B → ¬A)
¬A := A → ⊥
/05&ˮ
˭
ɺˠͱ˵ͷΈΛͬͯهड़Ͱ͖Δ
B → (A → B)
Slide 41
Slide 41 text
ίϯϏωʔλཧ
Kxy = x
Sxyz = xz(yz)
I = SKK
K : X → Y → X
S : (Z → Y → X) → (Z → Y) → Z → X
I : X → X
ͷؔԽ ҰൠԽ
3FBEFSϞφυͷQVSF
Ϟʔμεϙωϯε
ͷҰൠԽ
3FBEFSϞφυͷBQ
((A → B) → A) → A
A ∨ ¬A
¬¬A → A
¬(A ∧ B) → (¬A ∨ ¬B)
(A → B) → (¬A ∨ B)
(¬B → ¬A) → (A → B)
ഉத
ೋॏ൱ఆআڈ
ରۮ ൱ఆআڈWFS
υɾϞϧΨϯͷ๏ଇ 㱸
ؚ࣮࣭ҙ
ύʔεͷ๏ଇ
/05&
ʮٯʯ߃ਅ
4XJGUͰ࣮Ͱ͖ͳ͍߃ਅͳཧࣜ
ݹయཧʹ͓͚Δʮˠʯ
A → B
Bool
true
false
USVFPSGBMTF
௨Γ͔͠ͳ͍
Slide 54
Slide 54 text
4XJGUϓϩάϥϛϯάʹ͓͚Δʮˠʯ
Types
Int
Bool
(A) -> B
(Int)->Bool
৽͍͠ܕ͕
ߏ͞ΕΔ
Slide 55
Slide 55 text
ݹయཧ ϒʔϧཧ
ˣ
ߏతཧ
؍ओٛཧ
ഉதೋॏ൱ఆআڈ͕
Γཱͨͳ͘ͳΔ
Slide 56
Slide 56 text
؍ओٛཧ
⇕
4XJGUϓϩάϥϛϯά
Slide 57
Slide 57 text
؍ओ໋ٛཧʹ͓͚Δ
ࣗવԋ៷
⇕
୯७ܕ͖ϥϜμܭࢉ
ؔܕϓϩάϥϛϯάͷཧతج൫
Slide 58
Slide 58 text
ܕͳ͠ϥϜμܭࢉʢུ֓ʣ
t ::= x
| λx . t
| t t
ʢมʣ
ʢλநɺؔఆٛʣ
ʢؔద༻ʣ
λx . x λx . (λy . x) (λx . xx)(λx . xx)
λ߲ͷྫ
ϥϜμ߲
Slide 59
Slide 59 text
ܕ͖ϥϜμܭࢉʢུ֓ʣ
T ::= X
| T → T
ʢܕมʣ
ʢؔܕʣ
t ::= x
| λ(x : T) . t
| t t
ʢมʣ
ʢλநʣ
ʢؔద༻ʣ
: T
ϥϜμ߲
ܕɹ
Slide 60
Slide 60 text
ܕ͖ϥϜμܭࢉʢུ֓ʣ
A ∈ Γ
Γ ⊢ A
Γ, A ⊢ B
Γ ⊢ A → B
Γ ⊢ A → B Γ ⊢ A
Γ ⊢ B
(x : A) ∈ Γ
Γ ⊢ x : A
Γ, x : A ⊢ t : B
Γ ⊢ λ(x : A) . t : A → B
Γ ⊢ t12
: A → B Γ ⊢ t1
: A
Γ ⊢ t12
t1
: B
ܕ͚نଇͷʮܕͷΈʯʹ͢Δͱʜ
ࣗવԋ៷ͱ
ಉ
λ߲ͷܕ͚نଇ
ม Еந
ؔద༻
((A → B) → A) → A
A ∨ ¬A
¬¬A → A
¬(A ∧ B) → (¬A ∨ ¬B)
(A → B) → (¬A ∨ B)
(¬B → ¬A) → (A → B)
ഉத
ೋॏ൱ఆআڈ
ରۮ ൱ఆআڈWFS
υɾϞϧΨϯͷ๏ଇ 㱸
ؚ࣮࣭ҙ
ύʔεͷ๏ଇ
ʲ࠶ܝʳ؍ओٛཧͰΓཱͨͳ͍ཧࣜ
/05&
ʮٯʯ߃ਅ
Slide 74
Slide 74 text
¬¬(((A → B) → A) → A)
¬¬(A ∨ ¬A)
¬¬(¬¬A → A)
¬¬(¬(A ∧ B) → (¬A ∨ ¬B))
¬¬((A → B) → (¬A ∨ B))
¬¬((¬B → ¬A) → (A → B))
؍ओٛཧͰ߃ਅͳཧࣜ
ͯ͢
؍ओٛཧ
ͰΓཱͭ
Slide 75
Slide 75 text
¬¬((A → B) → A) → ¬¬A
¬¬(A ∨ ¬A)
¬¬¬¬A → ¬¬A
¬¬¬(A ∧ B) → ¬¬(¬A ∨ ¬B)
¬¬(A → B) → ¬¬(¬A ∨ B)
¬¬(¬B → ¬A) → ¬¬(A → B)
Tautologies in Intuitionistic Logic
Using
helper rule
¬¬(A → B)
¬¬A → ¬¬B
֊໋ཧ
A1
∧ A2
∧ ⋯ ≅ ∀X . X
A1
∨ A2
∨ ⋯ ≅ ∃X . X
(A1
→ C) ∧ (A2
→ C) ∧ ⋯ ≅ ∀X . (X → C)
ʮ໋ʯͷશশྔԽ㱼ɺଘࡏྔԽ㱽
֊ड़ޠཧͷʮ߲ʯͷྔԽͱҟͳΔͷͰҙ
㱸ͱ㱼
㱹ͱ㱽
Slide 85
Slide 85 text
֊໋ཧͷਪنଇ
∀X . A(X)
A(T)
A(Y)
∀X . A(X)
∃X . A(X) ∀X . (A(X) → C)
C
A(T)
∃X . A(X)
ɹɹɹʹࢸΔԋ៷ͷԾఆͯ͢ͱɹɹɹͷதͰ
ࣗ༝มͱͯ͠ΘΕ͍ͯͳ͍ܕม
Y A(Y) A(X)
ɹɹʹ
ೖՄೳͳܕ
T A
Slide 86
Slide 86 text
(A1
→ C) ∧ (A2
→ C) ∧ ⋯ ≅ ∀X . (X → C)
let intToBool: (Int) -> Bool = { ... }
let floatToBool: (Float) -> Bool = { ... }
let strToBool: (String) -> Bool = { ... }
// ... ͯ͢ͷܕʹ͍ͭͯಉ͡Α͏ͳ࣮Λߦ͍͍ͨ
// Swift ͷδΣωϦΫεʢଟ૬ؔʣΛ͏ͱɺ
// ্هͷॏෳίʔυΛ1ͭʹ·ͱΊͯநԽͰ͖Δɻ
func xToBool(_ x: X) -> Bool { ... }
Slide 87
Slide 87 text
˲ͱ˳ͷؔ
(A1
∨ A2
) → C ≅ (A1
→ C) ∧ (A2
→ C)
(∃X . X) → C ≅ ∀X . (X → C)
(A1
∨ A2
∨ ⋯) → C ≅ (A1
→ C) ∧ (A2
→ C) ∧ ⋯
(A → C) → ((B → C) → ((A ∨ B) → C))
ࢀߟɿ
Slide 88
Slide 88 text
∀X . (X → C) ≅ (∃X . X) → C
func forallXToBool(_ x: X) -> Bool {
anyToBool(x)
}
/// - Note: `∃X.X` is isomorphic to `Any`.
func anyToBool(_ any: Any) -> Bool {
forallXToBool(any)
}
Slide 89
Slide 89 text
∀(X <: P) . (X → C) ≅ (∃(X <: P) . X) → C
protocol P {
var value: String { get }
}
struct AnyP: P {
let value: String
}
func forallXProtocolToBool(_ x: X) -> Bool { // Generic func
protocolToBool(x)
}
func protocolToBool(_ p: P) -> Bool { // Protocol func (dynamic)
forallXProtocolToBool(AnyP(value: p.value))
}
Slide 90
Slide 90 text
∀(X <: P) . (X → C) ≅ (∃(X <: P) . X) → C
// Reverse Opaque Result Type (static)
func someProtocolToBool(_ p: some P) -> Bool {
forallXProtocolToBool(p)
}
// ERROR: Isn’t supported yet in Swift 5.1
τϙεʹσΧϧτดݍʴ෦ରྨࢠ
{a ∈ A|p(a)}
A
τϙε
Ω
true
1
unit
m
p
p.b.
Slide 122
Slide 122 text
τϙεʹσΧϧτดݍʴ෦ରྨࢠ
{a ∈ A|p(a)}
A
τϙε
Ω
true
1
unit
m
෦ର
4VCPCKFDU
Ϟϊࣹ
෦ରྨࢠ
4VCPCKFDU$MBTTJpFS
ྫɿτϙε͕ू߹ͷݍͷͱ͖
Њ\USVF
GBMTF^
p
p.b.
Ҿ͖͠
1VMMCBDL
QC
ಛੑࣹ
"্ͷड़ޠ
Slide 123
Slide 123 text
ࢀߟจݙʢཧֶɺϥϜμܭࢉɺܕγεςϜʣ
w ʰܭࢉཧֶʱߨٛࢿྉُࢁٛ
w ΧϦʔʹϋϫʔυಉܕରԠ8JLJQFEJB
w ΧϦʔɾϋϫʔυରԠͱ؍ओٛཧͷ
ҙຯೖా෦ढ़հ
w ؍ओٛཧͷটরҪҰ
w ֶಉձފా
w $MBTTJDBM-PHJDJO)BTLFMM
w "5ZQF4ZTUFN'SPN4DSBUDIr
3PCFSU8JENBOO
w "4IPSU*OUSPEVDUJPOUP4ZTUFNT'
BOE'Т1BCMP/PHVFJSB
w ཧͱܭࢉͷ͘͠ΈԮ୩ণݾɺ࡚ਅ
w ใՊֶʹ͓͚Δཧখ
w ϓϩάϥϜҙຯԣจ
w ܕγεςϜೖ 5B1-
1JFSDF
Slide 124
Slide 124 text
ࢀߟจݙʢݍɺτϙεʣ
w ݍษڧձࢿྉதଜߊҰ
w ᐻࢁਖ਼ͷΩϚΠϥࣂҭه
w ֶऀͷͨΊͷݍೖాਅੜ
w ݍʹΑΔϓϩάϥϛϯάͱཧ
!TIJBUTVNBU
!@@JOU
w τϙεBMHE
w 5IF%BSL4JEFPG'PSDJOH
w 0MJWJB$BSBNFMMPTXFCTJUF
w "O*OUSPEVDUJPOUP5PQPT5IFPSZ
w ,SJQLFr+PZBMҙຯ;JQIJM"MFTIMBT
w (SPUIFOEJFDL5PQPTͷೖ
!LSJQLFKPZBM
w ϓϩάϥϛϯάݴޠͷҙຯͱݍ୩
ਅਓ
w τϙεͱߴ֊ཧ5BJDIJ6FNVSB
w ݍ"XPEFZ
w ݍʹΑΔཧֶʕߴ֊ཧͱτϙεਗ਼
ਫٛ
w ݍͷา͖ํຊධࣾ